4-Estrutura e Funcionamento Da Cpu
Short Description
Download 4-Estrutura e Funcionamento Da Cpu...
Description
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
ESTRUTURA E FUNCIONAMENTO DA CPU
ÍNDICE:
1. Organização do Processador........................................................................... 2 2. Organização de Registradores......................................................................... 3 3. Ciclo de Instrução............................................................................................ 10 4. Pipeline de Instruções..................................................................................... 14 5. Características e Recursos............................................................................. 20 6. Evolução da Família de Processadores x86 e Seus Compatíveis............... 23 7. O Processador Pentium II............................................................................... 41 8. O Processador PowerPC................................................................................. 52 9. Bibliografia....................................................................................................... 60 10. Lista de Exercícios......................................................................................... 61
1 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
1.
ORGANIZAÇÃO DO PROCESSADOR
Para entender a organização da CPU, devemos considerar as ações que ela deve executar: •
Busca de instrução: a CPU lê uma instrução da memória.
•
Interpretação de instrução: a instrução é decodificada para determinar a ação requerida.
•
Busca de dados: a execução de uma instrução pode requerer efetuar uma operação aritmética ou lógica sobre os dados.
•
Escrita de dados: os resultados da execução podem requerer escrever dados na memória ou em um módulo de E/S.
Para
executar
essas
ações,
a
CPU
precisa
armazenar
alguns
dados
temporariamente. Ela deve manter a posição de memória da última instrução, para saber onde obter a próxima instrução, e precisa também armazenar instruções e dados temporariamente, enquanto uma instrução está sendo executada. Em outras palavras, a CPU necessita de uma pequena memória interna. A Figura 1 é uma visão simplificada de uma CPU, que indica também sua conexão com o resto do sistema, por meio do barramento de sistema. Uma interface semelhante é necessária para qualquer das estruturas de interconexão descritas na aula de Barramentos. Os componentes mais importantes da CPU são a unidade lógica e aritmética ou ULA e a unidade de controle ou UC. A ULA efetua o processamento de dados. A UC controla não só a transferência de dados e instruções para dentro e para fora da CPU, como também a operação da ULA. A figura mostra, além desses componentes, uma memória interna mínima, constituída de um conjunto de posições de armazenamento denominadas registradores.
2 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 1: A CPU com o barramento do sistema A Figura 2 é uma visão um pouco mais detalhada da CPU. São indicados os caminhos de transferência de dados e de sinais de controle, o que inclui um elemento denominado barramento interno da CPU. Esse elemento é necessário pra transferir dados entre os vários registradores e a ULA, uma vez que esta última apenas opera sobre dados localizados na memória interna da CPU. A figura mostra ainda os elementos básicos típicos de uma ULA. Note a semelhança entre a estrutura interna do computador como um todo e a estrutura interna da CPU. Em ambos os casos, existe uma pequena coleção de elementos importantes, conectados por caminhos de dados.
Figura 2: Estrutura interna da CPU
2. ORGANIZAÇÃO DE REGISTRADORES Um sistema de computação emprega uma hierarquia de memória. Nos níveis mais altos da hierarquia, a memória é mais rápida, menor e mais cara (custo por bit). Dentro da CPU, existe um conjunto de registradores que funciona como um nível da hierarquia de memória acima da memória principal e da memória cache. Os registradores da CPU têm duas funções: •
Registradores visíveis para o usuário: possibilitam ao programador de linguagem de montagem ou de máquina minimizar referências à memória, pela otimização do uso de registradores. 3 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
•
Registradores de controle e de estado: são usados pela unidade de controle para controlar a operação da CPU e por programas privilegiados do sistema operacional para controlar a execução de programas.
Não existe uma separação clara entre os registradores dessas duas categorias. Por exemplo, em algumas máquinas, o contador de programa é visível para o usuário (no VAX), mas em muitas outras não é. Registradores Visíveis para o Usuário Um registrador visível para o usuário é aquele que pode ser referenciado pela linguagem de máquina que a CPU executa. Esses registradores podem ser classificados nas seguintes categorias: •
Registradores de propósito geral
•
Registradores de dados
•
Registradores de endereço
•
Registradores de códigos de operação
Registradores de propósito geral podem ser usados pelo programador para uma variedade de funções. Algumas vezes, seu uso no conjunto de instruções é ortogonal ao código de operação, ou seja, qualquer registrador de propósito geral pode conter um operando para qualquer código de operação. Esse é o real significado de propósito geral. Entretanto, existem freqüentemente algumas restrições. Por exemplo, podem existir registradores dedicados para operações sobre números de ponto flutuante e para operações sobre a pilha. Em alguns casos, os registradores de propósito geral podem ser usados para endereçamento. Em outros, existe uma separação clara ou parcial entre registradores de dados e registradores de endereços. Registradores de dados podem ser usados apenas para conter dados e não podem ser empregados no cálculo de endereços de operandos. Registradores de endereço podem também ser empregados até certo ponto como registradores de propósito geral ou podem ser dedicados para um determinado modo de endereçamento. Alguns exemplos são: •
Registradores de segmento: em uma máquina com endereçamento segmentado, um registrador de segmento é usado para conter o endereço da base de um segmento. Podem existir múltiplos registradores de segmento: por exemplo, um para o sistema operacional e um para o processo corrente.
4 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
•
Registradores de índices: são usados para endereçamento indexado, possivelmente com auto-indexação.
•
Apontador de topo de pilha: se houver endereçamento de operandos na pilha visível para o usuário, então tipicamente a pilha será alocada na memória e existirá um registrador dedicado que aponta para o topo da pilha. Isso possibilita um endereçamento implícito, ou seja, as instruções de empilhar e desempilhar não requerem um operando explícito.
O projeto do conjunto de registradores envolve diversas questões. Uma questão importante é decidir se os registradores serão de propósito geral ou se terão uso específico. Com o uso de registradores especializados, o tipo de registrador referenciado como operando de uma instrução geralmente é implícito, sendo determinado pelo código de operação. O campo de operando apenas identifica um registrador de um conjunto de registradores especializados, economizando, portanto, alguns bits de instrução. Por outro lado, essa especialização limita a flexibilidade de programação. Embora não exista melhor solução, para essa questão de projeto, a tendência atual é usar registradores especializados. Outra questão de projeto é o número de registradores a serem disponibilizados, seja de propósito geral seja para registradores de dados e de endereços. Isso também afeta o projeto do conjunto de instruções, uma vez que um número maior de registradores requer maior número de bits para especificar um operando. O número adequado parece ser entre 8 e 32 registradores. Um pequeno número de registradores resulta em mais referências à memória, mas o uso de um número muito grande de registradores, não reduz substancialmente o número de referências à memória. Uma abordagem diferente é adotada na arquitetura RISC que obtém vantagem com a utilização de centenas de registradores. Finalmente, existe a questão do tamanho do registrador. Registradores de endereço devem ter tamanho suficiente para conter o maior endereço usado no sistema. Registradores de dados devem ser capazes de conter valores da maioria dos tipos de dados. Algumas máquinas permitem o uso de dois registradores contíguos para conter valores de tamanho duplo. Uma última categoria de registradores que são visíveis para o usuário, pelo menos parcialmente, contém códigos de condição (também conhecidos como flags). Códigos de condição são bits atualizados pelo hardware da CPU como resultados de operações. Por exemplo, em uma operação aritmética, esses bits podem indicar se o resultado produzido é positivo, negativo, zero ou overflow. Além de o próprio resultado da operação ser armazenado em um registrador ou na memória, são também atualizados 5 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
os registradores que contêm códigos de condição. Esses códigos podem ser testados em seguida, por uma operação de desvio condicional. Normalmente, os bits de código de condição fazem parte de um registrador de controle, embora algumas vezes possam ser organizados em mais de um registrador. As instruções de máquina geralmente possibilitam ler esses bits, por meio de uma referencia implícita, mas não permitem que eles sejam alterados pelo programador. Registradores de Controle e de Estado Vários registradores da CPU são empregados para controlar a operação da CPU. Na maioria das máquinas, eles não são visíveis para o usuário. Alguns deles podem ser visíveis para instruções de máquinas executadas em um modo de controle ou de sistema operacional. É claro que máquinas diferentes têm organizações de registradores diferentes e usam uma terminologia distinta. Quatro registradores são essenciais para a execução de instruções: •
Contador de programa (PC): contém o endereço da instrução a ser buscada.
•
Registrador de instrução (IR): contém a última instrução buscada.
•
Registrador de endereçamento à memória (MAR): contém o endereço de uma posição de memória.
•
Registrador de armazenamento temporário de dados (MBR): contém uma palavra de dados a ser escrita na memória ou a palavra lida mais recentemente.
Tipicamente, o contador de programa é atualizado pela CPU depois de cada busca de instrução, de modo que ele sempre indique a próxima instrução a ser executada. Uma instrução de desvio ou de salto também modifica o conteúdo do contador de programa. A instrução buscada é carregada no IR, onde o código de operação e as referências a operando são analisadas. A troca de dados com a memória é feita usando o MAR e o MBR. Em um sistema com barramento, o MAR é conectado diretamente ao barramento de endereço e o MBR, ao barramento de dados. Registradores visíveis ao usuário, por sua vez, trocam dados com o MBR. Os quatro registradores relacionados são usados para transferência de dados entre a CPU e a memória. Dentro da CPU, os dados devem ser apresentados à ULA para processamento. A ULA pode ter acesso direto ao MBR e aos registradores visíveis para o usuário. Alternativamente, podem existir registradores adicionais para armazenamento
6 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
temporário de dados, que servem como registradores de entrada e de saída da ULA e trocam dados com o MBR e os registradores visíveis para o usuário. Todo o projeto da CPU inclui um registrador, ou conjunto de registradores, freqüentemente conhecido como palavra de estado de programa (PSW), que contém informação de estado. Tipicamente, o registrador PSW contém códigos de condição e outras informações de estado, incluindo os seguintes campos: •
Sinal: contém o bit de sinal do resultado da última operação aritmética.
•
Zero: atualizado com o valor 1 se o resultado da última operação for 0.
•
‘Vai-um’: atualizado com o valor 1 se uma operação resultar em um ‘vai-um’ para fora do bit de ordem superior (adição) ou em um ‘vem-um’ para o bit de ordem superior (subtração). É usado por operações aritméticas de múltiplas palavras.
•
Igual: atualizado com valor 1 se uma comparação lógica resultar em igualdade.
•
Overflow: usado para indicar overflow aritmético.
•
Habilitar/desabilitar interrupção: usada para habilitar ou desabilitar interrupções.
•
Supervisor: indica se a CPU está executando em modo supervisor ou em modo de usuário. Certas instruções privilegiadas apenas podem ser executadas no modo supervisor, assim como certas áreas de memória apenas podem ser acessadas no modo supervisor.
O projeto de uma CPU pode também incluir outros registradores relacionados ao estado e ao controle. Além do registrador PSW, deve existir um registrador que aponta para um bloco de memória que contém informação de estado adicional (por exemplo, blocos de controle de processo). Em máquinas que usam vetor de interrupções, pode existir um registrador de vetor de interrupções. Se for usada uma pilha para implementar certas funções (por exemplo, chamada de sub-rotina), será necessário um registrador indicador de topo de pilha. EM um sistema com memória virtual, um registrador é usado para apontador para a tabela de páginas. Finalmente, podem também ser usados registradores para o controle de operações de E/S. Diversos fatores devem ser considerados no projeto da organização de registradores de controle e de estado. Uma questão-chave é o suporte para o sistema operacional. Certos tipos de informação de controle são úteis especificamente para o sistema operacional. Se o projetista da CPU tem entendimento funcional sobre o sistema operacional a ser usado, a organização dos registradores pode ser feita razoavelmente de acordo com o sistema operacional. 7 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Outra decisão de projeto importante é a alocação de informação de controle entre registradores e memória. É comum reservar as primeiras (de endereço mais baixo) centenas ou milhares de palavras da memória para armazenar informações de controle. O projetista deve decidir que parte das informações de controle deve ser mantida em registradores e que parte deve ficar na memória, levando-se em conta o custo e a velocidade de acesso. Exemplos de Organização de Registradores de Microprocessadores Vamos abordar dois microprocessadores de 16 bits: o Motorola MC68000 e o Intel 8086. As figuras 3a e 3b representam a organização de registradores de cada um; os registradores usados apenas internamente pela CPU, como registradores de endereçamento à memória, não são mostrados.
Figura 3: Exemplos de organização de registradores de microprocessadores 8 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
O MC68000 divide seus registradores de 32 bits em oito registradores de dados e nove registradores de endereço. Os oito registradores de dados são usados principalmente para manipulação de dados, mas também como registradores índice. O tamanho dos registradores permite operar dados de 8, 16 ou 32 bits, conforme determinado pelo código de operação. Os registradores de endereço contêm endereços de 32 bits (sem segmentação); dois desses registradores são também usados como apontadores de pilha, um para o usuário e outro para o sistema operacional, dependendo do modo de execução corrente. Esses dois registradores são ambos identificados pelo número 7, uma vez que apenas um pode ser usado de cada vez. O MC68000 inclui também um contador de programa de 32 bits e um registrador de estado de 16 bits. Os projetistas da Motorola tinham como objetivo definir um conjunto de instruções bastante regular, sem registradores de uso especial. A preocupação com a eficiência de código levou-os a dividir os registradores de dois grupos funcionais, economizando um bit na especificação de registradores e mantendo, assim, um compromisso razoável entre a total generalidade e a compactação de código. O Intel 8086 adota uma abordagem diferente para a organização dos registradores. Todo registrador é de uso especial, embora alguns também possam ser de propósito geral. O 8086 contém quatro registradores de dados de 16 bits, que podem ser endereçados em unidades de 16 bits ou byte a byte, e quatro outros registradores de 16 bits, usados como apontadores e registradores índice. Os registradores de dados podem ser usados como propósito geral em algumas instruções, sendo, em outras, usados implicitamente. Por exemplo, uma instrução de multiplicação usa sempre o acumulador. Os quatro registradores apontadores são também usados implicitamente em diversas operações; cada um contém um deslocamento relativo ao início de um segmento. Existem também quatro registradores de segmento de 16 bits, dos quais três são usados de modo dedicado e implícito, pra indicar o segmento da instrução corrente (útil para instruções de desvio), um segmento de dados e um segmento de pilha. O uso desses registradores de modo dedicado e implícito proporciona uma codificação mais compacta, ao custo de uma flexibilidade mais reduzida. O 8086 inclui também um contador de programa e um conjunto de bits de estado e de controle. Outro ponto a respeito do projeto da organização de registradores é mostrado na figura 3c. Essa figura apresenta a organização dos registradores visíveis para o usuário no Intel 80386, que é um microprocessador de 32 bits. Entretanto, para fornecer compatibilidade com programas escritos para máquinas anteriores, ele retém a organização de registradores original embutida na nova organização. Em virtude dessa
9 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
restrição, os projetistas dos processadores de 32 bits tinham flexibilidade limitada para definir a organização de registradores.
3. CICLO DE INSTRUÇÃO Conforme podemos ver na figura 4, o ciclo de instrução inclui os seguintes subciclos: •
Busca: lê a próxima instrução da memória para a CPU.
•
Execução: interpreta o código de operação e efetua a operação indicada.
•
Interrupção: se as interrupções estão habilitadas e ocorreu uma interrupção, salva o estado do processo atual e processa a interrupção.
Figura 4: Ciclo de instruções com interrupção 10 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Podemos agora detalhar um pouco mais o ciclo de instrução. Primeiramente, devemos introduzir um subciclo adicional, conhecido como ciclo indireto. Ciclo Indireto A execução de uma instrução pode envolver um ou mais operandos, cada um dos quais requerendo um acesso à memória. Além disso, se for usado endereçamento indireto, serão requeridos acessos à memória adicionais. Podemos imaginar a busca de endereços indiretos como mais um subciclo de instrução. O resultado é mostrado na figura 5. A linha principal de atividade consiste em alternar as atividades de busca de instruções e de execução de instrução. Depois que uma instrução é buscada, ela é examinada para determinar se algum endereçamento indireto está envolvido. Se isso ocorrer, os operandos requisitados são buscados, usando endereçamento indireto. Seguindo a execução, pode ocorrer processamento de uma interrupção, antes da busca da próxima instrução.
Figura 5: Ciclo de instrução Outra maneira de ver esse processo é apresentada na figura 6. Essa figura mostra mais corretamente a natureza do ciclo de instrução. Quando uma instrução é buscada, seus campos de referência a operandos devem ser identificados. Cada operando de entrada localizado na memória é então buscado, podendo esse processo requerer endereçamento indireto. Operandos localizados em registradores não precisam ser buscados. Depois que a operação é executada, pode ser requerido um processo semelhante para armazenar o resultado na memória.
11 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 6: Diagrama de transição de estados do ciclo de instrução Fluxo de Dados A seqüência exata de eventos durante um ciclo de instrução depende do projeto da CPU. É possível, entretanto, indicar o que pode acontecer em termos gerais. Suponha que a CPU empregue um registrador de endereço de memória (MAR), um registrador de armazenamento temporário de dados (MBR), um contador de programa (PC) e um registrador de instrução (IR). 12 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Durante o ciclo de busca, uma instrução é lida a partir da memória. A figura 7 mostra o fluxo de dados durante esse ciclo. O contador de programa contém o endereço da próxima instrução a ser buscada. Esse endereço é movido para o MAR e colocado no barramento de endereço. A unidade de controle requisita uma leitura na memória, e o resultado é colocado no barramento de dados e copiado no MBR e então movido para o IR. Enquanto isso, o contador de programa é incrementado de 1, para preparar a próxima busca de instrução.
Figura 7: Fluxo de dados no ciclo de busca Uma vez que o ciclo de busca termina, a unidade de controle examina o conteúdo do IR para determinar se a instrução especifica algum operando com endereçamento indireto. Se isso ocorrer, um ciclo indireto é efetuado. Como mostra a figura 8, esse ciclo é bastante simples. Os N bits mais à direita do MBR, que contém a referência ao endereço, são transferidos para o MAR. Então, a unidade de controle requisita uma leitura de memória, para transferir o endereço do operando desejado para o MBR.
Figura 8: Fluxo de dados no ciclo indireto 13 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
O ciclo de busca e o ciclo indireto são simples e previsíveis. O ciclo de execução pode ter muitas formas, dependendo de qual das várias instruções de máquina está contida no IR. Ele pode envolver transferência de dados entre registradores, leitura e escrita na memória ou em dispositivos de E/S e invocação da ULA. Assim como o ciclo de busca e o ciclo indireto, o ciclo de interrupção é simples e previsível (Figura 9). O conteúdo corrente do PC deve ser salvo, para que a CPU possa retomar sua atividade normal depois de processar a interrupção. Assim, o conteúdo do PC é transferido para o MBR, para depois ser escrito na memória. A posição especial da memória reservada para esse propósito é carregada no MAR pela unidade de controle. Ela pode ser, por exemplo, a posição apontada pelo registrador de topo de pilha. O PC é carregado com o endereço da rotina de interrupção. Como resultado, o próximo ciclo de instrução começará buscando a instrução apropriada.
Figura 9: Fluxo de dados no ciclo de interrupção
4.
PIPELINE DE INSTRUÇÕES À medida que os sistemas de computação evoluem, é possível obter maior desempenho com o uso de tecnologias mais avançadas, tais como um conjunto de circuitos mais rápidos. Além disso, uma melhor organização da CPU pode também melhorar o desempenho. Alguns exemplos disso foram vistos anteriormente, tais como o uso de múltiplos registradores no lugar de um único acumulador e o uso de memória cache. Outra abordagem comum na organização da CPU é o uso de um pipeline de instruções. Estratégia de Pipeline Uma pipeline de instruções é semelhante a uma linha de montagem de uma industria. Uma linha de montagem tira proveito do fato de que um produto passa por 14 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
vários estágios de produção: produtos em vários estágios do processo de produção podem ser trabalhados simultaneamente. Em uma pipeline de instruções, novas entradas são aceitas em uma extremidade, antes que entradas aceitas previamente apareçam como saídas na outra extremidade. Para aplicar esse conceito para a execução de instruções, precisamos reconhecer que, de fato, uma instrução possui vários estágios. A figura 6, por exemplo, divide o ciclo de instrução em dez tarefas que ocorrem em seqüência. De maneira clara, existe oportunidade para trabalhar simultaneamente várias instruções, cada uma em um diferente estágio de execução. Como uma abordagem mais simples, suponha que o processamento de uma instrução é subdividido em dois estágios: busca da instrução e execução da instrução. Existem momentos durante a execução de uma instrução em que a memória principal não está sendo usada. Esse instante pode ser usado para buscar a próxima instrução, em paralelo com a execução da instrução corrente. A figura 10a representa essa abordagem. A pipeline tem dois estágios independentes. O estágio busca uma instrução e a armazena em uma área de armazenamento temporário. Quando o segundo estágio está livre, o primeiro passa para ele a instrução armazenada. Enquanto o segundo está executando essa instrução, o primeiro tira proveito de ciclos de memória que não são usados para buscar e armazenar a próxima instrução. Isso é chamado de busca antecipada de instrução (instruction prefetch) ou superposição de busca (fetch overlap).
Figura 10: Pipeline de instruções de dois estágios Note que esse processo acelera a execução de instruções. Se os estágios de busca e de execução tiverem a mesma duração, o número de instruções executadas por unidade de tempo será dobrado. Entretanto, se examinarmos bem essa pipeline (Figura 10b), veremos que essa duplicação da taxa de execução de instruções será pouco provável, por duas razões: 15 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
1. O tempo de execução geralmente é maior que o tempo de busca, pois a execução de uma instrução geralmente envolve leitura e armazenamento de operandos e execução de algumas operações. Portanto, o estágio de busca pode ter de esperar algum tempo antes que possa esvaziar sua área de armazenamento temporário. 2. A ocorrência de instruções de desvio condicional faz com que o endereço da próxima instrução a ser buscada seja desconhecido. Nesse caso, o estágio de busca teria de esperar até receber o endereço da próxima instrução do estágio de execução. O estágio de execução poderia, então, ter de esperar enquanto a próxima instrução é buscada. Em razão da ocorrência de instruções de desvio, o tempo perdido pode ser reduzido pelo uso de uma estratégia de adivinhação. Uma regra simples é a seguinte: quando uma instrução de desvio condicional é passada do estágio de busca para o de execução, o estágio de busca obtém na memória a instrução imediatamente seguinte à instrução de desvio. Então, se não ocorrer o desvio, nenhum tempo será perdido. Se ocorrer o desvio, a instrução buscada deve ser descartada, sendo buscada uma nova instrução. Embora esses fatores reduzam a potencial efetividade da pipeline de dois estágios, algum ganho de desempenho é obtido. Para conseguir maior desempenho, a pipeline deve ter maior número de estágios. Considere a seguinte decomposição do processamento de uma instrução: •
Busca de instrução (BI): lê a próxima instrução esperada e a armazena em uma área de armazenamento temporário.
•
Decodificação da instrução (DI): determina o código de operação da instrução e as referências a operandos.
•
Cálculo de operandos (CO): determina o endereço efetivo de cada operando fonte. Isso pode envolver endereçamento por deslocamento, endereçamento indireto via registrador, endereçamento indireto, assim como outras formas de cálculo de endereço.
•
Busca de operandos (BO): busca cada operando localizado na memória. Os operandos localizados em registradores não precisam ser buscados.
•
Execução da instrução (EI): efetua a operação indicada e armazena o resultado, se houver, na localização do operando de destino especificado.
•
Escrita de operando (EO): armazena o resultado na memória.
16 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Com essa decomposição, os vários estágios têm duração aproximadamente igual. Para fins ilustrativos, vamos supor que a duração de cada estágio seja igual. A figura 11 mostra que uma pipeline de seis estágios pode reduzir o tempo de execução de 9 instruções de 54 para 14 unidades de tempo.
Figura 11: Diagrama de tempo para operação da pipeline de instruções O diagrama considera que cada instrução passa por todos os seis estágios da pipeline. Nem sempre isso acontece. Por exemplo, uma instrução de carga não necessita do estágio EO. Entretanto, para simplificar o hardware da pipeline, a sincronização é feita ao supor que cada instrução requer todos os seis estágios. Além disso, o diagrama supõe que todos os estágios possam ser executados em paralelo. Em particular, supõe-se que não existam conflitos de acesso À memória. Por exemplo, os estágios BI, BO e EO envolvem acesso à memória. O diagrama subentende que a memória pode ser usada simultaneamente por esses estágios, o que não é possível na maioria dos sistemas de memória. Entretanto, o valor desejado pode estar na memória cache ou os estágios BO e EO podem não ser executados. Assim, esses conflitos de acesso à memória muitas vezes não diminuem a velocidade de execução de instruções na pipeline. Diversos outros fatores limitam o aumento de desempenho. Se os seis estágios não têm duração igual, existe certa espera envolvida em vários estágios da pipeline. Outra dificuldade é que uma instrução de desvio condicional pode invalidar diversas buscas de 17 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
instrução. Um exemplo imprevisível semelhante é a ocorrência de uma interrupção. A figura 12 mostra o efeito de um desvio condicional, que usa o mesmo programa da figura 11. Suponha que a instrução 3 seja um desvio condicional para a instrução 15. Até que a execução dessa instrução seja efetuada, não há como saber qual a instrução que virá a seguir. Nesse exemplo, a pipeline simplesmente carrega a próxima instrução da seqüência (instrução 4) e prossegue a execução. Na figura 11, o desvio não é tomado e, portanto, obtemos total benefício do aumento de desempenho. Na figura 12, o desvio é tomado, mas isso é determinado apenas ao final da unidade de tempo 7. Nesse ponto, devem ser retiradas da pipeline as instruções que não são úteis. Durante a unidade de tempo 8, a instrução 15 entra na pipeline. Nenhuma instrução é completada durante as unidades de tempo 9 a 12; essa é a penalidade de desempenho em virtude do fato de não termos previsto corretamente o resultado da instrução de desvio. A figura 13 mostra a lógica necessária para que a pipeline possa tratar desvios e interrupções.
Figura 12: O efeito de um desvio condicional na operação de uma pipeline de instruções
18 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 13: Pipeline de instruções de seis estágios O uso de uma pipeline de seis estágios apresenta alguns problemas que não ocorrem na organização mais simples de dois estágios. O estágio CO pode depender do conteúdo de um registrador que pode ser alterado por uma instrução anterior que ainda está na pipeline. Outros conflitos de memória e de registradores podem ocorrer. O sistema deve conter algum tipo de lógica para tratar esses conflitos. 19 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Da discussão anterior, pode parecer que quanto maior o número de estágios da pipeline, mais rápida é a taxa de execução. Alguns projetistas do S/360 da IBM apontaram dois fatores que frustram esse padrão para projetos de alto desempenho: 1. Em cada estagio da pipeline, existe certo custo (overhead) envolvido na movimentação de dados entre áreas de armazenamento temporário e na execução de várias atividades de preparação e entrega de dados. Esse custo pode aumentar consideravelmente o tempo total de execução de uma única instrução. Isso é significativo quando instruções consecutivas são logicamente dependentes, seja pelo uso intensivo de desvios, seja por dependências de acesso à memória. 2. A lógica de controle requerida para manipular dependências entre acessos à memória ou entre registradores, assim como para otimizar o uso da pipeline, aumenta bastante com o número de estágios. Isso pode levar a uma situação em que a lógica que controla a comutação entre estágios é mais complexa que os estágios a serem controlados. O uso da pipeline de instruções é uma técnica poderosa para aumentar o desempenho, mas requer um projeto cuidadoso para que possa alcançar resultados ótimos com uma complexidade razoável.
5. CARACTERÍSTICAS E RECURSOS Apesar do processador ser o componente de maior importância do computador, já que ele processa as informações, ele não é, necessariamente, o maior responsável pelo seu desempenho. Na verdade, dependendo da aplicação à qual o computador se destina, o desempenho do processador poderá ser menos importante que a quantidade de memória principal, que o desempenho da placa de vídeo ou até mesmo que o desempenho do disco rígido. Nunca esqueça que o computador é um conjunto onde cada componente depende dos demais para mostrar o seu potencial. Logo, o computador será tão rápido quanto seu componente mais lento. O componente de baixo desempenho será um gargalo que impedirá que o conjunto manifeste todo o seu potencial. Com o rápido avanço da tecnologia, e com várias empresas disputando o mercado de processadores, são desenvolvidos projetos, cada vez mais ousados, a fim de produzir processadores com melhor desempenho. Isso criou uma série de "armadilhas" de avaliação de desempenho já que, com projetos tão diferentes, cada processador
20 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
acaba saindo-se bem em algumas aplicações mas mal em outras. Não é mais possível julgar o desempenho do processador apenas pela sua freqüência de operação. Clock Quando vamos comprar um processador a primeira coisa que perguntamos é: qual sua freqüência de operação? (medida em Megahertz - MHz - ou milhões de ciclos por segundo, também chamada de clock). Acontece que nem sempre um processador com uma velocidade de operação mais alta é mais rápido do que outro que opera com uma freqüência um pouco mais baixa. A freqüência de operação de um processador indica apenas quantos ciclos de processamentos são realizados por segundo, o que cada processador é capaz de fazer em cada ciclo é outra história. Imagine um processador 80486 de 100 MHz ao lado de um Pentium também de 100 MHz. Apesar da freqüência de operação ser a mesma, o 80486 perderia em desempenho. O Pentium seria pelo menos 2 vezes mais rápido devido às diferenças da arquitetura interna que existe entre estes dois processadores. Coprocessador Aritmético Todos os processadores da família x86 (desde o 8086 até o Pentium 4 e todos os compatíveis) são originalmente processadores de números inteiros. Desta forma, para o tratamento de números em ponto flutuante é necessário o uso de um coprocessador aritmético. A sua função é de auxiliar o processador principal no cálculo de funções complexas. Até o 386, o coprocessador aritmético era um acessório que tinha que ser comprado à parte e instalado num encaixe apropriado na placa mãe. Cada modelo de processador possuía um modelo equivalente de coprocessador. O problema era que: como poucos usuários equipavam seus computadores com coprocessadores aritméticos, a produção destes era baixa e os preços eram altíssimos. Com o aumento da quantidade de aplicativos que necessitavam do coprocessador aritmético
(jogos
com
visual
sofisticado,
planilhas
eletrônicas,
sistemas
de
processamento de imagem, sistemas de desenhos auxiliado por computador – CAD, entre tantos outros) sua incorporação ao interior do processador foi um passo natural. Atualmente todos os processadores possuem pelo menos um coprocessador aritmético incorporado. Mas existem diferenças significativas de desempenho que iram determinar as diferenças de desempenho dos processadores em aplicações como jogos e aplicativos gráficos que são as aplicações onde os processadores são mais exigidos.
21 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 14: Encaixe para um coprocessador aritmético numa placa-mãe com processador 80486. Cache Enquanto os processadores tornavam-se mais rápidos a memória principal, sua principal ferramenta de trabalho, pouco evoluía em performance. Durante o desenvolvimento do processador 80386, percebeu-se que a velocidade de trabalho da memória principal não seria capaz de acompanhar a velocidade do processador. Isto faria com que ele tivesse que ficar “esperando” os dados serem liberados pela memória principal para poder concluir suas tarefas, ocasionando uma enorme perda de desempenho. Para solucionar este problema começou a ser usada a memória cache, um tipo ultra-rápido de memória que serve para armazenar os dados usados com mais freqüência pelo processador evitando que ele tenha que recorrer diretamente à memória principal São usados dois tipos de memória cache: o cache primário, ou cache L1, e o cache secundário, ou cache L2. O cache primário (cache L1) é embutido no próprio processador e é rápido o bastante para acompanhá-lo em velocidade. Como este tipo de memória é extremamente caro é utilizada apenas uma pequena quantidade. O cache secundário, por ser mais barato, é usado em uma quantidade maior. Dependendo do processador, o cache L2 pode ser embutido no próprio processador ou ser externo ao processador. Atualmente a maioria dos processadores trazem o cache L2 integrado, não permitindo qualquer modificação. Encaixes Definimos o processador como o componente de maior importância do computador, já que é ele quem processa quase todas as informações. Agora vamos falar um pouco sobre a placa-mãe. Ela integra todos os componentes que permitem ao processador 22 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
comunicar-se com os demais periféricos, como discos rígidos, placas de vídeo, etc., o acomoda e o alimenta eletricamente. Cada processador precisa de uma placa mãe desenvolvida especialmente para ele, pois, devido às diferenças nas suas arquiteturas os processadores possuem “necessidades” diferentes. Cada processador possui um número diferente de contatos elétricos, ou terminais, opera usando uma voltagem diferente e precisa de um conjunto de circuitos de apoio desenvolvidos especialmente para ele. O próprio encaixe do processador muda de família para família. O Pentium II, por exemplo, utiliza um encaixe conhecido como Slot 1 que é parecido com o encaixe de um cartucho de video-game enquanto o AMD K6 e o Pentium comum utilizam outro tipo de encaixe chamado de Soquete 7.
Figura 15: Pentium comum, a direita o Slot 1 utilizado pelo Pentium II.
6.
EVOLUÇÃO DA FAMÍLIA DE PROCESSADORES x86 E SEUS COMPATÍVEIS Intel 8088 O 8088, lançado em 79 pela Intel, é o irmão menor do 8086 lançado um ano antes. Internamente os dois são idênticos; a diferença é que o 8088 usava periféricos de 8 bits enquanto o 8086 usava periféricos de 16 bits que, apesar de mais avançados, eram muito caros. Para baratear o projeto do primeiro PC a IBM optou por usar o 8088. Na época o 8088 era considerado um processador bastante avançado. Era composto por 29.000 transistores (o Pentium 4 tem 41 milhões), acessava 1 megabyte de memória e operava numa freqüência de clock de 4,77 MHz. Curiosidade: o PC original da IBM, lançado em agosto de 1981, vinha com 64 Kbytes de memória principal, um monitor monocromático (fósforo verde – resolução 320x200) de 12 polegadas, uma unidade de disquetes de 5 1/4 de 160 KB, não dispunha de
disco rígido e usava o sistema operacional MS-DOS 1.0. Dois anos depois foi
lançado o PC XT que, apesar de continuar usando o 8088 de 4,77 MHz, vinha com 256 KB de RAM, um disco rígido de 10 MB, monitor CGA (colorido – resolução 320x200) e usava o sistema operacional MS-DOS 2.0. Fabricantes de clones (micros compatíveis com os da IBM) criaram projetos de micros XT mais avançados equipados com o 23 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
processadores 8088 de 8 MHz até 10 MHz, discos rígidos maiores e até 640 KB de memória principal. Intel 80286 O 286 foi o sucessor do 8088. O principal avanço trazido pelo 286 são seus dois modos de operação batizados de Modo Real e Modo Protegido. No Modo Real o 286 se comporta exatamente como um 8086 sendo mais rápido e oferecendo total compatibilidade com os programas já existentes. No Modo Protegido ele manifesta todo o seu potencial incorporando funções mais avançadas como a capacidade de acessar até 16 MB de memória principal, multitarefa, memória virtual em disco e proteção de memória. Porém, junto com os avanços veio um grande defeito. Para acessar os novos recursos era preciso que o processador entrasse em Modo Protegido. O problema é que uma vez em Modo Protegido o 286 deixa de ser compatível com os programas de Modo Real, ou seja, deixava de ser compatível com o MS-DOS, que é um programa de Modo Real, e não havia nenhuma instrução que o fizesse voltar ao Modo Real apenas “Resetando” o computador. Por isso, apesar dos avanços, os computadores baseados no 286 acabavam sendo usados apenas para rodar aplicativos de Modo Real, que também podiam ser rodados em um XT, aproveitando apenas a maior velocidade do 286. Sua primeira versão funcionava com clock de 6 MHz e foram desenvolvidas versões de até 20 MHz de clock. Intel 80386 O 386 pode ser considerado como o primeiro processador contemporâneo. Incorporava todas as instruções do conjunto x86 usadas pelos programas atuais, ou seja, um 386 com quantidade suficiente de memória principal e suficiente espaço em disco rígido é capaz de rodar o Windows 95 e a maioria dos programas, até mesmo jogos, claro que extremamente devagar. O 386 trouxe a solução para o problema do 286 em Modo Protegido incorporando uma instrução que permitia ao processador alternar entre o Modo Real e o Modo Protegido a qualquer momento. Com isto os programas podiam usar o Modo Protegido e voltar ao Modo Real sempre que fosse preciso acessar alguma rotina do MS-DOS. Intel 80486 O 486 foi o primeiro processador a ter cache interno, o cache L1 (8 KB), que era complementado pelo cache L2, externo, incorporado à placa mãe. Também foi o primeiro processador da Intel a trazer coprocessador aritmético embutido. Somadas com
24 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
mudanças na sua arquitetura interna, estas melhorias tornavam o 486 praticamente 2 vezes mais rápido do que um 386 do mesmo clock. Foram lançadas versões do 486 com 25 MHz, 33 MHz e 40 MHz de clock. Mas havia uma barreira; as placas-mãe não eram capazes de trabalhar com mais de 40 MHz. Para solucionar esse problema foi criado o recurso de Multiplicação de Clock no qual o processador trabalha internamente a uma velocidade maior do que a da placa-mãe. Então foram lançados os processadores 486DX2 (que trabalham com dobro da freqüência da placa-mãe) e os 486DX4 (que trabalham com triplo da freqüência da placa-mãe). A freqüência de operação da placa-mãe é chamada de freqüência de barramento, ou de BUS. Freqüência do Processador
Freqüência da placa mãe
Multiplicador
486DX-2 50 MHz
25 MHz
2x
486DX-2 66 MHz
33 MHz
2x
486DX-4 100 MHz
33 MHz
3x
Como só a velocidade do processador é que muda foi possível desenvolver placasmãe com possibilidade de up-grade (subir de nível – melhoria) que permitiam a troca de um 486DX-33 por um 486DX2-66 ou por um 486DX4-100 simplesmente ajustando o valor do multiplicador da placa-mãe. Esta tendência se mantém até hoje, com o detalhe que nas placas-mãe atuais a configuração é muito mais fácil. Outra novidade trazida pelos processadores 486 foi a necessidade do uso de um ventilador (Cooler – resfriador) sobre o processador para evitar que ele se aqueça demais. O uso do cooler é obrigatório em todos os processadores 486DX-2 e posteriores. Intel Pentium O Pentium trouxe várias melhorias que o tornam quase duas vezes mais rápido que um 486 do mesmo clock. Como destaque podemos citar o aumento do tamanho do cache L1, que passou a ser de 16 KB (o dobro do encontrado no 486) e um coprocessador aritmético completamente redesenhado (quase 5 vezes mais rápido do o 486) tornando o Pentium ainda mais rápido em aplicativos que demandam um grande número de cálculos. Outro aperfeiçoamento do Pentium, e um dos principais motivos de seu maior desempenho, foi a adoção de uma arquitetura Superescalar (relacionada com a capacidade de processamento paralelo de instruções). Internamente, o Pentium é composto por dois pipelines distintos sendo capaz de processar até duas instruções por ciclo de clock, uma em cada pipeline. 25 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Como o Pentium é na verdade um conjunto de dois “processadores” de 32 bits trabalhando em paralelo é possível acessar a memória usando palavras binárias de 64 bits. Devido a esta característica, era necessário a utilização de módulos de memória de 72 vias em pares já que cada módulos permite o acesso aos dados usando palavras de 32 bits. Acessando os dois módulos, ao mesmo tempo, chegamos aos 64 necessários. AMD 5x86 Este processador foi lançado pela AMD pouco depois do lançamento do Pentium. Apesar do nome é na verdade um processador 486 que trabalha com 133 MHz de clock. Cyrix Cx5x86 Além de desenvolver projetos de processadores 486, que eram fabricados pela Texas Instruments, a Cyrix lançou um processador que misturava recursos do 486 e do Pentium, oferecendo um desempenho bastante superior a um 486 padrão. Como o 5x86 da AMD, Cx5x86 é totalmente compatível com o 486 e tinha versões com 100 MHz e com 120 MHz de clock. AMD K5 Na época do 386 e do 486 a AMD era uma parceira da Intel. A Intel fornecia os projetos dos processadores e a AMD os produzia e vendia com o seu nome. Um 486 da AMD é idêntico a um 486 da Intel mudando apenas o nome do fabricante. Em troca a AMD pagava royalties para a Intel. Porém, a partir do Pentium a Intel desfez o acordo restando para a
AMD
desenvolver seus próprios projetos de processadores. A primeira tentativa foi o AMD K5 com um projeto superior ao Pentium em alguns quesitos porém seu lançamento ocorreu atrasado tornando a concorrência com o Pentium quase impossível. Pentium MMX O Pentium MMX é mais avançado e mais rápido que o Pentium antigo por dois fatores: primeiro por possuir mais cache L1 (o Pentium possui 16 KB enquanto o MMX possui 32 KB) e L2 de 512 Kb externa, segundo, o MMX foi o primeiro processador a trazer as instruções MMX encontradas em todos os processadores atuais. O conjunto de instruções MMX melhorou o desempenho do processador em aplicações multimídia e em processamento de imagens. Nestas aplicações algumas rotinas podem ser executadas até 400% mais rápido com o uso das instruções MMX. O ganho de performance porém não é automático, sendo necessário que o programa seja otimizado para utilizar as novas instruções, caso contrário não haverá nenhum ganho de performance. 26 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Curiosidade: É possível instalar o MMX na maioria das placas-mãe soquete 7, para Pentium, desde que ela suporte a voltagem de 2.9 volts usada pelo MMX. O Pentium trabalha com uma voltagem de 3,3 volts. AMD K6 O K6 foi o primeiro processador da AMD a conseguir conquistar uma fatia considerável do mercado. Em termos de arquitetura é semelhante ao Pentium Pro da Intel mas equipado com 64 KB de cache L1 e utilizando o cache L2 da placa mãe. O ponto fraco do K6 era o coprocessador aritmético que possui uma arquitetura muito mais simples do que a utilizada pela Intel no Pentium MMX e no Pentium II, sendo bem mais lento. Apesar deste detalhe não atrapalhar o desempenho do K6 em aplicativos de escritório faz com que o seu desempenho em aplicativos gráficos e em jogos com gráficos tridimensionais fique bastante prejudicado. Nestes aplicativos o K6 chega a ser 20% mais lento do que um Pentium MMX do mesmo clock. AMD K6-2 A exemplo da Intel, que incorporou as instruções MMX ao conjunto de instruções x86 padrão, a AMD incorporou novas instruções ao seu processador K6-2. Estas instruções são chamadas de 3D-Now! e tem o objetivo de agilizar o processamento de imagens tridimensionais. Como acontece com o MMX, é necessário que o programa faça uso das instruções 3D-Now!. Esta tecnologia continua sendo suportada pelos processadores Athlon e Duron, sucessores do K6-2, e foi incorporada pela maioria dos jogos disponíveis no mercado. Utilizava cache L1 de 64 Kb e cache L2 externa de 256 Kb half speed. AMD K6-3 Apesar de ter sido lançado bem depois do K6-2, o K6-3 acabou saindo de linha bem mais cedo. O K6-3 é um K6-2 com 256 KB de cache L2 embutido e trabalhando na mesma freqüência do processador. O cache L2 mais rápido aumenta bastante o desempeno do K6-3 em relação ao K6-2; mais de 20% em alguns aplicativos, porem, devido ao cache L2, o K6-3 era muito caro; um K6-3 de 400 MHz custava bem mais do que um K6-2 de 500 MHz. Cyrix 6x86MX O 6x86MX é o concorrente da Cyrix para o MMX da Intel. Apesar da arquitetura simples, este processador traz os mesmos 64 KB de cache L1 encontrados no K6. Em alguns aplicativos o 6x86 leva vantagem sobre um Pentium do mesmo clock o que levou 27 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
a Cyrix a vender estes processadores não segundo o clock mas sim segundo um índice denominado de Pr. Um 6x86MX Pr 233 por exemplo opera a apenas 200 MHz de clock. O grande problema é que o coprocessador aritmético do 6x86 é bem mais fraco que o coprocessador do K6 fazendo com que ele apresentasse um desempenho muito ruim em aplicativos gráficos e, principalmente, jogos. A vantagem era que o 6x86 era bem mais barato que um Pentium MMX ou que um AMD K6 tornando-se uma opção razoável para aplicações de escritório. Pentium Pro Até aqui os processadores foram apresentados numa ordem mais ou menos cronológica mas cabe uma exceção para o Pentium Pro. Este processador foi lançado bem antes do Pentium MMX e do AMD K6-2 sendo, praticamente, um contemporâneo do Pentium Clássico. Porém, a sua arquitetura serviu como base para o Pentium II, para o Pentium III, para o Celeron e, apesar das modificações, a idéia básica continua também no Pentium 4. Os processadores AMD a partir do K6 também usam uma arquitetura semelhante. O Pentium Pro foi desenvolvido para competir no mercado de máquinas de alto desempenho, equipando workstations (estações de trabalho) e servidores, onde o seu principal atrativo era o suporte ao Multiprocessamento permitindo a construção de equipamentos com até 4 processadores numa mesma placa-mãe trabalhando em paralelo. A partir do Pentium Pro, os processadores Intel passaram a incorporar um núcleo RISC. Até o Pentium MMX todos os processadores eram capazes de executar diretamente instruções complexas porém esta versatilidade começou a comprometer a performance. O Pentium Pro, ao invés de executar diretamente as instruções do conjunto x86, é capaz de executar apenas operações básicas. Foi acrescentado um circuito Decodificador de Instruções encarregado de converter as instruções do conjunto x86 nas instruções simples entendidas pelo processador. Outra inovação: o Pentium Pro foi o primeiro processador a trazer cache L2 integrado e operando na mesma freqüência do processador. Foi produzido em versões equipadas com 256 KB, 512 KB e 1024 KB de cache L2 e operava com clock de 166 MHz ou 200 MHz, além da cache L1 de 16 Kb. Devido a sua forma de encapsulamento (colocar em capsula – técnica de acomodar a pastilha de silício do processador dentro de uma capsula de cerâmica que serve de suporte) o Pentium Pro utiliza um outro tipo de encaixe, batizado de Soquete 8, bem maior do que o Soquete 7 utilizado pelo Pentium clássico e similares, possuindo também uma pinagem diferenciada que impede que o processador seja encaixado ao contrário.
28 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 16: Vista da parte inferior de um processador Pentium PRO. Pentium II A Intel desenvolveu o Pentium II usando como base o projeto do Pentium Pro. Suporta multiprocessamento, mas é limitado à dois processadores. Para habilitar este recurso,
basta
processadores
uma
placa-mãe
idênticos
e
com
um
suporte
sistema
para
dois
operacional
processadores, com
suporte
dois para
multiprocessamento como o Windows NT, o Windows 2000 ou o Linux. O Windows 98 não serve pois reconhecerá apenas o primeiro processador deixando o segundo desativado. A mudança mais visível no Pentium II é o seu novo formato. Ao invés do encapsulamento de cerâmica, foi usada uma placa de circuito que traz o processador e o cache L2 integrado. Protegendo esta placa existe uma capa plástica formando um cartucho parecido com um cartucho de video-game. O novo encaixe foi batizado pela Intel de Slot 1. Além do cache L1 de 32 KB, o Pentium II vem com 256 ou 512 KB de cache L2 trabalhando com metade do clock do processador.
Figura 17: O novo encaixe e o novo formato utilizado pelo Pentium II Pentium II Xeon O Xeon usa, basicamente, a mesma arquitetura do Pentium II. A diferença está no cache L2 que funciona na mesma velocidade do processador. Foi concebido para 29 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
equipar servidores substituindo o Pentium Pro. Nestas aplicações o processamento é muito repetitivo e o cache, mais rápido e em maior quantidade, faz uma grande diferença. Outro recurso importante é a possibilidade de se usar até 4 processadores na mesma placa-mãe. Foi substituído pelo Pentium III Xeon e, mais recentemente, pelo Xeon baseado no Pentium 4. Celeron Depois que lançou o Pentium II, no início de 1998, a Intel abandonou a fabricação do Pentium MMX passando a vender apenas o processador Pentium II, que era muito caro. A estratégia não deu muito certo e o Pentium II perdeu boa parte do mercado para o AMD K6-2 e o Cyrix 6x86 que, apesar de terem um desempenho inferior, eram muito mais baratos. Tentando reverter a situação a Intel lançou uma versão de baixo custo do Pentium II batizada de Celeron, do latin Celerus que significa velocidade. O Celeron original nada mais era do que um Pentium II desprovido do cache L2 integrado e do invólucro plástico.
Figura 18: Um Celeron de 300 MHz de clock As primeiras versões do Celeron (todos com clock 266 MHz e alguns com clock 300 MHz) não traziam cache L2 e, por isso, apresentavam um desempenho muito fraco. Com a retirada do cache L2, a performance do processador caiu em 40% fazendo o Celeron perder para processadores menos avançados como o Pentium MMX, o AMD K6-2 e o 6x86MX. Devido ao seu baixo desempenho, o Celeron sem cache L2 não conseguiu uma boa aceitação no mercado. Numa tentativa de reverter a péssima performance do processador a Intel lançou novas versões do Celeron com 128 KB de cache L2 que, ao contrário do cache L2 do Pentium II, funciona na mesma freqüência do processador. Todos os Celerons atuais possuem cache L2. Enquanto no Pentium II o cache L2 é formado por chips separados, soldados na placa de circuito do processador, no Celeron o cache L2 foi integrado ao processador. Este cache L2 fez uma enorme diferença na performance do processador. Enquanto um Celeron antigo é 40% mais lento que um Pentium II do mesmo clock o Celeron com 30 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
cache é 6% mais lento, chegando a empatar em algumas aplicações. Isto acontece porque, apesar do Celeron ter menos cache L2, nele o cache L2 funciona na mesma freqüência do processador compensando parte da diferença de tamanho. Alguns programas, como o MS-Word 97, necessitam de uma grande quantidade de cache L2. Neste caso, mesmo sendo mais lento, o cache do Pentium II é mais eficiente por ser maior. Em compensação, aplicativos que manipulam imagens necessitam de um cache L2 rápido pois os dados a serem manipulados são menos repetitivos. Neste caso, o cache do Celeron acaba sendo tão, ou até mesmo mais, eficiente do que o cache do Pentium II. Outro ponto a favor do Celeron é seu coprocessador aritmético que, sendo idêntico ao do Pentium II, é muito mais rápido que o do Pentium MMX, e do AMD K6-2, o que lhe garante um ótimo desempenho em aplicações gráficas.
A. Soquete 370 x Slot 1 Inicialmente o Celeron foi lançado no formato do Slot 1 para manter compatibilidade com as placas-mãe já existentes e facilitar as vendas. Depois foi lançado um novo formato de encapsulamento e um novo tipo de encaixe para o Celeron, chamado de Soquete 370. O novo formato é muito parecido com o Soquete 7 do Pentium MMX, a diferença é que possui alguns pinos a mais. O Celeron para Soquete 370, também chamado de PPGA (Plastic Pin Grid Array), apesar dos encaixes serem parecidos não é compatível com o Soquete 7.
Figura 19: Vista da parte traseira de um Pentium MMX (esquerda) e de um Celeron (direita). É fácil perceber a diferença na quantidade de pinos.
Figura 20: O Celeron para Soquete 370 utiliza a mesma pinagem do que é montado no Slot 1. 31 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 21: O Celeron também evoluiu para utilizar o núcleo Coppermine do Pentium III. Pentium III O Pentium III é o processador com mais variações. Existem versões que: utilizam barramento de 100 MHz, utilizam barramento de 133 MHz, L1 de 32 Kb e com L2 de 512 KB half-speed (metade da freqüência do processador) ou com L2 de 256 KB full-speed (mesma freqüência do processador), utilizam o formato Slot 1, utilizam o formato FCPGA, utilizam o core (núcleo) Katmai, utilizam o core (núcleo) Coppermine (mais avançado), operam a 2 volts, versões, operam a 1,6 volts, e por aí vai. Nunca a escolha de um processador foi tão confusa. Para entender todas estas variações vamos ver cada um dos recursos introduzidos no Pentium III e a sua evolução.
Figura 22: Pentium III formato Slot 1 (esquerda) e formato FC-PGA (direita)
A. As novas instruções SSE Basicamente as instruções SSE diferem das instruções 3D-Now!, dos processadores AMD, devido à forma como são executadas. A vantagem é que o Pentium III é capaz de processar, simultaneamente, as instruções normais e as instruções SSE. Com as instruções 3D-Now!, o programa tem que escolher, a todo momento, entre utilizar uma das instruções padrão ou uma das instruções 3D-Now!. 32 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
O Pentium III é capaz de usar os dois tipos de instruções, simultaneamente, mantendo o coprocessador aritmético ocupado durante mais tempo, o que resulta em ganho de performance.
B. Os núcleos Katmai x Coppermine As primeiras versões do Pentium III (450 MHz, 500 MHz, 550 MHz e 600 MHz de clock) foram construídas usando a mesma técnica de fabricação do Pentium II, ou seja, utilizando o mesmo encaixe Slot 1, a mesma voltagem de 2.0 volts, os mesmos 512 KB de cache L2 trabalhando com a metade da freqüência do processador, o mesmo cache L1 de 32 KB e barramento de 100 MHz. Em essência, nada mais do que um Pentium II com instruções SSE. Isto significa que em aplicativos que não foram otimizados para as novas instruções o desempenho era o mesmo de um Pentium II do mesmo clock. O núcleo (core) utilizado nestes processadores era o de nome código Katmai. As próximas versões do Pentium III (533B e 600B) continuam utilizando o núcleo (core) Katmai. A diferença é que estas versões utilizam barramento de 133 MHz. O barramento de 133 MHz vale apenas para acesso à memória principal, todos os demais componentes (placas de vídeo, disco rígido, etc.) continuam operando na mesma freqüência original (33 MHz para barramento PCI e 66 MHz para barramento AGP). Como apenas a memória principal trabalha mais rápido, o ganho de performance com barramento de 133 MHz é pequeno, abaixo de 3%, e obriga o uso de módulos de memória de 133 MHz (conhecidos como PC-133), mais caros que os módulos de memórias de 100 MHz (conhecidos como PC-100). As versões seguintes do Pentium III (650 MHz, 667 MHz, 700 MHz, 733 MHz, 750 MHz, 800 MHz, 850 MHz, 900 MHz, 1 GHz de clock e as 500E, 550E, 600E, 533EB, 600EB e 800EB) utilizam um núcleo (core) mais avançado, chamado de Coppermine, que trouxe vários avanços sobre a versão Katmai. No núcleo Coppermine os transistores são bem menores (0,18 mícron contra 0,25 microns do núcleo Katmai). Transistores menores geram menos calor, o que permite processadores mais rápidos. Com o núcleo Katmai, o limite do Pentium III foi de 600 MHz de clock. Utilizando o núcleo Coppermine foi possível evoluir até 1 GHz de clock. Transistores menores ocupam menos espaço, o que permite incluir mais componentes no núcleo do processador; este foi o segundo avanço. No Pentium III Katmai o cache L2 é composto por dois chips separados, soldados na placa de circuito acoplada ao processador, e opera com metade da freqüência do processador. No Pentium III Coppermine ele foi movido para dentro do processador e opera na 33 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
mesma freqüência do processador, melhorando bastante o desempenho. O único porém é que, no Coppermine o cache L2 possui 256 KB, metade do encontrado nas versões anteriores do Pentium III.
C. FC-PGA Para cortar custos a Intel lançou o Pentium III Coppermine no formato PPGA, que usa o Soquete 370. Para o Pentium III Coppermine o novo encaixe é chamado de FCPGA. Tabela 1: Resumo das variações do Pentium III Versões 450, 500, 533B e 500E e 550 e 600 600B 550E Recursos MHz
650, 700, 750 e 667 e 733 MHz; 800 MHz; 600E 533EB, 600EB, 800EB e 1 GHz
Core
Katmai
Katmai
Coppermin e
Encaixe
Slot 1
Slot 1
FC-PGA
Versões com barramento de 100 MHz
Sim
Não
Sim
Sim
Não
Versões com barramento de 133 MHz
Não
Sim
Não
Não
Sim
512 KB half-speed
512 KB half-speed
256 KB full-speed
256 KB full-speed
256 KB full-speed
Cache L2
Coppermine Slot 1 e FCPGA
Coppermine Slot 1 e FCPGA
A sigla E diferencia os processadores Coppermine dos Katmai para versões do mesmo clock (E são os Coppermine). A sigla B indica processadores para barramento de 133 MHz; a combinação EB indica processadores Coppermine para barramento de 133 MHz. Em geral estas siglas são utilizadas para diferenciar processadores do mesmo clock.
AMD Athlon Com o lançamento do Athlon, ou K7, a AMD mostrou que tem força para competir não apenas no mercado de processadores de baixo custo, como na época do K6-2, mas também para disputar no ramo de processadores de alto desempenho. A principal vantagem do Athlon é o seu coprocessador aritmético bastante aperfeiçoado. Enquanto o coprocessador aritmético do K6-2 processa apenas uma instrução por ciclo, o coprocessador aritmético do Athlon processa até 3 instruções por ciclo. Comparado com o Pentium III, o Athlon leva vantagem pois o Pentium III é capaz 34 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
de processar apenas 2 instruções por ciclo. Isso explica o bom desempenho do Athlon em alguns aplicativos. Mas como o Pentium III tem as instruções SSE, que são mais poderosas que as instruções 3D-Now!, isto faz com que, em alguns aplicativos otimizados, o Pentium III supere o Athlon. Na média, os dois processadores ficam no mesmo nível. Cada um leva vantagem em algumas áreas. As maiores vantagens do Athlon são: ser mais barato que um Pentium III de mesmo clock e estar disponível em clocks maiores. Cache L1 de 128 Kb e L2 de 512 Kb half speed ou 256 Kb full speed. A. Versões A primeira versão do Athlon vinham com 512 KB de cache L2, operando com 1/2, 2/5 ou 1/3 da freqüência do processador dependendo da versão. Foram produzidas apenas no formato slot A (cartucho) que, apesar de ser parecido com o Slot 1, é incompatível.
Figura 23: AMD Athlon slot A (esquerda) e Athlon Thunderbird (direita). Na versão seguinte, chamada de Athlon Thunderbird, a AMD incorporou o cache L2 ao processado. Com 256 KB de cache L2 integrado e operando com mesma freqüência do processador o Athlon Thunderbird teve um grande ganho de performance em relação ao anterior. Utiliza um novo encaixe, chamado Soquete A, de formato parecido com o Soquete 370 usado pelos processadores Intel. Recomendação: ao comprar uma placa-mãe para o Athlon compre uma modelo Soquete A que oferece a possibilidade de atualizar o processador. As placas-mãe Slot A já estão obsoletas. Para diferenciar o Athlon Thunderbird do modelo Athlon antigo basta checar seu formato.
35 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 24: AMD Athlon Thunderbird Soquete A (também identificado com Soquete 462) AMD Duron O Duron tem o mesmo núcleo do Athlon Thunderbird porem com menos cache L2. Enquanto o Athlon Thunderbird tem 256 KB de cache L2 full speed (mesma freqüência do processador) o Duron tem com 64 KB de cache L2 full speed. Apesar do tamanho de cache L2, o Duron tem um cache L1 de 128 KB totalizando 192 KB de cache. Uma vantagem do Duron, em relação ao Celeron, é que no Duron o cache L2 é exclusivo. Significa que os dados depositados no cache L1 e no cache L2 serão diferentes. Então temos 192 KB de dados depositados em ambos os caches. No Celeron, o cache é inclusivo. Significa que os 32 KB do cache L1 sempre serão cópias de dados armazenados no cache L2 (128KB). Então temos 128 KB de dados armazenados em ambos os caches. O Duron também utiliza o encaixe Soquete A, que não é compatível com placas FCPGA. Pentium 4 O primeiro alerta a se fazer sobre o Pentium 4 é que o aumento da freqüência de operação não significa um ganho direto de performance. Um Pentium 4 de 1,5 GHz não é 50% mais rápido que um Pentium III de 1 GHz. Um dado é o número de ciclos por segundo (freqüência) que o processador pode operar outro é o que ele consegue processar em cada ciclo. Para entender os pontos fortes e fracos do Pentium 4 temos que analisar a sua arquitetura interna. A Intel batizou a nova arquitetura do Pentium 4 de NetBurst. O nome não tem nada a ver com o seu desempenho em redes, ou na Internet, mas tenta ilustrar os seus novos recursos. A arquitetura NetBurst é composta por 4 componentes: Hyper Pipelined Technology, Rapid Execution Engine, Execution Trace Cache e Bus de 400MHz. 36 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
A. Hyper Pipelined Technology Esta é a característica mais marcante do Pentium 4. Pipeline é um recurso que divide o processador em vários estágios, que trabalham simultaneamente, dividido o trabalho de processar as instruções. A partir do 486 todos os processadores utilizam pipeline. O Pentium III possui pipeline de 10 estágios, o Athlon possui pipeline de 11 estágios e o Pentium 4 possui pipeline de 20 estágios daí o nome Hyper Pipelined. O uso de pipeline permite que o processador possa processar várias instruções ao mesmo tempo, sendo que cada estágio cuida de uma fração do processamento. Quanto mais estágios, menor será o processamento executado em cada um. No caso do Pentium 4 cada estágio do pipeline processa apenas metade do processado por um estágio do Pentium III, fazendo com que, teoricamente, o resultado final seja o mesmo já que existe o dobro de estágios. O uso de mais estágios permite que o processador opere com freqüências bem mais altas, já que cada estágio executa menos processamento. O problema é que os processadores atuais executam várias instruções simultaneamente, enquanto os programas aplicativos são uma seqüência de instruções. Se as instruções seguintes não dependem do resultado da primeira, o processador não terá nenhum problema para resolvê-las rapidamente. Porém, caso ocorra uma tomada de decisão, onde o processador precisa primeiro resolver uma instrução para saber qual caminho deve tomar, entra em cena o recurso de Execução Especulativa onde, enquanto é resolvida a primeira instrução, o processador escolhe um dos caminhos possíveis para ir “adiantando o serviço” enquanto não sabe qual caminho deverá seguir. Se, ao saber do resultado da primeira instrução, tiver tomado o caminho certo simplesmente continuará. Por outro lado, se o processador tiver “adivinhado errado” então terá que jogar fora todo o trabalho já feito e tomar o outro caminho perdendo muito tempo. O Pentium 4 perde nesse quesito pois demora o dobro do tempo para processar a primeira instrução, que é processada em 20 estágios contra 10 estágios do Pentium III. Isto significa que, em cada tomada de decisão errada são perdidos 20 ciclos de processamento. Assim, a princípio, o Pentium 4 é mais lento que um Pentium III do mesmo clock. Em compensação ele pode operar com freqüências mais altas. Todas as outras alterações feitas pela Intel servem como paliativos para diminuir esta perda de desempenho trazida pelo maior número de estágios de pipeline. Devido a isto, a Intel lançou os modelos de 1,4 GHz e 1,5 GHz de clock, pulando as versões de 1,1 GHz e 1,2 GHz de clock. Caso fosse lançado um Pentium 4 de 1,1 GHz de clock ele perderia para um Pentium III de 1 GHz em quase todas as aplicações. 37 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Além da perda de desempenho, outro efeito do uso de mais estágios de pipeline é o de tornar o processador maior, mais complexo e mais caro de ser produzir. O Pentium 4 tem quase o dobro de área de um processador Athlon. B. Execution Trace Cache O uso do cache L1 no Pentium 4 é, no mínimo, inovador. O Pentium III tem 32 KB de cache L1 dividido em 2 blocos de 16 KB cada, um para instruções e outro para dados. O Athlon tem 128 KB de cache L1, também dividido em dois blocos. O Pentium 4 tem apenas 8 KB de cache L1 para dados e só. Porém, ele traz duas inovações que compensam esta aparente deficiência. A primeira é que, graças ao tamanho reduzido o cache de dados tem um tempo de latência (tempo que demora para reagir) menor, ou seja, é mais rápido que o cache L1 encontrado no Pentium III e no Athlon. A segunda inovação é que o cache de instruções foi substituído pelo Execution Trace Cache que, ao invés de armazenar instruções, armazena diretamente uOPs, que são as instruções já decodificadas e prontas para serem processadas. Isto garante que o cache tenha apenas um ciclo de latência, ou seja, o processador não perde tempo algum ao utilizar um dado armazenado no Execution Trace Cache, ao contrário do que acontece no Pentium III onde perde-se dois ciclos em cada leitura. Uma explicação resumida sobre o que é um uOP: os processadores para PC usam o conjunto de instruções x86 composto por 184 instruções mas, internamente, eles só são capazes de processar instruções simples. Existe um circuito decodificador que converte as instruções complexas, usadas pelos programas, nas instruções simples, entendidas pelo processador. Uma instrução complexa pode ser quebrada em várias instruções simples. No Pentium 4 cada instrução simples é chamada de uOP. No Athlon cada conjunto de duas instruções simples ganha o nome de macro-ops. C. Bus de 400 MHz Para concorrer com o barramento EV6 do Athlon, que opera de 100 MHz até 133 MHz com duas transferências por ciclo o que resulta em freqüências de, respectivamente, 200 MHz até 266 MHz, o Pentium 4 conta com um barramento operando a 100 MHz mas com 4 transferências por ciclo o que eqüivale à um barramento de 400 MHz. O barramento controla a velocidade de comunicação entre o processador e o chipset (conjunto de circuitos integrados responsáveis pelo controle do barramento e dos periféricos integrados na placa-mãe). Um barramento mais rápido não significa um ganho automático de performance porém, um barramento insuficiente causa perda de 38 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
desempenho fazendo com que o processador não consiga comunicar-se com os demais componentes na velocidade máxima. D. Rapid Execution Engine Todo processador atual é dividido em dois componentes básicos: as unidades de execução de inteiros e as unidades de ponto flutuante. A parte que processa as instruções envolvendo números inteiros é responsável pela maior parte das instruções e pelo desempenho do processador nos aplicativos do dia a dia. As unidades de ponto flutuante, que compõe o que chamamos de coprocessador aritmético, são responsáveis pelo processamento das instruções envolvendo valores complexos usados por jogos e aplicativos gráficos. A Rapid Execution Engine do Pentium 4 consiste num reforço nas unidades de inteiros do processador. O Pentium 4 possui um total de 5 unidades de processamento de inteiros, duas que processam as instruções mais simples, duas encarregadas de ler e gravar dados e uma encarregada de decodificar e processar as instruções complexas que, embora em menor quantidade, são as instruções que tomam mais tempo do processador. No Pentium 4 as encarregadas das instruções simples e as encarregadas das leituras e gravações são muito potentes. Porém, a de instruções complexas não teve a mesma evolução e, por usar 20 estágios de pipeline, tornou-se mais lenta que a do Pentium III. Temos então que as instruções simples são rapidamente processadas mas as instruções complexas ficam represadas causando perda de desempenho. No coprocessador aritmético o cenário é ainda mais complicado. Apesar das unidades de execução terem perdido desempenho devido ao pipeline de 20 estágios, não houve nenhum avanço para equilibrar a balança como feito nas unidades de inteiros. Ao contrário, o coprocessador aritmético encolheu tendo sido retiradas duas das unidades de execução, uma que processava instruções MMX e uma que processava instruções SSE. Ao invés de evoluir o coprocessador aritmético do Pentium 4 tornou-se mais frágil que o do Pentium III trazendo um cenário, no mínimo, curioso. Enquanto na época do Pentium II, e do AMD K6, a AMD competia com um processador que, apesar de possuir um bom desempenho em aplicativos de escritório, era muito fraco nos jogos e aplicativos gráficos agora temos um cenário semelhante porém com os lados invertidos: a Intel tem com um processador que é potente em inteiros mas fraco em ponto flutuante.
39 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
E. SSE 2 A solução da Intel para tentar diminuir a deficiência do coprocessador aritmético foi a mesma que a AMD usou na época do K6-2. A AMD usou as instruções 3D-Now! para melhorar seu desempenho nos jogos que fossem otimizados. A Intel incorporpou novas instruções ao Pentium 4, chamadas de SSE 2, para melhorar seu desempenho nos jogos e em aplicativos gráficos que venham a ser otimizados. F. Acesso à Memória Apesar de ter que usar memórias RAMbus (muito caras), o Pentium 4 apresenta um desempenho de acesso à memória surpreendente. Acessando simultaneamente dois módulos pode chegar a uma taxa de transferência de dados de 3,2 GB/s, o que corresponde a três vezes o máximo permitido por módulos de memórias PC-133 comuns. Mesmo o Athlon usando memórias DDR apresenta um desempenho inferior. G. Instalação O Pentium 4 utiliza o Soquete 423, semelhante ao Soquete 370 do Pentium III e pelo Celeron, mas com mais contatos. Uma boa novidade é que o Pentium 4 usa uma chapa metálica sobre o processador que evita rachaduras ao ser instalado o cooler como acontece com alguns processadores Pentium III, Celeron, Duron e Athlon soquetados, onde a parte traseira do processador fica exposta.
Figura 25: No Pentium 4 (esquerda) a chapa metálica protege o processador. No Duron (direita) o processador fica exposto.
40 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Junto com o Pentium 4, a Intel lançou um novo padrão de fonte de alimentação, o ATX 2.03, pois o Pentium 4 consome muito. O padrão consiste em fontes que podem suportar a maior demanda e , como garantia, trazem um novo conector de 12 volts que é ligado diretamente na placa-mãe para aumentar o fornecimento de eletricidade para o processador.
Figura 26: O novo conector da fonte padrão ATX.
7.
O PROCESSADOR PENTIUM II Uma visão geral da organização do processador Pentium II é apresentada na figura 27.
Figura 27: Diagrama de blocos do Pentium II 41 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Organização de Registradores O Pentium II inclui os seguintes tipos de registradores: •
Propósito geral: existem oito registradores de propósito geral de 32 bits. Esses registradores podem ser usados por todos os tipos de instrução do Pentium II; eles também podem conter operandos para cálculo de endereço. Além disso, alguns desses registradores servem para propósitos especiais. Por exemplo, instruções que manipulam cadeias de caracteres usam os conteúdos dos registradores ECX, ESI e EDI como operandos, sem referenciar explicitamente esses registradores na instrução. Como resultado, diversas instruções podem ser codificadas de modo mais compacto.
•
Segmento: os seis registradores de segmento de 16 bits cada um contêm seletores de segmento que indexam tabelas de segmentos. O registrador segmento de código (CS) referencia o segmento que contém a instrução sendo executada. O registrador de segmento de pilha (SS) referencia o segmento que contém a pilha visível para o usuário. Os demais registradores de segmento (DS, ES, FS, GS) possibilitam ao usuário referenciar até quatro segmentos de dados distintos de cada vez.
•
Códigos de condição (flags): o registrador EFLAGS contém códigos de condição e vários bits de controle.
•
Contador de programa: contém o endereço da instrução corrente.
Há também registradores destinados especificamente para a unidade de ponto flutuante: •
Numéricos: cada registrador contém um número de ponto flutuante de precisão estendida de 80 bits. Existem oito registradores que funcionam como uma pilha, havendo disponíveis, no conjunto, instruções, operações para empilhar e desempilhar valores de ponto flutuante.
•
Controle: o registrador de controle de 16 bits contém bits que controlam a operação da unidade de ponto flutuante, incluindo o controle do tipo de arredondamento, da precisão: simples, dupla ou estendida, e bits para habilitar ou desabilitar várias condições de exceção.
•
Estado: o registrador de estado de 16 bits contém bits que refletem o estado atual da unidade de ponto flutuante, incluindo um apontador de topo de pilha de 3 bits, códigos de condição, que relatam o resultado da última operação, e indicadores de exceção.
42 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
•
Condição de conteúdo (tag world): esse registrador de 16 bits contém 2 bits para cada registrador numérico de ponto flutuante, que indicam a natureza do conteúdo do registrador correspondente. Os quatro possíveis valores são: número válido, zero, especial e vazio. Essa informação possibilita que programas verifiquem o tipo do conteúdo de um registrador numérico sem ter de efetuar uma decodificação complexa do dado corrente no registrador. Por exemplo, quando é feita uma troca de contexto, o processador não precisa salvar os registradores de ponto flutuante que estejam vazios.
Tabela 2: Registradores do processador Pentium II (a) Unidade Inteira Tipo Propósito geral Segmento Códigos de operação Contador de programa Tipo Numérico Controle Estado Bits de condição Contador de programa Apontador de dados
Número 8
Tamanho (bits) 32
6
16
Propósito Registradores
de
propósito
geral para usuários Contêm seletores
de
segmento 1 32 Bits de estado e de controle 1 32 Apontador de instruções (b) Unidade de Ponto Flutuante Número Tamanho (bits) Propósito 8 80 Armazenam um número de 1 1 1 1 1
16 16 16
ponto flutuante Bits de controle Bits de estado Especificam o conteúdo dos
48
registradores numéricos Aponta para a instrução
48
interrompida pela execução Aponta para o operando interrompido pela execução
A. Registrador EFLAGS O registrador EFLAGS (figura 28) indica o estado do processador e ajuda a controlar sua operação. Ele inclui os seis códigos de condição (‘vai-um’, paridade, ‘vai-um’ auxiliar,’ zero, sinal, overflow), que relatam o resultado de uma operação inteira. Além disso, alguns bits do registrador podem ser ditos de controle: •
Indicador de modo de depuração (TF): quando esse bit está ligado (valor = 1), é causada uma interrupção depois da execução de cada instrução. Isso é usado para depuração.
43 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
•
Habilitação de interrupção (IF): quando esse bit está ligado, o processador reconhece interrupções externas.
•
Indicador de direção (DF): determina se as instruções de processamento de cadeias de caracteres incrementam ou decrementam o valor dos registradores de 16 bits SI e DI (para operações de 16 bits) ou dos registradores de 32 bits ESI e EDI (para operações de 32 bits).
•
Indicador de privilégio de E/S (IOPL): quando esse bit está ligado, o processador gera uma exceção para todo acesso a dispositivos de E/S, durante a operação em modo protegido.
•
Indicador de reinício (RF): permite ao programador desabilitar exceções de depuração, para que uma instrução possa ser reiniciada depois de uma exceção de depuração sem causar imediatamente uma outra exceção de depuração.
•
Verificação de alinhamento (AC): quando esse bit está ligado, é feita uma verificação se uma palavra ou palavra dupla é endereçada fora do limite de uma palavra ou palavra dupla.
•
Indicador de identificação (ID): o valor desse bit apenas pode ser modificado se o processador oferecer suporte para a instrução CPUID. Essa instrução informa o fabricante, a família e o modelo do processador.
Além desses bits, existem 4 bits relacionados ao modo de operação. O bit de tarefa aninhada (NT) indica que a tarefa corrente está aninhada dentro de outra tarefa que opera em modo protegido. O bit de modo virtual (VM) permite ao programador habilitar ou desabilitar o modo virtual 8086, que determina se o processador deve executar como uma máquina 8086. O bit de habilitação de interrupção virtual (VIF) e o bit indicador de interrupção virtual pendente (VIP) são usados em um ambiente multitarefa.
44 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 28: Registrador EFLAGS do Pentium II B. Registradores de Controle O Pentium II emprega quatro registradores de controle de 32 bits (o registrador CR1 não é usado), para controlar vários aspectos de operação de processador (figura 29). O registrador CR0 contém indicadores de controle do sistema, que controlam os modos de operação ou indicam estados que geralmente se aplicam ao processador e não à execução de uma tarefa individual. Esses indicadores são: •
Habilitação de proteção (PE): habilita / desabilita o modo de operação protegido.
45 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
•
Monitoração de co-processador (MP): apenas tem interesse quando é executado um programa de máquinas anteriores ao Pentium II; está relacionado com a presença de co-processador aritmético.
•
Emulação (EM): se esse bit está ligado, isso indica que o processador não possui unidade de ponto flutuante e é gerada uma interrupção em cada tentativa de executar instruções de ponto flutuante.
•
Troca de tarefa (TS): indica que o processador efetuou uma troca de tarefa.
•
Tipo de extensão (ET): não é usado no Pentium II; é usado em máquinas anteriores para indicar suporte a instruções do co-processador matemático.
•
Erro numérico (NE): habilita o mecanismo padrão de reportar erros de ponto flutuante nas linhas do barramento externo.
•
Proteção de escrita (WP): quando está desligado, as páginas com permissão de usuário apenas para leitura podem ser escritas por um processo supervisor. Essa característica é útil para oferecer suporte à criação de processos em alguns sistemas operacionais.
•
Máscara de alinhamento (AM): habilita / desabilita a verificação de alinhamento.
•
Desabilita escrita direta (NW): seleciona o modo de operação da cache de dados. Quando esse bit está ligado, a cache de dados fica impedida de efetuar operações de escrita direta (write-through) na cache.
•
Desabilita cache (CD): habilita / desabilita o mecanismo de abastecimento da cache interna.
•
Paginação (PG): habilita / desabilita a paginação.
46 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 29: Registradores de controle do Pentium II Quando a paginação é habilitada, os registradores CR2 e CR3 são válidos. O registrador CR2 mantém o endereço linear de 32 bits da última página acessada antes de uma interrupção de falta de página. Os 20 bits mais à esquerda de CR3 correspondem aos 20 bits mais significativos do endereço-base do diretório de páginas; o restante do endereço contém zeros. Dois bits do CR3 são usados para controlar a operação de uma cache externa. O bit de habilitação da cache de páginas (PCD) habilita ou desabilita a operação da cache externa e o bit de escrita transparente na cache de páginas (PWT) controla o modo de escrita na cache externa. 47 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Nove bits de controle adicionais são definidos no CR4: •
Extensão do modo virtual 8086 (VME): habilita suporte para o bit indicador de interrupção virtual no modo virtual 8086.
•
Interrupção virtual em modo protegido (PVI): habilita suporte para o bit indicador de interrupção virtual no modo protegido.
•
Desabilitar contador de passos de execução (TSD): desabilita a instrução de leitura do contador de passos de execução (RDTSC), que é usado para fins de depuração.
•
Extensões de depuração (DE): habilita breakpoints de E/S; isso permite que o processador interrompa as operações de E/S, tanto de leitura quanto de escrita.
•
Extensão de tamanho de páginas (PSE): habilita o uso de páginas de 4 Mbytes, no Pentium, ou de páginas de 2 Mbytes, no Pentium Pro e Pentium II.
•
Extensão de endereço físico (PAE): habilita as linhas de endereço A32 a A35, sempre que um novo modo de endereçamento especial, controlado pela PSE, é habilitado para o Pentium Pro e o Pentium II.
•
Habilitação de verificação de máquina (MCE): habilita interrupção de verificação da máquina, que ocorre quando é detectado erro de paridade durante um ciclo de leitura no barramento ou quando um ciclo de barramento não é completado com sucesso.
•
Habilitação de página global (PGE): habilita o uso de páginas globais. Quando PGE=1 é efetuada uma troca de tarefa, todas as entradas na memória cache da tabela de páginas (TLB) são descarregadas, com exceção daquelas marcadas como globais.
•
Habilitação de contador de desempenho (PCE): habilita a execução da instrução RDPMC (leitura de contador de desempenho), para qualquer nível de privilégio. Dois contadores de desempenho são usados para medir a duração e o número de ocorrências de um tipo específico de evento.
C. Registradores MMX As instruções MMX usam campos de endereço de registrador com 3 bits, fornecendo assim suporte para oito registradores MMX. De fato, o processador não inclui registradores MMX específicos. Em vez disso, ele utiliza uma técnica de mapeamento de registradores MMX sobre os registradores de ponto flutuante (figura 30); ou seja, os registradores de ponto flutuante são usados para armazenar valores MMX. Mais especificamente, os 64 bits de mais baixa ordem (mantissa) de cada 48 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
registrador de ponto flutuante são usados para formar os oito registradores MMX. Assim, a arquitetura existente do Pentium II é facilmente estendida para oferecer suporte para instruções MMX. As características fundamentais do uso dos registradores de ponto flutuante como registradores MMX são: •
Nas operações de ponto flutuante, os registradores de ponto flutuante são tratados como uma pilha. Nas operações MMX, esses mesmos registradores são acessados diretamente.
•
Na primeira vez em que uma instrução MMX é executada depois de uma operação de ponto flutuante, a palavra de condição de conteúdo da unidade de ponto flutuante é marcada como válida. Isso reflete a mudança do uso dos registradores, que deixam de ser usados sob a forma de pilha para serem usados por meio de endereçamento direto.
•
A instrução EMMS (esvazia estado MMX) altera os valores dos bits da palavra de condição de conteúdo da unidade de ponto flutuante, para indicar que todos os registradores estão vazios. É importante que o programador insira essa instrução no final de cada bloco de código MMX, para que as operações de ponto flutuante funcionem adequadamente.
•
Quando é escrito um valor em um registrador MMX, é atribuído valor 1 aos bits [79:64] do registrador de ponto flutuante correspondente (bits de sinal e de expoente), indicando que o valor do registrador de ponto flutuante deve ser interpretado como NaN (não um número) ou infinito, quando visto como um valor de ponto flutuante. Isso assegura que um dado MMX nunca será visto como um valor válido de número de ponto flutuante.
Figura 30: Mapeamento de registradores MMX sobre registradores de ponto flutuante
49 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Processamento de Interrupção O processamento de interrupções dentro de um processador visa oferecer suporte para o sistema operacional. O uso de interrupções permite que um programa de aplicação seja suspenso, para que uma variedade de condições de interrupção possa ser atendida, sendo a execução do programa retomada mais tarde. A. Interrupções e Exceções Duas classes de eventos fazem com que o Pentium II suspenda o fluxo de execução da instrução corrente e responda ao evento: interrupções e exceções. Em ambos os casos, o processador salva o contexto do processo corrente e transfere o controle para uma rotina predefinida de tratamento da condição ocorrida. Uma interrupção é gerada por um sinal de hardware e pode ocorrer aleatoriamente durante a execução de um programa. Uma exceção é gerada por software e provocada pela execução de uma instrução. Existem duas fontes de interrupção e duas fontes de exceção, que são: 1. Interrupções •
Interrupções mascaráveis: recebidas no pino INTR do processador. O processador apenas reconhece uma interrupção mascarável se o bit de habilitação de interrupção (IF) tiver valor 1.
•
Interrupções não-mascaráveis: recebidas no pino NMI do processador. O reconhecimento dessas interrupções não pode ser desabilitado.
2. Exceções •
Exceções detectadas pelo processador: ocorrem quando o processador detecta um erro ao tentar executar uma instrução.
•
Exceções programadas: são exceções geradas por instruções (INTO, INT3, INT e BOUND)
B. Tabela de Vetores de Interrupção O processamento de interrupção no Pentium II usa uma tabela de vetores de interrupção. A cada tipo de interrupção é associado um número, que é usado para indexar a tabela de vetores de interrupção. Essa tabela contém 256 vetores de interrupção de 32 bits, que armazenam o endereço (segmento e endereço relativo) da rotina de tratamento para interrupções daquele tipo. A tabela 3 mostra os índices de cada tipo de interrupção na tabela de vetores de interrupção; as entradas sombreadas representam interrupções e as nãosombreadas, exceções. A interrupção de hardware NMI é de tipo 2. Interrupções de 50 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
hardware INTR têm números de 32 a 255; quando é gerada uma interrupção INTR, o sinal de interrupção enviado por meio do barramento deve ser acompanhado do número do vetor de interrupção correspondente. Os demais números de vetores de interrupção são usados para exceções. Se houver mais de uma interrupção ou exceção pendente, o processador as trata em uma ordem previsível. A localização dos números de vetores da tabela não reflete a prioridade das interrupções. A prioridade de exceções e interrupções é organizada nas cinco classes a seguir, com ordem descendente de prioridade: •
Classe 1: parada (trap) na instrução anterior (vetor número 1).
•
Classe 2: interrupções externas (2, 32 a 255).
•
Classe 3: falhas na busca da próxima instrução (3, 14).
•
Classe 4: falhas na decodificação da próxima instrução (6,7).
•
Classe 5: falhas na execução de uma instrução (0, 4, 5, 8, 10 a 14, 16, 17).
Tabela 3: Tabela de vetores de interrupção e exceção do Pentium II Número do vetor 0 1 2 3 4 5
6 7
8
9 10 11 12 13
14 15 16
Descrição Erro de divisão; divisão por zero ou overflow na divisão Exceção de depuração; inclui várias falhas e indicadores de parada relacionados à depuração Interrupção no pino NMI; sinal no pino NMI Ponto de parada; causado pela instrução INT3, que é uma instrução de 1 byte, útil para depuração Overflow detectado por INTO; ocorre quando o processador executa a instrução INTO e o bit de overflow tem valor 1 Limite excedido em BOUND; a instrução BOUND compara o conteúdo de um registrador com valores-limite armazenados na memória e gera uma interrupção se o valor do registrador está fora desses limites Código de operação indefinido Dispositivo não disponível; falha na tentativa de usar as instruções ESC ou WAIT devido à ausência de um dispositivo externo Falta dupla; duas interrupções ocorrem durante a execução de uma mesma instrução e elas não podem ser tratadas em seqüência Reservado Segmento de estado tarefa inválido; o segmento que descreve uma tarefa requerida não está inicializado ou é inválido Segmento não presente; o segmento requerido não está presente Falha de pilha; o limite do segmento de pilha foi excedido ou o segmento de pilha não está presente Proteção geral; uma violação de proteção que na causa outra exceção (por exemplo, escrita em um segmento apenas de leitura) Falta de página Reservado Erro de ponto flutuante; gerado por uma instrução aritmética de 51 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
17
18 19-31 32-255
8.
ponto flutuante Verificação de alinhamento; acesso a uma palavra armazenada em um endereço de byte impar ou a uma palavra dupla armazenada em um endereço que não é múltiplo de 4 Verificação de máquina; específica para cada modelo Reservado Vetores de interrupção de usuário; fornecida quando o sinal INTR está ativado
O PROCESSADOR POWERPC A figura 31 apresenta uma visão da organização do processador PowerPC.
Figura 31: Diagrama de blocos do PowerPC G3 Organização de Registradores A figura 32 mostra os registradores do PowerPC visíveis para o usuário. A unidade de ponto fixo inclui os seguintes registradores: •
Propósito geral: existem 32 registradores de propósito geral, cada um com 64 bits. Esses registradores podem ser usados para carregar, armazenar e manipular operandos de dados e para endereçamento indireto via registrador. O registrador 0 é tratado de modo diferenciado. Nas diversas operações de carga e armazenamento, assim como nas diversas operações de adição, ele é tratado como tendo valor constante, igual a zero, independente de seu conteúdo real.
•
Registrador de exceção (XER): inclui 3 bits que relatam exceções em operações aritméticas de número inteiro. Esse registrador também inclui um 52 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
campo para um contador de bytes, que é usado como operando em algumas instruções que operam sobre seqüências de caracteres (figura 33a). A unidade de ponto flutuante contém registradores visíveis para o usuário adicionais: •
Propósito geral: existem 32 registradores de propósito geral de 64 bits, usados para todas as operações de ponto flutuante.
•
Registrador de estado e de controle de ponto flutuante (FPSCR): esse registrador de 32 bits contém bits que controlam a operação da unidade de ponto flutuante e bits que registram o estado resultante de operações de ponto flutuante.
A unidade de processamento de desvios contém os seguintes registradores visíveis para o usuário: •
Registrador de condição: consiste de oito campos de código de condição de 4 bits cada, totalizando 32 bits (figura 33b)
•
Registrador de ligação: o registrador de ligação pode ser usado em uma instrução de desvio condicional com endereçamento indireto ao endereçoalvo. Ele é também usado para implementar a chamada e o retorno de procedimento. Se o bit LK de uma instrução de desvio condicional está ligado, o endereço consecutivo à instrução de desvio é colocado no registrador de ligação e pode ser usado no retorno.
•
Registrador contador: o registrador contador pode ser usado para controlar laços de repetição; ele é decrementado cada vez que é testado em uma instrução de desvio condicional. Outro uso desse registrador é no endereçamento indireto do endereço-alvo de uma instrução de desvio.
53 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 32: Registradores visíveis para o usuário do PowerPC
54 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 33: Formatos de registradores do PowerPC Os campos do registrador de condição são usados para diversas finalidades. Os primeiros 4 bits (CR0) são atualizados por toda instrução aritmética de número inteiro que tem o bit Rc igual a 1. Como mostra a tabela 4, esse campo indica se o resultado da operação é positivo, negativo ou zero. O quarto bit é uma cópia do bit de sumário de overflow do XER. O próximo campo (CR1) é atualizado por toda instrução aritmética de ponto flutuante que tem o bit Rc igual a 1. Nesse caso, os 4 bits são atualizados com o valor dos primeiros 4 bits do FPSCR. Finalmente, qualquer dos oito campos de condição (CR0 a CR7) pode ser usado em uma instrução de comparação; em cada caso, o campo pretendido é especificado na própria instrução. Tanto em uma instrução de comparação de números de ponto fixo quanto em uma comparação de números de ponto flutuante, os primeiros 3 bits do campo de condição especificado registram se o primeiro operando 55 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
é menor, maior ou igual ao segundo operando. O quarto bit é o bit de sumário de overflow, no caso de uma comparação de números de ponto fixo, ou um indicador de resultado não-ordenado, no caso de uma operação de números de ponto flutuante. Tabela 4: Interpretação dos bits no registrador de condição Posição
CR0 (instrução
CR1 (instrução de
CRI (instrução
CRI (instrução de
do bit
de número inteiro
ponto flutuante
de comparação
comparação de
i i+1
com Rc=1) resultado < 0 resultado > 0
com Rc=1) sumário de overflow sumário de exceção
de ponto fixo) op1 < op2 op1 > op2
ponto flutuante) op1 < op2 op1 > op2
i+2
resultado = 0
desabilitada sumário de exceção
op1 = op2
op1 = op2
sumário de
de operação inválida exceção de overflow
sumário de
não-ordenado (um
overflow
operando é um
i+3
overflow
NaN)
Processamento de Interrupção Assim como qualquer processador, o PowerPC oferece um recurso para o processador interromper o programa que está sendo executado, para tratar uma condição de exceção. A. Tipos de Interrupção O PowerPC distingue dois tipos de interrupções: as interrupções causadas por alguma condição ou evento do sistema e as causadas pela exceção de uma instrução. A tabela 5 apresenta as interrupções reconhecidas pelo PowerPC. A maioria das interrupções assinaladas na tabela pode ser estendida facilmente, mas algumas requerem maior esclarecimento. A interrupção de reset reinicia o sistema e ocorre quando a energia é ligada e quando o botão de reset da unidade de sistema é pressionado. A interrupção de verificação de máquina lida com certas anomalias, tais como erro de paridade da memória cache e referência a uma posição de memória não existente, e pode fazer com que o sistema entre no que é conhecido como estado de parada para verificação; esse estado suspende a execução do processador e congela os conteúdos dos registradores, até que o sistema seja reiniciado. A interrupção de auxílio à unidade de ponto flutuante habilita o processador a invocar rotinas de software para completar operações que não podem ser manipuladas diretamente pela unidade de ponto flutuante, tais como operações que envolvem números não-normalizados ou códigos de operação de ponto flutuante não implementados. 56 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Tabela 5: Tabela de interrupções do PowerPC Ponto de entrada
Tipo de interrupção
Descrição
00000h
Reservada
00100h
Reset de sistema
Ativação dos sinais de reset do processador, por hardware ou por software
00200h
Verificação de máquina
Ativação de sinal TEA# para o processador, quando ele está habilitado para reconhecer verificações de máquina
00300h
Acesso a dados
Exemplos: falta de página de dados, violação de direito de acesso em instruções de carga ou de armazenamento
00400h
Acesso a instrução
Falta de página de código; tentativa de busca de instrução em um segmento de E/S; violação de direito de acesso
00500h
Externa
Ativação do sinal de entrada de interrupção externa do processador, pela lógica externa quando o reconhecimento de interrupção externa está habilitado
00600h
Alinhamento
Tentativa de acesso à memória malsucedida, devido ao não-alinhamento de operando
00700h
Programa
Interrupção de ponto flutuante; usuário tenta executar uma instrução privilegiada; execução de uma instrução de trap em que sua condição é satisfeita; instrução ilegal
00800h
Unidade de ponto flutuante não-disponível
Tentativa de executar instrução de ponto flutuante com a unidade de ponto flutuante desabilitada
00900h
Registrador de decremento
Esgotamento do registrador de decremento quando o reconhecimento de interrupção externa está habilitado
00A00h
Reservada
00B00h
Reservada
00C00h
Chamada de sistema
Execução de uma instrução de chamada ao sistema
00D00h
Depuração (trace)
Execução de programa passo a passo, para fins de depuração
00E00h
Auxílio à unidade de ponto flutuante
Tentativa de executar uma operação de ponto flutuante pouco freqüente e complexa (por exemplo, uma operação sobre número nãonormalizado)
00E10h a 00FFFh
Reserva
01000h a 02FFFh
Reservada (específica para cada implementação)
Não-sombreado: interrupções causadas por execução de instrução Sombreado: interrupções não são causadas por execução de instrução
B. Registrador de Estado da Máquina Para interromper um programa, é fundamental ser capaz de salvar o estado do processador no instante da interrupção, para que possa ser restaurado mais tarde. 57 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Isso inclui não apenas salvar o conteúdo de vários registradores mas também várias condições relacionadas à execução. Essas condições são convenientemente armazenadas no registrador MSR (Tabela 6). Diversos bits desse registrador também requerem maior esclarecimento. Quando o bit de modo de privilégio (bit 49) é igual a 1, o processador opera no nível de privilégio de usuário e apenas um subconjunto do conjunto de instruções é disponível. Quando esse bit tem valor 0, o processador opera no nível de privilégio de supervisor. Isso habilita todas as instruções e permite o acesso a certos registradores do sistema (tais como o MSR) que não são acessíveis no nível de privilegio de usuário. Os valores dos dois bits de exceção de ponto flutuante (bits 52 e 55) definem os tipos de interrupção que a unidade de ponto flutuante pode gerar, tendo a seguinte interpretação: FE0
FE1
Interrupções que serão reconhecidas
0
0
Nenhuma
0
1
Imprecisão não-recuperável
1
0
Imprecisão recuperável
1
1
Precisão
Quando o bit de depuração passo a passo (bit 53) está ligado, o processador desvia para a rotina de tratamento da interrupção de depuração passo a passo, depois de cada execução de instrução bem-sucedida. Quando o bit de depuração de desvio (bit 54) está ligado, o processador desvia para a rotina de tratamento da interrupção de depuração de desvio, após cada execução de instrução de desvio bem-sucedida, seja o desvio tomado ou não. Os bits de tradução de endereço de instrução (bit 58) e de tradução de endereço de dados (bit 59) determinam se é usado endereçamento real ou se a unidade de gerenciamento de memória efetua tradução de endereço. Tabela 6: Registrador de estado de máquina do PowerPC Bit 0 1:44
Definição Processador em modo de 32 bits / 64 bits Reservado
45
Gerenciamento de energia habilitado / desabilitado
46
Dependente de implementação
47
Define se os tratadores de interrupção usam o modo little-endian ou bigendian
48
Interrupção externa habilitada / desabilitada
49
Estado privilegiado / não-privilegiado 58 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
50
Unidade de ponto flutuante não-disponível / disponível
51
Interrupções de verificação de máquina habilitada / desabilitada
52
Modo de execução de ponto flutuante 0
53
Depuração passo a passo habilitada / desabilitada
54
Depuração de desvio habilitada / desabilitada
55
Modo de exceção de ponto flutuante 1
56
Reservado
57
A parte mais significativa do endereço de exceção é 000h/FFFh
58
Tradução de endereço de instrução ligada / desligada
59
Tradução de endereço de dados ligada / desligada
60:61
Reservado
62
Interrupção recuperável / não-recuperável
63
Processador em modo big-endian / little-endian
Não-sombreado: copiado para o SRR1 Sombreado: não copiado para o SRR1
C. Tratamento de Interrupção Quando uma interrupção ocorre e é reconhecida pelo processador, acontece a seguinte seqüência de eventos: 1.
O processador coloca o endereço da próxima instrução a ser executada no registrador SRR0 (save/restore register 0). Esse endereço é o endereço da instrução corrente, se a interrupção foi causada por uma falha na tentativa de executar essa instrução, ou, caso contrário, é o endereço da próxima instrução a ser executada.
2.
O processador copia a informação de estado da máquina, contida no registrador MSR, para o registrador SRR1. Os bits copiados são os que não estão sombreados na tabela 6. Os bits restantes do registrador SRR1 são carregados com a informação específica para o tipo de interrupção.
3. O registrador MSR é atualizado com um valor definido pelo hardware, específico para o tipo de interrupção. Para todos os tipos de interrupção, a tradução de endereço é desligada e as interrupções externas são desabilitadas. 4. O processador então transfere o controle para a rotina adequada de tratamento de interrupção. Os endereços das rotinas de tratamento de interrupção são armazenados na Tabela de Interrupção. O endereço-base dessa tabela é determinado pelo bit 57 do registrador MSR. Para retornar de uma interrupção, a rotina de tratamento de interrupção executa uma instrução rfi (retorno de interrupção). Isso faz com que os valores dos bits salvos no 59 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
registrador SRR1 sejam restaurados no registrador MSR. A execução é retomada a partir da instrução cujo endereço está armazenado no registrador SRR0.
9.
BIBLIOGRAFIA STALLINGS, William, Arquitetura e Organização de Computadores, São Paulo: Editora
Prentice Hall do Brasil, 2002 MONTEIRO, Mario, Introdução à Organização de Computadores, Rio de Janeiro: LTC Livros Técnicos e Científicos Editora, 2002 TANENBAUM, Andrew S., Organização Estruturada de Computadores, Rio de Janeiro: Editora Prentice Hall do Brasil, 2001
60 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
10. LISTA DE EXERCÍCIOS 1.
Considere um computador com uma palavra de 8 bits. Se a última operação efetuada nesse computador foi uma adição na qual dois operandos foram 2 e 3, quais seriam os valores dos seguintes bits de condição?
•
‘Vai-um’
•
Zero
•
Overflow
•
Sinal
•
Paridade par
•
‘Vai-um’ parcial
Quais seriam os valores desses bits se os operandos fossem -1 (em complemento de dois) e +1?
2.
Considere os diagramas de transição de estado da figura 34.
a. Descreva o comportamento de cada um dos diagramas. b. Compare esses diagramas com o diagrama de previsão de desvios da seção 4. Discuta os méritos relativos de cada uma das três abordagens para previsão de desvios.
61 de 62
INTRODUÇÃO A ORGANIZAÇÃO DE COMPUTADORES – NOTAS DE AULA
Figura 34: Diagrama de transição de estados para o exercício 2
62 de 62
View more...
Comments