Memórias
O Cache L2

O cachê secundário, que é do que estamos tratando aqui, nada mais é do que uma porção de memória RAM estática muito mais veloz que as RAM's dinâmicas que compõem a memória principal.

E porque então toda a memória não é feita desses chips?

Porque são muitíssimo mais caros, ocupam um grande espaço e porque uma pequena quantidade dessa memória interposta entre a CPU e memória principal já provoca uma extraordinária "aceleração" do sistema. Como essa aceleração é feita é o que veremos agora. O cachê consiste em dois conjuntos de chips de RAM estática (SRAM - Static RAM). O primeiro é aquele que todos conhecemos, são aqueles "quadrados" presentes nas placas mais modernas ou nos módulos de expansão de cachê, são os chips de armazenamento de dados. O segundo conjunto consiste , em geral, de chips em encapsulamento DIPP (Dual In-line Pin Package) chamados de TAG RAM. A função da TAG RAM é armazenar informações sobre os dados contidos nos chips de armazenamento.

O cachê armazena dados em linhas, e cada linha é composta por 16 bytes. O tipo mais simples de cachê é o chamado cachê direto. Nesse cachê a memória é dividida em blocos do mesmo tamanho que o próprio cachê, e cada bloco subdividido em linhas. Assim, numa máquina que tenha 16 MB de RAM e um cachê L2 de 512 kB, a memória principal seria dividida logicamente em 32 blocos de 512 kB cada. Suponhamos agora que seja solicitada a leitura da oitava linha do décimo bloco, não estando o dado no cachê, desta forma a busca será feita na memória principal e, enquanto os dados são transferidos para a CPU , o circuito controlador do cachê copia os 16 bytes da linha para os chips de armazenamento de cachê, exatamente na posição correspondente à ocupada pela linha no bloco de onde ela foi lida (ou seja: a cópia vai ocupar a oitava linha do cachê). E depois copia na oitava posição da TAG o número do bloco de onde a linha foi lida, no caso o número DEZ (como pode ver, a TAG cria um "índice", por assim dizer, dos dados contidos nos chips de armazenamento). Depois de algum tempo a TAG está repleta de índices e os chips de armazenamento cheio de linhas, cópias exatas das linhas correspondentes na memória principal. A diferença é que no cachê as linhas podem estar embaralhadas, ou seja, depois da décima linha do quinto bloco da memória principal, pode estar armazenada a décima-primeira linha do vigésimo bloco, e depois dela a décima-segunda linha do terceiro bloco e assim por diante. Não há confusão porque a qualquer momento pode-se saber de que bloco veio aquela linha consultando a TAG RAM, que armazena os índices dos blocos de onde cada linha foi copiada.

Agora imagine que o cachê está cheio de dados e a CPU solicita que o conteúdo de um determinado endereço de memória seja lido. Antes que o circuito de controle da memória RAM comece a procurar o dado (e paralelamente a isso), o controlador do cachê intercepta o endereço e verifica a que linha e de que bloco ele pertence. Em seguida, consulta a TAG e verifica se na posição correspondente à linha solicitada está armazenado o número do bloco no qual a CPU solicitou a leitura. Se os números coincidirem, acontece o chamado cachê hit. Significa que o cachê contém uma cópia exata da linha onde está o dado solicitado e este fornece, então, o referido dado imediatamente à CPU, numa mínima fração do tempo que seria gasto para lê-lo da memória RAM, e qualquer processo de procura que o controlador da RAM principal tenha iniciado é interrompido. Falando assim parece que um acerto no cachê depende de muita sorte. Mas as aparências enganam, isso porque quando se está trabalhando com determinado aplicativo as solicitações à RAM se repetem com muita freqüência e o controlador de cachê tem uma atitude proativa, lendo, da RAM principal, adiante dos endereços solicitados pela CPU. Em conseqüência disto o cachê vai se enchendo de cópias de dados contidos em endereços muito próximos. Resultado: A probabilidade estatisticamente comprovada de um cachê hit em um sistema com 512 kB de cachê e 16 MB de RAM é da ordem de 98% (e mesmo em sistemas com 64 MB de RAM esse índice é superior aos 90%, ainda que com "apenas" 512 kB de cachê secundário). Ou seja, de cada cem acessos, apenas dois corresponderão a dados que não estão no cachê e, portanto, devem ser lidos na lenta memória RAM. Nos 98 acessos restantes, haverá cópias dos dados no cachê, que serão fornecidas à CPU muito mais rapidamente. E como, no uso diário, a maior parte do tempo gasto por nossas máquinas é consumida em acessos à memória, seu desempenho melhora consideravelmente.

Até aqui tratamos dos efeitos do cachê sobre a leitura de dados, esclarecerei agora o funcionamento da escrita, fonte da maior parte da confusão feita por algumas pessoas.

Há dois tipos de cachê: o "write back" e o "write through", as placas-mãe modernas e de boa qualidade vêm com o cachê "write back" instalado. O "write through" é um cachê que funciona apenas nas operações de leitura, como descrevi acima, não interferindo nas operações de escrita. Quando se trata de escrever um dado na memória RAM, isto é feito do modo convencional, ou seja, envolvendo os eventuais estados de espera da RAM principal, mas copiando tb para o cachê (quer dizer: o dado além de ser escrito na RAM principal é escrito ao mesmo tempo no cachê também), uma vez que um dado escrito possui alta probabilidade de ser requisitado em seguida. Assim, no que TANGE À ESCRITA na memória, a única diferença entre máquinas que usam cachê write through e máquinas que não usam cachê algum é que nas primeiras, enquanto o dado é escrito na memória RAM, toda a "linha" onde ele foi gravado é copiada no cachê. Logo, se mais adiante for solicitada sua leitura, a cópia já estará no cachê e a leitura será mais rápida. O cachê do tipo "write back" acelera tanto o procedimento de leitura quanto o de escrita. Já que, quando a CPU ordena que um dado seja escrito em um certo endereço da memória RAM, o circuito controlador do cachê intercepta a solicitação e, ao invés de escrever o dado nos lentos chips DRAM da memória principal, o escreve nos rápidos chips SRAM do cachê e segue em frente. Mais adiante, quando a CPU der uma folga nos acessos à memória, a memória principal será atualizada copiando-se nela os dados previamente escritos no cachê.

Evidentemente controlar um sistema "write back" é muito mais complicado, já que o controlador de cachê tem que manter um rigoroso controle do que está no cachê e do que está na memória RAM, pois enquanto a memória RAM não é atualizada, posições de memória de mesmo endereço no cachê e na memória RAM contêm valores diferentes e não cópias do mesmo dado. É preciso então recorrer a um bit adicional na TAG RAM, o chamado "bit sujo", que tem o funcionamento bastante similar ao de um bit de paridade. Sempre que um dado é escrito apenas no cachê e ainda não na memória principal, o controlador de cachê faz o "bit sujo" correspondente assumir o valor um. Assim que a memória RAM é atualizada, e o dado é nela copiado, o "bit sujo" reassume o valor zero. Assim, para saber se o mesmo endereço no cachê e na memória RAM contêm dados iguais ou diferentes, basta verificar o "bit sujo": se vale um, os dados são diferentes e devem ser atualizados. Se zero, são cópias idênticas. Cachês do tipo "write back" são mais rápidos e eficientes que cachês "write through". Porém são mais caros (devido à lógica mais complexa de controle), por isso não é o tipo de cachê adotado em placa-mãe mais baratas. ATENÇÃO: Fabricantes de placas vagabundíssimas por vezes não incluem cachê algum e ainda têm a cara-de-pau de colocar no BIOS uma indicação "write back", que aparece na tela de inicialização. Algumas vezes são tão safados que incluem cópias de chips (encapsulamentos plásticos vazios) no lugar onde deveriam existir os verdadeiros chips de cachê. Cuidado!

Aurélio



Hard&Cia - 2001
Dúvidas, sugestões e críticas gerais? Hard&Cia Mail