Unidade C - Sistema de Memória

Introdução

No sistema de memória de um computador, além das memórias voláteis que armazenam os dados e instruções para que sejam acessados e executados pelo processador, também são necessárias memórias que armazenem permanentemente estas informações para posterior acesso.

C.11 Memória Secundária

A memória secundária é utilizada justamente com a finalidade de armazenar permanentemente as informações em um computador, de forma que, mesmo sem alimentação elétrica, ele mantenha as informações nele contidas. O principal elemento que desempenha essa função em um computador é o disco rígido (hard disk = HD).

Conforme visto anteriormente, quando uma informação necessita ser carregada para a memória principal, geralmente ela é carregada do disco rígido, como, por exemplo, o sistema operacional que, quando está instalado no computador, no momento em que a máquina é ligada deve ser carregado do disco rígido, assim como os programas e arquivos.

Além dessa função, o disco rígido também pode se relacionar com a memória RAM em outras duas circunstâncias: memória virtual e cache de disco.

Técnicas envolvendo Disco Rígido e Memória RAM

Quando toda a área de armazenamento da memória RAM está ocupada, pode-se utilizar uma parte da memória secundária para simular a existência de mais endereços na principal. Essa técnica é conhecida como memória virtual ou também como swap. Dependendo do sistema que a utiliza, ela pode ser armazenada em um arquivo no disco rígido ou em uma partição.

Essa técnica é possível devido à utilização dos endereços virtuais pelos programas, que possibilitam o carregamento e o armazenamento dos dados dos programas nas mais diversas localizações. Dessa forma, o programa pode ser dividido em diversas partes e cada uma delas pode ser alocada na memória da forma que melhor convir ao sistema, bem como, parte do programa pode estar na memória RAM (trecho essencial do programa) e outra parte pode estar na memória virtual (HD).

Quanto menor for a quantidade existente de memória RAM, mais será utilizada a memória de swap. Com isso ocorre perda de desempenho no sistema já que o tempo para acessar um HD é superior ao da memória RAM. Além disso, os programas em execução não acessam dados seus armazenados na memória secundária, sendo assim, quando for necessário um dado que está na memória virtual, ele deve ser conduzido até a memória principal.

 

A área de endereços da memória é dividida em partes denominadas páginas, que armazenam blocos contínuos de dados, que podem estar na RAM ou no HD, sendo que quando uma página de dados é referenciada ela deve ser necessariamente copiada para a memória principal, caso não esteja lá.

 

Quando um programa está em execução, ele apenas trabalha com endereços virtuais, que são os que ele vê, porém, na verdade, ele ocupa endereços físicos na memória principal. É necessário que ocorra a tradução entre esses endereços, convertendo endereços virtuais em físicos no momento da execução do programa pelo processador. Para facilitar esse processo existe uma tabela de páginas que mantém um mapeamento relacionando os endereços virtuais dos programas em endereços físicos da memória principal. Através dessa tabela é possível identificar se uma página solicitada já está na memória RAM ou se ela está na memória virtual e deve, conseqüentemente, ser carregada para a RAM.

Para lidar com essa situação existem dois métodos. Um deles é o de paginação por demanda, onde as páginas somente são transferidas para a memória principal quando solicitadas pelo programa, dessa forma apenas as páginas necessárias ficam na memória, perdendo menos tempo com transferências, porém pode acontecer de faltar páginas durante a execução do programa e elas terem de ser buscadas do HD, acarretando em demora. Outro método empregado é o de swapping, que carrega todos os dados de um programa como um bloco único, com isso a transferência dos dados do programa é realizada em uma única operação, com isso todos os dados necessários estarão na memória, porém levará mais tempo para realizar as transferências.

Outra técnica que envolve o disco rígido e a memória RAM é a cache de disco. Nela, quando existem posições livres na memória principal, são copiados dados a mais do disco rígido para a memória principal, agilizando o acesso a eles, quando necessário. Através disso, cria-se a impressão de que o acesso ao HD é mais rápido do que na realidade.

Composição do disco rígido

O disco rígido armazena as informações em formato magnético, o que mantêm a gravação permanentemente. Os dados são gravados em discos magnéticos, chamados de platters (pratos), que são compostos por duas camadas:

Na fabricação dos discos, a superfície magnética é formada por grãos microscópicos depositados de forma uniforme por toda a superfície. Quanto menores forem os grãos, mais altas serão as densidades do disco, medida em gigabits por polegada quadrada, sendo que quanto maior a densidade, maior será a quantidade de grãos depositados e, conseqüentemente, a quantidade de informações que podem ser armazenadas no disco.

Todos os discos que compõem o HD são montados em um eixo de alumínio para evitar vibrações, sendo que existem espaçadores entre eles. Um motor de rotação é o responsável por manter um ritmo constante para que os discos rotacionem por minuto (motores de 5.400, 7.200, 10.000 RPM).

Estrutura do disco rígido

No processo de leitura e gravação de dados no disco rígido, são usadas cabeças de leitura eletromagnéticas (heads) que são presas a um braço móvel (arm), que é movimentado pelo actuator, o que permite acesso a toda a área do disco.

Dependendo da capacidade, os HDs podem ser compostos por vários discos. Nesse sentido, o HD possui duas cabeças de leitura para cada disco (sendo uma para cada face), de forma que se ele for formado por 4 discos, existirão 8 cabeças de leitura, todas elas presas ao mesmo braço móvel. Isso significa que quando uma das cabeças de leitura precisa ser movimentada, todas as outras serão movimentadas também, sobre suas respectivas faces. Podemos observar estes elementos a partir da figura abaixo:

Para que a estrutura de um disco rígido permita o acesso e armazenamento de elementos, cada disco que o compõem é organizado em setores, trilhas e cilindros, formando o que também é conhecido como geometria dos discos. Podemos visualizá-la na figura abaixo:

Na organização acima, as trilhas são as circunferências, que são numeradas seqüencialmente a partir da borda do disco em direção ao centro (reduzindo seu diâmetro gradualmente). A trilha que mais próxima da extremidade do disco é denominada trilha 0, a próxima trilha é a trilha 1, e assim por diante, até chegar à trilha mais próxima do centro. Isso se repete para cada face de cada disco. Por sua vez, as trilhas são divididas em setores, que são áreas de tamanho fixo, onde efetivamente ficam armazenados os dados em um disco.

Para ler os dados que ficam localizados nesta estrutura são utilizadas as cabeças de leitura e gravação que são movimentadas até um local específico do disco pelos braços moveis. Conforme vimos anteriormente, esses braços são todos unidos a um mesmo ponto, sendo que quando um dos braços é movimentado, todos os demais também serão. Por exemplo, para ler um dado que está na trilha 100 da face de disco 2 do 1º disco, a controladora do disco aciona a cabeça de leitura especifica pela face de disco 2 do 1º disco, juntamente com ela todas as outras cabeças também serão movimentadas para a trilha 100 de suas respectivas faces.

Devido ao fato de que todas as cabeças ficam posicionadas sobre a mesma trilha de cada uma das faces de cada disco, surge o cilindro. Dessa forma, um cilindro é formado pelo conjunto das trilhas de mesmo número de cada face de cada disco, onde, por exemplo, o cilindro 50 é composto pela trilha 50 de cada face de cada disco, e assim sucessivamente, conforme imagem abaixo:

Operações no disco rígido

Quando da leitura ou da gravação de dados no disco rígido, os braços são movimentados através de atração e repulsão eletromagnética sob o controle do actuator. Para isso, existe um eletroímã na base do braço móvel, que permite que a placa controladora o movimente através da variação na potência e na polaridade do ímã.

Para facilitar o posicionamento da cabeça de leitura e gravação sobre a superfície dos discos, são gravados sinais magnéticos em determinados pontos da superfície dos discos que servem para orientação de que em que parte do disco a cabeça está naquele momento.

Sabendo A superfície de gravação dos pratos é composta de materiais sensíveis ao magnetismo, conforme visto no item C.11.2. Dessa forma, a cabeça de gravação manipula as moléculas da superfície da posição do disco na qual deseja fazer a gravação através de seus pólos. Nesse processo a polaridade da cabeça muda numa freqüência alta, quando ela está positiva atrai o pólo negativo das moléculas e vice-versa. De acordo com essa polaridade é que são gravados os bits (0 e 1).

Na leitura dos dados no disco, inicialmente a controladora posiciona a cabeça de leitura sobre a trilha onde está o setor a ser lido, aguardando o movimento de rotação do disco posicionar o setor sob ela. A partir desse momento a cabeça lê o campo magnético das moléculas do setor e gera uma corrente elétrica correspondente que a controladora do HD utiliza para determinar os bits da informação.

Nestes dois momentos, na gravação ou na leitura, a cabeça de leitura e gravação em momento algum encosta na superfície do disco, mesmo que a disposição dos braços seja incliná-los em direção a ela. O motivo de não ocorrer esse contato é devido à alta velocidade de rotação dos discos que acaba formando um colchão de ar que repele a cabeça de leitura, o que garante que ela sempre mantenha certa distância dos discos (geralmente medida em nanômetros).

A figura abaixo ilustra essa disposição. Nela temos um braço com duas cabeças de leitura e gravação, uma para cada face do disco, e podemos observar a tendência natural de ambas se aproximarem.

Quando o disco está desligado, as cabeças de leitura ficam em uma posição de descanso, afastando-se dos discos, assim como no momento em que não estão sendo lidos dados.

Placa controladora

A placa controladora é a parte do HD responsável pelo processamento, realizando a interface com a placa-mãe, controlando a velocidade de rotação do motor e o movimento das cabeças de leitura, verificando as leituras, identificando erros, etc. Nele existe um chip de memória SDRAM que é utilizada como uma pequena quantidade de memória cache para o disco rígido, armazenando os últimos dados acessados, o que pode agilizar o acesso a uma informação que foi recentemente lida já que não seria necessário acessar os discos novamente.

Também faz parte o controlador principal, que executa todo o processamento do disco rígido. É ele que se comunica com a placa-mãe através de comandos padronizados de discos rígidos, sendo que internamente estes comandos são convertidos para ações a serem executadas pela cabeça de leitura e gravação. Isso garante que existe compatibilidade dos mais diversos modelos de HD com a placa-mãe, independente de seu funcionamento interno.

Os comandos gerados pelo controlador principal são recebidos pelo controlador de movimento das cabeças de leitura e da rotação do motor. A partir disso, ele envia a seqüência de ações necessárias para acessar um determinado setor.

Correção de erros

Podem ocorrer pequenas falhas na superfície da mídia magnética dos discos que podem levar a erros de leitura. Elas podem ser mais frequentes em discos com densidade de gravação maiores (100 gigabits ou mais), assim como naqueles com altas velocidades de rotação (7.200 RPM para mais).

Para tentar detectar e corrigir esses erros de leitura são utilizados sistemas de ECC (“Error Correcting Code”: “código de correção de erros”). Nele são adicionados bits a mais para cada byte armazenado no disco. Esses bits são gerados por algoritmos especiais aplicados nas informações do disco e que serão utilizados posteriormente para, através da aplicação novamente de algoritmos, verificar se houve alguma alteração nos dados armazenados.

Quando os erros de leitura se tornam cada vez mais freqüentes em um disco isso pode ser gerado por um badblock, que é um defeito físico na mídia magnética, onde os dados que ocasionalmente são armazenados nele não conseguem mais ser lidos. A solução para isso é marcar as áreas defeituosas, para que não sejam mais utilizadas. Existe então uma área reservada no início do disco chamada de defect map (mapa de defeitos). Quando a controladora do disco identifica um setor defeituoso, o substitui por um setor que não apresenta problemas, registrando isso no defect map e com isso evitando que ele seja utilizado novamente. O único porém é o de que a área de HD destinada para isso é limitada, sendo que em algum momento pode acontecer do mapa de defeitos lotar, com isso os badblocks terão que passar a ser tratados pelo sistema operacional.

Desempenho

O desempenho do HD está diretamente ligado às etapas necessárias para se acessar uma posição específica nele. Nesse sentido, podemos destacar o tempo de busca, o tempo de latência e o tempo de acesso.

O tempo de busca (seek time) indica o tempo que a cabeça de leitura e gravação leva para ir de uma trilha para outra do disco, sendo que o seu cálculo pode ser baseado em três índices:

Após a localização da trilha, existe o tempo de latência (latency time), que é o tempo em que a cabeça fica para da sobre a trilha aguardando que o setor a ser acessado, através do movimento de rotação do disco, passe sob ela. Pode ser que o setor esteja logo a seguir ou, no pior dos casos, se tenha que aguardar uma volta inteira do disco para acessá-lo. Esse tempo é calculado dividindo 60 pela velocidade de rotação do HD em RPM e multiplicando o resultado por 1000 resultando no tempo em milissegundos. Em um disco com 5.400 RPM obteremos o tempo de latência de 11.11 ms (60 ÷ 5400 x 1000 = 11.11), sendo que é utilizado o tempo médio de latência, equivalente à metade de uma rotação do disco, nessa caso o tempo seria de 5.55 ms.

Assim que o comando para acessar uma determinada posição é recebido, a cabeça de leitura é movida para a trilha especificada (tempo de busca) e aguarda até que a rotação dos discos faça setor especificado passar por ela (tempo de latência). A eles, soma-se também o settle time (o tempo que a cabeça de leitura demora para estabilizar depois de movimentada) e o command overhead time, que é o tempo que a placa controladora demora para processar o comando e iniciar as operações. Geralmente esses dois valores juntos representam algo em torno de 0,5 ms.

O tempo de Acesso (access time) a uma posição do disco será então a soma do tempo de busca e do tempo de latência, juntamente com o settle time e o command overhead time resultando no tempo médio que é necessário para se realizar o acesso a um setor aleatório do HD. O calculo é realizado somando o tempo de busca médio (average) e o tempo de latência, adicionando 0,5 ms correspondente ao settle time e o command overhead time. Um HD com tempo de busca médio de 8,9 ms e latência de 4,15 ms,  adicionando 0,5 ms do settle time e do command overhead time, resultando em um tempo de acesso de 13,55 ms.

Cache (Buffer)

Quando um arquivo vai ser lido no disco, isso acaba gerando várias leituras de setores seqüenciais. Utilizando Através do uso da cache, em cada passagem da cabeça de leitura são lidos os setores próximos, independente de terem sido solicitados ou não, dessa forma, quando for solicitada a leitura do próximo setor, ele estará carregado na cache, sendo que o dado será transferido mais rapidamente.

O cache pode ser usado também nas operações de escrita, principalmente se o disco estiver ocupado realizando outras operações. A controladora pode armazenar na cache a operação de escrita e executá-la posteriormente, quando o disco estiver liberado.