Apostila 04 - oficina da pesquisa

Propaganda
FACULDADE PITÁGORAS
DISCIPLINA: ARQUITETURA DE COMPUTADORES
Prof. Ms. Carlos José Giudice dos Santos
[email protected]
www.oficinadapesquisa.com.br
ESQUEMA DE UM COMPUTADOR
Uma Unidade Central de Processamento (CPU –
Central Processing Unit) é a parte principal de um
computador, sendo responsável pelo execução de
programas que fazem do computador uma máquina
extremamente versátil.
É importante notar que a CPU é um circuito
eletrônico chamado processador. Entretanto,
dentro de um computador existem vários
processadores (em placas de comunicação,
gráficas e de som, em discos rígidos, etc). O que
chamamos de CPU é o principal processador do
computador, e que controla todos os outros.
ESQUEMA INTERNO DE UM COMPUTADOR
UC Unidade de Controle (Control Unit)
ULA Unidade de Lógica e Aritmética (Aritmethic Logic Unit)
REGS Registradores (Registrators)
Dispositivos de E/S Dispositivos de Entrada/Saída
(I/O Devices Input/Output Devices)
CPU
Para informações mais detalhadas, recomendo
uma visita ao site do Laércio Vasconcelos:
http://www.laercio.com.br
Barramento BUS
BARRAMENTOS DE UM COMPUTADOR
Uma CPU só se comunica com outros dispositivos por
meio de barramentos. De acordo com Vasconcelos
(2003), “barramentos são conjuntos de sinais digitais
através dos quais o processador transmite e recebe
dados de circuitos externos”.
Em um computador existem basicamente 3 tipos de
barramentos:
• Barramento do processador
• Barramento de memória
• Barramentos de E/S
BARRAMENTO DO PROCESSADOR - I
Conhecido também como barramento local (Local Bus)
ou barramento de sistema, é aquele que faz contato
direto com o Chipset (dividido em North Bridge e
South Bridge), que estudaremos mais tarde. É através
do Chipset que a CPU se comunica com a memória
(Barramento de Memória) e com outros dispositivos
(Barramentos de E/S, por exemplo, ISA, EISA, PCI,
AGP, AMR, IDE, SCSI, USB, Firewire, entre outros).
O Barramento do Processador é dividido em três
grupos, a saber: o Barramento de Dados, o
Barramento de Endereços e o Barramento de
Controle. Um esquema destes barramentos pode ser
conferido no próximo slide.
BARRAMENTO DO PROCESSADOR - II
BARRAMENTO DO PROCESSADOR - III
Barramento de Endereços: de acordo com
Vasconcelos (2003), este é o barramento através do
qual a CPU especifica de qual interface ela vai
receber ou transmitir dados, sendo também utilizado
para endereçar memória. Os processadores modernos
costumam ter de 36 a 40 bits para endereçamento,
suficientes para endereçar de 64 GB a 1 TB de
memória física. Utiliza modo de transmissão Simplex.
Barramento de Dados: utilizado para receber ou
enviar dados, funciona em modo de transmissão HalfDuplex (enviam e recebem, mas não simultanemente).
Os processadores atuais possuem barramentos de
dados de 64 a 128 bits.
BARRAMENTO DO PROCESSADOR - IV
Barramento de Controle: de acordo com Vasconcelos
(2003), este barramento contém vários sinais que são
necessários ao funcionamento do processador. Entre
outras atribuições, tem a função de controlar o
tráfego do barramento de dados. Alguns dos seus
sinais são de saída, outros são de entrada, outros são
bidirecionais. Existem sinais para indicação do tipo de
operação (leitura ou escrita), sinais se especificação
de destino/origem de dados (memória ou E/S), sinais
de sincronismo, sinais de interrupção, sinais que
permitem a outro dispositivo tomar o controle do
barramento, sinais de clock, sinais de programação e
diversos outros.
BARRAMENTO DE MEMÓRIA
Em CPUs antigas, a memória era ligada
diretamente ao processador, e funcionava em
sincronia. Com o crescimento impressionante
de velocidades das CPUs, a memória passou a
se comunicar com a CPU por meio do Chipset,
de forma assíncrona (VASCONCELOS, 2003).
Em geral, o barramento de memória é utilizado
também para trafegar dados, por meio de uma
técnica chamada de multiplexação (que permite
que um único canal seja compartilhado por mais
de um sinal).
BARRAMENTOS DE E/S - I
São barramentos utilizados para a CPU se comunicar
com placas ou interfaces, podendo (ou não) ser
acessados por meio de slots. Os mais comuns são:
AGP: Lançado pela Intel em 1997, o Acelerated
Graphics Port foi criado para acelerar o desempenho
de placas de vídeo em PCs equipados com o recém
lançado Pentium II (ver figura) .
Este padrão evoluiu para o AGP
8x e o AGP Pro. Começa a perder
terreno para o Fast PCI.
Fonte:
http://www.laercio.com.br/artigos/hardware/hard013/hard-013.htm
BARRAMENTOS DE E/S - II
PCI: O Peripheral Component Interconnect é o padrão
mais utilizado para barramento de E/S e para slots de
expansão. Utilizando estes slots, pode-se conectar
placas de vídeo, placas aceleradoras gráficas, placas
de captura de vídeo, placas de rede, placas de
interface (SCSI, por exemplo), etc. Em geral, as
interfaces para controle de disco rígido e para
comunicação USB utilizam este
tipo de barramento, apesar de não
usarem slots. Este padrão evoluiu
para o Fast PCI. Ver figura .
Fonte:
http://www.laercio.com.br/artigos/hardware/hard013/hard-013b.htm
FUNCIONAMENTO DE UMA CPU – CICLO
DE BUSCA – DECODIFICAÇÃO - EXECUÇÃO
Toda CPU funciona de acordo com um ciclo de
sete estágios, a saber:
1. Trazer a próxima instrução (no caso inicial, a
primeira instrução) da memória para o registrador
de instruções do processador;
2. Atualizar o Contador de Programa (PC Program
Counter ou IP Instruction Pointer) para indicar
o endereço de memória que contém a próxima
instrução;
3. Decodificar a instrução;
FUNCIONAMENTO DE UMA CPU – CICLO
DE BUSCA – DECODIFICAÇÃO - EXECUÇÃO
4.
Se a instrução necessitar de operandos,
determinar os endereços de memória que contém
todas as palavras necessárias à execução da
instrução;
5. Trazer as palavras para os registradores de dados
6. Executar a instrução;
7. Voltar ao primeiro estágio do ciclo e continuar a
executar esse ciclo até o término do programa.
ARQUITETURAS DE CPU: RISC E CISC (I)
RISC é uma sigla que significa Reduced Instruction
Set Computer, que pode ser traduzido como Conjunto
(ou Tabela) Reduzido de Instruções de Computador. A
arquitetura RISC resulta em processadores com
poucas instruções (em geral, menos de 50), pequenas,
mas extremamente rápidas.
CISC significa Complex Instruction Set Computer, ou
Conjunto Complexo de Instruções de Computador. A
arquitetura CISC resulta em processadores com
muitas instruções (em geral, mais de 150), grandes,
mas comparativamente mais lentas.
ARQUITETURAS DE CPU: RISC E CISC (II)
Qual arquitetura é melhor? Esta discussão é muito
parecida com discussões futebolísticas. Quem é
melhor? Brasil ou Argentina? Cruzeiro ou Atlético?
São Paulo ou Coríntians?
Com certeza, a resposta será diferente dependendo
da pessoa a quem você perguntar, mas vamos ver
algumas características.
Um processador RISC tem compromisso com a
velocidade de processamento. São poucas instruções:
elas são pequenas, mas são muito, muito rápidas. Dá
muito mais trabalho programar em processadores
RISC. O código de máquina usado nesse tipo de
arquitetura é traduzido.
ARQUITETURAS DE CPU: RISC E CISC (III)
Um processador CISC tem compromisso com a
facilidade de implementação de programas. São
muitas instruções, que são geralmente grandes e
lentas, mas dá muito menos trabalho programar, pois
o código de máquina usado nessa arquitetura é
interpretado.
Processadores RISC são os preferidos em
workstations, mainframes e supercomputadores.
Processadores CISC são os preferidos de
microcomputadores. Ultimamente, os projetistas
estão construindo processadores híbridos, usando as
duas arquiteturas. Esta tendência começou com o 486
e continua evoluindo, como veremos em breve.
ESTRATÉGIAS PARA PROJETOS DE CPU’s (I)
Uma CPU deve ser o mais rápida possível. Quando
pensamos o que fazer para que uma CPU seja mais
rápida, a resposta mais provável é aumentar o seu
clock, afinal de contas, quanto maior o clock de
uma CPU, menor o tempo de ciclo, o que resulta em
um maior número de instruções executadas por
segundo.
Uma das maneiras de se medir a velocidade de
uma CPU é em MIPS (Milhões de Instruções por
Segundo). Assim, um computador de 500 MIPS é
com certeza cinco vezes mais rápido que um de
100 MIPS.
ESTRATÉGIAS PARA PROJETOS DE CPU’s (II)
O problema de aumentar o clock é a quantidade de
energia que se gasta: quanto maior o clock, maior será
a energia gasta pela CPU, e maior também será a
dissipação de calor. Então só o aumento do clock não é
a solução para aumentar a velocidade de
processamento. Além disso, atualmente estamos
muito perto do limite máximo de clock que a atual
tecnologia de construção de microprocessadores
comerciais pode suportar. Hoje, o limite teórico é
algo próximo de 5 GHz, mas são raríssimos
processadores que superam 4 GHz na prática.
Vamos ver que estratégias os projetistas costumam
utilizar para contornar esse problema:
ESTRATÉGIAS PARA PROJETOS DE CPU’s (III)
1. Todas as instruções devem ser executadas
diretamente
por
hardware:
instruções
executadas apenas por hardware são mais simples
e extremamente rápidas. Por este motivo, são a
base da arquitetura RISC. Na arquitetura CISC, o
fato de ter uma fase de interpretação de
instruções é um fator a mais para a demora no
processamento. Se um processador CISC puder
subdividir suas grandes instruções em instruções
menores que possam ser processadas diretamente
em hardware (em um núcleo RISC), consegue-se
aumentar a velocidade de processamento.
ESTRATÉGIAS PARA PROJETOS DE CPU’s (IV)
2. Aumentar o número de registradores:
uma vez que o acesso à memória principal é
muito lento, se você puder aumentar o
número de registradores, o processamento
ficará muito mais rápido. Como existe um
limite para isso, a solução encontrada foi
criar uma área de memória de acesso
rápido dentro do próprio processador. Esta
área de memória é conhecida como CACHE.
Vamos
estudar
em
detalhes
o
funcionamento dela na próxima unidade.
ESTRATÉGIAS PARA PROJETOS DE CPU’s (V)
4. Otimizar o código de máquina: se toda
instrução que necessitasse de operandos
conseguisse ser executada buscando esses
operandos nos registradores e a eles
retornando, a execução seria muito rápida.
Assim, deve-se evitar instruções que façam
acesso à memória principal. Esse princípio diz
que apenas as instruções LOAD (carregar em um
registrador o conteúdo de um endereço de
memória) e STORE (armazenar na memória o
conteúdo de um registrador) devem referenciar
a memória. Esta estratégia é um dos princípios
da arquitetura RISC.
ESTRATÉGIAS PARA PROJETOS DE CPU’s (VI)
5. Maximizar a
taxa de
execução
de
instruções: nos primeiros processadores, uma
instrução só podia ser executada quando a
instrução anterior já tivesse acabado. Se você
puder executar mais de uma instrução ao mesmo
tempo, a velocidade de processamento aumenta.
O nome para isso é paralelismo (a nível de
instrução e a nível de processador). Pipelining,
arquitetura
superescalar,
processamento
matricial, processamento vetorial, multithreading
são algumas destas implementações que permitem
realizar esta façanha. É o que veremos em
seguida.
PIPELINING
Pipelining é o nome que se dá ao paralelismo ao nível de
instrução. Sua implementação se dá através de uma estrutura
chamada pipeline. Basicamente, é uma divisão de tarefas que
permite a execução de mais de uma instrução:
Tempo Tempo Tempo Nesse pipeline
(típico do 486), a
cada ciclo de clock
uma instrução pode
ser completada (em
tese), o que pode
resultar em um
ganho de velocidade
5 vezes maior.
ARQUITETURA SUPERESCALAR (I)
Se um pipeline é bom, dois (ou mais) pipelines devem
funcionar melhor ainda. Este é o princípio da arquitetura
superescalar. A partir do processador Pentium, a Intel
passou a utilizar este tipo de estrutura:
O pipeline de 5 estágios do 486 (slide anterior) as vezes
demorava ao executar alguma instrução, o que atrasava toda
a fila. No Pentium, os projetistas fizeram um pipeline para
instruções mais complexas (demoradas) e um outro para
instruções mais simples (princípio da arquitetura RISC).
ARQUITETURA SUPERESCALAR (II)
Com o tempo percebeu-se que o estágio 4 (S4 execução de
instruções) era o gargalo de todo o processo. Quando não havia
um par de instruções compatíveis, o processamento parava em
S4 até que uma instrução mais complexa fosse completada.
Para resolver isso, no Pentium II em diante, o pipeline foi
modificado, conforme figura abaixo:
O estágio 4 (S4) passou a contar com várias ULAs para não
permitir que instruções inacabadas atrasassem a fila.
Variações deste tipo de pipeline são utilizadas até hoje.
MULTITHREADING - I
A Multithreading é uma técnica que permite aumentar
a velocidade de processamento de uma CPU, e o
suporte a esta técnica deve estar previsto no SO.
Threads são processos que possuem a capacidade de
se dividirem em dois ou mais processos concorrentes
que podem ser executados simultaneamente.
Se o processador possuir um único núcleo, essa
divisão ocorre de maneira virtual (multithreading
virtual), em geral por linha de execução ou por
chaveamento, dando a impressão de que dois
processos estão sendo executados simultaneamente.
MULTITHREADING - II
O Multithreading virtual foi uma tecnologia criada
pela Intel com o nome de Hyper-Threading (HT). Esta
tecnologia permite simular dois processadores
virtuais em um único processador físico (de apenas um
núcleo). Foi introduzida primeiramente no Xeon
(mercado de servidores) e depois no Pentium 4.
O Multithreading real acontece quando um
processador possui mais de um núcleo físico. Nesse
caso, dois (ou mais) processos podem realmente ser
executados simultaneamente. Um bom exemplo de
aplicação dessa técnica são em jogos: um processo
pode atualizar a imagem enquanto outro processo
atualiza o áudio do jogo.
MULTITHREADING - II
O Multithreading virtual foi uma tecnologia criada
pela Intel com o nome de Hyper-Threading (HT). Esta
tecnologia permite simular dois processadores
virtuais em um único processador físico (de apenas um
núcleo). Foi introduzida primeiramente no Xeon
(mercado de servidores) e depois no Pentium 4.
O Multithreading real acontece quando um
processador possui mais de um núcleo físico. Nesse
caso, dois (ou mais) processos podem realmente ser
executados simultaneamente. Um bom exemplo de
aplicação dessa técnica são em jogos: um processo
pode atualizar a imagem enquanto outro processo
atualiza o áudio do jogo.
ARQUITETURA DE INSTRUÇÕES - I
A motivação para o uso do poder de processamento
paralelo é a demanda cada vez maior de aplicações que
necessitam de grande poder de processamento.
Utilização militar (projeto de aeronaves, submarinos e
armas nucleares), pesquisas científicas (por exemplo,
sequenciamento genético), simulações aerodinâmicas,
prospecção mineral e petrolífera, modelagem
climática, sistemas especialistas e de inteligência
artificial são algumas das aplicações que necessitam
de grande poder de processamento.
Flynn propôs uma classificação de arquiteturas
paralelas de computadores com base na arquitetura
de instruções: SISD, SIMD, MISD e MIMD.
ARQUITETURA DE INSTRUÇÕES - II
SISD (Single Instruction Single Data): nesta classe,
um único fluxo de instruções opera sobre um único
fluxo de dados. É a conhecida máquina de von
Neumann, sendo o modelo de computador usado da
Segunda
Guerra
Mundial
até
os
primeiros
microprocessadores (até o Pentium, inclusive).
Apesar dos aplicativos estarem organizados como uma
série de instruções sequenciais, elas podem ser
executadas de forma sobreposta em vários estágios
usando um pipeline. Arquiteturas SISD possuem
apenas uma Unidade de Controle, mas podem ter mais
de uma unidade funcional.
ARQUITETURA DE INSTRUÇÕES - III
Disponível em:
http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia
ARQUITETURA DE INSTRUÇÕES - IV
SIMD (Single Instruction Multiple Data): nesta classe,
uma única instrução pode ser aplicada simultaneamente
sobre um conjunto de dados. Os aplicativos ainda
seguem uma organização sequencial, mas o acesso a
múltiplos dados é facilitado
pela organização da
memória em diversos módulos.
Este tipo de arquitetura de instruções é ideal para
trabalhar com aplicações gráficas, em que um grande
volume de dados deve ser modificado por uma única
instrução. Ainda há apenas uma Unidade de Controle,
mas existem diversas unidades funcionais. Corresponde
aos processadores vetoriais e matriciais. O Pentium
MMX e o AMD K6 são os primeiros representantes
desta classe.
ARQUITETURA DE INSTRUÇÕES - V
Disponível em:
http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia
ARQUITETURA DE INSTRUÇÕES - VI
MISD (Multiple Instruction Single Data):
nesta classe, um conjunto de instruções pode
ser aplicado sobre um único dado.
Sob o ponto de vista tecnológico, esta classe
de arquitetura de instrução de Flynn não tem
aplicação prática, razão pela qual não existem
computadores que utilizem esta arquitetura.
ARQUITETURA DE INSTRUÇÕES - VII
Disponível em:
http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia
ARQUITETURA DE INSTRUÇÕES - VIII
MIMD (Multiple Instruction Multiple Data): nesta
classe, um múltiplo conjunto de instruções são
aplicados sobre múltiplos conjuntos de dados.
Sob o ponto de vista tecnológico, esta classe de
arquitetura de instrução de Flynn é representada por
arquiteturas massivamente paralelas, com servidores
multiprocessados ou redes de estações (sistemas
distribuídos). Neste caso, várias unidades de controle
comandam suas unidades funcionais, mas com um
certo grau de interação entre as máquinas. Qualquer
grupo de máquinas atuando como uma unidade se
encaixa
nesta
categoria.
Assim,
os
atuais
processadores multi-núcleos estão nesta categoria.
ARQUITETURA DE INSTRUÇÕES - IX
Disponível em:
http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia
Download