Professional Documents
Culture Documents
Sumrio
Introduo
1.1
1.2
1.3
1.4
Arquitetura geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1
Operaes bsicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5
1.6
O Transistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7
A Lei de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8
10
1.8.1
O ENIAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
1.8.2
11
1.8.3
A IBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.8.4
12
1.8.5
Memrias de semicondutores . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.8.6
A Intel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.8.7
A Apple e a Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.10 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
16
2.1
O que um programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.1.1
Software X Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
2.2.1
18
2.2.2
Os registradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.2.3
21
2.2.4
21
1.9
2.2
ii
Ciclo de Instruo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.3.1
Busca de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.4
Interrupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.5
Sobre o desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.6
25
2.7
27
2.8
Limitaes do Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.8.1
Medidas de desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
2.8.2
33
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
2.9
3
Unidade de Controle
36
3.1
Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.2
Microoperaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.2.1
Busca de Instruo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.2.2
Busca indireta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.2.3
Execuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.2.4
Salvar resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.2.5
Salto condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.3
Tipos de Microoperaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
3.4
Decodificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
3.5
Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.5.1
Busca de Instruo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.5.2
Decodificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
3.5.3
Busca de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
3.5.4
Execuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3.5.5
Salva Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3.5.6
Instruo completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
3.6
4
Conjunto de Instrues
45
4.1
Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.2
45
4.2.1
Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.2.1.1
Arquitetura de Pilha . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.2.1.2
46
iii
4.3
4.4
4.5
5
4.2.1.3
Arquitetura Load/Store . . . . . . . . . . . . . . . . . . . . . . .
46
4.2.1.4
Arquitetura Registrador-Memria . . . . . . . . . . . . . . . . . .
47
47
4.3.1
Modelo de Memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.3.1.1
48
4.3.1.2
49
4.3.1.3
49
4.3.1.4
51
4.3.2
Tipos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
4.3.3
52
4.3.4
Tipos de Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
4.3.5
Modos de Endereamento . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
4.3.5.1
Endereamento Imediato . . . . . . . . . . . . . . . . . . . . . .
54
4.3.5.2
Endereamento Direto . . . . . . . . . . . . . . . . . . . . . . . .
54
4.3.5.3
54
4.3.5.4
Endereamento Indireto . . . . . . . . . . . . . . . . . . . . . . .
54
4.3.5.5
55
4.3.5.6
Endereamento Indexado . . . . . . . . . . . . . . . . . . . . . .
55
4.3.5.7
55
RISC x CISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.4.1
57
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
Sistema de Memria
58
5.1
Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
5.2
Princpio da Localidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
5.3
60
5.4
Memrias de Semicondutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
5.4.1
61
5.4.2
61
5.4.3
62
5.4.4
63
5.4.5
63
5.4.6
63
5.5
Memrias Secundrias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
5.6
Memria Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
iv
Memria Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
5.7.1
Tamanho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.7.2
Funo de mapeamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.7.2.1
Mapeamento direto . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.7.2.2
Mapeamento associativo . . . . . . . . . . . . . . . . . . . . . . .
68
5.7.2.3
69
Poltica de substituio . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
5.7.3
5.8
6
Glossrio
71
ndice Remissivo
73
Captulo 1
Introduo
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Definir o que a Arquitetura de Computadores e sua relevncia
Apresentar a Arquitetura Geral de um computador e suas principais operaes
Diferencias sistemas digitais de analgicos
Apresentar o funcionamento de um transistor e sua relevncia para a industria de dispositivos digitais
Destacar a Lei de Moore e seu impacto para a evoluo da industria de dispositivos
eletrnicos digitais
Identificar os principais fatos da evoluo dos computadores
Voc sabe o que Arquitetura de computadores? Voc j se perguntou porque precisa estudar Arquitetura de Computadores? Esse captulo ns vamos aprender que essa uma das principais disciplinas
da Cincia da Computao. No s isso, foi a Arquitetura de Computadores que permitiu que a humanidade avanasse em todos os aspectos da cincia, sade e tecnologia. Ao final desse captulo,
espero que voc concorde comigo.
1.1
1.2
essencial que todos profissionais da Computao tenham pelo menos conhecimentos bsicos de
Arquitetura de Computadores. Saber como o computador funciona nos permitir entender sua capacidade (e incapacidade) de resolver problemas, sobre como program-los da melhor forma possvel,
como deixar o computador e os dados contidos neles mais seguros, como ganhar desempenho e o que
faz ele ficar to lento s vezes a ponto de querermos destrui-lo. Ento, estudar Arquitetura de Computadores to importante para um profissional de Computao, como estudar Anatomia importante
para um mdico. Antes de iniciar qualquer estudo na Medicina, um mdico precisa saber em detalhes
o funcionamento do corpo humano. Quais so seus rgos, como eles trabalham individualmente e
como se relacionam para formar um sistema (digestivo, respiratrio, motor etc.). Com a Arquitetura
de Computadores semelhante. Vamos aprender quais so os componentes de um computador, como
eles funcionam e como eles trabalham em conjunto formando um sistema. Sem dvidas o ser humano a mquina mais perfeita j criada, mas vamos ver que o Computador uma das mquinas
mais incrveis que o homem j criou.
1.3
Arquitetura de Computadores?
Ao longo de minha experincia como professor de Arquitetura de Computadores para alunos de Licenciatura em Computao, eu sempre ouvi essa pergunta. Por que precisamos estudar Arquitetura
de Computadores?. Espero que isso j esteja claro para voc. Mas se ainda no estiver, aqui vai
uma outra razo. Voc ser um licenciado e vai trabalhar no ensino e aprendizagem da Cincia da
Computao. Como ensinar algum sobre essa cincia se voc no souber em detalhes como um
computador funciona? Isso seria como um professor de Farmcia que no conhece bem a Qumica,
ou um professor de Matemtica que no conhece os nmeros.
1.4
Arquitetura geral
Hoje em dia h muitos tipos de computadores e diversas arquiteturas. Elas so frutos de muitos
estudos, pesquisas e avanos tecnolgicos. Mas todos computadores compartilham uma arquitetura
comum. Essa arquitetura o que separa um computador de uma calculadora de bolso, de um aparelho
de televiso ou um relgio de pulso. Essa arquitetura apresentada na Figura 1.1 [3].
2 / 73
CPU
C
a
c
h
e
endereo
dados/instrues
Memria
principal
(RAM)
Sinais de controle
1.4.1
Operaes bsicas
1.5
Sinal Digital
1.6
O Transistor
O transistor um componente eletrnico criado na dcada de 1950. Ele o responsvel pela revoluo
da eletrnica na dcada de 1960. Atravs dele foi possvel desenvolver sistemas digitais extremamente
pequenos. Todas funcionalidades de um computador so internamente executadas pela composio
de milhes de transistores. Desde operaes lgicas e aritmticas, at o armazenamento de dados em
memrias (a exceo do disco rgido, CD, DVD e fitas magnticas), tudo feito pelos transistores.
5 / 73
Porta
VGG Fonte
n +
p+
+
-
Dopado com
cargas negativas
VDD
Dopado com
cargas positivas
No transistor da Figura 1.3 [6] o cinza claro representa um cristal de silcio que foi dopado com cargas
negativas. J o cinza escuro, representa a parte que foi dopada com cargas positivas.
Na situao normal (ver Figura 1.4 [7]) uma corrente eltrica aplicada no Dreno consegue percorrer
o estreito canal negativo e seguir at a Fonte. Nessa condio dizemos que o transistor est ativo.
Porm, se for aplicada uma tenso negativa na Porta, as cargas positivas da regio p sero atradas
para mais prximo da Porta, e isso ir fechar o canal por onde passava a corrente eltrica. Nesse caso,
dizemos que o transistor est inativo.
Situao Normal
Dreno
Dreno
Porta
Aberta
VGG
Fonte
n +
p+
+
-
VDD
Porta
Fechada
n +
+
+ p
+
VDD
- -
VGG
Fonte
1.7
A Lei de Moore
Durante os anos de 1950 e 1965, a industrias do Vale do Silcio disputavam pelo domnio do recmsurgido mercado da computao e eletrnica. Naquela poca ainda no havia surgido o termo TIC
(Tecnologia da Informao e Comunicao), mas ele seria mais apropriado para definir o nicho de
clientes e servios que eles disputavam. Eles dominavam a produo de circuitos eletrnicos digitais,
dominados pela Intel e AMD, a produo de computadores e equipamentos de comunicao, como a
Dell, Apple, IBM, HP e CISCO, alm da indstria e software e servios, como a Apple, Microsoft e,
mais tarde, a Google. A disputa era grande e nem sempre leal.
Nota
Assista ao filme Piratas do Vale do Silcio (1999) e tenha uma ideia de como essa guerra
estava longe de ser limpa.
Entretanto, no se sabia naquela poca onde essa disputa ia parar, nem quem seriam os vencedores,
nem mesmo, se haveria sequer vencedores. At um dos scios e presidente da Intel, Gordon Moore,
lanou um trabalho minucioso onde ele destacava a experincia que ele adquiriu ao longe de alguns
anos trabalhando na indstria de fabricao de processadores e circuitos para computadores. Ele percebeu que, sempre a indstria avanava em sua tecnologia e conseguia reduzir o tamanho de cada
transistor de um circuito integrado, os computadores tornavam-se tambm muito mais velozes do que
antes. Porm, essa reduo no tamanho dos transistores requer uma total atualizao nos equipamentos da indstria, tornando os equipamentos anteriores obsoletos. Assim, s seria vivel a evoluo
para transistores menores se o lucro da empresa fosse o suficiente para pagar todas essas despesas.
8 / 73
108
107
106
105
104
103
1970
1980
1990
2000
2010
Figura 1.5: Evoluo do nmero de transistores nos processadores em comparao com a Lei de
Moore
A Lei de Moore se tornou to importante que ela no usada apenas como uma meta a ser buscada
e batida a cada ano, mas tambm como um meio para se verificar se a indstria est evoluindo na
velocidade esperada. Apesar de Moore est muito correto em suas previses, todos sabem, inclusive
ele prprio, que esse crescimento no vai durar para sempre. Os transistores hoje esto na escala
de 25 nanometros. Essa a mesma escala de alguns vrus e bactrias. Reduzir mais do que isso
est se tornando cada vez mais difcil. Pesquisadores e cientistas buscam outras formas de fazer
com que os computadores continuem evoluindo em sua velocidade e reduzindo seu tamanho. Alguns
pensam na substituio de transistores de Silcio por outros materiais, como Grafeno. Outros at so
mais radicais e defendem que a forma de computao deve mudar, talvez atravs de Computadores
Qunticos ou de Bio-Computadores.
9 / 73
1.8
1.8.1
O primeiro computador criado foi o ENIAC (Electronic Numerical Integrator And Computer), desenvolvido por Eckert e Mauchly na Universidade da Pennsylvania, Estados Unidos. O projeto iniciou
em 1943 financiado pelo governo americano. O perodo era da Segunda Guerra Mundial e o objetivo
era poder calcular de forma mais gil as melhores trajetrias para transporte de armas e mantimentos
em meio aos exrcitos inimigos. Esse o tipo de clculo que pequenos aparelhos celulares fazem hoje
para encontrar rotas nas cidades atravs de GPS (Global Positioning System) e anlise de mapa. O
projeto s foi concludo em 1946, tarde demais para ser utilizado para a Segunda Guerra, mas foi
bastante utilizado at 1955.
O ENIAC ocupava uma rea de 4500 metros quadrados, pesava 30 toneladas e consumia cerca de
140KW. Ele era capaz calcular 5000 somas por segundo. A programao era feita manualmente atravs da manipulao de chaves, ou seja, no havia linguagem de programao, nem compiladores ou
interpretadores de comandos. O Sistema Operacional s surgiu bem depois e tomou o emprego de
muitos funcionrios chamados na poca de operadores de computadores. Profisso hoje extinta! O
ENIAC ainda no utilizada transistores, mas vlvulas que, dependendo de seu nvel de carga, representavam um nmero. Cada vlvula precisava estar devidamente aquecida para funcionar corretamente, ento o processo de ligar o ENIAC era trabalhoso e levava bastante tempo. Ele trabalhava com
o sistema de numerao decimal, o que parecia bvio naquela poca, mas que depois dos transistores,
se tornaram complexo demais e foi adotado o sistema binrio.
Aps a Segunda Guerra iniciou-se o perodo chamado de Guerra Fria, quando a espionagem, sabotagem e muito especulao reinava entre os pases liderados pela Unio Sovittica e Estados Unidos.
10 / 73
1.8.2
Muitas empresas e governos corriam para construir seu prprio computador que fosse mais avanado
do que os anteriores. Muitos projetos surgiram depois do ENIAC. Mas todos eles eram barrados por
algumas dificuldades e limitaes. Como por exemplo, o fato de no serem programados e trabalharem com nmeros decimais. O problema de trabalhar com decimais que cada algarismo armazenado
possui 10 estados possveis, representando os nmeros de 0 a 9. Dentro de um sistema eletrnico,
isso complicado por que a carga de cada dispositivo, seja transistor, seja vlvula, deveria ser medida
para verificar se que nmero ela estava representando. Os erros eram muito frequentes. Bastava que
uma vlvula estivesse fora da temperatura ideal para que os resultados das operaes comeassem a
sair errado. Von Neumann recomendou em sua arquitetura que os dados e instrues fossem agora
armazenados em binrio, facilitando a anlise dos mesmos e reduzindo a quantidade de erros.
Em 1952, o professor John von Neumann, da Univeridade de Princeton, Estados Unidos, apresentou
um projeto inusitado para a arquitetura de um computador. Ele sugeriu que o computador fosse
organizado em componentes, cada um executando apenas uma nica tarefa e de forma muito mais
organizada. Ele props que o computador fosse composto por (ver Figura 1.6 [11]):
Memria Principal: responsvel por armazenar os programas a serem executados, assim como os
dados a serem processados
Unidade Lgica e Aritmtica (ULA): para realizao das operaes lgicas e aritmticas
Unidade de Controle: que, baseado nas instrues lidas da memria, enviaria sinais de controle
para a ULA para que a mesma executasse as operaes devidas
Unidade Central de Processamento (CPU): que agruparia a ULA e a Unidade de Controle
Unidade de Entrada e Sada: responsvel pela comunicao com os perifricos do computador
(teclado, monitor, memria externa etc.)
Unidade Central de Processamento (CPU)
Unidade
Lgica
Aritmtica
Dispositivos
de Entrada
e Sada
(I/O)
Memria
Principal
(M)
Unidade de
Controlre de
Programa
1.8.3
A IBM
A International Business Machines, ou apenas IBM, foi fundada em 1911 com o nome de Computing
Tabulating Recording (CTR) e iniciou produzindo e comercializando calculadoras para empresas e
empresrios. S em 1924 que ela muda de nome para International Business Machines ou apenas
IBM. Ela uma das poucas empresas que sobreviveram a todos os avanos da computao e continua
sendo uma potncia mundial. Apenas em 1953 a IBM entra no mercado de computadores com o IBM
701, tendo sempre as grande organizaes como alvos. S muitos anos depois que os computadores
pessoais foram surgir. O IBM 701 trabalhava com cartes perfurados, ou seja, toda programao dele
era feita atravs de uma perfuradora que marca buracos para representar o bit 1, e deixava ilesa uma
rea para representar o 0. O mesmo acontecia depois que os programas era lidos e processados. Uma
folha de papel era perfurada pelo computador para representar o resultados das operaes executadas.
No preciso nem dizer o que isso era trabalhoso!
Em 1955 a IBM lana o IBM 702 que agora no fazia apenas clculos cientficos, mas tambm
aplicaes comerciais, visando deixar de ser um equipamento apenas para cientistas, mas tambm
para empresrios. Depois desses vrios outros computadores foram lanados nas sries 700. Essas
mquinas ainda utilizavam vlvulas para armazenar os dados. S em 1957 que surge a Segunda
Gerao de computadores, com a utilizao de transistores. Isso tornou os computadores mais leves,
baratos, velozes e mais energicamente eficientes. Os primeiros computadores dessa gerao foram o
IBM 7000 e o PDP-1, da DEC, empresa que no existem mais.
A IBM lana em 1964 o IBM srie 360, substituindo os antigos computadores da srie 7000. O IBM
360 inicia a primeira famlia de planejada de computadores. Isso significava que todos computadores
seguintes da srie 360 seriam compatveis com os anteriores. Todos programas desenvolvidos ou
adquiridos pelas empresas poderiam ser usados mesmo que a empresa substitusse os computadores
pela gerao mais nova. Isso tornou a IBM uma das empresas mais poderosas do mundo na poca,
com filiais e representantes em todos o continentes do planeta.
1.8.4
1.8.5
Memrias de semicondutores
Em 1970, uma empresa chamada Fairchild desenvolveu pela primeira vez uma memria utilizando
a mesma tecnologia utilizada para fabricar os processadores, os transistores. Isso possibilitou que
memrias muito menores, mais rpidas e mais baratas fossem desenvolvidas. E melhor, elas poderiam
ser inseridas muito prximas, e at dentro dos processadores, acompanhando sua miniaturizao. E
foi o que aconteceu. A medida que a tecnologia foi avanando e produzindo transistores cada vez
menores, as memrias tambm foram encolhendo.
Os processadores tornaram-se cada vez menores e mais velozes, mas infelizmente o avano no ocorreu tambm com a velocidade das memrias, mas apenas com o seu tamanho. Isso at hoje um
problema. Armazenamentos rpidos so muito complexos de fabricar e, por consequncia, caros.
Isso vem limitando o avano da velocidade dos computadores, mas sempre os cientistas vm encontrando alternativas para manter Gordon Moore e todos ns muito orgulhosos.
1.8.6
A Intel
A Intel Corporation, ou simplesmente Intel, surgiu nos Estados Unidos em 1968, como uma empresa
focada no projeto e fabricao de circuitos integrados. Ela foi fundada por Gordon Moore (o mesmo
da Lei de Moore) e Robert Noyce. Ela era inicialmente uma concorrente da IBM, mas logo se tornaram parceiras. A Intel fabricava os processadores e memria, e a IBM fazia a composio deles com
outros componentes para montar os computadores.
Em 1971 a Intel lana seu primeiro processador, o 4004, que trabalhava com operaes e dados de 4
bits. Foi uma revoluo, pois todos componentes da CPU estavam num nico chip. No ano seguinte
eles lanam o 8008, j de 8 bits. Em 1974 lanado o 8080, primeiro processador de propsito geral.
Ou seja, com ela tanto era possvel executar aplicaes cientficas, financeiras, grficas e jogos. O
mesmo princpio dos processadores atuais. Ele foi substitudo pelo 8086 de 16 bit. O prximo foi o
80286 que j era capaz de trabalhar com uma memria de 16MBytes. O 80386 trabalhava com 32
bits e tinha suporte a multi-tarefas, ou seja, era finalmente possvel executar mais de uma aplicao
simultaneamente. Depois veio o 80486 com muito mais memria e bem mais rpido, alm de um
co-processador especfico para aplicaes matemticas. A partir do 80286 as pessoas omitiam o 80
ao falar do processador, chamando-o apenas de 286, 386 e 486.
Em seguida veio a gerao Pentium, focando cada vez mais na execuo de tarefas paralelas, adicionando vrias unidades de processamento e armazenamento de dados dentro processador. Agora os
processadores no teriam apenas uma ULA ou uma memria dentro do processador, mas vrias delas.
Hoje estamos na gerao dos processadores multi-ncleos, ou multi-cores, que nada mais so do que
vrios processadores replicados dentro de um mesmo chip e coordenadores por uma unidade nica.
1.8.7
A Apple e a Microsoft
Em 1974 Steve Jobs e Steve Wosniak trabalhavam noites a fio para tentar, pela primeira vez, criar um
computador que fosse voltado no a empresas, mas a pessoas tambm. Seria a ideia de um computador
pessoal. Eles compraram todos componentes necessrios para montar um computador, fizeram vrias
improvisaes e inovaes, acoplaram uma TV e um teclado. Wosniak, um gnio da eletrnica e
programao, desenvolveu o software para controlar o computador e ainda alguns aplicativos, como
13 / 73
1.9
Recapitulando
14 / 73
1.10
Atividades
Quais as quatro funes bsicas que todos os computadores executam? D um exemplo de operao
de cada uma delas.
Quais os elementos bsicos de um computador e quais as funcionalidades de cada um deles?
Quais as diferenas entre um sinal analgico e um digital? Apresente os pontos fortes e fracos de
cada um deles. Na sua opinio, qual dos dois sinais apresentam maior qualidade?
Caracterize o que uma Mquina de von Neumann
O que so transistores? Quais as vantagens na concepo de computadores com o surgimento dos
transistores?
Por que quantos menores os transistores, mais velozes os computadores? H desvantagens nessa
miniaturizao das mquinas? Quais?
O que diz a Lei de Moore? Em sua opinio, h um limite para esse crescimento? Onde vamos
chegar?
Que outras tcnicas podem ser utilizadas para aumento do desempenho dos processadores que no
pela reduo do tamanho dos transistores? Explique cada uma delas.
Feedback sobre o captulo
Voc pode contribuir para melhoria dos nossos livros. Encontrou algum erro? Gostaria de
submeter uma sugesto ou crtica?
Para compreender melhor como feedbacks funcionam consulte o guia do curso.
15 / 73
Captulo 2
Unidade Central de Processamento (CPU)
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Identificar os principais componentes de uma CPU
Conhecer o funcionamento de uma CPU
Saber como um programa executado em ciclos
Definir e explicar o que uma interrupo e suas consequncias
Argumentar sobre aspectos que influenciam no desempenho de uma CPU
Nesse captulo vamos estudar a parte mais importante de um computador, que a Unidade Central
de Processamento, ou UCP, ou, do ingls, CPU. A CPU responsvel no apenas por executar os
programas contidos na memria, mas tambm de controlar todos os dispositivos de entrada e sada.
Seu avano ao longo dos anos tem permitido que programas fossem executados cada vez mais rapidamente. Hoje temos processadores de vrios ncleos capazes de executar vrias atividades ao mesmo
tempo. So esses processadores e funcionalidades que iremos estudar nesse captulo.
2.1
O que um programa?
Nesse momento, voc no apenas deve saber o que um programa, como j deve ter at j escrito seus
prprios programas e entendido um pouco como o computador funciona. Os programas so sequncias finitas de passos que foram definidas por um programador para alcanar um objetivo especfico.
Cada passo desse programa chamado de instruo. No necessariamente, uma instruo escrita
em uma linguagem de alto nvel, como C, Java, Python, por exemplo, diretamente transformada em
uma instruo de mquina e armazenada em memria para execuo da CPU. Na verdade, geralmente,
uma instruo de uma linguagem de alto nvel embute vrios comandos e aes a serem executadas
pela CPU. Essa a principal razo da criao dessas linguagens de alto nvel. O programador deve
ter o menor trabalho possvel ao escrever um programa. Ele deve se preocupar com o problema que
est tentando solucionar, ao invs de memorizar dezenas de comandos de uma linguagem de mquina
extensa e repleta de detalhes.
Aps compilado, o programa de linguagem de alto nvel transformado em um programa apenas
com instrues de mquina. Cada instruo de mquina contm apenas uma nica operao a ser
realizada pela CPU. Para ser executado, esse programa deve ser transferido para a Memria Principal.
16 / 73
2.1.1
Software X Hardware
O computador composto por dois elementos, o software e o hardware. Tanto o hardware quando o
software foram escritos por um programador, ou engenheiro, para se resolver um determinado problema. O incio sempre o mesmo. O profissional se depara com um problema e projeta uma soluo
algortmica para ele. A diferena est na concepo. O hardware concebido em chip, utilizando
transistores interconectados. Uma vez elaborado, o hardware no pode mais ser modificado. Ele
uma soluo rgida (do ingls, Hard) para o problema. J o software elaborado para ser armazenado
numa memria e ser executado com um processador de propsito geral. Ele uma soluo flexvel (do
ingls, Soft) para o problema, j que o programador pode, a cada momento, modificar seu programa
afim de torn-lo cada vez melhor.
Solues em software so sempre mais lentas do que solues equivalentes em hardware. Isso porque
para executar um programa, cada instruo deve antes ser armazenada em memria, transferidas para
a CPU (lembre-se que memrias so muito mais lentas do que CPUs) e, s ento, ser executada pela
CPU. J as solues em hardware no utilizam instrues, elas executam as operaes diretamente.
Por outro lado, as solues em software ganham em flexibilidade, j que os programas podem ser
facilmente modificados. J as solues em hardware, no. Uma vez concebido, um hardware no
pode mais ser modificado, ele deve ser descartado para dar lugar a uma verso mais nova. Isso torna
projetos em hardware muito mais caros.
Para entender melhor, podemos citar alguns exemplos de implementaes em hardware comumente
utilizadas. Todas so escolhidas devido ao seu carter de pouca necessidade de modificao, mas
muito demanda por alto desempenho. Por exemplo, chips de criptografia para celulares (geralmente
smartphones), processadores aritmticos para acelerar o clculos, aceleradores grficos para gerar
grficos mais rpidos, alguns chips para fazer edies rpidas em fotos, geralmente acoplados s
cmeras digitais. As implementaes so feitas em software quando a demanda por desempenho no
tanta, ao mesmo tempo em que as atualizaes so frequentes, como os Sistemas Operacionais, os
jogos e aplicativos em geral.
Apesar de no ser to rpida quanto gostaramos, a CPU uma soluo muito boa por permitir a
execuo de, praticamente, qualquer tipo de programa, se tornando uma mquina de propsito geral.
17 / 73
2.2
Toda CPU formada por duas unidades, como podem ser vistas na Figura 2.1 [18]:
Unidade de Controle (UC)
Unidade de Ciclo de Dados (UCD)
clock
Intrues
Controles
externos
Unidade de
Controle
Endereo de
instrues
Controles
internos
Condies
Dados
Dados
Ciclo de Dados
Endereos
dos dados
CPU
2.2.1
Saindo um pouco de dentro da CPU, podemos enxergar os barramentos e a Memria Principal, como
apresentado na Figura 2.2 [19]. Para facilitar a visualizao, os Barramentos de Dados e de Endereo
so apresentados replicados, tanto do lado esquerdo, quanto do direito da figura.
18 / 73
Memria Principal
Controles
internos
Dados
Condies
Dados
Ciclo de Dados
Endereos
dos dados
Barramento de Controle
Unidade de
Controle
Barramento de Endereos
Barramento de Dados
Barramento de Endereos
Endereo de
instrues
Barramento de Dados
Controles
externos
Intrues
Barramento de Dados
Barramento de Endereos
2.2.2
Os registradores
Endereo de
instrues
PC
Intrues
IR
Unidade de
Controle
Controles
internos
Dados
Condies
MBR
Dados
MAR
Reg.
Prop.
Geral
Endereos
dos dados
ULA
Importante
Lembre-se que as memrias so muito mais lentas do que os processadores!
A CPU tenta ao mximo manter as variveis mais utilizadas nos registradores. Ela faz isso guardando
aquelas mais usadas nas ltimas operaes. Nem sempre isso funciona, mas no geral, a melhor
soluo.
Nota
Faa suas variveis mais importantes serem bastante utilizadas. Usando-as em repeties,
por exemplo. Isso aumentar as chances delas serem armazenadas em registradores, podendo acelerar a execuo dos seus programas.
2.2.3
A Unidade Lgica e Aritmtica, ou ULA, se assemelha muito com uma calculadora convencional. Ela
executa operaes lgicas e aritmticas. As ULAs modernas executam operaes tanto com inteiros,
como com nmeros reais. A ULA recebe como entrada dois diferentes dados que so trazidos para
ela dos registradores (de propsito geral, ou especficos) (veja a Figura 2.3 [20]). Quem decide que
registradores passaro seus dados para a ULA a Unidade de Controle baseada no tipo da instruo
que est sendo executada. A Unidade de Controle tambm envia para a ULA qual operao ser
realizada (soma, multiplicao, diviso, AND, OR etc.). Assim que isso feito, a ULA executa a
operao e gera um resultado na sua sada. Esse resultado tambm passado para um registrador
escolhido pela Unidade de Controle, baseando-se na instruo em execuo.
2.2.4
A Unidade de Controle, ao receber a instruo que est armazenada em IR, a decodifica e envia os
sinais de controle para onde for necessrio. Decodificar nada mais do que ler um cdigo em binrio
e interpretar a operao relativa a esse cdigo. Dependendo da operao, os sinais de controle podem
ser internos, por exemplo, para a ULA executar uma soma, ou para o contedo de um registrador ser
transferido para a ULA. Ou pode ser externo, para um dispositivo de entrada e sada, por exemplo, ou
mesmo para a Memria Principal. Tudo isso depende da instruo a ser executada.
Na prxima seo ser apresentada a execuo de instrues em mais detalhes, o que facilitar o
entendimento do funcionamento das CPUs.
2.3
Ciclo de Instruo
Toda CPU trabalha em dois ciclos principais, o Ciclo de Busca e o Ciclo de Execuo, como pode
ser visto na Figura 2.4 [22]. Assim que o computador iniciado, a CPU entra no Ciclo de Busca,
em seguida passa para o Ciclo de Execuo e depois volta para o Ciclo de Busca. Ela continua nesse
processo at que precise ser desligada, saindo do Ciclo de Execuo para o estado final.
21 / 73
2.3.1
Busca de Dados
Em operaes entre Processador e Memria, necessrio que dados sejam trazidos da memria para
servirem de entrada para a ULA, e/ou o resultado seja levado para armazenamento na memria no
final da execuo. Para isso acontecer, executada uma Busca de Dados. Isso determinado durante
a decodificaro da instruo, no ciclo de Busca de Instruo. Isso acontece quando um dos parmetros de uma operao aritmtica um endereo de memria, e no um valor diretamente, nem um
22 / 73
2.4
Interrupes
Alm do ciclo bsico de instruo apresentado anteriormente, a CPU pode ainda executar outro tipo
de tarefa. Ela diz respeito ao processamento de pedidos oriundos dos dispositivos de Entrada e Sada.
Como o Ciclo de Instruo da CPU que vimos at o momento fechado, ou seja, a CPU sempre fica
em estado de repetio at que seja desligada, ela no pode atender a nenhum evento externo que no
seja a execuo de um programa. Por exemplo, quando um usurio pressiona uma tecla do teclado,
ou faz um movimento com o mouse, ou mesmo, quando uma mensagem chega pela Internet atravs
da placa de rede. O que a CPU deve fazer? Se ela estiver em um Ciclo de Instruo fechado como
mostrado anteriormente, nada. Ela precisa parar o que est fazendo para atender ao evento ocorrido
e, s ento, voltar ao Ciclo de Instrues. Esse processo de parar o Ciclo de Instruo para atender a
um evento externo chamado de Interrupo.
O Ciclo de Instruo pode agora ser visto modificado na Figura 2.5 [23] para atender s Interrupes. Todas as interrupes so recebidas e armazenadas internamente por um dispositivo chamado
Gerenciador de Interrupes. Esse dispositivo um chip, semelhante uma CPU, mas bem mais
simples.
2.5
Sobre o desempenho
possvel agora perceber que o desempenho das CPUs depende de muito outros fatores alm da velocidade do seu clock. O computador precisa ter memrias rpidas para reduzir o tempo dos Ciclos de
Busca, precisam de mais registradores para usar menos a memria e tambm que poucas interrupes
ocorram. Cada vez que uma interrupo ocorre, o programa deve ser interrompido e a chamada deve
ser atendida. Isso vai atrasar demais o tempo de execuo dos programas, dando a impresso de baixo
desempenho.
Basicamente, h dois tipos programas, os orientados CPU e os orientados a Entrada e Sada. Na
Figura 2.6 [25] o comportamento dos primeiros mostrado na parte a) e o dos segundos na parte b).
24 / 73
Tempo
(b)
2.6
Suponha que queiramos executar uma instruo de mquina que soma dois nmeros que esto na
memria e salve o resultado em outro endereo de memria. Para tal, vamos indicar que a memria
(M) se comporta como um vetor (um array) e entre colchetes indicaremos o endereo do dado, ou da
instruo. Sendo assim, a instruo que gostaramos de executar seria:
200: M[100] = M[101] + M[102]
Nesse caso, vamos ler que no endereo 200 da memria h uma instruo que precisa somar o
contedo do endereo 101, com o contedo do endereo 102 e salvar o resultado no endereo 100
da memria. Supondo que M[101] contenha o valor 10, e M[102] contenha o valor 20, ao final da
execuo, o endereo 100 de memria (M[100]) dever conter o valor 30.
Como uma instruo como essa ser executada depende de cada arquitetura. Aqui vamos utilizar
uma abordagem que quebra as instrues em pequenos passos simples, que facilitam o trabalho de
decodificaro da CPU.
Sendo assim, esse programa seria transformado na seguinte sequncia de instrues e executado.
PC = 200;
//Envia comando de leitura de instruo para a memria
25 / 73
A primeira ao seria realizar o Ciclo de Busca, visando trazer a instruo a ser executada da memria
para o processador. O endereo da instruo (200) seria passado para o PC e um comando de leitura
de instruo seria passado para a memria. Baseada no endereo trazido por PC, a memria localizaria
a instruo e a enviaria para o processador, que a armazenaria no registrador IR. Antes de passar a
instruo para a Unidade de Controle para dar incio execuo, o registrador PC atualizado para o
prximo endereo de memria, no caso, 201.
O prximo passo ser iniciar o Ciclo de Execuo:
//O primeiro dado trazido da memria para o registrador R1
MAR = 101
//Envia comando de leitura de dado para a memria
MBR <- 10
R1 = MBR
Como os dados a serem operados esto tambm na memria, antes necessrio executar uma operao de Busca de Operando, ou Busca de Dado. O primeiro operando est no endereo 101. Sendo
assim, o endereo 101 passado para o registrador de endereo (MAR). Esse endereo passado para
a memria e enviado um comando de leitura de dado. O contedo, o valor 10, ento localizado
pela memria e enviado para o processador, que o armazena no registrador de dados (MBR). Como
o MBR ser utilizado nas prximas etapas de execuo, seu contedo salvo em um registrador de
propsito especfico, o R1.
Em seguida, a Unidade de Controle passa para a busca do segundo operando, contido no endereo
102:
//O segundo dado trazido da memria para o registrador R1
MAR = 102
//Envia comando de leitura de dado para a memria
MBR <- 20
R2 = MBR
Essa etapa ainda faz parte do Ciclo de Execuo, e tambm diz respeito uma Busca de Dado. A
busca mesma do passo anterior, mas agora o endereo buscado o 102, e o contedo o 20, que
repassado para o registrador R2.
O prximo passo do Ciclo de Execuo executar a operao aritmtica propriamente dita. Isso
geralmente feito entre registradores de propsito geral, por serem mais rpidos do que se fosse
tratar dados da memria. Os contedos de R1 e R2 so somados e armazenados em R3:
R3 = R1 + R2
26 / 73
MBR = R3
Para isso ser realizado, preciso executar uma operao de escrita na memria. O endereo 100
ento passado para MAR e o resultado da operao, salvo em R3 passado para MBR. Quando
o comando de escrita enviado pela Unidade de Controle para a memria, ela l o endereo 100
pelo Barramento de Endereo e o valor 30 pelo Barramento de Dados e salva, ento, o valor 30 no
endereo 100.
Com isso a operao finalizada. Essa operao foi executada em aproximadamente 14 passos. Esse
valor aproximado porque alguns deles so apenas o envio de sinal para a memria, e isso geralmente
feito em paralelo com o passo seguinte. Se cada passo for executado dentro de uma batida do relgio
(ou ciclo de clock), teremos 14 ciclos de clock para uma nica instruo. Mas perceba que o acesso
memria sempre mais lento do que a execuo do processador. Se cada acesso memria levar 3
ciclos de clock, teremos um total de 20 ciclos de clock.
Nota
Apenas uma memria tipo Cache poderia ser acessada com apenas 3 ciclos de clock. Uma
memria principal convencional precisa de entre 10 e 15 ciclos de clock para ser lida. Depende de sua tecnologia (e preo!).
Parece bastante, mas algumas instrues podem levar muito mais ciclos do que isso, como operaes
com Ponto Flutuante (nmeros reais), ou de acesso a um perifrico, como o disco rgido. Isso depende
muito de como o projeto do computador elaborado.
Apesar do computador parecer pouco efetivo na execuo de uma simples soma, como ele executa
numa frequncia de clock muito alta, ele acaba executando muitas operaes por segundo. Ento,
utilizar apenas a frequncia de clock como medida de desempenho no uma boa ideia. O mais
utilizado medir a quantidade de operaes aritmticas que o processador capaz de executar por
segundo. Hoje em dia um computador pessoal est na escala dos alguns Milhes de Instrues por
Segundo (ou MIPS). Mais a seguir vamos estudar como essas e outras medidas de desempenho podem
ser calculadas.
O que vem por a
At o momento vimos como um processador bsico trabalha. Nas prximas sees deste
captulo vamos ver como o desempenho pode ser aumentado, ainda mais, aumentando adicionando tcnicas avanadas de execuo paralela e de anlise de programas.
2.7
Cada instruo deve passar pelos cinco passos descritos para ser executada. Suponha que cada etapa
necessite de apenas 1 ciclo de clock para ser executada. Quantos ciclos seriam necessrios para
executar um programa de 20 instrues? Essa conta simples. Cada instruo deve passar pelas
cinco etapas, e cada etapa leva 1 ciclo de clock, sendo assim, o programa levar 20 vezes 5 ciclos, ou
seja, 100 ciclos de clock.
Agora vamos analisar o que acontece com cada etapa a medida em que o programa executado.
A primeira instruo vai passar pela etapa FI, que a leva para o IR e a decodifica. Em seguida
ela passada para a etapa FO, e os dados necessrios para a operao so levados dos respectivos
registradores para a ULA. Agora, observe. Neste exato momento, a segunda instruo do programa
est parada na memria, aguardando sua vez para ser executada. Ao mesmo tempo, a etapa FI est
ociosa. Por que a etapa FI no pode entrar em ao e trabalhar com a segunda instruo do programa,
enquanto a primeira est na etapa FO?
28 / 73
FI
FO
EI
WM
WR
Fetch
REG
ULA
DMem
REG
Figura 2.7: Processador adaptado para trabalhar com Pipeline de cinco estgios
A primeira mudana necessria a separao da memria em duas partes independentes (ou duas
memrias mesmo). Uma parte ser utilizada apenas para instrues (representadas na figura pela
palavra Fetch), e outra apenas para os dados (representada por DMem). Isso necessrio para que a
etapa FI acesse a memria para buscar a prxima instruo, ao mesmo tempo em que a WM acessa
a memria para salvar o resultado de outra instruo anterior. Se houvesse apenas uma memria
para dados e instrues, isso no seria possvel. Essa mudana vai contra o que foi projetado na
((Arquitetura de von Neumann)), e foi considerado um grande avano. Ela foi batizada de Arquitetura
Harvard.
Outra mudana importante foi a adio de memrias intermedirias entre cada etapa. Na Figura 2.7
[29] essas memrias so representadas pelos retngulos preenchidos e sem nenhuma palavra sobre
eles. Essas memrias so utilizadas para armazenar o resultado da etapa anterior e pass-lo para a
etapa posterior no ciclo seguinte. Elas so necessrias porque as etapas no executam necessariamente
sempre na mesma velocidade. Se uma etapa for concluda antes da etapa seguinte, seu resultado deve
ser guardado nessas memrias para aguardar que a etapa seguinte conclua o que estava fazendo. S
ento ela poder receber o resultado da etapa anterior.
O mesmo ocorre na produo de um carro. A etapa de instalao do motor pode ser mais rpida
do que a de pintura, por exemplo. Ento, se um carro acabou de receber um motor, ele deve ser
guardado num local temporrio at que o carro anterior tenha sua pintura concluda. Assim, a etapa
de instalao do motor pode receber um novo carro.
Qual o benefcio da execuo em Pipeline? Para isso, vamos analisar a Figura 2.8 [30].
29 / 73
Instrues
I1
I2
I3
Fetch
REG
ULA
DMem
Fetch
REG
ULA
DMem
Fetch
REG
ULA
DMem
Fetch
REG
ULA
DMem
Fetch
REG
ULA
I4
I5
REG
REG
REG
REG
DMem
REG
2.8
Limitaes do Pipeline
Infelizmente, nem sempre o processador consegue usufruir do ganho mximo de desempenho ao usar
o Pipeline. H vrios riscos que podem fazer com que o Pipeline seja interrompido e precise ser
reiniciado, ou impossibilitado at de iniciar. Os riscos so:
Riscos Estruturais
Riscos de Dados
30 / 73
A instruo I1 inicia primeiro e logo avana nas etapas do Pipeline. Logo depois dela vem I2. Quando
I2 for buscar o valor de r1 na etapa FO, ele ainda no estar pronto, porque I1 ainda est em EI. A
instruo I1 precisaria concluir a ltima etapa (WM) para que I2 pudesse executar FO. Nesses casos,
dizemos que h uma Dependncia de Dados. Isso cria uma bolha no Pipeline, o processador tem que
avanar I1 at a concluso de WM, e parar a execuo de I2 e todas instrues seguintes at ento.
S depois da concluso de I1 que o I2 e as prximas instrues seriam liberadas para continuar a
execuo.
O ltimo tipo de risco o Risco de Controle. Esse ocorre quando qualquer mudana no fluxo de
controle do processador. Ou seja, quando a execuo deixa de ser meramente sequencial. Como
vimos anteriormente, o Pipeline vale a pena quando temos uma grande sequncia de instrues sendo
executadas. O processador confia que depois da instruo I1 ele executar a I2, depois a I3, e assim
sucessivamente. Mas o que acontece, por exemplo, se o processador estiver executando a instruo
I10, e essa instruo ordenar que o programa salte para a instruo I30? Isso pode ocorrer se a
instruo se tratar de uma repetio, ou uma chamada a uma funo. A mudana de controle tambm
pode ocorrer por meio de interrupo, provocada por um dispositivo de entrada e sada, ou pelo
pelo prprio Sistema Operacional, quando determina que um programa seja interrompido para passar
a execuo para um outro. Quando h uma mudana no fluxo de execuo desta maneira, todas
instrues que esto no Pipeline so removidas, o fluxo modificado, e o Pipeline comea a ser
preenchido todo novamente.
As tcnicas de Pipeline avanaram bastante e vrias medidas foram tomadas para amenizar o prejuzo
causado pelos riscos mencionados. Entretanto, nenhuma tcnica capaz de evitar todas as possveis
perdas de desempenho. At boas prticas de programao podem ajudar a otimizar a execuo dos
programas, e os compiladores tambm ajudam bastante neste aspecto.
Na prxima sesso vamos estudar um pouco como podemos realmente medir o desempenho dos
processadores e entender melhor o que faz um processador mais eficiente do que outro.
31 / 73
2.8.1
Medidas de desempenho
Para medir o desempenho dos computadores, trs mtricas principais so mais usadas:
Ciclos de Clock por Instruo (CPI)
determina quantos ciclos de clock so necessrios para executar uma determinada instruo.
Vimos que o Ciclo de Instruo organizado em vrias etapas e que isso depende de instruo
para instruo. Se uma instruo acessar mais memria do que outra, ela ser mais lenta.
Instrues que operam com Pontos Flutuantes so mais lentas do que as operaes com nmeros
inteiros. fcil perceber a razo disso. Operaes com nmeros reais so mais complexas de
serem resolvidas, porque devem ser realizadas para a parte fracionria e para a inteira, e depois
o resultado deve ser consolidado. Assim, simulaes so realizadas com um processador e
so calculados quantos ciclos de clock cada tipo de instruo necessita em mdia para ser
completada. Este o CPI!
Milhes de Instrues por Segundo (MIPS)
o CPI uma medida utilizada para medir o desempenho do processador para cada tipo de
instruo, mas no muito boa para medir o desempenho para a execuo de programas, que o
objetivo de todo computador. Isso porque os programas so geralmente formados por instrues
de todos os tipos, com inteiros, ponto flutuante, acessando muita ou pouca memria. Outro fator
que fatores como, Pipeline, tecnologia de memria e tamanho da memria Cache, podem fazer
com que uma instruo seja executada lenta agora, e rpida logo em seguida. Para contornar
32 / 73
Clock
CPIM
Onde, Clock a frequncia do relgio do processador em Hertz, CPI o CPI mdio e M um milho
(106 ). necessrio dividir o resultado por M porque a medida do MIPS sempre dada na escala de
milhes. Por exemplo, se um processador de 2 GHz e CPI mdio de 4 ciclos por instruo, o MIPS
desse processador ser:
2G
MIPS = 4M
O resultado dessa operao ser 0,5M, ou 500K. Isso porque 2 dividido por 4 0,5, e 1 Giga dividido
por 1 Mega, resulta em 1 Mega.
Nota
Lembre-se sempre de considerar a grandeza do Clock no clculo. Um giga Hertz muito
diferente de um kilo, ou um mega Hertz!
2.8.2
Suponha que um programa executado num processador de 40MHz. A Tabela 2.1 [34] apresenta os
CPIs coletados para cada tipo de instruo, bem como sua quantidade de instrues para um determinado programa com 100.000 instrues.
33 / 73
CPI
1
4
2
5
Nmero de instrues
45.000
32.000
15.000
8.000
(145000)+(432000)+(215000)+(58000)
(45000)+(32000)+(15000)+(8000)
CPI =
45000+128000+30000+40000
100000
CPI =
243000
100000
CPI = 2, 43
J o MIPS pode ser calculado como:
MIPS =
Clock
CPIM
MIPS =
40M
2,43M
MIPS = 16, 46
Ou seja, para o programa examinado, o processador teve um desempenho de 16,46 milhes de instrues por segundo. Se o objetivo for calcular o MIPS geral, e no especfico para esse programa,
deve-se utilizar a mdia aritmtica de todos os CPI calculados, e no a mdia ponderada.
Para calcular o MFLOPS seguimos a mesma estratgia, mas dessa vez utilizamos apenas o CPI para
instrues de ponto flutuante. Ou seja:
MFLOPS =
Clock
CPI f M
MFLOPS =
40M
2M
MFLOPS = 20
Isso significa que esse processador apresentou um desempenho de 20 milhes de instrues de ponto
flutuante por segundo.
2.9
Recapitulando
Vimos em mais detalhe neste captulo como os processadores executam nossos programas, e como
alguns aspectos de organizao e arquitetura so importantes. No apenas a frequncia do clock do
34 / 73
35 / 73
Captulo 3
Unidade de Controle
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Conhecer o funcionamento da Unidade de Controle em mais detalhes
Apresentar como as instrues so executadas pela CPU
Neste captulo vamos entrar mais a fundo no estudo das CPUs e vamos apresentar a Unidade de
Controle, principal unidade dos processadores. Conhecer a Unidade de Controle essencial para o
entendimento de como as instrues so executadas pelo computador.
3.1
Introduo
A Unidade de Controle, como visto no captulo anterior, a unidade interna CPU responsvel (como
o prprio nome j diz) pelo controle da execuo das instrues. Como a CPU uma mquina de executar instrues, a Unidade de Controle quem controla o principal funcionamento do computador.
O projeto de uma Unidade de Controle varia de arquitetura para arquitetura, mas h alguns pontos
que so comuns a todas elas. Toda Unidade de Controle trabalha com a execuo de Microoperaes.
Como pode ser visto na Figura 3.1 [37], um programa sempre executado instruo por instruo.
Essas seriam instrues de mquina, compiladas a partir de Assembly, ou antes a partir de uma linguagem de alto nvel e depois compiladas para Assembly. Cada instruo executada atravs de um
Ciclo de Instruo, como visto no captulo anterior. Nessa ilustrao o ciclo de instruo foi apresentado em cinco estgios (Carrega instruo, decodifica, executa, salva resultados e checa interrupo).
Mas ele pode variar de acordo com a arquitetura da Unidade de Controle e tambm de acordo com o
tipo de instruo. Uma instruo com vrios parmetros que esto na memria, por exemplo, pode necessitar de um estgio a mais antes da execuo para buscar os dados na memria. J outra que utiliza
apenas dados de registradores pode omitir esse passo e execut-lo no prprio estgio de execuo.
36 / 73
Ciclo de Intruo
Ciclo de Intruo
...
...
Carrega
Op
Op
Executa
Decodifica
Op
Op
Op
Op
Op
Op
Interrupo
Salva
Op
...
...
3.2
Microoperaes
Ainda na Figura 3.1 [37] pode ser visto que cada estgio do Ciclo de Instruo quebrado em subestgios, chamados de Microoperaes. A Microoperao a operao atmica (indivisvel) realizada
pela Unidade de Controle para a execuo de cada estgio. Cada vez que um estgio do Ciclo de
Instruo for executado, as devidas Microoperaes so executadas pela Unidade de Controle.
Essa organizao necessria para melhorar a organizao da CPU e facilitar o projeto das Unidades
de Controle. Alm disso, nos projetos de Unidades de Controle modernas, possvel reutilizar Microoperaes de um estgio em outro. Por exemplo, para executar uma instruo, necessrio executar
uma Microoperao para buscar um dado que est em um registrador (ou memria) para a ULA. Se
houver vrios dados envolvidos, a nica tarefa a ser realizada pedir para a Unidade de Controle
executar a mesma Microoperao de buscar dado, mas agora com endereo diferente.
Dessa maneira, todas instrues que chegam Unidade de Controle so quebradas em estgios
(lembre-se do Pipeline), que por sua vez, separados em sequncias de Microoperaes e, s ento,
so executadas. Agora vamos apresentar alguns exemplos de como os principais estgios de execuo
so organizados em Microoperaes.
3.2.1
Busca de Instruo
Neste estgio uma nova instruo deve ser buscada da memria e trazida para a CPU para que possa
ser decodificada e executada em seguida. O endereo da instruo a ser buscada est sempre no Contador de Programa (PC) e a instruo buscada da memria armazenada no Registrador de Instruo
(IR). Vamos ento apresentar como seriam as Microoperaes para realizar a Busca de Instruo.
A seguir cada Microoperao apresentada ao lado de uma determinao do tempo em que ela ser
realizada. Nesse caso, trs unidades de tempo so necessrias (t1, t2 e t3). Imagine que cada unidade
de tempo 1 ciclo de clock (as microoperaes mais complexas levam mais tempo do que isso).
t1:
t2:
t3:
Nesta segunda opo, o incremento de PC foi passado para o tempo t3, ao invs de t2, o que gera o
mesmo resultado.
A quantidade de Microoperaes que podem ser executadas no mesmo ciclo de clock depende da
arquitetura do processador. Por exemplo, se h apenas uma ULA, ento s possvel executar uma
nica operao lgica, ou aritmtica a cada ciclo de clock. O mesmo serve para o uso acesso memria com MAR e MBR. Se houver um barramento exclusivo para instrues, separado do barramento
de dados e uma memria de instruo separada da memria de dados (quase todos processadores hoje
possuem), e ento possvel buscar uma instruo no mesmo ciclo de clock que se busca um dado.
3.2.2
Busca indireta
Outro tipo de Microoperao muito utilizado a Busca Indireta. Ela trata de buscar um dado que est
na memria e trazer para a CPU para ser utilizado pela instruo. O termo indireta indica que o
dado no est diretamente na CPU (em um registrador) mas na memria.
Imagine que a instruo em questo seja a soma de 2 nmeros A e B, ambos na memria. Esta
instruo foi buscada no estgio anterior, portanto no ciclo seguinte ela estar no registrador IR.
Ento, os endereos de A e B esto presentes na instruo que agora est em IR. A Busca Indireta
deve ento ser realizada para A e depois para B, da seguinte forma:
t1:
t2:
t3:
38 / 73
3.2.3
Execuo
Aps a busca da instruo e dos dados necessrios, hora de executar a instruo na Microoperao
de execuo. Mantendo o exemplo da soma A e B apresentado anteriormente, a Unidade de Controle
ter que fazer a Busca Indireta de A e B para depois realizar a soma. Supondo que A seja salvo
em ACC, ele deve ser transferido para outro registrador, digamos R1 antes de Busca Indireta por B.
Assim, a execuo seria:
t1:
R1 <- ACC
// Busca indireta por B:
t2:
MAR <- (IRendereco)
Memria <- read
t3:
MBR <- (memria)
t4:
ACC <- MBR
t5:
ACC = R1 + ACC
Em t1 o contedo de A salvo em ACC ser transferido para o registrador R1. Nos intervalos de t2 at
t4 seria feita a Busca Indireta por B. E, finalmente, no instante t5 a soma de R1 e ACC seria realizada
e salva no acumulador ACC.
3.2.4
Salvar resultado
Aps esse ltimo passo, o contedo de ACC com o resultado da operao deve ser transferido para o
local de destino. Isso feito no estgio de Salvar Resultado. Se o resultado for salvo num registrador,
a operao direta e feita num nico ciclo de clock. Mas se precisar salvar o resultado na memria,
uma escrita indireta dever ser realizada para salvar o contedo de ACC na memria.
t1:
t2:
Para tal, inicialmente em t1 o endereo da varivel de memria que precisa ser salva passado para o
MAR. O contedo de ACC passado para o MBR no ciclo seguinte (t2), ao mesmo tempo em que a
CPU envia para a memria um sinal de escrita. Ao receber esse sinal, a memria traz o contedo de
MBR e o salva no endereo representado por MAR.
3.2.5
Salto condicional
Uma instruo muito comum executada pelos computadores so os saltos condicionais. Ela indica
que se uma determinada condio for satisfeita, a execuo no deve ser a da instruo seguinte, mas
a indicada pela instruo. Imagine uma instruo Salta se zero, com dois parmetros, X e Y. O X
seria a varivel a ser testada e o Y o endereo para onde a execuo deve saltar caso o valor de X seja
0.
Desta forma, as microoperaes seriam as seguinte:
// Busca indireta por X:
t1: MAR <- (IRenderecoX)
Memria <- read
t2:
MBR <- (Memria)
t3:
ACC <- (MBR)
39 / 73
se ACC == 0, PC = (IRenderecoY)
Inicialmente, de t1 a t3, seria buscado o contedo de X na memria. No ltimo ciclo t4, o contedo
de ACC seria comparado com 0 e se forem iguais, o contedo de PC ser o endereo da varivel Y,
tambm presente em IR. Observe que, caso contrrio, nada precisa ser feito, o PC continuar como
antes e a prxima instruo depois da atual ser executada.
3.3
Tipos de Microoperaes
Como j foi possvel observar atravs dos exemplos apresentados, h quatro tipos bsicos de Microoperaes de uma Unidade de Controle. So eles:
Transferncia de dados entre registradores
Transferncia de dados de registrador para o exterior da CPU
Transferncia de dados do exterior da CPU para um registrador
Operao lgica e aritmtica
A transferncia de dados de um registrador para outro a mais simples das Microoperaes e geralmente feita num nico ciclo de clock. J a movimentao de dados de ou para o exterior da CPU
pode ser mais complexa. Para facilitar muitos computadores mapeiam todos dispositivos de Entrada e
Sada com se fossem memria. Ou seja, para a CPU, enviar um dado para um dispositivo seria como
escrever um dado na memria, bastando usar um endereo diferente. Isso facilita bastante a operao
da Unidade de Controle, mas pode limitar a quantidade de endereos de memria disponveis para os
programas. As operaes de transferncia de dados so complexas tambm porque levam um tempo
no conhecido para serem executadas. Se o dado estiver na memria Cache o acesso mais rpido, se
estiver na Memria Principal levar mais tempo, e se tiver num dispositivo externo, um Disco Rgido,
por exemplo, pode levar ainda mais.
As operaes lgica e aritmticas podem ser mais rpidas ou mais lentas dependendo de cada uma
delas. Operaes com nmeros de Ponto Flutuante tendem a levar mais tempo do que aquelas com
nmeros inteiros. J as operaes trigonomtricas so as mais lentas que o computador pode operar.
3.4
Decodificao
A execuo das Microoperaes sempre ordenada pela Unidade de Controle. Isso feito no estgio
de Decodificao, a partir da leitura da instruo presente em IR. O primeiro da decodificaro ler o
cdigo da instruo para conhecer seu tipo. Dependendo do tipo, a instruo quebrada numa quantidade especfica de Estgios e cada estgio no seu respectivo grupo de Microoperaes. Cada vez
uma que Microoperao se encerra, a Unidade de Controle checa qual ser a prxima e envia os sinais
para os devidos registradores, para ULA e dispositivos envolvidos, como memria ou dispositivos de
Entrada e Sada.
Dessa forma, podemos dizer que a Unidade de Controle possui duas funes principais, a execuo e
o sequenciamento das instrues. Nessa ltima funo a Unidade de Controle deve saber o exato momento que uma Microoperao concluiu para executar a prxima, e quando a ltima Microoperao
for executada, iniciar um novo Estgio, e quando o ltimo Estgio for concludo, executar a prxima
instruo do programa.
40 / 73
3.5
Exemplo
Como exemplo, vamos visualizar como seria a execuo de um pequeno programa na forma de microoperaes. Para tal, considere um processador que executa suas instrues em cinco estgios de
execuo:
Busca de Instruo
Decodifica Instruo
Busca de Dados
Executa Instruo
Salva Resultados
Cada instruo do programa decomposta em microoperaes que so executadas, geralmente, uma
a cada ciclo de clock.
Sendo, assim, suponha que o programa a ser executado est na memria de acordo com a Tabela 3.1
[41] a seguir. Cada instruo fica armazenada em um endereo de memria, assim como as variveis
envolvidas.
Tabela 3.1: Exemplo de um programa de duas instrues armazenado na memria
Instruo ou Dado
A=B*C
B=A+2
15 // valor de A
2 // valor de B
4 // valor de C
Endereo
FF01
FF02
FF03
FF04
FF05
3.5.1
Busca de Instruo
Para que esse programa seja executado, necessrio que o registrador PC contenha o endereo FF01
para que a primeira instruo do nosso programa nessa buscada e executa. O incio de execuo de
um programa causado por uma ao do usurio (quando ele clica no cone de um programa, por
exemplo), pelo Sistema Operacional ou um por um outro programa.
Uma vez que o PC tenha o endereo FF01, na prxima instruo a ser buscada, a Unidade de Controle
ir executar as seguintes instrues:
t1:
t2:
t3:
MAR <- PC
Memria <- fetch;
MBR <- A = B * C
PC <- PC + 1
IR <- MBR
41 / 73
3.5.2
Decodificao
3.5.3
Busca de Dados
Nas prximas etapas, ser necessrio buscar os dados necessrios para a execuo da instruo. Como
os dados envolvidos (B e C) esto na memria, e no em registradores, sero necessrias duas Buscas
Indiretas. A instruo na verdade nunca chega como sendo A = B * C. Ao invs disso, ela seria
armazenada como (FF03) = (FF04) * (FF05). Por questes didticas, utilizamos ainda as variveis
A, B e C.
Para buscar o contedo da varivel B, as seguintes Microoperaes so executadas.
Na etapa de Decodificao, a instr
t4:
t5:
t6:
Aqui, o endereo FF04 passado para o MAR para que seja buscado na memria no tempo t4, em
seguida enviado um sinal de leitura para a memria. Ao receber o sinal de leitura, a memria
busca o contedo do endereo FF04 e o copia para dentro da CPU, no registrador MBR no instante
t5. Finalmente, no tempo t6, o contedo de MBR (valor 2) copiado para o registrador acumulador
(ACC).
Nota
Note que usamos sempre parntesis para indicar que se trata de um endereo, e sem os
parntesis quando se trata de um dado.
O prximo passo seria buscar o contedo da varivel C de forma anloga a utilizada para buscar B.
t7:
t8:
t9:
Perceba que na ltima Microoperao o contedo de C foi copiado para R1, para no sobreescrever e
perder o contedo da varivel B que foi armazenado em ACC.
42 / 73
3.5.4
Execuo
No prximo passo, a instruo precisa ser executada. Isso feito em um nico passo no tempo t10,
onde ACC, que agora mantm o contedo da varivel B multiplicado por R1, que possui o contedo
da varivel C.
t10:
3.5.5
Salva Resultados
Finalmente, o resultado da operao precisa ser salvo na varivel A. Para tal, o endereo de A (FF03)
copiado para o registrador de endereo (MAR) no instante t11. No instante t12 seguinte, o resultado da
operao aritmtica armazenado em ACC copiado para o registrador de dados (MBR). Neste mesmo
instante, a Unidade de Controle envia o sinal de escrita para a memria, que localiza o endereo FF03
e escreve nele o resultado da operao aritmtica que foi salvo em ACC, ou seja, oito (8).
t11:
t12:
3.5.6
Instruo completa
Podemos agora visualizar a seguir como a primeira instruo do programa (A = B * C) foi executada
em microoperaes.
// Busca de Instruo
t1:
MAR <- PC
Memria <- fetch;
t2:
MBR <- A = B * C
PC <- PC + 1
t3:
IR <- MBR
//Busca de Dados (B)
t4:
MAR <- (FF04)
Memria <- read
t5:
MBR <- 2
t6:
ACC <- MBR
//Busca de Dados (C)
t7:
MAR <- (FF05)
Memria <- read
t8:
MBR <- 4
t9:
R1 <- MBR
//Execuo
t10:
ACC <- ACC * R1
//Salva resultados
t11:
MAR <- (FF03)
t12:
MBR <- ACC
Memria <- write
43 / 73
Endereo
FF01
FF02
FF03
FF04
FF05
3.6
Recapitulando
Neste captulo vimos que a Unidade de Controle responsvel por controlar como e quando as instrues dos programas so executadas. Elas fazem isso quebrando as intruses em estgios e os estgios
em Microoperaes. Desta forma, as Microoperaes tornam-se as menores unidades de execuo do
computador. Como so muito simples, as Microoperaes so mais fceis de serem implementadas
pelo hardware e o projeto de uma CPU pode ser reutilizado em diversas ocasies.
Feedback sobre o captulo
Voc pode contribuir para melhoria dos nossos livros. Encontrou algum erro? Gostaria de
submeter uma sugesto ou crtica?
Para compreender melhor como feedbacks funcionam consulte o guia do curso.
44 / 73
Captulo 4
Conjunto de Instrues
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Listar as principais caractersticas de um conjunto de instruo
Definir e elencar os prs e contras das arquiteturas RISC e CISC
Neste captulo vamos estudar o que o Conjunto de Instrues e sua relevncia no projeto de um
processador. Sua caractersticas repercutem em todas principais caractersticas do processador, se
tornando a principal e primeira deciso de projeto a ser tomada.
4.1
Introduo
O termo Conjunto de Instrues vem do ingls Instruction Set Architecture (ISA). ISA a interface
entre os softwares que sero executados pelo processador e o prprio processador. Ele define todas
instrues de mquina sero interpretadas pela Unidade de Controle e executadas. Podemos ento
definir Conjunto de Instrues como sendo a coleo completa de todas instrues reconhecidas e
executadas pela CPU. Esse Conjunto de instrues, tambm chamado de Cdigo de Mquina, o
ponto inicial para o projeto de uma arquitetura e essencial na definio de qualidade do sistema
como um todo.
4.2
4.2.1
Um Conjunto de Instrues pode ser classificado como uma das quatro arquiteturas:
Arquitetura de Pilha
Baseada em Acumulador
Registrador-Registrador ou Load/Store
Registrador-Memria
45 / 73
Arquitetura de Pilha
A Arquitetura de Pilha1 a mais simples possvel. Como pode ser observado na Figura 4.1 [46],
os dados necessrios para a execuo das operaes pela ULA so provenientes de registradores
especiais organizados na forma de uma pilha. Note que toda operao realizada entre o registrador
que indica o Topo de Pilha (apontado pelo registrador TOS) e o registrador seguinte. Esse conjunto
de instrues muito simples porque a Unidade de Controle nunca precisa decodificar a instruo
para saber quais registradores sero utilizados nas operaes lgicas e aritmticas. Sempre ser o
topo da pilha e o registrador seguinte.
Processador
Memria
...
Registrador TOS
(Topo da pilha)
Prximo Registrador
...
ULA
...
Acumulador
(Registrador)
Memria
...
ULA
...
Arquitetura Load/Store
46 / 73
...
Memria
...
...
ULA
...
Arquitetura Registrador-Memria
Por ltimo, a mais complexa arquitetura a Registrador-Memria (Figura 4.4 [47]). Esta arquitetura
permite que a ULA execute operaes lgicas e aritmticas envolvendo ao mesmo tempo um registrador indicado pela instruo e um contedo proveniente da memria. Esse tipo de instruo deve
ento trazer, em seu contedo, o cdigo do registrador a ser utilizado e o endereo de memria do
segundo dado.
Processador
...
Memria
...
...
ULA
...
4.3
4.3.1
Modelo de Memria
O modelo de memria define para cada instruo de onde vem e para onde vo os dados. Os dados
podem vir da memria principal, ou memria Cache, de um registrador, ou de um dispositivo de
Entrada e Sada. Alm disso, o projeto do ISA deve definir alguns pontos cruciais.
4.3.1.1
As memrias geralmente so organizadas em bytes. Isso significa que o byte a menor unidade de
acesso memria, e assim, cada endereo de memria acessa um byte. A Tabela 4.1 [48] apresenta
um exemplo de organizao de memria por bytes. Neste caso, o endereo 0 diz respeito ao Byte 0 da
primeira linha. J o endereo 1 ao Byte 1, o endereo 2 ao Byte 2 e o endereo 3 ao Byte 3. Enquanto
que os endereos de 4 a 7 j dizem respeitos aos bytes da segunda linha.
Tabela 4.1: Exemplo de uma memria organizada por bytes
Endereo
0
4
8
12
16
...
Byte 0
Byte 1
13
23
Byte 2
Byte 3
A memria organizada desta forma, mas h diferentes tipos de dados. Uma varivel inteira, por
exemplo, pode ser declarada como um byte, ou um inteiro curto de 2 bytes, um inteiro de 4 bytes, ou
at mesmo um inteiro longo de 8 bytes. Se o conjunto de instrues fixar que a memria ser apenas
acessada de forma alinhada, significa que um dado no pode ultrapassar uma linha. Assim, os dados
de 4 bytes devero obrigatoriamente ser armazenados nos endereos 0, 4, 8, 12, 16 etc.
Esta deciso visa facilitar e acelerar o trabalho do processador ao acessar a memria. Cada vez
que a memria precisar ser acessada para buscar um nmero de 4 bytes, o processador deve apenas
verificar se o endereo um mltiplo de 4. Se ele no for, o acesso negado e o programa encerrado.
A desvantagem desta abordagem que muitas reas podem ficar desperdiadas. Por exemplo, se um
dado de 2 bytes armazenado no endereo 4 (como mostra a Tabela 4.1 [48]), os Bytes 0 e 1 so
utilizados, mas os Bytes 2 e ficam disponveis. Mesmo assim, se um dado de 4 bytes precisar ser
armazenado, ele no poder ser feito em uma posio livre mltipla de 4 (0, 8, 12, 6 etc.), como por
48 / 73
Outra deciso importante com relao ao acesso memria se a faixa de endereos da memria
de dados ser a mesma da memria de instrues. Desde a criao das Arquiteturas Harvard (em
substituio s de Von Neumann) os dados passaram a serem armazenados em reas de memria
separadas das instrues. Isso ajuda principalmente no Pipeline, porque a CPU pode, no mesmo
ciclo, buscar uma instruo e buscar os dados de uma outra instruo.
Na definio do Conjunto de Instrues o projetista deve decidir como sero os endereos de dessas
reas de memria. Por exemplo, se uma memria tiver 2 milhes de bytes (2MB), como cada byte
possui um endereo, ela ter endereos de 0 a 1.999.999. Digamos que a primeira parte de memria
seja para os dados e a segunda para as instrues. Neste caso, haver duas opes. A memria pode
ser organizada como uma faixa nica de endereos, ento os endereos de 0 a 999.999 sero utilizados
para armazenar os dados, e os endereos de 1.000.000 a 1.999.999 armazenaro as instrues.
O problema desta abordagem, seguindo o mesmo exemplo, que neste sistema s poder haver 1
milho de dados 1 milho de instrues. No ser possvel o armazenamento de nenhuma instruo a
mais do que isso, mesmo que a rea de dados esteja com posies disponveis.
Como soluo, o Conjunto de Instrues pode definir instrues especiais para buscar dados e instrues para buscar instrues. Quando uma instruo de busca for decodificada a Unidade de Controle
saber que se trata de um dado ou um endereo e vai buscar a informao exatamente na memria especificada. No exemplo dado, as instrues ficariam armazenadas na memria de instruo
nos endereos de entre 0 e 1.999.999, e os dados na memria de dados tambm no endereo de 0
e 1.999.999. Mas observe que a memria do exemplo s possui 2 milhes de bytes (2MB), mesmo
assim, neste exemplo, o sistema seria capaz de enderear 4 milhes de bytes (4MB). Isso a tornaria
pronta para um aumento futuro do espao de memria.
4.3.1.3
No incio do desenvolvimento dos computadores, os engenheiros projetistas tiveram que tomar uma
deciso simples, mas muito importante. Quando temos dados que ocupam mais de um byte devemos
comear salvando os bytes mais significativos, ou os menos significativos? Esta deciso no afeta em
nada o desempenho ou o custo dos sistemas. simplesmente uma deciso que precisa ser tomada.
49 / 73
Byte 0
Byte 1
Byte 2
Byte 3
J na abordagem Little Endian mostrada na Tabela 4.3 [50] a mesma palavra armazenada iniciando
pelo byte menos significativo, da direita para a esquerda. Apesar de parecer estranho, note que o que
muda a localizao dos Bytes 0, 1, 2 e 3. Comparando as abordagens Big Endian e Little Endian no
exemplo, em ambos a letra U armazenada no Byte 0, a F no Byte 1, a P no Byte 2 e a B no Byte 3.
A diferena que no Little Endian os bytes so contados da direita para a esquerda.
Tabela 4.3: Exemplo de uma memria Little Endian
Endereo
0
4
8
12
16
...
Byte 3
Byte 2
Byte 1
Byte 0
Importante
O importante observar que se um computador Little Endian precisar trocar dados com
um computador Big Endian, eles precisaro antes ser convertidos para evitar problemas. A
palavra UFPB salva num computador Big Endian, por exemplo, se for transmitida para um
Little Endian, deve antes ser convertida para BPFU para evitar incompatibilidade.
50 / 73
Nota
Computadores Intel, AMD e outras arquiteturas mais populares utilizam o modelo Little Endian, enquanto que a arquitetura da Internet (TCP/IP) e mquinas IBM adotam o Big Endian.
4.3.1.4
A forma de acesso aos registradores tambm essencial para a definio das instrues de mquina.
Cada endereo referenciado atravs de um cdigo, como se fosse um endereo, assim como nas
memrias. O Conjunto de Instrues deve definir quantos endereos de registradores sero possveis
e o tamanho deles, e as polticas de acesso. Essas decises so de extrema importncia para o projeto
do Conjunto de Instrues e do processador como um todo.
4.3.2
Tipos de Dados
51 / 73
4.3.3
Em seguida, preciso tambm definir quais sero os formatos de instruo aceitos pela Unidade de
Controle. No geral, toda instruo de mquina deve ter pelo menos o cdigo da operao (ou Opcode)
e os endereos para os parmetros necessrios, que podem ser registradores, posies de memria ou
endereos de dispositivos de Entrada e Sada.
Nesta definio de formatos necessrio que se defina quantos endereos cada instruo poder trazer.
Para ilustrar, suponha que na linguagem de alto nvel a operao A=B+C seja escrita e precise ser
compilada. Se o Conjunto de Instrues adotar instrues com 3 endereos, fica simples. O cdigo
da operao de soma ADD e com 3 endereos ela ficaria algo semelhante a:
ADD A, B, C
A instruo MOV teve que ser adicionada para copiar o contedo de B para R (um registrador qualquer).
Em seguida a instruo ADD R, C executa, que soma o contedo de R com C e salva o resultado
em R. No final, a instruo MOV chamada novamente para salvar o resultado de R em A e finalizar a
instruo. Note que todas instrues neste exemplo utilizaram no mximo 2 endereos.
J se a arquitetura utilizar instrues de apenas 1 endereo, ser necessrio utilizar uma arquitetura
baseada em Acumulador e toda operao ser entre o Acumulador e um endereo, e o resultado ser
tambm salvo no acumulador. Assim, a instruo seria compilada como:
ZER
ADD
ADD
STO
ACC
B
C
A
Aqui, quatro instrues foram necessrias. A primeira zeta o contedo do Acumulador (ACC). A
segunda soma o Acumulador com o contedo apontado pelo endereo B e salva o resultado no Acumulador. A terceira soma o contedo do Acumulador com C e salva no Acumulador e, por fim, a
ltima instruo transfere o resultado do Acumulador para o endereo de A. Note aqui tambm que
todas instrues no passaram de um endereo para os parmetros.
A ltima opo seria no utilizar endereos em suas instrues principais. Isso possvel se for
utilizada uma Arquitetura Baseada em Pilha. Neste caso, duas instrues so adicionadas: POP e
PUSH. A instruo PUSH adiciona um valor ao topo da pilha, enquanto que POP remove um elemento
do topo da pilha e adiciona seu contedo em um endereo. Dessa forma, a instruo seria compilada
assim:
POP B
POP C
ADD
PUSH A
52 / 73
4.3.4
Tipos de Instrues
Alm de definir como sero as instrues, necessrio tambm definir que tipos de instrues sero
executadas pelo processador. Os principais tipos de instruo so:
Movimentao de dados
Como os dados sero transferidos interna e externamente ao processador.
Aritmticas
Que operaes sero realizadas, como exponenciais, trigonomtricas, clculos com pontos flutuantes, com e sem sinais, com nmeros curtos e longos etc.
Lgicas
AND, OR, NOT e XOR.
Converso
De caracteres para nmeros, de inteiros para reais, decimal para binrio etc.
Entrada e Sada
Haver instrues especficas ou haver um controlador especfico, como um DMA (Direct
Memory Access).
Controle
Instrues para controlar os dispositivos diversos do computador.
Transferncia de Controle
Como a execuo deixar um programa para passar para outro, para interromper um programa,
chamar subprogramas, instrues de desvio e de interrupo.
4.3.5
Modos de Endereamento
Por ltimo, no projeto de um Conjunto de Instrues necessrio determinar de que forma os endereos das instrues sero acessados. Ou seja, o que cada endereo de parmetros de uma instruo
podem representar.
53 / 73
Endereamento Imediato
O endereamento Imediato o mais simples possvel e indica que o endereo na verdade uma
constante e pode ser utilizada imediatamente.
Por exemplo, na instruo a seguir:
ADD A, 5, 7
Endereamento Direto
No endereamento Direto o endereo representa um endereo de memria, como mostrado na instruo a seguir.
ADD A, B, 7
Neste exemplo, o valor 7 continua sendo endereamento de forma imediata, mas os endereos de A e
B so endereos de memria e por isso, so chamados de Endereos Diretos.
4.3.5.3
Endereamento Indireto
J o endereamento Indireto aplicado quando necessrio que um acesso Direto seja feito antes
para buscar o endereo alvo e s ento o acesso feito. O exemplo a seguir mostra um caso onde este
endereamento utilizado.
ADD A, (B), 7
Neste exemplo o endereo B entre parntesis representa o acesso indireto. Isso indica que primeiramente o endereo de B deve ser acessado, mas l no est o contedo a ser somado com 7, mas o
endereo de memria onde o valor dever ser encontrado. Este tipo de endereamento muito utilizado nas linguagens de programao para representar variveis dinmicas atravs de apontadores (ou
ponteiros).
54 / 73
O endereamento Indireto tambm pode ser feito por Registrador. No exemplo a seguir o valor sete
no somado ao contedo de R1, mas ao dado que est na memria no endereo apontado por R1.
ADD A, (R1), 7
4.3.5.6
Endereamento Indexado
Isso indica que o dado a ser utilizado est no endereo B de memria adicionado de 5 posies. Ou
seja, se a varivel B estiver no endereo 1002 de memria, o valor B[5] estar no endereo 1007. O
endereo de B chamado de Endereo Base e o valor 5 chamado de Deslocamento. Para realizar um
endereamento Indexado necessrio um somados que no seja a ULA para agilizar o processamento
e realizar cada deslocamento. Este tipo de endereamento utilizado quando so utilizadas instrues
de acesso a vetores.
4.3.5.7
4.4
RISC x CISC
O projeto do Conjunto de Instrues inicia com a escolha de uma entre duas abordagens, a abordagem
RISC e a CISC. O termo RISC a abreviao de Reduced Instruction Set Computer, ou Computador de Conjunto de Instrues Reduzido e CISC vem de Complex Instruction Set Computer, ou
Computador de Conjunto de Instrues Complexo. Um computador RISC parte do pressuposto de
que um conjunto simples de instrues vai resultar numa Unidade de Controle simples, barata e rpida. J os computadores CISC visam criar arquiteturas complexas o bastante a ponto de facilitar
a construo dos compiladores, assim, programas complexos so compilados em programas de mquina mais curtos. Com programas mais curtos, os computadores CISC precisariam acessar menos
a memria para buscar instrues e seriam mais rpidos.
A Tabela 4.4 [56] resume as principais caractersticas dos computadores RISC em comparao com os
CISC. Os processadores RISC geralmente adotam arquiteturas mais simples e que acessam menos a
memria, em favor do acesso aos registradores. A arquitetura Registrador-Registrador mais adotada,
enquanto que os computadores CISC utilizam arquiteturas Registrador-Memria.
55 / 73
RISC
Registrador-Registrador
Pouca variedade
Instrues poucos
endereos
Pouca variedade
Entre 4 e 10
Via registradores
CISC
Registrador-Memria
Muito variada
Instrues com muitos
endereos
Muita variedade
Entre 20 e 30
Via memria
Como as arquiteturas RISC visam Unidades de Controle mais simples, rpidas e baratas, elas geralmente optam por instrues mais simples possvel, com pouca variedade e com poucos endereos.
A pouca variedade dos tipos de instruo e dos modos de endereamento, alm de demandar uma
Unidade de Controle mais simples, tambm traz outro importante benefcio, que a previsibilidade.
Como as intruses variam pouco de uma para outra, mais fcil para a Unidade de Controle prever
quantos ciclos sero necessrios para executa-las. Esta previsibilidade traz benefcios diretos para o
ganho de desempenho com o Pipeline. Ao saber quantos ciclos sero necessrios para executar um
estgio de uma instruo, a Unidade de Controle saber exatamente quando ser possvel iniciar o
estgio de uma prxima instruo.
J as arquiteturas CISC investem em Unidades de Controle poderosas e capazes de executar tarefas
complexas como a Execuo Fora de Ordem e a Execuo Superescalar. Na execuo Fora de Ordem,
a Unidade de Controle analisa uma sequncia de instrues ao mesmo tempo. Muitas vezes h dependncias entre uma instruo e a seguinte, impossibilitando que elas sejam executadas em Pipeline.
Assim, a Unidade de Controle busca outras instrues para serem executadas que no so as prximas
da sequncia e que no sejam dependentes das instrues atualmente executadas. Isso faz com que
um programa no seja executado na mesma ordem em que foi compilado. A Execuo Superescalar
a organizao do processador em diversas unidades de execuo, como Unidades de Pontos Flutuante
e Unidades de Inteiros. Essas unidades trabalham simultaneamente. Enquanto uma instruo executada por uma das unidades de inteiros, outra pode ser executada por uma das unidades de Pontos
Flutuantes. Com a execuo Fora de Ordem junto com a Superescalar, instrues que no esto na
sequncia definida podem ser executadas para evitar que as unidades de execuo fiquem ociosas.
Nota
importante ressaltar que a execuo fora de ordem no afeta o resultado da aplicao pois
foram projetadas para respeitar as dependncias entre os resultados das operaes.
Estas caractersticas de complexidade tornam os estgios de Pipeline dos processadores CISC mais
longos, em torno de 20 a 30 estgios. Isto porque estas abordagens de acelerao de execuo devem
ser adicionadas no processo de execuo. J os processadores RISC trabalham com estgios mais
curtos, em torno de 4 a 10 estgios.
Os processadores CISC tambm utilizam mais memria principal e Cache, enquanto que os processadores RISC utilizam mais registradores. Isso porque os processadores CISC trabalham com um
maior volume de instrues e dados simultaneamente. Esses dados no poderiam ser armazenados
em registradores, devido sua elevada quantidade e so, geralmente, armazenados em memria Cache. Enquanto que os processadores RISC trabalham com menos instrues e dados por vez, o que
possibilita a utilizao predominante de registradores.
56 / 73
4.4.1
Sempre que este assunto apresentado aos alunos, surge a pergunta crucial sobre qual a melhor
abordagem, a RISC ou a CISC? Esta uma pergunta difcil e sem resposta definitiva. A melhor
resposta que acho de que depende do uso que se quer fazer do processador.
Processadores RISC geralmente resultam em projetos menores, mais baratos e que consumem menos
energia. Isso torna-os muito interessante para dispositivos mveis e computadores portteis mais simples. J os processadores CISC trabalham com clock muito elevado, so mais caros e mais poderosos
no que diz respeito a desempenho. Entretanto, eles so maiores e consomem mais energia, o que os
torna mais indicados para computadores de mesa e notebooks mais poderosos, alm de servidores e
computadores profissionais.
Os processadores CISC iniciaram com processadores mais simples e depois foram incorporando mais
funcionalidades. Os fabricantes, como a Intel e a AMD, precisavam sempre criar novos projetos
mas mantendo a compatibilidade com as geraes anteriores. Ou seja, o Conjunto de Instrues
executado pelo 486 precisa tambm ser executado pelo Pentium para os programas continuassem
compatveis. O Pentium IV precisou se manter compatvel ao Pentium e o Duo Core compatvel
com o Pentium IV. Isso tornou o projeto dos processadores da Intel e AMD muito complexos, mas no
pouco eficientes. Os computadores lderes mundiais em competies de desempenho computacional
utilizam processadores CISC.
J o foco dos processadores RISC est na simplicidade e previsibilidade. Alm do benefcio da
previsibilidade do tempo de execuo ao Pipeline, ele tambm muito interessante para aplicaes
industriais. Algumas dessas aplicaes so chamadas de Aplicaes de Tempo Real. Essas aplicaes
possuem como seu requisito principal o tempo para realizar as tarefas. Assim, o Sistema Operacional
precisa saber com quantos milissegundos um programa ser executado. Isso s possvel com processadores RISC, com poucos estgios de Pipeline, poucos tipos de instruo, execuo em ordem
etc. Mesmo que os processadores RISC sejam mais lentos do que os CISC, eles so mais utilizados
nessas aplicaes crticas e de tempo real, como aplicaes industriais, de automao e robtica.
4.5
Recapitulando
Este captulo apresentou uma etapa de extrema importncia no projeto de um processador, que a
definio do Conjunto de Instrues. O Conjunto de Instrues define no apenas como os programas
sero compilados, mas tambm caractersticas crticas e de mercado, como tamanho, consumo de
energia e preo.
Feedback sobre o captulo
Voc pode contribuir para melhoria dos nossos livros. Encontrou algum erro? Gostaria de
submeter uma sugesto ou crtica?
Para compreender melhor como feedbacks funcionam consulte o guia do curso.
57 / 73
Captulo 5
Sistema de Memria
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Conhecer o Sistema de Memria e seus componentes;
Descrever as principais caractersticas das tecnologias utilizadas para memrias primrias e secundrias;
Apresentar conceitos detalhados sobre as Memrias Cache e seu funcionamento;
Sistema de Memria uma das principais partes do computador, juntamente com o processador. Todos programas e seus dados so mantidos no Sistema de Memria e ele responsvel por entregar
o mais rapidamente para o processador quando solicitado. No uma tarefa simples porque as memrias tendem a ser muito mais lentas do que o processador e sua tecnologia no tem avanado to
rapidamente quanto a dos processadores. Neste captulo vamos entender um pouco mais sobre esse
sistema e como ele apoia o trabalho dos processadores em busca de sistemas cada vez mais eficientes.
5.1
Introduo
58 / 73
Registradores
Custo Alto
Capacidade Baixa
Velocidade Alta
Memria
Cache
Memria
RAM
Memria
Secundria
Custo Baixo
Capacidade Alta
Velocidade Baixa
5.2
Princpio da Localidade
Muitos dizem que o Sistema de Memria se inspirou no sistema de memria do corpo humano, onde
lembranas mais recentes so armazenadas em memrias menores de curta durao e lembranas
mais antigas e pertinentes so armazenadas em memrias de longa durao e maior capacidade. No
sistema computacional o Sistema de Memria se baseia no Princpio da Localidade, que se divide em
Temporal e Espacial.
O Princpio da Localidade Temporal diz que um dado acessado recentemente tem mais chances de ser
usado novamente, do que um dado usado h mais tempo. Isso verdade porque as variveis de um
programa tendem a ser acessadas vrias vezes durante a execuo de um programa, e as instrues
usam bastante comandos de repetio e sub-programas, o que faz instrues serem acessadas repetidamente. Sendo assim, o Sistema de Memria tende a manter os dados e instrues recentemente
acessados no topo da Hierarquia de Memria.
J o Princpio da Localidade Espacial diz que h uma probabilidade de acesso maior para dados e
instrues em endereos prximos queles acessados recentemente. Isso tambm verdade porque
os programas so sequenciais e usam de repeties. Sendo assim, quando uma instruo acessada, a
instruo com maior probabilidade de ser executada em seguida, a instruo logo a seguir dela. Para
as variveis o princpio semelhante. Variveis de um mesmo programa so armazenadas prximas
uma s outras, e vetores e matrizes so armazenados em sequncia de acordo com seus ndices.
Baseado neste princpio, o Sistema de Memria tende a manter dados e instrues prximos aos que
esto sendo executados no topo da Hierarquia de Memria.
59 / 73
5.3
O ponto inicial da memria a Memria Principal (por isso ela recebe esse nome). Todo programa
para ser executado deve ser armazenado nesta memria, com todo seus dados e instrues.
Nota
Mais a frente veremos que nem sempre possvel manter todos programas em execuo na
Memria Principal.
5.4
Memrias de Semicondutores
5.4.1
5.4.2
As memrias Dynamic RAM so as mais simples de serem fabricadas. Como mostrado na Figura 5.2
[61], formada simplesmente por um nico transistor e um capacitor.
Endereo da Linha
Transistor
Capacitor de
Armazenamento
Linha do
Bit B
Terra
5.4.3
Terra
Endereo
da linha
Linha do
bit B
|
Linha do
bit B
Figura 5.3: Estrutura de uma SRAM com transistores compartilhando carga do bit 1
Nesta ilustrao, o transistor T5 que determina se o bit 0 ou 1, e os transistores, T1 e T3 so utilizados para recarreg-lo, caso sua carga reduza. J os transistores T2, T4 e T6 so o complemento deles
de forma inversa, adicionando um nvel a mais de segurana. Essa tcnica chamada Complementary
MOS (CMOS).
62 / 73
5.4.4
J a Synchronous Dynamic RAM (SDRAM) uma DRAM com um simples avano. O relgio que
determina o tempo das SDRAM vem diretamente do processador, e no de um relgio prprio, como
nas DRAM convencionais. Isso faz com que o momento exato da Refrescagem seja determinado pelo
processador. Dessa forma, o processador sabe exatamente quando ele no pode acessar a memria,
e dedica seu tempo s outras tarefas, ou seja, o processador no perde mais tanto tempo esperando a
memria.
5.4.5
5.4.6
As memrias ROM tambm possuem um nome criado h muitos anos e hoje um termo que no faz
tanto sentido. Em portugus significam Memria Apenas de Leitura. Isso porque as primeiras ROM
eram escritas durante a fabricao e no podiam mais ser modificadas. Mas outras geraes foram
desenvolvidas que permitiram a escrita e tornou o termo ROM antiquado. Todas memrias ROM so
no volteis, ou seja, mantm seu contedo mesmo com a falta do fornecimento de energia eltrica.
So tipos de memria ROM:
As memrias PROM (Programmable ROM)
so memrias que vem com a conexes abertas de fbrica e precisam de uma mquina para que
os dados sejam escritos nelas. Uma vez escritos, eles no podem mais ser modificados.
J as memrias EPROM (Erasable PROM)
se baseiam no mesmo princpio das PROM, mas uma mquina especial que utiliza raios UV
pode ser utilizada para apagar todo seu contedo e escrever novamente.
As memrias EEPROM (Electronically Erasable PROM)
possuem o mesmo princpio das PROM, mas a mquina utilizada para escrita e apagar eletrnica. Isso permite que um computador, ou um mquina especial seja utilizada para escrever nas
memrias, as tornando muito mais utilizadas.
J as memrias Flash
se baseiam no princpio das memrias EEPROM, mas o processo de apagar feito em blocos
grandes, o que acelera bastante o processo.
As memrias ROM so muito utilizadas na formao da BIOS dos computadores e as memrias Flash
so o princpio bsico de cartes de memria, pen-drives e memrias de estado slido.
63 / 73
5.5
Memrias Secundrias
As memrias que vimos at o momento so chamadas de Memrias Primrias, porque so usadas para
o funcionamento bsico e primrio da CPU. J as memrias secundrias so utilizadas para dar um
suporte a mais ao sistema, ampliando sua capacidade de armazenamento. O objetivo destas memrias
o de trazer mais capacidade, sem o intuito de realizar operaes muito velozes. Se bem que as
memrias virtuais que veremos na prxima seo fez com que a demanda por memrias secundrias
mais velozes crescesse. So as principais tecnologias utilizadas como memrias secundrias:
Memrias magnticas
Memrias pticas
Memrias de estado slido
Memrias magnticas
Utilizam o princpio de polarizao para identificar dados numa superfcie magnetizvel. Assim como num im, cada minscula rea da memria magnetizada como sendo polo positivo
ou negativo (ou Norte e Sul). Quando a regio polarizada com polo positivo, dizemos que
ela armazena o bit 1, e armazena o bit 0, quando a polarizao for negativa. O maior exemplo
de memria magntica utilizado hoje so os Discos Rgidos, ou do ingls Hard Disk (ou HD).
Memrias pticas
Armazenam seus dados numa superfcie reflexiva. Para leitura, um feixe de luz (LASER)
disparado contra um tambm minsculo ponto. O feixe bate na superfcie volta para um
sensor. Isso indicar que naquele ponto h o bit 0. Para armazenar o bit 1, um outro LASER
entra em ao provocando um pequena baixa na regio. Com isso, ao fazer uma leitura no
mesmo ponto, o feixe de luz ao bater na superfcie com a baixa ser refletido mas tomar
trajetria diferente, atingindo um outro sensor diferente daquele que indicou o bit 0. Quando
este segundo sensor detecta o feixe de luz, dito que o bit lido foi o 1. O maior representante
das memrias pticas so os CDs, DVDs e, mais recentemente os Blu-Ray.
Memrias de estado slido (ou em ingls Solid State Disk - SSD)
So memrias feitas com tecnologia Flash mas para ser usadas em substituio ao Disco Rgido. Em comparao com ele, a memria de estado slido muito mais rpida, mais residente
a choques e consome menos energia. Em contrapartida, as memrias de estado slido so bem
mais caras.
5.6
Memria Virtual
Com o crescente aumento da quantidade e tamanho dos programas sendo executados pelos processadores, surgiu a necessidade de cada vez mais memria principal. O problema, com j foi dito, que as
memrias principais (basicamente DRAM) so caras. Ao mesmo tempo, quando h muito programas
sendo executados ao mesmo tempo, h uma grande tendncia de haver muitos deles esquecidos, sem
serem acessados. Esses programas ocupam espao da memria principal de forma desnecessria.
Pensando nisso, foi criado o conceito de Memria Virtual, que nada mais do que a tcnica de utilizar
a Memria Secundria, geralmente HD ou SSD, como uma extenso da Memria Principal. Desta
forma, quando a memria principal est cheia e no h mais espao para novos programas ou dados,
o sistema utiliza a memria secundria. Tudo feito de forma automtica pela Unidade de Gerncia
de Memria (ou Memory Management Unit - MMU) presente nos processadores. Assim, todo dado
64 / 73
5.7
Memria Cache
Como foi dito anteriormente, as memrias Cache vem tendo um papel cada vez mais importante nos
sistemas computacionais. Inicialmente elas nem existiam nos computadores. Depois foram adicionadas fora do processador e em pequena quantidade. Em seguida elas foram levadas para dentro do
processador e hoje em dia ocupam entre 60% e 80% da rea do chip do processador.
O princpio bsico das memria Cache o de manter uma cpia dos dados e instrues mais utilizados
recentemente (Princpio da Localidade) para que os mesmos no precisem ser buscados na memria
principal. Como elas so muito mais rpidas do que a memria principal, isso traz um alto ganho de
desempenho.
A Figura 5.4 [65] apresenta este princpio. Todo dado a ser lido ou escrito em memria pelo processador antes passa para a Cache. Se o dado estiver na Cache, a operao feita nela e no se precisa
ir at a Memria Principal. Caso contrrio, um bloco inteiro de dados (geralmente com 4 palavras de
memria) trazido da Memria Principal e salvo na Cache. S ento a CPU realiza a tarefa com o
dado.
Transfere
blocos
Transfere
palavras
CPU
Cache
Memria Principal
65 / 73
5.7.1
Tamanho
A grande dificuldade das memrias Cache que elas sempre esto presentes em menor quantidade do
que a Memria Principal. Geralmente h a Memria Cache de um computador 1.000 vezes menor
do que a Memria Principal. Se voc tem um computador com 4GB de Memria Principal (no usa
mais RAM para indicar este tipo de memria!), voc ter muita sorte se seu processador tiver 4MB
de Memria Cache.
Como a Memria Cache trabalha armazenando cpias de dados da Memria Principal, quanto maior
for a Memria Cache, mais dados ela capaz de armazenar, sendo assim, maior a probabilidade do
processador buscar por um dado e ele estar na Cache. Entretanto, importante observar que esse
crescimento no constante, muito menos infinito. Veremos a seguir que o ganho de desempenho
com o aumento do tamanho da Cache possui um limite.
5.7.2
Funo de mapeamento
A funo de mapeamento diz respeito a estratgia utilizada para determinar onde cada dado da memria principal estar na Cache. Ela determina onde cada dado da Memria Principal ser copiado
na Cache caso ele seja acessado. Isso muito importante porque o processador vai seguir essa mesma
estratgia para conseguir localizar se o dado est, ou no na Cache. H trs tipos de mapeamento:
Mapeamento direto
Mapeamento associativo
Mapeamento associativo por conjunto
5.7.2.1
Mapeamento direto
Para entendermos a diferena entre os tipos de mapeamento, vamos fazer uma analogia com uma sala
de cinema. Imagine que o cinema a Memria Cache e cada pessoa um dado a ser armazenado na
memria. No mapeamento direto cada pessoa (scia daquele cinema) receber uma cadeira dedicada
a ele. Sempre que ele for ao cinema, dever sentar no mesmo lugar. O problema que a Memria
Principal muito maior do que a Memria Cache, ento no h cadeira para todos. Para resolver, cada
cadeira distribuda por vrias pessoas, apostando que nem sempre as pessoas que compartilham o
mesmo nmero de cadeira iro assistir ao mesmo filme no mesmo horrio. Mas quando isso acontece,
a pessoa que chegou por ltimo no pode sentar em outra cadeira mesmo estando livre. A pessoa que
chega depois toma o lugar da pessoa que est sentada, porque no caso da memria Cache, o ltimo
sempre tem preferncia. Imagine quanta confuso isso geraria nesse cinema!
O bom do mapeamento direto porque ele muito fcil de organizar e a CPU encontra sempre seu
dado muito facilmente. No exemplo do cinema, se algum estiver querendo saber se uma pessoa
est no cinema (na Cache) ou no (na Memria Principal) basta saber o nmero da cadeira dele e ir
l verificar se ele quem est sentado. Isso acelera bastante o trabalho de busca da CPU. Mas se a
memria Cache for muito menor que a Memria Principal, haver muitos blocos com mesmo cdigo
e pode haver muito conflito de posio, reduzindo o desempenho.
66 / 73
2
-
3
-
4
-
5
-
Em seguida o bloco 5 acessado. Ele no est na Cache, ocorre um Cache miss e uma cpia salva
na posio 5. Temos ento:
Cache hit: 0
Cache miss: 2
Posio da Cache: 1
Linhas na Cache: 1
2
-
3
-
4
-
5
5
No terceiro acesso, o bloco 1 buscado. Ele j consta na Cache. Eno ocorre um cache hit e a cache
no precisa ser alterada. Ficando assim:
Cache hit: 1
Cache miss: 2
Posio da Cache: 1
Linhas na Cache: 1
2
-
3
-
4
-
5
5
Ao acessar em seguida o bloco 10 acessado, como ele deve ocupar mesma posio do bloco 5 (isso
porque 10 - 5 = 10), h um cache miss, o 5 removido e substitudo pelo 10.
Cache hit: 1
Cache miss: 3
Posio da Cache: 1
Linhas na Cache: 1
2
-
3
-
4
-
5
10
2
-
3
-
4
-
5
10
67 / 73
5.7.2.2
2
-
3
-
4
-
5
5
Mapeamento associativo
2
-
3
-
4
-
5
-
Em seguida o bloco 5 acessado e h novamente um cache miss, mas dessa vez vamos adicion-lo
na primeira posio livre que encontrarmos. Neste caso, na posio 2. Temos ento:
Cache hit: 0
Cache miss: 2
Posio da Cache: 1
Linhas na Cache: 1
2
5
3
-
4
-
5
-
No prximo acesso ao bloco 1 h um cache hit porque o bloco 1 acessado e ele j est presente na
Cache:
Cache hit: 1
Cache miss: 2
68 / 73
Posio da Cache: 1
Linhas na Cache: 1
2
5
3
-
4
-
5
-
Em seguida o bloco 10 acessado. Ele no est na Cache e ocorre um Cache Miss e ele salvo na
posio 3.
Cache hit: 1
Cache miss: 3
Posio da Cache: 1
Linhas na Cache: 1
2
5
3
10
5
-
No prximo passo o bloco 11 acessado. Ele tambm no est na Cache e salvo na posio 4.
Cache hit: 1
Cache miss: 4
Posio da Cache: 1
Linhas na Cache: 1
2
5
3
10
4
11
5
-
No ltimo acesso o bloco 5 acusado novamente. Como ele est na Cache, h um cache hit e a cache
no modificada.
Cache hit: 2
Cache miss: 4
Posio da Cache: 1
Linhas na Cache: 1
2
5
3
10
4
11
5
-
Perceba que ao final, o mesmo exemplo com Mapeamento Associativo teve 1 cache miss a menos do
que o Mapeamento Direto, ou seja, ele foi mais eficiente para esse exemplo, j que precisou ir menos
Memria Principal mais lenta para trazer os blocos. Note tambm que a memria Cache permanece
mais utilizada quando o mapeamento associativo aplicado. Isso aumenta bastante a probabilidade
novos cache hit.
5.7.2.3
O problema do Mapeamento Associativo encontrar blocos em memrias Cache grandes. A soluo para isso utilizar uma abordagem mista, que utiliza os princpios dos mapeamentos direto e
associativo. Ela divide a memria em conjuntos. Cada bloco ento mapeado para um conjunto
(semelhante ao que feito para o Mapeamento Direto, mas para o nvel de conjunto). Sempre que um
bloco for ser buscado ou salvo, ele ser feito no conjunto fixo dele, mas dentro do conjunto ele pode
ser armazenado em qualquer posio livre.
Voltando ao cinema, como se uma grande sala fosse dividida em salas menores. Cada pessoa teria
no seu ingresso o nmero da sala, mas a poltrona seria escolhida livremente. Escolhendo a quantidade
certa e o tamanho das salas, possvel utilizar bem os espaos e facilitar o processo de busca por uma
pessoa.
69 / 73
5.7.3
Poltica de substituio
Nos mapeamentos associativo e associativo por conjunto uma outra poltica deve ser adotada. Quando
a memria cache enche e um novo bloco precisa ser armazenado, o Sistema de Memria deve escolher
que bloco deve ser removido para dar espao ao novo bloco. No mapeamento direto isso no existe
porque cada bloco sempre fica na mesma posio.
Sendo assim, h 3 principais polticas de substituio de linhas de Cache. So elas:
Randmica
FIFO
LRU
Na substituio randmica o sistema simplesmente escolhe aleatoriamente o bloco que deve ser removido. Ele sai da Cache dando lugar ao novo bloco que foi acessado. Este mtodo tem a vantagem
de ser muito fcil de implementar e, por consequncia, rpido de executar. Porm ele pode no ser
muito eficiente.
J no FIFO (First-In First-Out) adota o princpio de fila. Aquele bloco que chegou primeiro, est h
mais tempo na Cache. J se beneficiou bastante e deve ento dar lugar ao novo bloco.
No LRU (Least-Recently Used), ou Menos Usado Recentemente aplica o Princpio da Localidade
Temporal e torna-se por isso mais eficiente na maioria dos casos. Nesta poltica o sistema escolhe o
bloco que menos foi utilizado recentemente e o remove. Isso faz com que fiquem na Cache aqueles
blocos que so acessados mais vezes nos ltimos instantes.
5.8
Recapitulando
Neste captulo foi apresentado os principais aspectos do principal componente do computador depois
do processador, o Sistema de Memria. Vimos que a memria to complexa e com tantos elementos
que ela organizada e considerada como um sistema por si s. Foram apresentadas as memrias
primrias e suas caractersticas, as memrias secundrias e, por fim, foi melhor detalhada a memria
Cache, to importante para os sistemas computacionais modernos.
Com o entendimento dos contedos visto at o momento, mais o do Sistema de Memria podemos
dizer que o conhecimento introdutrio da Arquitetura de Computadores foi atingido. Cabe a voc
agora explorar novos caminhos. Boa sorte!
Feedback sobre o captulo
Voc pode contribuir para melhoria dos nossos livros. Encontrou algum erro? Gostaria de
submeter uma sugesto ou crtica?
Para compreender melhor como feedbacks funcionam consulte o guia do curso.
70 / 73
Captulo 6
Glossrio
71 / 73
72 / 73
Captulo 7
ndice Remissivo
A
Acumulador, 46
Arquitetura
Acumulador, 46
Load/Store, 46
Pilha, 46
Registrador-Memria, 47
Arquitetura Harvard, 29
Interrupes, 23
ISA, 45
B
Barramento, 18
Busca de Dados, 22
P
Pilha, 46
Pipeline, 27, 29, 56
Limitaes, 30
previsibilidade, 56
Processador
desempenho, 32
Programa, 16
L
Limitaes, 30
Load/Store, 46
M
Memria Principal, 19
C
Cdigo de Mquina, 45
Cache, 27
Ciclo de Busca, 21
Ciclo de Execuo, 21
CISC, 55
clock, 18
Contador de Programas, 19
CPU
Estrutura, 18
R
Refrescagem, 62
Registrador de Dados, 20
Registrador de Endereo, 20
Registrador de Instruo, 20
Registrador-Memria, 47
Registradores, 19
registradores de propsito geral, 20
RISC, 55
D
desempenho, 32
E
Estrutura, 18
S
Software, 17
G
Gerenciador de Interrupes, 23
Giga Hertz, 18
T
TOS, 46
transistor MOSFET, 6
Tratador de Interrupo, 24
H
Hardware, 17
Hertz, 18
U
Unidade de Ciclo de Dados, 18
Unidade de Controle, 18
Unidade Lgica e Aritmtica, 21
I
interrupo, 24
73 / 73