Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
08/01/1996
< EIDE e Fast ATA IX: >
< Comandando o Drive >

A interface ATA liga o barramento do computador ao disco rígido. Ela obedece a um padrão que disciplina a forma como essa comunicação é feita. Parte das especificações abrange características físicas e elétricas, como número e tipo dos cabos que ligam o drive ao barramento, localização e distribuição das linhas de dados e de controle nos cabos e tensões elétricas usadas para acionar o dispositivo e transmitir dados. Além delas, são ainda padronizadas características lógicas, como a rapidez com que drive e controladora transferem dados e os comandos trocados por sistema e drive.Em suma: a interface ATA é a combinação padronizada de configuração de conectores, níveis de sinais, protocolos de transferência de dados, funções e comandos.

Destrinchar a maneira como tudo isso funciona não é imprescindível, mas é muito ilustrativo. Não é por isso, porém, que iremos nos embrenhar na selva dos comandos e registradores do padrão ATA. A razão é que somente através do conhecimento de certos detalhes desse intrincado mecanismo nos será dado entender o aparente mistério das limitações do velho padrão ATA, particularmente o famoso limite de 504 Mb.

Então vamos lá. Primeiro, lembremos que o altivo sistema operacional jamais se rebaixa ao nível do hardware. Ele consideraria isso uma inadmissível intimidade com inferiores. Como certos políticos cercados de assessores, para falar com o populacho ele usa um intermediário afeito a estas tarefas menores, o BIOS. Ele mesmo nem toma conhecimento da aparência e características físicas do hardware. Portanto, quando deseja ler ou gravar dados em um disco rígido, pede ao BIOS que se encarregue da desagradável tarefa de se entender com a gentalha. O BIOS, por sua vez, transmite a ordem à interface que, ela sim, desce ao mundo de metal e silício dos dispositivos, executa a tarefa e informa ao BIOS. Que então avisa ao amo e senhor, o sistema operacional, que a missão foi cumprida e aguarda uma nova ordem.

Logo veremos que a subdivisão da missão em etapas (sistema operacional/BIOS, BIOS/interface, interface/drive) é um dado fundamental em todo o processo. Primeiro, vamos ver como é travado o diálogo entre BIOS e interface e entre esta e o drive.

O BIOS troca informações com a interface através de comandos. Na interface (ou seja, na placa de circuito impresso presa ao drive) há um microprocessador semelhante à CPU (embora bastante mais simples). Que, como a CPU, tem um certo número de "registradores", ou posições de memória internas. Cada um destes registradores pode receber dados específicos, como por exemplo o número do cilindro a ser acessado, ou o número do setor, da cabeça, a quantidade de setores que serão transferidos em uma operação de leitura ou escrita, e assim por diante. O BIOS se comunica com estes registradores através de certos endereços de entrada/saída (endereços I/O), um para cada registrador (quer dizer: quando o BIOS quer escrever um dado em um destes registradores, escreve o dado no endereço I/O correspondente). Três deles são especialmente importantes para nós: os de comando (Command Register), de estado (Status Register) e de erro (Error Register). O Status Register armazena um código que indica o estado da interface (pronta para receber comando, aguardando, comando realizado com sucesso, comando abortado por erro e assim por diante). O Error Register armazena o código do erro caso algum tenha ocorrido. E o Command Register armazena o código do próximo comando a ser executado (formatar uma trilha, inicializar o drive, ler ou gravar um determinado número de setores cujos parâmetros estão armazenados nos demais registros, informar estado do drive, identificar o drive retornando suas características e assim por diante). Os que mais nos interessam, naturalmente, são os que comandam a leitura e gravação de setores.

Digamos que o BIOS recebeu do sistema operacional a incumbência de ler dez setores sucessivos a partir do vigésimo setor da centésima trilha da oitava face do drive master (o padrão ATA suporta dois drives por interface, o primeiro denominado master, o segundo slave). Através dos respectivos endereços de I/O o BIOS escreve os números do setor inicial, da trilha, da face, do drive e o número de setores a serem lidos nos registradores correspondentes do microprocessador na controladora da interface. Depois, escreve o código do comando no Command Register (se interessa, este comando chama-se Read Multiple, código 196). Neste ponto a interface já dispõe das informações necessárias à execução do comando, o que encerra a preparação. O BIOS, então, avisa à CPU que deve interromper o que está fazendo para receber os dados do drive habilitando a interrupção correspondente.

Daí em diante é com a interface. Que, ao perceber que a sua interrupção foi habilitada, entra em ação imediatamente: lê o conteúdo do Command Register para saber que comando deve executar, lê os parâmetros necessários nos demais registradores e executa o comando lendo os setores solicitados e enviando os dados para a CPU (ou diretamente para a memória em alguns casos). Se tudo correu bem escreve no Status Register o código correspondente. Se não, escreve no Error Register o código do erro ocorrido e informa que houve erro através do Status Register. E avisa à CPU que concluíu a tarefa. Pronto. Como você viu, não é tão complicado quanto parecia.

Em todo o processo há dois pontos que nos interessam particularmente por serem essenciais para a compreensão do que discutiremos adiante.

O primeiro é que a subdivisão desta tarefa em duas etapas (BIOS/interface, interface/disco) permite que uma independa da outra. Ou seja: como o BIOS não mexe no hardware da interface ATA como fazia nos tempos da ST-506/412, não sabe se os setores que pediu para serem lidos foram realmente aqueles que a interface leu. É isso que possibilita a tradução: a interface lê nos registradores o número do setor, trilha e cabeça solicitados pelo BIOS, efetua a tradução, lê no disco setores localizados em posições inteiramente diferentes e fornece os dados como se os setores lidos fossem exatamente aqueles que o BIOS pediu. E tudo funciona nos conformes.

O segundo ponto tem a ver com o tamanho dos registradores do microprocessador da interface que armazenam os parâmetros do drive. E é tão importante para entendermos as limitações do padrão que deixaremos sua discussão para a semana que vem.

PS: Amanhã, dia 9 de janeiro, a primeira reunião de 96 do grupo de usuários do OS/2. Como sempre, no RDC da PUC, às 19 horas.

B. Piropo