arquitetura e organização de computadores 2 -...
Post on 10-Feb-2019
232 Views
Preview:
TRANSCRIPT
19/05/2015
1
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.”
Burks, Goldstine & von Newmann (1946)
2
19/05/2015
2
Hierarquia da Memória
Registos
CPU
Cache
MemóriaPrincipal
(RAM)
MemóriaSecundária
(Disco)
Chip do processador
Capacidade
Rapidez de acesso
Custo
3
Hierarquia da Memória
Cache
4
19/05/2015
3
Memó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
6
19/05/2015
4
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?
Tacesso = 0.9 1ns + 0.1 (10ns + 1ns + 1ns)
= 0.9 + 1.2 = 2.1ns
8
19/05/2015
5
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
01234
Tag Bloco de dados
Linhas
Bit de validade
... . . .
10
19/05/2015
6
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
012345...
Índice de palavraÍndice de linhaEtiqueta
Indexa as palavras dentro do bloco
12
19/05/2015
7
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 822
2
128
1 3
7
10
Bytes
KByteNl inhas
Etiqueta Linha
6 bits 3 bits 7 bits
Palavra
14
19/05/2015
8
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 01 0 0 0 0 0 0 0 0 0
Etiqueta Linha Palavra
0 0 0 0 0 01 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
Etiqueta Índ. palavra
16
19/05/2015
9
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á
ocupar uma das n entradas dessa linha
18
19/05/2015
10
Cache Associativa
Uma cache associativa de 2 vias
Estruturação dos endereços
01234
. . .. . . . . .
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
20
19/05/2015
11
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 bit estiver a ‘1’, então esse
bloco é copiado para a memória principal
22
19/05/2015
12
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
... embora possam ser utilizadas outras combinações
24
19/05/2015
13
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”
Optimizações do compilador (software)
26
19/05/2015
14
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).
Tabela retirada do livro “Computer architecture: a quantitative approach”
28
19/05/2015
15
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
etc.
30
19/05/2015
16
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
CacheNível 1
Cache Nível 2
Memória principal
RAM
CPU
31
Exemplo – Intel Core 2 Duo E6600
Caches nível 1
Cache nível 2
32
19/05/2015
17
Exemplo – AMD Quad Core Opteron
Caches nível 1
Caches nível 2
Caches nível 3
33
Hierarquia da Memória
Memória Virtual
34
19/05/2015
18
Memó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 232 posições de memória
ou seja, 4 Giga posições de memória (para cada programa)
36
19/05/2015
19
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
DiscoMMU
CPU
Memória
RAM
Bus de endereços (reais)
38
19/05/2015
20
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
molduras
Disco
40
19/05/2015
21
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
Bit de presença Bits de protecção
42
19/05/2015
22
Paginação
Exemplo
0010 0110 1010 0001 0x26A1 (9889)
110 0110 1010 0001 0x66A1 (26273)
10000
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
43
Paginaçã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
Carrega-se a página em falta (do disco para a RAM)
44
19/05/2015
23
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
46
19/05/2015
24
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 bits
47
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
xxx xxx
1
1
0
1
0
0
Etiquetas(Nos de página)
Blocos de dados(Descritores)
Bit de validade
48
top related