Upload
truongtu
View
222
Download
4
Embed Size (px)
Citation preview
O Nível ISA
Modelo de programaçãoArquitecturas CISC e RISCIntrodução ao IA-32 da Intel
Arquitectura de Computadores (2008/2009): O Nível ISA 74
Nível ISA (Instruction Set Architecture)
�Tipos de dados� Inteiros (1, 2, 4 ou 8 bytes)
�Servem também para representar endereços
� Números em vírgula flutuante (4, 8 ou 10 bytes)
� Não tem dados estruturados, como vectores�Apenas dados reservados (alocados) continuamente em memória
�Operações� Aritmética sobre dados em registos ou memória
� Transferir dados entre registos e memória�Load – carregar dados de memória para um registo
�Store – guardar o conteúdo de um registo em memória
� Controlo do fluxo de execução�Saltos condicionais e incondicionais
�Chamadas a subrotinas
Arquitectura de Computadores (2008/2009): O Nível ISA 75
CPU
Máquina virtual
PC
Registos
Memória
Código máquina
do programa
Dados do programa
Dados do S.O.
Endereços
Dados
Instruções
Pilha
Códigos de
Condição
(flags)
Arquitectura de Computadores (2008/2009): O Nível ISA 76
Sincronizar os circuitos
�Os circuitos funcionam ao ritmo de um relógio:
�Marca com impulsos eléctricos o ritmo de funcionamento de todos os componentes (transições de estado)
�Marca quando os componentes podem interactuar
�Garante que os vários sinais (bits) são enviados e recebidos no instante devido
�Ex: um componente não lê o que está no BUS antes que algo válido lá tenha sido colocado
�O relógio gera um determinado número de impulsos por segundo: ciclos/segundo ou frequência (Hz)
Arquitectura de Computadores (2008/2009): O Nível ISA 77
Relógio vs velocidade do computador
�A frequência do relógio não é o único factor na velocidade de funcionamento de um computador!
�O tempo de execução de determinado programa depende de:
� Número de instruções (tamanho do programa)
� Tempo de execução de cada instrução (número de ciclos de relógio)
� Tempos de espera pela memória
� Tempos de espera pelas Entradas/Saídas
Arquitectura de Computadores (2008/2009): O Nível ISA 78
Ordem de tempos de acesso
�CPU
� cada instrução � 1, 2, … ciclos de relógio
�Memória
� cada acesso � dezenas de ciclos
�Periféricos
� cada operação de Entrada/Saída (I/O) � muitas dezenas, centenas, ou mais, de ciclos
Arquitectura de Computadores (2008/2009): O Nível ISA 79
Tempo de execução das instruções
�Um programa pode executar mais rápido se o CPU o executar em menos tempo:
Tempo = nº de instruções x nº de ciclos x tempo
programa instrução ciclo
�Menor Tempo se:
�Menos instruções � o CPU implementa as mais variadas operações de que o programa necessita
� Instruções mais rápidas � demoram menos ciclos e/ou cada ciclo pode ser mais curto (mais Hz)
Arquitectura de Computadores (2008/2009): O Nível ISA 80
Complexidade dos CPU
�A complexidade dos CPU é influenciada por:� Tipos de instruções
� Número de operandos
� Tipos de operandos
�Modos de endereçamento dos operandos
� etc.
�O desempenho do CPU é influenciado por essa complexidade:� Descodificação mais complexa (recurso a micro-código)
� Instruções de tamanho variável
� Resolução do endereço dos operandos e obtenção do seus valores mais complexa/demorada
�Mais complexidade � mais circuitos� CPU maior, mais lento, consumindo mais energia, etc…
Arquitectura de Computadores (2008/2009): O Nível ISA 81
Até aos anos 70/80
�A abordagem foi suportar directamente no hardware (no CPU):
�Os mais variados tipos de instruções que os programas podem necessitar
�As mais variadas operações aritméticas e lógicas…
� Cada instrução suporta os mais variados operandos que o programa pode necessitar
�Registos, memória (com vários modos de endereçamento), …
�A prioridade é reduzir o tamanho dos programas
� Claro que também se procura reduzir o tempo de execução de cada instrução
Arquitectura de Computadores (2008/2009): O Nível ISA 82
RISC vs CISC
�RISC – Reduced Instruction Set Computer
�Nova abordagem (anos 70/80) no desenho dos CPU. Simplificar para conseguir melhor desempenho:� Suportar um pequeno conjunto de instruções: as mais usadas
� Instruções de tamanho fixo: Fetch mais simples e eficiente
� Descodificação mais simples e eficiente
�Menos instruções a optimizar, a execução pode ser mais eficiente
�Usar espaço no CPU para mais registos e mais cache
� Permitir explorar mais optimizações…
�A abordagem antiga passou a ser referida por CISC –Complex Instruction Set Computer
Arquitectura de Computadores (2008/2009): O Nível ISA 83
Principais características
�CISC
�Muitas instruções
�Muitos modos de endereçamento
� Instruções demoradas
�Muitas acedem a memória
� Poucos registos
�RISC
� “Poucas” instruções
� Poucos modos de endereçamento
� Arquitecturas load/store
� Só as instruções load e store acedem a memória
� Muitos registos
� A menor complexidade do CPU abre a oportunidade para optimizações: diminuir o consumo de energia, optimizar a execução (ex: pipelines), etc.
Arquitectura de Computadores (2008/2009): O Nível ISA 84
Exemplo nas duas abordagens
�Computar: C = A + B
CISC:
load R1, [A]
add R1, [B]
store [C], R1
ou mesmo:
add [C], [A], [B]
�Qual será mais eficiente?
�RISC se cada instrução demorar menos tempo!!
RISC:
load R1, [A]
load R2, [B]
add R1, R2
store [C], R1
Arquitectura de Computadores (2008/2009): O Nível ISA 85
Exemplo de arquitectura RISC
�Família SPARC/UltraSPARC da SUN (usado em workstations e servidores)
�MIPS (usado em sistemas embebidos e consolas)
�PowerPC da Apple, IBM e Motorola (usado nos Macsaté 2006)
�Exemplo de um conjunto de instruções: SPARC
� Todas têm o mesmo tamanho
PC-RELATIVE DISPLACEMENT CALL4
302
PC-RELATIVE DISPLACEMENT BRANCH3
222
A
1
OP
3
COND
4
IMMEDIATE CONSTANT SETHI2
222
DEST
5
2 5 6 5 1 8 5
OP
3
Immediate1b DEST OPCODE SRC1 1 IMMEDIATE CONSTANT
3 Register1a DEST OPCODE SRC1 0 FP-OP SRC2
Format
Arquitectura de Computadores (2008/2009): O Nível ISA 86
Exemplo de arquitectura CISC
� IA-32 da Intel
� O conjunto de instruções é complexo
� Assim como a sua representação em código máquina
� Exemplo: Pentium II
PREFIX
INSTRUCTION
Which operand is source?
Byte/word
SCALE INDEX BASE
MOD REC R/M
OPCODE MODE SIB DISPLACMENT IMMEDIATE
0 - 5
6 3321Bits Bits
332Bits
Bytes
1
1 - 2 0 - 1 0 - 1 0 - 4 0 - 4
Arquitectura de Computadores (2008/2009): O Nível ISA 87
RISC vs CISC
�Na realidade a fronteira entre estas duas filosofias é cada vez mais ténue
� Arquitecturas CISC convertem o seu código em micro-operações RISC
� Arquitecturas RISC actuais têm quase tantas instruções quando as CISC
� Porque é que ainda são denominadas de RISC?
�A diferença está essencialmente no desenho do CPU
�Como iremos ver nas próximas aulas existem diferenças ao nível do suporte para modos de endereçamento, teste de condições, subrotinas, etc.
Arquitectura de Computadores (2008/2009): O Nível ISA 88
Que ISAs vamos estudar em AC?
�Em AC vamos trabalhar maioritariamente sobre o ISA IA-32 da Intel
� Este ISA que manipula endereços e dados de 32 bits foi a base das arquitecturas Intel e compatíveis desde 1986 até meados nos anos 2000
�Mesmo agora os ISA de 64 bits (Intel64 ou AMD x86-64) usados nas arquitecturas mais recentes são uma expansão do IA-32
�Apesar de incidirmos essencialmente sobre o IA-32 também falaremos de arquitecturas RISC sempre que seja pertinente
�Por fim dedicaremos algumas aulas ao Java bytecode e à JVM
Arquitectura de Computadores (2008/2009): O Nível ISA 89
� Intel- (Integrated Electronics Corporation)
�Fundada em 1968 por funcionários vindos da FairchildSemiconductor
� Na origem (com a Texas Instruments) dos circuitos integrados (microchip)
�Micro-processador
� Um único circuito integrado contendo todas as funcionalidades da unidade central de processamento (CPU) do computador
�Intel 4004 – microprocessador de 4bits para calculadoras
Nota: Já existiam processadores e computadores!
Intel e os circuitos integrados (CI)
Arquitectura de Computadores (2008/2009): O Nível ISA 90
�Cada nova geração aumentou a dimensão dos dados e de endereçamento�8080 – 8bits de dados /16bits de endereços
�8086/8088 – 16bits (8 no 8088)/20bits (usados nos 1ºs IBM/PC)
�80186 - 16bits/20bits (não usado nos IBM/PC)
�80286 – 16bits/24bits (usado no IBM/AT)
�80386 – 32bits/32bits (usado no IBM/PS2)
�80486, Pentium (P5), Pentium Pro (P6), …
�Core, Core 2, Core i7 – 64bits/48bits (também usado nosPentiums mais recentes)
�Existe compatibilidade com os anteriores
�Continuam a existir instruções com dados de 8bits no 80386, Pentium, Core duo, e todos os outros
O caso dos µ-processadores Intel
Arquitectura de Computadores (2008/2009): O Nível ISA 91
�A densidade dos componentes nos CI duplica a cada 2 anos
�A mesma “lei” tem sido extrapolada para:
�Velocidade dos CPU
�Capacidade das memórias e discos(não para as suas velocidades!)
Observação (“Lei”) de Moore
Arquitectura de Computadores (2008/2009): O Nível ISA 92
�Arquitecturas muito complexas e difíceis de compreender e programar
�Os programadores (e os compiladores) “refugiam-se”num subconjunto do ISA …
� Instruções de tamanho variável (de 1 a 18? bytes…)
� Internamente, existe uma “tradução” para micro-código, mais simples�Este é realmente executado pelo CPU
�Extensão do IA-32 para 64 bits:�AMD com AMD64 (Intel com Intel64 (antigo EM64T))
�Não confundir com IA-64, uma arquitectura diferente que não suporta código legado. �Processadores da família Itanium
O resultado desta evolução
Arquitectura de Computadores (2008/2009): O Nível ISA 93
Medidas de capacidade duma arquitectura
�O número de bits do endereço determina a capacidade máxima de memória endereçável
�O número de linhas no bus de endereços determina a capacidade máxima de memória realmente acessível
�O número de bits dos registos gerais determina o tamanho máximo dos dados operados pelas instruções
�O número de linhas no bus de dados determina a capacidade máxima de transferência dos dados em cada acesso à memória
Arquitectura de Computadores (2008/2009): O Nível ISA 94
Exemplo do PC com Intel 8086
�Processador usado nos primeiros IBM PC
�CPU com 16 bits de dados e de endereços, com bus de 20 bits para endereços e 16 bits para dados:
� Dimensão dos registos de endereços, registos de dados e número de linhas no BUS de dados: 16
� Dimensão do MAR, bus de endereços: 20
� Endereça até 1M (220) de células de memória
� Transfere e opera até 2 Bytes de cada vez
Arquitectura de Computadores (2008/2009): O Nível ISA 95
ALU
Registos de dados
Registos de endereços
IP ou PC
BUS do sistema
Fila de 6 bytes como IR
Diagrama do 8086
Arquitectura de Computadores (2008/2009): O Nível ISA 96
Exemplo Intel IA-32 no PC
�CPU com 32 bits de dados e de endereços, com BUS de 32 bits:
� Dimensão dos IP, MAR, registos de dados, número de linhas no BUS de dados e no de endereços: 32
� Endereça até 4G de células de memória
� Transfere e opera até 4bytes de cada vez
Arquitectura de Computadores (2008/2009): O Nível ISA 97
Exemplo AMD64/Intel 64 no PC
�CPU com registos e BUS de 64bits para dados e de 48bits para endereços:
� Dimensão dos IP, registos de dados, número de linhas no BUS de dados: 64
�MAR e bus de endereços: 48 (actualmente) poderá ir até 64
� Endereça até 256T (Tera = 240) de células de memória.
�Poderá ir até 16E (Exa = 260)
� Transfere e opera até 8bytes de cada vez
Arquitectura de Computadores (2008/2009): O Nível ISA 98
�Registos gerais no IA-32:
�No assembly: EAX, EBX, ECX, EDX
�Continuam a existir instruções com dados de 16 e 8bits, com os mesmos códigos do 8086
�Registo de Flags ou estado:
�Reporta várias situações que podem ser testadas com instruções específicas (Overflow, Carry, etc…)
�Registos especiais: EIP (instruction pointer ou program counter), ESP, etc …
AH (8bits) AL (8bits)
EAX (32bits)
AX (16bits)
Registos do IA-32
Arquitectura de Computadores (2008/2009): O Nível ISA 99
axax
cxcx
bxbx
dxdx
eax
ebx
ecx
edx
H L
32 bits
16 bits
8 bits
ipip
spsp
bpbp
flagsflags
eip
esp
ebp
eflags
Registos do IA-32
Arquitectura de Computadores (2008/2009): O Nível ISA 100
Tipo de instruções do IA-32
�Mover dados
� Entre registos
�Memória-registo (Load) e registo-memória (Store)
�Aritmética sobre inteiros
�Aritmética sobre vírgula flutuante
�Saltos condicionais e incondicionais
�Manipulação de subrotinas
�Entradas/Saídas
� Instruções vectoriais