NO SITE ESTÁ MELHOR PARA ENTENDER: https://wooded-kumquat-39c.notion.site/Prova-2-06b083b632fd4224b6514e6835176978?pvs=4
Visão geral da hierarquia de memória:
Como seria uma memória ideal?
- Baixo custo
- Tempo de acesso baixo (rápida)
- Alta capacidade de armazenamento
Todos os projetos de memória que existem hoje em dia ‘falham’ em pelo menos uma dessas características, sendo necessário saber quando e como utilizar cada uma dessas vantagens de cada tipo de memória.
Princípio da localidade:
Os programas acessam apenas uma pequena parte do seu espaço de endereçamento em um período de tempo.
- Localidade temporal → Itens acessados recentemente provavelmente serão acessados novamente em breve → Exemplo: instruções em um corpo de loop e variáveis de indexação
- Localidade espacial → Itens próximos aos acessados recentemente provavelmente serão acessados em breve → Por exemplo num acesso sequencial às instruções ou dados em um array
Usando a vantagem do princípio da localidade para criar uma hierarquia de memória:
Armazenamos tudo em disco, mas podemos copiar dados acessados recentemente (e os próximos deles) para uma memória DRAM (memória principal) e da DRAM para uma memória menor e mais rápida SRAM (memória cache)
RAM dinâmica vs estática
- DRAM (Dynamic Random Access Memory) → Grande capacidade de integração (baixo custo por bit) → Perde informação depois de um tempo e necessita de refreshing
Tecnologia DRAM: → Dado armazenado como carga em um capacitor → Único transistor para acessar a carga → Precisa ser reescrita periodicamente
Organização DRAM avançada: → Bits são organizados como um array retangular → DRAM acessa uma linha inteira → Burst mode: fornece palavras sucessivas de uma linha com latência reduzida → Double data rate (DDR) DRAM: transferência na descida e subida do clock → Quad data rate (QDR) DRAM: entradas e saídas da DDR separadas
DRAM performance factors: → Row Buffer: permite várias palavras serem lidas e refresh em paralelo → Synchronous DRAM: permite acessos consecutivos em burst sem necessidade de enviar endereços e melhora taxa de transferência
- SRAM (Static Random Access Memory) → Pequeno tempo de acesso (rápida) → Não necessita de refreshing → Baixa capacidade de integração (alto custo por bit) → DRAM banking: permite acesso simultâneo a múltiplas DRAMs
Nível de memória mais próximo da CPU, pode ser acessada para escrita e leitura
- Cache de mapeamento direto → Localização determinada pelo endereço → Só uma possibilidade → (block address) mod (#blocks in cache) → #blocks é uma potência de 2 → O endereço do bloco vai ser os bits menos significativos do endereço
- Tags Bits mais significativos do endereço para identificar o endereço que deve ser localizado
- Bits de validade (0 ou 1) Os dados que estão copiados na memória cache nem sempre são válidos. Por exemplo, em um troca de contexto de um processo, os bits de validade são zerados para que o processador saiba que os dados que estão ali não são válidos para essas novas instruções pois eram de uma tarefa anterior.
- Miss Quando o dado está ausente da memória cache, terá que ser copiado da memória de nível inferior para ser acessado. Esse tempo de cópia e acesso é chamado de miss penalty. Miss ratio = número de misses / número de acessos ou 1 - Hit Ratio
- Hit Quando o dado está presente na memória cache (nível superior) e pode ser acessado. Hit ratio: número de hits / número de acessos.
- Considerações sobre o tamanho do bloco de endereços que será copiado para a memória cache: → Blocos maiores reduzem a taxa de falta (miss ratio) devido a localidade espacial → Mas em uma cache com tamanho fixo, blocos maiores provocam menor número de slots e aumenta a competição pelo espaço na cache, o que na verdade aumenta a taxa de falta
- Falta de cache: Em caso de cache miss, são inseridas bolhas no pipeline enquanto acontece a busca do bloco no próximo nível da hierarquia
- Tipos de acesso à cache: → Leitura: Mais frequentes e mais rápidas, também mais fáceis de implementar → Escrita: Mais lenta e complexas, pois a consistência e dados com a memória principal deve ser mantida. Se um bloco da cache foi alterado pela CPU, não pode ser descartado da cache sem garantir que foi copiado para memória principal.
- Políticas de escrita e consistência: → Caches do tipo Write Through: cache e memória são atualizados simultaneamente. Torna a escrita mais demorada, mas uma solução é o write buffer, que armazena o dado a ser escrito na memória enquanto a CPU continua a execução. Somente há espera quando o write buffer está cheio. → Caches do tipo Write Back: memória principal é atualizada quando bloco é substituído e usa dirty bit para marcar linhas alteradas na cache. Pode usar write buffer para reduzir a penalidade.
- Miss na escrita → Write Allocate: bloco é alocado em ma write miss, seguido da ação de escrita (usada em cache write back) → No-Write Allocate: escrita que não afeta a cache, é feita apenas na memória (usada em cache write-through)
### Memória cache
![Untitled](Prova%202%2006b083b632fd4224b6514e6835176978/Otimizac%CC%A7a%CC%83o%20e%20desempenho%20de%20memo%CC%81ria%20(1)%204e3b95341cef442abcc9e1fb883da56d/Untitled.png)
-
Otimização de cache
Faltas dependem dos padrões de acessos à memória → Comportamento do algoritmo → Otimizações do compilador para acesso à memória
Quanto maior o tamanho do array que o algoritmo usa, maior a penalidade causada por falta de cache. Exemplo: multiplicação de matriz
Solução do compilador: blocking Cache Blocking é uma técnica para reorganizar o acesso a dados para colocar subconjuntos (blocos) de dados na cache e operar neste bloco pra evitar ter que buscar dados repetidamente da memória principal
Nos primeiros computadores, quem fazia a cópia dos dados para a memória era o programador. Quando essas informações não estavam na memória principal e sim em algum dispositivo, era chamada de virtual ou secundária. Em geral a memória secundária não perde a informação.
A memória virtual usa a memória principal como um ‘cache’ para o disco. O gerenciamento é feito em conjunto pelo hardware e pelo sistema operacional.
Como a cópia pode ser feita da memória secundária pra memória principal? Enquanto essa cópia é feita, o SO garante que nenhum acesso indevido é feito a esses dados. Além disso, o processador não fica esperando essa cópia ser feita pra continuar (como acontece com níveis mais altos).
CPU e SO convertem endereços virtuais em endereços físicos:
→ O ‘bloco’ da memória virtual é chamado de página
→ Um ‘miss’ na memória virtual é chamado de falta de página
→ Páginas de tamanho fixo
Tradução do endereço virtual para o endereço físico: offset de página concatenado com o número de página
Mapeamento de páginas Falta de página é uma exceção, o SO vai tratar com uma rotina de exceção para copiar o endereço do disco para a memória principal.
MMU Faz a tradução do endereço virtual para o físico, testes de proteção, localização da falha e identificação da falha.
Penalidade na falta de página → A cópia leva milhões de ciclos de relógio → Manipulado pelo código do SO
Para minimizar a taxa de faltas de página → Posicionamento totalmente associativo → Algoritmos de substituição inteligentes Substituição e Escrita Para reduzi a taxa de faltas de página, usa a substituição menos usada recentemente (LRU): → Bit de referência (também conhecido como bit de uso) no PTE definido como 1 no acesso a página → Periodicamente limpo para 0 pelo SO → Uma página com bit de referência = 0 não foi usada recentemente Gravações em disco levam milhões de ciclos → Bloco copiado de uma só vez, não locais individuais → Escrever é impraticável → Usa write-back → Bit de modificação (dirty bit) no PTE definido quando a página é modificada
Paginação
- Localização da página → Associativa
- Política de escrita → Write-back
- Substituição → LRU
- Falta de páginas → Tratamento por software
- Problemas → Uso efetivo da última página (fragmentação da página) → Garantir proteção de tipos de acesso
Segmentação
O programador ou compilador divide o espaço de endereçamento em segmentos que podem ter tamanhos diferentes e podem mudar em tempo de execução. Exemplo: texto: segmento 1, constantes: segmento 2, pilha: segmento 3 etc. Definimos o tamanho máximo do segmento.
O endereço agora será do formato [num. segmento, deslocamento]. E na tabela de segmentos, além do início do segmento, temos o bit de validade (se esse endereço está na memória ou não), a proteção daqueles endereços e o tamanho do segmento. → O endereço físico vai ser o endereço inicial + deslocamento
Fragmentação
A memória fica fragmentada quando na substituição de segmentos, o segmento que é colocado não encaixa perfeitamente no que será sobrescrito. Sobram pequenos fragmentos (buracos) na memória que não podem ser utilizados depois pois não podem abrigar um segmento completo.
Segmentação Paginada
Para evitar que a memória fique fragmentada, surgiu a técnica de segmentação paginada, que divide o segmento em páginas. O endereço agora contém [num segmento, num pagina, deslocamento]
O endereço físico é calculado como num página + deslocamento
Falhas na segmentação paginada: → Falta de segmento → Falta de página → Falta de proteção → Falta limite
A confiabilidade de sistemas computacionais atuais inclui 6 atributos importantes:
- Disponibilidade: garantir que o sistema está pronto para operar corretamente
- Confiabilidade: continuidade da operação correta
- Segurança: ausência de consequências catastróficas para o usuário ou o ambiente
- Confidencialidade: ausência de acesso desautorizado a informação
- Integridade: ausência de alterações impróprias no estado do sistema
- Manutenibilidade: capacidade se se submeter a reparos e modificações
Todo sistema de armazenamento deve ser confiável, se espera que seja rápido e confiável. A não confiabilidade pode elevar o custo de operação pela não disponibilidade, tornando o sistema inviável.
MTTF - Mean Time to Failure
Medida de tempo médio entre falhas em um sistema ou componente.
AFR - Annualized failure rate
É a estimação da probabilidade que um sistema ou componente tem de falhar durante um ano de uso. É dada por 8766 / MTBF.
Como aumentar MTTF?
- Melhorar qualidade dos componentes ou subsistemas de forma que o sistema continue a operar mesmo em caso de falhas
- Técnicas: → Prevenção de falhas: impedir a ocorrência de falhas por construção → Tolerância de falhas: uso de redundância para permitir que o serviço especificado seja cumprido apesar das falhas → Previsão de falhas: prever a presença e criação de falhas, permitindo que o componente seja substituído antes de falhar
Detectando e corrigindo erros nos diferentes níveis na hierarquia de memória: The hamming SEC Code
- Distância de hamming: número de bits que são diferentes entre dois padrões de bits
- Distância mínima = 2, fornece uma detecção de erro em 1 bit
-
Como avaliar o desempenho de uma cache?
-
Como funciona a política write-back? Quais as vantagens e desvantagens?
-
Como funciona a política write-through? Quais as vantagens e desvantagens?
-
Como funciona a técnica de tabela hierarquizada? Quais as vantagens e desvantagens?
-
Como funcionam as TLBs e quais as vantagens e desvantagens de se ter TLBs no sistema?