You are on page 1of 49

Introduo

Introduo

Informtica
Informtica
Alexandre
Alexandre
Meslin
Meslin
(
(
meslin
meslin
@
@
nce
nce
.ufrj.
.ufrj.
br
br
)
)
Organizao da Memria
Organizao da Memria

Conceito de hierarquia de memria
Conceito de hierarquia de memria

Mem
Mem

ria principal e mem


ria principal e mem

rias secund
rias secund

rias
rias

Projeto lgico da memria principal
Projeto lgico da memria principal

Mem
Mem

rias
rias
cache
cache

Mem
Mem

ria virtual
ria virtual
Conceito de Hierarquia de
Conceito de Hierarquia de
Memria
Memria

Memria no computador
Memria no computador

Registradores
Registradores

Memria principal
Memria principal

Memria
Memria
cache
cache

Memria ROM
Memria ROM

Discos magnticos
Discos magnticos

Discos pticos
Discos pticos

Fitas magnticas
Fitas magnticas
Memria
Memria
Cache
Cache

Na aula anterior,
Na aula anterior,
foi visto
foi visto
:
:

Memria
Memria
cache com
cache com
mapeamento direto
mapeamento direto

Conflito
Conflito
de
de
endereos na
endereos na
cache
cache
Cache
Cache
com Conjunto
com Conjunto
Associativo
Associativo

Semelhante ao mapeamento direto
Semelhante ao mapeamento direto

Bits mais baixos utilizados para selecionar linhas
Bits mais baixos utilizados para selecionar linhas
com conjuntos de 2, 4, 8
com conjuntos de 2, 4, 8
ou mais
ou mais
blocos
blocos

Parte alta do endereo utilizada para garantir que
Parte alta do endereo utilizada para garantir que
realmente houve um acerto
realmente houve um acerto
Cache com
Cache com
Conjunto
Conjunto
Associativo
Associativo
Assumindo que Assumindo que: :
Memria Memria cache tem 2 cache tem 2
k k
linhas linhas
Bloco Bloco com 2 com 2
m m
bytes bytes
p bits de p bits de barramento barramento de de endereo endereo
2 2
a a
conjuntos associativos conjuntos associativos
Bits mais baixos utilizados para selecionar a linha da Bits mais baixos utilizados para selecionar a linha da cache cache
Bits mais altos usados para comparar o endereo da linha Bits mais altos usados para comparar o endereo da linha
p-k+a-m m k-a
p bits
tag
Endereo da
linha do cache
Endereo
do byte
Cache
Cache
Associativo
Associativo

Cache com
Cache com
n
n
conjuntos associativos
conjuntos associativos

Cada linha
Cada linha
de cache
de cache
pode ter
pode ter
n
n
blocos
blocos

n
n
pode
pode
ser
ser
pequeno
pequeno
(2, 4, 8)
(2, 4, 8)

Melhor desempenho
Melhor desempenho

Custo moderado
Custo moderado
Cache
Cache
Associativo
Associativo

Como
Como
cada linha possui
cada linha possui
o
o
mesmo endereo
mesmo endereo
bsico
bsico


Para
Para
selecionar
selecionar
a
a
linha
linha
,
,
basta calcular
basta calcular
o
o
seu
seu
endere
endere

o
o
, com no
, com no
exemplo
exemplo
de
de
mapeamento
mapeamento
direto
direto

Dentro
Dentro
de
de
uma linha
uma linha
,
,
v
v

rios blocos
rios blocos

Para
Para
selecionar
selecionar
o
o
bloco
bloco
,
,
deve
deve
se
se
eleita uma
eleita uma
pol
pol

tica
tica
de
de
substitui
substitui

o
o
Poltica
Poltica
de
de
Substituio
Substituio
de
de
Bloco
Bloco

FIFO (First
FIFO (First
-
-
in, First
in, First
-
-
out):
out):
primeiro
primeiro
a
a
chegar
chegar
,
,
primeiro
primeiro
a
a
sair
sair

Se
Se
houver blocos vazios
houver blocos vazios
,
,
qualquer
qualquer
um
um
pode
pode
ser
ser
escolhido
escolhido

Se
Se
todos estiverem ocupados
todos estiverem ocupados
, o
, o
mais antigo deve sair
mais antigo deve sair
Poltica
Poltica
de
de
Substituio
Substituio
de
de
Bloco
Bloco

LRU (least recently used):
LRU (least recently used):
menos recentemente
menos recentemente
utilizado
utilizado

Se
Se
houver blocos vazios
houver blocos vazios
,
,
qualquer
qualquer
um
um
pode
pode
ser
ser
escolhido
escolhido

Se
Se
todos estiverem ocupados
todos estiverem ocupados
, o
, o
bloco que est
bloco que est
a
a
mais
mais
tempo
tempo
sem
sem
ser
ser
utilizado ser substituido
utilizado ser substituido
Cache com
Cache com
Conjunto
Conjunto
Associativo
Associativo
dado dado tags tags dado dado tags tags
p p- -k k- -m m k k
m m
CPU CPU
Exemplo
Exemplo

Supondo memria
Supondo memria
cache com:
cache com:

256 bytes
256 bytes

32 bytes /
32 bytes /
bloco
bloco

8
8
linhas
linhas

Mapeamento direto
Mapeamento direto

Barramento
Barramento
de
de
endereos
endereos
de 32 bits
de 32 bits

Palavra
Palavra
de dados de 32 bits
de dados de 32 bits
Exemplo
Exemplo

Comportamento
Comportamento
de um
de um
programa
programa
:
:

Supor
Supor
um
um
programa que inicie
programa que inicie
no
no
endereo
endereo
0
0

Muito provavelmente
Muito provavelmente
a
a
seqncia
seqncia
de
de
endereos
endereos
de
de
instrues ser
instrues ser
0, 4, 8, 12, 16, 20,
0, 4, 8, 12, 16, 20,

Inicialmente
Inicialmente
a cache
a cache
est toda vazia
est toda vazia
(bit de
(bit de
validade
validade
em
em
zero)
zero)
Exemplo
Exemplo

Estado inicial da
Estado inicial da
cache
cache
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da
Estado da
cache
cache
depois
depois
do
do
acesso
acesso
0 (
0 (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 4 (acerto)
Estado da cache depois do acesso 4 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 8 (acerto)
Estado da cache depois do acesso 8 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 12 (acerto)
Estado da cache depois do acesso 12 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 16 (acerto)
Estado da cache depois do acesso 16 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 20 (acerto)
Estado da cache depois do acesso 20 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 24 (acerto)
Estado da cache depois do acesso 24 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 28 (acerto)
Estado da cache depois do acesso 28 (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
0
0
Inst 0
Inst 0

28
28
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 32 (
Estado da cache depois do acesso 32 (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
32
32
Inst 32
Inst 32

60
60
1
1
0
0
Inst 0
Inst 0

32
32
Validade
Validade
Endereo
Endereo
Dado
Dado
Exemplo
Exemplo

Estado da cache depois do acesso 36 (acerto).
Estado da cache depois do acesso 36 (acerto).
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
32
32
Inst 32
Inst 32

60
60
1
1
0
0
Inst 0
Inst 0

32
32
Validade
Validade
Endereo
Endereo
Dado
Dado
Outro Exemplo
Outro Exemplo

Este mesmo sistema, agora somando duas
Este mesmo sistema, agora somando duas
matrizes
matrizes

Cada matriz ocupa 256 bytes de memria
Cada matriz ocupa 256 bytes de memria

Matriz 8x8 inteiros de 4 bytes
Matriz 8x8 inteiros de 4 bytes

Observe que a distncia entre as matrizes pode
Observe que a distncia entre as matrizes pode
ser mltipla do tamanho do cache
ser mltipla do tamanho do cache

Alto risco de haver conflito
Alto risco de haver conflito
Trecho do Programa
Trecho do Programa
-
-
Exemplo
Exemplo
Para i
Para i

0 at
0 at

7 fa
7 fa

a
a
Para j
Para j

1 at
1 at

7 fa
7 fa

a
a
a(i,j)
a(i,j)

b(i,j)+c(i,j)
b(i,j)+c(i,j)
fim para
fim para
fim para
fim para

Este programa ir gerar (alm de outros) acessos
Este programa ir gerar (alm de outros) acessos
a endereos com 256 bytes de diferena para
a endereos com 256 bytes de diferena para
acessar as matrizes b e c
acessar as matrizes b e c
Estado da Cache
Estado da Cache

No incio
No incio
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
Validade
Validade
Endereo
Endereo
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado b(0, 0) (
Leitura do dado b(0, 0) (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End b(0,0)
End b(0,0)
b(0,0)
b(0,0)
Validade
Validade
Endereo
Endereo
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado c(0, 0) (
Leitura do dado c(0, 0) (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End c(0,0)
End c(0,0)
c(0,0)
c(0,0)
Validade
Validade
Endereo
Endereo
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado b(0, 1) (
Leitura do dado b(0, 1) (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End b(0,1)
End b(0,1)
b(0,1)
b(0,1)
Validade
Validade
Endereo
Endereo
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado c(0, 1) (
Leitura do dado c(0, 1) (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End c(0,1)
End c(0,1)
c(0,1)
c(0,1)
Validade
Validade
Endereo
Endereo
Dado
Dado
Cache com Conjunto
Cache com Conjunto
Associativo
Associativo

Mesmo sistema, mesmo programa, agora com
Mesmo sistema, mesmo programa, agora com
cache com conjunto associativo
cache com conjunto associativo

Supondo memria cache com:
Supondo memria cache com:

256 bytes
256 bytes

32 bytes / bloco
32 bytes / bloco

4 linhas
4 linhas

2 ou mais conjuntos associativos


2 ou mais conjuntos associativos

Barramento de endereos de 32 bits


Barramento de endereos de 32 bits

Palavra de dados de 32 bits


Palavra de dados de 32 bits
Estado da Cache
Estado da Cache

No incio
No incio
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado b(0,0) (
Leitura do dado b(0,0) (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado c(0,0) (
Leitura do dado c(0,0) (
falha
falha
)
)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End.
End.
c(0,0)
c(0,0)
c(0,0)
c(0,0)
c(0,7)
c(0,7)
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado b(0,1) (acerto)
Leitura do dado b(0,1) (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End.
End.
c(0,0)
c(0,0)
c(0,0)
c(0,0)
c(0,7)
c(0,7)
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado c(0,1) (acerto)
Leitura do dado c(0,1) (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End.
End.
c(0,0)
c(0,0)
c(0,0)
c(0,0)
c(0,7)
c(0,7)
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Mais tarde
Mais tarde
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
1
1
End.
End.
c(0,0)
c(0,0)
c(0,0)
c(0,0)
c(0,7)
c(0,7)
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado b(1,0) (acerto)
Leitura do dado b(1,0) (acerto)
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
End.
End.
B(1,0)
B(1,0)
b(1,0)
b(1,0)
b(1,7)
b(1,7)
1
1
End.
End.
c(0,0)
c(0,0)
c(0,0)
c(0,0)
c(0,7)
c(0,7)
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Estado da Cache
Estado da Cache

Leitura do dado c(1,0) (acerto).
Leitura do dado c(1,0) (acerto).
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
?
?
?
?
0
0
End.
End.
c(1,0)
c(1,0)
c(1,0)
c(1,0)
c(1,7)
c(1,7)
0
0
End.
End.
B(1,0)
B(1,0)
b(1,0)
b(1,0)
b(1,7)
b(1,7)
1
1
End.
End.
c(0,0)
c(0,0)
c(0,0)
c(0,0)
c(0,7)
c(0,7)
1
1
End.
End.
b(0,0)
b(0,0)
b(0,0)
b(0,0)
b(0,7)
b(0,7)
Val.
Val.
End.
End.
Dado
Dado
Val.
Val.
End.
End.
Dado
Dado
Cache Totalmente Associativo
Cache Totalmente Associativo

Pedido da CPU procurado em todo o cache
Pedido da CPU procurado em todo o cache

Se encontrar: acerto na cache (cache hit)


Se encontrar: acerto na cache (cache hit)

Caso contrrio: falha na cache (cache miss)


Caso contrrio: falha na cache (cache miss)

Todas as tags so comparadas ao mesmo tempo
Todas as tags so comparadas ao mesmo tempo

Qualquer endereo de memria pode estar
Qualquer endereo de memria pode estar
sendo representado em qualquer linha da cache
sendo representado em qualquer linha da cache

Evita substituio desnecessria
Evita substituio desnecessria
Cache Totalmente Associativo
Cache Totalmente Associativo

Poltica de substituio
Poltica de substituio

LRU
LRU

FIFO
FIFO

Necessita de muitos bits adicionais de estado (na
Necessita de muitos bits adicionais de estado (na
tag)
tag)

Custo de hardware muito alto
Custo de hardware muito alto

Muitos comparadores
Muitos comparadores

Tags muito grandes (muitos bits)


Tags muito grandes (muitos bits)
Cache Totalmente Associativo
Cache Totalmente Associativo
Dados Tags
Poltica de Escrita
Poltica de Escrita

Write
Write
Through
Through

Write Through
Write Through

Todo acesso de escrita com acerto feito


Todo acesso de escrita com acerto feito
simultaneamente na cache e na memria principal
simultaneamente na cache e na memria principal

Se houver um acesso de escrita com falha, somente a


Se houver um acesso de escrita com falha, somente a
memria principal ser modificada
memria principal ser modificada

Informao na memria principal est sempre


Informao na memria principal est sempre
atualizada
atualizada

Leitura pode ser feita em um nico ciclo


Leitura pode ser feita em um nico ciclo

Escrita demora o tempo de acesso memria principal


Escrita demora o tempo de acesso memria principal
Poltica de Escrita
Poltica de Escrita

Write
Write
Back
Back

Write Back
Write Back

Todo acesso de escrita com acerto feito somente na


Todo acesso de escrita com acerto feito somente na
cache
cache

O que ocorre em caso de falha depender da poltica


O que ocorre em caso de falha depender da poltica
de alocao (ver mais tarde)
de alocao (ver mais tarde)

Informao na memria principal pode estar


Informao na memria principal pode estar
desatualizada
desatualizada

Leitura e escrita podem ser feitas em um nico ciclo


Leitura e escrita podem ser feitas em um nico ciclo

Se o
Se o
bloco for substitudo e a sua informao estiver
bloco for substitudo e a sua informao estiver
sido modificada, esta dever ser enviada para a
sido modificada, esta dever ser enviada para a
memria principal
memria principal
Outros Campos da Tag
Outros Campos da Tag

Bit de dirty (sujo)
Bit de dirty (sujo)

Utilizado para controlar o estado da memria
Utilizado para controlar o estado da memria
principal
principal

Coerente
Coerente

mem
mem

ria atualizada
ria atualizada

Incoerente
Incoerente

mem
mem

ria desatualizada
ria desatualizada

Caso a memria esteja incoerente, este bit
Caso a memria esteja incoerente, este bit
indicar que o bloco na cache est sujo
indicar que o bloco na cache est sujo

Em caso de substituio deste bloco, os dados
Em caso de substituio deste bloco, os dados
devero ser escritos na memria
devero ser escritos na memria
Poltica de Alocao
Poltica de Alocao

O que acontece em caso de falha de escrita em
O que acontece em caso de falha de escrita em
um cache write back?
um cache write back?
1.
1.
A informao pode ser lida da memria principal para
A informao pode ser lida da memria principal para
a cache e ento modificada
a cache e ento modificada
2.
2.
A escrita pode ser feita diretamente na memria
A escrita pode ser feita diretamente na memria
principal
principal
Write Back x Write Through
Write Back x Write Through

Qual o melhor?
Qual o melhor?

Write back
Write back

Escritas mais rpidas


Escritas mais rpidas

Write through
Write through

Bom para multiprocessamento (memria sempre


Bom para multiprocessamento (memria sempre
coerente)
coerente)

Necessita de menos hardware


Necessita de menos hardware
Prxima Aula
Prxima Aula

Continuao da hierarquia de memria
Continuao da hierarquia de memria

You might also like