Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Nível ISA Resumo, Resumos de Engenharia Telemática

Organização Arquitetura de computadores - Microarquitetura de Computação resuno de Nível ISA

Tipologia: Resumos

Antes de 2010

Compartilhado em 25/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 20

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Organização Estruturada de Computador
O Nível de Arquitetura do Conjunto de Instruções
Resumo Básico do Conteúdo ISA
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
o Aceita-se programas em diversas linguagens de Alto Nível
o Traduz-se a linguagem para uma linguagem intermediária - o nível ISA
o 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
o Engenheiros de Hardware felizes e
o Desenvolvedores de Software contentes
As novas máquinas devem ser compatíveis com:
o Antigos Sistemas Operacionais
o Aplicações já desenvolvidas
o O desafio é construir máquinas melhores e compatíveis com as anteriores
Quais as características que uma boa ISA deve ter?
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Pré-visualização parcial do texto

Baixe Nível ISA Resumo e outras Resumos em PDF para Engenharia Telemática, somente na Docsity!

Organização Estruturada de Computador

O Nível de Arquitetura do Conjunto de Instruções

Resumo Básico do Conteúdo ISA

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 o Aceita-se programas em diversas linguagens de Alto Nível o Traduz-se a linguagem para uma linguagem intermediária - o nível ISA o 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 o Engenheiros de Hardware felizes e o Desenvolvedores de Software contentes

 As novas máquinas devem ser compatíveis com: o Antigos Sistemas Operacionais o Aplicações já desenvolvidas o O desafio é construir máquinas melhores e compatíveis com as anteriores

 Quais as características que uma boa ISA deve ter?

  1. Ser implementada com eficiência, tanto nas tecnologias atuais como nas futuras  hardware mais simples  hardware com melhor tecnologia disponível
  2. 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

  1. 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 o modelo de memória da máquina o quais os registradores estão implementados o os tipos de dados e de instruções disponíveis

 Também afetam a performance e deve ser visível ao projetista do compilador: o se a máquina é microprogramada ou hardwired o se é projetada ou não em pipeline o superescalar ou não

 Para algumas arquiteturas não existe uma documentação formal de especificação 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 o permitindo que diferentes implementadores construam máquinas distintas, rodando o mesmo software (chips funcionalmente identicos com diferenças em preço e performance) o 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 O modelo de memória adotado o Quantos e quais registradores estão implementados o O que cada instrução faz

 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

  1. Instruções

 O conjunto de instruções controlam tudo o que a máquina pode fazer  Tipos de instruções típicas: o LOAD , STORE - realizam o movimento de dados e instruções entre memória e registradores o MOVE - realizam cópia de valores entre registros o ADD , SUB , MULT ,... - realizam operações aritméticas

o AND , OR , XOR , ... - realizam operações lógicas o EQ , NEQ , LEQ ,... - realizam operações de comparação o GOTO - operação de desvio

Tipos de Dados

 Se existe suporte de hardware para um determinado tipo de dado o usuário não pode manipular dado em formato particular diferente do especificado (implementado)  Se não existe esse suporte o usuário tem maior flexibilidade para trabalhar com tipos diferentes ou próprios

Tipos de Dados Numéricos o 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 2^32 valores inteiros  Exemplo: Para caso de 32 bits com sinal temos 2^31 valores inteiros mais o sinal o 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 ( o Textos ou alfanuméricos  Tipicamente usados em processadores de texto, planilhas e banco de dados  Códigos mais usados atualmente: ASCII (8 bits) e UNICODE (16bits)

PARTE II 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.3 e 5.4 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.

 O ISA deve ter a capacidade de suportar o acréscimo de novas instruções  O ISA deve ser capaz de explorar novidades ao longo do tempo de vida  Algumas decisões tomadas quando do projeto ISA podem revelar-se inadequadas ao longo do tempo, principalmente se a tecnologia for incompatível com a implementação do ISA

o Em geral as instruções pequenas são mais atraentes do que as grandes. Porque?  A banda passante (número de bits por segundo que a memória é capaz de liberar) da memória tem crescido menos que a velocidade dos processadores. As memórias atuais não tem a capacidade de suprir instruções e operandos na velocidade que o processador pode consumi-las.  Um programa feito com instruções de 16 bits gasta metade do espaço de memória de um programa com instruções de 32 bits.  Deve-se considerar, também, a taxa de crescimento do preço de memória e a taxa de crescimento do tamanho dos programas.

o Por outro lado, a minimização do tamanho das intruções pode dificultar muito a sua decodificação. O projetista é obrigado a usar um conjunto restrito de códigos para as instruções e o projeto pode não ser flexível para aumento da quantidade de instruções

o Importante :

  1. O tamanho ideal de uma instrução deve considerar, além do preço da memória, o tempo de decodificação e de execução de uma instrução.
  2. Como os processadores modernos são capazes de executar várias instruções no mesmo ciclo de clock, torna-se imperativo um mecanismo de busca de várias instruções em cada ciclo de clock (memórias cache)
  3. Quando uma instrução tem endereços, o tamanho do endereço deve ser compatível com o tamanho máximo da memória do computador. Mas, memórias maiores requerem endereços mais longos resultando em instruções maiores.

 Expansão dos códigos de operação

o Vamos analisar a relação entre os códigos de operação e os endereços. o Uma instrução com ( n + k ) bits, com um código de operação de k bits e um único endereço expresso em n bits, permite:  a codificação de 2 k^ operações diferentes e,  a referência a 2 n^ células de memória

o O que ocorreria se, nessa mesma instrução com ( n + k ) bits, fossem usados k-1 bits para código de operações e n+1 bits para endereçamento?  esse formato codificaria metade das instruções e poderia endereçar uma memória duas vezes maior.  considera que o código de operação de uma instrução pode ser expandido, caso ele não precise de todos os campos dos operandos (endereços)

o o conceito de expansão do código de operação pode ser visualizado melhor por meio de um exemplo. Considere a instrução mostrada na figura 5.11:

 temos 4 bits para cada endereçamento de cada um dos tres operandos.  temos 4 bits para o código de operação e, portanto, podemos codificar apenas 16 tipos de instruções diferentes

Fig 5.11 Instrução com um código de operação de 4 bits e três campos de endereço de quatro bits cada um.

 Uma questão importante é saber se, para essa arquitetura, todas as instruções requerem 3 operandos.  Caso a resposta seja afirmativa, então nada se tem a fazer (ou seja, não se pode expandir o código de operação )  Caso a resposta seja negativa, então pode-se expandir o código de operação para aquelas instruções com um número menor de operandos. Neste caso novas operações podem ser definidas, como mostrado no esquema da figura 5.12.

Modos de Endereçamento

o Como os bits de endereçamento são interpretados no processo de localização do operando?  Normalmente esses bits contêm o endereço do operando na memória  Mas isso não é regra geral.

o Vamos analisar alguns modos de endereçamento.

Endereçamento Imediato

o O campo de instrução de endereçamento contém o valor do operando o Esse operando é conhecido como operando imediato , pois ele é trazido automaticamente da memória, na própria operação de busca da instrução. o Mais usado para especificar constantes de valor pequeno. Porque? o A Figura 5.16 mostra um possível formato pra uma instrução imediata que efetua a cara da constante 4 no registrador R1.

MOV R1 4

Figura 5.16 Instrução com operando imediato, para carregar o valor 4 no registrador 1.

Endereçamento Direto

o O operando armazenado na memória é informado pelo seu endereço completo o Esse modo de endereçamento é conhecido como modo de endereçamento direto. o O endereçamento direto só pode ser usado para acessar variáveis globais cujo endereço seja conhecido em tempo de compilação. Porque?

Endereçamento Via Registrador

o é, conceitualmente, idêntico ao endereçamento direto, mas especifica um registrador em vez de um endereço de memória. o é o modo de endereçamento mais usado na maioria dos processadores (mantem-se as variáveis mais usadas no processamento e aproveita-se o baixo tempo de acesso e nro de bits reduzido dos regitradores) o não pode ser usado em operações de carga (LOAD) e armazenamento (STORE) envolvendo memória principal. o

Endereçamento Indireto Via Registrador

o o operando especificado vem da memória ou vai para a memória, mas seu endereço não está gravado na instrução, (como no endereçamento

direto). O endereço é obtido indiretamente a partir do endereço de um registrador de referência. o por exemplo, quando se tem um loop de manipulação de um array usa-se o endereço do início do array como referência e os demais são obtidos indiretamente com base nessa referência. o

Importante : Existem outros tipos de endereçamento ( Indexado, Base- Indexado, Via Estrutura de Pilha, ...) que não serão tratados neste curso, mas devem ser estudados e considerados pelos profissionais responsáveis pelo projeto do ISA de um computador.

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.5 e 5.6 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.

Tipos de Instruções

 As instruções do nível ISA podem ser agrupadas segundo suas funcionalidades. Segue, abaixo, a descrição das categorias mais comuns de instruções de máquina, sem a pretensão de esgotar o assunto.

Instruções de Movimento de Dados

o Compreende, na verdade, a uma duplicação de dados.  Cria-se um novo objeto, com a mesma configuração de bits do objeto original.  O conteúdo original da memória não é apagado (pelo menos de imediato)

o Existem duas razões que motivam a a cópia de dados de um lado para outro.

 1. A atribuição de valores a variáveis  Por exemplo: O comando A = B é implementado copiando-se no endereço A o valor armazenado em B.  2. Disponibilização de dados em locais de acesso mais eficiente.

 1011 1101 10 11 A

00 10 1111 0110 A deslocado 2 bits à direita, sem extensão de sinal11 10 1111 0110 A deslocado 2 bits à direita, com extensão de sinal

Comparações e Desvios Condicionais

o Os programas precisam ter a capacidade de testar seus dados e alterar a sequência de execução de suas instruções com base nos resultados desses testes.  Por exemplo, a instrução sqrt ( x ) - raiz quadrada de x - deve testar o valor de x antes de ser executada. Se x >= 0 o resultado é a raiz quadrada de x, caso contrário, a instrução deve desviar a sequência de execução para um LABEL de erro ou "warning".

o Os desvios podem ser determinados pela comparação de 1 bit de dados. Exemplo: Para saber se um dado é positivo ou negativo, basta comparar seu bit mais significativo com 0 ou 1 respectivamente.

o Também, é comum utilizar-se desvios ao comparar-se um dado com o valor 0 (por exemplo em loops do tipo while( i != 0)). Para isto, em geral todos os processadores tem um circuito OR com as entradas ligadas a todos os bits de um dado. Neste caso, a saída desse OR só será 0 quando todos os bits do dado forem iguais a 0.

o Pode-se ter, ainda, circuitos comparadores (veja figura no nível da lógica digital) de dois dados indicando se os dados são iguais ou diferentes. A instrução que realiza essas operações tem 3 endereços. Porque? (Veja questão abaixo ou livro texto)

Instruções de Chamadas a Procedimento

o Um procedimento (sub-rotina, método ou função) pode ser definido como um grupo de instruções que realizam uma determinada tarefa e que podem ser chamadas (invocadas) a partir de diversas posições de um programa ( inclusive de outro procedimento ou do mesmo procedimento

  • recursão)

o Essas instruções, além do código de operação, devem ter:  um endereço do procedimento chamado e, também,  um endereço de retorno , que será usado, quando a execução do procedimento chamado terminar, para retorno ao programa chamador.

o Os endereços de retorno são armazenados em um pilha, implementada na memória, que cresce ou diminui a medida que os procedimentos são chamados e retornam, respectivamente.

Controle de Loop

o Todos os esquemas de instruções para implementar um controle de loop baseiam-se em um contador que cresce ou decresce de uma constante, sempre que se completar uma passagem pelo loop

o Um dos métodos para implementação de um loop, ilustrado na figura 5.29 (a), consiste em:  inicializar um contador externo e, depois disso, começar imediatamente a execução do código do loop (assim o loop é executado pelo menos uma vez)  A última instrução do loop atualiza o contador e, se ainda não tiver sido alcançada a condição de término, desvia de volta para a primeira instrução do código do loop.  Caso contrário, com a condição de término atingida, a execução do loop termina, sendo então executada a primeira instrução fora dos domínios do loop.

o Outra possibilidade, ilustrada pela figura 5.29 (b), consiste em realizar o teste antes do código do loop.

i = 1;

L1: primeiro comando do loop; . . . último comando do loop; i = i+1; if (i < n) goto L1;

(a)

i = 1; L1: if ( i < n ) goto L primeiro comando do loop; . . . último comando do loop; i = i+1; goto L1; L2:

(b)

Fig. 5.29 (a) Loop com teste de término no final do corpo das instruções. (b) Loop com teste de término no início do corpo das instruções

Entrada/Saída

o Atualmente existem 3 esquemas diferentes para a realização de operações de E/S em computadores pessoais:

  1. E/S programada com espera ocupada

 mais simples de todos os métodos  comumente implementada nos microprocessadores de baixa performance (sistemas embarcados ou em sistemas em tempo real)

Fig. 5.32 Sistema com um controlador DMA

Fluxo de Controle

o Entende-se por fluxo de contrôle a sequência na qual as instruções são dinamicamente executadas.

Fluxo Sequencial de Controle e Desvios

o A execução da maioria das instruções de uma máquina não altera o fluxo de controle.

o Em geral, o processador vai à memória para buscar a instrução armazenada no endereço seguinte àquela que acabou de ser executada.

o Neste caso registrador PC é acrescido do tamanho da instrução que acabou de ser executada. Assim o valor do PC é praticamente uma função linear do tempo, sendo incrementado pelo tamanho médio das instruções, no tempo médio de execução das instruções (Figura 5.37(a))

o Quando existem desvios, o valor do PC não é mais uma função monótona do tempo, como mostrado na Figura 5.37(b).

Fig 5.37 Variação do Program Counter em função do tempo (a) sem desvios e (b) com desvios.

o Quando existem muitos desvios, por exemplo com o uso de GOTO, o entendimento e a manutenção de um programa fica mais difícil. o A programação estruturada tem por base evitar esses desvios, pregando a substituição de desvios por formas mais estruturadas de controle de fluxo, como os loops while.

Procedimentos

o Uma chamada a procedimento altera o fluxo de controle exatamente do mesmo modo que um desvio.

o Mas, o procedimento, ao contrário do desvio, quando termina sua tarefa retorna o controle para o comando ou a instrução seguinte à instrução de chamada.

o Mais ainda, o corpo de um programa pode ser visualizado como uma instrução de nível mais alto.

o Um tipo especial de procedimento é o procedimento recursivo, um procedimento que chama a si próprio, de forma direta ou indireta, via uma cadeia de chamadas a outros procedimentos.

o Para implementar procedimentos recursivos precisamos de uma pilha para armazenar parâmetros e variáveis locais para cada chamada.

o Cada vez que o procedimento é chamado, um novo quadro de pilha é alocado para o procedimento, e esse quadro é colocado no topo da pilha.

o Nesse caso usa-se, além do apontador SP para o topo da pilha, um apontador de quadro FP, que aponta para um endereço fixo, dentro do quadro.

o A primeira coisa que um procedimento precisa fazer ao ser chamado é salvar o valor do FP anterior (de maneira a fazer com que ele possa ser recuperado ao término da execução do procedimento), copiar o conteúdo de SP em FP, e possivelmente incrementar o valor de SP

o A Figura 5.41 mostra o quadro de pilha para uma máquina com uma palavra de 32 bits

Fig 5.42 Quando um procedimento é chamado, sua execução sempre começa por sua primeira instrução.

o Uma outra configuração de fluxo é mostrado na figura 5.43, onde os procedimentos A e B, quando chamados, executam uma sequencia de instruções a partir da última instrução executada depois da chamada.

o Dois procedimentos que funcionam dessa maneira são chamados de co- rotinas. Nessa configuração os dois procedimentos simulam um processamento em paralelo executado em máquinas com 1 único processador.

Fig 5.43 Quando a execução de uma co-rotina é retomada, a instrução executada é sempre a seguinte à que foi executada quando da ativação anterior da co-rotina , e não a sua primeira instrução

Traps

o Um trap é uma espécie de chamada a procedimento automática iniciada sempre que ocorrer alguma condição específica causada pela execução de um programa.

o O Overflow é um bom exemplo de uma dessas condições. Quando há ocorrência de um trap o fluxo de controle é alterado para um endereço fixo de memória em vez de para a instrução seguinte.

o Nesse endereço fixo há uma instrução de desvio para um procedimento, conhecido como procedimento de tratamento do trap , que executa algumas ações convenientes, como, por exemplo, a impressão de uma mensagem de erro.

Interrupções

o As interrrupções são modificações no fluxo de controle de um programa causadas por um evento externo ao processamento do programa, usualmente eventos relacionados a operações de E/S.

o Como nos traps, as interrupções também param o processamento do programa atual e transferem o controle para uma rotina de tratamento de interrupção, que executa ações apropriadas.

o A diferença essencial entre um trap e uma interrupção é que os traps são síncronos e as interrupções assíncronas. Os traps acontecem síncronamente porque resultam da execução do próprio programa enquanto que as interrupções podem ser causadas por agentes externos (por exemplo o apertar de uma tecla do teclado).