arquitectura de computadores - ipp.pt

34
Arquitectura de Computadores: Resumo abreviado das aulas tericas Versªo Alpha - Maro de 2001 Paulo Ferreira [email protected] O que Ø um computador? A palavra computador deriva de cmputo, ou cÆlculo. Inicialmente um computador era um aparelho capaz de fazer cÆlculos matemÆticos, aquilo que vulgarmente denominamos por calculadora. AlØm da capacidade de fazer cÆlculos, considera-se que um computador pode executar programas. Um programa Ø denido como sendo uma sequŒncia de instruıes que o computador executarÆ. Sistemas analgicos e sistemas digitais Um sistema analgico caracteriza-se por trabalhar com sinais que variam de uma forma contnua, podendo assumir um nœmero de valores quase innitos entre um valor e outro. O exemplo clÆssico de um sistema analgico Ø o de um gira-discos, uma vez que entre as duas posiıes limite a agulha da cabea pode estar num nœmero inndÆvel de posiıes. Um sistema digital caracteriza-se por trabalhar com sinais de variam de uma forma discreta, existindo um nœmero nito de estados no qual o sistema pode estar. O exemplo clÆssico de um sistema digital Ø o de um relgio digital com dgitos em vez de ponteiros. Um relgio desses tem um nœmero nito de estados em que pode estar. Por exemplo: os dgitos dos segundos podem estar num de 60 estados desde ·00·atØ ·59·. Assim num sistema digital nªo existe uma variaªo contnua entre um estado e outro, passando o sistema de um estado para outro directamente. Concretizando: entre o segundo ·00·e o segundo ·01· nªo hÆ nenhum valor intermØdio, se o sistema funcionar correctamente. Como vantagens de um sistema analgico temos a precisªo quase innita, mas essa precisªo Ø afectada pela incapacidade de de efectuarmos a medida com a precisªo adequada, devido s perturbaıes originadas pelo rudo num sistema analgico. Quando falamos de rudo, falamos de perturbaıes que afectam a grandeza a medir. Exemplo: o p em cima de um objecto intruduz perturbaıes que afectam a nossa medida da altura desse objecto. Como desvantagem de um sistema digital temos o facto de o nœmero de estados ser nito, logo para usar um sistema digital para subtituir um sistema analgico teremos que usar um sistema digital com um nœmero sucientemente grande para ter em termos prÆticos um nœmero de estados quase innito. O estudo do nœmero de estados necessÆrios a essa aproximaªo Ø muito complexo, e estÆ fora do mbito desta cadeira. A grande vantagem dos sistemas digitais relativamente aos sistemas analgicos Ø a sua imunidade ao rudo, e a possibilidade de num sistema digital se poder fazer detecªo e correcªo de erros. Embora se possam fazer sistemas digitais em que os sinais possuam um nœmero de nveis elevado, quase todos os sistemas existentes usam uma lgica binÆria (com dois nveis), por razıes de simplicidade. O nœmero de estados elevado necessÆrio nalguns sistemas Ø conseguido atravØs da utilizaªo de vÆrios sinais em paralelo. Normalmente consideram-se dois tipos de circuitos lgicos: os circuitos Departamento de Engenharia InformÆtica - ISEP - IPP 1

Upload: others

Post on 30-Jan-2022

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arquitectura de Computadores - ipp.pt

Arquitectura de Computadores:Resumo abreviado das aulas teóricas

Versão Alpha - Março de 2001Paulo Ferreira [email protected]

O que é um computador?

A palavra computador deriva de �cômputo�, ou cálculo. Inicialmente umcomputador era um aparelho capaz de fazer cálculos matemáticos, aquilo quevulgarmente denominamos por calculadora. Além da capacidade de fazer cálculos,considera-se que um computador pode executar programas. Um programa é deÞnidocomo sendo uma sequência de instruções que o computador executará.

Sistemas analógicos e sistemas digitais

Um sistema analógico caracteriza-se por trabalhar com sinais que variam de umaforma contínua, podendo assumir um número de valores quase inÞnitos entre um valore outro. O exemplo clássico de um sistema analógico é o de um gira-discos, uma vez queentre as duas posições limite a agulha da cabeça pode estar num número inÞndável deposições.

Um sistema digital caracteriza-se por trabalhar com sinais de variam de umaforma discreta, existindo um número Þnito de estados no qual o sistema pode estar. Oexemplo clássico de um sistema digital é o de um relógio digital com dígitos em vez deponteiros. Um relógio desses tem um número Þnito de estados em que pode estar. Porexemplo: os dígitos dos segundos podem estar num de 60 estados desde ´00´até ´59´.Assim num sistema digital não existe uma variação contínua entre um estado e outro,passando o sistema de um estado para outro directamente. Concretizando: entre osegundo ´00´e o segundo ´01´ não há nenhum valor intermédio, se o sistema funcionarcorrectamente.

Como vantagens de um sistema analógico temos a precisão quase inÞnita, mas essaprecisão é afectada pela incapacidade de de efectuarmos a medida com a precisãoadequada, devido às perturbações originadas pelo ruído num sistema analógico.Quando falamos de ruído, falamos de perturbações que afectam a grandeza a medir.Exemplo: o pó em cima de um objecto intruduz perturbações que afectam a nossamedida da altura desse objecto.

Como desvantagem de um sistema digital temos o facto de o número de estados serÞnito, logo para usar um sistema digital para subtituir um sistema analógico teremosque usar um sistema digital com um número �suÞcientemente grande� para ter emtermos práticos um número de estados �quase inÞnito�. O estudo do número de estadosnecessários a essa aproximação é muito complexo, e está fora do âmbito desta cadeira.

A grande vantagem dos sistemas digitais relativamente aos sistemas analógicos é asua imunidade ao ruído, e a possibilidade de num sistema digital se poder fazerdetecção e correcção de erros.

Embora se possam fazer sistemas digitais em que os sinais possuam um número deníveis elevado, quase todos os sistemas existentes usam uma lógica binária (com doisníveis), por razões de simplicidade. O número de estados elevado necessário nalgunssistemas é conseguido através da utilização de vários sinais em paralelo.

Normalmente consideram-se dois tipos de circuitos lógicos: os circuitos

Departamento de Engenharia Informática - ISEP - IPP

1

Page 2: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

combinatórios e os circuitos sequenciais. Nos circuitos combinatórios a saída é umafunção das entradas nesse momento, enquanto que nos circuitos sequenciais a saída éuma função do estado do sistema num momento anterior, existindo normalmente umasequência de estados, daí a designação de �máquinas de estados� que este tipo decircuitos também possui.

Como exemplo de um circuito combinatório temos o circuito de uma campainha quetoca quando carregamos num botão. Como exemplo de um circuito sequencial temos ocircuito de comando de um conjunto de semáforos, que assume ao longo do tempo umasérie de estados pré-deÞnidos.

Arquitectura de um computador

Um computador pode ser considerado como uma �máquina de estados�extremamente soÞsticada, uma vez que o estado seguinte não se encontra pré-deÞnidode origem mas vai depender das instruções que vão sendo executadas. Aimplementação física de um computador pode recorrer a muitas tecnologias, usando-sehoje implementações electrónicas, enquanto que no passado se usaram implementaçõeselectromecânicas e mecânicas.

Normalmente um computador é constituído por um processador, memória eperiféricos. O processador nos computadores pessoais é constituído apenas por umcircuito integrado, mas em computadores mais soÞsticados tal não é verdade,variando enormemente a sua complexidade. A memória é utilizada para armazenarinstruções e dados, e os periféricos para o computador armazenar informação de umaforma permanente, e para o computador comunicar com os utilizadores ou com outroscomputadores.

O circuito de �clock�

Um elemento fundamental para o funcionamento de um computador é o circuito derelógio ou de �clock�. Este circuito gera os impulsos que fazem o processador passar deum estado ao estado seguinte. Apesar de se chamar circuito de relógio, não tem nada aver com a hora ou a data, mas sim com o ritmo da passagem de um estado a outro, ecom a sincronização do processador com o resto do computador. Um nome maisapropriado seria o de circuito de �metrónomo� em vez de circuito de relógio. Além dascaracterísticas eléctricas do sinal de clock, que apenas interessam a quem concebehardware, a principal característica do sinal de clock é a sua velocidade, ou maiscorrectamente a sua frequência, medida normamente em MHz (MegaHertz).

O facto de um processador ter uma velocidade de clock superior a outro, não querdizer nada do ponto de vista de performance do sistema. Só se os processadores foremdo mesmo modelo, é que os podemos comparar em termos de velocidade de clock, umavez que é normal que processadores diferentes necessitem de um número de ciclos declock diferente para executar as mesmas tarefas. Se usarmos processadores do mesmomodelo à mesma velocidade de clock, a performance do sistema pode variar conformeo tipo de memória, e os periféricos que usarmos. Portanto a velocidade de clock nãoconstitui um indicador Þável da performance de um computador.

Aumentando a velocidade de clock aumentamos a performance do sistema, masestamos também a aumentar o consumo de energia e o aquecimento do processador. Asligações internas ao processador possuem uma resistência que junto com a capacidadede entrada das gates lógicas contribui para esse fenómeno. Assim o circuito de ligaçãode uma gate a outra é constituído por uma resistência em série com um condensador.

Departamento de Engenharia Informática - ISEP - IPP

2

Page 3: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Para que haja uma alteração de nível lógico é necessário descarregar ou carregar ocondensador através da resistência, logo a energia dissipada tem a ver com o númerode mudanças de estado, isto é com a velocidade de clock. Um alternativa possívelpara baixar o consumo de energia é baixar a tensão de alimentação do processador,para que o nível de carga a atingir no condensador seja menor, necessitando assim deuma menor dissipação de energia na resistência.

Hoje além do interessse evidente que há em subir as velocidades de clock dosprocessadores, há também a tendência de se usarem processadores cuja velocidade declock possa ser reduzida ao mínimo, uma vez que cada vez mais se usam sistemasportáteis e móveis baseados em microprocessadores, onde interessa reduzir ao máximoo consumo de energia.

Barramentos de dados e endereços

Para ligar um processador à memória não é prático termos ligações entre oprocessador e todos os bits de memória. Na prática, o processador consegue ler ouescrever apenas um certo número de bits da memória simultâneamente. O conjunto delinhas que é usado para os dados serem transferidos da memória para o processador evice�versa recebe o nome de barramento de dados. Assim a memória de umcomputador organiza-se em posições de memória, tendo cada posição de memória, amesma largura do barramento de dados. O barramento de endereços serve para oprocessor seleccionar de entre todas as posições de memória qual a que vai usar para atransferência de dados.

O tamanho da memória a que um processador pode aceder é dado pela seguintefórmula:

Tamanho(bits)=2Nº_Bits_Barramento_Endereços * Nº_Bits Barramento_Dados

Processador Memória

Barramento deEndereços

Barramentode Dados

Departamento de Engenharia Informática - ISEP - IPP

3

Page 4: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Se o barramento de endereços tiver mais um bit, o processador pode aceder ao dobrodas posições de memória. Para conseguirmos o mesmo aumento de memória mexendoapenas no barramento de dados teremos de duplicar o seu número de bits. Ao aumentaro número de bits do barramento de endereços estamos apenas a aumentar a memóriaendereçável, mas ao aumentar a largura do barramento de dados também estamos aaumentar a performance do processador, porque cada vez que ele acede à memóriaestá a transferir mais dados no mesmo intervalo de tempo.

Além dos barramentos de dados e de endereços, é normal designar por barramento decontrole ou sinais de controle, os sinais do processador que controlam e sincronizam ofuncionamento da memória, como por exemplo os sinais de Read e Write, que dizem àmemória se o acesso vai ser uma leitura ou uma escrita.

Arquitecturas de Harvard e Von Neumann

A arquitectura mais comum de um computador (a de Von Neumann) possui apenasuma memória que serve tanto para o armazenamento de programas como para oarmazenamento de dados.

Processador Memória

Address Bus

Data Bus

A outra variante (a de Harvard) possui duas memórias diferentes e independentesem termos de barramentos e ligação ao processador.

ProcessadorMemóriade Dados

Address Bus

Data Bus

Address Bus

Data Bus

Memóriade

Programa

Como vantagem evidente da primeira arquitectura temos a sua simplicidade e ouso versátil da memória (tanto serve para programas como para dados). No caso da

Departamento de Engenharia Informática - ISEP - IPP

4

Page 5: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

arquitectura de Harvard, a vantagem é dada pela dupla ligação às memórias dedados e programa, permitindo assim que o processador leia uma instrução ao mesmotempo que faz um acesso à memória de dados. No entanto esta vantagem é conseguidaatravés da duplicação dos barramentos existentes, e não permite a utilização damemória de dados para guardar programas ou vice-versa, levando a um usoineÞciente da memória uma vez que a percentagem código/dados varia com osprogramas.

Ligação a periféricos

A ligação a periféricos mais simples de efectuar designa-se por �mapeamento emmemória� (�memory mapped�) e consiste em organizar a memória de tal modo que aoacesso a um determinado endereço de memória corresponda um acesso ao periférico emquestão. Este tipo de ligação é extremamente simples do ponto de vista do software,permite usar qualquer instrução que aceda à memória para aceder aos periféricos, àmesma velocidade dos acessos à memória.

Mas se no mapa de memória existe um periférico mapeado numa determinadaposição, então isso irá criar uma �descontinuidade� no mapa de memória, porque nesseendereço não existirá memória.

Outra alternativa para a ligação de periféricos é a existência de um mapa deportas de Entrada/Saída (�I/O�) similar ao mapa de memória. Para que estapossibilidade exista é necessário que o processador o suporte, uma vez que osbarramentos de endereços e de dados são normalmente partilhados entre a memória eas portas de I/O. Assim entre os sinais de controle do processador é normal existiremsinais que distinguem entre um acesso à memória e um acesso às portas de I/O, sendo oacesso às portas de I/O feito apenas por algumas instruções especiais.

Apesar de o mapeamento em portas de I/O ser mais prático, há casos em que se usa omapeamento em memória, ou os dois tipos de mapeamento em simultâneo para omesmo periférico. Isto acontece normalmente por razões de performance, quando operiférico também possui uma memória que deve ser partilhada com o processador,como no caso comum das placas gráÞcas ou das interfaces de rede.

O mecanismo de �Interrupts�

Os periféricos necessitam de atenção constante para que as transferências de dadosocorram no momento certo. Assim o método mais simples de �tomar conta� dosperiféricos consiste em organizar o nosso programa de modo a efectuar um ciclopermanente que vá examinando os periféricos um a um para ver se necessitam deatenção. Este método recebe o nome de �polling� e não é muito utilizado por razõesóbvias.

O outro método necessita de suporte do processador tanto do ponto de vista dohardware como do software. O processador vai possuir um determinado número delinhas de interrupção, estando normalmente associado um periférico a cada linha deinterrupção. A cada linha e a cada periférico, encontra-se também associada umarotina que recebe o nome de rotina de atendimento da interrupção. Quando o perifériconecessita de atenção do processador, activa a sua linha de �interrupt�, o processadorao detectar a activação do interrupt, suspende o programa em execução, corre a rotinade atendimento correspondente, e no Þm desta retoma a execução normal do programaque estava a ser executado.

Este método é muito usado porque permite libertar o processador da tarefa demonitorizar o estado dos periféricos, mas exige cuidados com a atribuição correcta

Departamento de Engenharia Informática - ISEP - IPP

5

Page 6: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

das linhas de interrupt e das rotinas aos periféricos.

Registos de um Processador

O processador necessita de armazenar dentro de si certos valores, para funcionarcorrectamente, recebendo as �posições de memória� internas ao processador o nome deregistos. Ao conjunto do registos visíveis ao programador dá-se o nome de modelo deprogramação. Entre os registos comuns na maioria dos modelos de programaçãoencontram-se os seguintes:

Program Counter: Também chamado Instruction Pointer na família do 8086, de umaforma mais correcta, um vez que contém o endereço de memória onde está a instruçãoem execução. Dito de outra forma, aponta para a instrução que está a ser executada,servindo para o processador saber qual a instrução corrente, e a partir dessa, qual aseguinte.

Stack Pointer: Também aponta para a memória servindo para implementar umapilha, que vai ser utilizada para na chamada e retorno das subrotinas se guardar oProgram Counter e/ou outros registos.

Acumulador: Quando dentro dos registos de dados, um se salienta por permitircertas operações que não são permitidas com os outros registos, ele recebe o nome deacumulador. Isto acontece por razões históricas, uma vez que em computadores maisantigos existia apenas um registo capaz de guardar os sucessivos resultados da únicaoperação possível (a adição) recebendo por esse motivo o nome de acumulador.

Registo de Flags: Existe normalmente um registo onde estão bits ou conjunto de bits,deginados normalmente por ßags que sinalizam o resultado das operações efectuadaspelo processador, ou permitem conÞgurar diferentes modos de funcionamento, oucaracterísticas do processador.

Registos de Indíce: Recebem o nome de registos de Índice todos os registos que podemser usados como apontadores para a memória além do Program Counter e StackPointer.

Normalmente, na maioria dos processadores os registos que apontam para memória

têm o mesmo número de bits que o barramento de endereços, e os registos de dados têm omesmo número de bits que o barramento de dados. As variações que existem limitam-se na maioria dos casos ao barramento de dados que pode ser maior ou menor do que alargura dos registos de dados. Quando o tamanho dos registos é maior do que otamanho do barramento de dados, isso permite ter um processador com umaperformance mais baixa do que o normal, mas usando circuitos de ligação à memória eaos periféricos de baixo custo. Quando o tamanho do barramento de dados é maior doque o tamanho dos registos, isso permite melhorar o desempenho do acesso à memória,com um custo mais elevado do sistema.

Stack Machines

Um tipo de processadores fora do comum são as �stack machines�, que apesar depouco frequentes em hardware, são muito usadas em implementações virtuais em

Departamento de Engenharia Informática - ISEP - IPP

6

Page 7: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

software. Caracterizam-se por possuírem uma pilha em vez de registos paraarmazenarem os dados, sendo os operandos das operações retirados do topo da pilha,e o seu resultado é colocado de volta no topo da pilha. As stack machines são ideaispara o processamento de expressões algébricas na notação postÞx (RPN). Comovantagens das stack machines temos a sua simplicidade, uma vez que as operações sãoapenas efectuadas com o topo da stack, logo as instruções não necessitam deespeciÞcar os operandos, sendo também mais simples e mais curtas do que numprocessador normal.

☛ Transformar a expressão (3+2)*(7-4) em RPN e simular o seu cálculo.

A História do 8086

O Intel 4004, que é normalmente considerado o primeiro microprocessador foiproduzido inicialmente por encomenda para uma calculadora, no entanto a encomendafoi anulada, sendo o 4004 utilizado em circuitos de controle e automatismos com muitosucesso. O processador seguinte da Intel foi o 8008, que apesar de ser um processadorainda bastante limitado, já era um processador de 8 bits ao contrário dos 4 bits do4004. O passo seguinte foi o 8080, um processador de 8 bits, excelente para a época, queteve como descendentes de 8 bits o 8085 da Intel e o Z80 da Zilog. O enorme sucesso do8080 e similares de 8 bits, determinou em grande parte a arquitectura do 8086.

Os Registos do 8086

Apesar de interessar ter registos de 16 bits num processador, em muitas ocasiões issoconstitui um desperdício uma vez que certos tipos de dados como os caracteres Asciiapenas necessitam de 8 bits. Assim no 8086, os registos de dados podem ser utilizadoscomo apenas um registo de 16 bits (AX por exemplo) ou podemos usar separadamenteos seus 8 bits mais signiÞcativos e menos signiÞcativos (AH e AL respectivamente).Isso acontece nestes quatro registos:

AX - O registo AX também é conhecido por acumulador uma vez que certas instruçõessó funcionam com este registo de dados.

BX - O registo BX é o único registo de dados que pode ser usado como apontador paraa memória.

CX - O registo CX é usado em certas instruções como contador. DX - Não tem nenhum uso especial.

O 8086 tem quatro registos de indíce, que são normalmente usados como apontadorespara a memória:

SI - O registo SI (Source Index) aponta para a origem numa operação demanipulação de strings.

DI - O registo DI (Destination Index) aponta para o destino numa operação demanipulação de strings.

SP - O registo SP (Stack Pointer) serve para o processador implementar uma pilhausada na chamada de subrotinas.

BP - O registo BP (Base Pointer) permite ter mais um apontador para a pilha,utilizado em linguagens que passam parâmetros através da pilha.

Departamento de Engenharia Informática - ISEP - IPP

7

Page 8: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

AX AH AL

BL

CL

DL

BH

CH

DH

BX

CX

DX

SI

DI

BP

SP

Flags

IP

O registo IP (Instruction Pointer), que noutros processadores recebe o nome deProgram Counter, aponta para a instrução que está a ser executada.

E temos Þnalmente o registo de ßags que contém várias ßags de sinalização doresultado das instruções do 8086 e de conÞguração do processador.

As ßags do 8086

As ßags existentes no registo de ßags do 8086 são as seguintes:

CF - (Bit 0) Flag de carry, activada quando alguma operação aritmética gera umcarry ou um borrow. Este bit também pode ser afectado por shifts ou rotates, e pode sermanipulado através das instruções STC (set), CLC (clear) e CMC (complement).

PF - (Bit 2) Flag de paridade, activada por muitas instruções, quando o byte menossigniÞcativo do destino das instruções tem um número par de bits a um. Esta ßagassinala a paridade dos 8 bits menos signiÞcativos.

AF - (Bit 4) Flag auxiliar de carry, assinala se houve um carry do bit 3 para o bit 4,isto é um carry do nibble menos signiÞcativo para o mais signiÞcativo, no byte menossigniÞcativo. Esta ßag é usada para implementar e ajudar as operações emaritmética BCD.

ZF - (Bit 6) Flag de zero, é activada se o resultado de uma operação é zero. Ascomparações activam esta ßag, se os operandos forem iguais.

SF - (Bit 7) Flag de sinal, é activada por muitas operações, de modo a ser igual aobit mais signiÞcativo do resultado. Deste modo, se estivermos a usar números comsinal, a ßag SF diz-nos se o resultado é positivo ou negativo (ßag a 1).

TF - (Bit 8) Flag de Trace. Se estiver activa o processador executa uma interrupçãodo tipo 1 depois de cada instrução. Depois de executado o código da interrupção, o

Departamento de Engenharia Informática - ISEP - IPP

8

Page 9: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

processador executa a instrução seguinte. Este modo de "single-step" é extremamenteútil para fazer o "debugging" de programas.

IF - (Bit 9) Flag de Interrupt. Quando esta ßag está activa o processador reconheceos sinais de interrupt de hardware externos. Se esta ßag não estiver activa, os sinaisexternos de interrupt são ignorados. Note-se que esta ßag não afecta os interrupts desoftware, nem os interrupts gerados internamente pelo processador.

DF - (Bit 10) Flag de direcção. É utilizada pelas instruções de manipulação destrings para incrementar ou decrementar automaticamente os apontadores para asstrings, depois de cada iteração.

OF - (Bit 11) Flag de overßow. Activada quando o resultado não cabe no destino,normalmente em operações com números com sinal quando existe carry do penúltimobit par o último bit (o sinal).

A segmentação no 8086

Como vimos até agora todos os registos do 8086 são de 16 bits, no entanto um

barramento de endereços de 16 bits limitaria o 8086 a utilizar apenas 64k (216)posições de memória. Como ter todos os registos com 16 bits simpliÞca o desenho doprocessador, a Intel usou uma estratégia a que chamou segmentação.

Quando é necessário gerar um endereço para aceder à memória esse endereço não égerado apenas por um registo, mas pelo conjunto de dois registos diferentes. Os valoresdesses registos são somados para se obter o endereço físico de memória, mas a soma éefectuada com o valor de um dos registos deslocado 4 bits (um dígito hexadecimal)para a esquerda.

Exemplo (em hexadecimal): 1252

+1234 13592

A parcela mais signiÞcativa tem o nome de segmento, e a menos signiÞcativa recebeo nome de offset. Assim o 8086 é capaz de endereçar 1Mbyte de memória (220) usandoapenas registos de 16 bits. Os endereços de memória do 8086 são normalmente escritosna forma segmento:offset como por exemplo 1234:1252h. Assim podemos ver que ésempre necessário um registo adicional (de segmento) sempre que o processador acedeà memória, e que se não alterarmos o valor do segmento apenas poderemos endereçar64kbytes de memória. Como cada segmento apenas possui 64k de memória, no 8086existem quatro registos de segmento para uma maior ßexibilidade:

CS - Code Segment, utilizado sempre que o processador faz um acesso à memóriapara ler uma instrução.

DS - Data Segment, utilizado quando o processador lê ou escreve um valor namemória.

SS - Stack Segment, utilizado quando o processdor faz um acesso à pilha.ES - Extra Segment, utilizado quando o programador o especiÞcar.

Note-se que além dos segmentos utilizados por defeito, o programador pode

Departamento de Engenharia Informática - ISEP - IPP

9

Page 10: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

especiÞcar o segmento que qualque instrução utilizará.Esta solução permite que os programas usem simultâneamente quatro segmentos de

memória, ou 256kb. Assim a segmentação de memória no 8086 permite endereçar1Mbyte de memória com registos de 16bits, no entanto não permite usar plenamenteesse 1Mbyte de memória, constituindo uma limitação grave quando queremos usar no8086 estruturas de dados com mais de 64kbytes de memória.

A Linguagem Assembly

Aquilo que os processadores interpretam são códigos de instruções, isto é, sequênciasde um ou mais bytes colocados em memória que o processador vai interpretando. Comoé difícil escrever directamente, em hexadecimal, decimal ou até binário os valorescorrectos das instruções é normal que os fabricantes dos processadores deÞnam nomespara as instruções (mnemónicas). Essas mnemónicas, escritas com os operandoscorrectos num Þcheiro de texto, serão transformadas em código por um programachamado �Assembler�, sendo a linguagem designada por Linguagem Assembly.

Um exemplo típico de uma instrução é: mov ax,bx No caso do 8086 e descendentes, a instrução mov copia um valor de um registo para

outro, do segundo para o primeiro operando. Noutros processadores de outrosfabricantes, e inclusivamente em alguns assemblers para os processadores da familía8086 passa-se o contrário, sendo o primeiro operando a origem, e o segundo o destino.Outros processadores ainda, admitem três operandos nas instruções, sendo dois deorigem e um de destino.

Modos de Endereçamento

Podemos usar uma instrução especiÞcando os seus operandos de diferentes formas.Podemos usar um registo como operando:

mov ax,bxPodemos usar um valor como operando:

mov ax,12Podemos usar uma posição de memória como operando:

mov ax,variavel1Podemos usar o endereço de uma posição de memória:

mov ax, OFFSET variavel1No entanto a instrução anterior também pode ser escrita como:

lea ax,variavel1Podemos usar um registo como apontador para a memória:

mov ax,[bx]Neste modo de endereçamento, usamos o registo BX como apontador para a

memória. Se no registo BX estiver o valor 1542h então o valor da posição de memória1542h irá ser copiado para o registo AX. Isto é equivalente a ax=*bx na linguagem C.

Podemos usar um registo como apontador para a memória fornecendo umdeslocamento (positivo ou negativo):

mov ax,[bx+4]Neste caso o mov irá ler a posição de memória 1546h, se no registo BX estiver o

valor 1542h.

Departamento de Engenharia Informática - ISEP - IPP

10

Page 11: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Podemos usar a soma de dois registos para apontar para a memória, ou usar a somade dois registos mais um deslocamento:

mov ax,[bx+si]

mov ax,[bx+si+12]Os únicos registos que podemos usar para apontar para a memória são: BX,BP,SI e

DI. No caso da soma de dois registos podemos usar apenas os registos BX ou BP comouma das parcelas sendo a outra constituída pelo registo SI ou pelo DI.

Se um dos operandos de qualquer instrução Þzer referência a uma posição dememória, o outro operando não poderá fazer referência à memória, Isto é, apenas umdos operandos pode fazer referência à memória.

Instruções de Transferência de Dados

MOV - A instrução mais simples de transferência de dados é a instrução mov, que narealidade copia um valor da origem para o destino. Depois de efectuado o mov ovalor continua inalterado na origem.

PUSH POP - Push coloca um valor na stack enquanto que pop retira um valor da stack.PUSHFPOPF - Idem para o registo de ßags.LAHF - Copiar byte menos signiÞcativo das ßags para o registo AHSAHF - Escrever o registo AH no byte menos signiÞcativo das ßags

XCHG - Troca dois valores☛ Como simular um XCHG com PUSH e POP?

INOUT - Ler e escrever valores nas portas de I/OLEA - Carregar um registo com o endereço de um variável

Instruções Aritméticas e Lógicas

ADD - Soma duas parcelasADC - Soma duas parcelas mais a ßag de carry INC - Incrementa (soma um) SUB - Subtrai duas parcelasSBB - Subtrai duas parcelas e o borrow (carry)DEC - Decrementa (subtrai um) CMP - Subtrai mas não actualiza o resultado, permitindo fazer

comparações sem destruir os operandosNEG - Troca o sinal de um número

MUL DIV - Multiplicação e divisão de números sem sinalIMULIDIV - Multiplicação e divisão de números com sinal

DAADAS - Ajuste decimal da adição e da subtração, útil para operações com

Departamento de Engenharia Informática - ISEP - IPP

11

Page 12: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

números em BCD

AAAAASAAMAAD - Ajuste ASCII da adição, subtração, multiplicação e divisão

CBW - Converter um byte em word, para números com sinalCWD - Converter uma word em doubleword (32 bits)

AND - E lógico bit a bitOR - Ou lógico bit a bit XOR - Ou exclusivo lógico bit a bit NOT - Inversão lógica bit a bit (Não confundir com NEG)TEST - O mesmo que AND sem actualizar o destino, servindo para testar o

valor de certos bits

SHL/SAL - Deslocamento para a esquerda (multiplicação por 2)SHR - Deslocamento para a direita (divisão por 2)SAR - Deslocamento para a direita preservando o sinal

RORROL - Rotação para a direita e para a esquerda

RCRRCL - Rotação para a direita e para a esquerda passando pelo carry

Instruções de salto incondicional

JMP - Salto IncondicionalCALL - Chamada de uma subrotinaRET - Retorno de uma subrotina

Instruções de salto condicional

JE/JZ JNE/JNZ -Igual ou ZeroJO JNO -OverßowJS JNS -Sinal ( Negativo)JC JNC -CarryJP/JPE JNP/JPO -Paridade

Teste de números com sinal:

JL/JNGE JNL/JGE -LesserJLE/JG JNLE/JG -Greater

Teste de números sem sinal:

JB/JNAE JNB/JAE -BelowJBE/JNA JNBE/JA -Above

Departamento de Engenharia Informática - ISEP - IPP

12

Page 13: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Ciclos:

LOOP - Usa CX decrementando-o até que CX seja zeroLOOPZ/LOOPE - Idem, mas o ciclo apenas continua enquanto a ßag de

zero estiver activaLOOPNZ/LOOPNE - O ciclo apenas continua enquanto a ßag de zero não

estiver activaJCXZ - O salto é efectuado quando o valor do registo CX é zero,

sendo útil para evitar um ciclo

Instruções de controle do Processador

STC CLC CMC - Set, clear e complement da ßag de carry

STI CLI - Set e clear da ßag de interrupt

STD CLD - Set e clear da ßag de direcção

HLT - Pára o processador até que surja um interrupt☛ Para que serve o HLT?WAIT - Espera pelo resultado de uma operação do coprocessadorESC - PreÞxo de uma instrução a enviar para o coprocessadorLOCK - PreÞxo para executar a próxima instrução de uma forma contínua,

sem libertar o barramento☛ Como se usa o LOCK, junto como o XCHG e para quê?

Instruções de Manipulação de strings

As instruções de manipulação de strings funcionam usando os seguintes registos daseguinte forma:

S I - Apontador para a string de origem DI - Apontador para a string de destinoCX - Contador com o número de elementos da stringAX/AL - Valor a procurar, escrever ou ler da string

As instruções de manipulação de strings terminam por B quando manipulam bytes eW quando manipulam words, sendo as seguintes:

MOVS - Copiar uma stringCMPS - Comparar duas stringsSCAS - Procurar um valor numa stringLODS - Ler um valor de uma stringSTOS - Escrever uma valor numa string

Departamento de Engenharia Informática - ISEP - IPP

13

Page 14: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Estas instruções apenas executam uma iteração do número total de iteraçõesnecessário para processar completamente uma string. Se quisermos processarcompletamente uma string, devemos usar os seguintes preÞxos antes das instruções:

REP - Repete a instrução seguinte até que CX seja zeroREPE/REPZ - Idem, mas continua apenas enquanto a ßag de zero está

activaREPNE/REPNZ - Idem, mas continua apenas enquanto a ßag de zero não

esteja activa

Funcionamento da tabela de Interrupts

Em certos processadores as rotinas de interrupt, encontram-se colocadas em posiçõesÞxas da memória o que traz uma certa inßexibilidade na sua deÞnição e uso. No 8086a localização das rotinas de interrupt é extremamente ßexível e alterável uma vezque o seu endereço está deÞnido numa tabela colocada em RAM. A partir da posição 0(zero) de memória, existe uma tabela cujas entradas possuem o endereço das rotinas deinterrupt. Cada entrada na tabela possui duas words que correspondem ao segmento eoffset da posição de memória onde se encontra a rotina, tendo a tabela um total de 256entradas.

Assim quando o 8086 recebe um interrupt do tipo n consulta a entrada n na tabela,lendo o endereço que se encontra colocado nessa entrada na tabela. De seguida, oprocessador chama a rotina colocada nesse endereço. A tabela de interrupts funcionaassim como uma tabela de apontadores para rotinas.

Esta forma de chamar uma rotina é extremamente ßexível e pode ser usada emsoftware através da instrução INT. Esta instrução possui um argumento que é o númeroda rotina de interrupt a chamar. No Þm de uma rotina de interrupt devemos usar ainstrução IRET em vez de RET, porque tanto a instrução INT como um interrupt dehardware, além de guardarem o valor do IP na stack também guardam o valor doregisto de Flags, sendo necessário repor o registo de Flags no Þm da rotina deinterrupt, o que é feito pela instrução IRET.

Outro cuidado que devemos ter é não confundir as linhas de interrupt, ou osinterrupts de hardware gerados pelos periféricos, com os interrupts de softwaregerados pela instrução INT.

O Processador Intel 386 (80386)

O 386 é um processador importante, uma vez que na família do 8086 é o primeiroprocessador de 32 bits, e o primeiro a oferecer suporte para sistemas operativos commemória virtual e segurança. Apesar da família de processadores Intel ter evoluídomuito, desde o lançamento do 386 em 1986, do ponto de vista do modelo deprogramação, os processadores mais recentes são praticamente iguais ao 386. Vamosassim estudar o 386, para vermos como é um processador com suporte para memóriavirtual e segurança, como é que o 8086 evoluiu para 32 bits, e Þcarmos a conhecer umprocessador CISC típico.

Características fundamentais do 386

O 386 possui registos de 32 bits, um barramento de dados de 32 bits e um barramento

Departamento de Engenharia Informática - ISEP - IPP

14

Page 15: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

de endereços de 32 bits suportando assim um máximo de 4Gb de memória. Possui novasinstruções que não existem no 8086, suporte para memória virtual através depaginação e segmentação de memória, vários modos de funcionamento, registos deajuda ao debugging, níveis de previlégio e suporte para multitarefa.

A memória virtual é conseguida através da simulação de memória RAM, usandoespaço em disco. Para isso é necessário que exista no processador uma unidade degestão de memória, ou que este suporte uma unidade de gestão de memória externa.Hoje em dia, a gestão de memória é interna em quase todos os processadores. A gestãode memória tem por Þm fazer a distinção entre os endereços de memória virtuais, istoé, aqueles que são vistos pelos programas, e os endereços físicos onde os programasestão realmente colocados. Do ponto de vista dos programas, interessa que todos elessejam colocados nas mesmas posições de memória, para que seja mais simples fazer umprograma. Do ponto de vista do hardware e do sistema operativo, é necessário que osprogramas estejam todos em posições distintas, para que tudo funcione bem. O ponto devista dos programas será o ponto de vista da memória virtual e o hardware de gestãode memória vai fazer a tradução entre os endereços virtuais e os endereços físicos(reais) sempre que seja feito um acesso à memória.

Além disso o hardware de gestão de memória dever gerar uma excepção (uminterrupt) sempre que seja feito um acesso a uma posição de memória que não esteja emRAM, para assinalar ao sistema operativo a necessidade de ir buscar a àrea dememória em falta ao disco.

Registos do 386

Aparentemente, as mudanças nos registos do 8086 para o 386 são poucas, seexceptuarmos a passagem dos registos para 32 bits. Para a passagem dos registos a 32bits ser menos traumática para os programadores, os nomes antigos mantém-se com omesmo signiÞcado. Exemplo: o registo AX continua a ser de 16 bits e a ter dentro de sios registos AH e AL, só que agora o registo AX corresponde também aos 16 bits menossigniÞcativos do registo EAX de 32 bits. Assim todos os registos de dados passam a 32bits, recebendo o preÞxo "E" no nome.

De salientar que os 16 bits mais signiÞcativos dos novos registos, não se podemmanipular da mesma forma que os 16 bits menos signiÞcativos. Isto é, EAXcorresponde aos 32 bits, AX aos 16 bits menos signiÞcativos, mas não nos podemosreferir aos 16 bits mais signiÞcativos de nenhuma forma.

Os registos de segmento continuam a ser de 16 bits mas existem agora dois novosregistos de segmento (FS e GS).

O registo EFLAGS

No registo EFLAGS mantém-se as ßags existentes no 8086, com o mesmo signiÞcado esão criados novos bits para suportar as funcionalidades próprias do 386.

Departamento de Engenharia Informática - ISEP - IPP

15

Page 16: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

AX

IP

FLAGS

SP

BP

DI

SI

DX

CX

BX

EAX

EIP

EFLAGS

ESP

EBP

EDI

ESI

EDX

ECX

EBX

CS

GS

FS

ES

DS

SS

Flags próprias do 386

IOPL - (Bits 12 e 13) Input/Output Previlege Level. No 386 existe a noção de níveisde previlégio, que corresponde a diferentes níveis de segurança num sistemaoperativo. No 386 temos quatro níveis diferentes de previlégio desde o nível 3 (omais baixo) até ao nível 0 (o mais alto). Os 2 bits existentes no registo EFLAGSdeterminam a partir de que nível de previlégio um programa pode aceder às portas deI/O. Esta deÞnição é importante para vedar o acesso aos periféricos por parte dosprogramas normais, uma vez que só o sistema operativo deve ter acesso ao periféricos.

☛ Porquê?

NT - (Bit 14) Nested Task. Esta ßag é activada quando uma tarefa do sistemachama outra. Esta ßag tem a ver com o suporte oferecido pelo 386 para a execução"simultânea" de várias tarefas.

RF - (Bit 16) Resume Flag. Este bit tem a ver com os registos de debugging, e permitecontinuar o processamento, apesar de certas excepções, o que facilita o debugging.

VM - (Bit 17) Virtual 8086 Mode Flag. Esta ßag faz com que o 386 passe a funcionarno modo Virtual 8086. Se não estiver activa , o 386 funciona em modo real, modoprotegido ou no modo de emulação do 286.

Departamento de Engenharia Informática - ISEP - IPP

16

Page 17: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Registos de modo protegido

Os registos associados com o funcionamento em modo protegido, são apenas quatro:

TR

LDTR

IDTR

GDTR

GDTR - Global Descriptor Table Register ( 48 Bits ) IDTR - Interrupt Descriptor Table Register ( 48 Bits ) LDTR - Local Descriptor Table Register ( 16 bits ) TR - Task Register ( 16 bits )

O seu funcionamento vai ser descrito mais à frente, por agora vamos falar dosdiferentes modos de funcionamento do 386. Basicamente podemos falar de 3 modos defuncionamento: modo real, modo protegido e modo virtual.

O modo protegido é o modo de funcionamento mais desejável no 386, com todos osmecanismo de segurança e protecção activos. No entanto, para que os mecanismos desegurança e protecção sejam deÞnidos, não podem estar activos, do mesmo modo quenão se pode pôr portas, numa casa com as portas fechadas.

O modo real é um modo de funcionamento em que todas as instruções do 386 estãoactivas, mas os mecanismos de protecção e segurança não estão activos. É o modo defuncionamento em que o 386 arranca a seguir a um "reset".

O outro modo de funcionamento é o modo virtual. É muito difícil, para o 386 mantera compatibilidade completa com o 8086, por isso existe um modo especial defuncionamento para manter essa compatibilidade com o 8086.

O nome correcto deste modo de funcionamento é VM86 e resulta do facto de nestemodo de funcionamento podermos ter vários "8086 virtuais" a correr várias tarefasdiferentes.

A mudança entre os diferentes modos de funcionamento é complexa, uma vez que osuporte oferecido pelo 386 aos diferentes modos de funcionamento é muito completo.

Além dos registos de modo protegido, e dos dois novos registos de segmento (FS e GS)existem três novos registos de controle, seis registos de debug, e dois registos de teste.O acesso a esses registos é feito de uma forma normal, através da instrução MOV quefoi expandida, para poder dar acesso aos novos registos.

Registos de Controle

MPEMTSETPG CR0

CR1

CR2 - Page Fault Linear Address

CR3 - Page Directory Base Register

PE

Departamento de Engenharia Informática - ISEP - IPP

17

Page 18: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

CR0

Bit 0 - PE Protection Enable Este bit controla o funcionamento em modo protegido do 386. Se estiver a um isto

signiÞca que o 386 se encontra em modo protegido. No entanto, os passos necessáriospara o processador entrar e sair do modo protegido, são complexos, e envolvem muitomais do que mudar apenas este bit.

Bit 1 - MP Math Present Este bit assinala a presença de um coprocessador matemático ligado ao 386. Este

coprocessador pode ser um 387 ou um 287. A hipótese de se usar um 287 aparece porrazões de ordem económica, e também porque o 386 apareceu antes do 387.

Bit 2 - EM Emulate Coprocessor Com este bit activo o 386 gera uma excepção (interrupt) do tipo 11, cada vez que

encontrar uma instrução de ßoating point. Este comportamento serve para oprocessador simular o coprocessador, através da rotina de atendimento do interrupt. Éclaro que o interesse deste bit se limita aos sistemas sem coprocessador numérico.

Bit 3 - TS Task Switched O processador activa este bit sempre que faz uma mudança de uma tarefa para

outra.

Bit 4 - ET Extension Type Como ao 386 podemos ligar um 387 ou um 287, este bit é activado automaticamente

pelo 386 ao detectar o tipo de coprocessador aritmético ao qual se encontra ligado.

Bit 31 - PG Paging Este bit serve para se ligar (normalmente) ou desligar (muito raramente) o

mecanismo de paginação de memória do 386.Veremos mais à frente o funcionamento desse mecanismo.

CR1 - Este registo não se encontra deÞnido pela Intel, não devendo ser usado.

CR2 - Page Fault Linear AddressEste registo é apenas de leitura, e o 386 coloca neste registo o último endereço

virtual que gerou uma "page" fault. Isto é, quando o 386 faz uma referência a umapágina que não se encontra em RAM, o endereço correspondente vai ser colocado noregisto CR2.

CR3 - Page Directory Base Register (PDBR) Neste registo encontra-se o endereço físico do directório de tabelas de páginas.

Como o directório de tabelas de páginas é uma página, os 12 bits menos signiÞcativosdeste registo, são sempre lidos como zeros.

Departamento de Engenharia Informática - ISEP - IPP

18

Page 19: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Registos de Debug

Endereço Linear para o Breakpoint 0

Endereço Linear para o Breakpoint 1

Endereço Linear para o Breakpoint 2

Endereço Linear para o Breakpoint 3

Len3

Len2

Len1

Len0

RW3

RW2

RW1

RW0

GD

GE

LE

G3

L3

G2

L2

G1

L1

G0

L0

B0

B1

B2

B3

BD

BS

BT

DR0

DR1

DR2

DR3

DR4

DR5

DR6

DR7

DR0, DR1, DR2 e DR3 - Endereços de BreakpointEstes quatro registos contêm os endereços lineares dos quatro breakpoints que o 386

permite.

DR4 e DR5 - não se devem utilizar.

DR6 - Contém os seguintes bits:

B0,B1,B2 e B3 - Estes bits são usados para assinalar qual dos breakpoints gerou ainterrupção de breakpoint, que é a mesma interrupção de "single step".

BT - Este bit é activado quando o 386 gera uma interrupção de debug, por ter entradonuma tarefa que tem o bit de "trace" activo.

BS - Este bit é activado quando o 386 gera uma interrupção de debug, porque o modode "single step" está activo, por causa da ßag "TF".

BD - Este bit é activado quando um acesso ilegal aos registos de debug gera umainterrupção.

DR7 - Este registo é o registo de controle dos breakpoints. Contém os seguintescampos:

L0 - Este bit activa o breakpoint 0, mas apenas para a tarefa que está a serexecutada. Dizendo as coisas de outra maneira, este breakpoint é um breakpoint"Local".

Departamento de Engenharia Informática - ISEP - IPP

19

Page 20: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

L1,L2 e L3 - Idem para os Breakpoints 1,2 e 3.

G0 - Este bit activa o breakpoint 0, para todas as tarefas que possam ser executadas.Isto é, o breakpoint 0 passa a ser um breakpoint "Global".

G1,G2 e G3 - Idem para os Breakpoints 1,2, e 3.

RW0 - Descição do tipo de acesso que deve ocorrer no enderço do breakpoint 0, paraque este seja activado. No 386 além de especiÞcar o endereço do breakpoint, podemosdizer qual o tipo de acesso à memória que deve activar o breakpoint. Nos dois bitsRW0 podemos especiÞcar os seguintes tipos de acesso:

00 - Leitura de uma instrução 01 - Escrita na memória 10 - Reservado ( não utilizar ) 11 - Escrita ou leitura de dados

Deste modo podemos fazer debugging de certas situações, que poderiam ser difíceisde detectar apenas com breakpoint por endereço. Podemos por exemplo, parar oprograma em todas as instruções que modiÞcam uma determinada posição dememória, mesmo sem saber quais são essas instruções.

RW1, RW2 e RW3 - Idem para os outros breakpoints.

LEN0 - Descrição do comprimento do accesso á memória efectuado na posição dobreakpoint.

00 - 1 byte 01 - 2 bytes ( alinhados de 2 em 2 bytes, isto é de word em word )10 - reservado ( não utilizar ) 11 - 4 bytes ( alinhados de 4 em 4 bytes, isto é de dword em dword )

Podemos desta maneira especiÞcar o tamanho do acesso à memória que pretendemosque o 386 detecte, e ignorar os acessos que não nos interessam.

LEN1, LEN2 e LEN3 - Idem para os breakpoints 1,2 e 3.

LE - (Local Exact) Como o 386 tem um pipeline, começa a executar as instruçõesquando as anteriores ainda não terminaram. Portanto para conseguir para oprocessador na instrução correcta, devemos activar este bit.

GE - (Global Exact) Este bit serve a mesma Þnalidade do anterior, mas é válidopara todas as tarefas do sistema, enquanto o anterior é válido apenas para a tarefa aser executada, sendo posto a zero quando acontece uma mudança de tarefa.

GD - (Global Debug Access) - Este bit serve para vedar o acesso aos registos de debugdo 386. Se este bit estiver a 1 impossibilita o acesso aos registos de debug. Pode terinteresse fazer isto por razões de segurança, mas depois de fecharmos o acesso aosregistos, não podemos voltar atrás e reabrir o acesso.

Departamento de Engenharia Informática - ISEP - IPP

20

Page 21: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Registos de teste

Os registos de teste TR6 e TR7 servem para se testar o funcionamento do mecanismode paginação. Escrevendo em TR6 o endereço "virtual", o processador devolve em TR7o endereço físico correspondente. Dada a numeração dos registos de teste depreende-seque existem mais seis registos, mas a sua utilização não se encontra documentada, nemé recomendada no 386.

Segmentação de memória

Os segmentos de memória no 386 (e em geral) são àreas de memória deÞnidas peloprogramador ou pelo compilador, e que são usadas para Þns diferentes, tais comoarmazenamento de codígo, de dados e da stack. Os segmentos não têm todos o mesmotamanho, podem ter qualquer tamanho, e não estão limitados a 64k.

A descrição das características de um segmento não cabe nos 16 bits de um registo desegmento, por isso para descrever correctamente um segmento, usam-se estuturas dedados chamadas descritores de segmento. Os descritores de segmento possuem 64 bitsnos quais se enconta a informação do início do segmento, do tamanho do segmento, doseu uso e do nível de previlégio do segmento. Vamos então ver o que existe dentro dos64 bits do descritor de um segmento.

Base bits 31-24 Size bits 19-16G D X U P DPL S TYPE A Base Address bits 23-0 Size bits 15-0

Bit 0 a Bit 15 Bits 0 a 15 do tamanho do segmentoBit 48 a Bit 51 Bits 16 a 19 do tamanho do segmento

Bit 16 a Bit 39 Bits 0 a 23 do início do segmento Bit 56 a Bit 63 Bits 24 a 31 do início do segmento

Esta separação dos bits foi feita por razões de compatibilidade com os segmentos do286.

Bit 40 Acessed - Este bit é activado pelo processador sempre que faz umacesso a uma posição de memória contida neste segmento. Serve para se ver se osegmento está a ser usado ou não.

Bits 41 a 43 Tipo do segmento. O tipo do segmento pode ser um dos seguintes:

000 Dados, apenas de leitura001 Dados de leitura e escrita010 Stack, apenas de leitura011 Stack de leitura e escrita100 Código, apenas de execução101 Código para execução e leitura110 Código, apenas de execução, �conforming�111 Código para execução e leitura, �conforming�

Departamento de Engenharia Informática - ISEP - IPP

21

Page 22: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

�Conforming� quer dizer que se trata de código que abdica dos seus previlégios,usando como seus os previlégios do código que o chamou.

Bit 44 System. Este bit distingue entre os segmentos do sistema e os segmentosnormais.

Bits 45-46 DPL Descriptor Previlege Level. Estes bits deÞnem o nível deprevilégio associado ao segmento numa escala de 0 a 3 sendo o nível 0 (zero) , o nívelde previlégio mais elevado.

Bit 47 Present. Este bit indica se o segmento se encontra presente ou ausente.Isto é, se se encontra em Ram, ou no disco.

Bit 52 User. Este bit pode ser usado pelo programador para qualquerÞnalidade, uma vez que o 386 o ignora.

Bit 53 X. Este bit encontra-se reservado pela Intel e não deve ser utilizado.

Bit 54 Default Size. Este bit diz-nos se o segmento contém código para o 286(16 bits) ou código para o 386 (32 bits). Isto permite que o 386 em modo protegido corracódigo escrito para o 286, isto é com operandos de 16 bits.

Bit 55 Granularidade. O facto de apenas possuírmos 20 bits para descrever otamanho dos segmentos, traria como consequência a limitação do tamanho dossegmentos a 1Mb. No entanto se este bit estiver activado, o 386 interpreta o tamanhodo segmento não em bytes, mas em múltiplos de 4kbytes, o que nos permite deÞnirsegmentos de qualquer tamanho até 4Gb. Na prática os segmentos de tamanhosuperior a 1Mb no 386, só vão ter tamanhos múltiplos de 4kb, o que não é muito grave.

Portanto num descritor de segmento encontra-se a seguinte informação:

O início do segmentoO tamanho do segmentoO seu tipoO seu nível de previlégioSe o segmento está presente em RAMSe o segmento já foi usadoO tamanho dos operandos no segmento

Os descritores de segmento encontram-se armazenados em três tabelas:

Global Descriptor Table - Encontra-se na àrea de memória deÞnida pelo registoGDTR e contém os descritores de segmento globais.

Interrupt Descriptor Table - Encontra-se na àrea de memória deÞnida pelo registoIDTR e os descritores de segmento usados pelas rotinas de atendimento aos interrupts.

Local Descriptor Table - Se o mecanismo de multitarefa do 386 estiver activopodemos deÞnir tabelas de descritores locais para cada tarefa. Esta tabela é deÞnidapelo registo LDTR que aponta para uma entrada na GDT.

Departamento de Engenharia Informática - ISEP - IPP

22

Page 23: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Assim os valores presentes nos registos de segmento do 386 não são endereços dememória mas indíces que apontam para dentro de uma das tabelas de descritores desegmentos, recebendo o nome de �selectores� de segmento. O conteúdo de um selector desegmento é o seguinte:

Index

15 3 2 1 0

TI

RPL

Indice : bits 3 a 15. Este valor escolhe um dos 8192 descritores de segmento presentesnuma das tabelas.

TI Table Indicator: bit 2. Este bit indica se a tabela usada é a tabela global (0) ouuma tabela local (1).

RPL Requested Previlege Level: bits 0 e 1. Estes bits indicam o nível de previlégiopedido para o segmento em causa que poderá ser concedido ou não pelo mecanismo deprotecção do 386.

Paginação no 386

Uma das características mais importante do 386 é o facto de possuir internamenteuma unidade de gestão de memória que lhe permite usar paginção para implementarmecanismos de memória virtual. A paginação consiste em dividir a memória empáginas (àreas de tamanho igual), que no caso do 386 possuem 4kb, que podem estarlocalizadas em endereços físicos de memória diferentes do seu endereço �virtual� queé visto pelo software, ou podem estar �ausentes em disco�.

Comparando a segmentação com a paginação podemos fazer a seguinte tabela:

Segmentação PaginaçãoInício Qualquer De 4kb em 4kbTamanho Qualquer 4kbytesNíveis de Previlégio 4 2Protecção contra Escrita Sim SimInformação Presente Sim SimInformação Acesso Sim SimInformação �Dirty� Não Sim

Da mesma maneira que temos descritores de segmentos vamos ter �descritores� depáginas, inseridos em tabelas que vão ser usadas para gerir a informação sobre aspáginas.

As tabelas de páginas vão ter entradas de 32 bits, com a descrição de uma página emconcreto, na seguite forma:

Departamento de Engenharia Informática - ISEP - IPP

23

Page 24: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

31

Endereço da página

12

User

11 9

D AUS

RW P

6 5 2 1 0

Bits 12 a 31 Endereço da página. Como as página estão colocadas em posições dememória múltiplas de 4kbytes, os bits 0 a 11 do seu endereço têm sempre o valor zero.

Bits 9 a 11 User. Estes bits podem ser usados pelo programador.

Bit 6 Dirty. Este bit deve ser posto a zero quando uma página é lida dodisco, e é activado sempre que há uma escrita na página. Assim podemos saber quaisas páginas que precisam realmente de ser escritas no disco se as retirarmos damemória RAM. As que possuem o bit �dirty� a zero não necessitam de ser escritas devolta no disco, uma vez que não foram modiÞcadas desde que foram lidas do disco.

Bit 5 Acessed. Este bit é activado sempre que há uma acesso a uma posiçãode memória pertencente à página. Serve para ver se a página está a ser usada ou não

Bit 2 User/Supervisor. Se este bit estiver activo, a página pode ser acedidapor código de todos os níveis de previlégio. Se estiver a zero, código com o nível deprevilégio 3 não pode aceder a esta página.

Bit 1 Read/Write. Fornece permissão de escrita na página.

Bit 0 Present. Indica se a página está presente em RAM ou não.

Como podemos ver em termos de informação sobre a gestão de memória a paginaçãodá-nos a informação de �dirty� que ajuda a gerir melhor a memória virtual. Alémdisso ao fazer a memória virtual à custa da paginação, estamos a dividir osprogramas em pedaços, que podem ser necessários ou não aproveitando melhor amemória. Se Þzessemos a memória virtual à custa da segmentação, o código de umprograma por exemplo, estaria todo ausente ou todo presente, o que seria pouco eÞcaz.

Na segmentação podemos especiÞcar melhor o conteúdo de um segmento, e temosmais níveis de protecção que na paginação. Por isso, em sistemas operativos robustosque corram no 386 usa-se ao mesmo tempo a segmentação e a paginação. A paginação éusada para implementar a memória virtual e a segmentação é usada paraimplementar mecanismos de segurança e protecção.

Introdução aos processadores RISC

Os processadores RISC surgem como uma tentativa de simpliÞcar o hardware eaumentar a velocidade dos processadores. RISC é a abreviatura de �ReducedInstruction Set Computer�, enquanto CISC é a abreviatura de �Complex InstructionSet Computer�. Em termos práticos, o importante nos processadores RISC é o facto deas instruções serem simples (reduzidas), e não o facto de eles aceitarem apenas umnúmero reduzido de instruções, como vamos ver mais à frente. Nos processadores CISCa ideia subjacente é fazer instruções complexas, para que os compiladores tirem

Departamento de Engenharia Informática - ISEP - IPP

24

Page 25: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

partido disso, e aproveitando essas instruções façam programas com poucas instruçõese rápidos. No caso dos processadores RISC, o que se pretende é simpliÞcar asinstruções para que estas sejam executadas mais depressa, e os programas sejam maisrápidos.

Pipelines

Vamos agora ver em que consiste um pipeline. A execução de uma instrução por umprocessador pode ser dividida em várias fases:

IF Instruction Fetch - O processador tem de ler a instrução da memória antes de a executar.

ID Instruction Decode - A instrução é descodiÞcada, isto é, o processador vê de que instrução se trata.

OF Operand Fetch - Os operandos são lidos dos registos ou da memória.

EX Execute - A instrução é executada.WB WriteBack - O resultado da instrução é escrito no

destino.

Estas cinco fases diferentes da execução de uma instrução, podem ser normalmentereduzidas a quatro, uma vez que se o formato das instruções não for complexo, oprocessador consegue descodiÞcar a instrução enquanto lê os operandos.

Teremos então quatro fase diferentes na execução de um instrução: IF,ID/OF, EX eWB. Estas fases diferentes podem e devem ser executadas por partes diferentes doprocessador. Se isto acontecer teremos o equivalente de uma linha de montagem, comas partes diferentes do processador a serem chamadas de andares do pipe line.

Fazendo um desenho:

IF ID/OF EX WB

Se temos todos estes diferentes andares no pipeline, então podemos ter instruçõesdiferentes a serem executadas em andares diferentes, e ao longo do tempo essasinstruções vão progredir no pipeline, como produtos numa linha de montagem. Assim,o processador tem uma performance maior apesar de demorar o mesmo tempo aexecutar as instruções. Partindo do pressuposto que um ciclo de clock é suÞciente para apassagem da instrução em cada um dos andares, então o processador demora quatrociclos de clock a executar cada instrução, mas em cada ciclo de clock há uma instruçãoque termina a sua execução.

Departamento de Engenharia Informática - ISEP - IPP

25

Page 26: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

IF ID/OF EX WB

IF ID/OF EX WB

IF ID/OF EX WB

IF ID/OF EX WB

IF ID/OF EX WB

Instr1

Instr1

Instr1

Instr1

Instr2

Instr2

Instr2

Instr2Instr3

Instr3

Instr3

Instr4

Instr4Instr5

Do ponto de vista prático, o processador funciona quase como se executasse umainstrução por cada ciclo de clock. Vamos ver mais à frente as subtilezas do �quase�.

Os pipelines nos processadores existem desde o início da década de 1960, mas só nosprocessadores RISC é que o pipeline é optimizado ao máximo. Para que isso aconteçavamos ver as características dos processadores RISC que permitem tal optimização.

O Pipeline e as Instruções

Para que um pipeline funcione bem, é necessário que não haja �engarrafamentos� emnenhum dos seus andares, isto é, todas as instruções devem permanecer o mesmo tempoem qualquer andar, e preferencialmente demorar apenas um ciclo de clock em cadaandar. Isto porque basta uma instrução permanecer mais tempo num andar, para que asinstruções seguintes também tenham de permanecer mais tempo nos seus andares, umavez que o andar seguinte não está livre.

Para que o andar inicial funcione bem e seja rápido, é necessário que todas asinstruções tenham o mesmo tamanho, e este seja igual à largura do barramento dedados do processador. Assim o processador consegue ler uma instrução apenas com umacesso à memória. Portanto num processador RISC todas as instruções têm o mesmotamanho, que é igual a uma posição de memória, por razões de performance.

Departamento de Engenharia Informática - ISEP - IPP

26

Page 27: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Para que a descodiÞcação das instruções seja rápida, o seu formato deve ser simples,o que é fácil, uma vez que as instruções têm todas o mesmo tamanho. Para que osoperandos sejam acedidos de uma forma rápida, a única solução possível é limitar asinstruções, de modo a que apenas seja possível usar registos como operandos, e não amemória. Deste modo, o acceso aos operandos é rápido, mas as instruções dosprocessadores RISC apenas aceitam os registos como operandos. As únicas operaçõesque se podem fazer com a memória são as operações de leitura e escrita.

Para que a execução das instruções seja rápida, as operações não podem sercomplexas, assim as operações permitidas num processador RISC são simples.

Para acelerar a escrita dos resultados das instruções, mais uma vez, estas sóaceitam os registos como destino.

Assim, os processadores RISC possuem um pipeline a funcionar, na sua máximavelocidade porque:

As instruções têm todas os mesmo tamanho, igual a uma posição de memória.As instruções trabalham apenas com os registos.As únicas operações efectuadas na memória são a escrita e a leitura.As instruções são simples.

Deste modo, as instruções são �reduzidas�, daí a origem do nome RISC.

Problemas do Pipeline

Na prática, quase que podemos considerar que um processador RISC executa umainstrução por cada ciclo de clock, no máximo. Mas existe um pequeno detalhe queinßuencia muito a sua performance e programação. Antes de uma instrução terminar asua execução, a seguinte já está a ser executada. Isto é, a execução de uma instruçãocomeça antes de a instrução anterior ter terminado.

Vamos considerar a seguinte sequência de instruções: mov ax,var1mov bx,var2add ax,bx

Neste caso quando a terceira instrução é executada, a segunda instrução ainda nãoterminou a sua execução, o que quer dizer que o valor em AX ainda não é o valorcorrecto, logo esta sequência de instruções não produz o resultado esperado.

Podemos resolver o problema por hardware, ou por software. Por hardware, se oprocessador detectar que a instrução seguinte necessita dos resultados da anterior,pode parar o processamento da instrução seguinte fazendo o que se chama�interlocking�. Mas desse modo todo o pipeline irá parar. Outra técnica consiste emfazer o �forwarding� do valor, isto é detectar que o valor vai ser necessário nainstrução seguinte, e passar o valor directamente para o andar de execução sem que ainstrução seguinte leia o valor do registo. Deste modo o funcionamento normal dopipeline é assegurado.

Por software também podemos assegurar o funcionamento normal do pipeline seconseguirmos reordenar as instruções de modo a inserir uma instrução entre as duas emconßito. Se não conseguirmos uma instrução para inserir, resta-nos a hipótese deinserir um NOP, que baixa a performance do processador, mas assegura que osresultados são os correctos.

Departamento de Engenharia Informática - ISEP - IPP

27

Page 28: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

Os saltos condicionais nos processadores RISC

Num processador normal a execução de um salto condicional não levanta nenhumsproblemas, mas num processador RISC os saltos condicionais são as instruções maisproblemáticas. Normalmente espera-se que um salto ao ser executado tenha efeitosimediatos, anulando a execuçâo da instrução seguinte. Mas nos processadores RISC, ainstrução seguinte já começou a ser efectuada. A única maneira de tornear esteproblema é assumir que o processador além do salto efectua também a instruçãoseguinte.

Assim em muitos processadores, não existe a instrução de salto, mas sim a instruçãode salto e execução (�branch and execute�). Esta instrução além de executar o salto,�executa� a instrução seguinte. Temos assim um caso onde um �bug� foi transformadonuma �feature�.

Normalmente cabe ao programador ou ao compilador usar correctamente os saltos, epreencher correctamente o chamado �branch delay slot�, isto é, a instrução seguinteao salto. Na prática se não tivermos outra hipótese, podemos sempre optar porpreencher esse espaço com um NOP. No entanto em muitos casos é possível preencheresse espaço com outra instrução.

Os processadores SPARC

A família de processadores SPARC foi especiÞcada pela SUN, para suceder aosprocessadores da família 68000 da Motorola usados nas primeiras workstations SUN.O seu aparecimento é interessante, uma vez que a sua implementação física foideixada a cargo de fabricantes de semicondutores que obtiveram a preços razoáveis asespeciÞcações SPARC. Aliás, SPARC quer dizer �Scalable Processor Architecture�, eé o nome da arquitectura em geral e não o nome de uma determinada implementação.

Inicialmente, os processadores SPARC foram deÞnidos com três unidades lógicasseparadas, uma unidade de inteiros (IU - Integer Unit), uma unidade de vírgulaßutuante (FPU - Floating Point Unit), e um coprocessador (CP - Coprocessor).

Normalmente, associa-se o uso de um coprocessador aos cálculos em vírgulaßutuante, mas na arquitectura SPARC, o coprocessador destina-se a tarefas especiaiscomo instruções gráÞcas, gestão de interfaces de rede, ou cálculos com vectores, umavez que já se encontra deÞnida uma unidade para os cálculos em vírgula ßutuante.

Esta separação das diferentes unidades lógicas deve-se ao facto de na época serdifícil e caro, colocar num mesmo circuito integrado, todas as funções necessárias a umprocessador SPARC. Desse modo é possível fazer, por exemplo, um computador maisbarato que apenas possua unidade de inteiros.

Os registos na Arquitectura SPARC

Os registos da unidade de inteiros dos processadores SPARC são muitointeressantes, porque usam um mecanismo de janela de registos. Este mecanismo tempor Þnalidade fornecer muitos registos físicos, a partir de poucos registosendereçáveis. Num processador interessa ter muitos registos para que seja possívelguardar as variáveis todas dos nossos programas em registos. Por outro lado interessa

Departamento de Engenharia Informática - ISEP - IPP

28

Page 29: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

ter poucos registos, uma vez que os registos devem ser especiÞcados nas instruções e setivermos muitos registos, os bits necessários para os especiÞcarmos vão aumentar otamanho das instruções, e como é óbvio isso vai diminuir a performance doprocessador.

Nos processadores SPARC temos 32 registos endereçáveis, dos quais 8 são globais,isto é, são os mesmos para todos os procedimentos/subrotinas. Além dos 8 registosglobais temos mais 24 registos, que constituem uma janela sobre o conjunto maisalargado dos registos realmente existentes no processador. O conjunto dos registosfísicos existentes no processador pode variar entre 40 e 520. No entanto desse registostodos, o processador apenas vê 24 de uma vez. Assim todos os registos endereçáveis, seexceptuarmos os registos globais, são obtidos a partir dos registos físicos, estando acada momento vísíveis apenas 24 desses registos.

RegistosFísicos

r31

r24

r23

r16

r15

r8

Ins

Locals

Outsr31

r24

r23

r16

r15

r8

Ins

Locals

Outsr31

r24

r23

r16

r15

r8

Ins

Locals

Outs

Globalsr7

r0

Quando entramos numa nova subrotina ou procedimento, podemos actualizar ajanela visível de modo a que tenhamos uma nova janela. Nessa nova janela vemoscomo r24 a r31 os registos r8 a r15 da janela anterior, o que permite passar parâmetrosentre rotinas usando esses registos. Dessa utilização deriva o seu nome de �Ins� e�Outs�, e esse mecanismo permite passar parâmetros entre rotinas sem o uso de umastack, isto é, de posições de memória que seriam mais lentas do que os registos quevamos usar.

No entanto, esta forma de usar os registos não é utilizada noutros processadores,

Departamento de Engenharia Informática - ISEP - IPP

29

Page 30: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

uma vez que tem desvantagens do ponto de vista da sua implementação em hardware.Como o barramento interno do processador deverá ter ligações a todos os registos, eserá muito comprido, o que resultará numa capacidade parasita grande. Isto tem comoconsequência um aumento do consumo e do aquecimento do processador, e umadiminuição da sua velocidade máxima de funcionamento.

O Registo Zero do processador SPARC

Como em muitos outros processadores RISC, nos processadores SPARC é usado umtruque para simpliÞcar o processador que consiste em modiÞcar um registo (o registo 0nos SPARC) para que a leitura desse registo devolva sempre o valor zero. Isto permitesimpliÞcar o processador uma vez que permite simular várias instruções à custa deoutras.

Como em muitos processadores RISC as instruções nos processadores SPARC possuemtrês operandos, dois operandos de origem e um de destino. Deste modo, podemossimular as seguintes instruções, entre outras:

A instrução de comparação pode ser simulada à custa da instrução de subtracção,usando como destino o registo 0.

A instrução de subtracção pode ser usada para trocar o sinal ao valor colocado numregisto, subtraindo esse registo ao registo 0 e fazendo com que o destino dessa operaçãoseja o próprio registo.

Como vemos a utilização de um registo que possui sempre o valor zero, permitediminuir o número de instruções que é necessário implementar num processador, esimpliÞcar desse modo o seu hardware. A simulação das instruções é transparentepara o utilizador, uma vez que é feita pelo assembler, para que o utilizador veja domesmo modo tanto as instruções reais como as simuladas.

Noções básicas sobre processadores avançados

Pipeline: Divisão da execução das instruções por vários andares do processador, demodo a que o processador tenha em execução simultânea várias instruções, em fasesdiferentes de processamento. O objectivo do pipeline é a execução de uma instrução porcada ciclo de clock.

Pipeline com muitos andares ou superpipeline: Num pipeline com muitos andarescada andar pode ser mais simples, uma vez que a execução da instrução vai serdividida por mais andares, diminuindo assim a percentagem da execução total quecabe a cada um dos andares. Isto permite aumentar a velocidade de clock, uma vez quecada instrução passa menos tempo em cada andar. No entanto as dependências dosdados e os problemas com os saltos Þcam piores, dado que o tamanho do pipelineaumentou. Assim quando o pipeline �pára� há mais instruções que são afectadas, e aperformance do processador sofre uma quebra maior do que num processador com menosandares no pipeline. A maneira normal de contrabalançar este problema é ter ummecanismo de �branch prediction� mais complexo e soÞsticado para prevercorrectamente uma maior percentagem de saltos condicionais.

Processador Superescalar: Processador no qual existe mais do que uma unidade deexecução para possibilitar a execução de mais do que uma instrução por cada ciclo de

Departamento de Engenharia Informática - ISEP - IPP

30

Page 31: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

clock. O facto de existir mais do que uma unidade de execução não quer dizer queexista mais do que um pipeline. De uma forma geral o número de pipelines pode serinferior ao número de unidades de execução.

Branch prediction: Tentar prever os saltos condicionais de modo a ter as instruçõescorrectas no pipeline. Os algoritmos utilizados podem ser mais simples ou maiscomplexos, e podem inclusivamente guardar a �história passada� de cada um dossaltos para assim fazerem uma previsão mais correcta do seu resultado.

Speculative Execution: Executar as instruções previstas no mecanismo de branchprediction, sem que a instrução de salto tenha sido executada.

Out of Order Execution: Executar instruções fora da ordem correcta, porque instruçõesanteriores ainda não terminaram e as que o processador vai executar não dependem doresultado das que ainda não terminaram.

Exemplo:mov ax,var1mov bx,var2add ax,bx

; as instruções seguintes não dependem das anteriores; portanto podem ser executadas fora da ordem

mov cx,var4mov dx,var5add cx,dxmov var6,cx

Register Renaming: Usar outros registos em vez dos originais para evitar conßitosentre dois pedaços de um programa que usam os mesmos registos em sequência maspara dados diferentes.

mov ax,var1mov bx,var2add ax,bxmov var3,ax

; as instruções seguintes não dependem das anteriores ; mas estão a usar os mesmos registos ; se usarmos um mecanismo de �register renaming� então as; instruções usarão outros registos e já serão executadas ; �fora da ordem�

mov ax,var4mov bx,var5add ax,bxmov var6,ax

Reorder buffer: sítio onde os dados provenientes da execução de instruçõesespeculativa ou fora da ordem são armazenados, antes de serem escritos pela ordemcorrecta. O �reorder buffer� permite que apesar as instruções sejam executadas fora deordem, com os os dados a serem �produzidos� na altura correcta.

Reservation stations: sítio onde as instruções que ainda não podem ser executadasaguardam a sua execução.

Os processadores Alpha

Departamento de Engenharia Informática - ISEP - IPP

31

Page 32: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

A família de processadores Alpha da Compaq ( ex-Digital ) merece ser estudada,porque possui uma arquitectura de 64 bits e de uma elevada performance, mesmoquando comparada com outros processdores RISC. Esta família de processadoresapareceu no início da década de 1990, sendo os primeiros processadores disponíveis nomercado com registos de 64 bits. Os 64 bits permitem que estes processadores possamendereçar uma memória muito maior do que os 4Gb normais nos processadores de32bits. Estes 4 Gb de memória endereçável constituem hoje em dia uma limitaçãograve, que se nota particularmente em grandes bases de dados.

Os processadores Alpha possuem 32 registos de inteiros e 32 registos para vírgulaßutuante, além de outro registos como o Program Counter. Uma característicaimportante deste processador é o facto de não ter registo de ßags aritméticas para oteste do resultado das operações. Se existissem as ßags, isso constituiria um�engarrafamento� na execução simultânea de várias instruções por diferentesunidades de execução. Em vez de testar as ßags os processadores Alpha podem testardirectamente os valores existentes nos registos, usando as condições =0, !=0, >0, <0,<=0, >=0, even e odd.

Estas condições podem ser usadas nos saltos condicionais e também nos �moves

condicionais�, que fazem um �move� ou não se a condição fôr verdadeira ou falsa. Os�moves condicionais� aparecem para eliminar certos saltos condicionais que apenasservem para actualizar ou não um determinado valor. Os saltos condicionaisimplicam que a instrução seguinte possa ou não ser executada, o que nos traz problemasem termos de pipeline, enquanto que um �move condicional� é sempre executado doponto de vista do pipeline, quer o move seja feito ou não.

Outra característica importante dos processadores Alpha é a existência deinstruções do tipo �hint�. Isto permite que o compilador forneça �pistas� aoprocessador sobre o comportamento previsível de um determinado salto condicional.Estas �pistas� permitem um melhor desempenho do processador uma vez que assimpode prever melhor o comportamento dos saltos condicionais.

Os processadores Alpha possuem um excelente suporte para funcionamento emsistemas multiprocessador, e uma velocidade de acesso ao sistema de memóriaexcelente. Por exemplo, o processador da família Alpha mais recente (21264) possuiduas unidades de execução de inteiros, duas de geração de endereços, duas unidade devírgula ßutuante,�register renaming� com 160 registos de inteiros e 72 registos devírgula ßutuante, a execução simultânea de pelo menos quatro instruções por ciclo declock (de um máximo de seis), 128kb de cache de nível 1 (64k dados + 64k instruções),suporte para uma cache de nível 2 externa de 16Mb (máximo) com uma velocidade de333Mhz num bus de 128 bits. Os chipsets existentes permitem �abrandar� avelocidade de acesso à memória para permitir o uso de módulos de memória DIMM�normais� de 100 Mhz, mas com o mínimo de 4 DIMMS, uma vez que a largura dobarramento de memória à saída do chipset é de 256 bits. Neste momento (Jan de 2000)a velocidade de clock dos sistemas Alpha 21264 anda à volta dos 700Mhz, com umaevolução previsível até aos 1000Mhz.

A evolução dos processadores Intel

A partir do 386, a Intel produziu o 486 que foi um processador inovador em váriosaspectos. Foi o primeiro processador da família x86 a possuir uma cache, o primeiro a

Departamento de Engenharia Informática - ISEP - IPP

32

Page 33: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

incorporar no mesmo chip o coprocessador de vírgula ßutuante que dantes estavaseparado, e o primeiro a possuir velocidades diferentes no barramento externo e nointerior do chip.

O 486 teve problemas com motherboards a funcionar a mais de 33-40 Mhz, e versõesmais recentes do 486 foram do tipo DX2 e DX4, em que a velocidade interna doporcessador era dupla ou tripla da velocidade do barramento externo, estando estelimitado a 33Mhz ou 40Mhz no máximo. Assim um 486DX2 a 66Mhz possui umbarramento externo que funciona a 33Mhz, tal como um 486DX4 a 100 MHz, que narealidade se deveria chamar �DX3�.

O processador Pentium

O processador Pentium é o primeiro processador superescalar da família x86,possuindo dois pipelines de cinco andares, cada um com a sua unidade de execução deinteiros, contra o único pipeline existente no 486. Além disso, a cache única existenteno 486 deu lugar a duas caches de 8kb, uma para instruções e outra para dados. Paraoptimizar o mecanismo de �branch prediction�, o Pentium usa quatro estadosdiferentes para descrever o comportamento dos saltos condicionais. Cada vez que umsalto particular é ou não efectuado, o seu estado é actualizado de modo a que suba oudesça na escala que mede a probabilidade dos saltos serem efectuados ou não.

Os barramentos externos do Pentium funcionam a 66Mhz, e o barramento de dadostem 64 bits de largura, o que vem trazer um grande aumento de performancerelativamente aos 32 bits do 486 a 33Mhz.

O Pentium Pro

O Pentium Pro (nome de código P6) é o primeiro processador da família x86 a possuirexecução de instruções fora da ordem, �register renaming�, �descodiÞcação� deinstruções CISC para várias �RISC�, um pipeline de doze andares e seis unidades deexecução diferentes. Estas características, permitem que o Pentium Pro tenha umaperformance maior do que o Pentium, mas esta performance apenas se nota seestivermos a executar código de 32 bits. Em código de 16 bits o Pentium Pro chega a sermais lento que o Pentium nalguns casos. Um factor que contribuiu para a fracapenetração no mercado do Pentium Pro foi o seu preço elevado. Como o Pentium Pro éconstítuído por uma embalagem de circuito integrado que possui no seu interior doischips, sendo um o CPU e outro uma memória de cache com 256 a 1024kb, a sua produçãorevelou-se difícil e pouco económica. Note-se que o CPU possui duas caches no própriochip, de 8kb para instruções e dados. A vantagem da cache integrada, que funciona àmesma velocidade do processador manifesta-se apenas em servidores. Outra dasvantagens do Pentium Pro manifesta-se na sua fácil interligação em sistemasmultiprocessador, que permite fazer fácilmente sistemas que tenham até quatroprocessadores sem lógica adicional.

O Pentium MMX

O processador Pentium MMX tem um conjunto de instruções novas do tipo SIMD(Single Instruction Multiple Data) que permitem usar os registos de vírgula ßutuantepara fazer operações com 64 bits ao mesmo tempo, mas considerando os 64 bits como 2números de 32 bits, ou 4 números de 16 bits, ou ainda como 8 números de 8 bits. Estapossibilidade, aliada à aritmética com saturação, permite o tratamento rápido de

Departamento de Engenharia Informática - ISEP - IPP

33

Page 34: Arquitectura de Computadores - ipp.pt

Apontamentos sobre Arquitectura de Computadores - Versão Alpha

certo tipo de dados, especialmente em aplicações multimédia. No entanto, deve-seter o cuidado de guardar os registos de vírgula ßutante, antes de usar as instruçõesMMX. Na prática o Pentium MMX permite uma maior performance mesmo nosprogramas que não usam instruções MMX, uma vez que possui caches de 16kb+16kbcontra os 8kb+8kb do Pentium normal.

O Pentium II

O Pentium II é básicamente um Pentium Pro (P6) mas com algumas diferenças deembalagem e de instruções. É vendido na forma de um circuito impresso que serve desuporte ao processador, e às memórias da cache de nível 2. Isto permite reduzir oscustos por um lado, mas implica que a cache de nível dois funciona a uma velocidadeinferior à do processador. Assim o processador passa a ser um �cartucho� que encaixano motherboard. As instruções MMX que não eram aceite pelo Pentium Pro passam aser aceites pelo Pentium II. No entanto, apenas se podem construir fácilmentesistemas com um máximo de dois processadores, não existindo suporte para ainterligação de mais processadores. A grande vantagem do Pentium II está naexistência de processadores a velocidades de clock mais elevadas do que os 200Mhzmáximos do Pentium Pro.

A evolução do Pentium II

As primeiras versões do PII possuíam um barramento a funcionar a 66Mhz, enquantoque nas últimas versões a velocidade do barramento é de 100Mhz. Para substituir oPPro foram realizadas versões chamadas Xeon que possuem um suporte adequado parsistemas multiprocessador e uma cache que funciona a uma velocidade igual à doprocessador. Estes processadores possuem um tamanho duplo do PII, encaixam num�slot� diferente, têm uma dissipação de calor maior, e um preço ainda maior. OPentium III é básicamente um PII realizado num processo de fabrico de semicondutoresmais avançado, com uma velocidade de clock maior, e com a adição de instruções quea Intel designou por SSE (Streaming SIMD Extensions). Estas instruções permitemfazer contas em vírgula ßutuante de uma forma mais rápida, quando estivermos atrabalhar com matrizes e vectores. Já sairam versões Xeon do PIII e está previsto oaparecimento de versões com o barramento a 133Mhz.

O Celeron

O Processador Celeron é básicamente, um PII de baixo custo, sem cache externa, seminvólucro de plástico e sem suporte para ligação a outro processador. No entantodevido ao seu pouco sucesso inicial, a Intel lançou versões com 128kb de cache internaao processador. Como esta cache funciona à velocidade do processador enquanto os512kb típicos de cache dos PII funcionam a metade da velocidade do processador,nalgumas aplicações alguns Celeron são mais rápidos do que um PII à mesmavelocidade de clock.

Departamento de Engenharia Informática - ISEP - IPP

34