Arquitetura e Organização de
Computadores 2
Organização Hierárquica da Memória
Hierarquia da Memória
Uma afirmação antiga, mas perfeitamente atual…
“Ideally one would desire an indefinitely large memory
capacity such that any particular word would be immediately
available.
We are forced to recognize the possibility of constructing a
hierarchy of memories, each of which has greater capacity than
the preceding but is less quickly accessible.”
Hierarquia da Memória
Registos CPU Cache Memória Principal (RAM) Memória Secundária (Disco) Chip do processador Capacidade Rapidez de acesso Custo 3Hierarquia da Memória
CacheMemórias Cache
Introdução
A memória cache é uma memória com pouca capacidade, mas
rápida, tipicamente associada ao processador
Esta memória guarda blocos de dados ou instruções copiados
da memória principal (RAM)
Uma vez na cache, o acesso aos valores guardados passa a ser
muito mais rápido
As caches tiram partido do carácter local das referências
5
Memórias Cache
Carácter local das referências
Espacial
Se uma dada posição de memória foi acessada, é provável que posições de memória que lhe são vizinhas também venham a ser acessadas.
os dados de uma matriz
as instruções de um programa, etc
Temporal
Se uma dada posição de memória foi acessada, é provável que no futuro próximo seja acessada mais vezes.
as instruções dentro de um ciclo do programa uma variável utilizada muitas vezes, etc
Memórias Cache
Acesso à memória cache
Quando é efetuada um acesso à memória, o CPU faz
referência primeiramente à cache
Podem ocorrer duas situações:
cache hit– os dados pretendidos encontram-se na cache
caso ideal
a taxa de hits deve ser tão alta quanto o possível
cache miss– os dados não estão na cache
nesse caso terão que ser lidos da memória principal
substitui-se um bloco na cache pelo bloco copiado da memória principal onde estão os dados pretendidos
pode introduzir penalizações temporais adicionais
7
Memórias Cache
Exemplo:
Suponha que o acesso à RAM requer 10 ns, ao passo que à
cache requer apenas 1 ns.
A percentagem de hits na cache é 90%, mas quando acontece
um miss, o processador perde 1 ns adicional, para além dos
tempos referidos.
Qual será o tempo médio de acesso à memória?
T
acesso= 0.9
1ns + 0.1
(10ns + 1ns + 1ns)
= 0.9 + 1.2 = 2.1ns
Organização e tipos de cache
Tipos de mapeamentos de caches
Cache direta (direct-mapped cache)
Cache associativa
completamente associativa (fully associative) associativa de n-vias (n-way set-associative)
A organização interna varia conforme o tipo
9
Cache Direta
Estrutura de uma cache direta
0 1 2 3 4
Tag Bloco de dados
Linhas
Bit de validade
Cache Direta
Descrição
A cache encontra-se organizada segundo linhas
Em cada tem-se:
Bit de validade
Indica se o conteúdo dessa linha é válido ou não
Tag ou etiqueta
Identifica o bloco de memória de onde vieram os dados
Bloco
Conjunto de dados ou de instruções que foram copiados de posições consecutivas da memória
11
Cache Direta
Estruturação de um endereço para acesso à cache
0 1 2 3 4 5 ... Índice de palavra Índice de linha Etiqueta Indexa as palavras dentro do bloco
Cache Direta
Determinação de hit ou miss
Tags Dados Comparador hit / miss BUS Endereços BUS Dados Linha
Tag Tag em cache
13
Cache Direta
Exemplo
Quantas linhas terá uma cache direta com uma capacidade para 1 KByte
de dados organizados por blocos de 128 Bytes ?
Qual a estruturação dos endereços, admitindo um espaço de
endereçamento de 64K x 1 Bytes
128 Bytes por bloco 7 bits p/ indexar os blocos 8 linhas 3 bits p/ indexar as linhas
64K 16 bits de endereçamento etiquetas de 6 bits (16–3–7=6)
linhas 8 2 2 2 128 1 3 7 10 Bytes KByte Nlinhas Etiqueta Linha
6 bits 3 bits 7 bits Palavra
Cache Direta
Exemplo (cont.)
Para que linha será carregado o blocos composto pelos endereços 1024
a 1151 (0x0400 a 0x047F)?
A linha será a 0.
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
Etiqueta Linha Palavra
0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 ... 0x0400 0x047F ... 15
Cache Associativa
Completamente associativa
Numa cache completamente associativa, um bloco poderá ocupar
qualquer entrada na cache
Não ocupam posições “pré-determinadas” como nas caches diretas
Não existe o conceito de linha
Ou então pode considerar que existe um única linha, com capacidade para todos os blocos
Só são utilizadas as tags e o índice de palavra
Estruturação dos endereços
Cache Associativa
Completamente associativa (cont.)
Mais complexa do que uma cache direta:
Quando há um acesso, é necessário “procurar” o bloco em causa em todas as entradas da cache
Se o bloco não for encontrado em nenhuma das entradas, então ocorre um miss
Essa procura é feita em paralelo para todas as entradas da cache
mais hardware (muitos comparadores)
e apesar do paralelismo, são introduzidos atrasos
17
Cache Associativa
Associativa de n-vias
Este tipo de cache encontra-se a meio caminho entre uma
cache directa e uma cache completamente associativa
A ideia consiste em dividir a cache segundo linhas com lugar
para n blocos
Uma vez mapeado para uma dada linha, um bloco poderá
Cache Associativa
Uma cache associativa de 2 vias
Estruturação dos endereços 0 1 2 3 4 . . . . . . . . . Via 0 Via 1
Etiqueta
Índ. linha
Índ. palavra
19
Políticas de substituição de blocos
Quando ocorre um miss e a linha correspondente está
ocupada, qual o bloco que deverá ser substituído na cache ?
Principais estratégias:
Escolha aleatória
o bloco a substituir é escolhido de forma aleatória muito fácil de implementar
Algoritmo LRU (Least Recently Used)
o bloco a substituir é aquele que não é acedido à mais tempo, na esperança de já não voltar a ser necessário
obriga a utilizar um “selo temporal” associado a cada bloco em cache estratégia mais complexa e mais cara
Políticas de substituição de blocos
Alguma estatística
Dimensão da cache Aleatório LRU
16KB 5.69 % 5.18 %
64KB 2.01 % 1.88 %
256KB 1.17 % 1.15 %
% de cache misses durante a execução de um programa utilizando uma cache associativa de 2 vias com blocos de 16 bytes.
Tabela retirada do livro “Computer architecture: a quantitative approach” Observações:
O desempenho com LRU é melhor, principalmente em caches pequenas
À medida que a dimensão da cache cresce, o desempenho da escolha aleatória tende a igualar o algoritmo LRU – preferível utilizar escolha aleatória
21
Políticas de Escrita
O que acontece numa escrita ?
Estratégias mais comuns, em caso de hit numa escrita
Write through (ou store through)
Os dados são sempre escritos tanto na cache como na memória principal.
Write back (ou store in)
Os dados são apenas escritos na cache. Só serão copiados para a memória depois do bloco em cache ser substituído.
Utiliza-se um bit extra –dirty bit– em cada linha da cache, que indica se um dado bloco foi modificado desde que está em cache.
Quando um bloco é substituído, se o seu dirty bitestiver a ‘1’, então esse bloco é copiado para a memória principal
Políticas de Escrita
Write back
Geralmente mais eficiente, pois causa menos acessos para escrita na
memória principal
Write through
Mais simples de implementar
Todas as escritas obrigam a aceder à memória principal
Perde-se mais tempo…
A memória principal tem sempre os dados actualizados
Vantajoso em situações de partilha de memória com outros dispositivos (tanto periféricos como outros CPUs)
23
Políticas de Escrita
Estratégias em caso de cache miss
Write allocate (ou fetch on write)
O bloco é carregado na cache, antes de se escreverem os dados
No-write allocate (ou write around)
O bloco não é carregado em cache. Apenas se escreve na memória principal.
Normalmente utiliza-se
write back em conjunto com write allocate write through em conjunto no-write allocate
Redução de misses
Classificação de cache misses:
Cold-start - compulsória
O primeiro acesso a um bloco que não se encontra em cache
Acontece, por exemplo, no início da execução de um programa
Colisões
Vários blocos de um programa estão à partida destinados a utilizar a mesma linha da cache, o que pode obrigar a substituições.
Acontecem porque:
Os programas podem usar uma quantidade de memória superior à capacidade da cache
Os programas podem referenciar zonas de memória diferentes que são mapeadas para a mesma linha da cache
25
Redução de misses
Para reduzir a taxa de misses, a hipótese mais óbvia seria
aumentar a capacidade da cache
Mantendo a cache com a mesma capacidade, existem
estratégias para reduzir os misses
Aumentar a dimensão do bloco
Usar um maior grau de associatividade (mais vias)
Utilização de “caches vítimas”
Redução de misses
Aumento da dimensão do bloco
(mantendo a mesma capacidade da cache)
Tenta-se tirar mais partido da localização espacial das
referências
Por um lado diminuem os cold-start misses, mas...
... aumentam os misses devido a colisões ... ... e perde-se mais tempo em caso de miss
são necessários ler mais dados da memória principal devido ao bloco ser maior
Atenção que o desempenho pode na realidade piorar quando
se aumenta a dimensão do bloco!
27
Redução de misses
Maior grau de associatividade
Aumentando a associatividade reduzem-se os misses devido a
interferências. Os restantes mantém-se.
O preço a pagar é um maior tempo de acesso à própria cache, o que
poderá ter implicações negativas
Na prática, compensa aumentar a associatividade até certo ponto.
Dimensão da cache 2 vias 4 vias 8 vias 16 KB 5.18 % 4.67 % 4.39 %
64KB 1.88 % 1.54 % 1.39 %
256KB 1.15 % 1.13 % 1.12 %
% de cache misses durante a execução de um programa em função do grau de associatividade de uma cache (blocos de 16 bytes).
Redução de misses
Utilização de caches vítimas Uma cache vítima é basicamente uma cache de dimensões muito reduzidas (4 a 8
entradas)
Para ser muito rápida
A cache vítima contém blocos que foram substituídos na cache principal
Sempre que ocorre um miss na cache principal verifica-se se o bloco pretendido se encontra na “vítima”
No caso de lá se encontrar, trocam-se os blocos entre as duas caches
Esta técnica reduz de forma significativa os misses devido a interferências Não apresenta nenhuma desvantagem de maior, excepto o aumento do custo e
um ligeiro aumento da penalidade devido a um miss completo (miss na cache principal e na vítima)
29
Redução de misses
Técnicas de compilação
Quando os programas (linguagem de alto nível) são traduzidos para
código-máquina, o compilador poderá ter em conta a cache do processador
Sendo assim, poderá gerar código-máquina que execute a mesma função,
mas que tira partido das características da cache Manipular o modo de indexação das matrizes Trocas de índices em ciclos dentro de ciclos Fusões de ciclos
Níveis de Cache
Níveis de caches
Abordagem comum para redução do tempo médio de acesso à memória Quando ocorre um miss no 1º nível, verifica-se se o bloco pretendido se
encontra na cache de 2º nível (maior) e assim sucessivamente
Só se acede à memória principal se não for encontrado o bloco
pretendido em nenhum dos níveis
Cache Nível 1 Cache Nível 2 Memória principal RAM CPU 31
Exemplo – Intel Core 2 Duo E6600
Exemplo – AMD Quad Core Opteron
Caches nível 1 Caches nível 2 Caches nível 3 33Hierarquia da Memória
Memória VirtualMemória Virtual
Espaço de endereçamento virtual
Espaço de endereçamento que engloba a memória primária (RAM) e a
secundária (disco)
O objetivo é poder carregar múltiplos programas (e dados) sem estar limitado às dimensões físicas da memória RAM
Cada programa a ser executado pode ter partes
carregadas em RAM, em disco, ...
... ou em ambos os lados
Transferem-se instruções e dados entre a RAM e o disco (swapping)
conforme as necessidades
35
Memória Virtual
Espaço de endereçamento virtual
As formas mais comums para implementar memória virtual são
Paginação Segmentação
Misto (segmentação + paginação)
A dimensão do espaço virtual corresponde ao número total de
endereços que são indexáveis pelo processador Exemplo
um processador com endereços de 32 bits consegue gera um espaço de endereçamento virtual de 232posições de memória
Memória Virtual
Endereços reais
Correspondem aos endereços físicos envolvidos no acesso à memória
ou outros dispositivos (o que temos visto até agora)
Endereços virtuais
Endereços utilizados internamente pelo processador São convertidos em endereços reais
através de uma unidade localizada no CPU, designada MMU (Memory
Management Unit)
e recorrendo a estruturas de dados, mantidas em memória
37
Memória Virtual
MMU (Memory Management Unit)
Converte endereços virtuais em endereços reais
Sinaliza a CPU quando é feito um acesso a um endereço que fisicamente
não se encontra localizado na memória principal
Controlador de Disco MMU CPU Memória RAM
Paginação
Método mais comum para implementação de memória
virtual
O espaço de endereçamento virtual é divido em blocos de
dimensão fixa designados por páginas.
A dimensão de cada página é uma potência de 2
A memória principal é dividida em blocos com a mesma
dimensão de uma página – estes blocos designam-se por
molduras ou page frames
39
Paginação
1000 0000 2000 3000 4000 5000 6000 7000 8000 0000 1000 2000 3000 4000RAM
Espaço virtual páginas moldurasDisco
Paginação
Tabelas de páginas
(page tables)
Nº Moldura Deslocamento 0 Tabela de páginas Nº Página Deslocamento Descritor da página 0 Descritor da página 1 Descritor da página 2 Descritor da página 3 Descritor da página N-1 1 2 3 N-1 Endereço virtual Endereço real 41
Paginação
Principais campos num
descritor de página
Bit de presença– Indica se a página se encontra carregada na memória
principal (RAM) ou não
Moldura– Índice de moldura (page frame) – indica qual moldura onde se
encontra a página
Proteção– Bits de proteção da página (exemplo, read-only)
Controle– Bits auxiliares (por exemplo, para o funcionamento dos
algoritmos de substituição de páginas)
Índice da moldura
Descritor de página
Bits de controlo
Paginação
Exemplo
0010 0110 1010 0001 0x26A1 (9889) 110 0110 1010 0001 0x66A1 (26273) 1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 0 1 1 1 0 0 0 1 0 0 0 1 1 101 xxx 100 111 010 001 000 011 xxx xxx xxx xxx xxx xxx 110 xxx Tabela de páginas 43Paginação
Page fault
Quando é acedida uma página que não se encontra na memória
principal, ocorre uma page fault
Quando o CPU recebe o sinal de page fault
Efectuam-se as alterações necessárias na tabela de páginas, de modo a que esta fique consistente
Se todas as molduras já estiverem ocupadas é necessário escolher uma página a transferir para o disco, nesse caso corre-se o algoritmo de substituição
de páginas
Normalmente a cargo do sistema operativo
Paginação
Algoritmos de substituição de páginas
LRU (least recently used)
descarta a que não é acedida à mais tempo
NFU (not frequently used)
descarta a que foi acedida menos vezes
FIFO (first in, first out)
descarta a que já se encontra em RAM à mais tempo
Como são implementados pelo Sistema Operativo, terão mais
detalhes nessa disciplina)
45
Paginação
Tabelas multi-nível
Usadas para evitar ter que manter em RAM tabelas de páginas com
grandes dimensões
Existe uma tabela principal (1º nível) chamada directoria, relativamente pequena, e que é sempre mantida em RAM
A directoria indexa várias tabelas de páginas (2º nível) que podem estar ou não na RAM, consoante a necessidade
Vantagem
Só são mantidas na memória principal a directoria e as tabelas de páginas que estão a ser utilizadas
Desvantagem
Demora-se mais tempo a converter um endereço virtual em real, pois é necessário um acesso à directoria e depois um acesso à tabela de páginas resultante
Paginação
Nº de moldura TP_L1 TP_L2 Deslocamento Tabela de 1º nível (Directoria) 0 1 2 1023 0 1 2 1023 0 1 2 1023 Tabelas de 2º nível (Tabelas de páginas) 0 1 2 1023 Deslocamento Endereço virtual Endereço real 10 bits 10 bits 12 bits47
Paginação
TLB (Translation Lookaside Buffer)
Ao efetuar a conversão de um endereço virtual para endereço físico, é
necessário de consultar a(s) tabela(s) envolvidas
Como consequência, são feitos acessos à memória Para minimizar o número de acessos, existe a TLB
Uma “cache especial” para auxiliar a paginação
Tipicamente é uma cache completamente associativa, que guarda informação sobre os descritores de página
24 Descritor da página 24 56 Descritor da página 56 xxx xxx 3 Descritor da página 3 xxx xxx 1 1 0 1 0 Etiquetas (Nos de página) Blocos de dados (Descritores) Bit de validade
Bibliografia
49