Skip to content

Latest commit

 

History

History
245 lines (174 loc) · 11.9 KB

Prova 2 06b083b632fd4224b6514e6835176978.md

File metadata and controls

245 lines (174 loc) · 11.9 KB

Prova 2

NO SITE ESTÁ MELHOR PARA ENTENDER: https://wooded-kumquat-39c.notion.site/Prova-2-06b083b632fd4224b6514e6835176978?pvs=4

Hierarquia de Memória

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

Visão geral da memória cache:

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)

Otimização e desempenho de memória

### 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

Memória virtual

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).

Paginação

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

Confiabilidade em hierarquia de memória

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

Conceitos e dicas importantes

  • 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?