












Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Organização Arquitetura de computadores - Microarquitetura de Computação resuno de Nível ISA
Tipologia: Resumos
1 / 20
Esta página não é visível na pré-visualização
Não perca as partes importantes!













O Nível de Arquitetura do Conjunto de Instruções
Resumo Básico do Conteúdo ISA
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?
Na próximas seções veremos como isso é possível.....
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
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
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 :
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.
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.
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.
00 10 1111 0110 A deslocado 2 bits à direita, sem extensão de sinal 11 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
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:
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
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).