Organização Estruturada
de Computador
O Nível de Arquitetura do Conjunto de
Instruções - Parte I
Nesta aula abordaremos com mais detalhes o nível
da arquitetura que tem como função implementar a camada
ISA situada acima dele.
O texto abaixo é um resumo das seções
5.1 e 5.2 do capítulo 5 do livro: Organização
Estruturada de Computadores de Andrew S. Tanenbaum, 4a Edição,
2001. As figuras do texto foram obtidas do material disponibilizado
na internet pelo autor desse mesmo livro.
Importante: O resumo abaixo deve
ser complementado, pelo aluno, com a leitura do texto original
do livro.
Tópicos
Introdução
- Nível ISA - é a interface entre o software
e o hardware
- Pode-se ter hardware que executa diretamente programas escritos em
Alto Nível?
- Isso não é uma boa idéia. Porque?
- Metodologia empregada pelos Arquitetos de Sistemas
- Aceita-se programas em diversas linguagens de Alto Nível
- Traduz-se a linguagem para uma linguagem intermediária
- o nível ISA
- Constróe-se um hardware, com ou sem microprogramação,
que executa instruções do nível ISA
A figura 5.1 mostra a relação
entre os compiladores, o nível ISA e o Hardware
Fig 5.1 O nível ISA é a interface entre os compiladores e
o hardware
- O Nível ISA depende de uma negociação entre os
projetistas de compiladores e os engenheiros de Hardware
- Engenheiros de Hardware felizes e
- Desenvolvedores de Software contentes
- As novas máquinas devem ser compatíveis com:
- Antigos Sistemas Operacionais
- Aplicações já desenvolvidas
- O desafio é construir máquinas melhores e compatíveis
com as anteriores
- Quais as características que uma boa ISA deve ter?
- Ser implementada com eficiência, tanto nas tecnologias atuais
como nas futuras
- hardware mais simples
- hardware com melhor tecnologia disponível
- Facilidade de se gerar código para a ISA
Na próximas seções
veremos como isso é possível.....
Visão Geral do Nível
- Propriedades do Nível ISA
- O nível ISA define o aspecto da máquina para um programador
de linguagem de máquina
- Para gerar código para o nível ISA o projetista do
compilador deve conhecer:
- o modelo de memória da máquina
- quais os registradores estão implementados
- os tipos de dados e de instruções disponíveis
- Também afetam a performance e deve ser visível ao
projetista do compilador:
- se a máquina é microprogramada ou hardwired
- se é projetada ou não em pipeline
- superescalar ou não
- Para algumas arquiteturas não existe uma documentação
formal de especificação
- fabricante não quer clones de sua máquina (ex: Pentium-Intel)
- Para outras arquiteturas o nível ISA é especificado
por um documento formal
- permitindo que diferentes implementadores construam máquinas
distintas, rodando o mesmo software (chips funcionalmente identicos
com diferenças em preço e performance)
- O documento formal contém
- seções normativas: que impoem requisitos
que devem ser atendidos na implementação
- seções informativas: que ajuda o
leitor a entender os requisitos sem entrar na definição formal
- conjuntos de testes: conjunto de testes específicos
para se verificar a implementação em relação a
especificação formal
- O documento com as definições deve informar:
- O modelo de memória adotado
- Quantos e quais registradores estão implementados
- O que cada instrução faz
- O ítens 2, 3 e 4 abaixo fornecem mais detalhes sobre esses
tópicos
- Modelos de memória
- Atualmente as memórias são formadas por grupos de
4 bytes (32 bits) ou de 8 bytes (64 bits)
- As palavras de 4 ou 8 bytes podem estar alinhadas ou não
alinhadas com as fronteiras naturais da memória, como mostrado na
figura 5.2
- O acesso a memórias alinhadas são mais eficientes.
Porque?
- A leitura de 1 endereço arbitrário requer um hardware
mais sofisticado e é mais caro
- Mesmo quando alinhadas, os acessos a memória podem ser não
alinhados. Porque?
- manutenção de compatibilidade com arquiteturas antigas
(máquinas de 8 ou 16 bits)
Fig 5.2 Uma palavra de 8 bytes em uma memória little-endian.
(a) Alinhada (b) Não Alinhada. Algumas máquinas exigem que as
palavras da memória sejam alinhadas.
3. Registradores
- Memórias rápidas usadas em execução de
instruções dentro do processador (objetivo é minimizar
os acessos às memórias externas ao processador)
- Todos os processadores tem um conjunto de registradores visíveis
no nível ISA
- Em geral, or registradores visíveis no nível de microarquitetura,
não são visíveis para o nível ISA
- Classificação - registros podem ser divididos grosseiramente
em 2 categorias
- Registradores de propósito específicos
- cumprem funções específicas (exemplo o PC
e o SP)
- alguns só são usados pelo processador
- Registradores de propósito geral
- usados para armazenar vari´veis locais e resultados intermediários
- são, em geral, simétricos e intercambiáveis
(usados indistintamente)
- As figuras 5.3 e 5.4 abaixo exemplificam as estruturas dos registros
do Pentium II e do UltraSparc II
Fig 5.3 Os principais registradores do Pentium II
Registrador Nome alternativo
Função
R0
GO Valor
armazenado fixo em O por hardware. As tentativas de
armazenamento nesse registrador são
ignoradas.
R1-R7 G1-G7
Armazena variáveis globais
R8-R13 O0-O5
Armazena parâmetros para procedimentos
a serem chamados
R14
SP
Apontador de pilha
R15
O7 Registrador
de rascunho
R!6-R23 LQ-L7
Armazena as variáveis locais do
procedimento corrente
R24-R29 I0-I5
Armazena os parâmetros de
entrada
R30
FP Ponteiro
para a base do quadro de pilha corrente
R31
I7 Armazena
o endereço de retorno para o procedimento corrente
Fig 5.4 Os registradores de propósito geral do UltraSparc
II
4. Instruções
- O conjunto de instruções controlam tudo o que a máquina
pode fazer
- Tipos de instruções típicas:
- LOAD, STORE - realizam o movimento de dados e instruções
entre memória e registradores
- MOVE - realizam cópia de valores entre registros
- ADD, SUB, MULT,... - realizam operações
aritméticas
- AND, OR, XOR, ... - realizam operações
lógicas
- EQ, NEQ, LEQ,... - realizam operações
de comparação
- GOTO - operação de desvio
Tipos de Dados
- Se existe suporte de hardware para um determinado tipo de dado
- usuário não pode manipular dado em formato particular
diferente do especificado (implementado)
- Se não existe esse suporte
- usuário tem maior flexibilidade para trabalhar com tipos diferentes
ou próprios
- Tipos de Dados Numéricos
- Inteiros
- Comumente de 8, 16, 32 e 64 bits, com sinal e sem sinal
- Muitas vezes representados em complemento de 2
- Exemplo: Para o caso de 32 bits sem sinal temos 232
valores inteiros
- Exemplo: Para caso de 32 bits com sinal temos 231 valores
inteiros mais o sinal
- Ponto Flutuante
- Comumente de 32, 64 e 128 bits, com sinal e sem sinal
- Considera-se o sinal, a parte inteira e a parte decimal
- Podem existir registradores específicos para esses tipos
de dados
- Tipos de Dados não numéricos (
- Tipicamente usados em processadores de texto, planilhas e banco
de dados
- Códigos mais usados atualmente: ASCII (8 bits) e UNICODE
(16bits)