quarta-feira, 29 de agosto de 2007

Vamos a mais uma Poscomp =P

58. Qual o significado de coerência de memórias cache em sistemas multiprocessados?
a) Caches em processadores diferentes sempre contêm o mesmo dado válido para a mesma linha de
cache.
b) Caches em processadores diferentes nunca compartilham a mesma linha de cache.
c) Caches em processadores diferentes nunca interagem entre si.
d) Caches em processadores diferentes sempre lêem os mesmos dados ao mesmo tempo.
e) Caches em processadores diferentes podem possuir dados diferentes associados à mesma linha de
cache.

Essa pergunta se torna muito simples, a partir do momento que se conhece o conceito de coerência de memórias cache. Eu sempre tive a idéia de que é muito mais fácil aprender, quando consegue se fazer analogias, e vou tentar passar a idéia do que é a coerência de memórias cache usando esse método "revolucionário". Imagine você no seu trabalho, uma equipe de desenvolvimento, e vocês já tem uma versão do programa que está em andamento. No começo do dia cada programador baixa o código-fonte do programa e continua a sua tarefa de desenvolvimento, cria várias funções e o melhor modifica as funções antigas para obter melhor desempenho, no final do dia é preciso "juntar" tudo não é? acontece que se alguem mudou como uma função se comporta e um outro programador criou outra função que utilizava a função modificada (antes dela ser modificada é claro) cria uma inconsistencia nos dados dos programas não é? Bem pra evitar isso, existem softwares de controle de versão, softwares que comparam as diferenças entre textos (códigos) e muito mais. Percebe que mesmo assim existe uma necessidade de ter comunicação entre os programadores que "mexem" na mesma parte do programa para evitar essa inconsistencia nos dados?

O conceito de Coerência de memórias cache vem dessa idéia, pense um sistema com mais de um processador (multiprocessado) com cada processador utilizando uma memória cache, todas as caches acessando dados da memória principal ao mesmo tempo.... o que acontece quando acessam o mesmo dado na memória principal compartilhada? se os processadores mudarem os dados que estão na cache, haverá uma inconsistencia no mesmo dado da memória. Oo pra resolver isso é necessário que haja (por exemplo) algum tipo de comunicação entre as caches, que pode ser feita em Hardware ou em Software, mas isso deixamos para outro dia certo?

Vamos ao que interessa =P

Letra b) errada!!! se os processadores não pudessem utilizar a mesma linha de cache não seria necessário usar algoritmos para a coerencia da dados, e se realmente isso acontecesse, o tempo de latência iria aumentar, e os sistemas multiprocessados não funcionariam de forma desejável (com menos desempenho). Letra c) também é errada pelo mesmo motivo da letra b) ^^, Letra d) está errada pois, os processadores trabalham normalmente de forma assíncrona, fazendo operações de leitura e escrita de forma independente, se fosse limitado a ler os mesmos dados ao mesmo tempo o desempenho seria muito desperdiçado, o que nem vem muito ao caso, não é coerência de memórias e pronto!!! :-) a letra e) nos mostra o que é a INcoerência de dados. (risos). O que torna a letra a) a correta ;-) Se é possível manter o mesmo dado de forma válida para a mesma linha de cache, então há coerÊncia de memórias cache.

Bem entendendo isso, é um bom começo para entender os protocolos de coerência de memórias cache.

Refências:
http://pt.wikipedia.org/wiki/Protocolo_mesi
http://www.ic.unicamp.br/~rodolfo/Cursos/mo401/2s2005/Trabalho/047748-cache.pdf
en.wikipedia.org/wiki/Cache_coherency
http://www.ic.unicamp.br/~rodolfo/mo801/aulas/Coerencia%20de%20Cache.html