Sei sulla pagina 1di 130

MDULO IV ARQUITETURA DE COMPUTADORES II

Andr Macdo Santana Vinicius Ponte Machado

APRESENTAO

Muita gente ainda desconhece a composio e organizao dos componentes que integram um instrumento vital para o seu trabalho: o computador. Tal desconhecimento relacionado, de certa forma, com as inovaes tecnolgicas que ocorrem quase que diariamente. Conhecer a organizao e o funcionamento dos principias componentes desta mquina permitir a voc saber se adquiriu ou indicou o computador mais adequado determinada funo. Com o intuito de permitir ao leitor conhecer melhor a Arquitetura de Computadores foi desenvolvido este material. O objetivo desta apostila proporcionar um entendimento da Arquitetura de Computadores, em especial Processadores e Sistemas de Memria. O texto foi escrito de forma simples e objetiva e cada captulo acompanhado de embasamento terico-prtico, bem como de exerccios. A bibliografia e a webliografia ao fim das notas so mais do que suficiente para que o leitor se aprofunde na teoria apresentada em cada unidade. Na Unidade I so apresentados os conceitos relacionados a Organizao de Computadores. Nela, descrevemos o funcionamento bsico de um computador bem como seus principais componentes. A Unidade II trata dos Processadores e contm um Captulo relacioando a pipelines e outro comparando as arquiteturas RISC e CISC. Por fim, a Unidade III traz os Sitemas de Memra com explicaes sobre tecnologias, memria cache e memria virtual.

Boa Leitura !! Andr Macdo Vincius Machado

SUMRIO GERAL (02 pginas como o solicitado) UNIDADE I ORGANIZAO DE COMPUTADORES 1. ARQUITETURA DE COMPUTADORES 1.1. Introduo 1.2. Programas 1.3. Funcionamento Bsico 1.4. Barramento 1.5. Processador 1.6. Memria 1.7. Exerccios 2. WEBLIOGRAFIA 3. REFERNCIAS BIBLIOGRFICAS UNIDADE II PROCESSADORES

1. PROJETO DE PROCESSADORES 1.1. Introduo 1.2. Componentes 1.3. Funcionalidades 1.4. Ciclo de Instruo e Microprogramao 1.5. Medidas de Desempenho 1.6. Mais de uma Instruo por Ciclo 1.7. Exerccios 2. PIPELINES E MQUINAS SUPERESCALARES 2.1. Introduo 2.2. Durao de Ciclos 2.3. Latncia 2.4. Bolhas 2.5. Previso de Desvios 2.6.Processamento de Excees 2.7. Bolhas Causadas por Dependncia 2.8. Medidas de Desempenho 2.9. Mquinas Superpipeline e Superescalares 2.10. Processadores Superescalares 2.11. Exerccios 3. ARQUITETURA DE COMPUTADORES 3.1. Introduo 3.2. CISC 3.3. RISC 3.4. RISC vs CISC 3.5. Exerccios 4. WEBLIOGRAFIA 5. REFERNCIAS BIBLIOGRFICAS

UNIDADE III SISTEMAS DE MEMRIA

1. MEMRIA 1.1. Introduo 1.2. Conceitos Bsicos 1.3. Endereos de Memria 1.4. Ordenao dos Bytes 1.5. Cdigos com Correo de Erros 1.6. Hierarquia de Memria 1.7. Propriedades de uma Hierarquia 1.8. Tecnologia de Memrias 1.9. Organizao dos Chips de Memria 1.10. Exerccios 2. MEMRIA CACHE 2.1. Introduo 2.2. Conceitos Bsicos 2.3. Associatividade 2.4. Polticas de Substituio 2.5. Polticas de Atualizao 2.6.Caches com Vrios Nveis 2.7. Exerccios 3. MEMRIA VIRTUAL 3.1. Introduo 3.2. Traduo de Endereos 3.3. Swapping 3.4. Tabela de Pginas 3.5. TLBs 3.6. Proteo 3.7. Exerccios 4. WEBLIOGRAFIA 5. REFERNCIAS BIBLIOGRFICAS

UNIDADE I ORGANIZAO DE COMPUTADORES

Resumo O alto nvel de popularidade atingido pelos computadores nos ltimos anos permitiu tambm quebrar uma srie de barreiras, particularmente no que diz respeito terminologia associada. Atualmente, expresses como bits, bytes, hard disk, RAM, e outras, deixaram de fazer parte vocabulrio tcnico dos especialistas para compor aquele de grande parte dos usurios destas mquinas. Entretanto, os aspectos bsicos de funcionamento de um computador ainda so reservados aos profissionais da rea e devem assim permanecer indefinidamente. Nesta Unidade examinaremos, a nvel de introduo, alguns aspectos importantes dos componentes e do funcionamento de computadores, sendo que mais detalhes sero apresentados ao longo deste Curso. O texto desta Unidade influenciado fortemente pelo livro Arquitetura de Computadores de Nicholas Carter por ser um exemplar de fcil leitura e com uma vasta quantidade exerccios e pelas notas de aula, muito bem elaboradas, do Professor Marcelo Rebonatto. O Captulo acompanhado de exerccios, sem a soluo, preferimos deixar o prazer desta tarefa ao leitor. A bibliografia e a webliografia ao fim das notas so mais do que suficiente para adquirir um conhecimento razovel sobre a organizao de computadores. Ao trmino da leitura desta Unidade, o estudante dever: a) Compreender o funcionamento bsico de um computador; b) Entender o funcionamnto de programas, e c) Ser capaz de identificar os componentes principais de um computador.

1. ARQUITETURA DE COMPUTADORES

1.1. Introduo Numa viso externa de grande parte dos usurios, um computador composto de CPU, teclado, vdeo e mouse, como ilustrado pela figura 1.1. Esta a viso da maior parte da populao que tenha algum tipo de interao com o computador, principalmente porque estes so os elementos de um microcomputador que se deve que transportar, desconectando-os e reconectando-os para fazer o computador voltar a funcionar.

Figura 1.1: Viso externa de um computador.

Embora continuar a ter este tipo de viso dos componentes de um computador no vai afetar profundamente a vida e modo de utilizao destas mquinas pela maior parte da populao, lgico que esta uma viso extremamente superficial at para alguns usurios. Para estudar organizao de computadores alguns conceitos bsicos devem ser assimilados/revisados. Estes conceitos abrangem os componentes funcionais bsicos e as formas de representao/armazenamento de informaes, alm do funcionamento bsico dos sistemas de computao. A maioria dos sistemas de computadores pode ser dividido em trs subsistemas: o processador (Central Prossessing Unit - CPU), a memria e o subsistema de entrada e sada (E/S). O processador responsvel pela execuo dos programas, a memria

fornece espao de armazenamento para os programas e os dados aos quais ele referencia e o subsistema de E/S permite que o computador e a memria controlem os dispositivos que interagem com o mundo externo ou que armazenam dados, como o DVD-ROM, discos rgidos, placa de vdeo/monitor, etc. De forma bem resumida os componentes bsicos de um computador so: - Processador ou CPU: o componente vital do sistema de computao, responsvel pela realizao das operaes de processamento (os clculos matemticos com os dados, por exemplo) e pelo controle de quando e o que deve ser realizado, durante a execuo de um programa.

- Memria: o componente de um sistema de informao cuja funo armazenar as informaes que so, foram ou sero manipuladas pelo sistema. Os programas e os dados so armazenados na memria para execuo imediata (memria principal) ou para execuo ou uso posterior (memria secundria). Basicamente, h duas nicas aes que podem ser realizadas: a) a de guardar um elemento na memria, ento chamamos de armazenar e a operao associada a esta ao de escrita ou gravao (write) ou b) recuperao de um elemento da memria, ao de recuperar, e operao de leitura (read).

- Dispositivos de Entrada e Sada: serve basicamente para permitir que o sistema de computao se comunique com o mundo externo, realizando ainda, a interligao, a converso das linguagens do sistema para a linguagem do meio externo e viceversa. Os seres humanos entendem smbolos como A, b, *, ?, etc. e o computador entende sinais eltricos que podem assumir um valor de +3 Volts para representar 1 e ou outro valor, 0 Volts para representar 0. O teclado (dispositivo de ENTRADA) interliga o usurio e o computador, por exemplo, quando pressionamos a tecla A, os circuitos eletrnicos existentes no teclado convertem a presso mecnica em um grupo de sinais eltricos, alguns com voltagem alta (bit 1) e outras com voltagem baixa (bit 0), que corresponde, para o computador, ao caractere A. Os dispositivos de SADA operam de modo semelhante, porm em sentido inverso, do computador para o mundo exterior, convertendo os sinais eltricos em smbolos conhecidos por ns.

Alm dos trs itens relacionados anteriormente, na maioria dos sistemas o processador tem um nico barramento de dados que conectado ao mdulo comutador embora alguns processadores integram diretamente o mdulo de comutao no mesmo circuito integrado que o processador de modo a reduzir o nmero de chips necessrios para construir o sistema, bem como o seu custo. O comutador se comunica com a memria atravs de um barramento de memria, um conjunto dedicado de linhas que transfere dados entre estes dois sistemas. Um barramento de E/S distinto conecta o comutador com os dispositivos de E/S. Normalmente so utilizados barramentos separados porque o sistema de E/S geralmente projetado de forma a ser o mais flexvel possvel para suportar diversos tipos de dispositivos de E/S e o de memria projetado para fornecer a maior largura de banda possvel entre o processador e o sistema de memria. A figura 1.2 apresenta a organizao bsica de um computador.

Figura 1.2: Organizao bsica de computadores Figura adaptada de [Carter, N.] 1.2. Programas Programas so seqncias de instrues que dizem ao computador o que fazer, embora a viso que o computador tenha das instrues que compem um dado programa seja muito diferente da viso de quem escreveu. Para o computador, um programa composto de uma seqncia de nmeros que representam operaes individuais. Estas operaes so conhecidas como instrues de mquina, ou apenas instrues, e o conjunto de operaes que um dado processador pode executar conhecido como conjunto de instrues. Praticamente todos os computadores em uso atualmente so computadores com memria de programa que representam os programas como nmeros que so armazenados no mesmo espao de endereamento que os dados. A abstrao de programas armazenados (representando instrues como nmeros armazenados na memria) foi um dos principais avanos na arquitetura dos primeiros computadores. Antes disso, muitos computadores eram programados pelo ajuste de interruptores ou refazendo a conexo das placas de circuito para definir o novo programa, o que exigia uma grande quantidade de tempo, alm de ser muito sujeito a erros. A abstrao de programas armazenados em memria fornece duas vantagens principais sobre as abordagens anteriores. Primeiro, ela permite que os programas sejam armazenados e carregados facilmente na mquina. Uma vez que o programa tenha sido desenvolvido e depurado, os nmeros que representam as suas instrues podem ser escritos em um dispositivo de armazenamento, permitindo que o programa seja carregado novamente para a memria em algum momento. Segundo, e talvez de modo ainda mais significativo, a abstrao de programas armazenados em memria permite que os programas tratem a si mesmo ou a quaisquer outros programas como se fossem dados.

Os programas que tratam outros programas como dados so muito comuns, e a maioria das ferramentas de desenvolvimento de programas caem dentro desta categoria. Estas ferramentas incluem os compiladores que convertem programas em linguagem de alto nvel, como C e JAVA, em linguagem de montagem ( assembly), os montadores que convertem instrues de linguagem de montagem em representaes numricas utilizadas pelo processador e os ligadores (linkers) que unem diversos programas em uma linguagem de mquina em um nico arquivo executvel. Tambm so includos nesta categoria os depuradores (debuggers), programas que apresentam o estado de outro programa medida que este executado, de modo a permitir que os programadores acompanhem o progresso de um programa e encontre os erros. Os primeiros computadores em linguagem de montagem eram programados em linguagem de mquina, a representao numrica das instrues utilizadas internamente pelo processador. Para escrever um programa, o programador determinava a seqncia de instrues de mquinas necessrias para gerar o resultado correto e dava entrada nos nmeros que representavam no computador estas instrues. O primeiro passo para simplificar o desenvolvimento de programas veio quando foram desenvolvidos os montadores, permitindo que os programadores codificassem em linguagem de montagem. Na linguagem de montagem, cada instruo de mquina tem uma representao em texto (como ADD, SUB, ou LOAD) que representa o que ela faz e os programas eram escritos utilizando estas instrues. Uma vez que o programa tivesse escrito, o programador executava o montador para converter o programa em linguagem de montagem para linguagem de mquina, o qual podia ser executado no computador. As linhas a seguir mostram um exemplo de uma instruo em linguagem de montagem e a instruo em linguagem de mquina gerada a partir dela.

Linguagem de montagem: Linguagem de mquina:

ADD,r1,r2,r3 0x04010203

Utilizar linguagem de montagem tornou a tarefa de programao muito mais fcil, ao permitir que os programadores utilizassem um formato de instrues que era mais fcil de ser entendida por humanos. A programao ainda era extremamente tediosa porque para executar operaes mais complexas era necessrio utilizar vrias instrues; alm disso, as instrues disponveis para os programadores diferiam de mquina para mquina. Ou seja, se um programador quisesse executar um programa em um tipo de computador diferente, o programa tinha que ser completamente reescrito na nova linguagem de montagem desse computador.

As linguagens de alto nvel foram desenvolvidas para resolver este problema uma vez que permitem que os programas sejam escritos em muito menos instrues que as linguagens de montagem. Outra vantagem de escrever programas em linguagem de alto nvel que elas so muito mais portveis do que programas escritos em linguagem de mquina. Programas de alto nvel podem ser convertidos para uso em diferentes computadores pela re-compilao do programa, utilizando-se o compilador adequado ao novo computador. O problema com as linguagens de alto nvel que os computadores no podem executar diretamente instrues em linguagem de alto nvel. Assim, um programa chamado compilador utilizado para converter o programa em seu equivalente em linguagem de montagem, que , ento, convertida em linguagem de mquina pelo montador. A figura 1.3 ilustra o desenvolvimento e execuo de um programa em linguagem de alto nvel.

Figura 1.3: Desenvolvimento de um programa. Figura adaptada de [Carter, N.] Uma alternativa para a compilao de um programa utilizar um interpretador para executar a verso do programa em linguagem de alto nvel. Os interpretadores so programas que tomam programas em linguagem de alto nvel como entradas e executam os passos definidos para cada instruo do programa em linguagem de alto nvel produzindo o mesmo resultado que compilar o programa e ento executar a verso compilada. Os programas interpretados tendem a ser muito mias lentos do que programas compilados o que leva os interpretadores serem menos utilizados que os compiladores.

1.3. Funcionamento Bsico Os computadores, no seu funcionamento bsico, executam quatro funes distintas sendo elas: a) Entrada; b) Processamento; c) Armazenamento/recuperao de dados; d) Sada. A figura 1.4 ilustra o funcionamento bsico dos sistemas de computao.

Figura 1.4: Componentes bsicos de um computador. Figura adaptada de [Rebonatto, M.]

Para que um computador trabalhe necessria insero de informaes (entrada). Seguindo as instrues fornecidas pelos programas, o computador processa os dados oriundos da entrada (processamento) armazenando-os logo em seguida para posterior utilizao. As informaes produzidas ficam disponveis para utilizao (sada) e a menos que se deseje as informar e produzir novamente, elas devem ser armazenadas em um dispositivo de armazenamento estvel. O esquema geral da figura 1.4 seguido por praticamente todos os computadores, sendo que os dados so produzidos atravs de instrues durante a etapa de processamento, realizada pela CPU. Cada processador tem um conjunto nico de instrues para processar os dados, porm geralmente utilizam a mesma forma de composio das instrues. As linhas a seguir mostram a forma das instrues comumente utilizada pelos processadores - OPERAO+ OPERANDOS = INSTRUO A operao especifica a funo a ser desempenhada, por exemplo, soma, armazene ou desvie, entre outras. Os operandos fornecem os dados a serem utilizados na operao ou ainda a forma de alcanar a posio destes dados na memria. Todas as informaes manipuladas pelos computadores devem ser entendidas pela mquina. Como o computador um dispositivo eletrnico, ele armazena e movimenta as informaes de forma eletrnica, podendo utilizar um valor de corrente. Para que a mquina representasse todos os smbolos da linguagem humana eletricamente seriam necessrias mais de 100 diferentes voltagens (corrente). Uma mquina deste tipo alm de ser de custo elevado, seria difcil de construir e de baixa confiabilidade. Desta forma, optou-se por construir mquinas binrias, capazes de entender apenas dois valores diferentes.

Os computadores digitais so totalmente binrios, isto , trabalham apenas com dois valores, tornando assim simples o emprego da lgica booleana (Sim/No, Verdadeiro/ Falso, Aberto/Fechado, etc.) tanto na construo de componentes quanto como base para a escrita de programas (programao). Convencionou-se chamar os dois nveis eltricos de 0 e 1 sendo que cada algarismo da representao numrica binria denominado de bit, correspondente a abreviatura de binary digit (dgito binrio). Obviamente com apenas 1 bit isolado pode-se representar muito pouca coisa (apenas 2 valores), desta forma, usam-se agrupamentos ordenados de bits para a representao de informaes teis. A menor informao inteligvel aos seres humanos o caractere, como por exemplo, o nmero 5 ou a letra a. Existem diversos agrupamentos de bits para representar caracteres, sendo que o mais popularmente utilizado chamado de byte. Um byte uma seqncia ordenada de 8 bits, sendo cada bit tratado de forma independente dos demais e com um valor fixo de acordo com sua posio. Qualquer seqncia binria pode ser convertida para um nmero na base decimal, sendo utilizado este valor para encontrar o caractere correspondente, utilizando uma tabela de caracteres. As memrias geralmente armazenam e recuperam informaes byte a byte, ou ainda em mltiplos de bytes. A representao binria de valores tambm utilizada para a representao de nmeros dentro dos computadores. A metodologia a mesma, sendo convertido o valor em base decimal para o correspondente em base binria. Por exemplo, o nmero 2310 pode ser armazenado no seguinte byte 00010111. Os dispositivos de memria atuais utilizam agrupamentos de bytes para representar sua capacidade de armazenamento. Uma vez que tais agrupamentos so oriundos de uma base binria o fator de multiplicao utilizado 1024 (210). Cada faixa possui tambm uma letra para abreviar a categoria. A Tabela 1 demonstra alguns agrupamentos de bits e bytes utilizados. Tabela 01: Agrupamento de bits e bytes. Agrupamento
Byte kilo Mega Giga Tera Penta

Smbolo
B K M G T P

Representa
8 bits 1024 Bbytes 1024 KBytes 1024 MBytes 1024 GBytes 1024 TBytes

Estes

agrupamentos

so

utilizados

na

descrio

das

capacidades

de

armazenamento dos computadores hoje em dia, sendo que esta capacidade referenciada por um nmero e um smbolo correspondente. Por exemplo, 8 GB de memria. Outro conceito importante muito utilizado na descrio do mecanismo de transferncia de informaes entre a CPU e a memria principal o conceito de palavra. A palavra utilizada para indicar a unidade de transferncia e processamento de um computador. As palavras so mltiplos de 1 byte, sendo que os microprocessadores geralmente utilizam 32bits 4 bytes como tamanho da palavra. Porm, j existem projetos e microprocessadores que utilizam palavras de 64 bits. Em outras palavras, os conceitos de bit, caractere, byte e palavra podem ser resumidos assim:

- Bit: a menor unidade de informao armazenvel em um computador. Bit a contrao das palavras inglesas Binary Digit. O bit pode ter, ento, somente dois valores: 0 e 1. Evidentemente, com possibilidades to limitadas, o bit pouco pode representar isoladamente; por essa razo, as informaes manipuladas por um computador so codificadas em grupos ordenados de bits, de modo a terem um significado til.

- Caractere: o menor grupo de bits representando uma informao til e inteligvel para o ser humano. Qualquer caractere a ser armazenado em um sistema de computao convertido em um conjunto de bits previamente definidos para o referido sistema (chama-se cdigo de representao de caractere). Cada sistema poder definir como (quantos bits e como se organizam) cada conjunto de bits ir representar um determinado caractere.

- Byte: o grupo de 8 bits, tratados de forma individual, como unidade de armazenamento e transferncia. Como os principais cdigos de representao de caracteres utilizam 8 bits por caractere, os conceitos de byte e caractere tornam-se semelhantes e as palavras, quase sinnimas.

- Palavra: um conjunto de bits que representam uma informao til, mas estaria associada ao tipo de interao entre a memria principal e a CPU, que individual, informao por informao, ou seja, a CPU processa informao por informao, armazena e recupera nmero a nmero (cada uma estaria associada a uma palavra).

1.4. Barramento Os processadores so circuitos integrados passveis de serem programados para executar uma tarefa predefinida, basicamente manipulando e processando dados. A CPU manipula dados de acordo com programas, que devero para isso, estar na memria. Um programa pode ordenar que dados sejam armazenados de volta na memria ou recuperar programas/dados armazenados em sistemas de memria de massa (disquetes, HD, etc.). Os caminhos por onde estas informaes circulam em um computador genericamente conhecido como barramento. Em outras palavras, os barramentos nada mais so do que um conjunto de condutores (fios, trilhas) por onde passam os bits. Possuem duas principais caractersticas: A largura do barramento: nmero de bits transportados numa operao; A freqncia de operao: velocidade com que os dados so transmitidos. A figura 1.5 ilustra a funcionalidade dos barramentos.

Figura 1.5: Barramentos de um computador. Figura adaptada de [Rebonatto, M.]

Existem diversos barramentos nos computadores atuais, sendo os principais o barramento local e barramento de expanso. O barramento local vital para o funcionamento do computador, pois interliga o processador a memria. Por outro lado, o barramento de expanso interliga os demais componentes, tais como, perifricos de entrada, de sada e memria de armazenamento estvel (secundria). O barramento local, tambm conhecido como interface CPU/Memria Principal de vital importncia para o funcionamento do computador, uma vez que os blocos que formam a CPU no podem manipular diretamente os dados armazenados na memria, pois somente operam sobre valores mantidos em registradores. Desta forma, como as instrues e os dados a serem manipulados esto na memria, para que uma instruo seja executada, a memria deve ser acessada no mnimo uma vez.

O barramento local dividido em outros trs: Barramento de Dados, Barramento de Endereos e Barramento de Controle. A interface CPU/MP se completa com os registradores auxiliares no acesso a memria. A figura 1.6 ilustra o esquema da interface CPU/MP.

Figura 1.6: Barramento local. Figura adaptada de [Rebonatto, M.]

- Registrador de Endereo da Memria (REM): Armazena o endereo da clula onde deve ser feita a prxima operao de leitura ou escrita na memria; - Barramento de Endereos: Liga o REM memria para transferncia do endereo da clula a ser lida ou escrita. Sua largura em bits deve ser igual ao REM; - Registrador de Dados da Memria (RDM): Armazena os dados que esto sendo transferidos de/para a memria; - Barramento de Dados: Liga o RDM memria, possuindo a mesma largura deste. o caminho por onde feita a transferncia do contedo; - Barramento de Controle: Interliga a CPU memria para enviar os comandos de READ e WRITE e receber WAIT.

Para que uma simples placa de vdeo ou um H.D. possa ser utilizado em qualquer computador, independentemente do processador instalado, utiliza-se diversos modelos de barramentos de expanso. Os barramentos de expanso so disponibilizados na placa-me dos micros atravs de slots. Os slots nada mais so do que encaixes para que as conexes entre placas presentes no sistema computacional utilizem determinados padres de barramento. Na parte superior dos slots, encontram-se ranhuras para a conexo de placas de circuito que funcionam com a placa-me. Sem as ranhuras, os micros ficariam limitados aos circuitos que estivessem permanentemente montados na placa-me. Vale ressaltar que junto com a evoluo dos computadores, o desempenho dos barramentos tambm evolui. Novos barramentos e/ou melhorias nos atuais esto sempre surgindo.

1.5. Processador O processador o componente vital de um sistema de computao, responsvel pela realizao das operaes de processamento (clculos matemticos, entre outros) e de controle durante a execuo de um programa. Como ilustrado na figura 1.7, os processadores so compostos por vrios blocos: unidades de execuo, banco de registradores e lgica de controle. As unidades de execuo contm o hardware que executa as instrues. Isto inclui o hardware que busca e decodifica as instrues, bem como as unidades lgico-aritmticas (ULAs) que executam os clculos. Muitos processadores possuem unidades de execuo diferentes para clculos com inteiros e com pontos flutuantes, porque necessrio um hardware muito diferente para estes dois tipos de dados. Alm disso, como veremos na prxima Unidade, os processadores modernos, para melhorar o desempenho, freqentemente utilizam vrias unidades de execuo para executar instrues em paralelo.

Figura 1.7: Diagrama em blocos de um processador. Figura adaptada de [Carter, N.]

O banco de registradores uma pequena rea de armazenamento para os dados que o processador est usando. Os valores armazenados no banco de registradores podem ser acessados mais rapidamente que os dados armazenados no sistema de memria, sendo que os bancos de registradores geralmente suportam vrios acessos simultneos. Isto permite que uma operao, como adio, leia todas suas entradas do banco de registradores ao mesmo tempo, ao invs de ter que l-las uma por vez.

A lgica de controle controla o processador determinando quando as instrues podem ser executadas e quais operaes so necessrias para executar cada instruo. Nos primeiros processadores, ela era uma parte muito pequena do hardware do processador, quando comparada com as ULAs e o banco de registradores, mas a quantidade de lgica de controle necessria cresceu significativamente medida que os processadores tornaram-se mais complexos, fazendo com que seja uma das partes mais difceis de ser projetada.

Em resumo temos:

- Unidade Lgica e Aritmtica ou ALU (Aritmethic and Logic Unit): que assume todas as tarefas relacionadas s operaes lgicas (ou, e, negao, etc.) e aritmticas (adies, subtraes, etc.) a serem realizadas no contexto de uma tarefa realizada atravs dos computadores; as primeiras ULAs eram de concepo bastante simples, realizando um conjunto relativamente modesto de operao, com operandos de pequena dimenso (no que diz respeito ao tamanho da palavra). Com o passar do tempo, eles elementos foram tornando-se sofisticados para suportar operaes mais complexas a maiores tamanhos de palavras de dados para permitir o grande potencial de clculo oferecido pelos atuais microprocessadores;

- Registradores: que, como o nome indica, abriga o conjunto de registros dos microprocessadores, essenciais para a realizao das instrues dos programas do computador; de forma mais superficial, pode-se subdividir o conjunto de registros de um microprocessador em dois grupos: os registros de uso geral, utilizados para armazenamento de operandos ou resultados de operaes executadas pelo microprocessador, os registros de controle, utilizados como suporte execuo dos programas do computador;

- Unidade de Controle: a responsvel de tarefas nobres como a interpretao das instrues de mquina a ser executada pelo computador, a sincronizao destas instrues, o atendimento a eventos de hardware, etc. Esta unidade assume toda a tarefa de controle das aes a serem realizadas pelo computador, comandando todos os demais componentes de sua arquitetura, garantindo a correta execuo dos programas e a utilizao dos dados corretos nas operaes que as manipulam. a unidade de controle quem gerencia todos os eventos associados operao do computador, particularmente as chamadas interrupes, to utilizadas nos sistemas h muito tempo.

Execuo de um Programa Como comentando anteriormente, um programa para ser efetivamente executado por um processador, deve ser constitudo de uma srie de instrues (em linguagem de mquina). Estas instrues devem estar armazenadas em posies sucessivas da memria principal. A execuo seqencial, ou seja, se a instruo executada est na posio x, a prxima instruo a ser executada dever estar na posio x+1. A seqncia de funcionamento de uma CPU conhecida como ciclo Busca Decodificao Execuo de Instrues. A figura 1.8 ilustra este ciclo.

Figura 1.8: Ciclo bsico de instruo. Figura adaptada de [Rebonatto, M.]

- Um elemento dentro do processador, denominado contador de instrues (Program Counter-PC), contm a posio da prxima instruo a ser executada. Quando uma seqncia de execuo de instrues tm inicio, a instruo cujo endereo est no contador de instrues trazida da memria para uma rea chamada registrador de instrues (RI). Este processo conhecido como busca da instruo. - A instruo interpretada por circuitos de decodificao que fazem com que sinais eletrnicos sejam gerados no processador como resultado do valor do campo de operao, isto , decodificam a informao correspondente operao a ser realizada. - Esses sinais resultam na execuo da instruo, isto , aplicao da funo contida pela operao sobre os operandos. Quando a execuo de uma instruo terminada, o contador de instrues atualizado para o endereo da memria da prxima instruo (x + 1).

A seqncia de instrues pode mudar como resultado de uma instruo que direciona um desvio (tambm chamado de salto, jump). Instrues deste tipo contm no campo operandos o endereo da prxima instruo a ser executada. Elas causam mudanas no fluxo do programa como resultado das condies dos dados. O desvio condicional representado por uma instruo de alto nvel IF traduz-se em algum tipo de instruo de desvio. As atividades realizadas pela CPU podem ser divididas em duas grandes categorias funcionais: funes de processamento e funes de controle. A funo de processamento se encarrega de realizar as atividades relacionadas com a efetiva execuo de uma operao, ou seja, processar (executar a instruo) de instrues. O principal componente da CPU que realiza a funo de processamento a ULA (unidade lgica e aritmtica), sendo que ao dela complementada pelo uso de registradores de processamento. A funo de controle exercida pelos componentes da CPU que se encarregam de atividades de busca, interpretao e controle da execuo das instrues, bem como do controle da ao dos demais componentes do sistema de computao (memria, entrada/sada). O principal componente da CPU responsvel pela funo de controle a UC (unidade de controle).

1.6. Memria Uma das partes mais importante do computador a memria. O processador apenas recebe dados e os processa segundo alguma pr-programao, logo aps devolvendo-os, no importando de onde vem e para onde vo. Os programas a serem executados e os dados a serem processados (inclusive os que j o foram) ficam na memria, visto que a rea para armazenamento de dados do processador pequena. Todo computador dotado de uma quantidade (que pode variar de mquina para mquina) de memria a qual se constitui de um conjunto de circuitos capazes de armazenar (por perodos mais curtos ou mais longos de tempo) as unidades de dados e os programas a serem executados pela mquina. Nos computadores de uso geral, possvel encontrar diferentes denominaes para as diferentes categorias de memria que neles so encontradas: - memria principal: ou memria de trabalho, onde normalmente devem estar armazenados os programas e dados a serem manipulados pelo processador; - memria secundria: que permitem armazenar uma maior quantidade de dados e instrues por um perodo de tempo mais longo; os discos rgidos so exemplos mais imediatos de memria secundria de um computador, mas podem ser citados outros dispositivos menos recentes como as unidades de fita magntica e os cartes perfurados introduzidos por Hollerith;

- memria cache: conceito introduzido mais recentemente e que se constitui de uma pequena poro de memria com curto tempo de resposta, normalmente integrada aos processadores e que permite incrementar o desempenho durante a realizao de um programa. H basicamente dois tipos de memria: - ROM (Read-Only Memory): S permitem a leitura de dados e so lentas; em compensao no perdem seu contedo quando desligadas; - RAM (Random Access Memory): So rpidas, permitem leitura e escrita, porm, seu contedo perdido quando so desligadas.

Em gral a ROM utilizada para manter um programa que executado pelo computador cada vez que ele ligado ou reiniciado. Este programa chamado de bootstramp e instrui o computador a carregar o SO. Dentro da ROM existem basicamente 3 programas: BIOS, POST e SETUP. comum acontecer confuso em relao aos nomes, sendo usado atualmente o termo BIOS como algo genrico. Para acessar o programa de configurao, basta acessar um conjunto de teclas durante o POST (geralmente na contagem da memria). Na maioria das mquinas, basta apertar a tecla DEL ou Delete, porm, esse procedimento pode variar de acordo com o fabricante. Quando o computador ligado, o POST (Power On Self Test) entra em ao, identificando a configurao instalada, inicializando os circuitos da placa-me (chipset) e vdeo, e executando teste da memria e teclado. Aps, ele carrega o SO de algum disco para a memria RAM, entregando o controle da mquina para o SO. Na RAM, ficam armazenados o SO, programas e dados que estejam em processamento. O processador acessa a RAM praticamente o tempo todo. Atualmente a memria RAM, formada por circuitos de memria dinmica (DRAM - Dynamic RAM), mais lenta que o processador, ocasionando wait states, at que a memria possa entregar ou receber dados, diminuindo assim o desempenho do micro. Memrias mais rpidas amenizam este problema, assim como a utilizao de cache de memria. A cache uma memria esttica (SRAM - Static RAM) de alto desempenho, utilizada para intermediar a comunicao com o processador. Na maioria das vezes o processador no acessa o contedo da RAM, mas sim uma cpia que fica na cache. A cache utilizada desde o 386DX, e a partir dos 486, todos os processadores passaram a conter uma quantidade de memria esttica, conhecida como L1 ou interna. A cache fora do processador conhecida como L2 ou externa. Hoje, existem processadores com mais nveis de cache. Uma ressalva que os processadores a partir do Pentium II possuem a L2 dentro da caixa que envolve o processador, no fazendo mais sentido as denominaes interna e externa.

A DRAM formada por capacitores, que so fcies de construir, baratos e pode-se aglomerar muitas clulas de memria em pequeno espao fsico. O problema que aps algum tempo, eles descarregam, dessa forma dever haver um perodo de recarga, chamado refresh. Durante este perodo, a memria geralmente no pode ser acessada, limitando assim com uma imposio fsica sua velocidade. Por outro lado, a SRAM formada por caros circuitos digitais chamados flip-flops, que armazenam dados sem a necessidade de ciclos para refresh. Um flip-flop, por ser um circuito completo, maior que um capacitor, conseqentemente, onde cabem muitos capacitores tm-se somente alguns flip-flops. Devido ao preo, tamanho e consumo, no possvel que um micro tenha toda sua RAM de memria esttica, ento a partir dos 386, utiliza-se um modelo hbrido com SRAM como cache e DRAM como RAM propriamente dita.

Operaes no Sistema de Memria Um modelo de sistema de memria simplificado pode ser dado por suportar somente duas operaes: carga e armazenamento. As operaes de armazenamento ocupam dois operandos: um valor a ser armazenado e o endereo onde o valor deve ser armazenado. Eles colocam o valor especificado na posio de memria especificada pelo endereo. Operao de carga tm um operando que especifica um endereo e retornam o contedo dessa posio de memria para o seu destino. Utilizando este modelo pode-se imaginar a memria como funcionando como uma grande folha de papel pautado, onde cada linha na pgina representa um local de armazenamento para um byte. Para escrever(armazenar) na memria conta-se de cima para baixo na pgina at que se atinja a linha especificada pelo endereo, apaga-se o valo escrito naquela linha e escreve-se o novo valor. Para ler (carregar) um valor, conta-se de cima para baixo at que se atinja a linha especificada pelo endereo e l-se o valor escrito naquele endereo. A maioria dos computadores permite que mais de um byte de memria seja armazenando ou carregado por vez. Geralmente, uma operao de carga ou armazenamento opera sobre uma quantidade de dados igual largura de bits do sistema, e o endereo enviado ao sistema de memria especifica a posio do byte de dados de endereo mias baixo a ser carregado ou armazenado. Por exemplo, um sistema de 32 bits carrega ou armazena 32bits (4 bytes) de dados em cada operao, nos 4 bytes comeam o endereo da operao, de modo que uma carga a partir da localizao 424 retornaria uma quantidade de 32 bits contendo os bytes das localizaes 424, 425, 426 e 427. Para simplificar o projeto dos sistemas de memria, alguns computadores exigem que as cargas e armazenamentos sejam alinhados, significando que o endereo de uma referncia de memria precisa ser mltiplo do tamanho do dado que est sendo carregado ou armazenado, de modo que uma carga de 4 bytes precisa ter um endereo que seja um

mltiplo de 4, um armazenamento de 8 bytes precisa ter um endereo que seja mltiplo de 8, e assim por diante. Outros sistemas permitem cargas e armazenamentos desalinhados, mas demora mais tempo para completar tais operaes do que com cargas alinhadas. Uma questo adicional com carga e armazenamento de vrios bytes a ordem na qual eles so escritos na memria. H dois tipos de ordenao diferentes que so utilizados em computadores modernos: little endian e big endian. No sistema little endian o byte menos significativo (o valor menor) de uma palavra escrito no byte de endereo mais baixo, e os bytes so escritos na ordem crescente de significncia. No sistema big endian, a ordem inversa, o byte mais significativo escrito no byte de memria com o endereo mais baixo. As linhas abaixo mostram o exemplo de como os sistemas little endian e

big endian escreveriam uma palavra de 32 bits (4 bytes) no endereo 0x1000.


Palavra = 0x90abcdef Endereo = 0x1000 Little endian Big endian 0x1000 ef 90 0x1001 cd ab 0x1002 ab cd 0x1003 90 ef

Exemplo retirado de [Carter, N.]

O projeto de sistemas de memria tem um impacto enorme sobre o desempenho de sistemas de computadores e freqentemente o fator limitante para a rapidez de execuo de uma aplicao. Tanto a largura de banda (quantos dados podem ser carregados ou armazenados em um perodo de tempo) quanto a latncia (quanto tempo uma operao de memria em especial demora para ser completada) so importantes para o desempenho da aplicao. Outras questes importantes no projeto de sistemas de memria incluem a proteo (evitar que diferentes programas acessem dados uns dos outros) e como o sistema de memria interage com o sistema de E/S. Existem vrias tecnologias de construo de memria RAM: FPM (Fast Page Mode), EDO (Extended Data Output), BEDO (Burst Extended Data Output), SDRAM (Synchronous Dynamic RAM), PC-100, PC-133, DDR-SDRAM (Double Data Rate SDRAM), ESDRAM (Enhanced SDRAM), RDRAM (Rambus DRAM), SLDRAM (SyncLink DRAM), etc. Alm da tecnologia tambm existem vrios tipos de mdulos de memria. Como exemplo temos: SIPP (Single in Line Pin Package), SIMM30-(Single in Line Memory Module), SIMM-72 (Single in Line Memory Module), DIMM (Double in Line Memory Module), RIMM (Rambus In Line Memory Module), etc.

1.7. EXERCCIOS

1. Quais so os trs componentes bsicos de um sistema de computador? Faa um diagrama de blocos ilustrando os componentes bsicos e comente sobre as funcionalidades de cada um deles.

2. Qual a diferena entra linguagem de mquina e linguagem de montagem? Porque a linguagem de montagem considerada mais fcil para seres humanos programarem do que a linguagem de mquina?

3. Explique o processo de desenvolvimento e execuo de um programa em linguagem de alto nvel.

4. Explique as vantagens de utilizar um compilador em vez de um montador e diferencie compilador de interpretador.

6. Explique e mostre na forma de esquema grfico o funcionamento bsico dos sistemas de computador.

7. Para que servem barramentos nos computadores? Explique mostrando os dois principais tipos.

8. Qual a funo dos barramentos de dados, de endereo e de controle? 8 - Quais os componentes bsicos de um processador? Explique a funo de cada uma.

9 - Explique o ciclo bsico de execuo de um programa.

10 - Qual a diferena entre memria RAM e ROM?

11 - Explique a diferena entre as ordenaes big endian e little endian.

2. WEBLIOGRAFIA Universidade Aberta do Piau UAPI http://www.ufpi.br/uapi Universidade Aberta do Brasil- UAB http://www.uab.gov.br Secretaria de Educao a Distncia do MEC SEED http://www.seed.mec.gov.br Associao Brasileira de Educao a Distncia ABED http://www.abed.org.br Apostilas, Tutoriais e Documentos http://gabriel.sg.urcamp.tche.br/beraldo/arquitetura_2.htm Guia do Hardware http://www.guiadohardware.net Larcio Vasconcelos http://www.laercio.com.br Gabriel Torres http://www.gabrieltorres.com.br Csar Augusto M. Marcon http://www.inf.pucrs.br/~marcon/ Ivan L. M. Ricarte http://www.dca.fee.unicamp.br/~ricarte/ Marcelo Trindade Rebonatto http://vitoria.upf.tche.br/~rebonatto Fabian Vargas http://www.ee.pucrs.br/~vargas Eduardo Moresi http://www.intelingencia.blogspot.com

3 REFERNCIAS

CARTER, N. Arquitetura de computadores. Porto Alegre: Bookman, 2003. HEURING, V. P; MURDOCCA, M. J. Introduo arquitetura de computadores. Rio de Janeiro: Campus, 2002. MORIMOTO, C. E. Hardware: o guia definitivo. Porto Alegre: Sulina, 2007. MONTEIRO, M. A. Introduo a organizao de computadores. Rio de Janeiro: LTC, 2007. PARHAMI, B. Arquitetura de computadores: de microprocessadores a supercomputadores. So Paulo: McGraw- Hill do Brasil, 2008. PATTERSON, D. A ; HENNESSY, J. L. Arquitetura de computadores: uma abordagem quantitativa. Rio de Janeiro: Campus, 2003. PATTERSON, D. A ; HENNESSY, J. L. Organizao e projeto de computadores. Rio de Janeiro: Campus, 2005. RIBEIRO, C ; DELGADO, J. Arquitetura de computadores. Rio de Janeiro: LTC, 2009. STALLINGS, W. Arquitetura e organizao de computadores. Prentice Hall, 2008. So Paulo:

TANENBAUM, A. S. Organizao estruturada de computadores. Rio de Janeiro: Prentice Hall, 2007. TORRES, G. Hardware: curso completo. Rio de Janeiro: Axcel Books, 2001. WEBER, R. F. Fundamentos de arquitetura de computadores. Porto Alegre: Bookman, 2008.

UNIDADE II PROCESSADORES Resumo

Uma caracterstica extremamente fascinante nos processadores a sua capacidade de interpretar e executar instrues de programa. Na arquitetura de qualquer sistema computacional, o processador o elemento que define a potencialidade da mquina, a partir de sua velocidade de processamento, do tamanho de palavra que manipulada, da quantidade de memria interna (registradores) e do seu conjunto de instrues. A maior parte destes fatores est intimamente ligada forma como os diferentes componentes do microprocessador esto associados e como estes so controlados internamente. O contedo desta Unidade influenciado fortemente pelos textos de Nicholas Carter, Eduardo Moresi, Marcelo Rebonatto, Ivan Ricarte e Fabian Vargas. O Captulo acompanhado de exerccios, sem a soluo, preferimos deixar o prazer desta tarefa ao leitor. A bibliografia e a webliografia ao fim das notas so mais do que suficiente para adquirir um conhecimento razovel sobre a organizao de computadores. Ao trmino da leitura desta Unidade, o estudante dever: a) Entender a arquitetura de processadores, b) Compreender o funcionamento dos pipelines, e c) Ser capaz de diferenciar mquinas RISC de mquinas CISC.

1. PROJETO DE PROCESSADORES

1.1.Introduo A primeira caracterstica a considerar num computador sua Unidade Central de Processamento - UCP, que poder fornecer uma srie de indicaes sobre o equipamento. A UCP ou CPU (Central Processing Unit), tambm pode ser chamada de processador ou microprocessador, os quatro termos so equivalentes. Tudo o que acontece num computador provm da CPU, que gerncia todos os recursos disponveis no sistema. Seu funcionamento coordenado pelos programas, que indicam o que deve ser feito e quando. Basicamente, a CPU executa clculos muito simples como somas e comparaes entre nmeros, mas com uma caracterstica muito especial: uma velocidade extremamente elevada. A funo das CPUs sempre a mesma. O que as diferenciam sua estrutura interna e, o mais importante, o fato de cada uma ter seu conjunto de instrues prprio. Ou seja, um programa escrito para uma CPU dificilmente poder ser executado diretamente em outra esse um dos principais motivos da incompatibilidade entre os computadores. Os microprocessadores so geralmente circuitos integrados dispostos em pastilhas onde o nmero de pinos varia de 40 a 132. Como ilustrado na figura 1.1, os sinais associados a estes pinos permitiro ao microprocessador a troca de informao com o seu ambiente, ou seja, memria e circuitos de E/S.

Figura 1.1: Microprocessador. Figura adaptada de [Moresi, E.]

Uma anlise detalhada dos sinais disponveis nos pinos de um microprocessador permite conhecer os seus diferentes modos de funcionamento (lgico e eltrico) e as suas possibilidades em termos de interfaces. Os sinais externos dos computadores so organizados em trs grupos: os sinais de endereo, os sinais de dados e os sinais de controle. A cada um destes grupos associada uma linha de comunicao (ou um

barramento), respectivamente, o barramento de endereos, o barramento de dados e o barramento de controle. Estes barramentos permitiro conectar os pinos do

microprocessador aos pinos de mesma funo dos circuitos de memria ou de E/S. A figura 1.2 mostra, de forma bem simplificada, os barramentos em um microprocessador. Temos o chamado barramento de dados, atravs do qual trafegam os dados que so transmitidos ou recebidos pelo microprocessador. Os dados transmitidos podem ser enviados para a memria ou para um dispositivo de sada, como o vdeo. Os dados recebidos podem ser provenientes da memria, ou de um dispositivo de entrada, como o teclado. Cada uma das "perninhas" do microprocessador pode operar com um bit. No microprocessador da figura 1.2, temos um barramento de dados com 16 bits. Observe que as linhas desenhadas sobre o barramento de dados possuem duas setas, indicando que os bits podem trafegar em duas direes, saindo e entrando no microprocessador. Dizemos ento que o barramento de dados bidirecional.

Figura 1.2: Representao simplificada de um microprocessador. Figura adaptada de [Moresi, E.]

Um exemplo de funcionamento o carregamento de uma instruo. O microprocessador inicialmente carrega o endereo da instruo no barramento de endereos; em seguida, ele ativa um sinal no barramento de controle para especificar memria uma operao de leitura; em resposta, a memria vai colocar, no barramento de dados, a palavra representando a instruo requisitada e previne o microprocessador (com um sinal no barramento de controle); ao perceber o sinal de validao, o microprocessador l a palavra no barramento de dados e a armazena num de seus registros internos. Alm dos barramentos, a figura 1.2 mostra ainda dois sinais de controle que servem para definir se a operao a ser realizada uma leitura ou uma gravao, e se deve atuar sobre a memria ou sobre um dispositivo de E/S. So eles: - MIO: Este sinal indica se a operao diz respeito memria ou a E/S;

- RW: Este sinal indica se a operao uma leitura ou uma gravao; Atravs desses dois sinais, podem ser definidas 4 operaes bsicas: a) leitura da memria, b) escrita na memria, c) leitura de E/S (Ex: do teclado), d) escrita em E/S (Ex: no vdeo).

Outros exemplos de sinais do barramento de controle: - INT: Este sinal uma entrada que serve para que dispositivos externos possam interromper o microprocessador para que seja realizada uma tarefa que no pode esperar. Por exemplo, a interface de teclado interrompe o microprocessador para indicar que uma tecla foi pressionada. Esta tecla precisa ser lida, e seu cdigo deve ser armazenado na memria para processamento posterior. As interfaces de drives e do disco rgido interrompem o microprocessador para avisar o trmino de uma operao de leitura ou escrita. Vrios outros dispositivos tambm precisam gerar interrupes. Como existe apenas uma entrada INT, o microprocessador opera em conjunto com um chip chamado Controlador de Interrupes. Este chip encarregado de receber requisies de interrupo de vrios dispositivos e envi-las ao microprocessador, de forma ordenada, atravs do sinal INT.

- NMI: Este um sinal de interrupo especial para ser usado em emergncias. Significa Non Maskable Interrupt, ou Interrupo no mascarvel. Em outras palavras, esta interrupo deve ser atendida imediatamente. Ao contrrio do sinal INT, que pode ser ignorado pelo microprocessador durante pequenos intervalos de tempo (isto se chama "mascarar a interrupo"), o sinal NMI uma interrupo no mascarvel. Nos PCs, o NMI usado para informar erros de paridade na memria.

- INTA: Significa Interrupt Acknowledge, ou seja, reconhecimento de interrupo. Serve para o microprocessador indicar que aceitou uma interrupo, e que est aguardando que o dispositivo que gerou a interrupo identifique-se, para que seja realizado o atendimento adequado.

Existem ainda mais de uma dzia de sinais no barramento de controle. Seu estudo muito interessante para quem est preocupado em aprender detalhadamente como funciona um microprocessador e uma placa de CPU. Aqui no iremos abord-los. Nosso objetivo apenas fazer uma apresentao simplificada.

1.2.Componentes As funes de controle e processamento necessitam de componentes, compostos de circuitos digitais, para sua realizao. Estes componentes so interligados interna e externamente atravs de barramentos. A seguir detalharemos s principais componentes de um processador.

Unidade Lgica e Aritmtica (ULA): A ULA o dispositivo da CPU que executa realmente as operaes matemticas com os dados. Estas operaes podem ser, por exemplo, soma, subtrao, multiplicao, diviso, operaes lgicas AND, OR, XOR, NOT, deslocamento de bits direita e esquerda, incremento e decremento, comparaes. A ULA um aglomerado de circuitos lgicos e componentes eletrnicos simples que, integrados, realizam as operaes j mencionadas. Ela pode ser uma parte pequena da pastilha do processador, usada em pequenos sistemas, ou pode compreender um considervel conjunto de componentes lgicos de alta velocidade. A despeito da grande variao de velocidade, tamanho e complexidade, as operaes aritmticas e lgicas realizadas por uma ULA seguem sempre os mesmos princpios fundamentais. O circuito de clculo mais simples o somador, que adiciona dois nmeros de n bits. A ULA o circuito que efetua diversas operaes aritmticas e lgicas entre dois operandos. O tipo de tratamento a efetuar deve ser informado atravs de sinais de seleo de operao. Para revisar, a figura 1.4 mostra a composio de uma ULA, capaz de realizar quatro diferentes operaes com dois nmeros binrios A e B: A e B, A ou B, Complemento de B e A+B.

Figura 1.3: ULA de quatro operaes sobre 1 bit. Figura retirada de [Moresi, E.]

Registradores: um dispositivo capaz de memorizar uma informao. Na arquitetura de um microprocessador, os registradores, geralmente numerosos, so utilizados para assegurar o armazenamento temporrio de informaes importantes para o processamento de uma dada instruo. Para que um dado possa ser transferido para a ULA, necessrio que ele permanea, mesmo que por um breve instante, armazenado em um registrador. Alm disso, o resultado de uma operao aritmtica ou lgica realizada na ULA deve ser armazenado temporariamente, de modo que possa ser utilizado mais adiante ou apenas para ser, em seguida, transferido para a memria. Para entender a estes propsitos, a CPU fabricada com certa quantidade de registradores, destinados ao armazenamento de dados. Servem, pois, de memria auxiliar da ULA. No projeto de processadores os registradores so normalmente dividido de forma a trabalharem com dados inteiros e em ponto flutuante. Os processadores implementam o bando de registradores separados por dois motivos. Primeiro, insto permite que sejam colocados fisicamente prximos s unidades de execuo que os utilizam: o banco de registradores para inteiros pode ser colocado prximo s unidades que executam operaes inteiras e o de ponto flutuante prximo s unidades de execuo de ponto flutuante. Isto reduz o comprimento da fiao que liga o banco de registradores s unidades de execuo e, portanto, reduz o tempo necessrio para enviar dados de um para outro. O segundo motivo que bancos de registradores separados ocupam menos espao nos processadores que executam mais de uma instruo por ciclo. Os detalhes disto esto alm do escopo deste curso, mas o tamanho de um bando de registradores cresce aproximadamente com o quadrado do nmero de leituras e escritas simultneas que o banco permite. Conceitualmente, registrador e memria so semelhantes. So a localizao, a capacidade de armazenamento e os tempos de acesso s informaes que os diferenciam. Os registros se localizam no interior de um microprocessador, enquanto a memria externa a este.

Unidade de Controle (UC): o dispositivo mais complexo da CPU. Alm de possuir a lgica necessria para realizar a movimentao de dados e instrues de e para a CPU, atravs dos sinais de controle que emite em instantes de tempo programados, esse dispositivo controla a ao da ULA. Os sinais de controle emitidos pela unidade de controle ocorrem em vrios instantes durante o perodo de realizao de um ciclo de instruo e, de modo geral, todos possuem uma durao fixa e igual, originada em um gerador de sinais usualmente conhecido como relgio. Ao contrrio de circuitos integrados mais comuns, cuja funo limitada pelo

hardware, a unidade de controle mais flexvel. Ela recebe instrues da unidade de E/S, as converte em um formato que pode ser entendido pela unidade de aritmtica e lgica, e controla qual etapa do programa est sendo executado.

Relgio ou clock: o dispositivo gerador de pulsos cuja durao chamada de ciclo. A quantidade de vezes em que este pulso bsico se repete em um segundo define a unidade de medida do relgio, denominada freqncia, a qual tambm usamos para definir velocidade na CPU. A unidade de medida usual para a freqncia dos relgios de CPU o Hertz (Hz), que significa 1 ciclo por segundo. Como se trata de freqncias elevadas abreviam-se os valores usando-se milhes de Hertz, ou de ciclos por segundo (MegaHertz ou simplesmente, MHz). Assim, por exemplo, se um determinado processador funciona como seu relgio oscilando 25 milhes de vezes por segundo, sua freqncia de operao de 25 MHz. E como a durao de um ciclo, seu perodo, o inverso da freqncia, ento cada ciclo, neste exemplo, ser igual ao inverso de 25.000.000 ou 1/25.000.000=0,00000004 ou 40 nanossegundos.

Registrador de Dados da Memria (RDM): Armazena os dados que esto sendo transferidos de/para a memria. Em geral o RDM possui um tamanho igual ao da palavra do barramento de dados.

Registrador de Endereos da Memria (REM): Armazena o endereo da clula onde deve ser feita a prxima operao de leitura ou escrita na memria. O REM possui um tamanho igual ao dos endereos da memria.

Registrador de Instrues (RI): o registrador que tem a funo especfica de armazenar a instruo a ser executada pela CPU. Ao se iniciar um ciclo de instruo, a UC emite o sinal de controle que acarretar a realizao de um ciclo de leitura para buscar a instruo na memria, e que, via barramento de dados e RDM, ser armazenada no RI.

Contador de Instrues ou Program Counter (PC): o registrador cuja funo especfica armazenar o endereo da prxima instruo a ser executada. To logo a instruo que vai ser executada seja buscada (lida) da memria para a CPU, o sistema providencia a modificao do contedo do PC de modo que ele passe a armazenar o endereo da prxima instruo na seqncia. Por isso, comum

definir a funo do PC como sendo a de "armazenar o endereo da prxima instruo", que o que realmente ele faz durante a maior parte da realizao de um ciclo de instruo.

Decodificador de instrues: um dispositivo utilizado para identificar as operaes a serem realizadas, que esto correlacionadas instruo em execuo. Em outras palavras, cada instruo uma ordem para que a CPU realize uma determinada operao. Como so muitas instrues, necessrio que cada uma possua uma identificao prpria e nica. A unidade de controle est, por sua vez, preparada para sinalizar adequadamente aos diversos dispositivos da CPU, conforme ela tenha identificado a instruo a ser executada. O decodificador recebe na entrada um conjunto de bits previamente escolhido e especfico para identificar uma instruo de mquina e possui 2N sadas, sendo N a quantidade de algarismos binrios do valor de entrada. Se o valor presente sobre as entradas k, apenas a sada de ordem k ser ativa. O decodificador analisa a informao nas suas entradas e fornece na sada, de maneira exclusiva, a indicao ou significado desta informao dentre vrias possibilidades.

1.3.Funcionalidades Muitos autores dividem as atividades realizadas pela CPU em duas grandes categorias funcionais:

Funo Processamento: Encarrega-se de realizar as atividades relacionadas com a efetiva execuo de uma operao, ou seja, processar. O dispositivo principal desta rea de atividades de uma CPU chamado de Unidade Lgica Aritmtica - ULA. Os demais componentes relacionados com a funo processamento so os registradores, que servem para armazenar dados a serem usados pela ULA. A interligao entre estes componentes efetuada pelo barramento interno da CPU. A capacidade de processamento de uma CPU em grande parte determinada pelas facilidades embutidas no hardware da ULA para realizar as operaes matemticas projetadas. Um dos elementos fundamentais a definio do tamanho da palavra. Um tamanho maior ou menor de palavra acarreta, sem dvida, diferenas fundamentais no desempenho da CPU, e, por conseguinte, do sistema como um todo.

Funo Controle: exercida pelos componentes da CPU que se encarregam das atividades de busca, interpretao e controle da execuo das instrues, bem como do controle da ao dos demais componentes do sistema de computao. A rea de controle projetada para

entender o que fazer, como fazer e comandar quem vai fazer no momento adequado. Uma analogia pode ser feita com os seres humanos, imaginando que a rea de controle o crebro que comanda o ato de andar, enquanto a rea de processamento so os msculos e ossos das pessoas que realizam efetivamente o ato. Os nervos podem ser relacionados com os barramentos entre os diversos elementos envolvidos. O componente vital para as funes de controle a Unidade de Controle (UC). Ela recebe como entrada o valor do registrador de instrues e decodifica-o (atravs do decodificador de instrues). Para cada cdigo de instrues ele gera uma seqncia de sinais diferentes, ativando os circuitos correspondentes para cada uma das tarefas necessrias para a busca e execuo da instruo a ser executada. Cada sinal de controle comanda uma microinstruo (que denota uma tarefa a ser executada para a execuo de uma operao). Uma microinstruo pode ser responsvel pela realizao de uma carga em um registrador, uma seleo de um dado para entrada em um determinado componente, uma ativao da memria, a seleo de uma operao da ULA ou a habilitao de um circuito lgico, para citar alguns exemplos. Os dispositivos bsicos que devem fazer parte daquela rea funcional so: unidade de controle, decodificador, registrador de instruo, contador de instruo, relgio e os registradores de endereo de memria e de dados da memria.

1.4.Ciclo de Instruo e Microprogramao

A CPU trabalha diretamente com a memria principal e o processamento feito por ciclo regulado pelo clock (relgio). Estas etapas compem o que se denomina ciclo de instruo. Este ciclo se repete indefinidamente at que o sistema seja desligado, ou ocorra algum tipo de erro, ou seja, encontrada uma instruo de parada.

A seqncia resumida desse ciclo : - Buscar (cpia) instruo na memria principal; - Executar aquela instruo; - Buscar a instruo seguinte; - Executar a instruo seguinte; - E assim por diante (milhes de vezes por segundo).

Primeiro, o processador busca a instruo na memria. Ento a instruo decodificada para determinar qual instruo ela e quais os seus registradores de entrada e sada. A instruo decodificada representada por um conjunto de bits que dizem ao hardware como executar a instruo. Estes padres de bits so enviados para a prxima seo da unidade

de execuo, a qual l as entradas da instruo a partir dos registradores. A instruo decodificada e os valores dos registradores de entrada so encaminhados para o hardware , que calcula o resultado da instruo, e o resultado escrito de volta no banco de registradores. As instrues que acessam o sistema de memria tm fluxo de execuo semelhante, exceto que a sada da unidade de execuo enviada ao sistema de memria por ser, ou endereo de uma operao de leitura, ou endereo e o dado de uma operao de escrita. A figura 1.4 exemplifica a execuo de instrues. Os mdulos que implementam os diferentes passos na execuo da instruo so fisicamente dispostos prximos um ao outro interconectados atravs de barramento. medida que a instruo executada os dados fluem pelo barramento, de um mdulo para o seguinte, com cada mdulo executando o seu trabalho em uma seqncia.

Figura 1.4: Execuo de instrues. Figura adaptada de [Carter, N.]

Este ciclo de instruo pode ser descrito em LTR (Linguagem de Transferncia entre Registradores), de modo que possamos acompanhar sua realizao com a movimentao de informaes entre os componentes da CPU. As linhas abaixo ilustram este Algoritmo de funcionamento.

Iniciar CICLO RI MEM[PC] PC PC + 1 Interpretar o Cdigo da Operao Enquanto houver operando no carregados Buscar Operandos PC PC + 1 Executar a instruo Ir para CICLO Fim

Inicialmente, o contedo de memria no endereo da prxima instruo a ser executada (PC), tem seu valor transferido para RI. Logo aps, o valor de PC incrementado para o endereo da prxima instruo a ser executada. O decodificador de instrues ir receber os bits referentes ao cdigo da operao e decodific-lo, dando entrada na UC este valor. A UC gera os sinais necessrios para a execuo da Instruo. Em um processador microprogramado, o hardware no precisa executar diretamente as instrues do conjunto de instrues. Ao invs disso, o hardware executa microoperaes muito simples, e cada instruo determina uma seqncia de

microoperaes que so utilizadas para implementar a instruo. Essencialmente, cada instruo do conjunto de instrues traduzida pelo hardware em um pequeno programa de microinstrues, de modo semelhante ao modo como o compilador traduz cada instruo de um programa em linguagem de alto nvel para uma seqncia de instrues em linguagem de mquina. Processadores microprogramados possuem uma pequena memria que mantm a seqncia de microoperaes utilizadas para implementar uma instruo do conjunto de instrues. Para executar uma instruo, o processador acessa essa memria para localizar o conjunto de microinstrues necessrias para implementar a instruo e, ento, executa as microinstrues em seqncia. Processadores modernos tendem a no utilizar microprogramao por dois motivos. Primeiramente porque agora se tornou prtico implementar a maior parte das instrues diretamente no hardware, por causa dos avanos na tecnologia VLSI, o que torna o microcdigo desnecessrio. Em segundo lugar, processadores microprogramados tendem a ter um desempenho pior que os processadores no microprogramados por causa do tempo adicional envolvido na busca de cada microinstruo na memria de microinstrues.

1.5.Medidas de Desempenho

A medida geral de desempenho de um sistema de computao depende fundamentalmente da capacidade e velocidade de seus diferentes componentes, da velocidade com que estes componentes se comunicam entre si e do grau de compatibilidade entre eles (p. ex., se a velocidade da CPU de um sistema muito maior que a da memria). Considerando a existncia de tantos fatores que influenciam o desempenho de um sistema de computao, desenvolveram-se diversos meios de medir seu desempenho, entre os principais relacionados exclusivamente com a CPU destacam-se: MIPS e FLOPS. O desempenho dos processadores, em geral, medido em termos de sua velocidade de trabalho. Como o trabalho da CPU executar instrues, criou-se a unidade MIPS Milhes de instrues por segundo. O MIPS muito questionado, pois mede apenas a execuo de instrues, sendo que existem diferentes instrues, com tempos de execuo distintos, como por exemplo, multiplicao de nmeros inteiros e multiplicao de nmeros reais (ponto flutuante). Em contraste com o MIPS, FLOPS Operaes de ponto flutuante por segundo, mede basicamente o desempenho da ULA, analisando apenas as instrues mais complexas (as que envolvem ponto flutuante). Hoje em dia, os microprocessadores esto na faixa de MFLOS (milhes de flops) sendo encontradas mquinas com GFLOPS (supercomputadores). 1.6.Mais de uma Instruo por Ciclo

Descrevendo o funcionamento da CPU na realizao de seus ciclos de instruo foi observado que, embora o ciclo de instruo seja composto de vrias etapas, ele realizado de forma seqencial, isto , uma etapa se inicia aps a concluso da etapa anterior. Desta forma enquanto a fase de decodificao da instruo estava sendo executada, a busca (RDM e REM) e a execuo (ULA) estavam ociosas. A situao acima leva a crer que a CPU no pode executar mais de uma instruo por ciclo, mas isso no verdade. Graas aos avanos da tecnologia existem CPUs que executam mais de uma instruo por ciclo, sendo chamadas de superescalares.

Pipeline O pipeline uma tcnica de implementao de CPU onde mltiplas instrues esto em execuo ao mesmo tempo. O processador construdo com diversos estgios distintos, cada um responsvel pela execuo de uma parte da instruo e possuindo o seu prprio bloco de controle. Assim que um estgio completa sua tarefa com uma instruo

passa esta para o estgio seguinte e comea a tratar da prxima instruo. Uma vez que diversas instrues so executadas ao mesmo tempo, obtm-se um acrscimo no desempenho do processador. A figura 1.5 exemplifica um pipeline na produo em serie de bicicletas. A diviso das tarefas resultou em 5 etapas. Na primeira feita a estrutura da bicicleta com pedais e correia, na segunda instalada a roda dianteira, na terceira colocada a roda traseira, na quarta colocado o assento e, por fim, na quinta e ltima etapa colocado o guidom. conveniente lembrar que o tempo para a produo de uma bicicleta no diminui, mas o tempo entre bicicletas sim: a primeira bicicleta demora cinco unidades de tempo para ser produzida, mas logo a seguir, em cada unidade de tempo uma nova bicicleta produzida (se no houverem problemas).

Figura 1.5: Pipeline. Figura adaptada de [Rebonatto, M.]

Processadores Superescalares

Processadores superescalares possuem vrias unidades de execuo permitindo que diversas instrues sejam executadas ao mesmo tempo. Um aspecto importante neste tipo de processador que como mais de uma instruo executada simultaneamente e devido a tempos de execuo diferente entre elas ou a conflitos ocorridos, pode se dar execuo de instrues fora da ordem original do programa. A figura 1.6 ilustra este tipo de organizao de CPUs.

Figura 1.6: Maquina Superescalar. Figura adaptada de [Rebonatto, M.]

Estes processadores possuem unidades funcionais especficas para cada tipo de instruo. As unidades funcionais podem internamente ser divididas em vrias etapas cada uma. Desta forma, tm-se pipelines distintos: para execuo de instrues envolvendo nmeros inteiros, reais e desvios.

1.7.Exerccios

1. Defina processador enfocando por qual tipo de operaes ele responsvel.

2. Mostre e explique de forma resumida os componentes de um processador.

3. Explique as funes de controle e processamento de um processador.

4. Quais as etapas de ciclo de instruo? Explique-as.

5. Se ler uma instruo da memria gasta 5 ns, decodificar gasta 2ns, 3 ns para ler o banco de registradores, 4 ns para executar o clculo exigido pela instruo e 2 ns para escrever o resultado no banco de registradores, qual a freqncia mxima de relgio do processador sabendo que fmax = 1/durao do ciclo?

6. O que microprogramao? Por que foi utilizada em computadores antigos? Por que os processadores atuais abandonaram essa tcnica?

7. Explique a idia de pipeline e processadores superescalares.

8. Por que processadores implementam bancos de registradores separados para inteiros e ponto flutuante?

UNIDADE II PROCESSADORES 2. PIPELINE E MQUINAS SUPERESCALARES

2.1.Introduo A maioria das arquiteturas e processadores projetadas depois de 1990 possui uma organizao chamada pipeline. A traduo literal de pipeline seria linha de dutos, uma traduo mais aproximada do significado que este termo assume em arquiteturas de computadores seria linha de montagem. Organizar a execuo de uma tarefa em pipeline significa dividir a execuo desta tarefa em estgios sucessivos, exatamente como ocorre na produo de um produto em uma linha de montagem. Considere uma tarefa que utiliza, para sua execuo, um mdulo de processamento executando k sub-tarefas. No esquema apresentado na figura 2.1, se cada sub-tarefa requer um tempo de execuo t segundos, a tarefa como um todo ir ser executada em kt segundos. Para a execuo de uma seqncia de tais tarefas, cada nova tarefa na seqncia s poder ter sua execuo iniciada aps kt segundos, o tempo necessrio para a liberao do mdulo de processamento.

Figura 2.1: Execuo de tarefas. Figura adaptada de [Ricarte, I.]

Considere uma abordagem alternativa (figura 2.2) na qual o mdulo de processamento dividido em k mdulos menores (estgios), cada um responsvel por uma sub-tarefa, cada um operando concorrentemente aos demais estgios:

Figura 2.2: Princpio de pipeline. Figura adaptada de [Ricarte, I.]

O princpio da tcnica de pipelining poder iniciar uma nova tarefa antes que o resultado para a tarefa anterior na seqncia de tarefas tenha sido gerado. A utilizao dos estgios de um pipeline pode ser graficamente representada atravs de um diagrama de ocupao espao tempo. Por exemplo, para um pipeline de quatro estgios mostrado na figura 2.3. Na execuo em pipeline, cada tarefa individualmente ainda requer kt segundos. Entretanto, o mdulo capaz de gerar um novo resultado a cada t segundos

Figura 2.3: Pipeline de quatro estgios. Figura adaptada de [Ricarte, I.]

Existem algumas regras muito importantes que devem ser seguidas quando se projeta uma arquitetura em pipeline: - Todos os estgios devem ter a mesma durao de tempo; - Deve-se procurar manter o pipeline cheio a maior parte do tempo; - O intervalo mnimo entre o trmino de execuo de duas instrues consecutivas igual ao tempo de execuo do estgio que leva mais tempo; - Dadas duas arquiteturas implementadas com a mesma tecnologia, a arquitetura que construda usando pipeline no reduz o tempo de execuo de instrues, mas aumenta a freqncia de execuo de instrues (throughput). O tempo total para a execuo de uma operao em pipeline , em geral, ligeiramente maior que o tempo para executar a mesma operao monoliticamente (sem pipeline). Um dos overheads associados operao de um pipeline decorrente da necessidade de se transferir dados entre os estgios. H duas estratgias bsicas para controlar a transferncia de dados entre os estgios de um pipeline: o mtodo assncrono e o mtodo sncrono. No mtodo assncrono, os estgios do pipeline comunicam-se atravs de sinais de handshaking, indicando a disponibilidade de dados do estgio corrente para o prximo estgio (RDY) e indicando a liberao do estgio corrente para o estgio anterior (ACK).

Figura 2.4: Mtodo assncrono. Figura adaptada de [Ricarte, I.]

No mtodo sncrono, os estgios do pipeline so interconectados por latches que armazenam os dados intermedirios durante a transferncia entre estgios, que controlada por um sinal de relgio. Neste caso, o estgio com operao mais lenta determina a taxa de operao do pipeline.

Figura 2.5: Mtodo sncrono. Figura adaptada de [Ricarte, I.]

O mtodo assncrono o que permite maior velocidade de operao do pipeline. Entretanto, o mtodo sncrono o mais adotado devido sua simplicidade de projeto e operao. A figura 2.6 mostra a execuo tpica de instrues em um pipeline. Cada um dos retngulos mostrados representa um banco de flip-flops que so elementos de memria utilizados para armazenar os resultados no final de cada estgio do pipeline. Os pipelines utilizados em microprocessadores normalmente so sncronos, portanto um sinal de relgio no mostrado na figura 2.7 habilita o elemento de memria a passar seus resultados para o estgio seguinte. Como existe um nico relgio para comandar o pipeline, o tempo gasto em todos os estgios do pipeline idntico e no pode ser menor o que o tempo gasto no estgio mais lento. Este tempo gasto em cada estgio o perodo do clock utilizado para comandar o pipeline e ele determina a velocidade de execuo das instrues.

Figura 2.6: Estrutura de uma mquina pipeline. Figura adaptada de [Vargas, F.]

Figura 2.7: Execuo de uma seqncia de instrues em um pipeline. Figura adaptada de [Vargas, F.] 2.2. Durao de Ciclos Para implementar pipelines, os projetistas dividem o caminho de dados de um processador em sees e colocam latches entre cada seo, como mostra a figura 2.6. No incio de cada ciclo, os latches lem as suas entradas e as copiam para suas sadas, as quais permanecero constantes por todo o ciclo. Isto divide o caminho de dados em diversas sees, cada uma das quais tem latncia de um ciclo de relgio, uma vez que a instruo no pode passar atravs de um latch at que o prximo ciclo seja iniciado. Se for considerado apenas o nmero de ciclos necessrios para executar um conjunto de instrues, pode parecer que um pipeline no melhora o desempenho do processador. De fato, como veremos adiante, projetar um pipeline para um processador aumenta o nmero de ciclos de relgio que so necessrios para executar um programa, porque algumas instrues ficam presas no pipeline esperando que as instrues que geram suas entradas sejam executadas. O benefcio de desempenho do pipeline vem do fato que, em um estgio, menos lgica necessita ser executada sobre os dados, o que possibilita processadores com pipelines ter ciclos de tempo reduzido reduzidos do que implementaes sem pipeline do mesmo processador. Uma vez que um processador com pipeline tem uma taxa de rendimento de uma instruo por ciclo, o nmero total de instrues executadas por unidade de tempo maior em um processador com pipeline que, assim, do um desempenho melhor. A durao do ciclo em um processador com pipeline dependente de quatro fatores: a durao do ciclo por parte do processador que no tem pipeline, o nmero de estgios do pipeline, a homogeneidade com que a lgica do caminho dos dados dividida entre os estgios e a latncia dos latches. Se a lgica pode ser dividida homogeneamente entre os estgios do pipeline, o perodo de tempo de um processador com pipeline :

uma vez que cada estgio contm a mesma frao da lgica original, mais um latch. medida que o nmero de estgios aumenta, a latncia do latch torna-se uma parte cada vez menor da durao do ciclo, limitando o benefcio de dividir um processador em um nmero muito grande estgios de pipeline.

Exemplo: Um processador sem pipeline tem uma durao de ciclo de 25 ns. Qual a durao do ciclo de uma verso desse processador com pipeline de 5 estgios divididos homogeneamente, se cada latch tem uma latncia de 1 ns? E se o processador for dividido em 50 estgios? Que concluso podemos tirar quando comparado os dois processadores?

Soluo: Aplicando a equao, a durao do ciclo para o pipeline de 5 estgios (25ns/5) + 1 = 6 ns. Para o pipeline de 50 estgios a durao do ciclo (25ns/50)+1 = 1,5 ns. No pipeline de 5 estgios a latncia do latch de apenas 1/6 da durao global do ciclo, enquanto que no pipeline de 50 estgios a latncia de 2/3 da durao total do ciclo. Isso mostra que aumentando a quantidade de estgios, a latncia do latch influencia muito na durao total do ciclo.

Exemplo retirado de [Carter, N.] Com freqncia, a lgica do caminho de dados no pode ser dividida em estgios de pipeline com latncia igual. Por exemplo, acessar o banco de registradores pode demorar 3 ns, enquanto que decodificar uma instruo pode demorar 4 ns. Quando esto decidindo a forma de dividir o caminho de dados em estgio de pipeline, os projetistas devem equilibrar o seu desejo de que cada estgio contenha a mesma latncia e a quantidade de dados que precisa ser armazenada no latch. Algumas partes do caminho de dados, como a lgica de decodificao das instrues, so irregulares, fazendo com que seja difcil dividi-las em estgios. Para outras partes que geram grande quantidade de valores intermedirios necessrio colocar os latches em locais onde haja menos resultados e, assim, menos bits precisam ser armazenados. Quando um processador no pode ser dividido em estgios de pipeline com latncia igual, a durao do ciclo de relgio do processador igual latncia do estgio de pipeline mais longo, mais o atraso do latch, uma vez que a durao do ciclo tem que longa o suficiente para que o estgio de pipeline mais longo possa completar e armazenar os resultados no latch que est entre ele e o prximo estgio.
Exemplo: Suponha que um processador sem pipeline, com uma durao de ciclo de 25 ns, esteja dividido em 5 estgios com latncias de 5, 7, 3, 6 e 4 ns. Se a latncia do latch for de 1 ns qual a durao do ciclo?

Soluo: O estgio de pipeline mais longo demora 7 ns. Somando o atraso de latch de 1 ns a este estgio, resulta em uma latncia de 8 ns, que a durao do ciclo.

Exemplo retirado de [Carter, N.]

2.3. Latncia A latncia de um pipeline o tempo necessrio para uma instruo atravessar todo o pipeline. Portanto para calcular o tempo de latncia de uma mquina com pipeline basta multiplicar o perodo do clock pelo nmero de estgios no pipeline. A latncia importante apenas para se determinar quanto tempo a execuo da primeira instruo leva para ser completada. Enquanto o pipeline pode reduzir a durao do ciclo de um processador, aumentando, assim, a taxa de rendimento das instrues, ele aumenta a latncia do processador em, pelo menos, a soma de todas as latncias dos latches. A latncia de um pipeline a soma do tempo que cada instruo demora para passar atravs do pipeline, o que o produto do nmero de estgios pela durao do ciclo de relgio.
Exemplo: Se processador sem pipeline com durao de ciclo de 25 ns for dividido homogeneamente em 5 estgios utilizando latches de latncia de 1 ns, qual a latncia total do pipeline? E se o processador fosse dividido em 50 estgios?

Soluo: Aplicando a equao, a durao do ciclo para o pipeline de 5 estgios (25ns/5)+1 = 6 ns. Para o pipeline de 50 estgios a durao do ciclo (25ns/50)+1 = 1,5 ns. Dado isto, podemos calcular a latncia de cada pipeline multiplicando a durao do ciclo pelo nmero de estgios. Isto resulta em uma latncia de 30 ns para o pipeline de 5 estgios e 75 ns para o pipeline de 50 estgios.

Exemplo retirado de [Carter, N.]

Este exemplo mostra o impacto que o pipeline pode ter sobre a latncia, especialmente medida que o nmero de estgios cresce. O pipeline de 5 estgios tem uma latncia de 30 ns, 20% mais demorado que o processamento sem pipeline, cuja durao do ciclo de 25 ns, enquanto que o pipeline de 50 estgios tem latncia de 75 ns, trs vezes a do processador original. Pipelines com estgios no uniformes utilizam a mesma frmula, em bor tenham um aumento ainda maior na latncia, porque a durao do ciclo precisa ser longa o suficiente para acomodar o estgio mais longo do pipeline, mesmo que os outros sejam mais curtos.
Exemplo: Suponha que um processador sem pipeline, com uma durao de ciclo de 25 ns, esteja dividido em 5 estgios com latncias de 5, 7, 3, 6 e 4 ns. Se a latncia do latch for de a latncia resultante? Soluo: O estgio de pipeline mais longo demora 7 ns. Somando o atraso de latch de 1 ns a este estgio, resulta em uma latncia de 8 ns, que a durao do ciclo. Para obtermos a latncia resultante basta multiplic-la pelo nmero de ciclos obtendo 40 ns de latncia total. 1 ns, qual

Exemplo retirado de [Carter, N.]

2.4.Bolhas

Uma bolha em um pipeline consiste em uma seqncia de um ou mais perodos de clock em que um estgio do pipeline est vazio. Se um estgio do pipeline estiver vazio no ciclo de clock n, conseqentemente o estgio seguinte estar vazio no ciclo de clock n+1. Desta forma bolhas formadas na entrada de um pipeline propagam-se atravs do pipeline at desaparecerem no ltimo estgio. Situaes que geram bolhas em pipelines incluem: - a execuo de instrues de desvio, - o atendimento de interrupes, - o tratamento de excees, - o retardo na execuo de instrues devido a dependncias existentes com instrues que a precedem. No caso de atendimento de excees e interrupes no existem muitas tcnicas efetivas para minorar o problema da formao de bolhas no pipeline, pois estas ocorrncias so bastante imprevisveis. Quando da execuo de desvios condicionais a formao de bolhas pode ser reduzida atravs da utilizao de predio de ocorrncia e desvio. J em se tratando de dependncias, a formao de bolhas pode ser minorada atravs do reordenamento de instrues.

2.5. Previso de Desvios

O problema introduzido por desvios condicionais em arquiteturas organizadas em pipeline que quando o desvio decodificado na unidade de decodificao de instrues impossvel decidir se o desvio ser executado ou no. Isto , no se pode determinar a priori qual a prxima instruo a ser executada. Existem duas possibilidades: - a condio que determina o desvio falsa e o desvio no executado, neste caso a prxima instruo a ser executada a instruo seguinte instruo de desvio no programa; - condio verdadeira e o endereo da prxima instruo a ser executada determinada pela instruo de desvio. A forma mais simples e menos eficaz de tratar um desvio condicional consiste em simplesmente paralisar a busca de instrues quando uma instruo de desvio condicional decodificada. Com esta forma de tratamento de desvio garantimos que todo desvio condicional gerar uma bolha no, pois a busca de instruo ficar paralisada at que se possa decidir se o desvio ser executado ou no. Esta tcnica s deve ser utilizada quando o custo de buscar e depois ter que descartar a instruo errada muito alto.

Outra forma tentar prever o que vai acontecer com o desvio. Neste caso a previso pode ser previso esttica ou previso dinmica. A previso esttica aquela em que dada uma instruo de desvio em um programa ns vamos sempre fazer a mesma previso para aquela instruo. Na previso dinmica podemos mudar a previso para uma mesma instruo medida que o programa executado.

Previso Esttica A forma mais simples de previso esttica aquela em que a mesma previso feita para um dado desvio condicional. Esta tcnica de previso simples de implementar e pode tomar duas formas:

Os desvios condicionais nunca ocorrem: Assumindo que os desvios condicionais nunca ocorrem, simplesmente se continua o processamento normal de instrues incrementando o PC e buscando a instruo seguinte. Se for determinado mais tarde que o programa deve desviar as instrues buscadas tero que ser descartadas e os efeitos de quaisquer operaes realizadas por elas devem ser anulados.

Os desvios condicionais sempre ocorrem: Assumindo que os desvios condicionais sempre ocorrem necessrio calcular o endereo de desvio muito rapidamente j na Unidade de Decodificao de Instruo para dar tempo de buscar a nova instruo no endereo especificado pela instruo de desvio.

Algumas observaes feitas por projetistas de computadores aps analisar diversos programas indicam que um grande nmero de desvios ocorre no final de laos de programa. Se um lao de programa for executado n vezes, o desvio que se encontra no final do lao ir ocorrer n vezes e no ocorrer uma vez no final do lao. Alguns programadores tambm observaram que desvios condicionais originados por comandos IF em linguagens de ao nvel tendem a no ocorrer. Portanto, existe evidncias de que seria desejvel possuir-se a capacidade de fazer previso esttica diferenciada para diferentes instrues de desvio em um mesmo programa. Uma soluo para esta situao consiste em adicionar um bit no cdigo de instrues de desvio condicional para informar o hardware se aquele desvio ser provavelmente executado ou provavelmente no executado. Este bit dever ser especificado pelo compilador. Como a determinao de que a previso ser de execuo ou no do desvio feita em tempo de compilao, este mtodo de previso tambm esttico.

Previso Dinmica Na previso dinmica de desvios condicionais uma mesma instruo de desvio pode receber uma previso de ser ou no executada em diferentes momentos do programa. Uma soluo comum criar uma tabela de desvios em hardware. Esta tabela pode ser gerenciada na forma de uma cache. A cada vez que uma instruo de desvio executada ela adicionada tabela e um bit setado ou resetado para indicar se o desvio foi executado ou no. Na tabela tambm registrado o endereo para qual o desvio foi realizado. Desta forma na prxima vez que a mesma instruo de desvio for decodificada, esta tabela consultada e a previso feita de que a mesma coisa (execuo ou no execuo do desvio) vai ocorrer de novo. Se a previso for de execuo do desvio o endereo no qual a nova instruo deve ser buscada j se encontra nesta tabela. 2.6. Processamento de Excees A ocorrncia de excees em um computador imprevisvel e, portanto numa mquina em pipeline uma exceo normalmente resulta na formao de bolhas. Uma complicao adicional que como existem vrias instrues em diferentes estgios de execuo ao mesmo tempo, difcil decidir qual foi a instruo que causou a gerao da exceo. Uma soluo para minorar este problema categorizar as excees de acordo com o estgio do pipeline em que elas ocorrem. Por exemplo, uma instruo ilegal s pode ocorrer na unidade de decodificao de instrues (ID) e uma diviso por zero ou uma exceo devida a overflow s pode ocorrer na unidade de execuo (EX). Algumas mquinas com arquitetura em pipeline so ditas ter excees imprecisas. Nestas mquinas no possvel determinar qual a instruo que causou a exceo. Outra complicao nas arquiteturas em pipeline o aparecimento de mltiplas excees no mesmo ciclo de clock. Por exemplo, uma instruo que causa erro aritmtico pode ser seguida de uma instruo ilegal. Neste caso a unidade de execuo (EX) gerar uma exceo por erro aritmtico e a unidade de decodificao (ID) gerar uma exceo por instruo ilegal, ambas no mesmo ciclo de clock. A soluo para este problema consiste em criar uma tabela de prioridade para o processamento de excees. 2.7. Bolhas Causadas por Dependncia Outra causa de formao de bolhas em arquiteturas com pipeline so as dependncias existentes entre instrues num programa. Para ilustrar este problema, vamos considerar o exemplo de pseudo programa assembler apresentado a seguir. O trecho de programa abaixo permuta os valores armazenados nas posies $800 e $1000 da memria.

A B C D

MOVE $800, D0

copia o valor do endereo $800 no registrador D0

MOVE $1000, D1 copia o valor do endereo $1000 no registrador D1 MOVE D1,$800 copia o valor do registrador D1 no endereo $800

MOVE D0,$1000 copia o valor do registrador D0 no endereo $1000

Figura 2.8: Formao de bolha devido dependncia de instrues. Exemplo retirado de [Vargas, N.]

Observe na figura 2.8 que no perodo de clock 6 quando a instruo C deveria executar no estgio de escrita na memria (ME) para escrever o valor de D1 no endereo $800, o valor lido do endereo $1000 ainda no est disponvel em D1 pois ele s ser escrito quando a instruo B tiver executado no estgio de escrita nos registradores (WB), o que ocorre tambm no perodo de clock 6. Portanto a execuo da instruo C necessita ser atrasada por dois ciclos de relgio, gerando uma bolha no pipeline. Uma forma simples de resolver este problema consiste em reordenar as instrues no programa, conforme ilustrado a seguir.
B A C D MOVE $1000, D1 MOVE $800, D0 MOVE D1,$800 MOVE D0,$1000 copia o valor do endereo $1000 no registrador D1 copia o valor do endereo $800 no registrador D0 copia o valor do registrador D1 no endereo $800 copia o valor do registrador D0 no endereo $1000

Figura 2.9: Minimizao de bolhas por reordenao de instrues. Exemplo retirado de [Vargas, N.]

A figura 2.9 ilustra que um simples re-ordenamento de instrues suficiente neste caso para minimizar a bolha gerada pela dependncia. Observe que o tempo total para a execuo da seqncia de instrues foi reduzido de 1 ciclo de clock. Existem situaes em que um simples re-ordenamento de instrues no suficiente para minimizar (ou eliminar) bolhas causadas por dependncias. Considere o programa abaixo que realiza a inverso de uma tabela de palavras localizada entre os endereos $1000 e $9000 da memria.
A B MOVEA MOVEA #$1000, A0 #$9000, A1 inicializa A0 inicializa A1 copia em D0 dado apontado por A0 copia em D1 dado apontado por A1 copia o valor em D0 no end. Indicado em A1 copia o valor em D1 no end. Indicado em A0 incrementa o valor de A0 decrementa o valor de A0 compara os endereos em A0 e A1 enquanto A1 maior que A0, continua inicia outro procedimento inicia outro procedimento

C loop MOVE (A0), D0 D E F G H I J K L MOVE (A1), D1 MOVE D0, (A1) MOVE D1, (A0) ADDQ #2, A0 SUBQ #2, A1 CMPA A0, A1 BGT LOOP MOVE #$500, A0 MOVE #$17000, A1

Figura 2.10: Execuo do programa com loop. Exemplo retirado de [Vargas, N.]

Conforme ilustrado na figura 2.10, o lao do programa que efetivamente transfere os dados para fazer a inverso da tabela de palavras necessita de 12 ciclos de clock para executar. Para inverter uma tabela com n palavras necessrio executar este lao n/2 vezes. Portanto o nmero de ciclos de clock necessrio para realizar a inverso da tabela 6n (supondo que cada instruo executada em apenas 1 ciclo de clock).

A figura indica a formao de 3 bolhas dentro da execuo do loop:

1) a primeira bolha aparece no ciclo de clock 7 quando a instruo E tem que esperar at o fim do WB da instruo C. Em outras palavras, ela tem que aguardar at que o novo valor do registrador D0 produzido pela instruo C seja escrito no estgio de escrita em registradores WB, o que s vai ocorrer no ciclo de clock 6. Esta bolha tem o tamanho de 1 ciclo de clock.

2) a segunda bolha, com tamanho de 2 ciclos de clock, aparece no ciclo de clock 12 quando a instruo I tem que esperar at o fim do WB da instruo H.

3) a terceira bolha aparece no final do loop devido ao uso de uma previso de que o desvio no ser executado, o que faz com que o processador busque as instrues K e L que no sero executadas. Quando determinado que estas instrues no sero executadas, elas so eliminadas do pipeline, gerando uma bolha de dois ciclos de clock.

O programa foi reescrito para que fosse eliminada a dependncia entre as instrues de atualizao dos endereos em A0 e A1 e a instruo de comparao. Para que isto ocorresse a atualizao dos valores dos registradores foi feita no incio do lao e a inicializao de A0 e A1 foi alterada apropriadamente. O novo programa apresentado a seguir.

A B

MOVEA MOVEA

#$0FFF, A0 #$9002, A1

inicializa A0 inicializa A1

C loop ADDQ #2, A0 D E F G H I J K L SUBQ #2, A1 MOVE (A0), D0 MOVE (A1), D1 MOVE D0, (A1) MOVE D1, (A0) CMPA A0, A1 BGT LOOP MOVE #$500, A0 MOVE #$17000, A1

incrementa o valor de A0 decrementa o valor de A0 copia em D0 dado apontado por A0 copia em D1 dado apontado por A1 copia o valor em D0 no end. Indicado em A1 copia o valor em D1 no end. Indicado em A0 compara os endereos em A0 e A1 enquanto A1 maior que A0, continua inicia outro procedimento inicia outro procedimento

Figura 2.11: Eliminao de bolhas dentro do loop. Exemplo retirado de [Vargas, N.]

Para eliminar a bolha no final do loop, as instrues foram reordenadas dentro do lao e a previso esttica do desvio foi alterada para uma previso de que o desvio sempre ocorre. Assim obtemos a execuo mostrada na figura 2.11. Conforme mostrado na figura 2.11, a modificao da previso esttica de desvio para desvio executado e a eliminao de bolha por reordenao de instrues dentro do lao causaram uma reduo de 30 no nmero de ciclos de clock necessrios para executar o lao. Com um lao de 8 ciclos de clock, uma tabela com n palavras pode ser invertida em 4n ciclos de clock. Observe que a instruo C no faz nada e foi inserida apenas como uma reserva de espao de tempo para que o lao pudesse comear ordenadamente. A insero da instruo C necessria por causa da dependncia existente entre a instruo B e a instruo D. 2.8.Medidas de Desempenho As medidas para comparar desempenhos de pipelines no diferem daquelas para comparao de sistemas computacionais em geral. As principais mtricas utilizadas so latncia, vazo, speedup e eficincia.

- Latncia: o tempo necessrio para completar uma operao ao longo do pipeline. Em geral, maior para sistemas com pipeline do que para sistemas monolticos. Entretanto, uma medida de interesse menor, pois raramente um pipeline seria utilizado para realizar uma nica operao. Para um pipeline com k estgios executando com um ciclo de , a latncia para a execuo de uma instruo : Lk = k . - Vazo (throughput): Expressa o nmero de operaes executadas por unidade de tempo. Esta uma medida mais utilizada para avaliao de pipelines, pois usualmente grupos de tarefas so neles executados. Para um pipeline com k

estgios executando n operaes com um ciclo de , o primeiro resultado s estar disponvel aps um perodo Lk (tempo de preenchimento do pipeline). Aps este perodo, as n-1 operaes restantes so entregues a intervalos de segundos. Portanto, para a execuo do grupo de n operaes, a vazo : Hk = n / [ (k + n-1) ] - Fator de acelerao (Speedup): Expressa o ganho em velocidade na execuo de um grupo de tarefas em um pipeline de k estgios comparada com a execuo seqencial deste mesmo grupo de tarefas. Para a execuo de n tarefas em um pipeline de k estgios, sendo o tempo seqencial kn, o fator de acelerao : Sk = nk / ( k+n-1) Quanto maior o tempo de uso consecutivo (n) de um pipeline, melhor ser o fator de acelerao obtido. Quanto maior o nmero de estgios em um pipeline (k), maior o potencial para melhorar o fator de acelerao. Na prtica, o nmero de estgios em pipelines varia entre quatro e dez, dificilmente ultrapassando 20 estgios. As principais limitaes para a ampliao do nmero de estgios em um pipeline incluem custo, complexidade de controle e implementao de circuitos.

Superpipelining a estratgia de processamento que busca acelerar o desempenho atravs da utilizao de grandes nmeros de estgios simples. - Eficincia: Medida de speedup normalizada pelo nmero de estgios. Ek = Sk/k = n/ [ k + (n - 1) ] 2.9. Mquinas Superpipeline e Superescalares

O perodo de clock de uma mquina pipeline determinado pelo estgio que leva maior tempo para ser executado. Uma tcnica utilizada para acelerar uma mquina pipeline subdividir os estgios mais lentos em subestgios de menor durao. Uma mquina com um nmero de estgios maior do que cinco chamada de superpipeline. A figura 2.12 ilustra uma organizao superpipeline obtida pela diviso do estgio de busca de instrues (IF) em dois subestgios e do estgio de acesso memria em trs subestgios.

Figura 2.12: Arquitetura Superpipeline. Figura adaptada [Vargas, N.]

Outra tcnica para acelerar o processamento em mquinas pipeline a utilizao de mltiplas unidades funcionais que podem operar concorrentemente. Numa arquitetura deste tipo mltiplas instrues podem ser executadas no mesmo ciclo de clock. necessrio realizar anlise de dependncias para determinar se as instrues comeadas ao mesmo tempo no possuem interdependncias.

Figura 2.13: Arquitetura Superescalar. Figura adaptada [Vargas, N.]

A figura 2.13 ilustra uma arquitetura superescalar com dois pipelines que podem operar em paralelo. Uma preocupao que surge com a implementao de mquinas superescalar a possibilidade de trmino de execuo fora de ordem. Isto ocorreria quando suas instrues so iniciadas ao mesmo tempo em dois pipelines e uma bolha surge em um deles causando que uma instruo leve mais tempo do que a outra. Uma soluo adotada para este problema consiste em criar um buffer de reordenao que armazena o resultado das instrues at que os resultados possam ser escritos na ordem correta. A maioria dos processadores RISC so arquiteturas superescalar e superpipelined. Isto eles possuem mais de cinco estgios no pipeline devido subdiviso de alguns estgios e eles possuem mltiplas unidades funcionais em cada estgio. Uma configurao tpica o uso de quatro unidades funcionais em cada estgio. 2.10. Processadores Superescalares

Paralelismo no nvel de instruo O pipeline melhora o desempenho, ao aumentar a taxa pela qual as instrues podem ser executadas. No entanto, existem limites para um pipeline melhorar o desempenho. medida que mais e mais estgios do pipeline so inserido no ao processador, o atraso nos registros de pipeline necessrios em cada estgio torna-se uma parte significativa da durao do ciclo, reduzindo o benefcio de aumentar a profundidade do pipeline. De modo mais significativo, aumentar a profundidade do pipeline aumenta o atraso de desvios e a latncia de instrues, aumentando o nmero de ciclos de adiamento que ocorrem entre instrues dependentes.

Devido a estas restries projetistas voltaram-se para o paralelismo de modo a melhorar o desempenho pela execuo de vrias tarefas ao mesmo tempo. Sistemas de computadores em paralelo tendem a ter uma de duas formas: vrios processadores e processadores com paralelismo no nvel de instruo. Em sistemas com vrios processadores tarefas relativamente grandes, como procedimentos ou iteraes de laos, so executados em paralelo. Em contraste, processadores com paralelismo no nvel de instruo executam instrues individuais em paralelo. A figura 2.13 mostra um diagrama de bloco de alto nvel de um processador com paralelismo no nvel da instruo. O processador contm vrias unidades de execuo para executar as instrues, cada uma das quais l os seus operando e escreve o seu resultado no conjunto nico de registradores centralizado. Quando uma operao escreve o seu resultado no conjunto de registradores, aquele resultado torna-se visvel para todas as unidades de execuo do prximo ciclo, permitindo que operaes sejam executadas em diferentes unidades a partir das operaes que geraram suas entradas. Processadores com paralelismo no nvel de instruo freqentemente tem um hardware complexo de vias secundrias, que transmite o resultado de cada instruo para todas as unidades de execuo, de modo a reduzir o atraso entre instrues pendentes.

Figura 2.14: Processador com paralelismo no nvel de instruo. Figura adaptada [Carter, N.]

Na figura 2.14 todas as unidades de execuo foram desenhadas de modo idntico. Na maioria dos processadores reais, algumas ou todas as unidades de execuo so capazes de executar apenas um subconjunto de instrues do processador. A diviso mais comum entre operaes de inteiros e de ponto flutuante, porque estas operaes exigem um hardware muito diferente. Implementar esses dois conjuntos de hardware em unidades de execuo aumenta o nmero de instrues que podem ser executadas simultaneamente, sem aumentar, significativamente a quantidade de hardware exigido.

Processadores com paralelismo no nvel da instruo exploram o fato que muitas das instrues em um programa seqencial no dependem das instrues que a precedem imediatamente no programa. Por exemplo, considere o fragmento de programa abaixo. As instrues 1, 3 e 5 so dependentes umas das outras porque a instruo 1 gera valores que so utilizados pela instruo 3, a qual gera resultado que utilizado na instruo 5. As instrues 2 e 5 no utilizam os resultados de quaisquer outras instrues no fragmento e no geram quaisquer resultados que sejam utilizado neste fragmento. Estas dependncias exigem que as instrues 1, 3 e 5 sejam executadas em ordem para gerar o resultado correto, mas as instrues 2 e 4 podem ser executadas antes, depois, ou em paralelo com quaisquer outras instrues, sem modificar os resultados do fragmento de programa.
1: LD r1,(r2) 2: ADD r5, r6, r7 3: SUB r4, r1, r4 4: MUL r8, r9, r10 5: ST (r11), r4 Ciclo 1: LD r1,(r2) Ciclo 2: SUB r4, r1, r4 Ciclo 3: ST (r11), r4 ADD r5, r6, r7 MUL r8, r9, r10

Exemplo retirado de [Carter, N.] Este exemplo ilustra tanto os pontos favorveis quanto os desfavorveis do paralelismo no nvel de instruo. Processadores PNI podem, ao executar instrues em paralelo, atingir aumentos de velocidade significativos em uma ampla variedade de programas, mas a melhora mxima do seu desempenho est limitada pelas dependncias de instrues.

Limitaes O desempenho de processadores PNI est limitado pela quantidade de paralelismo no nvel da instruo que o compilador e o hardware podem localizar no programa. O paralelismo no nvel de instruo limitado por diversos fatores: dependncia de dados, dependncia de nomes e desvios. Alm disso, uma determinada capacidade do processador de explorar o paralelismo no nvel de instruo pode ser limitada pelo nmero e pelo tipo de unidades de execuo que esto presentes e por restries aos tipos de instruo do programa que podem ser executadas em paralelo. Desvios limitam o paralelismo no nvel da instruo porque o processador no sabe quais instrues sero executadas depois de um desvio, at que ele seja completado. Isso exige que o processador espere a concluso do desvio antes que outras instrues sejam executadas.

Exemplo: Considere o seguinte fragmento de programa: ADD LD SUB MUL SUB ST OR r1, r2, r3 r4, (r5) r7, r1, r9 r5, r4, r4 r1, r12, r10 (r13), r14 r15, r14, r12

Quanto tempo este programa demoraria para ser executado por um processador que permita duas instrues executando simultaneamente? Como seria se o processador permitisse quatro instrues simultaneamente? Assuma que o processador pode executar instrues em qualquer ordem que no viole a dependncia de dados, que todas as instrues tem latncia de um ciclo e que todas as unidades de execuo do processador podem executar todas as instrues no fragmento.

Soluo: Em um processador que permita duas instrues realizadas simultaneamente, este programa demoraria quatro ciclos para ser posto em execuo. Um exemplo seria: Ciclo 01: ADD r1, r2, r3 LD r4, (r5) Ciclo 02: SUB r7, r1, r9 MUL r5, r4, r4 Ciclo 03: SUB r1, r12, r10 Ciclo 04: OR r15, r14, r12 Se o processador pudesse executar quatro instrues simultaneamente, o programa poderia ser posto em circulao em dois ciclos. Um exemplo seria: Ciclo 01: Ciclo 02: ADD r1, r2, r3 LD r4, (r5) SUB r7, r1, r9 MUL r5, r4, r4 ST (r13), r14 OR r15, r14, r12 ST (r13), r14

SUB r1, r12, r10

Note que, independente do nmero de instrues que o processador possa executar simultaneamente, no possvel colocar o programa em circulao em apenas um ciclo por causa das dependncias. Por exemplo as instrues SUB r7, r1, r9 e SUB r1, r12, r10.

Exemplo retirado de [Carter, N.]

Processadores Superescalares Processadores superescalares baseiam-se no hardware para extrair paralelismo no nvel de instruo de programas seqenciais. Durante cada ciclo, a lgica de circulao de instrues de um processador superescalar examina as instrues em um programa seqencial para determinar quais instrues podem ser postas em circulao naquele ciclo. Se existir suficiente paralelismo no nvel da instruo dentro de um programa, um processador superescalar pode executar uma instruo por unidade de execuo por ciclo, mesmo se o programa foi compilado originalmente para um processador que executa apenas uma instruo por ciclo.

Esta uma das maiores vantagens de processadores superescalares e o motivo pelo qual virtualmente todas as CPUs de PCs e de estaes de trabalho so processadores superescalares. Processadores superescalares podem executar programas que foram compilados originalmente para processadores puramente seqenciais e podem atingir desempenho melhor nestes programas do que processadores que no so capazes de explorar o paralelismo no nvel da instruo. A capacidade de processadores superescalares tem de explorar o paralelismo no nvel da instruo em programas seqenciais no significa que os compiladores sejam irrelevantes para sistemas construdos com processadores superescalares. De fato, bons compiladores so ainda mais crticos para o desempenho de computadores superescalares do que eles so para processadores puramente seqenciais. Processadores superescalares podem examinar em um dado momento apenas uma pequena janela de instrues de um programa para determinar quais instrues podem ser executadas em paralelo. Se um compilador for capaz de organizar as instrues de um programa de modo que grande quantidade de instrues ocorra dentro desta janela, um processador superescalar ser capaz de atingir um bom desempenho no programa.

Execuo Em-Ordem e Fora-De-Ordem Uma diferena significativa de complexidade e desempenho no projeto de processadores superescalar se o processador executa as instrues na ordem em que elas aparecem no programa ou se ele as executa em qualquer ordem, desde que no mude o resultado do programa. A execuo fora-de-ordem pode fornecer um desempenho muito melhor que a execuo em-ordem, mas exige um hardware muito mais complexo para ser implementada.

Processadores Em-Ordem Em processadores superescalares em-ordem o tempo para colocar um programa em circulao pode ser determinado ao se percorrer seqencialmente o cdigo para determinar quando cada instruo pode ser posta em circulao, de modo semelhante tcnica utilizada para processadores com pipeline que executam apenas uma instruo por ciclo. A diferena entre processadores superescalares em-ordem e processadores com pipeline que no so superescalares que um processador superescalar pode colocar uma instruo em circulao no mesmo ciclo que a instruo anterior no programa, se as dependncias de dados permitirem, desde que o nmero de instrues colocada em cada ciclo no exceda o nmero de instrues que o processador pode executar simultaneamente.

Exemplo: Quanto tempo a seguinte seqncia de instrues deveria ser executada em um processador em-ordem, com duas unidades de execuo, cada uma das quais podendo executar qualquer instruo? As operaes de carga tm latncia de dois ciclos e as demais operaes tm latncia de um ciclo. LD ADD SUB MUL r1, (r2) r3, r1, r4 r5, r6, r7 r8, r9, r10

Soluo: Assumindo que a operao LD posta em circulao no ciclo n, a ADD no pode ser posta em circulao at n+2 porque ela dependente de LD. A SUB independente de ADD e LD, de modo que tambm no pode ser posta em circulao no ciclo n+2 devido a necessidade do processador gastar um ciclo para carregar as instrues em-ordem. A MUL tambm independente de todas as instrues anteriores, mas precisa de n+3 para ser posta em circulao, porque o processador s pode colocar duas instrues em circulao. Portanto, demora quatro ciclos para que todas as instrues do programa sejam postas em circulao.

Exemplo retirado de [Carter, N.] Processadores Fora-de-Ordem Determinar o tempo de circulao de uma seqncia de instrues em um processador fora-de-ordem mais difcil que determinar o tempo de circulao em um processador em-ordem porque h muitas possibilidades de ordens nas quais as instrues podem ser executadas. Geralmente, a melhor abordagem comear pela seqncia de instrues para localizar as dependncias entre as instrues. Uma vez que as dependncias entre as instrues sejam entendidas, elas pode ser designadas para ciclos de circulao de modo a minimizar o atraso entre a execuo da primeira e da ltima instruo na seqncia. O esforo para encontra a melhor ordem possvel de um conjunto de instrues cresce exponencialmente com o nmero de instrues no conjunto, uma vez que todas as ordens possveis devem ser potencialmente consideradas. Assim, assumiremos que a lgica de instrues em um processador superescalar estabelece algumas restries sobre a

ordem na qual as instrues circulam, de modo a simplificar a lgica de circulao das instrues. A suposio que o processador tentar executar uma instruo to logo as dependncias de um programa permitam. Se existirem mais instrues que unidades de execuo o processador privilegiar as instrues que ocorrem primeiro no programa, mesmo que, eventualmente, houvesse uma ordem que implicasse em um menor tempo de execuo.

Com esta suposio para a circulao de instrues, torna-se muito mais fcil encontrar o tempo de circulao de uma seqncia de instrues em um processador forade-ordem. Iniciando com a primeira instruo de um seqncia, seguimos instruo por instruo, atribuindo cada uma ao primeiro ciclo no qual suas entradas j esto disponveis. Deve-se respeitar as limitaes de que o nmero de instrues que circulam no seja maior que o nmero mximo de instrues simultneas que o processador suporta e que no ultrapasse o nmero de unidades de execuo.
Exemplo: Quanto tempo a seguinte seqncia de instrues deveria ser executada em um processador fora-de-ordem, com duas unidades de execuo, cada uma das quais podendo executar qualquer instruo? As operaes de carga tm latncia de dois ciclos e as demais operaes tm latncia de um ciclo. LD ADD SUB MUL r1, (r2) r3, r1, r4 r5, r6, r7 r8, r9, r10

Soluo: A nica dependncia nesta seqncia entre as instrues LD e ADD. Por causa dessa dependncia, a instruo ADD precisa entrar em circulao pelo menos dois ciclos antes de LD. A SUB e a MUL poderiam ser postas em circulao no mesmo ciclo que a LD. Assumindo que SUB e LD so postas em circulao no ciclo n, a MUL posta em circulao no ciclo n+1 e ADD posta em circulao no ciclo n+2, dando um tempo de circulao de trs ciclos para este programa.

Exemplo retirado de [Carter, N.]

2.11. Exerccios

1. Explique o princpio por trs da tcnica de pipeline e mostre porque melhoram o desempenho.

2. Explique a estrutura de execuo de uma mquina pipeline.

3. Dado um processador sem pipeline, com durao de ciclos de 10 ns e latches com 0,5 ns de latncia, quais as duraes de ciclos das verses do processador com pipeline de 2, 4, 8 e 16 estgios? Qual a latncia de cada uma das verses? Que concluses podemos tirar sobre isso?

4. O que so bolhas em pipelines? Quais situaes as geram?

5. Explique as tcnicas de previso de desvios estticas e dinmicas.

6. Mostre trs mtricas utilizadas para medir desempenho de processadores.

7. O que paralelismo no nvel de instruo? Como os processadores exploram para melhorar o desempenho?

8. Comente sobre as limitaes do paralelismo no nvel de instruo.

9. Quanto tempo demora para que as seguintes instrues sejam executadas por um processador superescalar em-ordem, com duas unidades de execuo, onde qualquer unidade de execuo pode executar todas as instrues, as operaes de carga tm

latncia de 3 ciclos e todas as outras tm latncia de 2 ciclos? Assuma que o processador tem pipeline de 6 estgios. LD r4, (r5) LD r7, (r8) ADD r9, r4, r7 LD r10, (r11) MUL r12, r13, r14 SUB r2, r3, r1 ST (r2), r15 MUL (r22), r23 ST (r22), r23 ST (r24), r21 10. Repita a questo anterior considerando um processador fora-de-ordem.

UNIDADE II PROCESSADORES 3. RISC e CISC

3.1.Introduo Antes da dcada de 1980, havia um grande foco na reduo do intervalo semntico entre as linguagens utilizadas para programar computadores e as linguagens de mquina. Acreditava-se que tornar as linguagens de mquina mais parecidas s linguagens de alto nvel resultaria num melhor desempenho, pela reduo do nmero de instrues exigidas para implementar um programa e tornaria mais fcil compilar um programa em linguagem de alto nvel para a linguagem de mquina. O resultado final disto foi o projeto de conjuntos de instrues que continhas instrues muito complexas. medida que a tecnologia de compiladores era aperfeioada, os pesquisadores comearam a questionar estes sistemas com instrues complexas, conhecidos como computadores com conjunto de instrues complexas CISC (Complex Instruction Set Computer), forneciam desempenho melhor que sistemas baseados em conjuntos de instrues mais simples. Esta segunda classe ficou conhecida como computadores de conjunto de instrues reduzidas RISC (Reduced Instruction Set Computer). O argumento principal a favor dos computadores CISC que esses geralmente exigem menos instrues que os computadores RISC para executar uma dada operao, de modo que um computador CISC teria um desempenho melhor que um computador RISC que executasse instrues a mesma taxa. Alm disso, programas escritos para arquiteturas CISC tendem a tomas menos espao na memria que programas escritos para a arquitetura RISC. O principal argumento a favor dos computadores RISC que os seus conjuntos de instrues mais simples freqentemente permitem que eles sejam implementados com freqncia de relgio mais altas, permitindo executar mais instrues na mesma quantidade de tempo. Com freqncia de relgio maior, um processador RISC permite que ele execute programas em menos tempo do que um processador CISC levaria para executar os programas. Durante a dcada de 80, e no incio dos anos 90, houve muita controvrsia na comunidade de arquitetura de computadores com relao a qual das duas abordagens era a melhor, e, dependendo do ponto de vista, qualquer uma das duas pode ser considerada vencedora. Ao longo dos ltimos 20 anos, tem havido certa convergncia entre as arquiteturas, tornando difcil determinar se uma arquitetura RISC ou CISC. As arquiteturas RISC incorporam algumas instrues complexas mas teis das arquiteturas CISC que por

sua vez abandonaram instrues complexas que no eram utilizadas com freqncia suficiente para justificar a sua implementao. Uma diferena clara entre as arquiteturas CISC e RISC refere-se ao acesso a memria. Em muitas arquiteturas CISC, instrues aritmticas e outras podem ler as suas entradas ou escrever as suas sadas diretamente na memria, em vez de faz-lo sobre os registradores. Por exemplo, uma arquitetura CISC pode permitir uma operao ADD, na forma ADD(r1)(r2)(r3), onde os parnteses em volta do nome do registro indicam que o registro contm o endereo de memria onde um operando pode ser encontrado ou o resultado pode ser escrito. A mesma operao para ser realizada nas arquiteturas RISC, que utilizam o modelo carga-armazenamento ou load-store, necessitaria da seguinte seqncia de instrues:
LD r4, (r2) LD r5,(r3) ADD r6,r4,r5 ST (r1), r6 :. Carregar r2 em r4 :. Carregar r3 em r5 :. Somar r4 e r5 e guardar o valor em r6 :. Gravar r6 em r1

Exemplo retirado de [Carter, N.] Este exemplo mostra que uma arquitetura RISC pode exigir muito mais operaes para implementar uma funo do que uma arquitetura CISC, se bem que o exemplo bem extremo. Este exemplo tambm mostra que arquiteturas RISC normalmente utilizam mais registradores para implementar uma funo que as arquiteturas CISC, uma vez que todas as entradas de uma instruo precisam ser carregadas em um bando de registradores antes que a instruo possa ser executada. No entanto os processadores RISC tm a vantagem de dividir uma operao CISC complexa em vrias operaes RISC, permitindo ao compilador organizar as operaes RISC para um desempenho melhor. Atualmente, vemos processadores hbridos, que so essencialmente processadores CISC, porm que possuem internamente ncleos RISC. Assim, a parte CISC do

processador pode cuidar das instrues mais complexas, enquanto que o ncleo RISC pode cuidar das mais simples, nas quais mais rpido. Parece que o futuro nos reserva uma fuso destas duas tecnologias. Um bom exemplo de processador hbrido o Pentium Pro.

3.2. CISC No inicio dos anos 70, quer porque os compiladores eram muito pobres e pouco robustos, quer porque a memria era lenta e cara causando srias limitaes no tamanho do cdigo, levou a que certa corrente previsse uma crise no software. O hardware era cada vez mais barato e o software cada vez mais caro. Um grande nmero de investigadores e

projetistas defendiam que a nica maneira de contornar os grandes problemas que se avizinhavam era mudar a complexidade do (cada vez mais caro) software e transport-la para o (cada vez mais barato) hardware. Se houvessem funo mais comum que o programador tivesse de escrever vrias vezes em um programa, porque no implementar essas funes em hardware? Afinal de contas o hardware era barato e o tempo do programador no. Esta idia de mover o fardo da complexidade do software para o hardware foi a idia impulsionadora por trs da filosofia CISC, e quase tudo o que um verdadeiro CISC faz tem este objetivo. Alguns pesquisadores sugeriram que uma maneira de tornar o trabalho dos programadores mais fcil seria fazer com que o cdigo assembly se parecesse mais com o cdigo das linguagens de alto nvel (C ou Pascal). Os mais extremistas falavam j de uma arquitetura de computao baseada numa linguagem de alto nvel. Este tipo de arquitetura era CISC levado ao extremo. A sua motivao primria era reduzir o custo global do sistema fazendo computadores mais fceis de programar. Ao simplificar o trabalho dos programadores, pensava-se que os custos seriam mantidos em um nvel razovel. Uma lista das principais razes para se promover este tipo de arquitetura :

- reduzir as dificuldades de escrita de compiladores; - reduzir o custo global do sistema; - reduzir os custos de desenvolvimento de software; - reduzir a diferena semntica entre linguagens de programao e mquina; - fazer com que os programas escritos em linguagens de alto nvel corressem mais eficientemente; - melhorar a compactao do cdigo; - facilitar a deteco e correo de erros.

Resumindo, se uma instruo complexa escrita numa linguagem de alto nvel fosse traduzida exatamente em uma instruo assembly, ento:

- Os compiladores seriam mais fceis de escrever. Isto pouparia tempo e esforo para os programadores, reduzindo, assim, os custos de desenvolvimento de software; - O cdigo seria mais compacto, o que permitiria poupar em memria, reduzindo o custo global do hardware do sistema; - Seria mais fcil fazer a deteco e correo de erros o que, de novo, permitiria baixar os custos de desenvolvimento de software e de manuteno.

At este momento, centramos a ateno nas vantagens econmicas da arquitetura CISC, ignorando a questo do desempenho. A abordagem utilizada neste tipo de arquitetura para melhorar o desempenho das mquinas CISC foi, conforme j referido, transferir a complexidade do software para o hardware. Para melhor se compreender como que este tipo de abordagem afeta o desempenho vamos analisar um pouco a seguinte equao equao do desempenho de um processador uma mtrica normalmente utilizada para avaliar o desempenho de um sistema de computao:

Melhorar o desempenho significa reduzir o termo esquerda do sinal de igualdade, porque quanto menor for o tempo que um programa demora a ser executado, melhor ser o desempenho do sistema. As mquinas CISC tentam atingir este objetivo reduzindo o primeiro termo direita do sinal de igualdade, isto , o nmero de instrues por programa. Os pesquisadores pensaram que ao reduzir o nmero de instrues que a mquina executa para completar uma determinada tarefa, poder-se-ia reduzir o tempo que ela necessita para completar essa mesma tarefa, aumentando, assim, o seu desempenho. Assim, ao reduzir o tamanho dos programas conseguiam-se dois propsitos: por um lado era necessria uma menor quantidade de memria para armazenar o cdigo; e por outro o tempo de execuo era, tambm, diminudo, pois, havia menos linhas de cdigo para executar. Alm de implementar todo o tipo de instrues que faziam um variado nmero de tarefas como copiar strings ou converter valores, havia outra tctica que os projetistas utilizavam para reduzir o tamanho do cdigo e a sua complexidade: os modos de endereamento complexos. A figura 3.1 ilustra um esquema de armazenamento para um computador genrico. Se quisssemos multiplicar dois nmeros, teramos primeiro que carregar cada um dos operandos de uma localizao na memria para um dos registradores.

Figura 3.1: Esquema de armazenamento.

Vejamos o seguinte exemplo, meramente ilustrativo, da multiplicao de dois nmeros armazenados em memria. Uma vez carregados nos registradores, os operandos poderiam ser multiplicados pela unidade de execuo. Utilizaramos as seguintes linhas de cdigo para multiplicar o contedo das posies de memria [2:3] e [5:2] e armazenar o resultado na posio [2:3]:
MOV [A, 2:3] MOV [B, 5:2] MUL [A, B] MOV [2:3, A]

Este exemplo de cdigo explicita os passos que tm de ser dados pelo processador para multiplicar os contedos de duas posies de memria. H que carregar os dois registros com o contedo da memria principal, multiplicar os dois nmeros e guardar o resultado de novo na memria principal. Se quisssemos tornar o assembly menos complicado e mais compacto, poderamos modificar a arquitetura por forma a realizar a operao descrita com uma instruo apenas. Para atingir esse objetivo, a instruo MUL teria que ser alterada por forma a aceitar como parmetros duas posies de memria:
MUL [2:3, 5:2]

Evoluir de quatro instrues para apenas uma uma grande economia. Apesar da nova arquitetura ainda ter que carregar o contedo das duas posies de memria para os registradores, multiplic-los e voltar a armazenar na memria o resultado (no h como contornar isso) todas essas operaes de baixo nvel so feitas em hardware e so invisveis para o programador. Este um exemplo de endereamento complexo. Uma instruo assembly, na realidade leva em considerao uma srie complexa de operaes. Uma vez mais, isto um exemplo da filosofia CISC de transferir a complexidade do software para o hardware. Outra caracterstica das mquinas CISC era a utilizao de microcdigo. A microprogramao era uma das caractersticas primordiais que permitia aos projetistas a implementao de instrues complexas em hardware. Para melhor compreender o que a microprogramao, vamos considerar, resumidamente, a execuo direta. Usando execuo direta, a mquina carrega a instruo da memria, descodifica-a e envia-a para a unidade de execuo. Esta unidade de execuo pega na instruo a sua entrada e ativa alguns circuitos. Se, por exemplo, a mquina carrega a instruo de ADD com operadores em ponto flutuante e a fornece unidade de execuo, existe um circuito

que a carrega e direciona as unidades de execuo para garantir que todas as operaes de deslocamento, adio e normalizao sejam executadas corretamente. A execuo direta , na realidade, o que se poderia esperar que acontecesse dentro de um computador se no houvesse conhecimento do microcdigo. A principal vantagem da execuo direta que ela rpida. No existe qualquer tipo de abstrao ou traduo extras; a mquina apenas descodifica e executa as instrues em hardware. O seu maior problema que pode ocupar algum espao. De fato, se todas as instrues tm que ter um circuito que as execute, ento quanto maior for o nmero de instrues, maior vai ser o espao ocupado pela unidade de execuo. Por isso, executar diretamente as instrues no era uma boa abordagem para o projeto de uma mquina CISC. At porque os recursos (transistores) disponveis eram bastante escassos. Chegamos assim microprogramao. Com a microprogramao, quase como termos um miniprocessador dentro do processador. A unidade de execuo um processador de microcdigo que executa microinstrues. Os projetistas usam estas microinstrues para escrever microprogramas que so armazenados numa memria de controle especial. Quando uma instruo normal de um programa carregada da memria, descodificada e entregue ao processador de microcdigo, este ltimo executa a sub-rotina de microcdigo adequada. Esta sub-rotina diz s vrias unidades funcionais o que fazer e como fazer. Com a evoluo da tecnologia, o microcdigo estava cada vez mais rpido. Os processadores de microcdigo nos processadores modernos conseguem velocidades da ordem de 95% em relao execuo direta. Como o microcdigo era cada vez melhor, fazia cada vez mais sentido transferir funcionalidades do software para o hardware. Assim, os conjuntos de instrues cresceram rapidamente e o nmero mdio de instrues por programa decresceu. Contudo, medida que os microprogramas cresceram para fazer frente ao crescente nmero de instrues, alguns problemas comearam a surgir. Para manter um bom desempenho, o microcdigo tinha que ser altamente otimizado, eficiente e bastante compacto para que os custos de memria no comeassem a crescer demasiadamente. Como os microprogramas eram, agora, to grandes, era mais difcil test-los e detectar e corrigir erros. Como resultado, o microcdigo includo nas mquinas que vinham para o mercado tinha, algumas vezes, erros e tinha que ser corrigidos. Foram estas dificuldades de implementao do microcdigo que levaram os pesquisadores a questionar se a implementao de todas estas instrues complexas e elaboradas em microcdigo seria, realmente, o melhor caminho para fazer uso dos limitados recursos (transistores) existentes.

3.3. RISC Como j foi referido, muitas das implementaes da arquitetura CISC eram to complexas que eram distribudas por vrios chips. Esta situao no era, por razes bvias, ideal. Era necessria uma soluo em um nico chip, uma soluo que fizesse melhor uso dos escassos recursos disponibilizados (transistores). No entanto, para que todo um processador coubesse num s chip, algumas das suas funcionalidades teriam que ser deixadas de fora. Nesse intuito, realizaram-se estudos destinados a descobrir que tipos de situaes ocorrem mais freqentemente na execuo de aplicaes. A idia era descobrir em que tipo de tarefas o processador passava mais tempo e otimizar essas mesmas tarefas. Se tivessem que ser feitos compromissos, estes deviam ser feitos em favor da velocidade de execuo das tarefas nas quais o processador passa mais tempo a trabalhar, ainda que isso pudesse atrasar outras tarefas no to freqentes. Esta abordagem quantitativa, de fazer mais rpidas as tarefas mais comuns, provocou a inverso da filosofia iniciada pelos CISC e a complexidade teve que ser retirada do hardware e ser passada para o software. A memria estava mais barata e os compiladores eram cada vez mais eficientes por isso muitas das razes que conduziram os projetistas a complicar o conjunto de instrues deixaram de existir. Os pesquisadores diziam que o suporte para as linguagens de alto nvel poderia ser mais eficiente se fosse implementado em software, gastar recursos (transistores) preciosos para suportar as linguagens de alto nvel em hardware era um desperdcio. Esses recursos poderiam ser utilizados em outras tecnologias para melhorar o desempenho. Quando os investigadores tiveram que decidir quais as funcionalidades que teriam que ser retiradas, o suporte para o microcdigo foi o primeiro a sair, e com ele saram tambm um grupo de instrues complexas que, alegadamente, tornava o trabalho dos compiladores e dos programadores mais fcil. A idia era que quase ningum utilizava aquelas instrues to complexas. Ao compilar o cdigo, os compiladores preteriam este tipo de instrues em favor da gerao de um conjunto de instrues mais simples que realizassem a mesma tarefa. O que os pesquisadores concluram dos estudos realizados foi que um pequeno conjunto de instrues estava fazendo a maioria do trabalho. Aquelas instrues que raramente eram usadas poderiam ser eliminadas sem que houvesse perda de qualquer funcionalidade. Esta idia da reduo do conjunto de instrues, deixando de fora todas as instrues que no fossem absolutamente necessrias, substituindo as instrues mais complexas por conjuntos de instrues mais simples, foi o que esteve na origem do termo Reduced Instruction Set Compute - RISC. Ao incluir apenas um pequeno e criteriosamente

escolhido grupo de instrues numa mquina, poder-se-ia deixar de fora o suporte do microcdigo e passar a usar a execuo direta. No s o nmero de instrues foi reduzido, mas tambm o tamanho das mesmas. Foi decidido que todas as instrues RISC deveriam, sempre que possvel, demorar apenas um ciclo de relgio a terminar a sua execuo. A razo por trs desta deciso foi baseada em algumas observaes feitas pelos pesquisadores. Em primeiro lugar, percebe-se que tudo o que poderia ser feito usando as instrues de microcdigo, tambm poderia ser feito com pequenas e rpidas instrues de assembly. A memria que estava sendo usada para armazenar o microcdigo, poderia simplesmente ser usada para armazenar o assembler, assim a necessidade de microcdigo seria pura e simplesmente eliminada. por esta razo que muitas das instrues de uma mquina RISC correspondem a microinstrues numa mquina CISC. A segunda razo que levou o formato a ser uniformizado e demorar apenas um ciclo de relgio foi a observao de que a implementao do pipelining s realmente vivel se no tiver que lidar com instrues de diferentes graus de complexidade. Como o pipelining permite a execuo de vrias instrues em paralelo, uma mquina que o suporte consegue reduzir drasticamente o nmero mdio de ciclos por instruo (CPI Cycles Per Instruction). Baixar o nmero mdio de ciclos que as instrues necessitam para terminar a sua execuo uma maneira efetiva de baixar o tempo total que necessrio execuo de um programa. Relembremos, de novo a equao do desempenho. Os projetistas deste tipo de arquitetura tentaram reduzir o tempo por programa reduzindo o segundo termo direita do sinal de igualdade (ciclos/instruo), permitindo que o primeiro termo (instrues/programa) aumentasse ligeiramente. Pensava-se que uma reduo no nmero de ciclos por instruo, alcanada custa da reduo do conjunto de instrues, a introduo da tcnica de pipelining e outras funcionalidades (das quais j falaremos) compensariam largamente o aumento do nmero de instrues por programa. Verificou-se que esta filosofia estava correta. Alm da tcnica de pipelining, houve duas inovaes importantes que permitiram o decrscimo do nmero de ciclos por instruo mantendo o aumento do tamanho do cdigo em um nvel mnimo: a eliminao dos modos de endereamento complexos e o aumento do nmero de registradores internos do processador. Nas arquiteturas RISC existem apenas operaes registrador-registrador e apenas as instrues LOAD e STORE podem acessar a memria. Poder-se-ia pensar que o uso de LOADs e STOREs em vez de uma nica instruo que operasse na memria iria aumentar o nmero de instrues de tal modo que o espao necessrio em memria e o desempenho do sistema seriam afetados. Como posteriormente se verificou, existem algumas razes que fazem com que este pensamento no seja correto.

Verificou-se que mais de 80% dos operandos que apareciam em um programa eram variveis escalares locais. Isto significa que, se fossem adicionados mltiplos bancos de registradores arquitetura, estas variveis locais poderiam ficar armazenadas nos registradores, evitando ter que ir memria todas as vezes que fosse necessria alguma delas. Assim, sempre que uma sub-rotina chamada, todas as variveis locais so carregadas para um banco de registradores, sendo a mantidas conforme as necessidades. Esta separao das instrues LOAD e STORE de todas as outras, permite ao compilador programar uma operao imediatamente a seguir ao LOAD (por exemplo). Assim, enquanto o processador espera alguns ciclos para os dados serem carregados para o(s) registrador(es), pode executar outra tarefa, em vez de ficar parado espera. Algumas mquinas CISC tambm tiram partido desta demora nos acessos memria, mas, esta funcionalidade tem que ser implementada em microcdigo. Como se pode ver da discusso acima, o papel do compilador no controle dos acessos memria bastante diferente nas mquinas RISC em relao s mquinas CISC. Na arquitetura RISC, o papel do compilador muito mais proeminente. O sucesso deste tipo de arquitetura depende fortemente da inteligncia e nvel de otimizao dos compiladores que se aproveitam da maior responsabilidade que lhes concedida para poderem gerar cdigo mais otimizado. Este fato de transferir a competncia da otimizao do cdigo do hardware para o compilador foi um dos mais importantes avanos da arquitetura RISC. Como o hardware era, agora, mais simples, isto significava que o software tinha que absorver alguma da complexidade examinando agressivamente o cdigo e fazendo um uso prudente do pequeno conjunto de instrues e grande nmero de registradores tpicos desta arquitetura. Assim, as mquinas RISC dedicavam os seus limitados recursos (transistores) para providenciar um ambiente em que o cdigo poderia ser executado to depressa quanto o possvel, confiando no compilador para fazer o cdigo compacto e otimizado. Em resumo, existe um conjunto de caractersticas que permite uma definio de arquitetura bsica RISC. So elas:

Execuo de uma instruo por ciclo de clock: Esta a caracterstica mais importante das mquinas RISC (e que as distingue das mquinas CISC). Como conseqncia disto, qualquer operao que no possa ser completada em um ciclo no pode ser includa no conjunto de instrues. Assim, muitas mquinas RISC no possuem instrues de multiplicao e diviso, executando estas operaes atravs de seqncias de somas e deslocamentos criadas em tempo de compilao ou atravs de procedimentos de bibliotecas.

Arquitetura LOAD/STORE Dada a condio anterior de que todas as instrues devem ser executadas em um ciclo de clock, cria-se um problema com as instrues que acessam a memria, pois este tipo de operao leva muito tempo. A soluo adotada que todas as instrues comuns (ADD, MOV, AND) devem ter apenas registradores como operandos, ou seja, apenas o endereamento de registrador permitido. Entretanto, algumas instrues tm que referenciar a memria, de modo que duas instrues especiais, LOAD e STORE, so adicionadas a esta arquitetura. Estas duas instrues so a nica forma de ler ou escrever dados na memria.

Uso intenso de Pipelining Proibir que as instrues comuns acessem a memria no resolve o problema de como fazer com que as instrues LOAD e STORE operem em um ciclo. A soluo neste caso alterar ligeiramente o objetivo: ao invs de requerer que toda instruo deva ser executada em um ciclo, deve-se buscar a capacidade de iniciar uma nova instruo a cada ciclo, sem levar em conta quando ela concluda. Dessa forma, se em N ciclos consegue-se iniciar N instrues, na mdia se obtm a execuo de uma instruo por ciclo. Para atingir este objetivo modificado, todas as mquinas RISC possuem pipeline. No entanto, alguns cuidados devem ser tomados com o uso do pipeline. Por exemplo, o compilador deve garantir que qualquer instruo que venha depois de um LOAD no utilize o dado que est sendo buscado da memria.

Unidade de Controle Implementada por hardware Em uma mquina RISC, as instrues so executadas diretamente pelo hardware, eliminando a necessidade de qualquer microprograma na UC. Eliminar a necessidade de decodificao das instrues em microinstrues o segredo da velocidade das mquinas RISC. Se uma instruo complexa for realizada em uma mquina CISC utilizando 10 microinstrues de 0,1s cada, conclui-se que tal instruo leva 1s para ser executada. Em uma mquina RISC, para realizar a mesma operao seria necessrio utilizar 10 instrues RISC, e se cada uma levar 0,1s para ser executada, se gasta ento o mesmo tempo que a mquina CISC. A nica desvantagem da mquina RISC neste caso a ocupao um pouco superior de memria, visto que os programas tendem a ter mais instrues.

Instrues de Formato Fixo Como em uma mquina RISC a UC implementada atravs de hardware, os bits individuais de cada instruo so utilizados como entradas no bloco decodificador de instrues. Neste caso, no faz sentido utilizar instrues de tamanho varivel, pois no

existe nenhum microprograma embutido, capaz de retirar bytes da fila de instrues e analis-los um de cada vez por software.

Conjunto de Instrues e Modos de Endereamentos Reduzidos Este o motivo pelo qual as mquinas RISC receberam tal nome. No entanto, no existe nenhuma objeo em criar muitas instrues, desde que cada instruo seja executada em um ciclo. Na prtica, a limitao na quantidade de instrues recai sobre a complexidade do decodificador de instrues, que cresce gradativamente conforme o nmero de instrues, aumentando inclusive a rea ocupada da pastilha. Por razes de velocidade e complexidade, no desejvel ter mais do que um nmero mnimo de modos de endereamento.

Mltiplos Conjuntos de Registradores Por no possuir nenhum microprograma, grande parte da rea da pastilha liberada para outros propsitos. Muitas mquinas RISC utilizam este espao para implementar um grande nmero de registradores de CPU, que so utilizados para diminuir a quantidade de acessos memria (LOAD e STORE).

Necessidade de Compiladores Complexos Ao manter o hardware to simples quanto possvel de modo a obter a maior velocidade possvel, paga-se o preo de tornar o compilador consideravelmente mais complicado. Boa parte da complexidade do compilador reside na grande distncia semntica existente entre as linguagens de alto nvel e o conjunto de instrues reduzido das mquinas RISC. Alm disso, o compilador tem que lidar com caractersticas difceis, como cargas atrasadas e o gerenciamento do grande nmero de registradores. 3.4. RISC vs CISC Comentrios

Armazenamento e Memria: A memria, hoje em dia, rpida e barata; qualquer pessoa que tenha instalado recentemente um programa da Microsoft sabe que muitas das companhias que desenvolvem software j no tm em considerao as limitaes de memria. Assim, as preocupaes com o tamanho do cdigo que deram origem ao vasto conjunto de instrues da arquitetura CISC j no existem. De fato, os processadores da era ps-RISC tm conjuntos de instrues cada vez maiores de um tamanho e diversidade sem precedentes, e ningum pensa duas vezes no efeito que isso provoca no uso da memria.

Compiladores: O desenvolvimento dos compiladores sofreu um tremendo avano nos ltimos anos. De fato, chegou a um ponto tal que a prxima gerao de arquiteturas (como o IA-64 ou Merced da Intel) dependem apenas do compilador para ordenar as instrues tendo em vista a mxima taxa de instrues executadas. Os compiladores RISC tentam manter os operandos em registradores de forma a poderem usar simples instrues registrador-registrador. Os compiladores tradicionais, por outro lado, tentam descobrir o modo de endereamento ideal e o menor formato de instruo para fazerem os acessos memria. Em geral, os programadores de compiladores RISC preferem o modelo de execuo registrador-registrador de forma que os compiladores possam manter os operandos que vo ser reutilizados em registradores, em vez de repetirem os acessos memria de cada vez que necessrio um operando. Usam, por isso, LOADs e STOREs para acessar memria para que os operandos no sejam, implicitamente, rejeitados aps terminada a execuo de uma determinada instruo, como acontece nas arquiteturas que utilizam um modelo de execuo memria-memria.

VLSI: O nmero de transistores que cabem numa placa de silcio extremamente elevado e com tendncia a crescer ainda mais. O problema agora j no a falta de espao para armazenar as funcionalidades necessrias, mas o que fazer com todos os transistores disponibilizados. Retirar das arquiteturas as funcionalidades que s raramente so utilizadas j no uma estratgia moderna de projeto de processadores. De fato, os projetistas procuram afincadamente mais funcionalidades para integrarem nos seus processadores para fazerem uso dos recursos (transistores) disponveis. Eles procuram no o que podem tirar, mas o que podem incluir. A maioria das funcionalidades ps-RISC so uma conseqncia direta do aumento do nmero de transistores disponveis e da estratgia incluir se aumentar o desempenho.

Conjunto de Instrues: Uma instruo um comando codificado em 0s e 1s que leva o processador a fazer algo. Quando um programador escreve um programa em C, por exemplo, o compilador traduz cada linha de cdigo C em uma ou mais instrues do processador. Para que os programadores possam (se quiserem) ver estas instrues no tendo que lidar com 0s e 1s as instrues so representadas diferente por exemplo MOV, que copia um valor de uma localizao para outra ou ADD, que adiciona dois valores. A seguinte linha de cdigo adiciona dois valores (b e c) e coloca o resultado em a: a=b+c. Um compilador de C poderia traduzir isto na seguinte seqncia de instrues:

MOV ax, b ADD ax, c MOV a, ax

A primeira instruo copia o contedo da localizao de memria que contm o valor b para o registrador ax do processador (um registrador uma localizao de armazenamento dentro do processador que pode conter certa quantidade de dados, normalmente 16 ou 32 bits. Sendo uma parte integrante do processador, os acessos aos registrador so muitssimo mais rpidos que os acessos memria). A segunda instruo adiciona o valor c ao contedo de ax e a terceira copia o resultado, que est em ax, para a localizao onde a varivel a est armazenada. Qualquer programa, por mais complexo que seja, traduzido, em ltima anlise, em sries de instrues do gnero da anterior. Os programas de aplicao modernos contm, freqentemente, centenas de milhares de linhas de cdigo. Os sistemas operativos so ainda mais complexos: o Microsoft Windows 95 contm cerca de 10 milhes de linhas de cdigo, a maior parte dele escrito em C, e o Windows NT tem mais de 5 milhes de linhas de cdigo escritas em C e C++. Imagine-se o que seria ter que traduzir 1 milho de linhas de cdigo C num conjunto de instrues com uma a vinte ou trinta instrues por linha de cdigo e fcil de perceber o porqu de o software de hoje em dia ser to complicado e to difcil de corrigir. Quando um programa roda, o processador carrega as instrues uma a uma e as executa. Leva tempo carregar uma instruo e mais tempo ainda descodificar essa instruo para determinar o que representam os 0s e 1s. E quando comea a execuo, so necessrios um determinado nmero de ciclos para completar a execuo. Em um 386 a 25 MHz um ciclo de relgio igual a 40 ns, em um PENTIUM a 120 MHz um ciclo igual a menos de 9 ns. Uma maneira de fazer com que um processador rode o software mais rapidamente aumentar a velocidade do relgio. Outra diminuir o nmero de ciclos que uma instruo requer para completar a execuo. Se todo o resto fosse igual, um processador que funcionasse a 100 MHz teria apenas metade do desempenho de outro que funcionasse a 50 MHz, se o primeiro requeresse 4 ciclos de relgio por instruo e o segundo apenas um ciclo. Desde o incio da era dos microprocessadores, o grande objetivo dos projetistas de chips desenvolver uma CPU que requeira apenas 1 ciclo de relgio por instruo, no apenas certas instrues, mas TODAS as instrues. O objetivo original dos projetistas de chips RISC era limitar o nmero de instrues suportadas pelo chip de modo a que fosse possvel alocar um nmero suficiente de transistores a cada uma delas, para que a sua execuo precisasse apenas de um ciclo de relgio para se completar.

Em vez de disponibilizar uma instruo MUL, por exemplo, o projetista faria com que a instruo ADD executasse em 1 ciclo de relgio. Ento o compilador poderia fazer a multiplicao de a e b somando a a ele prprio b vezes ou vice versa. Uma CPU CISC poderia multiplicar 10 e 5 da seguinte forma:
MOV ax, 10 MOV bx, 5 MUL bx

enquanto um CPU RISC faria o mesmo de outro modo:


MOV ax, 0 MOV bx, 10 MOV cx, 5 begin: ADD ax, bx loop begin; loop cx vezes

claro que este apenas um exemplo ilustrativo, pois os chips RISC atuais tm, de fato, instrues de multiplicao.

Medida de Desempenho:

Como a medida de desempenho est diretamente relacionada a um programa em especfico, cria-se uma dificuldade em comparar processadores RISC e CISC dadas as diferenas conceituais entre ambas as arquiteturas. Como comparar adequadamente medidas de comportamento desigual? A unidade de medida MIPS (Milhes de Instrues Por Segundo) no eficaz para esta comparao, pois pode facilmente iludir o observador com os resultados, uma vez que um mesmo programa possui muito mais instrues em uma mquina RISC do que em uma CISC. Dessa forma, utiliza-se com maior freqncia a unidade MFLOPS (Milhes de Operaes de Ponto Flutuante Por Segundo), por medir a velocidade com que o processador efetivamente realiza os clculos matemticos. Recentemente, a controvrsia envolvendo RISC x CISC diminuiu, devido grande convergncia que vem ocorrendo entre as duas tecnologias. As mquinas RISC tornaram-se mais complexas, em virtude do aumento da densidade das pastilhas e das velocidades do hardware, e as mquinas CISC passaram a utilizar conceitos tradicionalmente aplicados s mquinas RISC, como o nmero crescente de registradores e maior nfase no projeto do pipeline de instrues.

3.5. Exerccios

1. Quais as principais caractersticas dos processadores com arquitetura RISC?

2. Quais as principais caractersticas dos processadores com arquitetura CISC?

3. Discorre sobre as principais diferenas entre processadores RISC e CISC enfocando as vantagens e desvantagens de cada uma dessas arquiteturas.

4. Atualmente, fcil diferenciar claramente se um processador segue uma arquitetura RISC ou CISC? Porqu?

4. WEBLIOGRAFIA Universidade Aberta do Piau UAPI http://www.ufpi.br/uapi Universidade Aberta do Brasil- UAB http://www.uab.gov.br Secretaria de Educao a Distncia do MEC SEED http://www.seed.mec.gov.br Associao Brasileira de Educao a Distncia ABED http://www.abed.org.br Apostilas, Tutoriais e Documentos http://gabriel.sg.urcamp.tche.br/beraldo/arquitetura_2.htm Guia do Hardware http://www.guiadohardware.net Larcio Vasconcelos http://www.laercio.com.br Gabriel Torres http://www.gabrieltorres.com.br Csar Augusto M. Marcon http://www.inf.pucrs.br/~marcon/ Ivan L. M. Ricarte http://www.dca.fee.unicamp.br/~ricarte/ Marcelo Trindade Rebonatto http://vitoria.upf.tche.br/~rebonatto Fabian Vargas http://www.ee.pucrs.br/~vargas Eduardo Moresi http://www.intelingencia.blogspot.com

3 REFERNCIAS

CARTER, N. Arquitetura de computadores. Porto Alegre: Bookman, 2003. HEURING, V. P; MURDOCCA, M. J. Introduo arquitetura de computadores. Rio de Janeiro: Campus, 2002. MORIMOTO, C. E. Hardware: o guia definitivo. Porto Alegre: Sulina, 2007. MONTEIRO, M. A. Introduo a organizao de computadores. Rio de Janeiro: LTC, 2007. PARHAMI, B. Arquitetura de computadores: de microprocessadores a supercomputadores. So Paulo: McGraw- Hill do Brasil, 2008. PATTERSON, D. A ; HENNESSY, J. L. Arquitetura de computadores: uma abordagem quantitativa. Rio de Janeiro: Campus, 2003. PATTERSON, D. A ; HENNESSY, J. L. Organizao e projeto de computadores. Rio de Janeiro: Campus, 2005. RIBEIRO, C ; DELGADO, J. Arquitetura de computadores. Rio de Janeiro: LTC, 2009. STALLINGS, W. Arquitetura e organizao de computadores. Prentice Hall, 2008. So Paulo:

TANENBAUM, A. S. Organizao estruturada de computadores. Rio de Janeiro: Prentice Hall, 2007. TORRES, G. Hardware: curso completo. Rio de Janeiro: Axcel Books, 2001. WEBER, R. F. Fundamentos de arquitetura de computadores. Porto Alegre: Bookman, 2008.

UNIDADE III SISTEMAS DE MEMRIA Resumo Os sistemas de memria tm papel crtico no desempenho de um sistema computacional. Estes sistemas recebem dados do mundo externo transferidos para processador, e tambm recebe dados do processador a transferir para mundo externo. A memria um conjunto de clulas, todas com o mesmo nmero de bits, sendo cada clula identificada por um nmero nico que seu endereo. Os acessos memria so realizados atravs de palavras de memria, sendo que a velocidade da memria, indicada pelo seu tempo de acesso, significativamente inferior velocidade com que o processador trabalha. O contedo desta Unidade influenciado fortemente pelos textos de Nicholas Carter, Rossano Pinto, Jean Laime, Ivan Ricarte e Alexandre Casacurta. O Captulo acompanhado de exerccios, sem a soluo, preferimos deixar o prazer desta tarefa ao leitor. A bibliografia e a webliografia ao fim das notas so mais do que suficiente para adquirir um conhecimento razovel sobre a organizao de computadores. Ao trmino da leitura desta Unidade, o estudante dever: a) Entender o funcionamento de um sistema de memria, b) Compreender o porqu do uso de hierarquia de memrias, e c) Ser capaz de implementar os algoritmos de substituio de pginas e, d) Conhecer a tcnica de memria virtual.

UNIDADE III SISTEMAS DE MEMRIA 1. MEMRIA

1.1.Introduo At agora, temos tratado os sistemas de memria como uma caixa preta na qual o processador pode colocar dados para posterior recuperao. Vamos explorar esta caixa preta, para explorar como so implementados os sistemas de memria nos sistemas de memria nos sistemas de computadores modernos. Este Captulo comea com uma discusso sobre latncia, taxa de transferncia e largura de banda, as trs grandezas utilizadas para medir o desempenho de sistemas de memria. Em seguida, abordaremos hierarquia de memria explicando como e porque vrias tecnologias de memria so utilizadas para implementar um nico sistema de memria. Finalmente, cobriremos as tecnologias de memria explicando como os chips de memria so implementados, a diferena entre SRAMs e DRAMs e como os diferentes modos de acesso encontrados em DRAMs so implementados.

1.2.Conceitos Bsicos Quando discutimos pipelines de processadores, utilizamos os termos latncia e taxa de transferncia para descrever o tempo utilizado para completar uma operao individual e a taxa na qual as operaes podem ser completadas. Esses termos tambm so utilizados na discusso de sistemas de memria com o mesmo significado. Outro termo tambm utilizado largura de banda, que descreve a taxa total pela qual os dados podem ser movimentados entre o processador e o sistema de memria. A largura de banda pode ser vista como o produto da taxa de transferncia e a quantidade de dados referidos por cada operao de memria.
Exemplo: Se o sistema de memria tem uma latncia de 10 ns por operao e uma largura de banda de 32 bits, qual a taxa de transferncia e a largura de banda do sistema de memria, assumindo que apenas uma operao pode ser realizada por vez e no existe retardo entre as operaes?

Soluo: Sabendo que taxa de transferncia = 1/latncia quando as operaes so realizadas seqencialmente ento a taxa de transferncia do sistema de memria de 100 milhes de operaes por segundo. Uma vez que cada operao faz referncia a 32 bits de dados, a largura de banda de 3,2 bilhes de bits por segundo.

Exemplo retirado de [Carter, N.]

Se todas as operaes de memria fossem executadas seqencialmente, calcular a latncia e a largura de banda de um sistema de memria seria simples. No entanto, muitos desses sistemas so projetados de forma que o relacionamento entre latncia e largura de banda sejam mais complexos. Sistemas de memria podem utilizar pipelining do mesmo modo que os processadores utilizam, permitindo que as operaes sobreponham a sua execuo, de modo a melhorar a taxa de transferncia. Algumas tecnologias de memria empregam um tempo fixo entre sucessivos acessos a memria. Esse tempo usado para preparar o hardware para o prximo acesso. Tal procedimento denominado pr-carregamento e tem o efeito de adiantar parte das tarefas envolvidas no acesso memria. Isso reduz o retardo entre o tempo no qual um endereo enviado para o sistema de memria at que a operao de memria seja completada. Se o sistema de memria estiver ocioso muito tempo, fazer o pr-carregamento ao final de cada operao de memria melhora o desempenho, porque normalmente no existe outra operao esperando para utilizar tal sistema.

1.3. Endereos de Memria

A memria formada por um conjunto de clulas (ou posies), cada uma das quais podendo guardar uma informao. Cada clula tem um nmero associado a ela, nmero esse conhecido como endereo da clula. por meio desse nmero que os programas podem referenciar a clula. Se a memria tiver n clulas, elas tero endereos de 0 a n1. Todas as clulas de uma memria dispem do mesmo nmero de bits. Se uma clula tiver k bits ela poder armazenar qualquer uma das 2k combinaes possveis para os bits. A figura 1.1 mostra trs organizaes diferentes para uma memria de 96 bits. Observe que clulas adjacentes tm endereos consecutivos (por definio).

Figura 1.1: Organizaes de memria. Figura adaptada de [Pinto, R.]

Os computadores que usam o sistema de numerao binria (incluindo aqueles que utilizam a notao octal e/ou a hexadecimal para nmeros binrios) expressam os endereos de memria como nmeros binrios. Se um determinado endereo tem m bits, o nmero mximo de clulas endereveis de 2m. Por exemplo, um endereo utilizado para referenciar a memria da figura 1.1 (a) precisa de no mnimo 4 bits para expressar todos os nmeros binrios entre 0 e 11. No entanto, no caso da figura 1.1 (b) e da figura 1.1 (c), trs bits de endereo sero suficientes. O nmero de bits no endereo determina o nmero mximo de endereos que podero ser referenciados diretamente na memria sendo completamente independente do nmero de bits por clula. Tanto uma memria com 212 clulas de 8 bits quanto outra memria com 212 clulas de 64 bits precisam de 12 bits para representar o endereo da clula. A clula a menor unidade enderevel em um computador. Nos ltimos anos, quase todos os fabricantes de computadores padronizaram o tamanho da clula em 8 bits, chamando essa clula de byte. Os bytes so agrupados em palavras. Um computador com uma palavra de 32 bits tem 4 bytes/palavra, enquanto um computador com uma palavra de 64 bits tem 8 bytes/palavra. A maioria das instrues de uma mquina opera sobre palavras, da a significncia do conceito. Por exemplo, uma instruo de soma muito provavelmente vai somar dois valores de 32 bits. Portanto, uma mquina de 32 bits dever ter registradores e instrues para tratar palavras de 32 bits, enquanto uma mquina de 64 bits deve ter registradores de 64 bits e instrues para mover, somar, subtrair etc. palavras de 64 bits. 1.4. Ordenao dos Bytes

Os bytes de uma palavra podem ser numerados da esquerda para a direita ou da direita para a esquerda. primeira vista, pode parecer que essa escolha no tem a menor importncia, mas, conforme ser visto em breve, ela tem implicaes muito srias e importantes. A figura 1.2 (a) mostra parte de uma memria de um computador de 32 bits, cujos bytes so numerados da esquerda para a direita, a exemplo da arquitetura do SPARC ou dos mainframes da IBM. A figura 1.2 (b) mostra a representao da memria de um computador de 32 bits, cujos bytes de uma palavra so numerados da direita para a esquerda, a exemplo das mquinas da famlia Intel. O computador em que a numerao dos bytes das palavras atribui um nmero maior parte mais significativa da palavra chamado de big endian, enquanto o computador da figura 1.2(b) conhecido como computador little endian.

Figura 1.2: Big endian e Little endian. Figura adaptada de [Pinto, R.]

muito importante que o leitor entenda que, tanto no sistema big endian quanto no little endian, um nmero inteiro de 32 bits, com um determinado valor numrico, digamos 6, representado pelos bits 110 nos trs bits mais direita (de mais baixa ordem) de uma palavra, sendo os demais 29 bits preenchidos com zeros. No esquema big endian, os

bits 110 estaro no byte 3 (ou 7, ou 11 etc.), enquanto no little endian esses bits estaro no byte 0 (ou 4, ou 8 etc.). Em ambos os casos, a palavra contendo esse nmero inteiro estar armazenada no endereo 0. Ambas as representaes funcionam muito bem e so consistentes. Os problemas comeam quando uma mquina big endian tenta enviar um registro a outra mquina little

endian por meio de uma rede. Vamos admitir que a mquina big endian envie o registro byte a byte para a little endian, comeando do byte 0 e terminando no byte 19. (Sejamos otimistas e suponhamos que todos os bits transmitidos chegaro inclumes outra ponta.) Portanto, o byte 0 da mquina big endian vai para a memria da mquina little endian no byte 0, e assim por diante, conforme mostra a figura 1.3 (c). Uma soluo bvia seria um software para inverter os bytes de uma palavra, depois de eles serem copiados. Isso passa a tratar corretamente os nmeros, mas incorretamente a string, conforme mostra a figura 1.3 (d). Observe que, ao ler a string de caracteres, o computador primeiro l o byte 0 (um espao), depois o byte 1 (caractere C), e assim por diante. Em funo disso, fcil constatar que a leitura feita na ordem inversa.

Figura 1.3: Transmisso entre Big endian e Little endian. Figura adaptada de [Pinto, R.]

No h uma soluo simples para esse problema. Se incluirmos um cabealho na frente de cada item de dados, indicando o tipo (caractere, nmero inteiro etc.) e o tamanho do dado que se segue, teremos uma soluo que funciona, mas que extremamente ineficiente. A incluso desse cabealho permitiria que o receptor fizesse somente as converses necessrias. Seja como for, deve ter ficado claro que a falta de um padro para a ordenao dos bytes da palavra dos computadores um dos principais problemas para a troca de dados entre mquinas diferentes.

1.5. Cdigos com Correo de Erros Os dados armazenados na memria dos computadores podem ocasionalmente ser alterados em razo de oscilaes na tenso de alimentao ou de outras causas que, no momento, no so importantes. Para se prevenir contra esses tipos de erro, algumas memrias armazenam as informaes usando um cdigo que permita a correo ou a deteco de erros. Quando esses cdigos so usados, h necessidade de se acrescentarem bits extras a cada palavra de memria, de modo a permitir a verificao da exatido da informao armazenada. Quando uma palavra lida da memria, os bits armazenados permitem verificar a ocorrncia eventual de erros que tenham corrompido a informao armazenada. Para entender o tratamento dado aos erros, necessrio examinar o que vem a ser um erro em uma informao armazenada na memria de um computador. Suponha que uma determinada palavra de memria contenha m bits de dados aos quais vamos acrescentar mais r bits de redundncia ou de verificao. Seja n o novo tamanho da palavra (ou seja, n = m + r). Uma unidade de n bits, sendo m de dados e r de redundncia ser chamada de palavra de cdigo. Dadas duas palavras de cdigo quaisquer, digamos 10001001 e 10110001, possvel determinar o nmero de bits diferentes que ocupam a mesma posio nessas duas palavras. Nesse caso, existem trs bits diferentes em posies correspondentes. Para determinar isso, basta que seja calculada a funo booleana OU EXCLUSIVO correspondente s duas palavras de cdigo, contando a seguir o nmero de bits 1 gerados no resultado. Chama-se distncia de Hamming ao nmero de bits correspondentes que diferem em duas palavras de cdigo quaisquer. O significado desse resultado muito importante, pois, se duas palavras distam d, ser necessria a ocorrncia de d erros para que uma palavra seja transformada na outra. Por exemplo, as palavras de cdigo 11110001 e 00110000 distam 3 unidades de Hamming, pois so necessrios trs erros para que uma se converta na outra.

Com uma palavra de memria de m bits, aparentemente todos os 2m padres de bits so legais, mas, se considerarmos que vamos acrescentar a esses m bits os r bits de verificao, ento, das 2n combinaes possveis, somente 2m sero vlidas. Dessa maneira, quando a memria l um cdigo invlido o sistema sabe que houve um erro no valor armazenado naquela posio. Se conhecermos o algoritmo para clculo dos bits de verificao, ser possvel construir uma tabela com todas as palavras de cdigo vlidas, e dessa tabela extrair as duas palavras de cdigo com a menor distncia de Hamming. Essa distncia ser distncia para todo o cdigo. As propriedades de deteco de erros e de correo de erros de um cdigo dependem fundamentalmente da sua distncia de Hamming. Para detectar d erros, necessria uma distncia de Hamming de d + 1, pois em tal cdigo no h como a ocorrncia de d erros transformar uma palavra de cdigo vlida em outra palavra de cdigo vlida. Assim tambm, para corrigir d erros, precisamos de um cdigo com distncia de 2d + 1 para permitir que, mesmo em presena de d erros, a palavra de cdigo original possa ser recomposta por meio dos bits redundantes. Vamos examinar um exemplo simples de um cdigo com deteco de erros. Para isto, considere um cdigo no qual um bit de paridade seja acrescentado aos bits de dados do cdigo. Esse bit de paridade deve ser escolhido de modo a fazer com que a quantidade de bits 1 na palavra de cdigo seja sempre um nmero par (ou mpar). Tal cdigo tem distncia de Hamming igual a 2 portanto, a ocorrncia de um nico erro produz uma palavra de cdigo invlida. Ou seja, so necessrios dois erros para transformar uma palavra de cdigo vlida em outra palavra de cdigo vlida. Esse esquema pode ser usado para detectara ocorrncia de um nico erro na informao armazenada. Toda vez que uma informao com paridade errada for lida da memria, sinalizada uma condio de erro. Nesse caso, corno o erro s detectado, e no corrigido, o programa no pode continuar seu processamento, porm a ao de deteco impede o clculo de resultados errados. Como exemplo de um cdigo com correo de erro, considere o caso de um cdigo com somente quatro palavras de cdigo vlidas:

Exemplo: 0000000000, 0000011111, 1111100000, e 1111111111

Esse cdigo tem uma distncia de Hamming igual a 5, o que significa que ele pode corrigir dois erros. Quando o receptor recebe uma palavra de cdigo igual a 0000000111, ele sabe que o correto deveria ser 0000011111 (considerando a ocorrncia de no mximo dois erros). No entanto, se ocorrerem trs erros, transformando, por exemplo, a palavra de cdigo 0000000000 em 0000000111, esses erros no podero ser corrigidos.

1.6.Hierarquia de Memria

At agora, tratamos os sistemas de memria como estruturas de um nico nvel, como mostra a figura 1.4 (a). Na realidade, sistemas de memria de computadores modernos tm hierarquias de memrias de vrios nveis, como ilustrado na figura 1.4 (b) e figura 1.4 (c). A figura 1.4 (b) mostra uma hierarquia de memria em dois nveis: uma memria principal e uma memria secundria. J a figura 1.4 (c) apresenta uma hierarquia em trs nveis, consistindo de uma cache, uma memria principal e uma memria secundria. A razo principal pela qual sistemas de memria so construdos como hierarquias que o custo por bit de uma tecnologia de memria geralmente proporcional velocidade da tecnologia.

Figura 1.4: Hierarquia de memria.

Em uma hierarquia de memria, os nveis mais prximos ao processador contm uma quantidade relativamente pequena de memria que implementada em uma tecnologia de memria rpida, de modo a fornecer baixo tempo de acesso. Progredindo para baixo na hierarquia, cada nvel contm mais capacidade de armazenamento e o acesso demora mais que o nvel acima dele. O objetivo de uma hierarquia de memria manter os dados que sero mais referenciados por um programa nos nveis superiores da hierarquia, de modo que a maioria das solicitaes de memria possam ser tratadas no nvel ou nos nveis superiores. Isto resulta em um sistema de memria que tem um tempo de acesso mdio semelhante ao tempo de acesso do nvel mais rpido, mas com o custo mdio por bit semelhante quele do nvel mais baixo. Em geral, no possvel prever quais localizaes de memria sero acessadas com mais freqncia, de modo que os computadores utilizam um sistema baseado em demanda para determinar quais os dados manter nos nveis mais altos da hierarquia. Quando a solicitao de memria enviada para a hierarquia, o nvel mais alto verificado

para ver se ele contm o endereo. Se for assim, a solicitao completada. Caso contrrio, o prximo nvel mais baixo verificado, com o processo sendo repetido at que, ou o dado seja encontrado, ou o nvel mais baixo da hierarquia seja atingido, no qual se tem a garantia que o dado est contido. Tradicionalmente, uma hierarquia de memria incluindo os registradores e colocando informaes em relao capacidade, custo e tempo de acesso expressa na fora de pirmide como mostra a figura 1.5. A representao em forma de pirmide facilita a compreenso, pois no topo esto os registradores, de acesso quase imediato com capacidade reduzida, enquanto na base encontra-se a memria secundria, disponvel em grandes quantidades, porm de acesso mais lento.

Figura 1.5: Hierarquia de memria- Pirmide. 1.7.Propriedades de uma Hierarquia

As principais propriedades de um sistema de hierarquia de memria so: Incluso, Coerncia e Localidade de Referncia. Considere uma hierarquia de memria como mostra a figura 1.6 onde M1 , M2 , . . . , Mn tal que Mi mais rpida porm menor que Mi+1 e os registradores do processador podem ser considerados como o nvel 0 da hierarquia de memria.

Figura 1.6: Hierarquia de memria. Figura adaptada de [Ricarte, I.]

Incluso: Cada conjunto de dados em Mi deve estar contido no conjunto de dados em Mi+1: M1

M2 . . .

Mn. Assim, Mn seguramente contm todos os itens de dados, e os

subconjuntos de Mn so copiados para os outros nveis Mi, i < n, ao longo do processamento. Um item em Mi seguramente ter cpias em Mi+1 , Mi+2 , . . . , Mn , porm, um item em Mi+1 no est necessariamente em Mi quando requisitado quele nvel. Um item miss caracteriza uma falha de acesso ao item no nvel em que ele foi solicitado.

Coerncia: Cpias de um mesmo item devem ser consistentes ao longo de nveis sucessivos da hierarquia de memria. H dois mtodos bsicos para manuteno da consistncia entre os nveis da hierarquia:

- write-through: atualizao imediata em Mi+1 quando item modificado em Mi; - write-back: atualizao s realizada quando o item estiver sendo retirado de Mi. Localidade de Referncia: Localidade o conceito fundamental para o funcionamento adequado da hierarquia de memria. definida como o comportamento de programas segundo o qual referncias memria geradas pela CPU, para acesso a instrues ou a dados, faz com que estes acessos estejam agrupados em certas regies (ou seqncia) no tempo ou no espao. As duas principais formas de localidade so:

- Localidade temporal: Os itens referenciados no passado recente tm maior chance de serem novamente referenciados em um futuro prximo. Ocorre por exemplo em sub-rotinas, iteraes e referncias a variveis temporrias. - Localidade espacial: Tendncia de processos em acessar itens cujos endereos esto prximos. Ocorre por exemplo em operaes em arranjos e referncias a segmentos de programas. A localidade espacial est relacionada com a localidade seqencial, pela qual elementos em posies consecutivas da memria tm chance de serem acessados em seqncia, como ocorre, por exemplo, em referncias a instrues de um programa e a elementos de um arranjo.

Pelo princpio da localidade, possvel construir sistemas de memria hierrquica de forma eficiente. Exemplos de seu uso incluem sistemas de memria cache, entre processador e memria principal; e sistemas de memria virtual, operando com as memrias principal e secundria. Memrias cache podem estar localizadas no chip do

processador (internas) ou ser construdas externamente, com dispositivos SRAM. A memria principal geralmente utiliza dispositivos DRAM, enquanto que a memria secundria usualmente constituda por discos magnticos.

Tempo Mdio de Acesso Foi desenvolvido um conjunto de termos para descrever hierarquia de memria. Quando um endereo que est sendo referenciado por uma operao encontrado em um nvel da hierarquia de memria, diz-se que ocorreu um acerto naquele nvel. Caso contrrio diz-se que ocorreu uma falha. De modo semelhante, a taxa de acertos (hit ratio) de um nvel a porcentagem de referncia em um nvel que resultam em acertos, e a taxa de falhas (miss ratio) o percentual de referncias em um nvel que resultam em falhas. Se conhecemos a taxa de acerto e o tempo de acesso (tempo para completar uma solicitao) para cada nvel na hierarquia de memria, podemos calculas o tempo mdio de acesso da hierarquia. Para cada nvel na hierarquia o tempo mdio de acesso : (Tacerto x Pacerto) + (Tfalha x Pfalha) onde, Tacerto o tempo para completar uma solicitao que acerte, Pacerto a taxa de acertos do nvel (expressa como uma probabilidade), Tfalha o tempo de acesso mdio dos nveis abaixo deste na hierarquia e Pfalha a taxa de falha do nvel. Uma vez que a taxa de acertos do nvel mais baixo 100%, podemos comear no nvel mais baixo e trabalhar em direo ao topo para calcular o tempo de acesso mdio de cada nvel na hierarquia. 1.8.Tecnologias de Memria Hoje em dia, a memria principal fabricada a base de pastilhas de semicondutores. Contudo, existem vrios outros tipos de memrias que utilizam os semicondutores. A Tabela 1, apresentada a seguir, contm uma lista dos principais tipos de memrias de semicondutores. Tabela 1: Memria de semicondutores.

Figura adaptada de [Laime, J.]

Dentre os tipos de memrias ilustrados anteriormente, a RAM (Random-Access Memory) a mais conhecida. O objetivo da RAM permitir que os dados sejam lidos e escritos rapidamente e de modo fcil. Conforme mostra a tabela, tanto a leitura quanto a escrita so feitas por meio de sinais eltricos. Para manter seus dados ela requer o fornecimento de energia constante (voltil). Alm disso, existem RAMs dinmicas (usam capacitores para armazenar informaes, portanto requerem sinais de refresh) e estticas (construdas atravs de flip-flops), mas ambas so volteis. Em geral, as RAMs estticas so mais rpidas que as dinmicas. O segundo tipo ilustrado foi a memria ROM (Read-Only Memory), memria apenas de leitura. Sua principal vantagem que os dados ficam permanentemente armazenados, no precisando ser carregados a partir de um dispositivo secundrio. Os dados so gravados na pastilha durante a fabricao, atravs de mscaras que contm as informaes. Portanto, no permitido erros durante o processo de fabricao. Conseqentemente, para que o processo se torne mais barato necessrio a fabricao de muitas unidades com a mesma informao. Por outro lado, quando poucas unidades sero fabricadas, a melhor alternativa a memria ROM programvel (Programmable ROM). A PROM permite que os dados sejam gravados apenas uma vez tambm, s que isso feito eletricamente pelo fornecedor ou pelo cliente, aps sua fabricao. Para isso necessrio um aparelho de gravao de PROM. Outra classe de memrias so aquelas destinadas principalmente para operaes de leitura, tais como: EPROM (Erasable Programmable Read Only Memory),

EEPROM (Electrically Erasable Programmable Read Only Memory) e FLASH. A EPROM uma PROM que pode ser apagada. Pode ser programvel (com queimadores de PROM) e apagada (com mquinas adequadas, base de raios ultravioleta). Tem utilizao semelhante da PROM, para testar programas no lugar da ROM, ou sempre que se queira produzir ROM em quantidades pequenas, com a vantagem de poder ser apagada e reutilizada. J a EEPROM uma EPROM que pode ser apagada por processo eletrnico, sob controle da UCP, com equipamento e programas adequados. mais cara e geralmente utilizada em dispositivos aos quais se deseja permitir a alterao, via modem, possibilitando a carga de novas verses de programas distncia ou ento para possibilitar a reprogramao dinmica de funes especficas de um determinado programa, geralmente relativas ao hardware (p.ex., a reconfigurao de teclado ou de modem, programao de um terminal, etc.).

Figura 1.7: Tecnologia de memria. Figura adaptada de [Casacurta, A.]

1.9.Organizao dos Chips de Memria Os chips de memria SRAM e DRAM tm a mesma estrutura bsica, que mostrada na figura 1.8. Os dados so armazenados em uma matriz retangular de clulas de bit, cada uma das quais retm um bit de dados. Para ler dados da matriz, metade do endereo a ser lido (geralmente os bits de ordem mais alta) enviado para um decodificador. O decodificador aciona (vai para o nvel alto) a linha de palavra correspondente ao valor dos bits de entrada, o que faz com que todas as clulas de bit na linha correspondente acionem os seus valores sobre as linhas de bit as quais elas so conectadas. Ento, a outra metade do endereo usada como entrada para um multiplexador que seleciona a linha de bit

apropriada e orienta a sua sada para os pinos de sada do chip. O mesmo processo utilizado para armazenar dados no chip, exceto que o valor a ser escrito orientado para a linha de bit adequada e escrito na clula de bit escolhida.

Figura 1.8: Organizao de chips de memria. Figura adaptada de [Carter, N.]

A maioria dos chips de memria gera mais de um bit de sada. Isto feito, ou construindo-se diversas matrizes de clulas de bit, cada uma das quais produz um bit de sada, ou projetando um multiplexador que seleciona as sadas de diversas linhas de bit e as orienta para a sada do chip. A velocidade de um chip de memria determinada por alguns fatores, incluindo o comprimento das linhas de bit, de palavra e como as clulas de bit so construdas. Linhas de palavras e de bits mais longas tm capacitncia e resistncia mais altas, de modo que, medida que seus comprimentos aumentam, demora mais para acionar um sinal sobre elas. Por esse motivo, muitos chips de memria modernos so construdos com muitas matrizes de clulas de bit pequenas para manter as linhas de palavra e de bit curtas. As tcnicas utilizadas para construir tais clulas afetam a velocidade do chip de memria porque elas afetam quanta corrente est disponvel para acionar a sada da clula de bit sobre as linhas de bit, o que determina quanto tempo demora para propagar a sada da clula de bit para o multiplexador. Como veremos nas duas prximas sees, clulas de bit SRAM podem acionar muito mais corrente do que clulas de bit DRAM, o que um dos princpios pelos quais as SRAMs tendem a ser muito mais rpidas do que as DRAMs.

SRAMs A principal diferena entre SRAMs e DRAMs como as suas clulas de bit so construdas. Como mostra a figura 1.9, o ncleo de uma clula de bit SRAM consiste de dois inversores conectados em uma configurao back-to-back. Uma vez que um valor tenha sido colocado na clula de bit, a estrutura em anel dos dois inversores manter o valor indefinidamente, porque cada entrada de um inversor oposta do outro. Este o motivo pelo qual SRAMs so chamadas de RAMs estticas, os valores armazenados na RAM permanecem l enquanto houver energia aplicada ao dispositivo. Por outro lado, DRAMs perdero o seu valor armazenado ao longo do tempo, motivo pelo qual so conhecidas como RAMs dinmicas.

Figura 1.9: Clula de bit SRAM. Figura adaptada de [Carter, N.]

Para ler o valor de uma clula de bit, a linha de palavra tem que ser colocada no nvel alto, o que faz com que os dois transistores liguem as sadas dos inversores linha de bit e linha de bit invertido. Estes sinais, ento, podem ser lidos pelo multiplexador e enviados para fora do chip. Escrever em uma clula de bit SRAM feito ativando a linha de palavra e acionando os valores apropriados sobre a linha de bit e a linha de bit invertido. Enquanto o dispositivo que est acionando alinha de bit for mais forte que o inversor, os valores na linha de bit sero dominados pelo valor originalmente armazenados na clula de bit e, ento, sero armazenados na clula de bit quando a linha de palavra deixar de ser ativada.

DRAMs A figura 1.10 mostra uma clula de bit DRAM. Em vez de um par de inversores utilizado um capacitor para armazenar os dados na clula de bit. Quando a linha de palavra ativada, o capacitor conectado a linha de bit, permitindo que o valor armazenado na clula seja lido ao se examinar a tenso armazenada no capacitor, ou escrever colocando uma nova tenso sobre o mesmo. Esta figura mostra porque as DRAMs geralmente tm capacidades muito maiores que as SRAMs construdas com a mesma tecnologia de fabricao: as SRAMs exigem muito mais componentes para implementar uma clula de bit. Tipicamente, cada inversor exige dois transistores, para um total de seis transistores em uma clula de bit (algumas implementaes utilizam pouco mais ou menos transistores). Em contraste, uma clula de bit DRAM exige apenas um transistor e com capacitor, o que toma menos espao no chip.

Figura 1.10: Clula de bit DRAM. Figura adaptada de [Carter, N.]

As figuras 1.9 e 1.10 tambm servem para mostrar porque as SRAMs so mais rpidas que as DRAMs. Nas SRAMs, um dispositivo ativo (o inversor) aciona o valor armazenado na clula de bit sobre a linha de bit e a linha de bit invertido. Nas DRAMs, o capacitor conectado a linha de bit quando a palavra ativada, e esse sinal muito mais

fraco do que o produzido pelos inversores na clula de bit SRAM. Assim, a sada de uma clula de bit DRAM demora muito mais para que seja acionada sobre a alinha de bit do que a clula de bit SRAM demora para acionar a equivalente linha de bit. As DRAMs so chamadas de RAMs dinmicas porque os valores armazenados em cada clula de bit no so estveis. Ao longo do tempo, fugas de corrente faro com que as cargas armazenadas nos capacitores sejam drenadas e perdidas. Para evitar que o contedo de uma DRAM seja perdido, ela precisa ser refrescada. Essencialmente uma operao de refrescamento (refresh) l os contedos de cada clula de bit em uma linha da matriz de clulas de bit e, ento, escreve os mesmos valores de volta nas clulas de bit, restaurando-os aos valores originais. Desde que cada linha na DRAM seja refrescada com freqncia suficiente para que nenhuma das cargas do capacitor caiam baixo o suficiente para que o hardware interprete mal os valores armazenando em uma linha, a DRAM pode manter o seu contedo indefinidamente. Uma das especificaes de uma DRAM o tempo de refrescamento (refresh time), que a freqncia pela qual uma linha pode ficar sem ser refrescada antes que esteja correndo o risco de perder o seu contedo.
Exemplo: Se uma DRAM tem 512 linhas e o seu refresh time de 10 ms, com que freqncia, em mdia, uma operao de refresh de linha precisa ser feita? Soluo: Dado que o refresh time de 10 ms, cada linha precisar ser refrescadano mnimo a cada 10 ms. Uma vez que h 512 linhas, temos que fazer 512 operaes de refrescamento de linha em um perodo de 10 ms que resulta em um refresh de linha a cada 1,95 . 10 s. importante comentar que os projetistas devem definir como a operao de refresh realizada se uniformemente, por blocos ou outras alternativas.
-5

Exemplo retirado de [Carter, N.]

1.10.Exerccios 1. Explique: latncia, taxa de transferncia e endereamento, para sistemas de memria.

2. Explique as tcnicas de armazenamento big endian e little endian. Considere que a memria de um computadore uma matriz 3x3, como seria a representao, nos dois sistemas, da palavra "MEMORIA" sabendo que cada clula pode contem apenas um caractere?

3. O que e para que serve a distncia de Hamming? Qual a distncia de Hamming de 10001001 e 10110001.

4. Por que as memrias so organizadas em nveis hierrquicos? Quais as propriedades de cada nvel?

5. Em uma hierarquia de memria de dois nveis, se o nvel mais alto tem tempo de acesso de 8 ns e o nvel mais baixo tem um tempo de acesso de 60 ns, qual a taxa de acerto no nvel mais alto para obtermos um tempo de acesso mdio de 10 ns?

6. Se um sistema de memria tem um tempo de acesso mdio de 12 ns. O nvel mais alto tem taxa de acertos de 90 % e um tempo de acesso de 5 ns. Qual o tempo de acesso do nvel mais baixo?

7. Mostre na forma de uma rvore as tecnologias de memria e comente sobre cada uma delas.

8. Explique a organizao dos chips de memria.

9. Quais as diferenas entre as clulas de bit de uma memria DRAM e SRAM? H diferena de velocidade entre elas? Qual a mais rpida? Por que?

10. Para os seguintes casos determine se SRAMs ou DRAMs seriam os blocos de memria mais adequados para o sistema de memria e explique o porque. Assuma que existe apenas um nvel de memria. a. um sistema de memria no qual o desempenho o dispositivo mais importante; b. um sistema de memria no qual o custo o fator mais importante; c. um sistema no qual os dados sejam armazenados por longos perodos sem qualquer atividade por parte de processador.

UNIDADE III SISTEMAS DE MEMRIA 2. MEMRIA CACHE 2.1.Introduo Ao longo do tempo, os processadores tm sido sempre mais rpidos que as memrias. E fato que o tempo de operao das memrias tem melhorado bastante, mas, como o mesmo ocorre com os processadores, permanece o descompasso entre as velocidades desses dois importantes componentes de um sistema computacional. Na medida em que se torna tecnicamente possvel a colocao de mais e mais circuitos dentro de um chie, os projetistas dos processadores vm usando essas novas facilidades para implementar o processamento pipeline e o processamento superescalar, tornando os processadores ainda mais rpidos. J os projetistas das memrias tm usado as novas tecnologias para aumentar a capacidade das memrias e no a sua velocidade operacional, de maneira que o problema do desbalanceamento das velocidades de operao entre esses dois dispositivos tem-se agravado com o tempo. Na prtica, isso significa que um processador deve esperar vrios ciclos de clock at que a memria atenda a uma requisio sua para leitura ou escrita. Quanto mais lenta for a memria em relao velocidade do processador, mais ciclos de espera sero necessrios para ele compatibilizar a operao desses dois elementos de hardware. Conforme mencionamos anteriormente, existem duas maneiras de se lidar com essa questo. Na mais simples delas, as operaes de leitura da memria devem ser iniciadas sempre que o processador encontrar uma instruo de READ. Mesmo com a operao de leitura iniciada, o processador deve continuar seu processamento, s parando se uma instruo tentar usar a palavra requisitada da memria antes de ela estar disponvel. Quanto mais lenta a memria, mais freqentes se tornaro essas paradas e maior a penalidade quando elas ocorrerem. Por exemplo, se o tempo de operao da memria for de 10 ciclos, muito provvel que uma das 10 instrues seguintes tentar usar a palavra que estiver sendo lida. A outra soluo fazer com que o compilador gere seu cdigo, evitando que instrues usem os valores requisitados memria antes que esses valores estejam disponveis, impedindo assim a parada do processador. O problema dessa soluo que ela muito simples de descrever, mas muito difcil de implementar. Muitas vezes, depois de uma instruo de LOAD nada mais h a fazer, de maneira que o compilador ser obrigado a inserir instrues NOP (no operation), instrues essas que nada fazem, a no ser gastar o tempo do processador. Na verdade, essa soluo substitui a parada por hardware, prevista na soluo anterior, e institui a parada por software, mantendo inalterada a degradao da performance do sistema como um todo.

Vale observar que a raiz do problema anteriormente citado econmica, e no tecnolgica. Os engenheiros j sabem como construir memrias que sejam to rpidas quanto os processadores. Acontece que, para operar a essa velocidade, as memrias precisam estar implementadas dentro do chip do processador (a transferncia de dados no barramento um dos principais ofensores da velocidade das memrias). A colocao de uma memria muito grande dentro do chip do processador vai aumentar o seu tamanho, e evidentemente vai torn-lo mais caro, mas, mesmo que o custo no venha a ser uma limitao, existem restries fortes para o aumento indiscriminado do tamanho do chip. Portanto, a escolha fica entre ter uma pequena quantidade de memria rpida, dentro do chip, ou uma grande quantidade de memria lenta, fora do chip. Na verdade, um bom projeto deveria buscar memrias rpidas, de alta capacidade, a preos baixos. A busca de tais caractersticas levou a tcnicas que combinam memrias pequenas e rpidas com memrias grandes e lentas, na tentativa de fazer com que o sistema opere com a velocidade da memria mais rpida e com a capacidade da memria mais lenta, tudo isso a um preo bastante acessvel. A memria pequena e rpida ficou conhecida pelo nome de cache (da palavra francesa cacher, que significa esconder). A idia bsica que h por trs do conceito de memria cache muito simples: as palavras de memria mais usadas pelo processador devem permanecer armazenadas na cache. Quando o processador precisar de uma palavra, ele primeiro busca essa palavra na cache. Somente no caso de ela no estar armazenada na cache que a busca se dar na memria principal. Se uma parte substancial dos acessos for satisfeita pela cache, o tempo mdio de acesso ser muito pequeno, prximo ao da cache. 2.2.Conceitos Bsicos Parte do problema de limitao de velocidade do processador refere-se diferena de velocidade entre o ciclo de tempo da CPU e o ciclo de tempo da memria principal, ou seja, a memria principal transfere bits para a CPU em velocidades sempre inferiores s que a CPU pode receber e processar os dados, o que acarreta, muitas vezes, a necessidade de acrescentar-se um tempo de espera para a CPU (wait state). O problema de diferena de velocidade se torna difcil de solucionar apenas com melhorias no desempenho das memrias principais, devido a fatores de custo e tecnologia. Enquanto o desempenho dos microprocessadores, por exemplo, vem dobrando a cada 18/24 meses, o mesmo no acontece com a taxa de transferncia e o tempo de acesso das memrias DRAM, que vm aumentando pouco de ano para ano. Na busca de uma soluo para este problema foi desenvolvida uma tcnica que consiste da incluso de um dispositivo entre a CPU e a memria principal, denominado de memria cache, cuja funo acelerar a transferncia de informaes entre CPU e memria principal e, com isso, aumentar o desempenho do sistema de computao.

A cache um nvel na hierarquia de memria entre a CPU e a memria principal. construda com memria SRAM, que muito mais rpida do que a DRAM, normalmente empregada na construo das memrias principais. A cache fabricada com tecnologia semelhante da CPU e, em conseqncia possui tempos de acesso compatveis, resultando numa considervel reduo da espera da CPU para receber dados e instrues. Como o custo da memria esttica muito alto, a cache normalmente muito menor do que a memria principal. Com a incluso da cache pode-se enumerar, de modo simplista, o funcionamento do sistema como segue:

- sempre que a CPU vai buscar uma nova informao (instrues ou dados), ela acessa a memria cache; - se a informao estiver na cache (cache hit), ela transferida em alta velocidade (compatvel com a da CPU); - se a informao no estiver na cache (cache miss), ento o sistema est programado para transferir a informao desejada da memria principal para a cache. S que esta informao no somente da instruo ou dado desejado, mas dele e de um grupo subseqente, na pressuposio de que as instrues/dados do grupo sero requeridas pela CPU em seguida e, portanto, j estaro na cache quando necessrio. A figura 2.1 ilustra a troca de informaes entre a CPU, cache e memria principal.

Figura 2.1: Transferncia de dados CPU/Cache/MP.

Para haver algum aumento no desempenho de um sistema de computao com a incluso da memria cache necessrio que haja mais acertos (hits) do que faltas (miss). Isto , a memria cache somente produtiva se a CPU puder encontrar uma quantidade aprecivel de palavras na cache, suficientemente grande para sobrepujar as eventuais perdas de tempo com as faltas, que redundam em transferncia de um bloco de palavras da memria principal para a cache, alm da efetiva transferncia da informao desejada.

A implementao de memrias foi referendada pela existncia muito forte de localidades na execuo dos programas. Existem dois tipos de localidades:

- Localidade Temporal: as posies da memria, uma vez acessadas, tendem a ser acessadas novamente num futuro prximo. Normalmente ocorrem devido ao uso de laos de instrues, acessos a pilhas de dados e variveis como ndices, contadores e acumuladores;

- Localidade Espacial: se um programa acessa uma palavra de memria, h uma boa probabilidade de que o programa acesse num futuro prximo, uma palavra subseqente ou um endereo adjacente quela palavra que ele acabou de acessar. Em outras palavras, os endereos em acessos futuros tendem a ser prximos de endereos de acessos anteriores. Ocorre devido ao uso da organizao seqencial de programas.

O tamanho da cache influencia diretamente no desempenho do sistema, uma vez que para existir um aumento real de desempenho o nmero de acertos deve superar e muito o nmero de faltas. Com uma cache maior, h maior probabilidade de a informao desejada estar contida nela, porm outros fatores tambm devem ser levados em conta, como o tempo de acesso da memria principal, da memria cache e a natureza dos programas em execuo (principio da localidade). Um fator que influencia diretamente o desempenho da cache a forma de mapeamento dos dados da memria principal nela. Como o tamanho da cache bem menor que o da memria principal, apenas uma parte dos dados da memria principal pode ser copiada na cache. Existem basicamente trs formas de mapeamento:

- Mapeamento Completamente Associativo: a palavra pode ser colocada em qualquer lugar da cache. Neste caso deve ser armazenado na cache no somente o dado mas tambm o endereo. Para descobrir se a posio procurada est armazenada na cache, feita a comparao simultnea de todos os endereos, caso seja localizado (cache hit) o dado devolvido ao processador. Caso o endereo pesquisado no se encontre na cache (cache miss) a memria principal acessada.

- Mapeamento Direto: cada palavra deve ser armazenada em um lugar especfico na cache, o qual que depende do seu endereo na memria principal. O endereo dividido em duas partes: tag e ndice. O ndice usado como endereo na cache e indica a posio onde pode estar armazenada a palavra. O tag usado para conferir

se a palavra que est na cache a que est sendo procurada, uma vez que endereos diferentes, com o mesmo ndice sero mapeados sempre para a mesma posio da cache.

- Mapeamento Set-Associativo: um projeto intermedirio entre os dois anteriores. Neste caso, existe um nmero fixo de posies onde a palavra pode ser armazenada (pelo menos duas) que chamado um conjunto. Como na cache com mapeamento direto, o conjunto definido pela parte do endereo chamada ndice. Cada um dos tags do conjunto so comparados simultaneamente como tag do endereo. Se nenhum deles coincidir ocorre um cache miss.

Outro problema a ser considerado na implementao de uma memria cache a poltica de substituio das palavras. Deve-se responder a seguinte pergunta: Em que local da cache ser colocada a nova linha? A poltica de substituio define qual linha ser tirada da cache para dar lugar a uma nova. No caso do mapeamento direto, cada palavra tem um lugar predefinido, ento no existe escolha. Para o mapeamento completamente associativo, pode-se escolher qualquer posio da cache e no set-associativo, qualquer posio dentro do conjunto definido pelo ndice. As principais polticas de substituio so:

- Substituio Aleatria: neste caso escolhida uma posio qualquer da cache aleatoriamente para ser substituda. mais simples de implementar mas no leva em conta o princpio da localidade temporal.

- FIFO (First-in First-out): remove a linha que est a mais tempo na cache. Exige a implementao de uma fila em hardware.

- LRU (Least Recently Used): remove-se a linha que a mais tempo no referenciada. Exige implementao de um contador para cada linha. Quando um hit ocorre na linha seu contador zerado enquanto todos os demais so incrementados. Quando for necessrio substituir uma linha, ser retirada aquela cujo contador tiver o valor mais alto.

Uma vez que todas as solicitaes feitas a memria so realizadas atravs da cache, caso a CPU fizer a escrita de uma posio que estiver armazenada na cache, se esta alterao no for repassada para a memria principal, pode-se perder a atualizao quando a linha da cache for substituda. Para evitar este problema pode-se adotar duas estratgias:

- Escrita em ambas (Write-Through): cada escrita na cache imediatamente repetida na memria principal;

- Escrita no retorno (Write-Back): as escritas so feitas apenas na cache, mas ela ser escrita na MP quando for substituda. Pode-se escrev-la mesmo se no foi alterada ou somente se tiver sido modificada.

Com a poltica write-through pode haver uma grande quantidade de escritas desnecessrias na memria principal, com natural reduo do desempenho do sistema. J a poltica write-back minimiza esta desvantagem, porm a memria principal fica potencialmente desatualizada para utilizao por outros dispositivos a ela ligados, como mdulos de E/S, o que os obriga a acessar dados na cache. Uma vez que tanto os dados como as instrues so mantidos na memria principal, ambos tiram proveito da memria cache. Pode-se adotar cache unificada ou separada para cada tipo de contedo. A soluo que considera uma cache unificada (instrues e dados usando a mesma cache) mais simples de projetar e estabelece automaticamente um equilbrio entre as buscas de instrues e as buscas de dados. No entanto, a tendncia atual para projetos que usem caches divididas, uma cache para instrues e outra para dados. Esse projeto conhecido como arquitetura de Harvard, uma aluso ao computador Mark III projetado por Howard Aiken, que tinha memrias diferentes para instrues e para dados. O uso cada vez mais difundido dos processadores pipeline o principal responsvel por levar os projetistas na direo da arquitetura de Harvard. A unidade de busca das instrues faz o acesso s instrues ao mesmo tempo que a unidade de busca de operandos faz o acesso aos dados necessrios execuo de outra instruo buscada anteriormente. A adoo do modelo de duas caches permite acesso em paralelo a instrues e a dados, enquanto o modelo da cache unificado no permite. Alm disso, considerando-se que as instrues no so modificadas durante a execuo de um programa, o contedo da memria de instrues no precisa ser escrito de volta na memria principal. A figura 2.2 ilustra a arquitetura de cache Harvard, onde caches so implementadas de maneira separadas.

Figura 2.2: Arquitetura Harvard. Figura adaptada de [Carter, N.]

2.3. Associatividade A associatividade de uma cache determina quantas posies dentro dela podem conter um dado endereo de memria. Caches com alta associatividade permitem que cada endereo seja armazenado em muitas posies na cache, o que reduz as faltas de cache causadas por conflitos entre linhas que precisam ser armazenadas no mesmo conjunto de posies. Caches com baixa associatividade restringem o nmero de posies nos quais um endereo pode ser colocado, o que aumenta o nmero de faltas, mas simplifica o hardware da cache, reduzindo a quantidade de espao ocupado por ela e, freqentemente, reduzindo o tempo de acesso.

Cache com Mapeamento Completamente Associativo As caches com mapeamento completamente associativo, ou simplesmente caches associativas permitem que qualquer endereo seja armazenado em qualquer linha da cache. Quando uma operao de memria enviada cache, o endereo da solicitao precisa ser comparado a cada entrada na matriz de etiquetas para determinar se os dados referenciados pela operao esto contidos nela.

Cache com Mapeamento Direto As caches com mapeamento direto so o extremo oposto das associativas. Nela, cada endereo de memria s pode ser armazenado em uma posio da cache. Este mtodo o mais simples, sendo cada bloco da memria principal mapeado em uma nica linha da cache. Para que isso seja feito podemos pensar no seguinte mecanismo: i = j mdulo m

onde, i o nmero da linha da cache; j o nmero do bloco da memria principal e; m o nmero de linhas da cache. Assim, podemos implementar esta forma de mapeamento de maneira muito fcil, usando tambm o endereo da informao na memria principal. Como ilustra a figura 2.3, quando uma operao de memria enviada a uma cache com mapeada diretamente, um subconjunto dos bits do endereo utilizado para selecionar a linha da cache que pode conter o endereo e outro subconjunto de bits utilizado para selecionar o byte dentro de uma linha da cache para o qual o endereo aponta. Em geral, os n bits menos significativos no endereo so utilizados para determinar a posio do endereo dentro de sua linha de cache, onde n o log na base 2 do nmero de bytes na linha. Os m bits mais significativos seguintes, onde m o log2 do nmero de linhas na cache, so utilizados para selecionar a linha na qual o endereo pode ser armazenado, como mostra a figura 2.4.

Figura 2.3: Cache com mapeamento direto. Figura adaptada de [Carter, N.]

Figura 2.4: Desmembramento do endereo. Figura adaptada de [Carter, N.]

Exemplo: Em uma cahce com mapeamento direto, com capacidade de 16 Kbytes e comprimento de linha de 32 bytes, quantos bits so utilizados para determinar, dentro de uma linha de cache, o byte ao qual uma operao de memria faz referncia, e quantos bits so utilizados para selecionar a linha que pode conter os dados dentro da cache?

Soluo: log 32 na base 2 = 5, de modo que so necesrios 5 bits para determinar qual p byte, dentro de uma linha de cache, est sendo referenciado. Com linhas de 32 bits, exixtem 512 linhas na cache de 16 Kbytes, de modo que so necessrios 9 bits para selecionar qual a linha pode conter o endereo (log de 512 na base 2 = 9).

Exemplo retirado de [Carter, N.]

Caches mapeadas diretamente tm a vantagem de necessitar de uma rea significativamente menor para ser implementada fisicamente no chip que as caches associativas, porque requerem apenas um operador para determinar se houve um acerto. Se o endereo do item solicitado for igual ao endereo associado quela posio de memria, o cache hit est caracterizado. Caso contrrio, como nesta organizao o item no pode estar em nenhuma outra posio, o cache miss caracterizado. Alm disso, caches mapeadas diretamente tm tempos de acesso menores porque exige uma s comparao a ser examinada para determinar se houve um acerto, enquanto que as caches associativas precisam examinar cada uma das comparaes e escolher a palavra de dados adequada para enviar ao processador. No entanto, caches mapeadas diretamente tendem a ter taxas de acerto menores do que as associativas, devido aos conflitos entre linhas que so mapeadas na mesma rea da cache. Cada endereo s pode ser colocado em um local, o que determinado pelos m

bits de endereo, como o ilustrado na figura 2.4. Se dois endereos tm o mesmo valor naquele bit, eles sero mapeados sobre a mesma linha da cache e no podero residir ao mesmo tempo. Um programa que alterasse referncias a estes dois endereos nunca geraria um acerto, uma vez que a linha contendo o endereo estaria sempre sendo descartada antes da prxima referncia ao endereo. Assim, a cache poderia ter uma taxa de acerto igual a 0%, ainda que o programa fizesse referncia a apenas dois endereos. Na prtica, caches mapeadas diretamente, em especial de grande capacidade, podem obter boas taxas de acerto, embora tendam a ser menores que quelas que fornecem vrias posies possveis para cada linha de dados. Em resumo, as vantagens deste tipo de organizao incluem: - simplicidade de hardware, e conseqentemente custo mais baixo; - no h necessidade de escolher uma linha para ser retirada da cache, uma vez que h uma nica opo; e - operao rpida

Apesar de simples, esta estratgia pouco utilizada devido sua baixa flexibilidade. Como h apenas uma posio na cache onde o item solicitado pode estar localizado, a probabilidade de presena na cache pode ser baixa. Assim, pode haver queda sensvel no desempenho em situaes onde o processador faz referncias envolvendo itens que so mapeados para uma mesma posio da cache.

Cache com Mapeamento Set-Associativo As caches com mapeamento set-associativo, ou grupo associativo, so uma combinao de caches associativas e mapeadas diretamente. Nela, existe um nmero fixo de posies (chamadas de conjuntos ou grupos), nas quais um dado endereo pode ser armazenado. O nmero de posies em cada conjunto a associatividade da cache. Este tipo de organizao oferece um compromisso entre o desempenho da organizao por mapeamento direto e a flexibilidade da organizao completamente associativa. A cache particionada em N conjuntos, onde cada conjunto pode conter at K linhas distintas, onde K a associatividade da cache; na prtica, 1 < K <= 16. Uma dada linha s pode estar contida em um nico conjunto, em uma de suas K linhas. O conjunto selecionado determinado a partir do endereo do item sendo referenciado. O endereo de um item particionado em trs segmentos: - Offset: se uma linha com L bytes contm W palavras, ento os log2W bits menos significativos identificam qual dos itens em uma linha est sendo buscado. Se o menor item enderevel for um byte, ento L = W. - Lookup: os log2 N bits seguintes identificam em qual dos N conjuntos, de 0 a N-1, a linha deve ser buscada. - Tag: os bits mais significativos que restam do endereo servem como identificao da linha, que armazenada no diretrio do cache.

Por exemplo, considere uma cache de 4 Kbytes com linhas de 32 bytes, onde o menor item enderevel fosse um byte e os endereos gerados pelo processador sejam de 24 bits. Se a associatividade da cache K = 4, ento esta cache tem espao para 512 conjuntos. Portanto, o tamanho do tag dever ser 10 bits. O controlador da cache deve ser capaz de fazer a busca de uma linha em um tempo prximo a um tempo de ciclo dos dispositivos de memria rpida utilizados no mdulo cache. A estratgia para tanto comparar o valor de lookup simultaneamente com os K possveis candidatos do conjunto selecionado (usando K comparadores). Ao mesmo tempo, K linhas so acessadas dos dispositivos de memria e trazidas para K registros rpidos caso a linha buscada esteja presente no cache, ela simplesmente selecionada de um destes registros. Caso contrrio, um sinal de cache miss ativado.

Para facilitar o entendimento, a figura 2.5 mostra uma cache set-associativo de dois caminhos, na qual existem duas posies para cada endereo. De modo semelhante a uma cache mapeada diretamente, um subconjunto dos bits de endereo utilizado para selecionar o conjunto que pode conter o endereo. A cache set-associativo de dois caminhos implica no fato de existirem duas etiquetas que podem ser comparadas com o endereo de referncia de memria para determinar se houve ou no um acerto. Se qualquer uma das etiquetas for igual ao endereo, houve um acerto e a matriz de dados selecionada. Caches com maior associatividade tm estruturas semelhantes, possuindo apenas mais comparadores para determinar se houve ou no um acerto.

Figura 2.5: Cache com mapeamento set-associatvo de dois caminhos. Figura adaptada de [Carter, N.]

Uma cache set-associativo, por agrupar linhas em conjuntos, necessita menos bits para identificar conjuntos do que seria necessrio para identificar individualmente as linhas onde o endereo pode ser armazenado. O nmero de conjuntos de uma cache pode ser obtido calculando-se o nmero de linhas e dividindo-o pela associatividade.
Exemplo: Quantos conjuntos existem em uma cache set-associativo de dois caminhos, com capacidade de 32 Kbytes e linhas de 64 bytes, e quantos bits de endereo so utilizados para selecionar um conjunto nesta cache? E em uma cache set-associativo de oito caminhos, com a mesma capacidade e comprimento de linha?

Soluo: Uma cache de 32 Kbytes, com linhas de 64 bytes, contm 512 linhas de dados. Em uma cache set-associativo de dois caminhos, cada conjuntos contm duas linhas, de modo que existem 256 conjuntos. Log na base 2 de 256 igual a oito, de modo que so utilizados 8 bits de um endereo para selecionar um conjunto mapeado por um endereo. A cache set-associativo de oito caminhos tem 64 linhas e utiliza seis bits do endereo para selecionar o conjunto.

Exemplo retirado de [Carter, N.]

Em geral, caches set-associativo tm taxas de acerto melhores que as mapeadas diretamente, mas taxas de acerto piores que caches associativas do mesmo tamanho. As caches set-associativo, por permitir que cada endereo seja armazenado em vrios locais, eliminam alguns dos conflitos que ocorrem com caches com mapeamento direto. A diferena nas taxas de acertos uma funo da capacidade da cache, do grau de associatividade e dos dados referenciados por um programa. Alguns programas fazem referncia a grandes blocos de dados contguos, conduzindo a poucos conflitos, enquanto outros fazem referncia a dados dispersos, o que pode conduzir a conflitos, se os endereos de dados mapearem o mesmo conjunto na cache. Quanto maior uma cache, menos o benefcio que ela tende a ter da associatividade, uma vez que existe uma probabilidade menor que dois endereos sejam mapeados para a mesma rea. Ir de uma cache diretamente mapeada para uma setassociativo de dois caminhos normalmente causa redues significativas na taxa de faltas. Aumentar para quatro caminhos tem um efeito menos significativo, e crescer alm disso tende a ter pouco efeito, exceto para caches extremamente pequenas. Por esse motivo, caches set-associativo de dois caminhos so mais comuns nos microprocessadores atuais. 2.4. Polticas de Substituio Quando uma linha precisa ser descartada de uma cache para abrir espao para os dados que esto entrando, ou porque a cache est cheia, ou ainda por causa de conflitos relacionado a um conjunto, a poltica de substituio determina qual linha ser descartada. Em caches mapeadas diretamente, no existe escolha, uma vez que alinha est entrando s pode ser colocada em uma nica posio, mas caches set-associativas e associativas contm vrias linhas que poderiam ser descartadas para abrir espao para a linhas que est entrando. Nessas caches, o objetivo geral da poltica de substituio minimizar as faltas futuras da cache, ao descartar uma linha que no ser referenciada no futuro. Vrios algoritmos so implementados como polticas de substituio de pginas. Por exemplo, temos:

- Algoritmo timo: proposto por Belady em 1966, o que apresenta o melhor desempenho computacional e o que minimiza o nmero de faltas de pginas. No entanto, sua implementao praticamente impossvel. A idia do algoritmo retirar da memria a pgina que vai demorar mais tempo para ser referenciada novamente. Para isso, o algoritmo precisaria saber, antecipadamente, todos os acessos memria realizados pela aplicao, o que impossvel em um caso real. Por estes motivos, o algoritmo timo s utilizado em simulaes para se estabelecer o valor timo e analisar a eficincia de outras propostas elaboradas.

- FIFO (First-in, First-out): um algoritmo de substituio de pginas de baixo custo e de fcil implementao que consiste em substituir a pgina que foi carregada h mais tempo na memria (a primeira pgina a entrar a primeira a sair). Esta escolha no leva em considerao se a pgina est sendo muito utilizada ou no, o que no muito adequado pois pode prejudicar o desempenho do sistema. Por este motivo, o FIFO apresenta uma deficincia denominada anomalia de Belady: a quantidade de falta de pginas pode aumentar quando o tamanho da memria tambm aumenta. Por estas razes, o algoritmo FIFO puro muito pouco utilizado. Contudo, sua principal vantagem a facilidade de implementao: uma lista de pginas ordenada pela idade. Dessa forma, na ocorrncia de uma falta de pgina a primeira pgina da lista ser substituda e a nova ser acrescentada ao final da lista.

- LRU (Least Recently Used): um algoritmo de substituio de pgina que apresenta um bom desempenho substituindo a pgina menos recentemente usada. Esta poltica foi definida baseada na seguinte observao: se a pgina est sendo intensamente referenciada pelas instrues muito provvel que ela seja novamente referenciada pelas instrues seguintes e, de modo oposto, aquelas que no foram acessadas nas ltimas instrues tambm provvel que no sejam acessadas nas prximas. Apesar de o LRU apresentar um bom desempenho ele tambm possui algumas deficincias quando o padro de acesso seqencial (em estruturas de dados do tipo vetor, lista, rvore), dentro de loops, etc. Diante dessas deficincias foram propostas algumas variaes do LRU, dentre eles destacamos o LRU-K. Este algoritmo no substitui aquela que foi referenciada h mais tempo e sim quando ocorreu seu k-ltimo acesso. Por exemplo, LRU-2 substituir a pgina que teve seu penltimo acesso feito h mais tempo e LRU-3 observar o antepenltimo e assim por diante. A implementao do LRU tambm pode ser feita atravs de uma lista, mantendo as pginas mais referenciadas no incio (cabea) e a menos referenciadas no final da lista. Portanto, ao substituir retira-se a pgina que est no final da lista. O maior problema com esta organizao que a lista deve ser atualizada a cada nova referncia efetuada sobre as pginas, o que torna alto o custo dessa manuteno.

- MRU (Most Recently Used): faz a substituio da ltima pgina acessada. Este algoritmo tambm apresenta algumas variaes, semelhante ao LRU. Por exemplo, o MRU-n escolhe a n-ltima pgina acessada para ser substituda. Dessa forma, possvel explorar com mais eficincia o princpio de localidade temporal apresentada pelos acessos.

- NRU (Not Recently Used): procura por pginas que no foram referenciadas nos ltimos acessos para serem substitudas. Tal informao mantida atravs de um bit. Este algoritmo tambm verifica, atravs de um bit de modificao, se a pgina teve seu contedo alterado durante sua permanncia em memria. Esta informao tambm vai ajudar a direcionar a escolha da pgina. As substituies das pginas seguem a seguinte prioridade: pginas no referenciadas e no modificadas, pginas no referenciadas, pginas no modificadas e pginas referenciadas e modificadas.

- LFU (Least Frequently Used): escolhe a pgina que foi menos acessada dentre todas as que esto carregas em memria. Para isso, mantido um contador de acessos associado a cada pgina (hit) para que se possa realizar esta verificao. Esta informao zerada cada vez que a pgina deixa a memria. Portanto, o problema desse algoritmo que ele prejudica as pginas recm-carregadas, uma vez que por estarem com o contador de acessos zerado a probabilidade de serem substitudas maior. Qual uma possvel soluo para este problema? (Estabelecer um tempo de carncia) S pginas fora desse tempo que podem ser substitudas. Tal estratgia deu origem ao algoritmo FBR (Frequency-Based Replacement).

- MFU (Most Frequently Used): substitui a pgina que tem sido mais referenciada, portanto, o oposto do LFU. O controle tambm feito atravs de contadores de acesso. O maior problema deste algoritmo que ele ignora o princpio de localidade temporal.

- WS (Working Set): possui a mesma poltica do LRU. No entanto, este algoritmo no realiza apenas a substituio de pginas ele tambm estabelece um tempo mximo que cada pgina pode permanecer ativa na memria. Assim, toda pgina que tem seu tempo de permanncia esgotado ela retirada da memria. Portanto, o nmero de pginas ativas varivel. O WS assegura que as pginas pertencentes ao working set processo permanecero ativas em memria.

Os algoritmos apresentados so alguns dos disponveis na literatura. Outras implementaes ou variaes dos destacados tambm podem ser encontradas. Deixamos essa tarefa a cargo do leitor.

2.5. Polticas de Atualizao Como j discutido, nveis em hierarquia de memria podem usar uma poltica writeback ou de write-through para tratar o armazenamento. Se um nvel de hierarquia writethrough, quando a operao de escrita executada, os valores armazenados so escritos no nvel e enviados para o nvel seguinte mais abaixo. Isso assegura que o contedo do nvel e do prximo nvel ser sempre o mesmo. As caches podem ser implementadas tanto como sistemas write-back quanto writethrough e ambas as abordagens tem suas vantagens. As caches write-through tm a vantagem de que no necessrio registrar quais linhas foram escritas. Como os dados em uma cache write-through so sempre consistentes com o contedo do prximo nvel, descartar uma linha pode ser feito escrevendo-se a nova linha sobre a velha, reduzindo o tempo para trazer uma linha para dentro da cache. Em contraste, caches write-back escrevem seu contedo apenas quando uma linha descartada. Se uma dada linha recebe vrias solicitaes de armazenamento enquanto ela est na cache, esperar at que a linha seja descartada pode reduzir significativamente o nmero de escritas enviadas para o prximo nvel da hierarquia da cache. Este efeito pode ainda ser mais importante, se o prximo nvel da hierarquia for implementado com DRAM em modo de pgina, uma vez que a cache write-back pode usar o modo de pgina para reduzir o tempo de escrita uma linha no nvel seguinte. No entanto, caches write-back exigem um hardware para manter controle sobre se cada linha foi escrita ou no desde que foi copiada.

Write-Through Na estratgia write-through, quando um ciclo de escrita ocorre para uma palavra, ela escrita na cache e na memria principal simultaneamente. A principal desvantagem desta estratgia que o ciclo de escrita passa a ser mais lento que o ciclo de leitura. No entanto, em programas tpicos a proporo de operaes de escrita memria pequena, de 5 a 34% do nmero total de referncias memria. Para analisar como fica o tempo efetivo de acesso para uma cache com a estratgia write-through com alocao em escrita, considere o seguinte modelo. Seja tc o tempo de acesso a cache, tl o tempo de transferncia para uma linha da memria principal para a cache e tm o tempo de acesso a uma palavra da memria principal. Seja ainda h a probabilidade do item referenciado estar na memria e w a frao das referncias memria que correspondem a operaes de escrita. As quatro situaes que podem ocorrer so: - leitura de item presente no cache: em tempo tc com probabilidade h x (1-w); - leitura de item ausente do cache: em tempo tc + tl com probabilidade (1-h) x (1-w);

- atualizao de item presente na cache: em tempo tm: uma vez que a atualizao na cache ocorre concorrentemente com a atualizao em memria, o tempo tc est escondido no tempo maior, tm. Esta situao ocorre com probabilidade h x w; - atualizao item ausente da cache: em tempo tm + tl com probabilidade (1-h) x w. A partir destas possibilidades, o tempo efetivo de acesso a cache : tef = (1-w) tc + (1-h) tl + w tm Write-Back Na estratgia write-back, quando um ciclo de escrita ocorre para uma palavra, ela atualizada apenas na cache. A linha onde a palavra ocorre marcada como alterada. Quando a linha for removida da cache, a linha toda atualizada na memria principal. A desvantagem desta estratgia est no maior trfego entre memria principal e cache, pois mesmo itens no modificados so transferidos da cache para a memria. Seja wb a probabilidade de uma linha da cache ter sido atualizada. Em geral, wb < w uma vez que uma linha pode conter mais de uma palavra atualizada. Ento, a partir de uma anlise similar realizada acima, obtm-se o tempo efetivo de acesso a cach: te_ = tc + (1-h)(1-wb) tl Em geral, caches write-back tm um desempenho melhor que as write-through. Isso ocorre porque, geralmente, uma linha que escrita uma vez tem uma probabilidade grande de ser escrita inmeras vezes, dessa forma o custo (em tempo) de escrever uma linha inteira no nvel seguinte na hierarquia de memria menor do que escrever as modificaes medida que elas ocorrem. Sistemas mais antigos freqentemente utilizam caches writethrough por causa da sua complexidade mais baixa de controle, mas as write-back

tornaram-se dominantes nos computadores modernos. A figura 2.6 ilustra a diferena entre as duas polticas de atualizao de memria apresentadas.

Figura 2.6: Write-Through e Write-Back.

2.6.Caches em Vrios Nveis Em muitos sistemas, mais de um nvel de hierarquia implementado como uma cache, como mostra a figura 2.7. Quando isto feito, o mias comum que o primeiro nvel de cache (mais prximo ao processador) seja implementado como caches distintas para dados e para instrues, enquanto que os outros nveis sejam implementados como caches unificadas. Isso d ao processador largura de banda adicional proporcionada por uma arquitetura Harvard no nvel superior do sistema de memria, ao mesmo tempo em que simplifica o projeto dos nveis mais baixos.

Figura 2.7: Hierarquia de caches em vrios nveis. Figura adaptada de [Carter, N.]

Para que uma cache de vrios nveis melhore significativamente o tempo mdio de acesso memria de um sistema, cada nvel precisa ter uma capacidade maior do que o nvel acima dele na hierarquia, por que a localidade de referncia vista em cada nvel decresce medida que se vai a nveis mais profundos na hierarquia. (Solicitaes a dados referenciados recentemente so tratados pelos nveis superiores do sistema de memria, de modo que a solicitao feita aos nveis mais baixos tendem a ser mais distribudos pelo espao de endereamento.) Caches com capacidades maiores tendem a ser mais lentas, de modo que o benefcio de velocidade de caches distintas para dados e instrues no to significativo nos nveis mais baixos da hierarquia de memria, o que representa um outro argumento a favor de caches unificadas para estes nveis. No incio da dcada de 90, a hierarquia mais comum para computadores pessoais e para estaes de trabalho era a cache de primeiro nvel (L1) ser relativamente pequena e localizada no mesmo chip que o processador. Caches de nvel mais baixo eram implementadas fora do chip, com o uso de SRAMs. Capacidades de 4 a 16 Kbytes no eram

incomuns em caches L1, com caches L2 atingindo 64 a 256 Kbytes. medida que o nmero de transistores que podia ser integrado em um chip de memria aumentou, nveis adicionais de cache foram movidos para dentro do chip do processador. Muitos sistemas atuais tem tanto caches de primeiro quanto de segundo nvel no mesmo chip que o processador, ou ao menos no mesmo encapsulamento. Caches de terceiro nvel so freqentemente implementadas externamente e podem ter vrios megas de tamanho. Espera-se que nos prximos poucos anos este nvel tambm seja integrado no encapsulamento do processador.

2.7.Exerccios

1. O que motivou a criao da memria cache.

2. Diferencie Localidade Temporal de Localidade Espacial.

3. As caches podem ser unificadas ou separadas. Explique as vantagens de cada uma delas e mostre a arquitetura Harvard.

4. Discorra sobre: cache com mapeamento associativo, com mapeamento direto e com mapeamento set-associativo. Explique o processo de traduo de endereos e comente sobre as vantagens e desvatagens de cada uma delas.

5. Explique as polticas de substituio de pginas: FIFO, LRU, MRU, NRU, LFU, MFU E WS. Considere a seguinte string de referncia de pgina: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6 Simule a funcionalidade dos algoritmos listados e diga quantas faltas de pgina ocorrem em cada um, considerando uma memria com trs pginas.

6. possvel afirmar que para um conjunto de aplicaes X o algoritmo de substituio de pginas A seja mais adequado e para um conjunto de aplicaes Y o algoritmo de substituio de pginas B seja mais eficiente? Isso verdade? Sim ou no? Justifique.

7. Diferencie as polticas de atualizao write-back e write-through comentando as vantangens e desvantagens de cada uma.

8. Explique as vantagens de utilizar caches em vrios nveis e mostre uma representao grfica desta hierarquia.

UNIDADE III SISTEMAS DE MEMRIA 3. MEMRIA VIRTUAL

3.1.Introduo O custo da memria foi uma limitao significativa nos primeiros sistemas de computador. Antes do desenvolvimento de DRAMs baseadas em semicondutores, a tecnologia de memria predominante era a memria de ncleo, nas quais anis toroidais de material magntico eram utilizados para armazenar cada bit de dados. O custo para produzir e montar esses anis toroidadis, como dispositivos de memria, conduziu a capacidades de memria limitadas em muitas mquinas. Para resolver este problema, foi desenvolvida a memria virtual. Em um sistema de memria virtual, discos rgidos, e outros meios magnticos, formam a camada inferior da hierarquia de memria, com as DRAMs formando o nvel principal da hierarquia. Como programas no podem acessar diretamente dados armazenados em meios magnticos, a rea de endereo de um programa dividida em pginas, blocos contguos de dados que so armazenados em mdia magntica. Quando feita referncia a uma pgina de dados, o sistema a copia para a memria principal, permitindo que ela seja acessada. A figura 3.1 ilustra muitos dos conceitos chaves de memria virtual. Cada programa tem seu prprio espao de endereos virtuais, que um conjunto de endereos que os programas utilizam para carregar e armazenar operaes. O espao de endereo fsico o conjunto de endereos que foi utilizado para fazer referncia a posies na memria principal, e os termos endereo virtual e endereo fsico so utilizado para descrever endereos que esto nos espaos de endereo virtual e fsico. O espao de endereos virtuais dividido em pginas, algumas das quais so copiadas para quadros (janelas na memria principal onde uma pgina de dados pode ser armazenada) porque recentemente foi feita referncias a elas e algumas das quais esto residentes apenas no disco. As pginas so sempre alinhadas com relao a um mltiplo do tamanho da pgina, de modo que elas nunca se sobrepem. Os termos pgina virtual e pgina fsica so utilizados para descrever um pgina de dados nos espaos de endereos virtual e fsico. Pginas que foram carregadas da memria a partir do disco so ditas terem sido mapeadas para dentro da memria principal.

Figura 3.1: Memria virtual. Figura adaptada de [Carter, N.]

A memria virtual permite que um computador aja como se a memria principal fosse muito maior do que ela realmente. Quando um programa faz referncia a um endereo virtual, ele no pode dizer, a no ser medindo a latncia da operao, se um endereo virtual estava residente na memria principal ou se ele teve que ser buscado no meio magntico. Assim, o computador pode mover pginas de/para a memria principal, quando necessrio, de modo semelhante como as linhas de cache so trazidas para dentro e para fora da cache, de acordo com a necessidade, permitindo que programas faam referncias a mais dados do que podem ser armazenados em um nico momento na memria principal. 3.2.Traduo de endereos

Programas que so executados em um sistema de memria virtual utilizam endereos virtuais como argumentos para as instrues de carga e armazenamento, mas a memria principal utiliza endereos fsicos para registrar as posies onde os dados esto efetivamente armazenados. Quando um programa executa uma referncia memria, o endereo virtual utilizado precisa ser convertido para o endereo fsico equivalente, um processo conhecido como traduo de endereos. A figura 3.2 mostra um fluxograma de traduo de endereos.

Figura 3.2: Traduo de endereos. Figura adaptada de [Carter, N.]

Quando um programa de usurio executa uma instruo que faz referncia memria, o sistema operacional faz acesso tabela de pginas, uma estrutura de dados na memria que mantm o mapeamento dos endereos virtuais para os fsicos, de modo a determinar se uma pgina virtual contm o endereo referenciado pela operao ou se est ou no atualmente mapeada sobre uma pgina fsica. Se isto for verdade, o sistema operacional determina o endereo fsico que corresponde ao endereo virtual, a partir da tabela de pginas, e a operao continua, utilizando o endereo fsico para fazer acesso memria principal. Se a pgina virtual que contm o endereo referenciado no est atualmente mapeado sobre uma pgina fsica, ocorre uma falta de pgina e o sistema operacional busca a pgina que contm os dados necessrios na memria, carregando-a para uma pgina fsica e atualizando a tabela de pginas com a nova traduo. Uma vez que a pgina tenha sido lida para a memria principal a partir do disco e a tabela de pginas tenha sido atualizada, o endereo fsico da pgina pode ser determinado e a referncia memria pode ser completada. Se todas as pginas fsicas no sistema j contm dados, o contedo de uma delas deve precisa ser transferido para meio magntico para abrir espao para a pgina que ser carregada. As polticas de substituio utilizadas para escolher a pgina fsica que ser transferida so semelhantes quelas discutidas no Captulo anterior. Como tanto pginas virtuais quanto fsicas so sempre alinhadas sobre um mltiplo do seu tamanho, a tabela de pginas no precisa armazenar completamente o endereo virtual, nem o endereo fsico. Ao invs disso, os endereos virtuais so divididos em um identificador de pgina virtual, chamado nmero de pgina virtual, ou NPV, e o conjunto de bits que descreve o deslocamento a partir do incio da pgina virtual at o endereo virtual. Pginas fsicas so divididas de modo semelhante em nmero de pginas fsicas (NPF) e um deslocamento a partir do incio da pgina fsica at o endereo fsico, como mostra a figura 3.3.

Figura 3.3: Endereos fsicos e virtuais. Figura adaptada de [Carter, N.]

As pginas virtual e fsica de um dados sistema so geralmente do mesmo tamanho, de modo que o nmero de bits (log2 do tamanho da pgina) necessrios para manter o campo de deslocamento dos endereos fsicos e virtuais o mesmo, embora o nmero de bits empregados para identificar o NPV e o NPF podem ter comprimentos diferentes. Muitos sistemas, em especial sistemas de 64 bits, tm endereos virtuais mais longos que os endereos fsicos, dada a impraticabilidade atual de se construir um sistema com 264 bytes de memria DRAM. Quando um endereo virtual traduzido, o sistema operacional procura pela entrada correspondente ao NPV na tabela de pginas e retorna o NPF correspondente. Os bits de deslocamento do endereo virtual so, ento, concatenados ao NPF para gerar o endereo fsico, como mostra a figura 3.4.

Figura 3.4: Convertendo endereos virtuais em fsicos. Figura adaptada de [Carter, N.]

3.3. Swapping O sistema de memria virtual recm descrito um exemplo de paginao por demanda, atualmente o tipo de memria virtual mais comumente utilizado. Na paginao por demanda, as pginas de dados s so trazidas para a memria principal quando acessadas

por um programa. Quando uma mudana de contexto ocorre, o sistema operacional no copia qualquer pgina do programa antigo para o disco ou do novo programa para a memria principal. Em vez disso, ele apenas comea a executar o novo programa, buscando as pginas medida que so referenciadas. Swapping uma tcnica relacionada que utiliza meio magntico para armazenar programas que no esto sendo atualmente executados no processador. Em um sistema que utiliza swapping, o sistema operacional trata todos os dados de um programa como uma unidade atmica e movo todos os dados para dentro e para fora da memria principal em uma operao. Quando um sistema operacional em um computador que utiliza swapping escolhe um programa para ser executado no processador, ele carrega todos os dados do programa na memria principal. Caso o espao no disponvel em memria no seja suficiente, o sistema operacional transfere outros programas para o disco, liberando assim espao de memria. Se todos os programas que esto sendo executados em um computador cabem na memria principal (contando tanto as suas instrues como os dados), tanto a paginao por demanda quanto o swapping permitem que o computador opere em modo multiprogramado sem ter que buscar dados no disco. Sistemas de swapping tm a vantagem de que, uma vez que o programa tenha sido buscado no disco, todos os dados do programa estaro mapeados na memria principal. Isto faz com que o tempo de execuo de um programa seja mais previsvel, uma vez que faltas de pgina nunca ocorrero durante a execuo. Sistemas de paginao por demanda tm a vantagem de que eles buscam do disco apenas as pginas que um programa efetivamente utiliza. Se um programa precisa fazer referncia a apenas uma parte dos seus dados durante cada fatia do seu tempo de execuo, isso pode reduzir significativamente a quantidade de tempo utilizada para copiar dados de/para o disco. Alm disso, sistemas que utilizam swapping no podem, geralmente, utilizar sua capacidade de armazenamento em meio magntico para permitir que um nico programa faa referncia a mais dados que cabem na memria principal, porque todos os dados de um programa tm que ser transferidos para dentro ou para fora da memria principal, como uma unidade. Em um sistema de paginao por demanda, as pginas individuais dos dados de um programa podem ser trazidas para dentro da memria, quando necessrio, fazendo com que o espao disponvel no disco seja o limite da quantidade mxima de dados a que o programa pode fazer referncia. Para a maioria das aplicaes, as vantagens da paginao por demanda so maiores que as desvantagens, tornando a paginao por demanda a opo para a maioria dos sistemas operacionais atuais.

3.4.Tabela de Pginas Como j discutido anteriormente, o sistema operacional utiliza uma estrutura de dados conhecida como tabela de pginas para identificar como os endereos virtuais so mapeados endereos fsicos. Cada programa tem seu prprio mapeamento virtuais-fsico, tabelas de pginas diferentes so necessrias para cada programa no sistema. A implementao mais simples de tabelas de pginas apenas uma matriz de entrada de tabelas, uma entrada por pgina virtual, e conhecida como tabela de pginas de nvel nico, para diferenci-las das tabelas de pginas multinvel, que descreveremos adiante. Para executar uma traduo de endereo, o sistema operacional utiliza o nmero de pgina virtual do endereo como um ndice para acessar a matriz de entradas da tabela de pginas, de modo a localizar o nmero da pgina fsica correspondente pgina virtual. Isto mostrado na figura 3.5, que apresenta um sistema cujo espao de endereos virtuais tem um tamanho de apenas oito pginas.

Figura 3.5: Tabela de pginas de nvel nico. Figura adaptada de [Carter, N.]

Como ilustrado na figura 3.5 as entradas na tabela de pginas geralmente contm um nmero de pgina fsica, um bit de vlido e um bit de sujo. O bit de vlido indica se a pgina virtual corresponde entrada est atualmente mapeada na memria fsica. Se o bit de vlido est ativo, o campo do nmero da pgina fsica contm o nmero da pgina fsica que contm os dados da pgina virtual. O bit de sujo registra se a pgina foi ou no modificada desde que ela foi trazida para a memria principal. Isto utilizado para determinar se o contedo da pgina deve ser escrito de volta no disco quando a pgina for retirada da memria principal. A figura 3.6 traz um diagrama de uso de uma tabela de pginas para traduzir um endereo virtual. Sistemas com tabelas de pgina de nvel nico geralmente exigem que toda a tabela de pginas seja mantida, o tempo todo, na memria fsica, de modo que o sistema operacional possa acessar a tabela para traduzir endereos.

Figura 3.6: Traduo de endereos utilizando tabela de pginas. Figura adaptada de [Carter, N.]

Tabelas de Pginas Multinveis Tabelas de pginas podem exigir um grande espao de endereamento. Para resolver este problema, os projetistas utilizam tabelas de pginas com vrios nveis, as quais permitem que muito da tabela de pginas seja armazenada na memria virtual e mantida em disco quando no esteja em uso. Em uma tabela de pginas multinvel, a prpria tabela de pginas dividida em pginas e distribuda em uma hierarquia. As entradas no nvel mais baixo da hierarquia so semelhantes s entradas de um tabela de pginas de nvel nico, contendo o NPF da pgina, junto com os bits de vlido e sujo. As entradas nos nveis da tabela de pginas identificam a pgina na memria que contm o prximo nvel da hierarquia para o endereo que est sendo traduzido. Quando se utiliza este sistema, apenas a pgina que contm o nvel mais alto da tabela de pginas precisa ser mantida na memria o tempo todo. Outras pginas da tabela de pginas podem ser copiadas de/para o disco, quando necessrio. Para executar uma traduo de endereo, o NPV de um endereo dividido em grupos de bits, onde cada grupo contm o nmero de bits igual ao log2 do nmero de entradas na tabela de pginas em uma pgina de dados, como mostrado na figura 3.7. Se o nmero de bits no NPV no divisvel pelo log2 do nmero de entrada na tabela de pginas de uma pgina de dados, necessrio arredondar o nmero de grupos, para cima, para o prximo nmero inteiro.

Figura 3.7: Diviso de endereos para tabela de pginas multinvel. Figura adaptada de [Carter, N.]

O nmero de bits mais significativo ento utilizado para selecionar uma entrada na pgina de nvel mais alto da tabela de pginas. Esta entrada contm o endereo da pgina de dados que contm o prximo conjunto de entradas a ser pesquisado. O grupo seguinte de ordem menos significativa ento utilizado para indexar a pgina apontada pela entrada que est no nvel superior da tabela de pginas e o processo repetido at que o nvel mais baixo da tabela de pginas seja encontrado, o qual contm o NPF para a pgina desejada. A figura 3.8 mostra este processo em um sistema com NPVs de 6 bits e quatro entradas em cada pgina. Se qualquer uma das pginas na tabela de pginas solicitadas durante a traduo do endereo no estiver mapeada na memria principal, o sistema simplesmente busca no disco e continua a traduo.

Figura 3.8: Traduo de endereos com tabelas multinvel. Figura adaptada de [Carter, N.]

3.5.Translation Lookaside Buffers - TLBs Uma das desvantagens principais de usar tabelas de pginas para a traduo de endereos que a tabela de pginas precisa ser acessada a cada referncia feita memria. Para reduzir esta desvantagem, processadores so projetados para utilizar memria virtual incorporando estruturas especiais denominadas de translation lookaside buffers (TLBs) que atuam como caches para a tabela de pginas. Quando um programa executa uma referncia memria, o endereo virtual enviado ao TLB para determinar se ele contm a traduo do endereo. Se verdadeiro, o TLB retorna o endereo fsico dos dados e a referncia memria continua. Caso contrrio, ocorre uma falta no TLB e o sistema procura a traduo na tabela de pginas. Alguns sistemas fornecem hardware para executar o acesso tabela de pginas em uma falta de TLB, enquanto que outros exigem que o sistema operacional acesse a tabela de pginas via software. A figura 3.9 mostra o processo de traduo de endereos em um sistema contendo um TLB.

Figura 3.9: Traduo de endereos com TLB. Figura adaptada de [Carter, N.]

Organizao de TLBs Os TLBs so organizados de modo semelhante s caches, possuindo uma associatividade e um nmero de conjuntos. Enquanto os tamanhos de cache so, geralmente, descritos em bytes, os tamanhos dos TLBs so normalmente descritos em termos do nmero de entradas, ou tradues, contidas no TLB, uma vez que o espao ocupado para cada entrada irrelevante para o desempenho do sistema. A figura 3.10 mostra uma entrada tpica de TLB. O seu formato semelhante a uma entrada na tabela de pginas e contm um NPF, um bit de vlido e um bit de sujo. Alm disto, a entrada do TLB contm o NPV da pgina, que comparado ao NPV do endereo de uma referncia memria para determinar se ocorre um acerto. De forma semelhante a uma entrada na matriz de etiqueta de uma cache, os bits do NPV que so utilizados para

selecionar uma entrada no TLB so geralmente omitidos do NPV armazenado na entrada, para economizar o espao. No entanto, todos os bits do NPF precisam ser armazenados no TLB porque eles podem ser diferentes dos bits correspondentes no NPV.

Figura 3.10: Entrada TLB. Figura adaptada de [Carter, N.] Os TLBs so geralmente muito menores que as caches, porque cada entrada em um TLB faz referncia muito mais dados do que uma linha de cache, permitindo que um nmero de entradas TLB relativamente menor descreva o conjunto de trabalho de um programa. Os TLBs contm mais entradas do que seriam necessrias para descrever os dados contidos na cache porque desejvel que ele contenha tradues para dados que residam na memria principal, bem como na cache. 3.6. Proteo Alm de permitir o emprego de meios magnticos como um nvel de hierarquia de memria, a memria virtual tambm muito til em sistemas de computadores multiprogramados porque fornece proteo de memria, evitando que um programa acesse dados de outro. A figura 3.11 ilustra como isso funciona. Cada programa tem o seu prprio endereo virtual, mas o espao de endereamento fsico compartilhado entre todos os programas que esto sendo executado no sistema. O sistema de traduo de endereos assegura que as pginas virtuais utilizadas por cada programa sejam mapeadas sobre pginas fsicas diferentes e posies diferentes no meio magntico.

Figura 3.11: Proteo atravs de memria virtual. Figura adaptada de [Carter, N.]

Isso traz dois benefcios. Primeiro, evita que os programas acessem dadso um do outro, porque qualquer endereo virtual ao qual o programa faz referncia ser traduzido para o endereo fsico pertencente a ele. No existe maneira de um programa criar um endereo virtual que seja mapeado sobre um endereo fsico que pertena a outro programa e, portanto, no h modo de um programa acessar os dados de outro programa. Se os programas querem compartilhar dados um com o outro, a maioria dos sistemas operacionais permite que eles solicitem especificamente que a parte das suas pginas virtuais sejam mapeadas sobre os mesmos endereos fsicos. O segundo benefcio que um programa pode criar e utilizar endereos no seu prprio espao de endereamento virtual sem interferncia de outros programas. Assim, os programas independem de quantos programas mais esto sendo executados no sistema e/ou quanta memria aqueles outros programas esto utilizando. Cada programa tem o seu prprio espao de endereamento de endereamento virtual e pode fazer clculos de endereos e operaes de memria naquele espao de endereos, sem se preocupar com quaisquer outros programas que possam est sendo executados naquela mquina. A desvantagem desta abordagem que o mapeamento de endereos virtuais-fsicos torna-se parte do estado de um programa. Quando o sistema faz a comutao da execuo de um programa para outro, ele precisa mudar a tabela de pginas que ele utiliza e invalidar quaisquer tradues de endereos no TLB. De outro modo, o novo programa utilizaria o mapeamento de endereos fsico-virtuais do programa antigo, sendo capaz de acessar os dados. Isto aumenta o nus de uma troca de contexto, devido ao tempo necessrio para invalidar o TLB e trocar a tabela de pginas, e porque, tambm, o novo programa sofrer um nmero maior de falta de TLB quando ele comear a ser executado com um TLB vazio. Alguns sistemas tratam desta questo acrescentando, a cada entrada no TLB, bits adicionais para armazenar a identificao do processo ao qual a entrada se aplica. O hardware emprega o identificador do processo para o qual est sendo feito a traduo como parte da informao utilizada para determinar se houve um acerto de TLB, permitindo que tradues a partir de vrios programas residam no TLB ao mesmo tempo. Isto elimina a necessidade de invalidar o TLB em cada troca de contexto, mas aumenta a quantidade de espao de armazenamento exigido para o mesmo. Em sistemas modernos, a memria virtual mais freqentemente utilizada como uma ferramenta para apoiar a

multiprogramao que como uma ferramenta para permitir que os programas utilizem mais memria do que aquela que fornecida na memria principal do sistema. No entanto, extremamente valioso ter memria virtual para fornecer proteo entre programas e permitir, em uma mudana de contexto, a substituio dos dados de cada programa entre a memria principal e o disco, o que explica porque praticamente todos os sistemas operacionais e hardware modernos suportam memria virtual.

3.7. Exerccios

1. Explique o que memria virtual?

2. Qual a diferena entre endereo fsico e endereo virtual?

3. Explique o processo de traduo de endereo virtual para fsico.

4. Porque os sistemas de memria utilizam pginas fsicas e virtuais do mesmo tamanho?

5. O que Swapping? Para que usado? Quais as vantagens e desvantagens?

6. Discorra sobre tabela de pginas.

7. Um sistema tem endereo virtual de 32 bits, endereo fsico de 24 bits e pginas de 2KB. a. Qual o tamanho de cada entrada na tabela de pginas (um nico nvel)? b. Quantas entradas na tabela de pginas so necessrias para este sistema? c. Quanta rea de armazenamento necessria para a tabela de pgina?

8. Explique o que so TLBs? Como se procede a traduo de endereo utilizando-as?

9. Como o sistema de memria virtual evita que os programas acessem dados uns dos outros?

4. WEBLIOGRAFIA Universidade Aberta do Piau UAPI http://www.ufpi.br/uapi Universidade Aberta do Brasil- UAB http://www.uab.gov.br Secretaria de Educao a Distncia do MEC SEED http://www.seed.mec.gov.br Associao Brasileira de Educao a Distncia ABED http://www.abed.org.br Apostilas, Tutoriais e Documentos http://gabriel.sg.urcamp.tche.br/beraldo/arquitetura_2.htm Guia do Hardware http://www.guiadohardware.net Larcio Vasconcelos http://www.laercio.com.br Gabriel Torres http://www.gabrieltorres.com.br Csar Augusto M. Marcon http://www.inf.pucrs.br/~marcon/ Ivan L. M. Ricarte http://www.dca.fee.unicamp.br/~ricarte/ Marcelo Trindade Rebonatto http://vitoria.upf.tche.br/~rebonatto Fabian Vargas http://www.ee.pucrs.br/~vargas Eduardo Moresi http://www.intelingencia.blogspot.com Rossano Pablo Pinto http://www.dca.fee.unicamp.br/~rossano Alexandre Casacurta http://www.inf.unisinos.br/~coordinf/professores/casacurta.html

5 REFERNCIAS

CARTER, N. Arquitetura de computadores. Porto Alegre: Bookman, 2003. HEURING, V. P; MURDOCCA, M. J. Introduo arquitetura de computadores. Rio de Janeiro: Campus, 2002. MORIMOTO, C. E. Hardware: o guia definitivo. Porto Alegre: Sulina, 2007. MONTEIRO, M. A. Introduo a organizao de computadores. Rio de Janeiro: LTC, 2007. PARHAMI, B. Arquitetura de computadores: de microprocessadores a supercomputadores. So Paulo: McGraw- Hill do Brasil, 2008. PATTERSON, D. A ; HENNESSY, J. L. Arquitetura de computadores: uma abordagem quantitativa. Rio de Janeiro: Campus, 2003. PATTERSON, D. A ; HENNESSY, J. L. Organizao e projeto de computadores. Rio de Janeiro: Campus, 2005. RIBEIRO, C ; DELGADO, J. Arquitetura de computadores. Rio de Janeiro: LTC, 2009. STALLINGS, W. Arquitetura e organizao de computadores. Prentice Hall, 2008. So Paulo:

TANENBAUM, A. S. Organizao estruturada de computadores. Rio de Janeiro: Prentice Hall, 2007. TORRES, G. Hardware: curso completo. Rio de Janeiro: Axcel Books, 2001. WEBER, R. F. Fundamentos de arquitetura de computadores. Porto Alegre: Bookman, 2008.

Andr Macdo Santana


CV. http://lattes.cnpq.br/5971556358191272

Mestre em Engenharia Eltrica pela Universidade Federal do Rio Grande do Norte UFRN, Natal RN Brasil (2007). Graduado em Cincia da Computao pela Universidade Federal do Piau UFPI, Teresina PI Brasil (2004). Atualmente Professor Assistente do Departamento de Informtica e Estatstica DIE da UFPI e aluno de doutorado do Programa de PsGraduao em Engenharia Eltrica e Computao PPGEEC da UFRN. Atua principalmente nos seguintes temas: Robtica Mvel, Viso Computacional, Filtragem Estocstica, Inteligncia Artificial.

Vinicius Ponte Machado


CV. http://lattes.cnpq.br/9385561556243194

Mestre em Informtica Aplicada pela Universidade de Fortaleza (2003) e graduado em Informtica pela mesma instituio. Atualmente professor assistente da Universidade Federal do Piau, afastado para doutoramento no Programa de Ps-Graduao em Engenharia Eltrica e Computao PPGEEC da Universidade Federal do Rio Grande do Norte. Tem experincia na rea de Cincia da Computao, com nfase em Gesto do Conhecimento e Inteligncia Artificial, atuando principalmente nos seguintes temas: sistemas multiagente, redes neurais artificiais e Redes Industriais.

Potrebbero piacerti anche