Академический Документы
Профессиональный Документы
Культура Документы
Arquitetura de
Computadores
a viso do software
COMPUTADOR
RECEITAS
S
RE E T O
CEI R
TA
S
0
16
32
20
36
24
40
12
28
44
CONTROLE
S
TE E T O
MPE R
RO
S
VIA DE DADOS
64
80
52
68
84
0
1
2
3
4
PROCESSADOR
ENTRADA
48
56
72
88
60
76
92
SE
BO T O R
LO
S
SE
CA TO R
RNE
S
SADA
96
112
128
100
116
132
104
120
136
108
124
140
MEMRIA
http://www.cefetrn.br/~braulio/ACv1/
CDD 004.22
CEFET/RN/BSF
ARTE DA CAPA
Tnia Carvalho da Silva
Editora do CEFET-RN
Av. Sen. Salgado Filho, 1559, CEP 59015-000
Natal-RN. Fone: (0XX84) 4005-2668, 3215-2733
E-mail: dpeq@cefetrn.br
Prefcio
iii
Esther e Elker
minha Me e meu Pai (in memorian)
minha famlia
iv
Prefcio
Prefcio
1.1 Introduo
O termo arquitetura de computadores tem sua origem em um antigo
livro editado por Werner Buzhholz: Planning a Computer System: Project
Stretch de 1962 [1]. Frederick Brooks introduziu o termo no captulo
intitulado Architectural Philosophy. Em 1964 o projeto do system/360
tambm utilizou o termo, talvez com uma viso mais limitada. Quase duas
dcadas depois Jean-Loup Baer [2] revisita o termo e o define como um
conjunto de conhecimentos que fazem parte da Arquitetura de um
Computador: estrutura (modelagem esttica das partes); organizao
(interao dinmica das partes e o seu gerenciamento); implementao
(projeto fsico dos blocos construtivos especficos); e avaliao (o estudo do
comportamento do sistema e do seu desempenho, seja em parte ou no todo).
Modernamente, entende-se o termo como sendo a viso que um
programador deve ter da mquina quando o mesmo est utilizando uma
linguagem de montagem e/ou de mquina [3].
parte da discusso filosfica que envolve a definio do termo e do
emaranhado de vises - nem sempre alinhadas - sobre o que significa
Arquitetura de Computadores, procuramos manter o ttulo desta obra de
forma expandida contendo o que exatamente se espera do texto: a viso do
software sobre a mquina onde ele ir ser executado.
1.2 Motivao
A maioria do material didtico sobre o tema [4, 5, 6] costuma apresentar
detalhes de projeto em algum nvel de abstrao, muitas vezes com
caractersticas to prximas de uma implementao real (fsica) que os tornam
muito enfadonhos para cursos com nfase em desenvolvimento de software.
Alm disto, tais conhecimentos prescinde de requisitos curriculares em
vi
1.3 Abrangncia
Dentro da estrutura de cursos da Gerncia Educacional de Tecnologia
da Informao (GEINF), o primeiro destinatrio da obra so os alunos que
fazem o curso de Tecnologia em Desenvolvimento de Software. Em sua grade
atual a disciplina Organizao de Computadores tem os objetivos alinhados
com a estrutura proposta para este livro. Ainda no mbito da GEINF, os
cursos tcnicos de informtica podero adotar o material como auxiliar ou
como tpicos avanados dentro de disciplinas correlatas. Tambm o curso de
Tecnologia em Redes de Computadores (em fase de estudos, mas com
perspectivas para seu incio em 2006) poder fazer uso do material.
Dentro do CEFET-RN tambm as novas disciplinas do curso de
Automao podero utilizar a obra.
Cursos de tecnologia em Desenvolvimento de Software, da rede de
ensino tecnolgico, assim como o Curso Superior de Tecnologia em
Desenvolvimento de Aplicaes para Web, do CEFET-RJ e do UFTPR, o
curso de Tecnologia em Desenvolvimento de Software do CEFET-PB e o
curso de Tecnologia em Sistemas de Informao do CEFET-PE, so exemplos
de cursos que podero utilizar em carter efetivo o presente material. Afora os
demais cursos correlatos que poderiam adotar o livro como cursos de
Automao Industrial, Sistemas Distribudos, etc. embora no seja o foco do
trabalho.
Prefcio
1.5 MIPS
O MIPS o processador alvo de nosso livro. Ele foi escolhido por fazer
parte de um gnero de processadores simples, mas muito eficientes. A
simplicidade nos permite aprofundar os conceitos sem torn-los ininteligveis.
Existem duas famlias de arquiteturas MIPS na nomenclatura atual: MIPS32 e
MIPS64. H tambm extenses como MIPS16 e outras. Vamos trabalhar com
um subconjunto da arquitetura MIPS32, o que nos permitir produzir
pequenos softwares para execuo em simuladores.
1.6 Agradecimentos
Escrever um livro didtico tentar aprisionar nas palavras o
conhecimento. Isto requer um esforo de concentrao muito grande e,
portanto, uma devoo exclusiva obra em andamento. Esta dedicao s me
foi possvel pela compreenso da importncia deste trabalho por minha esposa
e por minha filha. No fora estas protagonistas, um manuscrito incompleto
estaria ainda por aparecer. Meus primeiros agradecimentos, depois do Deus
Pai, que nos permitiu tamanha travessura e ousadia, so para estas mulheres de
minha vida. No posso deixar de estender tambm aos meus familiares tal
atitude de compreenso.
vii
viii
ndice
Captulo 1: Introduo ________________________________ 1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
Introduo ........................................................................................1
Componentes de um Computador ....................................................7
A viso do Software.......................................................................10
Concluses .....................................................................................16
Prtica com simuladores ................................................................17
Exerccios.......................................................................................17
Referncias Bibliogrficas Especficas ..........................................18
Introduo ......................................................................................19
A viso do Software Operandos e Operadores............................21
A viso do Software Operaes lgicas e aritmticas .................22
A viso do Software transferncia de dados................................33
A viso do Software suporte deciso........................................40
A viso do Software suporte procedimentos ............................52
Concluses .....................................................................................59
Prtica com Simuladores................................................................62
Exerccios.......................................................................................64
Introduo ......................................................................................67
Uso da linguagem de mquina .......................................................80
A viso do Software ArchC ........................................................82
A viso do Software ELF............................................................86
Concluses .....................................................................................94
Prtica com Simuladores................................................................95
Exerccios.......................................................................................95
ix
Introduo ......................................................................................97
Componentes da via de dados ........................................................97
Interligao dos componentes da via de dados.............................101
Unidade de Controle ....................................................................107
Via de dados mono e multi-ciclos ................................................109
Pipeline ........................................................................................111
A viso do Software o pipeline .................................................112
Concluses ...................................................................................115
Prtica com Simuladores..............................................................115
Exerccios.....................................................................................115
Introduo ....................................................................................117
Mtricas de desempenho ..............................................................123
A viso do Software benchmarking .........................................125
Concluses ...................................................................................127
Prtica com Simuladores..............................................................127
Exerccios.....................................................................................127
Introduo ....................................................................................129
Memrias Cache ..........................................................................134
Memria principal........................................................................155
Memrias de Massa .....................................................................160
Sistema de memrias e desempenho da mquina.........................168
A viso do Software ....................................................................170
Concluses ...................................................................................173
Prtica com Simuladores..............................................................175
Exerccios.....................................................................................175
Referncias Bibliogrficas Especficas ........................................177
Introduo ....................................................................................179
Mtodos de Controle de E/S ........................................................182
A viso do software Interrupes..............................................186
Concluses ...................................................................................188
Prtica com Simuladores..............................................................189
Exerccios.....................................................................................191
ndice
xi
Introduo ....................................................................................193
Realidades ....................................................................................194
Alm das Realidades ....................................................................197
Introduo ....................................................................................199
Falha na Escrita............................................................................200
xii
Captulo 1
Introduo
1.1 Introduo
O aluno que chega a cursar a disciplina alvo deste livro, costuma
apresentar um certo grau de conhecimento sobre programao em alto nvel
(C, C++, JAVA e/ou outras), ou est exatamente recebendo estas informaes.
O objetivo deste captulo mostrar o que est por trs deste mundo, o que faz
com que o programa que foi desenvolvido seja executado em um computador,
os papeis do Compilador, do Montador, do Carregador e do Sistema
Operacional, SO.
Inicialmente gostaramos de tratar das mltiplas vises de um
computador, ou seja, como ns enxergamos esta mquina que revolucionou
nossas vidas. Fico me perguntando como podemos apreciar um Da Vinci de
forma to ecltica. Seu mais famoso trabalho, a Mona Lisa, apresenta uma
enorme variedade de interpretaes. De fronte galeria do Louvre que guarda
a obra, muitos curiosos enxergam aquela mulher com um ar enigmtico como
uma obra prima, mas no compreendem a genialidade que existe por trs da
tela. Assimetrias ao fundo, tcnicas de sfumato e a identidade da egria so
apenas vistos por olhos mais curiosos e treinados.
Mas voltemos s nossas mquinas computacionais. Uma criana (e no
somente ela) entende um computador como um grande repositrio de jogos
onde ela pode se divertir. Um usurio compreende um computador como uma
ferramenta que lhe ajuda a digitar textos e encontrar informaes na Internet.
Um analista de sistema v o que outros no enxergam: o computador como o
local onde se materializam seus devaneios (ou dos outros) e de onde ele tira o
seu sustento.
O convite neste livro para irmos alm. Abrirmos a mquina ainda
pouco. Vamos precisar radiograf-la, adentrar suas entranhas e descobrir um
mundo onde tudo minsculo.
1
O que fazer com isto? Por que uma abstrao to detalhada para um
aluno de um curso com nfase em software? Iremos perceber ao longo deste
livro que o usurio de nossos projetos deseja, antes de tudo, um desempenho
razovel da aplicao. Imagine chamar (iniciar) um processador de textos e
esperar meia hora para que ele esteja pronto para uso! Buscar um arquivo e ter
de esperar minutos para que ele esteja disponvel. Isto est fora de nossa
realidade atual.
E o que faz com que nossos softwares sejam eficientes? uma
combinao de tcnicas de software e de hardware. Usar estruturas de dados
adequadas to importante como explorar bem o sistema de memrias. Alm
disto, algumas classes de software exigem um conhecimento profundo da
arquitetura do sistema onde eles sero executados. Trata-se dos softwares
bsicos (System Software). Nesta classe de softwares esto includos
montadores, ligadores, carregadores, compiladores e sistemas operacionais.
Em breve apresentaremos uma viso geral de cada um deles.
Voltando s nossas abstraes, vamos apresentar como hardware e
software podem ser enxergados em camadas. Desta forma definiremos
exatamente o escopo deste livro, sobre que camadas h informaes no texto.
Vamos comear com o Hardware.
A Figura 1.1 mostra as principais camadas de abstrao sobre as quais
um projetista de hardware pode trabalhar. Na camada de DISPOSITIVOS, so
estudados os materiais semi-condutores e suas dopagens com outros
elementos para produzir um transistor, elemento bsico de funcionamento de
um processador. Na camada de CIRCUITO, os transistores so agrupados para
formar um circuito. Na camada de PORTAS, uma operao lgica
materializada em um circuito particular. Na camada de MDULO, diversas
portas so agrupadas para formar um mdulo computacional. Finalmente, na
camada de SISTEMA os mdulos so interligados de tal forma a produzir um
sistema, por exemplo, um processador. Para ajudar no processo de construo
de um sistema eletrnico existem diversas ferramentas para auxlio a projetos,
inclusive ferramentas que permitem a descrio no nvel de sistema e que
geram automaticamente os outros nveis da abstrao. A propsito este
processo de gerar nveis mais baixos de abstrao do sistema chamado de
sntese.
Neste livro abordaremos as camadas de SISTEMA e MDULO, com
eventuais usos de portas lgicas, para construir um processador simples. De
fato, com milhes de transistores presentes em um nico chip, em nossos
tempos, uma tarefa rdua, para no dizer impossvel, projetar um sistema
apenas pensando nos transistores, ou mesmo portas.
Captulo 1: Introduo
Sistema
Mdulo
Porta
Circuito
Dispositivo
G
S
n+
D
n+
Aplicaes
Sistema
Operacional
Hardware
Captulo 1: Introduo
Compilador
C MIPS
Assembly
MIPS
...
add $17, $18, $19
add $16, $16, $17
sub $20, $20, $21
....
Montador
MIPS
Linguagem
de Mquina
MIPS
...
00000010010100111000100000100000
00000010000100011000000000100000
00000010100101011010000000100010
....
Processador
MIPS R3000
Compilador
C SPARC
Assembly
SPARC
...
add %g4, %g1, %g2
add %g3, %g3, %g4
sub %g5, %g5, %g7
....
Montador
SPARC
Linguagem
de Mquina
SPARC
...
10000100000000010000000000000001
10001000000000001100000000000011
10001110001000010100000000000101
....
Processador
SPARC v8
HLL
Compilador
C IA32
Assembly
IA32
...
add eax, ebx, ecx
sub ax, bx, cx
....
Montador
IA32
Linguagem
de Mquina
IA32
...
10000100000000010000000000000001
10001000000000001100000000000011
....
Processador
Pentium
Captulo 1: Introduo
RECEITAS
S
RE E T O
CEI R
TA
S
0
16
32
20
36
24
40
12
28
44
48
64
80
52
68
84
56
72
88
76
92
CONTROLE
S
TE E T O
MPE R
RO
S
VIA DE DADOS
0
1
2
3
4
PROCESSADOR
60
SE
BO T O R
LO
S
ENTRADA
SE
CA TO R
RNE
S
SADA
96
112
128
100
116
132
104
120
136
108
124
140
MEMRIA
Captulo 1: Introduo
10
Captulo 1: Introduo
11
11
A viso do software
A viso do software
12
13
13
A viso do software
Captulo 1: Introduo
14
Processador
MIPS R3000
HLL
Memria
Compilador
C MIPS
Assembly
MIPS
...
add $17, $18, $19
add $16, $16, $17
sub $20, $20, $21
....
Montador
MIPS
...
00000010010100111000100000100000
00000010000100011000000000100000
00000010100101011010000000100010
....
A viso do software
Linguagem
de Mquina
MIPS
Carregador
(SO)
Cdigo
Executvel
Ligador
MIPS
...
00000010010100111000100000100000
00000010000100011000000000100000
00000010100101011010000000100010
....
...
00000010010100111000100000100000
00000010000100011000000000100000
00000010100101011010000000100010
....
biblioteca
15
15
Captulo 1: Introduo
Programa
em Java
Compilador
Java
ByteCodes
Java
(.class)
Mquina
Virtual
Java
A viso do software
16
Programa
em Java
Compilador
Java
ByteCodes
Java
(.class)
Mquina
Virtual
Java
JIT
Mtodos
Java
Executveis
1.4 Concluses
Vimos que um computador uma mquina complexa, mas totalmente
controlvel e determinstica1. Os componentes bsicos de um computador so:
memria, controle, via de dados, entrada e sada. Todos os programas em alto
nvel construdos pelo usurio precisam passar por um processo de converso
para a linguagem da mquina correspondente. Os compiladores, montadores e
ligadores, usados em conjunto geram um cdigo que capaz de ser executado
na mquina. Um sistema operacional um software que blinda o hardware de
tal forma a prover controle sobre os processos que so executados. Nele existe
um mdulo carregador que encarregado de transferir os programas para a
memria, a partir de onde eles podem ser executados. O escopo deste captulo
apresenta o nvel de abstrao que vamos utilizar, ou seja, um nvel de
1
O processo de construo dos chips por vezes nos levam a algumas imperfeies na implementao de um
processador o que permite um certo grau de incerteza na execuo dos cdigos, mas isto minimizado pelo
processo de qualidade e de testes por onde passam os processadores fabricados.
Captulo 1: Introduo
1.6 Exerccios
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
17
18
1.9
1.10
1.11
1.12
1.13
Captulo 2
Linguagem de
Montagem
2.1 Introduo
J vimos os fundamentos da programao de computadores, sob o ponto
de vista da inteligibilidade dos comandos. Sabemos tambm que a
programao em baixo nvel, principalmente em linguagem de mquina,
difcil e de compreenso rdua para ns seres humanos, embora seja
inteligvel para a mquina.
Neste captulo vamos conhecer os comandos de linguagem de
montagem que nos permitem escrever programas para serem executados no
MIPS. Nossa abordagem busca aprender os principais comandos divididos por
categorias funcionais: aritmtica; transferncia de dados; suporte tomada de
deciso; e a procedimentos.
Vamos iniciar pensando um pouco em forma de analogia: aprender um
idioma, de uma mquina ou no, requer conhecer sua palavras. Um dicionrio
um guia importante para quem est aprendendo as primeiras palavras. Assim
como um idioma, uma linguagem de montagem tambm sofre constantes
transformaes, normalmente levando a um novo produto no mercado. Um
exemplo no muito distante foi a introduo do conjunto MMX nas mquinas
Pentium.
A expressividade de um idioma medida pelo nmero de verbetes
conhecidos da lngua. No se pode afirmar aqui que um indivduo falante do
portugus, com um vocabulrio de 15.000 palavras, seja algum que no tenha
muitas habilidades de comunicao. De fato um adulto usa entre 13.000 e
14.000 palavras no cotidiano e um dicionrio pequeno contem 150.000
verbetes. Para termos uma idia, o vocabulrio possvel de um computador,
que usa palavras de tamanho fixo de 32 bits, de apenas 4.294.967.296
palavras. Nada mal, no mesmo? Entretanto, no caso da mquina, existe uma
necessidade de tornar esta expressividade uma realidade, ou seja, preciso
19
20
fazer com que um hardware possa executar estas instrues e que exista um
compilador/montador eficiente para gerar o cdigo de mquina
correspondente. Sob este prisma, a realidade bem diferente. Vamos aprender
ao longo deste texto que a simplicidade favorece o desempenho, ento o
conjunto de instrues que utilizaremos de cerca de uma centena de palavras
com suas flexes.
Esta mxima da arquitetura de computadores foi levantada em tempos
remotos, mas ainda hoje uma realidade. Ns poderamos utilizar qualquer
conjunto de instrues para nosso texto, entretanto, escolhemos o do MIPS
por sua simplicidade. Talvez o conjunto de instrues mais convencional e
mais estudado seja o da famlia 80x86, mas para um curso introdutrio, o do
MIPS nos permite adentrar em detalhes da organizao que seriam intratveis
com uma arquitetura da complexidade de um Pentium.
Quando a organizao de um computador est em fase de projeto, o
formato do conjunto de instrues deve ser determinado o quanto antes. Esta
uma deciso duradoura, visto que uma nova arquitetura, mesmo que melhor
que sua antecessora, implica em perda dos softwares que foram projetados
anteriormente. Esta compatibilidade de software talvez uma das grandes
limitaes para o surgimento de novas arquiteturas. Imagine que a Intel
descontinuasse completamente o suporte aos softwares atuais, em nome de
uma arquitetura que permitisse um ganho de desempenho de 30%. Ora,
nenhum grande usurio estaria interessado em perder todo o seu investimento
em software para ganhar um pouco de desempenho na mquina. Esta
compatibilidade de software to forte, que hoje o Pentium IV enxergado
como uma mquina escalar (no mximo uma instruo executada por vez)
pelo software, mas no fundo ela traduz os comandos para um outro patamar,
onde mais de uma instruo possa ser executada por vez (mquina superescalar).
A eficincia de um conjunto de instrues pode ser medida de diversas
formas: o tamanho que o programa vai ocupar; a complexidade da
decodificao pela mquina; o tamanho das instrues; e o nmero de
instrues. O MIPS utiliza um conjunto cujas instrues so de tamanho fixo,
de 32 bits. Isto bom para decodificao, mas um programa ocupa muito
espao na memria. A propsito, a organizao da memria afeta diretamente
o formato das instrues. Vamos trabalhar com uma memria que utiliza
palavras de 32 bits, mas enderevel a bytes, o que significa que cada byte tem
uma posio (endereo) particular. Isto implica que palavras adjacentes
diferem de 4 unidades de endereo na memria.
21
A viso do software
22
A viso do software
23
23
# a = b + c
# a = a + d => a = (b+c) + d
# a = a + e => a = (b+c+d) + e
A viso do software
24
# $8 = $9 - $10 ou a = b - c
A viso do software
25
25
# a = a + 1
A viso do software
26
# a = b - c
que realiza uma subtrao com nmeros naturais. Mais uma vez lembramos
que subu no gera exceo e o programador precisa se precaver para evitar
erros em seus programas.
Finalmente nos deparamos com a instruo addiu. Esta instruo
opera com nmeros naturais inclusive sendo um dos operando um valor
imediato. Por exemplo, uma constante 4 poderia ser adicionada a um
registrador $8 associado a uma varivel a da seguinte forma:
addiu $8, $8, 4
# a = a + 4
A viso do software
Categoria
Aritmtica
Nome
Exemplo
Operao
Comentrios
add
sub
$8 = $9 + $10
$8 = $9 $10
addi
$8 = $9 + 40
addu
subu
$8 = $9 + $10
$8 = $9 $10
addiu
$8 = $9 + 40
27
27
delas, mas us-las com restries, onde elas no podem ser substitudas por
expresses mais simples.
Vamos comear pensando em uma multiplicao de dois nmeros de 4
algarismos cada. O resultado desta multiplicao ficar, provavelmente, com
8 algarismos. Isto significa que ao multiplicarmos um nmero com n
algarismos por outro com m algarismos, o resultado ser um nmero com
n+m algarismos. No caso do MIPS, a operao de multiplicao ser
realizada sobre dois nmeros de 32 bits. Isto implicar em um resultado de
64 bits. Ora, nenhum registrador tem 64 bits, ento para tornar esta
operao exeqvel, dois registradores extras foram criados: HI e LO, ambos
de 32 bits. HI e LO, usados em conjunto, propiciam que resultados de 64 bits
sejam armazenados nele. Assim, a multiplicao tem um destino fixo e
obrigatrio: o par HI, LO. Por isto ao multiplicarmos dois nmeros
precisamos apenas especificar quais os registradores que os guardam. A
operao mult. Exemplo:
mult $8, $9
# HI, LO = $8 x $9
A viso do software
0000 0000 0000 0000 0000 0000 0000 0111 1111 1111 1111 1111 1111 1111 1111 00002
28
ou seja, HI receberia 1111 1111 1111 1111 1111 1111 1111 10002 e
LO receberia 0000 0000 0000 0000 0000 0000 0001 00002.
O hardware multiplicador realiza uma tarefa muito parecida com a
qual fazemos na escola fundamental. Para operar com nmeros sinalizados,
ele simplesmente encontra os valores absolutos e faz a multiplicao. Depois
ele analisa os sinais. Se eles divergirem significa que o resultado negativo,
caso contrrio o resultado positivo.
H ainda uma outra operao de multiplicao que interpreta seus
operandos como nmeros no sinalizados. Trata-se da instruo multu.
multu opera exatamente da mesma forma que mult, a menos do tratamento
dos sinais. Exemplo:
A viso do software
multu $8, $9
# HI, LO = $8 x $9
# $8 = $9 x $10
29
29
Categoria
Nome
Exemplo
Operao
Comentrios
add
sub
$8 = $9 + $10
$8 = $9 $10
addi
$8 = $9 + 40
addu
subu
$8 = $9 + $10
$8 = $9 $10
addiu
$8 = $9 + 40
mul
$8 = $9 x $10
mult
multu
div
divu
HI,LO = $9 x $10
HI,LO = $9 x $10
HI = $9 mod $10
LO = $9 div $10
HI = $9 mod $10
LO = $9 div $10
Aritmtica
A viso do software
30
$8 = $9 or $10
$8 = $9 and 121.
Se $9 contm 0001 1001 1111 0000 0000 1111 0011 11002 ento vamos
verificar a codificao binria de 121 = 111 10012 e transform-la em um
valor de 32 bits acrescentando zeros esquerda. A operao seria ento:
A viso do software
$9 = $8 << 6.
31
31
1001 1001 1111 0000 0000 1111 0011 1100 0000002 ($8 deslocado)
0111 1100 0000 0011 1100 1111 0000 00002 (resultado em $9)
A viso do software
$9 =
32
$10,
$10,
$10,
$10,
$8, 4
$10, $8
$10, $8
$10, $8
#
#
#
#
$10
$10
$10
$10
=
=
=
=
$8
$8
$8
$8
<< 4. $10 = $8 x 16
x 16 + $8
x 16 + $8 + $8
x 16 + $8 + $8 + $8
$9 = $8 >> 6.
A viso do software
Mais uma vez temos de nos preocupar com os bits mais direita, que
so perdidos durante a execuo da instruo. A instruo srl
interessante para realizar divises de nmeros no sinalizados, ao molde do
que acontece com o sll.
Uma restrio substituio de uma instruo de diviso por uma de
deslocamento direita quanto utilizao de nmeros sinalizados. Ora,
sabemos que o bit de sinal o mais esquerda em um nmero binrio. Ento
ele precisaria ser replicado esquerda para manter o sinal ao final da
operao. Esta limitao levou ao projeto de mais uma instruo: sra (shift
33
33
right arithmetic). sra opera da mesma forma que srl, mas ao contrrio
desta ltima, os bits que sero adentrados esquerda so a rplica do bit de
sinal: O para um valor positivo e 1 para um valor negativo. Vamos ao
exemplo: desejamos deslocar o contedo do registrador $8 de 6 posies
direita, mantendo o sinal. Supondo que originalmente o valor em $8 1001
1001 1111 0000 0000 1111 0011 11002. Ento:
$8 = 1001 1001 1111 0000 0000 1111 0011 11002
111111 1001 1001 1111 0000 0000 1111 0011 11002 (deslocado)
$9 = 1111 1110 0110 0111 1100 0000 0011 11002 (resultado em $9)
Nome
Exemplo
Operao
Comentrios
lgicas
or
and
xor
nor
andi
ori
sll
srl
sra
$8 = $9 or $10
$8 = $9 and $10
$8 = $9 xor 40
$8 = $9 nor $10
$8 = $9 and 5
$8 = $9 or 40
$8 = $9 << 10
$8 = $9 >> 5
$8 = $9 >> 5
Imediato em 16 bits
Imediato em 16 bits
Desloc. 32
Desloc. 32
Desloc. 32, preserva sinal
A viso do software
34
#
#
$9 = HI
$9 = LO
A viso do software
dados
00000000h 10010000
00000001h 00010110
00000002h 01100000
00000003h 00000000
00000004h 11111111
00000005h 01100110
00000006h 01101110
00000007h 00110000
...
...
ffffffffh 00001011
35
35
00000000h 10010000
00000001h 00010110
00000002h 01100000
00000003h 00000000
00000004h 11111111
00000005h 01100110
00000006h 01101110
00000007h 00110000
...
...
ffffffffh 00001011
endereos
palavra 0
palavra 1
...
00000000h
00000004h
00000008h
0000000ch
00000010h
00000014h
00000018h
0000001ch
dados
10010000000101100110000000000000
11111111011001100110111000110000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
...
...
fffffffch 00000000000000000000000000001011
A viso do software
endereos
36
Memria
dados
0
1
2
3
90166000
ff666e30
31
0000000b
...
endereos
lw
sw
00000000h
00000004h
00000008h
0000000ch
00000010h
00000014h
00000018h
0000001ch
...
dados
90166000
ff666e30
00000000
00000000
00000000
00000000
00000000
00000000
...
fffffffch 0000000b
A viso do software
37
37
Banco de Registradores
registrador
Memria
lw $30, 4($2)
lw reg_dest, desloc(reg_base)
dados
0 90166000
1 ff666e30
2 0000000c
3
...
endereos
0000000c
00000000h
00000004h
00000008h
0000000ch
00000010h
00000014h
00000018h
0000001ch
30 0000000f
31 0000000b
...
dados
90166000
ff666e30
00000000
00000000
0000000f
00000000
00000000
00000000
...
fffffffch 0000000b
registrador
dados
0 90166000
1 ff666e30
2 0000000c
3
...
30 fffffff0
31 0000000b
Memria
sw $30, 4($2)
sw reg_fonte, desloc(reg_base)
4
0000000c
endereos
00000000h
00000004h
00000008h
0000000ch
00000010h
00000014h
00000018h
0000001ch
...
dados
90166000
ff666e30
00000000
00000000
fffffff0
00000000
00000000
00000000
...
fffffffch 0000000b
A viso do software
Banco de Registradores
38
A viso do software
...
unsigned int x = 3;
int y = -1;
int n[10];
...
endereos
00000000h
00000004h
00000008h
0000000ch
00000010h
00000014h
00000018h
0000001ch
00000020h
00000024h
00000028h
0000002ch
...
Memria
dados variveis
x
00000003
y
ffffffff
00000000
n[0]
00000000
n[1]
00000003
n[2]
00000000
n[3]
00000000
n[4]
00000004
n[5]
00000000
n[6]
00000000
n[7]
00000000
n[8]
00000000
n[9]
...
...
39
39
carrega o valor de y em $8
carrega o endereo base de n em $9
carrega o valor de n[5] em $10
multiplica y por n[5]. Resultado em $8
guarda valor da multiplicao em n[3]
A viso do software
lw $8, 4($0)
addi $9, $0, 8
lw $10, 20($9)
mul $8, $8, $10
sw $8, 12($9)
40
0000 1111 0011 1100 0000 0000 0000 00002 (depois do lui)
0000 0000 0000 0000 0000 0000 0000 01002 (4)
0000 1111 0011 1100 0000 0000 0000 01002 (depois do ori)
Transferncia
de dados
Nome
Exemplo
Operao
mfhi
mflo
lw
sw
mfhi $8
mflo $8
lw $8, 4($9)
sw $8, 4($9)
$8 = HI
$8 = LO
$8 = MEM[4 + $9]
MEM[4 + $9] = $8
lui
$8 = 100 x 216
Comentrios
A viso do software
41
41
Regio
de
Cdigos
Regio
de
Dados
00000000h
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
0ffffffch
10000000h
10000004h
10000008h
1000000ch
10000010h
...
10007ffch
10008000h
10008004h
10008008h
...
significado
...
3c081000
8d090004
8d0a0010
712a0002
ad090008
...
00000000
00000003
ffffffff
00000000
00000000
00000003
...
x
y
n[0]
n[1]
n[2]
...
instrues
variveis
fffffffch
A viso do software
Memria
Dados /
endereos
instrues
42
00400000
IR
3c081000
00000000h
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
3c081000
8d090004
8d0a0010
712a0002
ad090008
...
instrues
lui $8, 0x1000
lw $9, 4($8)
lw $10, 16($8)
mul $9, $9, $10
sw $9, 8($8)
...
0ffffffch 00000000
...
...
Execuo da instruo
lui na via de dados
A viso do software
43
43
Memria
dados /
endereos
instrues
IR
8d090004
Execuo da instruo
lw na via de dados
PC
00400008
IR
8d0a0010
Execuo da instruo
lw na via de dados
PC
0040000c
IR
712a0002
Execuo da instruo
mul na via de dados
PC
00400010
IR
ad090008
Execuo da instruo
sw na via de dados
...
3c081000
8d090004
8d0a0010
712a0002
ad090008
...
0ffffffch 00000000
...
...
00000000h
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
3c081000
8d090004
8d0a0010
712a0002
ad090008
...
0ffffffch 00000000
...
...
00000000h
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
3c081000
8d090004
8d0a0010
712a0002
ad090008
...
0ffffffch 00000000
...
...
00000000h
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
3c081000
8d090004
8d0a0010
712a0002
ad090008
...
0ffffffch 00000000
...
...
A viso do software
PC
00400004
00000000h
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
instrues
44
A viso do software
if (i == j){
h = i + j;
}
sai:
no
i=j
sim
h=i+j
45
45
Processador
...
$8 00000004
$9 00000003
$10 00000000
...
PC
00400000
Memria
dados /
endereos
instrues
instrues
00000000h
...
...
00400000h 15090002
00400004h 01095020
00400008h 00000000
...
...
00000000h
...
...
00400000h 15090002
00400004h 01095020
00400008h 00000000
...
...
PC
00400008
A viso do software
...
$8 00000004
$9 00000003
$10 00000000
...
46
Processador
...
$8 00000004
$9 00000004
$10 00000000
...
PC
00400000
Memria
dados /
endereos
instrues
instrues
00000000h
...
...
00400000h 15090002
00400004h 01095020
00400008h 00000000
...
...
00000000h
...
...
00400000h 15090002
00400004h 01095020
00400008h 00000000
...
...
00000000h
...
...
00400000h 15090002
00400004h 01095020
00400008h 00000000
...
...
...
$8 00000004
$9 00000004
$10 00000008
...
PC
00400004
...
$8 00000004
$9 00000004
$10 00000008
...
PC
00400008
A viso do software
no
i=j
sim
h=i-j
h=i+j
47
47
Processador
...
$8 00000004
$9 00000003
$10 00000000
...
PC
00400000
$8 00000004
$9 00000003
$10 00000001
...
PC
0040000c
$8 00000004
$9 00000003
$10 00000001
...
PC
00400010
Memria
dados /
endereos
instrues
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
Na Figura 2.14 o bne provoca uma alterao no PC, de tal forma que
a prxima instruo a ser executada a sub. Em seguida a execuo segue
seu curso normal. J a Figura 2.15 mostra a execuo do bloco then
finalizando com a instruo j. Quando esta ltima executada, ela altera o
valor do PC para que o mesmo aponte para o endereo do rtulo sai. Este
salto incondicional, no depende de nenhum valor de registrador.
Depois de executado o jump o fluxo de execuo segue normalmente.
At o presente aprendemos como construir estruturas condicionais e
como desviar o fluxo de execuo de um programa utilizando as instrues
bne, beq e j. Existe, entretanto, uma limitao de implementao de
estruturas condicionais de HLLs, com apenas estas instrues. Ora, e se a
condio de comparao envolver uma condio de maior-que ou menorque? Para suportar esta funcionalidade o conjunto de instrues do MIPS
tem uma instruo que pode ser considerada aritmtica, que opera
informando se um determinado valor menor que outro. Esta instruo a
slt (set on less then). Sua sintaxe exige a presena de dois operandos que
A viso do software
48
$8 00000004
$9 00000004
$10 00000000
...
PC
00400000
$8 00000004
$9 00000004
$10 00000008
...
PC
00400004
$8 00000004
$9 00000004
$10 00000008
...
PC
00400008
$8 00000004
$9 00000004
$10 00000008
...
A viso do software
PC
00400010
Memria
dados /
endereos
instrues
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
49
49
Vamos a um exemplo:
slt $8, $9, $10 # se $9 < $10 ento $8 = 1, seno $8 = 0
Neste caso, a instruo verifica se $9 menor que $10, caso isto ocorra, o
valor de $8 setado (vira 1). Se $9 no for menor que $10 (ou seja, $9
maior ou igual a $10), ento $8 recebe o valor 0. Vejamos como podemos
implementar uma estrutura if-then-else cuja condio exige uma comparao
de grandeza. A Figura 2.16 mostra a combinao das instrues slt e beq
para implementar o if.
Veja que se i < j ento a instruo slt vai colocar em $11 o valor
1. A beq que vem logo em seguida vai verificar se $11 contm um valor 0. Se
tiver o 0 saltar para o rtulo else, seno executar a instruo seguinte, a
soma. Neste caso $11 contm 1 e portanto a soma ser executada. Este
exatamente o efeito procurado, se i < j a expresso a ser executada a
soma e no a subtrao. A Figura 2.17 ilustra tal situao.
no
i<j
sim
h=i-j
h=i+j
A viso do software
if (i < j){
h = i + j;
} else {
h = i j;
}
50
Processador
$0 00000000
...
$8
$9
$10
$11
PC
00000004
00000005
00000000
00000001
...
00400000
Memria
dados /
endereos
instrues
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
$8, $9
$0 00000000
...
$8
$9
$10
$11
PC
00000004
00000005
00000000
00000001
...
00400004
$8, $9
$0 00000000
...
$8
$9
$10
$11
PC
00000004
00000005
00000009
00000001
...
00400008
$8, $9
$0 00000000
A viso do software
...
$8
$9
$10
$11
PC
00000004
00000005
00000009
00000001
...
0040000c
$8, $9
$0 00000000
...
$8
$9
$10
$11
PC
00000004
00000005
00000009
00000001
...
00400014
$8, $9
51
51
Processador
$0 00000000
...
$8
$9
$10
$11
PC
00000005
00000004
00000000
00000000
...
00400000
Memria
dados /
endereos
instrues
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
...
...
0109582a
11600003
01095020
08100005
01095022
00000000
...
slt $11,
beq $11,
add $10,
j sai
else: sub $10,
sai: nop
...
$8, $9
$0, else
$8, $9
$8, $9
$0 00000000
...
$8
$9
$10
$11
PC
00000005
00000004
00000000
00000000
...
00400004
$8, $9
$0 00000000
...
$8
$9
$10
$11
PC
00000005
00000004
00000001
00000000
...
00400010
$8, $9
$0 00000000
$8
$9
$10
$11
PC
00400014
$8, $9
A viso do software
...
00000005
00000004
00000001
00000000
...
52
Categoria
Suporte a
deciso
Nome
Exemplo
bne
beq
J rotulo
slt
sltu
Operao
se $8 $9 ento
PC endereo[rotulo]
se $8 = $9 ento
PC endereo[rotulo]
PC endereo[rotulo]
se $8 < $9
ento $10 1
seno $10 0
se $8 < $9
ento $10 1
seno $10 0
Comentrios
A viso do software
addi $4,$0, 5
addi $8, $0, 1
mul $8, $8, $4
addi $4, $4, -1
bne $4, $0, lab1
fimFat1: add $2, $8, $0
add $3, $2, $0
addi $4, $0, 9
fat2:
addi $8, $0, 1
lab2:
mul $8, $8, $4
addi $4, $4, -1
bne $4, $0, lab2
fimFat2: add $2, $8, $0
add $3, $3, $2
Clculo do Fatorial
Clculo do Fatorial
53
53
ret1:
call2:
ret2:
addi $4,$0, 5
call
ret
fat:
lab:
A viso do software
54
poderamos retornar para duas posies possveis: ret1 ou ret2. Isto depende
de onde o procedimento foi invocado: de call1 ou call2. Uma soluo para o
problema seria guardar em algum lugar a identidade de quem chamou e no
momento do retorno, olhando para esta identidade, decidir para onde
retornar.
Para implementar esta funcionalidade o MIPS dispe de 2 instrues
de desvio especialmente projetadas para dar suporte a procedimentos: jal
(jump-and-link) e jr (jump register). jal uma instruo de
desvio incondicional como j, mas alm de alterar o valor do PC, ela tambm
guarda em $31 o endereo de retorno do procedimento. jr, por sua vez,
tambm uma instruo de desvio incondicional e retorna para o endereo
especificado no registrador usado na instruo. Se este registrador o $31,
ento ele retorna exatamente para o endereo associado posio de retorno
da chamada especfica do procedimento.
A Figura 2.21 mostra o trecho do cdigo alocado na memria. Observe
que o procedimento fatorial (fat), ser invocado pelo programa principal com
a instruo jal. O retorno do procediemento implementado com a
instruo jr especificando o seu operando como sendo o registrador $31.
Observe tambm que quando o programa alocado na memria o valor de
PC passa a apontar para o endereo associado ao rtulo main. Por isto,
qualquer de nossos cdigos precisa ter um rtulo main no seu incio.
Processador
$0 00000000
A viso do software
...
$2
$3
$4
$8
$31
PC
00000000
00000000
00000000
...
00000000
...
00000000
00400018
Memria
dados /
endereos
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
instrues
fat:
lab:
55
55
$0 00000000
...
$2
$3
$4
$8
$31
PC
00000000
00000000
00000005
...
00000000
...
00000000
00400018
$0 00000000
...
$2 00000000
$3 00000000
$4 00000005
...
$8 00000000
...
$31 00400020
PC
0040001c
$0 00000000
...
$2
$3
$4
$8
$31
PC
00000000
00000000
00000005
...
00000001
...
00400020
00400000
Memria
dados /
endereos
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
instrues
fat:
lab:
fat:
lab:
fat:
lab:
A viso do software
Processador
56
$2
$3
$4
$8
$31
PC
00000078
00000000
00000000
...
00000078
...
00400020
00400010
$0 00000000
...
$2
$3
$4
$8
$31
A viso do software
PC
00000078
00000000
00000000
...
00000078
...
00400020
00400014
$0 00000000
...
$2
$3
$4
$8
$31
PC
00000078
00000078
00000000
...
00000078
...
00400020
00400020
Memria
dados /
endereos
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
instrues
fat:
lab:
fat:
lab:
fat:
lab:
57
57
$0 00000000
...
$2
$3
$4
$8
$31
PC
00000078
00000078
00000009
...
00000078
...
00400020
00400024
$0 00000000
...
$2
$3
$4
$8
$31
PC
00000078
00000078
00000009
...
00000078
...
0040002c
00400028
$0 00000000
...
$2
$3
$4
$8
$31
PC
00000078
00000078
00000009
...
00000001
...
0040002c
00400000
Memria
dados /
endereos
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
instrues
fat:
lab:
fat:
lab:
fat:
lab:
A viso do software
Processador
58
$2
$3
$4
$8
$31
PC
00058980
00000078
00000000
...
00058980
...
0040002c
00400014
$0 00000000
...
$2 00058980
$3 000589f8
$4 00000000
...
$8 00058980
...
$31 0040002c
A viso do software
PC
0040002c
Memria
dados /
endereos
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
00400014h
00400018h
0040001ch
00400020h
00400024h
00400028h
0040002ch
...
...
20080001
71040002
2084ffff
1480fffe
01001020
03e00008
20040005
0c100009
00401820
20040009
0c100009
00621820
...
instrues
fat:
lab:
fat:
lab:
59
59
Nome
Suporte a
procedimentos
Exemplo
jal
jal rotulo
jr
jr $31
Operao
Comentrios
$31 endereo[retorno]
PC endereo[rotulo]
PC $31
2.7 Concluses
Conhecemos neste captulo algumas das principais palavras da
linguagem de montagem do MIPS. Como qualquer idioma, juntar as palavras
para formar uma frase, no nosso caso um programa, requer treino. Muito
treino. Decor-las de pouca valia por que o nosso interlocutor uma
mquina que s entende se as palavras estiverem corretas e as frases muito
bem formadas. O esperado que haja muito treino da parte do leitor que
queira, de fato, se apropriar deste conhecimento.
A Tabela 2.7 serve de gabarito, para ser utilizado enquanto voc no se
apropria inteiramente das palavras. Alm disto, ela tambm serve para voc
tirar dvidas da sintaxe da instruo, agindo como um pequeno dicionrio.
Aprendemos tambm que o cuidado para que um valor possa ser
armazenado, sem problemas de overflow, nos registradores de
responsabilidade do programador.
Vamos agora ver alguns detalhes adicionais. No MIPS h tambm um
conjunto de instrues, chamadas pseudo-instrues. Elas no existem de fato,
mas um programador pode utiliz-las desde que o seu montador oferea
suporte pseudo-instrues. Um exemplo mov $4, $8. (move. Mova o
contedo do registrador $8 para o registrador $4) O montador interpretaria
esta pseudo-instruo e geraria o cdigo de mquina correspondente a
add $4, $0, $8 ou or $4, $0, $8. Existem tambm pseudoinstrues que se desdobram em mais de uma, por exemplo,
bgt $8, $9, label (branch if grater then, salta para label se $8 for
maior que $9). O montador do MIPS geraria ento, em cdigo de mquina, a
seguinte seqncia de instrues: slt
$1,
$9,
$8 e
bne $1, $0, label. O efeito o mesmo pretendido.
60
Categoria
Nome
Exemplo
Operao
Comentrios
add
sub
$8 = $9 + $10
$8 = $9 $10
addi
$8 = $9 + 40
addu
subu
$8 = $9 + $10
$8 = $9 $10
addiu
$8 = $9 + 40
mul
$8 = $9 x $10
mult
multu
div
divu
or
and
xor
nor
andi
ori
sll
srl
sra
mfhi
mflo
lw
sw
HI,LO = $9 x $10
HI,LO = $9 x $10
HI = $9 mod $10
LO = $9 div $10
HI = $9 mod $10
LO = $9 div $10
$8 = $9 or $10
$8 = $9 and $10
$8 = $9 xor 40
$8 = $9 nor $10
$8 = $9 and 5
$8 = $9 or 40
$8 = $9 << 10
$8 = $9 >> 5
$8 = $9 >> 5
$8 = HI
$8 = LO
$8 = MEM[4 + $9]
MEM[4 + $9] = $8
lui
$8 = 100 x 216
bne
beq
J rotulo
slt
sltu
jal
jal rotulo
jr
jr $31
Aritmtica
lgicas
Transferncia
de dados
Suporte a
deciso
Suporte a
procedimentos
se $8 $9 ento
PC endereo[rotulo]
se $8 = $9 ento
PC endereo[rotulo]
PC endereo[rotulo]
se $8 < $9
ento $10 1
seno $10 0
se $8 < $9
ento $10 1
seno $10 0
$31
endereo[retorno]
PC endereo[rotulo]
PC $31
Imediato em 16 bits
Imediato em 16 bits
Desloc. 32
Desloc. 32
Desloc. 32. Preserva sinal
61
Nmero do
Registrador
$zero
$at
$v0
$v1
$a0
$a1
$a2
$a3
$t0
$t1
$t2
$t3
$t4
$t5
$t6
$t7
$s0
$s1
$s2
$s3
$s4
$s5
$s6
$s7
$t8
$t9
$kt0
$kt1
$gp
$sp
$fp
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ra
31
Uso previsto
Constante ZERO
Reservado para tarefas do montador (assembler tasks)
Valores dos resultados dos procedimentos
Argumentos (parmetros) a serem passados para
procedimentos
Mais temporrios
Reservados para tarefas do kernel do Sistema
Operacional (kernel tasks)
Apontador global (global pointer)
Apontador de pilha (stack pointer)
Apontador de quadros (frame pointer)
Endereo de Retorno de procedimentos
(return address)
62
63
.data
.word -2, 20, -270, 15, 9, 62, 1, 8, -100
.word 9 # vector size (elements)
.text
#Every code begins with
main:
ori $8, $0, 0
ori $9, $0, 0
ori $10, $0, 0
lui $18, 4097
lw $17, 36($18)
addi $19, $17, -1
m1:
"main" label
# i in $8
# j in $9
# min in $10
# n in $s1 ($17)
# n-1 in $s3 ($19)
# if i >= n-1 then quit
# j = i+1;
# j++
m2:
# i++
m3:
nop
64
2.9 Exerccios
2.1
65
66
ai x bi
i=0
Captulo 3
Linguagem de
Mquina
3.1 Introduo
Neste captulo vamos conhecer melhor a tarefa do montador. Vamos, de
fato, conhecer o objeto que ele gera, a linguagem de mquina do MIPS. J
sabemos que existe uma correspondncia de um para um entre uma instruo
em linguagem de montagem e uma instruo em linguagem de mquina.
Sabemos tambm que no MIPS todas as instrues tm o mesmo tamanho: 32
bits.
Bem, para comearmos a conhecer a linguagem de mquina, vamos
abordar a converso da instruo add $8, $9, $10 em sua equivalente.
Os bits que formam a instruo so divididos em grupos que indicam a
operao a ser realizada e os operandos. No MIPS os 6 bits mais significativos
(mais a esquerda) formam um campo chamado opcode. Ele pode conter um
cdigo de uma instruo em particular, ou um cdigo que indica uma famlia
de instrues. No nosso exemplo da instruo add, o opcode vale 0000002
indicando uma famlia de instrues. Os 6 bits menos significativos so
responsveis ento por definir que instruo est codificada. Este campo ns
chamamos de funo (function). Os operandos so indicados em uma ordem
particular. O campo rd significa registrador de destino, o campo rs,
registrador de fonte (source) e o campo rt, registrador de alvo (target), que
pode ser destino ou fonte.
A Figura 3.1 mostra os campos da instruo add $8, $9, $10.
Como o opcode vale 0000002, a instruo definida pelo campo function. Este
campo vale 32 (1000002) para instruo add. O campo rs indica o
registrador que compe a primeira parcela da soma. O campo rt, a segunda.
O campo rd indica o registrador onde o resultado da soma ser colocado.
67
68
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0
0 1 0 0 1 0 1 0 1 0 0 1 0 0 0
opcode
rs
rt
X X X X X 1 0 0 0 0 0
rd
function
0001
0110
1100
0110
1000
0010
0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0
opcode
0 1 1 0 0 0 1 1 0 1 0 1 0 1 1
rs
rt
0 0 0 0 0 1 0 0 0 0 0
rd
function
69
Agora vamos outra instruo: sub $8, $10, $11. Esta instruo
tambm tem um opcode igual a 0000002. Isto indica que ela pertence mesma
famlia da instruo add. O valor do campo function : 1000102. A
codificao segue o mesmo padro: 6 bits para opcode, 5 para rs, 5 para
rt, 5 para rd, 5 desconsiderados e 6 para function, nesta seqncia
necessariamente. A Figura 3.3 mostra a codificao da instruo.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0
opcode
0 1 0 1 0 0 1 0 1 1 0 1 0 0 0
rs
rt
X X X X X 1 0 0 0 1 0
rd
function
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0
opcode
0 0 0 0 0 0 1 0 0 1 0 1 0 0 0
rs
rt
rd
0 0 0 1 1 0 0 0 0 0 0
sa
function
70
Formato
Exemplo
sll
srl
jr
mfhi
mflo
mult
multu
div
divu
add
addu
sub
subu
and
or
slt
sltu
mul
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
Codificao
opcode
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
28
rs
9
0
8
0
0
9
9
9
9
9
9
9
9
9
9
9
9
9
rt
10
10
0
0
0
10
10
10
10
10
10
10
10
10
10
10
10
10
rd
8
8
0
8
8
0
0
0
0
8
8
8
8
8
8
8
8
8
sa
3
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
function
0
2
8
16
18
24
25
26
27
32
33
34
35
36
37
42
43
2
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 1 0 0 0
opcode
0 1 0 0 1 0 1 0 0 0
rs
rt
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
immediate
71
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 0 0 0 1 1
opcode
0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
rs
rt
immediate
72
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 1 0 0
opcode
0 1 0 0 0 0 1 0 0 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
rs
rt
immediate
Novo valor de PC
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
PC
0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
73
Processador
...
$8 00000004
$9 00000004
$10 00000000
...
PC
00400000
Memria
dados /
endereos
instrues
instrues
00000000h
...
...
00400000h 11090002
00400004h 01095020
00400008h 00000000
...
...
00000000h
...
...
00400000h 11090002
00400004h 01095020
00400008h 00000000
...
...
...
$8 00000004
$9 00000004
$10 00000000
...
PC
00400008
74
0001
0101
0000
1001
1111
1111
1111
1101
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 1 0 1
opcode
0 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
rs
rt
immediate
Nome
Formato
Exemplo
beq
bne
addi
addiu
slti
sltiu
andi
ori
lui
lw
sw
I
I
I
I
I
I
I
I
I
I
I
Codificao
opcode
4
5
8
9
10
11
12
13
15
35
43
rs
8
8
9
9
9
9
9
9
0
9
9
rt
9
9
8
8
8
8
8
8
8
8
8
immediate
3
3
3
3
3
3
3
3
3
4
4
75
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
opcode
address
76
j endereo
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
opcode
address
Novo valor de PC
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
PC
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
PC
0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Antigo valor de PC
Figura 3.10: Instruo e clculo de endereo para instruo
j endereo em linguagem de mquina
77
Processador
Memria
dados /
endereos
instrues
...
$8 00000004
$9 00000004
$10 00000000
...
PC
00400000
$8 00000004
$9 00000004
$10 00000008
...
PC
00400004
$8 00000004
$9 00000004
$10 00000008
...
PC
00400008
$8 00000004
$9 00000004
$10 00000008
...
PC
00400010
instrues
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
...
00400000h
00400004h
00400008h
0040000ch
00400010h
...
...
15090003
01095020
08100004
01095022
00000000
...
Formato
Exemplo
j
jal
J
J
j 1000
jal 1000
Codificao
opcode
2
3
endereo
1000
1000
78
Nome
Formato
Exemplo
sll
srl
jr
mfhi
mflo
mult
multu
div
divu
add
addu
sub
subu
and
or
slt
sltu
mul
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
beq
bne
addi
addiu
slti
sltiu
andi
ori
lui
lw
sw
I
I
I
I
I
I
I
I
I
I
I
j
jal
J
J
j 1000
jal 1000
Codificao
opcode
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
28
opcode
4
5
8
9
10
11
12
13
15
35
43
opcode
2
3
rs
9
0
8
0
0
9
9
9
9
9
9
9
9
9
9
9
9
9
rs
8
8
9
9
9
9
9
9
0
9
9
rt
10
10
0
0
0
10
10
10
10
10
10
10
10
10
10
10
10
10
rt
9
9
8
8
8
8
8
8
8
8
8
rd
8
8
0
8
8
0
0
0
0
8
8
8
8
8
8
8
8
8
sa
function
3
0
3
2
0
8
0
16
0
18
0
24
0
25
0
26
0
27
0
32
0
33
0
34
0
35
0
36
0
37
0
42
0
43
0
2
immediate
3
3
3
3
3
3
3
3
3
4
4
address
1000
1000
79
0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
bits [31..29]
bits [28..26]
000
001
010
011
100
101
110
111
000
001
SPECIAL
REGIMM
addi
addiu
010
j
slti
011
jal
sltiu
COP0
COP1
COP2
COPIX
lb
sb
ll
sc
lh
sh
lwc1
swc1
lwl
swl
lwc2
swc2
lw
sw
pref
100
beq
andi
101
bne
ori
SPECIAL2
jalx
lhu
lbu
110
blez
xori
111
bgtz
lui
SPECIAL3
lwr
swr
ldc2
sdc2
ldc1
sdc1
cache
opcode
address
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
opcode
rs
rt
immediate
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
opcode
rs
rt
rd
as
function
80
function
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
bits [5..3]
0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
bits [2..0]
000
001
010
011
100
101
110
111
000
sll
jr
mfhi
mult
add
001
MOVCI
jalr
mthi
multu
addu
tge
tgeu
010
srl
movz
mflo
div
sub
slt
tlt
011
sra
movn
mtlo
divu
subu
sltu
tltu
100
sllv
syscall
break
and
or
teq
101
110
srlv
111
srav
sync
xor
nor
tne
81
SystemC
Simulao
Refinamento
Sntese
82
A viso do software
83
AC_ISA
AC_ARCHC
Gerador de
Simuladores do
ArchC
GCC
SystemC
Especificao
Executvel
A viso do software
Modelo
SystemC
84
84
A viso do software
85
op, cujo valor deve ser 23h (0x23 outra forma de representar o valor em
hexadecimal).
AC_ISA(mips){
ac_format Type_R = %op:6 %rs:5 %rt:5 %rd:5 0x00:5 %func:6;
ac_format Type_I = %op:6 %rs:5 %rt:5 %imm:16:s;
ac_format Type_J = %op:6 %addr:26;
ac_instr<Type_R> add, addu, subu, multu, divu, sltu;
ac_instr<Type_I> lw, sw, beq, bne, addi, andi, ori, lui, sltu;
ac_instr<Type_J> j, jal;
ac_asm_reg{
"$"[0..31] = [0..31];
"$zero" = 0;
"$at" = 1;
"$kt"[0..1] = [26..27];
"$gp" = 28;
"$sp" = 29;
"$fp" = 30;
"$ra" = 31;
};
ISA_CTOR(mips){
lw.set_asm(lw %reg, %imm(%reg), rt, imm, rs);
lw.set_decoder(op=0x23);
add.set_asm(add %reg, %reg, %reg, rd, rs, rt);
add.set_decoder(op=0x00, func=0x20);
};
}
A viso do software
86
86
A viso do software
87
A viso do software
88
88
...
Segmento n
Seo 1
Seo 2
...
Seo n
Cabealho de Sees
A viso do software
89
byte
0
Cabealho
Geral
...
deslocamento
cabe. programa (m)
deslocamento
cabe. Sees (n)
51
Nmero de entradas
na tabela Sees (T)
...
Nmero de entradas
na tabela Program (z)
Tamanho entrada
tabela Sees
Cabealho
Programas
...
Tamanho entrada
tabela Programa
Cabealho
Sees
n
Segmento 1
...
Segmento z
Seo 1
Seo 2
...
Desl. Seo T (l)
Tamanho Seo T
...
...
Seo T
A viso do software
90
90
7fh
32
33
49
mquina
34
50
35
verso
36
37
38
sinalizadores
(flags)
10 11 12
13 14 15
padding = 0
19 20 21 22 23
deslocamento
cabealho sees
48
16 17 18
tipo
24 25 26 27 28 29 30 31
ponto de entrada
deslocamento
cabe. de programa
39 40 41 42 43 44 45 46 47
tamanho tamanho nmero de tamanho
cabe. ger entrada P entradas P entrada S
51
A viso do software
nmero
ndice
entrada S s. strings
+0
+1 +2 +3
tipo
+4
+5
deslocamento
endereo virtual
endereo fsico
+16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31
tamanho segmento
tamanho memria
sinalizadores
alinhamento
A viso do software
91
A viso do software
92
92
93
+0
+1 +2 +3
+4
nome
+5
+6
tipo
sinalizadores
endereo
+16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31
deslocamento
tamanho
link
informaes extras
tamanho entrada
Tipo
NULL
PROGBITS
SYMTAB
STRTAB
RELA
HASH
DYNAMIC
NOTE
NOBITS
REL
SHLIB
Valor
0
1
2
3
4
5
6
7
8
9
10
Descrio
Seo inexistente
Bits do programa
Tabela de Smbolos
Tabela de Strings
Informaes de Relocao
Tabela de Espalhamento de Smbolos
Ligao dinmica
Anotaes sobre o arquivo
No ocupa espao no arquivo
Informaes de Relocao
Sem semntica especfica
A viso do software
94
3.5 Concluses
Conhecemos neste captulo como a codificao binria de uma poro
das instrues do MIPS. No tratamos, entretanto de todas as instrues, como
instrues de ponto flutuante ou de coprocessador. O que importa neste
instante que o leitor possa fazer uma traduo de cdigo de mquina para
cdigo de montagem e vice-versa.
Vimos tambm que o nmero de formatos disponveis no MIPS de
trs. Isto pode parecer um nmero muito pequeno, mas existe um benefcio
muito importante associado. A decodificao de uma instruo feita pela
mquina e quanto mais formatos existirem, mais possibilidades de
combinaes de bits existiro. Isto tem implicao direta no desempenho do
decodificador. Ento, a escolha de um pequeno nmero de formatos melhora o
desempenho da mquina.
Para finalizar, estudamos como a anatomia de um arquivo executvel
no formato ELF. O conhecimento adquirido ao dividir os campos das
instrues diretamente aplicado para o reconhecimento do formato ELF.
No nos cabe, entretanto, discutir os detalhes do formato. A apresentao foi
geral, mas com ela possvel extrair a maioria das informaes no formato.
Em particular uma seo muito especial precisa ser abordada: a seo de
cadeia de caracteres (strings).
Cada seo tambm tm nome e eles podem indicar um tipo muito
particular de seo. As sees mais conhecidas so: .init que contm um
trecho de cdigo que deve ser executado antes da chamada ao programa
principal; .text que contm as instrues do programa propriamente dito;
.fini, que executada depois da finalizao do cdigo do programa em
.text. .init e .fini executam instrues que contribuem para a criao
e finalizao do processo pelo Sistema Operacional. A seo .data contm
os dados do programa. A seo .rodata (read-ony data) contm os dados
que no sero passivos de escrita durante a execuo do cdigo. A seo
.strtab contm strings usadas no programa e a seo .symtab contm
informaes sobre os smbolos utilizados.
Juntado os nossos conhecimentos, aprendemos a criar uma descrio de
uma arquitetura em uma ADL, a ArchC. Fizemos um esboo de uma descrio
do MIPS usando a linguagem. Usamos um modelo funcional que esconde os
detalhes da organizao do computador, mas explicita os detalhes da
construo do conjunto de instrues. um bom exerccio completar a
especificao.
95
3.7 Exerccios
3.1 Pesquise na web e produza um resumo sobre a seo strtab.
3.2 Pesquise na web e produza um resumo sobre como especificar pseudoinstrues do MIPS em ArchC.
3.3 Para cada cdigo criado nos exemplos do captulo 2 encontre a
codificao em linguagem de mquina do MIPS.
3.4 Preencha a Tabela 3.6 como o exemplo.
3.5 Dado o arquivo ELF a seguir, indique qual o programa que ser
carregado na memria para ser executado.
# byte
00000000
00000010
00000020
00000030
00000040
00000050
00000060
00000070
00000080
00000090
000000a0
000000b0
000000c0
000000d0
000000e0
7f
00
00
00
00
00
01
01
01
01
00
00
00
00
00
45
02
00
02
40
00
09
09
09
09
00
00
00
00
00
4c
00
00
00
00
00
58
50
58
50
00
00
00
00
00
46
08
a0
00
00
00
2a
22
2a
22
00
00
00
06
00
01
00
00
00
00
00
11
00
11
00
00
00
00
00
00
02
00
00
00
00
00
60
00
60
00
00
00
00
04
00
01
00
00
00
00
00
00
00
00
00
00
00
00
00
00
Contedo
00 00 00
01 00 40
00 00 34
01 00 00
18 00 00
00 00 00
03 01 09
00 00 00
03 01 09
00 00 00
00 00 00
00 00 00
00 00 00
00 00 00
00 00 00
00
00
00
00
00
00
50
00
50
00
00
00
00
00
00
00
00
20
60
18
00
20
00
20
00
00
00
01
80
04
00
00
00
00
00
00
08
00
08
00
00
00
00
00
00
00
00
01
40
00
00
10
00
10
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
34
28
00
07
00
05
00
05
00
00
00
01
18
00
96
Categoria
Nome Formato
add
Exemplo
Operao
(ArchC)
Comentrios
RB[rd] =
RB[rs] + RB[rt];
sub
addi
addu
subu
Aritmtica
addiu
mul
lgicas
Transferncia
de dados
mult
multu
div
divu
or
and
xor
nor
andi
ori
sll
srl
sra
mfhi
mflo
lw
sw
Imediato em 16 bits
Imediato em 16 bits
Desloc. 32
Desloc. 32
Desloc. 32. Preserva sinal
lui
Suporte a
deciso
bne
beq
j
Opera com nmeros
sinalizados
Opera com nmeros
no sinalizados
slt
sltu
Suporte a
procedimentos
jal
jr
Captulo 4
O Processador
4.1 Introduo
Aprendemos at o presente a utilizar uma linguagem de montagem e
como esta linguagem convertida para linguagem de mquina, que
efetivamente inteligvel ao processador. Com os conhecimentos adquiridos
possvel descrever, no nvel funcional, o comportamento de uma mquina que
executa as instrues que ns projetamos. Este captulo tem a inteno de
mostrar como podemos projetar um hardware para tornar realidade um tal
processador de instrues.
Tambm introduziremos a questo do desempenho, que ser tratada de
forma mais abrangente no captulo 5. Aqui a abordagem ser meramente a
construo de um pipeline que permita que as instrues sejam executadas por
partes, promovendo uma melhor utilizao dos recursos e diminuindo o tempo
necessrio para execuo de um programa.
Finalmente veremos, na viso do software, como podemos especificar
uma organizao de um computador de forma mais sofisticada utilizando
ArchC.
97
98
Endereo
32
Memria
32
Entrada/Sada
Informao
Figura 4.1: Representao de uma memria
99
Captulo 4: O processador
Reg. Leit. 1
Reg. Leit. 2
Reg, Escrita
5
5
5
32
Banco
Registrador
32
Dado 1
Dado 2
32
Dado para
Escrita
Figura 4.2: Representao de um banco de registradores
100
ALUop
3
32
Dado 1
ResultadoZero
Resultado
32
32
Dado 2
Extensor
de sinal
32
101
Captulo 4: O processador
Canal
0 1 2 3
Canal
0 1 2 3
002
seleo
Canal
0 1 2 3
012
seleo
MUX
Canal
0 1 2 3
MUX
32
102
seleo
32
sada
112
seleo
MUX
MUX
32
sada
32
sada
sada
function
W/R
1
32
5
sa
rd
Banco
10
Registrador
rt
Dado 1
Dado 2
32
ResultadoZero
Resultado
32
32
Dado para
Escrita
rs
Opcode
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
IR
Figura 4.6: Via de dados para instruo add
102
immediate
32
4
5
5
Banco
Registrador
rt
ResultadoZero
Dado 1
32
32
32
Endereo
Extensor
de sinal
rs
16
1
5
W/R
ALUop
W/R
Opcode
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
IR
Dado para
Escrita
Memria
32
Entrada/Sada
Informao
Agora vamos ver uma parte da via de dados que comum a todas as
instrues: o clculo de PC e a busca de instrues na memria. Em verdade,
o PC sempre somado a 4, salvo em caso de instrues de salto. Vamos
considerar inicialmente que no existem saltos e verificar como ficaria o
circuito para calcular o PC. Ora, j sabemos que a ALU capaz de realizar
somas, subtraes, operaes lgicas etc. Uma ALU mais simples, que realiza
apenas somas com o valor 4, ento utilizada para clculo do PC. O valor do
PC incrementado e a instruo seguinte lida na memria. A Figura 4.8
mostra esta parte do circuito.
103
Captulo 4: O processador
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PC
W/R
1
Memria
32
32
+
4
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
IR
104
Resultadozero
PC
32
Memria
32
4
M
U
X
ALUop
W/R
1
32
immediate
5
8
5
5
Banco
Registrador
32
9
rt
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
16
rs
W/R
Opcode
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Extensor
de sinal
<<2
32
Endereo
alvo
IR
105
Captulo 4: O processador
function
sa
Banco
Registrador
5
5
rt
rd
32
Dado 2
ResultadoZero
Resultado
32
32
Dado para
Escrita
rs
Opcode
Dado 1
32
IR
immediate
32
Banco
Registrador
5
5
1
5
W/R
ALUop
W/R
ResultadoZero
Dado 1
32
32
Endereo
rt
32
Extensor
de sinal
Opcode
function
Dado para
Escrita
IR
Entrada/Sada
Informao
sa
rd
M
U
X
Banco
Registrador
32
Dado 1
32
Dado 2
ResultadoZero
1
32
ALUsrc
Memria
16
IR
W/R
ALUop
W/R
REGsrc
Memria
32
rs
16
rt
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
rs
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
ALUop
W/R
5
Opcode
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Extensor
de sinal
Dado para
Escrita
M
U
X
32
REGdata
32
1
M
U
X
Entrada/Sada
Informao
106
32
4
M
U
X
function
REGdst
sa
rd
M
U
X
Banco
Registrador
16
IR
32
Dado 1
32
Dado 2
W/R
1
32
ALUsrc
Memria
Dados
rt
Memria
Instrues
32
ALUop
W/R
rs
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Opcode
W/R
ResultadoZero
BEQ?
PC
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Extensor
de sinal
M
U
X
REGdata
32
<<2
32
1
M
U
X
107
Captulo 4: O processador
opcode
function
Sadas
W/R
MI
0
0
0
REGdst
0
1
0
W/R
REG
1
1
0
ALUsrc
BEQ?
REGdata
ALUop
0
1
0
0
0
1
0
1
0
010
010
110
W/R
MD
0
0
0
108
M
U
X
Extensor
de sinal
Memria
Dados
M
U
X
32
<<2
W/R
MD
ResultadoZero
ALUsrc
REGdata
16
IR
ALUop
W/R
REG
REGdst
function
sa
Banco
Registrador
rt
rd
M
U
X
rs
Memria
Instrues
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Opcode
W/R
MI
PC
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
BEQ?
Unidade
de
Controle
M
U
X
Figura 4.12: Via de dados com Unidade de Controle para instrues add, lw e beq
Captulo 4: O processador
109
110
Mono-ciclo
add
beq
lw
add
lw
beq
Multi-ciclo
tempo
20ns
40ns
60ns
111
Captulo 4: O processador
4.6 Pipeline
A idia por trs do pipeline uma linha de montagem de automveis.
Enquanto o uma equipe est trabalhando na pintura, outra est trabalhando no
sistema eltrico e outra no motor. Quando as trs equipes terminam sua tarefa,
o primeiro carro est totalmente montado, o segundo, que estava na parte
eltrica, vai para a parte de pintura, e o terceiro, que estava no motor vai para
parte eltrica. Assim, podemos manter ocupadas todas as partes de um
processador sem precisar esperar que a instruo fique pronta.
A diviso do trabalho feita de forma semelhante ao mostrado
anteriormente: um estgio de busca (F, fetch), um de decodificao (D,
decode), um de execuo (E, execution,), um de memria (M, memory) e o
ultimo de escrita (W, write). Nesta abordagem, a equipe (o estgio do
pipeline) mais lenta quem dita a regra.
Seguindo a mesma temporizao dos exemplos anteriores poderamos
definir um ciclo de clock de 6ns, pois a leitura da memria a parte mais
demorada do processo e gasta exatamente 6ns. Durante o primeiro ciclo de
clock a instruo add buscada na memria. No segundo ciclo de clock, a
instruo add vai para o estgio de decodificao e a instruo lw buscada
na memria. No terceiro ciclo de clock, add vai para execuo, lw vai para
decodificao e beq buscada na memria. E assim, sucessivamente. A
Figura 4.14 mostra a execuo das instrues.
Fadd
Dadd
Flw
Eadd
Madd
Wadd
Elw
Mlw
Wlw
Ebeq
Mbeq
Dlw
Fbeq
Dbeq
18ns
Wbeq
36ns
tempo
54ns
60ns
112
A viso do software
113
Captulo 4: O processador
Fadd
Dadd
Flw
Eadd
Dlw
Fbeq
Madd
Wadd
Elw
Mlw
Wlw
Ebeq
Mbeq
Wbeq
Esub
Msub
Dbeq
Fsub
Dsub
Wsub
Dadd
Fsub
Eadd
Dsub
Madd
Wadd
Esub
Msub
Wsub
A viso do software
Fadd
114
Fbeq
Dbeq
Flw
Ebeq
Mbeq
Wbeq
Fsw
Dsw
Dlw
Fsub
A viso do software
Captulo 4: O processador
4.8 Concluses
Estudamos neste captulo a construo de um processador simples capaz
de executar as instrues em cdigo de mquina vistas no captulo anterior.
Vimos tambm que existem algumas maneiras de interligar os componentes
de um processador de tal forma que obtenhamos o melhor desempenho
possvel. A propsito, as mtricas de desempenho sero abordadas em nosso
prximo captulo.
4.10 Exerccios
4.1
115
116
Captulo 5
Desempenho do
Computador
5.1 Introduo
Retomando nossa trajetria de leitura, ns j descobrimos os
componentes bsicos de um computador, a sua linguagem de montagem e de
mquina e uma implementao em formato simples. A propsito, discutimos
trs possibilidades de implementao (mono-ciclo, multi-ciclo e pipeline).
Conclumos que a abordagem pipeline nos permite terminar um programa em
menos tempo e assim inferimos que a mesma a melhor.
A discusso sobre o desempenho apenas comeou. Vamos, neste
captulo, trabalhar com algumas mtricas de desempenho utilizadas para
afirmar que uma mquina melhor que outra. Um cuidado extremo preciso
para ter tal afirmao creditada alm do imaginrio promovido pela mdia. A
propsito, vender produtos significa torn-los necessrios aos olhos do
comprador, mesmo que seja por uma iluso de tica. A ressalva mesmo
feroz em nosso mundo competitivo. Um vendedor ilibado provavelmente teria
dificuldades de vender um produto sem fazer uso de apelos comerciais. No
nos cabe discutir a tica de comrcio, ento vamos parar com nossa analogia
por aqui, sem atingir um ponto de discrdia com profissionais do ramo.
Para comear a discusso, vamos primeiro tentar enxergar o tamanho do
problema que se nos apresenta. Imagine um sistema com diversos
processadores lentos sendo comparado com um sistema com um nico
processador rpido. O segundo provavelmente termina uma tarefa bem antes
que qualquer dos componentes do primeiro, mas este tem capacidade de
processar mais informao (em paralelo) por intervalo de tempo.
E ento, qual dos dois melhor? A resposta para esta pergunta
frustrante. Ela : depende!. Se muitas tarefas so usadas simultaneamente
provavelmente o primeiro sistema melhor, mas se poucas tarefas so usadas,
o segundo sistema pode ser melhor. Dizemos que o primeiro sistema tem
117
118
CPU
CPU
CPU
Sada
tempo
Figura 5.1: Tempo decorrido de uma tarefa
119
Tempo
Ciclo
Ciclos
Instrues
Instrues
Programa
120
Tempo
Ciclo
Ciclos
Instrues
Instrues
Programa
maqA
Tempo
Ciclo
Ciclos
Instrues
Instrues
Programa
maqB
121
desempenhomaqA
desempenhomaqB
Tempo CPUmaqB
Tempo CPUmaqA
122
Speedup =
1
(1 f) + f / k
1
= 1,3
(1 0,7) + 0,7 / 1,5
ou seja, a mquina passar a ser 1,3 vezes mais veloz. Se o disco fosse
alterado por outro com a mesma melhoria de desempenho, 1,5 vezes, o
desempenho final seria apenas:
Speedup =
1
= 1,1
(1 0,3) + 0,3 / 1,5
123
(CPIi x Ci)
i=1
onde CPIi o nmero de ciclos por segundo mdio para uma determinada
classe de instrues e Ci o nmero de instrues desta classe que
efetivamente executado. n o nmero de classes de instrues.
Por exemplo, no MIPS as instrues aritmticas so executadas em
mdia a 1 ciclo por instruo. Instrues de transferncia de dados entre a
memria e o processador executam a uma taxa de 2 ciclos por instruo.
Supondo que um determinado programa usa 60% de instrues aritmticas e
40% de instrues de carga, qual o nmero de ciclos de clock utilizados na
CPU para um programa com 200 instrues executadas?
Ciclos de Clock da CPU =1 x 0,6 x 200 + 2 x 0,4 x 200 = 280
portanto, o nmero de ciclos da CPU estimado em 280.
124
Ciclos de Clock
Freqncia
10 x 109
= 2,5s
4 x 109
8,8 x 109
=
= 2,2s
4 x 109
125
MIPS =
Instrues
Tempo de Execuo x 106
MIPSA
10 x 109
=
2,5 x 106
MIPSB =
8 x 109
2,2 x 106
A viso do software
A viso do software
126
5.4 Concluses
Aprendemos neste captulo como calcular o desempenho de uma
mquina em particular e vimos que o tempo de execuo a mtrica mais
acurada para apresentar vantagens de um computador sobre outro. Vimos que
nem sempre outras mtricas nos levam a resultados justos sobre o melhor
computador.
Aprendemos tambm que alterar uma parte do sistema pode nos levar a
melhorias pequenas de desempenho. Especificamente, aprendemos a lei de
Amdahl, que pode ser extrapolada, com restries, para qualquer assunto de
nossas vidas. O grande colorrio : faa o caso comum eficiente.
Naturalmente que o estado da arte exige um pouco mais. Os detalhes no
podem ser dispensados, mas sabemos que o esforo com eles no ir alterar
substancialmente o desempenho geral.
5.6 Exerccios
5.1
5.2
127
128
5.3
5.4
5.5
5.6
5.7
5.8
5.9
Captulo 6
Sistema de
Memrias
6.1 Introduo
A maioria das mquinas atuais utiliza a arquitetura de Von Neumann
como molde. Isto implica na adoo de um modelo fortemente baseado em
memria, onde dados e instrues so alocados em um repositrio nico. De
fato, a memria pode ser vista como um vetor onde cada posio (ndice)
contm uma instruo/dado, iniciando do endereo zero at o mximo valor de
endereamento do processador. Esta organizao de uma memria
puramente lgica do ponto de vista de sua materializao. Desde os anos 60 j
fora percebido que a materializao do conceito de memria, como descrita
acima, exigiria uma enorme quantidade de recursos. Memrias grandes e
rpidas, abstendo-se da discusso filosfica-temporal dos adjetivos, so caras
e ocupam muito espao fsico para sua implementao. Por isto, usamos hoje
um sistema de memrias formando uma hierarquia. Memrias mais rpidas,
antes denominadas escravas [6.1], agora integram praticamente qualquer
sistema de computao. Maurice Wilkes cunhou o termo em 1965, mas foi a
IBM que em 1968 introduziu no 360/85 uma memria cache, como so
conhecidas hoje as memrias escravas.
Se voltarmos nossa analogia inicial sobre o sistema de computao,
vamos perceber que temos dentro da cozinha uma pequena despensa onde
podemos guardar os ingredientes das nossas guloseimas. Certamente s faz
sentido guardar nela os ingredientes mais comumente utilizados. Quando
precisamos utilizar um ingrediente que no est em nossa prateleira, podemos
verificar se est disponvel no supermercado, mas isto requer mais tempo e
mais recursos, j que temos de sair da cozinha, ir at o supermercado,
encontrar a prateleira onde est o produto, peg-lo, pag-lo e traz-lo para
casa. S ento o ingrediente estar em nossa despensa pronto para ser
utilizado. Se o produto no estiver no supermercado preciso solicitar a um
129
130
distribuidor, que est ainda mais distante. Neste caso, preciso esperar ainda
mais e os custos envolvidos so ainda maiores. Ora, impensvel termos em
nossas casas um grande silo para depositar todos os ingredientes possveis.
Isto seria caro e ocuparia uma enorme rea. Tambm no supermercado,
impossvel armazenar todo e qualquer tipo de produto. A soluo uma
hierarquia! Agora podemos perceber que o sistema de memria exatamente
anlogo.
Formalizando os conceitos, uma hierarquia tpica de memria comea
com um mdulo rpido, pequeno e caro chamado cache, seguido por uma
memria mais lenta, maior e mais barata chamada memria principal. Estas
memrias so construdas de materiais semicondutores (tipicamente
transistores CMOS). As memrias em semicondutores so seguidas, dentro da
hierarquia, por memrias ainda maiores, mais lentas e baratas, que so
implementadas em material magntico (os discos rgidos Hard Disk, HD
so um exemplo deste tipo de memria). Este nvel da hierarquia chamado
de memria secundria ou de massa. Existe ainda um outro nvel classificado
como memria terciria, tambm em material ferromagntico, que so as fitas.
Estas so consideradas memria terciria.
O objetivo de criar uma hierarquia de memria criar uma iluso para o
programador de que ele pode acessar uma grande memria com uma enorme
velocidade. A caracterizao de uma hierarquia pode ser feita por inmeros
parmetros, dentre eles: capacidade, tempo de ciclo, latncia, penalidade por
falha/falta (miss penalty), largura de banda (bandwidth) e custo. A capacidade
de um mdulo de memria medida em bytes e seus mltiplos (Kilo, Mega,
Giga, Tera etc.). O tempo de ciclo o tempo decorrido desde o incio de uma
leitura at a memria estar pronta para uma nova leitura. A latncia o tempo
desde o incio de uma leitura at o dado estar disponvel para o usurio. A
penalidade por falha/falta o tempo, normalmente expresso em ciclos de
relgio, que leva para o dado/instruo que no est presente em um
determinado nvel da hierarquia ser recuperado do nvel inferior. A largura de
banda prov uma medida da quantidade de bits que podem ser acessados por
segundo. Finalmente, o custo o valor a ser pago por (giga) bytes de
memria. A ilustrao tpica de uma hierarquia pode ser vista na Figura 6.1.
Veja que o banco de registradores tambm pode ser considerado como parte
desta hierarquia. Os tempos de acesso so sazonais, ou seja, dependendo da
tecnologia eles podem ser outros, mas guardando uma certa proporo entre as
camadas.
131
$$$$$
Tempo de Acesso
1ns a 2ns
Registrador
3ns a 10ns
Cache
30ns a 90ns
L1
L2
Custo
Memria Principal
5ms a 20ms
Disco Rgido
10s a 3m
Fita Magntica
Capacidade
Figura 6.1: Tpica hierarquia de memrias
132
entregar o dado ao solicitante ela requer 15ns. Considerando que dois dados
so solicitados a esta memria, o primeiro no endereo 10 e o segundo no
endereo 25, qual o tempo desde o primeiro acesso para que o segundo dado
esteja disponvel? Bem, depois do primeiro acesso preciso percorrer 15
endereos at chegar ao endereo solicitado o que leva 1500ns e mais 15ns
para entregar o dado, totalizando 1515ns para o segundo dado ser entregue ao
solicitante. As memrias principais e cache (e tambm os registradores) so
memrias RAM, enquanto as fitas so memrias de acesso seqencial.
A diferena de velocidades encontrada entre as memrias cache e
principal fruto da tecnologia empregada em sua construo. Memrias cache
so implementadas com tecnologia SRAM (Static RAM) enquanto a
tecnologia DRAM (Dynamic RAM) usada para memrias principais.
Memrias DRAM precisam de um circuito especial para manter os dados
armazenados. Este circuito chamado de circuito de refrescamento. Ele fica
de tempos em tempos lendo os dados e re-gravando-os em suas posies
corretas. Isto torna a memria DRAM mais lenta, mas o custo do
armazenamento bem menor que o custo de uma memria SRAM.
Voltando agora ao tema da hierarquia de memria, a questo que deve
ser levada em considerao a seguinte: Quais os dados/instrues que devem
ser selecionados para os nveis mais altos da hierarquia? A resposta a esta
questo depende do comportamento dos acessos a dados e cdigos de um
programa. Tipicamente usamos dados e/ou instrues que se encontram juntos
ou prximos dentro da memria e tambm tendemos a usar dados e/ou
instrues que usamos recentemente. Esta observao define o princpio da
localidade de referncias, sobre o qual as hierarquias de memrias so
construdas com fins de otimizar o desempenho do sistema. Se a maior parte
dos dados/instrues esto presentes na poro de memria mais rpida ento,
o acesso aos dados/cdigos ser mais rpido e por isto selecionar bem estes
dados e instrues fundamental. Os nveis mais altos da hierarquia, a saber:
a memria principal e a cache (e, por conseguinte, o banco de registradores)
armazenam dados e instrues temporrias para uso o mais imediato possvel
pelo processador, ento, de fato, elas no armazenam dados perenes, mas
fazem cpias dos dados/instrues contidos no sistema de discos/fitas para
serem utilizados mais imediatamente.
Na prtica, os processadores tendem a acessar a memria de forma
muito repetitiva. Por exemplo: o valor do registrador PC sempre
incrementado de 4 unidades, assim a prxima instruo a ser executada
sempre a seguinte na memria. Isto implica que j sabemos qual o conjunto de
instrues vai ser utilizado dentro de um certo intervalo de tempo.
Naturalmente, instrues de desvio interferem nesta seqncia de execuo
133
134
135
Memria
Principal
Cache
Info1
Info2
Info3
Info4
Info5
Info6
Info7
Info8
Info9
Cache
Info2
Info9
Info5
Info4
Info2
Info5
Info4
(a)
(b)
Figura 6.2: Cache antes (a) e depois do acesso informao Info9 (b)
Cache
00
01
10
11
136
aaaa
bbbb
cccc
dddd
eeee
ffff
gggg
hhhh
iiii
jjjj
kkkk
llll
mmmm
nnnn
oooo
pppp
Cache
tag ndice
01
00
01
10
11
informao
eeee
137
ltimos bits do endereo (os bits mais direita) e a tag o restante dos bits do
endereo. Ora, no ndice 00 da cache no h informaes na cache, portanto
uma falha gerada e a informao buscada na memria principal. Neste caso
a informao do endereo 00002 aaaa. Junto com a informao tambm
armazenado o tag correspondente (neste caso os dois primeiros bits do
endereo, a saber: 00).
O prximo endereo a ser solicitado o 01002 (Figura 6.5 (c)). O
gerenciador da cache separa os campos do endereo (tag = 012 e ndice = 002).
Ele ento verifica que a posio da cache correspondente ao ndice 002 contm
uma informao. Ele checa, ento se os tags conferem (presente na cache, tag
= 002, solicitado pelo processador, tag = 012). Neste caso os tags diferem,
portanto a informao que est presente na cache no a mesma requerida
pelo processador. Uma nova falha anotada e o endereo correspondente
solicitado memria principal. A informao na cache , ento, atualizada
para o novo dado que veio da memria principal. Numa cache mapeada
diretamente cada dado tem um lugar especfico para alocar. Se houver outro
dado, este precisa ser removido. Assim respondemos a nossa terceira
pergunta.
O terceiro acesso ao endereo 11102 (Figura 6.5(d)). O gerenciador da
cache separa os campos do endereo (tag = 112 e ndice = 102). O ndice 102
na cache est vazio, portanto ele vai buscar a informao na memria
principal e armazena o dado e a tag na posio correspondente ao ndice 102.
O prximo acesso ao endereo 01002. O gerenciador da cache faz a
separao dos campos (tag = 012, ndice = 002). No ndice correspondente na
cache 002, existe uma informao. Os tags so ento comparados (tag na
cache = 012, tag solicitado = 012). Neste caso, os tags presente na cache e
solicitado so iguais, ento acontece um acerto na cache. O dado (eeee)
imediatamente repassado ao processador.
A Figura 6.5 (f) mostra o resultado final das operaes de leitura na
cache. Fica como exerccio o preenchimento da cache em cada tempo (acesso)
envolvido nesta seqncia de acessos.
(a)
Tempo
Leitura(L)
Escrita (E)
Endereo
(binrio)
1
2
3
4
5
6
7
8
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Cache (ndice)
Hit
Miss
00
01
10
11
tag/dado
tag/dado
tag/dado
tag/dado
138
Leitura(L)
Escrita (E)
Endereo
(binrio)
1
2
3
4
5
6
7
8
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Tempo
Leitura(L)
Escrita (E)
Endereo
(binrio)
1
2
3
4
5
6
7
8
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Tempo
Leitura(L)
Escrita (E)
Endereo
(binrio)
1
2
3
4
5
6
7
8
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Tempo
Leitura(L)
Escrita (E)
Endereo
(binrio)
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Tempo
(b)
(c)
(d)
(e)
1
2
3
4
5
6
7
8
Cache (ndice)
Hit
Miss
00
01
10
11
tag/dado
tag/dado
tag/dado
tag/dado
00/aaaa
Miss
00
01
10
11
tag/dado
tag/dado
tag/dado
X
X
tag/dado
00/aaaa
01/eeee
Miss
00
01
10
11
tag/dado
tag/dado
tag/dado
X
X
X
tag/dado
00/aaaa
01/eeee
01/eeee
Miss
00
01
10
11
tag/dado
tag/dado
tag/dado
X
X
X
tag/dado
00/aaaa
01/eeee
01/eeee
01/eeee
Cache (ndice)
Hit
Cache (ndice)
Hit
11/nnnn
Cache (ndice)
Hit
11/nnnn
11/nnnn
139
Tempo
(f)
1
2
3
4
5
6
7
8
Leitura(L)
Escrita (E)
Endereo
(binrio)
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Cache (ndice)
Hit
Miss
X
X
X
X
X
X
X
X
00
01
10
11
tag/dado
00/aaaa
01/eeee
01/eeee
01/eeee
01/eeee
01/eeee
01/eeee
01/eeee
tag/dado
tag/dado
tag/dado
11/nnnn
11/nnnn
11/nnnn
11/nnnn
11/nnnn
11/nnnn
00/dddd
00/dddd
00/dddd
00/dddd
140
Informao
requisitada
Endereo
Acerto (Hit)
31 30 ......................... 12 11...... 2
20 bits
1 0
10 bits
informao
tag
0
...
...
...
1022
1023
ndice
=
Figura 6.6: Memria cache para o MIPS
141
acerto na cache depende tambm do bit de validade estar setado (12). Assim,
quando uma cache est vazia e, por conseguinte, todos os bits de validade
ressetados (02), qualquer tentativa de transferncia de dados da memria
principal para cache ir resultar em uma falha. medida que os dados so
copiados da memria principal para a cache, o bit de validade vai sendo
setado, o que possibilita um acerto na cache.
Acerto (Hit)
31 30 ......................... 12 11...... 2
20 bits
Informao
requisitada
Endereo
1 0
10 bits
informao
tag
0
...
...
...
1022
1023
ndice
=
Figura 6.7: Memria cache para o MIPS com bit de validade
142
Tempo
0
1
2
3
4
5
6
7
8
Leitura (L)
Escrita (E)
Endereo
(binrio)
L
L
L
L
L
L
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Cache (ndice)
Hit
Miss
X
X
X
X
X
X
X
X
00
01
10
11
v/tag/dado
0/--/---1/00/aaaa
1/01/eeee
1/01/eeee
1/01/eeee
1/01/eeee
1/01/eeee
1/01/eeee
1/01/eeee
v/tag/dado
0/--/---0/--/---0/--/---0/--/---0/--/---0/--/---0/--/---0/--/---0/--/----
v/tag/dado
0/--/---0/--/---0/--/---1/11/nnnn
1/11/nnnn
1/11/nnnn
1/11/nnnn
1/11/nnnn
1/11/nnnn
v/tag/dado
0/--/---0/--/---0/--/---0/--/---0/--/---1/00/dddd
1/00/dddd
1/00/dddd
1/00/dddd
validade pode ajudar a resolver este problema. Ele seria ressetado sempre que
houvesse uma escrita na cache. Numa cache write-back, os dados seriam
escritos na memria principal apenas durante uma troca (substituio) de
dados em uma determinada posio. Um dado invlido precisaria ser escrito
na memria principal sempre que um novo dado fosse ocupar sua posio. Isto
acabaria com os acessos memria principal a cada acesso de escrita na
cache, por outro lado o mecanismo de acerto e erro precisaria ser re-projetado,
bem como o bit de validade sozinho no permitiria identificar se a posio da
cache est vazia, ou se foi vtima de uma escrita.
Felizmente, em aplicaes reais, o nmero de acessos memria, para
escrita de dados, muito inferior que o nmero de acessos para leitura de
dados, minimizando o impacto da adoo da poltica write-through, mais
simples, mas que pode apresentar piores resultados em termos de desempenho.
No caso de uma tentativa de escrita na cache onde o dado no est na
cache possvel escrev-lo somente na memria principal, poltica write noallocate, ou escrev-lo na memria principal e traz-lo para cache, poltica
write allocate. Caches write allocate so normalmente associadas com a
poltica write-back, enquanto write no-allocate normalmente associada com
a poltica write-through.
Vamos experimentar alterar o exemplo da Figura 6.8 usando agora uma
cache com polticas write no-allocate e write-through. A Figura 6.9 mostra as
alteraes propostas. No instante Tempo = 2 o processador solicita uma escrita
no endereo 00102 do dado zzzz. A cache informa uma falha. Como a poltica
write no-allocate, a informao imediatamente repassada para memria
principal. Nada registrado na cache, mas a memria principal passa a
aguardar o dado zzzz no endereo 00102. Perceba que no instante Tempo = 4
este dado copiado da memria para a cache. No instante Tempo = 6 o
processador escreve outro dado (yyyy) no mesmo endereo 00102. Neste
momento existe um dado na cache que vale zzzz ocupando o endereo
correspondente. H um acerto na cache e como a poltica de write-through o
novo dado escrito na cache e na memria principal ao mesmo tempo
mantendo a coerncia da cache.
Agora procure refazer este exemplo utilizando outras polticas, como
exerccio de fixao, e compare a quantidade de acertos e erros. Informe qual
seria a melhor cache para esta seqncia de acessos.
143
144
Tempo
0
1
2
3
4
5
6
7
8
Leitura (L)
Escrita (E)
[dado]
Endereo
(binrio)
L
E [zzzz]
L
L
L
E [yyyy]
L
L
0000
0100
1110
0100
0011
0100
1101
0011
Cache (ndice)
Hit
Miss
X
X
X
X
X
X
X
X
00
01
10
11
v/tag/dado
0/--/---1/00/aaaa
1/00/aaaa
1/00/aaaa
1/01/zzzz
1/01/ zzzz
1/01/ yyyy
1/01/ yyyy
1/01/ yyyy
v/tag/dado
0/--/---0/--/---0/--/---0/--/---0/--/---0/--/---0/--/---0/--/---0/--/----
v/tag/dado
0/--/---0/--/---0/--/---1/11/nnnn
1/11/nnnn
1/11/nnnn
1/11/nnnn
1/11/nnnn
1/11/nnnn
v/tag/dado
0/--/---0/--/---0/--/---0/--/---0/--/---1/00/dddd
1/00/dddd
1/00/dddd
1/00/dddd
145
64kbytes e temos 8 bytes por bloco, existem 64x1024/8 blocos, ou seja, 8192
blocos. Portanto so necessrios 13 bits para selecionar o bloco, pois
log2 8192 = 13. Estes bits sero ento de 3 a 15 no endereo. Tudo que resta
vai para a comparao dos tags. Os bits de 16 a 31 formam o campo da tag.
Endereo
Acerto (Hit)
18 bits
Informao
Solicitada
31 30 ..................14 13 ...........4...3. 2 1 0
tag
2 bits
informaes
10 bits
0
...
1
...
1022
...
...
...
...
1023
ndice
MUX
146
Endereo
Acerto (Hit)
...
1 0 1 1 11 0 0
25 bits
Informao
Solicitada
31 30 .......................... 7 6 5 4 3 2 1 0
tag
3 bits
2 bits
00
01
10
11
000
001
010
011
100
101
110
111
ndice
informaes
=
MUX
147
Informao
Solicitada
31 30 ..................14 13 ...........4...3. 2 1 0
2 bits
18 bits
tag
informaes
Way 1
10 bits
0
1
...
...
...
1022
...
...
...
...
...
...
...
...
1023
conjunto
MUX
MUX
codificador
2nn
Way 0
MUX
148
149
(a)
(b)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
tag
40000000h
40000004h
40000008h
4000000ch
...
40000020h
40000024h
40000028h
4000002ch
...
40000120h
40000124h
40000128h
4000012ch
...
40000420h
40000424h
40000428h
4000042ch
Way 0
informaes
0a00107a h
10202398 h
00000000 h
ffffffff h
....
78ffffff h
3affff80 h
8763482f h
12650298 h
....
6abcdef7 h
020013ee h
5465387e h
ffeabc96 h
....
98273457 h
3487671a h
46462ffe h
6453f0ff h
tag
Way 1
informaes
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
150
Uma regra prtica utilizada pelo sistema de memrias zerar o(s) bit(s)
de seleo de palavra e solicitar a memria principal, a partir deste endereo
modificado, tantas palavras quantas forem necessrias para preencher o bloco
da cache.
Finalmente temos de escolher em qual dos planos o bloco ser
armazenado. Neste instante a escolha indiferente, pois ambos os blocos que
compem o conjunto esto vazios. Vamos escolher ao acaso o plano 0. Os
dados dos endereos 40000028h e 4000002ch so copiados para cache. A
Figura 6.14 mostra como fica a cache depois de copiados os dados da
memria principal.
Observe que o tag armazenado pertence ao bloco inteiro.
v
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
tag
Way 0
informaes
palavra 0 palavra 1 conjunto v
400000 h
8763482f h
12650298 h
...
...
...
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
0
0
0
26
27
28
29
30
31
0
0
0
0
0
0
tag
...
Way 1
informaes
palavra 0 palavra 1
...
...
151
v
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
tag
400000 h
Way 0
informaes
palavra 0 palavra 1 conjunto v
0a00107a h
10202398 h
400000 h
8763482f h
12650298 h
...
...
...
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
0
0
0
26
27
28
29
30
31
0
0
0
0
0
0
tag
...
Way 1
informaes
palavra 0 palavra 1
...
...
152
v
1
1
0
0
0
1
0
0
0
0
0
tag
400000 h
400000 h
Way 0
informaes
palavra 0 palavra 1 conjunto v
0a00107a h
00000000 h
10202398 h
ffffffff h
400000 h
8763482f h
12650298 h
...
...
...
0
0
0
0
0
0
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
0
0
0
26
27
28
29
30
31
0
0
0
0
0
0
tag
...
Way 1
informaes
palavra 0 palavra 1
...
...
(a)
v
1
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
tag
400000 h
400000 h
informaes
palavra 0 palavra 1 conjunto v
0a00107a h
00000000 h
10202398 h
ffffffff h
400000 h
8763482f h
12650298 h
...
...
...
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
1
0
0
0
0
0
26
27
28
29
30
31
0
0
0
0
0
0
tag
400004 h
...
Way 1
informaes
palavra 0 palavra 1
8763482f h
12650298 h
...
(b)
Figura 6.16: Exemplo de acessos a uma cache set associative
...
153
v
1
1
0
0
0
1
0
0
0
0
0
tag
400000 h
400000 h
0a00107a h
00000000 h
10202398 h
ffffffff h
400001 h
5465387e h
ffeabc96 h
...
0
0
0
0
0
0
Way 0
informaes
palavra 0 palavra 1 conjunto v
...
...
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
1
0
0
0
0
0
26
27
28
29
30
31
0
0
0
0
0
0
tag
400004 h
...
Way 1
informaes
palavra 0 palavra 1
8763482f h
12650298 h
...
...
154
v
1
1
0
0
0
1
0
0
0
0
0
tag
400000 h
400000 h
0a00107a h
00000000 h
10202398 h
ffffffff h
400001 h
5465387e h
ffeabc96 h
...
0
0
0
0
0
0
Way 0
informaes
palavra 0 palavra 1 conjunto v
...
...
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
1
0
0
0
0
0
26
27
28
29
30
31
0
0
0
0
0
0
tag
400000 h
...
Way 1
informaes
palavra 0 palavra 1
8763482f h
12650298 h
...
...
155
156
157
1M
fffffh
Processo C
Processo C
Processo C
Espao
do usurio
Processo B
Processo B
Processo B
Processo A
Processo E
Processo E
Processo A
Processo A
Processo D
Processo D
Processo D
S.O.
S.O.
S.O.
S.O.
S.O.
S.O.
(a)
(b)
(c)
(d)
(e)
(f)
768K
Espao
do usurio
512K
256K
20000h
00000h
158
pgina virtual. Cada pgina virtual alocada em uma pgina fsica (frame) e
ela pode estar em qualquer lugar na memria principal. No modelo da figura,
por exemplo, usamos 8 bits para o deslocamento dentro de uma pgina,
portanto as pginas tm tamanhos de 28=256 bytes. Vemos tambm que o
endereo fsico tem apenas 20 bits, ou seja, a memria fsica disponvel para
uso de apenas 220=1Mbytes. Portanto na memria inteira temos 4096 frames
de 256 bytes cada.
Para encontrar um endereo fsico correspondente a um endereo virtual
uma tabela de pginas utilizada. Esta tabela indexada por uma parte do
endereo virtual que o Nmero da Pgina Virtual. Para cada nmero de
pgina virtual possvel uma entrada na tabela de pginas utilizada. No
exemplo da Figura 6.20, cada entrada guarda o incio do endereo fsico
correspondente (os 12bits mais significativos). Um endereo virtual
00000104h seria traduzido ento como 45a04h.
Os processos tm a iluso de dispor de 4Gbytes, mas de fato eles so
executados em apenas 1Mbyte de memria real. Hoje em dia usamos pginas
entre 4kbytes e 64kbytes. O tamanho da pgina um dos principais fatores
para definir o desempenho do sistema: pginas grandes requerem tempos
grandes para sua carga na memria principal, por outro lado, mais
informaes por pgina implicam em menos necessidades de acesso ao disco.
31 30 29 28 ................................................................9 8
Endereo Virtual
7 6..................................3 2 1 0
deslocamento na pgina
04h
Virtual
000001h
Endereos
Fsico
45a
...
19 18 17..............................9 8
Endereo Fsico
7 6..................................3 2 1 0
159
160
Endereo Virtual
8 7 6..................................3 2 1 0
deslocamento na pgina
10ac02
v
1
...
1
0
1
...
0
1
Endereo
Fsico
...
45a
...
19 18 17.............................9 8
Disco
7 6..................................3 2 1 0
Endereo no Disco
Endereo Fsico
161
Setor
Dados
Dados
512
SYN
1
SYN
1
#
Trilha
2
Cabealho (ID)
#
#
Cabea Setor
1
1
CRC
2
CRC
2
162
Cabea de leitura/escrita
eixo
163
Pits
lands
1,6m
164
165
Arqui
tetur
tador
es: a
softw
are,
a de
vis
dez.
Compu
o do
2005
Arqui
tetur
tador
es: a
softw
are,
dez.
2005
Arqui
tetur
a de
Compu
tador
es: a
softw
are,
a de
vis
vis
dez.
Compu
o do
o do
2005
166
167
d0
d1
d2
d3
168
mais capaz de se recuperar. O RAID nvel 6 usa mais um disco extra para
resolver falhas em mais de um bit, entretanto o preo por maior confiabilidade
pago com discos e mais discos de redundncia.
169
170
A viso do software
00000000h
PC 00400000h
10000000h
Reservada
Cdigo (text)
Dados Estticos
$gp 10008000h
Dados Dinmicos
(heap)
$sp 7ffffffch
Pilha (stack)
171
A viso do software
172
172
lw $s0, 28($sp)
lw $s1, 24($sp)
lw $s2, 20($sp)
lw $s3, 16($sp)
lw $s4, 12($sp)
lw $s5, 8($sp)
lw $s6, 4($sp)
lw $s7, 0($sp)
addi $sp, $sp, 32 #
jr $ra
# recupera $s0
# recupera $s1
# recupera $s2
# recupera $s3
# recupera $s4
# recupera $s5
# recupera $s6
# recupera $s7
ajusta a pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
menos 8 espaos
A viso do software
# recupera $ra
# recupera $s0
# recupera $s1
# recupera $s2
# recupera $s3
# recupera $s4
# recupera $s5
# recupera $s6
# recupera $s7
ajusta a pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
na pilha
menos 9 espaos
173
6.7 Concluses
Vimos que a hierarquia de memrias nos possibilita um bom
desempenho para sistemas com muita localidade temporal e espacial. Hoje
ainda no esto disponveis sistemas com arquiteturas reconfigurveis o
suficiente para adaptar-se s idiossincrasias dos softwares sendo executados.
Para um programador, resta a grande lio: j que ns no podemos interferir
no hardware que executa nossos programas, devemos prov-los da maior
quantidade possvel de localidade.
A questo pode ser de engenharia reversa: se as caches e mesmo as
memrias principais usam localidade para melhorar o desempenho, um bom
programador vai tambm promover um alto nvel de localidade a fim de que
seu produto seja executado da forma mais rpida e eficaz possvel.
E agora, nos resta pensar como melhorar a localidade. No existem
receitas prontas, mas a prtica nos leva a considerar codificar usando
pequenos laos que sejam muito utilizados; usar o menor nmero possvel de
variveis; fazer mais leituras que escritas de dados; e tentar minimizar
estruturas de deciso e/ou agrup-las ao mximo. Sempre tentar usar variveis
na mesma seqncia em que elas so alocadas (normalmente na ordem em que
foram declaradas, para a maioria das linguagens). Criar objetos e/ou
procedimentos e funes pequenos.
Codificar laos pequenos implica em trazer para cache de instrues
praticamente o lao inteiro. Se o lao for mesmo pequeno pode ser que apenas
um acesso memria principal seja capaz de aloc-lo completamente na
cache. Dispensar laos que sejam executados pouco, ou seja, que tenham
parmetros prximos, como:
for (i=0; i<2; i++){ //.
Um lao deste tipo ser executado apenas trs vezes e embora o cdigo de alto
nvel fique bastante elegante, nem sempre o compilador capaz de
174
6.9 Exerccios
6.1
6.2
6.3
6.4
6.5
175
176
177
178
Captulo 7
Entrada e Sada
7.1 Introduo
Agora j conhecemos trs componentes bsicos de um computador: a
unidade de controle; a via de dados; e o sistema de memrias. Conhecemos os
principais aspectos das linguagens de programao de baixo nvel, seja
linguagem de montagem, seja linguagem de mquina e agora vamos terminar
nossa explorao pelo sistema de entrada e sada (E/S ou I/O, Input/Output).
Um computador teria uma utilizao mnima se no houvesse meios de
aliment-lo com dados e extrair informaes do mesmo. A entrada e sada de
dados que permite a ns, seres humanos, interagir com a mquina. O
processamento dos dados, como visto na Figura 5.1, depende de muitos
fatores, inclusive da eficincia do sistema de entrada e sada.
Mesmo que tenhamos um sistema de memrias muito eficaz, uma CPU
muito rpida e um sistema operacional que consumisse um mnimo de tempo,
de nada adiantaria se a entrada de dados, via teclado, por exemplo, fosse muito
lenta. Assim tambm, se ao digitarmos um caractere no teclado este levasse
minutos at ecoar no monitor de vdeo, por ineficincia do sistema de sada de
dados, a experincia homem-mquina seria frustrante. Portanto, neste captulo,
tambm lidamos com um fator essencial ao processamento de informaes.
Antes de abordarmos o sistema de entrada e sada propriamente dito,
vamos conhecer um elemento significativo no trnsito dos dados: o
barramento. Um barramento um conjunto de fios, dispostos logicamente
lado a lado, com caractersticas eltricas prprias, que transfere uma
informao de um ponto a outro de um sistema computacional. Um
barramento pode ter uma funo especfica dentro de um computador, por
exemplo, um barramento de endereos leva apenas endereos de um ponto a
outro do sistema. Um barramento de dados, porta apenas dados. Um
barramento de controle carrega sinais de controle.
179
180
RECEITAS
BARRAMENTO DE
ENDEREOS
MEMRIA
S
RE E T O
CEI R
TA
S
0
16
32
20
36
24
40
12
28
44
48
64
80
52
68
84
CONTROLE
S
TE E T O
MPE R
RO
S
VIA DE DADOS
1
2
3
4
PROCESSADOR
BARRAMENTO DE
DADOS
ENTRADA
56
72
88
60
76
92
SE
BO T O R
LO
S
SE
CA TO R
RNE
S
SADA
96
112
128
100
116
132
104
120
136
108
124
140
181
Processador
Memria
Dispositivo de
E/S (teclado)
Status
Porto # 8
Dispositivo de
E/S (impressora)
Status
Porto # 9
Dispositivo de
E/S (monitor)
Status
Porto # 10
BARRAMENTO DE ENDEREOS
BARRAMENTO DE DADOS
BARRAMENTO DE CONTROLE
182
Memria
fffffffch
fffffffch
ffffffc0h
(a)
Entrada e
Sada
(b)
00000040h
63
00000000h
Entrada e
Sada
00000000h
palavras, nas frmulas ou mesmo no design do texto, figura ou o que quer que
seja. Em outros instantes digitamos uma seqncia de caracteres de forma bem
rpida (uma rajada). Nos intervalos entre rajadas o processador ficaria
perguntando ao teclado se existe um novo dado e este responderia sempre que
no.
Na segunda hiptese de transferncia de dados, o processador no se
preocupa em perguntar aos dispositivos se existem novos dados, mas o prprio
dispositivo pede ao processador sua ateno usando um pedido de interrupo.
Neste caso o processador deve parar a execuo do processo corrente e
atender ao dispositivo que o chama.
Finalmente o processo de DMA desafoga o processador do controle de
entrada e sada dos dados entre a memria e o dispositivo perifrico.No DMA
o processador usa um dispositivo externo, chamado controlador de DMA,
para programar as transferncias de dados. Tipicamente, o processador
informa os endereos da memria e do dispositivo de E/S envolvidos na
transao e a quantidade de dados a ser transferida. Depois ele libera os
barramentos para uso e controle do controlador de DMA. O processo de
transferncia de dados diretamente para memria implica no acesso aos
barramentos do sistema (barramento de endereos, dados e controle que
interliga o sistema de memrias, o processador e os dispositivos de E/S).
preciso um rbitro para os barramentos a fim de garantir que cada mdulo os
utiliza no momento adequado. Aqui, neste exemplo didtico, o papel do
rbitro desempenhado pelo processador.
O fato de interligar o sistema de memria e os dispositivos de entrada e
sada no mesmo conjunto de barramentos tem uma implicao imediata: por
natureza os dispositivos de E/S so assncronos, ou seja, no se pode prever
uma certa quantidade de ciclos de clock para a resposta de tais dispositivos.
Por outro lado, num sistema de memria, poderamos indicar um
funcionamento sncrono com o processador, definido pela velocidade das
memrias e do prprio processador. Ento, uma possibilidade de operao
conjunta, embora exeqvel, pode no ser a melhor opo. Costumeiramente
usamos barramentos sncronos separados para o acesso memria e
barramentos assncronos dedicados aos dispositivos de entrada e sada.
Esta forma de separar os barramentos acaba promovendo uma
hierarquizao dos mesmos. Um conjunto de barramentos muito rpido
poderia interligar o processador cache, que por sua vez utilizaria um outro
conjunto de barramentos para se comunicar com a memria principal e
finalmente, a partir destes ltimos barramentos, poderia haver uma interface
para um conjunto de barramentos de expanso onde so interligados os
dispositivos de entrada e sada. A Figura 7.4 mostra o esquema tradicional.
183
184
Processador
Memria
Cache
BARRAMENTOS LOCAIS
Memria
Principal
BARRAMENTOS DE SISTEMA
Ponte
Interface
Serial
Rede
SCSI
Modem
BARRAMENTOS DE EXPANSO
185
Pentium 4
BARRAMENTOS DO SISTEMA (800MHz, 604 GB/s)
Memria
Principal
(DIMM)
AGP
2.1GB/s
DDR 400
3.2GB/s
DDR 400
3.2GB/s
Ponte Norte
CSA
266MB/s
Sada Grfica
GigaBit
Ethernet
Discos
SERIAL ATA
500 MB/s
PARALLEL ATA
100 MB/s
Ponte Sul
USB
60 MB/s
20 MB/s
CD/DVD
TAPE
10/100 Mbit
Ethernet
PCI
132 MB/s
186
...
DISPOSITIVO EXTERNO 15
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
...
DISPOSITIVO EXTERNO 56
DISPOSITIVO EXTERNO 57
...
DISPOSITIVO EXTERNO 63
INTR
8259 MESTRE
INTR
...
...
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
INTR
INTR
187
Vetor de
Interrupes
80000180h
00000120h
00000110h
00000100h
Reservado ao
Usurio
Interrupo
nmero 1
00000100
00000110
00000120
fffff114
EPC
00000110
PC
rot_trat_int_0
rot_trat_int_1
rot_trat_int_2
Reservado ao
Sistema Operacional
00000000h
A viso do software
fffffffch
188
7.4 Concluses
Neste captulo aprendemos como as vias de comunicao de
processador interligam seus componentes e como o mundo exterior se
comunica com o computador.
Os barramentos do sistema so basicamente de dados, de endereos e de
controle. Os barramentos podem ser hierarquizados de acordo com sua largura
e freqncia de operaes.
Os dispositivos de Entrada e Sada so mdulos que se comunicam com
os perifricos de um computador. Estes mdulos so acessados pelo
processador usando os barramentos de expanso e podem ser mapeados em
memria ou podem ter sua numerao independente.
O controle de Entrada e Sada de dados feito pelo processador de trs
formas distintas, programada, por interrupo e por DMA. As interrupes so
189
190
Servio
Imprime inteiro
Imprime string
Cdigo ($2)
1
4
L inteiro
L string
5
8
Fim da execuo
10
Argumentos
$4 = inteiro
$4 = endereo da
string
Resultados
$2 inteiro
$4 = endereo
$5 = tamanho
Vamos ento verificar como podemos criar um programa que leia dois
dados do usurio, realize a soma e escreva o resultado.
.data
.asciiz "soma = " # define uma string
.text
main:
7.6 Exerccios
7.1
191
192
Captulo 8
Concluses
8.1 Introduo
Chegamos ao fim deste livro com um conhecimento bsico da
organizao de um computador. O conjunto de assuntos estudado nos serve de
alicerce para implementaes reais. A indstria do hardware evolui
rapidamente em nossos tempos, aproveitando os conhecimentos adquiridos em
anos de experimentos. Entretanto, muitas so as tecnologias e nomes
atribudos a conceitos bsicos e avanados desta rea do conhecimento. A
questo do marketing leva as empresas a usarem uma nomenclatura particular
para suas novas implementaes, muitas vezes descobertas dentro de um
ambiente acadmico ou em cooperao com centros universitrios.
Um estudante que tenha usado este material deve estar apto a aprender
novas linguagens de mquina, usar montadores e compreender como ocorre o
processo de traduo de uma linguagem de alto nvel em cdigos binrios
inteligveis para a mquina. O sistema de memrias ocupa uma grande regio
do projeto de um processador e melhorias nele podem promover grandes
benefcios no desempenho real de uma mquina, por isto a hierarquia de
memrias bastante explorada no texto.
Estudamos neste texto uma linguagem de montagem (do MIPS) e sua
correspondente linguagem de mquina. Conhecemos os principais
componentes de uma organizao, baseada na escola de Von Neumman.
Vimos sua interligao com o uso de barramentos e conhecemos o canal de
comunicao da mquina com outras mquinas e tambm com os seres
humanos. Descobrimos ainda, como mensurar a eficincia de um computador.
A experincia a verdadeira escola do processo ensino-aprendizagem.
Sob este prisma, a leitura deste texto municia o aluno para o uso de diversos
simuladores o que permite uma abordagem mais prtica de um assunto to
complexo.
193
194
8.2 Realidades
Assim como no mundo do software existem muitos avanos constantes,
no mundo do hardware as tcnicas e tecnologias tambm so eclticas. Ns
estamos chegando ao fim de uma era de evolues de um modelo de
processador que centraliza e controla todas as operaes de um computador e
que tem as tecnologias de fabricao, com freqncias de operaes cada vez
maiores, como arma para melhoria de desempenho de um produto sobre outro.
Este processo, assim como o petrleo, tem um fim anunciado, com previses
ainda obscuras, mas o fato que a nova ordem o trabalho colaborativo,
explorando a possibilidade de paralelismo entre as tarefas.
Existem diversos modelos de paralelismo que podem ser explorados. O
primeiro deles o de uma mquina com superpipelines. A observao que
gerou este conceito que muitas das tarefas em um estgio de um pipeline
convencional pode ser quebrada em subtarefas o que nos permite aumentar a
freqncia de operao e produzir mais resultados por ciclos de clock. Outra
possibilidade o pipeline superescalar onde muitas unidades de execuo so
dispostas em paralelo e mesmo a busca e a decodificao so feitas em pares,
ou quadras. Para termos uma idia de como estas implementaes de nossos
dias podem interferir no desempenho de uma mquina vamos analisar a Figura
8.1 que mostra a execuo de seis instrues numa mquina pipeline
convencional e numa mquina com superpipeline. O clock o mesmo
utilizado na Figura 4.14, com um perodo de 6ns.
Neste exemplo a mquina com superpipeline quebra a tarefa realizada
em cada estgio em duas partes o que permite em um mesmo ciclo de clock
realizar duas operaes ao mesmo tempo. Esta vantagem permite que o
programa como um todo seja concludo mais rapidamente.
A Figura 8.2 mostra, com a mesma base de tempo da Figura 8.1, a
diferena de uma execuo do mesmo exemplo em uma mquina superescalar
de dois nveis, ou seja, que trata duas instrues por vez. A mquina
superescalar apresenta melhor desempenho entre as trs, produzindo mais
instrues por ciclo de clock. Infelizmente, mquinas superescalares convivem
com uma realidade menos animadoras: as dependncias de dados no
permitem que se explore ao mximo o paralelismo de instrues. A propsito,
toda dependncia de dados tenta ser tratada, pelo hardware, antes que as
instrues sejam enviadas para o ciclo de execuo. Este tratamento em
hardware bastante complexo, mas tem uma grande benesse: no preciso a
re-compilao ou re-escrita dos cdigos executveis.
Captulo 8: Concluses
195
E
D
F
D
F
D
F
D
F
Mquina
pipeline
D
F
D
F
D
F
W
M
D
F
Mquina
Superpipeline
W
M
E
W
M
clock
tempo
18ns
36ns
54ns
60ns
196
D
F
D
F
D
F
D
F
Mquina
pipeline
D
F
Mquina
Superescalar
clock
tempo
18ns
36ns
54ns
60ns
Captulo 8: Concluses
197
198
Apndice A
Caches Revisitadas
A.1 Introduo
J estudamos os principais conceitos envolvidos na idealizao das
memrias cache, entretanto, no cobrimos por completo o assunto. Para ajudar
num entendimento mais completo dispomos neste apndice de uma
abordagem mais avanada, principalmente sobre os aspectos de caches writeback e como se d a escrita de dados.
J sabemos que a escrita numa cache write-back pode trazer algumas
dificuldades de inconsistncia de dados com o nvel inferior da hierarquia de
memria (por simplificao adotamos a memria principal, MP). Para resolver
o problema de inconsistncia necessrio que sempre que formos substituir
uma linha da cache por outra vinda da memria principal gravemos antes os
dados da linha que ser retirada da cache na memria principal. Isto faz com
que qualquer falha de escrita na cache em uma linha vlida gere um conjunto
de escritas na memria principal.
Uma forma mais eficiente de solucionar o problema acrescentar ao
campo de tag mais um bit, chamado bit de sujeira, ou dirty bit. Este bit ser
sempre iniciado com 0, mas quando for realizada uma escrita na cache, pelo
processador, o valor do dirty bit deve ser posto em 1, significando que o
contedo da cache diferente do contedo da memria principal para aquele
bloco. Isto faz com que sempre que for necessrio substituir uma linha em que
este bit esteja em 0, no seja necessrio escrever a linha inteira na memria
principal. Por outro lado, se este bit estiver em 1, o contedo da linha inteira
precisa ser copiado na memria principal, antes de ser sobrescrito por outro
bloco. A Figura A.1 mostra o esquema de uma cache com o bit de sujeira (d)
anexado s tags.
199
200
Endereo
Acerto (Hit)
dv
Informao
Solicitada
31 30 ..................14 13 ...........4...3. 2 1 0
2 bits
18 bits
tag
informaes
Way 1
10 bits
0
1
...
...
...
...
...
1022
...
...
...
...
...
...
1023
conjunto
MUX
MUX
codificador
2nn
Way 0
MUX
WRITE BACK
1. Escreve bloco da
cache na MP
DIRTYBIT = 1
1. Entrega dado ao
Processador
HIT
1. Carrega novo
bloco da MP na
cache
2. Entrega dado ao
Processador
3. DirtyBit = 0
DIRTYBIT = 0
WRITE BACK
WRITE THROUGH
WRITE THROUGH
1. Transfere bloco da
MP para cache
WRITE
ALLOCATE
HIT
ESCRITA
MISS
LEITURA
ACESSO
MISS
1. Escreve dado na MP
NO WRITE
ALLOCATE
Apndice A
201