Sumário: O disco rígido e a disquete estrutura física. Como os dados são armazenados fisicamente. Como o MS-DOS organiza o disco. O registo de boot. Aula Teórica 11 Leitura Recomendada: Capítulos 28 e 29 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley. Capítulo 5 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer s Bible, Microsoft Press. Estrutura física da disquete e do disco rígido A disquete é composta por um prato de material magnetizável. Ambos os lados do prato podem ser usados para armazenar dados. Uma drive de disquetes contem um motor que faz rodar a disquete a uma velocidade constante. A drive tem ainda duas cabeças de leitura/escrita, uma para cada lado da disquete. As cabeças são montadas num braço que se move para trás e para a frente, afastando-se ou aproximando-se do centro da disquete. Figura nº 1 Geometria da drive de disquetes. A geometria de um disco rígido é semelhante à de uma disquete. Tem normalmente, não apenas um, mas vários pratos, que rodam em conjunto, e a drive tem um braço com várias cabeças de leitura/escrita, uma para cada superfície dos pratos. O material de que os pratos do disco rígido são feitos permite-lhes rodar mais rapidamente do que a disquete e permite também uma maior densidade de armazenamento de dados. Como resultado, um disco rígido pode armazenar muito mais informação que uma disquete e essa informação pode ser acedida muito mais rapidamente. 1
Figura nº 2 Geometria da drive do disco rígido. Conceito de pista, sector, cilindro e cluster Pista - Cada lado do prato contem anéis concêntricos, chamados pistas, que são numerados de 0 a N. Sector - Cada pista está dividida em sectores, num número fixo por pista. Cada sector tem 512 bytes de capacidade nas disquetes e na maioria dos discos. Os sectores são numerados de 1 a M. Representa a quantidade mínima de informação a que um programa pode aceder, isto é, não é possível ler/escrever um byte isolado num disco/disquete, a unidade mínima é o sector (512 bytes). Cilindro - Conjunto de todas as pistas com o mesmo número em cada superfície dos vários pratos. É uma pilha de todas as pistas com o mesmo número. A contagem das cabeças de leitura/escrita também começa em 0. Como o braço das cabeças move-se em uníssono convém escrever os dados numa só pista. Se não couber, deve-se escrever o resto em pistas com o mesmo número (no mesmo cilindro). Assim, o braço não necessita de se mover (operação que leva mais tempo que a própria transferência dos dados). 2
Figura nº 3 Estrutura física de um disco/disquete. Armazenamento físico dos dados A forma como os dados são fisicamente mapeados no disco ou disquete é um resultado natural da geometria do hardware. Porque é necessário formatar o disco/disquete antes de se poder utilizar pela primeira vez? Porque durante a formatação são escritos na superfície magnética valores que indicam os números das pistas, cilindros e sectores. Após a formatação é possível ler/escrever dados no dispositivo, com base no esquema de endereçamento descrito. Este modo de endereçamento é chamado endereçamento físico e é usado pela BIOS. Localização de uma determinada informação na BIOS, resulta da combinação do número da pista ou cilindro, número do sector e número da cabeça de leitura/escrita. Capacidade total de armazenamento resulta do cálculo: número total de cabeças de leitura/escrita x número de pistas x número de sectores x bytes por sector Nos discos rígidos as capacidades de armazenamento variam muito, assim como variam o número de cilindros, cabeças e sectores. Cluster - Grupo de sectores consecutivos que o sistema trata como uma unidade de espaço de armazenamento. É sempre um valor potência de 2. Um ficheiro começa na fronteira de um cluster e requer no mínimo um cluster, mesmo que não ocupe todo o espaço. Por exemplo, numa disquete de dois 3
sectores por cluster, um ficheiro de 100 bytes ocupa na mesma os dois sectores (2 x 512 bytes = 1024 bytes). O número de sectores por cluster depende do tipo de disco ou disquete. Figura nº 4 Capacidades de armazenamento para disquetes. Os controladores Tanto as disquetes como os discos possuem controladores que, estando entre o processador e a drive, fazem a gestão de toda a comunicação entre eles. Quando o processador faz um pedido para ler dados, o controlador trata de fazer com que o braço se mova para o cilindro pretendido, selecciona a cabeça e aceita os dados lidos do sector pretendido, colocando os dados na RAM onde o processador os pode aceder. Enquanto o processador faz estas tarefas, o processador está livre para outras. Há vários tipos de controladores (IDE e SCSI), voltaremos a este assunto numa das aulas mais à frente. Do ponto de vista do programador é indiferente que tipo de controlador existe. Isto porque existem device drivers que são instalados e que tornam a programação independente do hardware. Como o MS-DOS organiza o disco Sectores lógicos O DOS não reconhece cilindros, cabeças e sectores. Em vez disso, o MS-DOS vê um disco ou disquete como uma sequência de sectores lógicos cuja contagem começa em 0 e termina no último sector do dispositivo. A contagem começa fisicamente no sector 1, cilindro 0, cabeça 0 (que constitui o sector lógico 0) e continua pista a pista no mesmo cilindro (vai mudando de cabeça), e depois de cilindro a cilindro. O último sector de um cilindro é seguido do primeiro sector do próximo cilindro. Áreas de organização do disco Todas as disquetes e partições de discos rígidos formatadas com o MS-DOS são mapeadas em quatro áreas distintas (com início no sector lógico 0): O registo de boot, a FAT, a root directory e a área de ficheiros. O tamanho de cada área varia com os formatos dos dispositivos, mas a sua estrutura mantém-se a mesma. A tabela da figura nº 7 mostra a organização de vários tipos de disquetes. A tabela da figura nº 8 mostra o mesmo, mas em termos de sectores físicos e lógicos. 4
Figura nº 6 Áreas de organização do disco. Figura nº 7 Sectores ocupados pelas áreas em vários tipos de disquetes. Figura nº 8 Organização de vários tipos de disquetes. 5
O registo de boot O primeiro sector (sector lógico 0) é sempre o boot sector. O registo boot sector pode ocupar um ou mais sectores. Uma tabela no boot sector especifica o tamanho do registo de boot, o tamanho e número de cópias da FAT e o número de entradas na root directory, entre outras informações. Mesmo que a disquete/disco não seja de arranque, tem sempre boot sector. A FAT (File Allocation Table) Mapeia todo o espaço da área de ficheiros do disco/disquete, incluindo o espaço usado pelos ficheiros, o espaço livre e o espaço danificado. Devido à sua importância, são armazenadas duas cópias da FAT, para o caso de uma delas se danificar. O tamanho da FAT depende do tamanho da disquete ou da partição do disco, no fundo, depende do tamanho da área que é preciso mapear. A root directory Funciona como uma tabela que identifica cada um dos ficheiros existentes no disco/disquete. Cada entrada na tabela contém informações várias sobre um ficheiro, incluindo o seu nome, tamanho, localização inicial no disco, data. O tamanho da root directory varia com o formato do disco. A área de ficheiros Ocupa o resto do espaço do disco/disquete e é utilizada para armazenar os ficheiros e subdirectorias. Nas condições ideais, o ficheiro é armazenado em espaços contíguos. Contudo, um ficheiro pode ser partido em blocos não contíguos, especialmente se um ficheiro acrescentado ou se for armazenado no espaço deixado livre por um ficheiro apagado. Portanto, não é difícil termos um ficheiro com dados espalhados pelo disco. Esta fragmentação faz com que o acesso aos dados do ficheiro seja mais lento, e torna a recuperação do ficheiro (undelete) mais difícil. Normalmente não temos que nos preocupar em saber onde o ficheiro se encontra, esse aspecto é tratado pela FAT. Só nos devemos preocupar em não ter o disco demasiado desfragmentado, pelas razões abordadas em cima. O registo de boot, a FAT e a root directory são criadas automaticamente pelo sistema operativo durante a formatação do dispositivo. Vamos ver essas três áreas em detalhe. O registo de boot (boot sector) O boot sector contém: 1. Instruções para que sejam carregados os ficheiros do sistema (io.sys, msdos.sys e command.com), se existirem, do disco para a memória. 2. Todas as informações para aceder às restantes áreas do disco. 3. Informações sobre o formato físico do disco. Os sectores de boot têm sempre a mesma estrutura e estão sempre localizados no sector lógico 0. Estrutura do boot sector entrada 00H contém valor 1EH até à versão 3.3 e o valor 3EH após a versão 3.3. entrada 0BH indica o número de bytes por sector (normalmente 200H = 512 bytes). entrada 0DH contém o número de sectores por cluster. entrada 0EH indica o número de sectores ocupado pelo registo de boot. O seu valor é quase sempre 1. entrada 13H contém o número total de sectores de um volume se este for inferior a 32 MBytes, caso contrário, o seu valor é zero. entradas 1EH a 1FFH contêm o bootstrap loader do DOS até à versão 3.3. entrada 20H contém o número total de sectores de um volume se este for superior a 32 MBytes, caso contrário, o seu valor é zero. entrada 27H número de série do disco, calculado e gravado a quando da formatação. No DOS é calculado com base na data e hora, o que faz com que seja sempre diferente. entrada 2BH igual à entrada na root directory para o volume label. entrada 36H contém normalmente o tipo do sistema de ficheiros (FAT12, FAT 16, etc.). entradas 3EH a 1FFH contêm o bootstrap loader do DOS após a versão 4.0. 6
Figura nº 9 Estrutura dos 512 bytes do registo de boot. Discos de boot Caso a disquete/disco rígido seja de arranque do sistema, os dois últimos bytes do boot sector contêm os valores 55AAH. Já vimos que a última tarefa das rotinas de start-up da ROM-BIOS é detectar o bootstrap loader. Para tal, o boot sector é lido para memória e é verificado se os dois últimos bytes contêm a assinatura 55AAH, que indica se existe programa de arranque. Se existe, é executada a instrução JUMP que está em 00H. Essa instrução é um salto para o código bootstrap que carrega os ficheiros do sistema para a memória. Se não existe a assinatura, a BIOS assume que o volume não é de arranque. Por defeito, a procura do programa de arranque é feita na seguinte ordem: primeiro é verificada a drive A e depois o disco rígido. Se em nenhum deles existir programa de arranque, é mostrada uma mensagem de erro. 7