Please enable JavaScript.
Coggle requires JavaScript to display documents.
Arquitetura de Computadores: Meltdown (Arquitetura de computadores (2.1…
Arquitetura de Computadores: Meltdown
Introdução
O ano de 2018 começou bem intenso no mercado de tecnologia, especialmente para os players da indústria de processadores
Foram descobertos e reportados falhas (consideradas gravíssimas) em microprocessadores que permitem vazar informações sensíveis do kernel e de outros processos do sistema (sem as devidas permissões)
Arquitetura de computadores
Na década de 50, John von Neumann propôs um modelo de arquitetura que determinava que tanto o programa quanto seus dados deveriam ser armazenados no mesmo local de memória
A capacidade de trabalho do processador era muito maior que a da memória. Assim, em diversos momentos, o processador ficava ocioso esperando a execução de operações de troca de dados
ILP (Instruction Level Paralelism): grau com que as instruções de um programa podem ser avaliadas/executadas em paralelo.
2.1 Execução Fora de Ordem
capacidade do processador de reordenar as instruções de forma a executá-las gastando o menor número de ciclos possível.
característica de processadores superescalares (que possuem mais de um pipeline de execução) que conseguem, em uma análise, identificar e aproveitar oportunidade de paralelismo como essa
pipeline é uma técnica de hardware que permite que o processador realize a busca de uma ou mais instruções além da próxima a ser executada
contudo, nem sempre é possível reordenar as instruções
carne = sal
churrasqueira, copo = carne, refrigerante
prato = arroz
eu não posso colocar a carne na churrasqueira ao mesmo tempo em que coloco o sal na carne, mesmo tendo a capacidade de fazer duas operações ao mesmo tempo
a ordem dessas instruções nos faria ter que esperar o "sal ir na carne", para assim poder executar a "carne na churrasqueira": dependência de dados
para resolver o problema, o processador troca a ordem "carne na churrasqueira" com o "refrigerante no copo"
carne, copo = sal, refrigerante
churrasqueira, prato = carne, arroz
2.2 Execução Especulativa
execução adiantada de operações que podem ser necessárias adiante
x=0
if x==1:
y=90
else:
y=0
para saber qual caminho tomar, o processador precisa primeiro avaliar um conjunto de operações booleanas.
processador não pode perder tempo
ele "chuta!"; entra no if
se tiver acertado, ele terá adiantado a atribuição y=90 e ganhado tempo com isso
senão, o processador desfaz essas instruções adiantadas e retorna para o ponto de continuidade (y=0
2.3 Memória Cache
entre CPU e memória principal
trazer os dados para próximo do processador antes que ele peça: princípio da localidade
Meltdown
todos os conceitos ajudam a entender a falha crítica Meltdown descoberta esse ano
char
memoriaTemp = malloc(256
4096);
limpaMemoriaCache();
unsigned int
enderecoKernel = 0xffdfec42; //endereco de kernel fictício
unsigned int geraErro =
enderecoKernel; // atribuição/acesso indevido
unsigned int varAcesso =
(memoriaTemp + 4096
geraErro);
linha 4: tenta ler o conteúdo de um endereço do Kernel (acesso indevido)
o programa não conseguirá ler essa linha, porém a execução especulativa faz com que as linhas 4 e 5 sejam executadas ao mesmo tempo
somente após a execução do acesso indevido é que a execução especulativa da linha 5 será descartada
o pulo do gato do Meltdown é que, durante a especulação, a execução da linha 5 trouxe o conteúdo de um endereço válido para a cache (originário de memoriaTemp, pois a violação em geraErro ainda não havia sido avaliada
para o programa descobrir o valor que foi carregado para a cache, bata testar todas as possibilidades de valores, medindo o tempo de acesso em cada um desses endereços de memoriaTemp
como toda a cache foi limpa (linha 2), o tempo de acesso a algum desses valores será, aproximadamente, 10x menor que os outros
dessa forma, obtém-se o valor contido no endereço do Kernel alvejado
Em outubro, a Intel lançou sua 9ª geração de processadores com correções em nível de hardware contra o Meltdown