quinta-feira, 13 de dezembro de 2007

Memória Virtual

Os sistemas operacionais atuais, incluindo claro a família Windows, permitem usar o disco rígido para gravar dados caso a memória RAM se esgote, recurso chamado de memória virtual. Utilizando este recurso, mesmo que a memória RAM esteja completamente ocupada, o programa será executado, porém muito lentamente, devido à lentidão do disco rígido. Este é o motivo pelo qual uma boa quantidade de memória RAM é tão necessária, o disco rígido é absurdamente mais lento que a RAM, limitando muito o desempenho do micro. Não adianta muito gastar num processador caro e economizar justamente na memória RAM, pois o micro vai continuar muito lento devido ao uso de memória virtual no disco rígido. O arquivo criado no disco rígido para simular memória RAM é chamado de arquivo de troca, ou swap file. Bem antigamente, nos anos 80, época dos primeiros PCs, você só podia rodar programas que coubessem na memória RAM disponível. Naquela época, a memória RAM era muito mais cara que hoje em dia, então o mais comum era usar 256 ou 512 KB (sim, kbytes, duas mil vezes menos que usamos hoje, tempos difíceis aqueles :). Os mais abonados tinham dinheiro para comprar um megabyte inteiro, mas nada além disso. Se você quisesse rodar um programa com mais de 256 KB, tinha que comprar mais memória, não tinha conversa. Sem outra escolha, os programadores se esforçavam para deixar seus programas o mais compactos possíveis para que eles rodassem nos micros com menos memória. O recurso de memória virtual foi desenvolvido pela Intel e incluído em seus processadores a partir do 386. A memória virtual pode ser armazenada em um arquivo especialmente formatado no HD, ou em uma partição dedicada (como no caso do Linux) e a eficiência com que ela é usada varia bastante de acordo com o sistema operacional, mas ela permite que o sistema continue funcionando, mesmo com pouca memória disponível. O problema é que o HD é muito mais lento que a memória RAM. Enquanto um simples módulo DDR2-533 (PC2-4200) comunica-se com o processador a uma velocidade teórica de 4200 megabytes por segundo, a velocidade de leitura sequencial dos HDs atuais (situação em que o HD é mais rápido) dificilmente ultrapassa a marca dos 100 MB/s. Existe um comando no Linux que serve para mostrar de forma rápida o desempenho do HD, o "hdparm". Quando o rodo no meu micro, que usa um HD SATA relativamente recente, ele diz o seguinte: # hdparm -t /dev/sda /dev/sda: Timing buffered disk reads: 184 MB in 3.02 seconds = 60.99 MB/sec No Windows, você pode medir a taxa de leitura sequencial do HD usando o HD Tach. Não se surpreenda com o resultado. Como disse, o HD é muito lento se comparado à memória. Para piorar as coisas, o tempo de acesso do HD (o tempo necessário para localizar a informação e iniciar a transferência) é absurdamente mais alto que o da memória RAM. Enquanto na memória falamos em tempos de acesso inferiores a 10 nanosegundos (milionésimos de segundo), a maioria dos HDs trabalha com tempos de acesso superiores a 10 milissegundos. Isso faz com que o desempenho do HD seja muito mais baixo ao ler pequenos arquivos espalhados pelo disco, como é o caso da memória virtual. Em muitas situações, o HD chega ao ponto de não ser capaz de atender a mais do que duas ou três centenas de requisições por segundo. A fórmula é simples: quanto menos memória RAM, mais memória swap (memória virtual) é usada e mais lento o sistema fica. O processador, coitado, não pode fazer nada além de ficar esperando a boa vontade do HD em mandar à conta-gotas os dados de que ele precisa para trabalhar. Ou seja, quando você compra um micro com um processador de 3 GHz e 256 MB de RAM, você está literalmente jogando dinheiro no lixo, pois o processador vai ficar boa parte do tempo esperando pelo HD.

Nenhum comentário: