Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
28/10/1991

< Device >


Device, em inglês, quer dizer "dispositivo". Mas significa também "estratagema". O que é, no mínimo, irônico. Pois se é certo que o nome do comando "device" deriva do primeiro significado, é também garantido que o segundo tem muito a ver com ele: o uso de gerenciadores instaláveis de dispositivos não deixa de ser também um estratagema por meio do qual o DOS garantiu sua longevidade. E dos mais bem engendrados. O assunto já foi abordado, mas vamos refrescar nossa memória e lembrar o que são gerenciadores de dispositivos, ou "device drivers".

Antes, porém, vamos nos por de acordo sobre o que vem a ser um dispositivo. Em um sentido amplo, dispositivo é tudo aquilo que permite a um micro se comunicar com o mundo exterior. E dentro deste conceito logo nos vem à mente os dois mais óbvios: teclado e vídeo. Mas existem uma infinidade de outros, começando pelos igualmente óbvios disco e impressora. E se estendendo por um universo fascinante onde cabem desde mouses e joysticks até interfaces com sistemas de televisão, scanners, placas MIDI, fitas streamer, discos laser, modems, faxes e mais o que o engenho humano puder inventar para pendurar em um micro. E posso garantir que neste campo o engenho humano tem se mostrado incrivelmente fértil.

Tudo isto é ótimo. Alguns dispositivos são ferramentas excelentes para facilitar nosso trabalho. Outros, mecanismos não menos excelentes para incrementar nosso lazer. Transferir arquivos através do modem tem me poupado muito tempo e trabalho. Enviar um fax com duas or três teclas também. Selecionar um telefone em um banco de dados e mandar o micro discá-lo é um conforto e tanto. E jogar Tetris com um joystick é muito mais gostoso. Mas vocês já pensaram como o micro se entende com tantos dispositivos?

Raciocinemos: para que uma impressora imprima uma letra, para que o vídeo exiba um pixel, para que o modem disque um número, a CPU deve enviar sinais. Sinais, portanto, que "saem" do micro. Por outro lado, para que o joystick dispare o canhão supersônico de sua nave estelar, para que a imagem capturado pelo scanner seja armazenada na memória, para que o arquivo recebido pelo modem seja gravado no disco, a CPU recebe sinais. Sinais que "entram" no micro. Logo, estamos falando em dispositivos de entrada/saída, ou I/O (de "Input/Output", em inglês). E cujos sinais devem ser manipulados pelo Sistema Básico de Entrada e Saída, ou BIOS, a parte do sistema operacional que cuida desses assuntos.

Até aí tudo bem. O problema é que estes sinais são de naturezas diferentes e devem ser manipulados por trechos distintos de código. Sim, pois o BIOS, sabemos todos, é um programa. E um bastante especial: é ele quem se encarrega de gerenciar todos os sinais que entram e saem do micro, o responsável pela comunicação da máquina com o mundo exterior. E que deve conter todo o código necessário para que esta comunicação seja feita, não importa qual venha a ser o tipo, configuração ou finalidade do dispositivo que está enviando ou recebendo sinais. E é evidente que as rotinas necessárias para processar sinais recebidos de um mouse são bastante diversas daquelas usadas para manejar a entrada de um scanner, por exemplo. Portanto, para fazer face a todas as hipóteses possíveis, o BIOS teria que ser um programa enorme. E programas enormes tendem a ser mais lentos e ocupar muita memória. Isto sem falar na constante necessidade de atualização: novos dispositivos são inventados a todo o momento. Se o código necessário para gerenciá-los fosse obrigatoriamente incorporado ao BIOS, o sistema operacional precisaria ser atualizado a toda hora.

Neste ponto creio que vocês já perceberam a dificuldade: todo o código necessário para processar sinais de entrada e saída deve estar incorporado ao BIOS. Por outro lado, não teria sentido encher o BIOS de todas as máquinas com trechos de código que jamais seriam usados: quantas máquinas você conhece ligadas a uma câmara fotográfica para produzir slides a partir de imagens geradas no micro? O jeito, então, é usar um BIOS "sob medida". Pendurou uma placa Targa para processar imagens de televisão em sua máquina? Incorpore o código necessário para gerenciá-la em seu BIOS. Tirou a placa? Remova o código. Então o BIOS pode ser fornecido apenas com as rotinas necessárias para gerenciar os dispositivos mais elementares como vídeo, teclado, discos e assemelhados, reduzido a seu tamanho mínimo e suficientemente veloz. O resto é incorporado ou não na medida de suas necessidades. Simples, não?

Mas um momento: o BIOS não é parte do sistema operacional, que é carregado durante o boot? E que depois disto não pode mais ser alterado? Então como é que eu vou modificá-lo conforme minha necessidade? Pois é aí que entra o estratagema, ou device: toda a vez que a máquina dá a partida, conforme você já sabe, o sistema vai buscar suas mensagens na "caixa postal" através da qual você se comunica com ele, o Config.Sys. E procura pelo comando "device". Cuja sintaxe é muito simples: o nome do comando seguido de um sinal de igual, de uma especificação de arquivo e opcionalmente de alguns parâmetros. E a cada comando "device" encontrado ele obedientemente busca o arquivo especificado e o incorpora ao BIOS na memória da máquina. Desta forma somente se carrega na memória o código necessário para gerenciar os dispositivos existentes. O resto fica de fora. Simples, não?

Pois é. E estes arquivos, instalados durante a partida, vocês já adivinharam que são os "installable device drivers", ou gerenciadores instaláveis de dispositivos. Dos quais há centenas: cada tipo de dispositivo usa o seu. Mas que nós vamos examinar apenas os mais comuns, aqueles que normalmente são fornecidos com o DOS, que são o Ansi.Sys, Display,Sys, Printer.Sys, Driver.Sys, Ramdrive.Sys (ou Vdisk.Sys), os misteriosos Country.Sys e Keyboard.Sys e, nas versões mais recentes do DOS, o Smartdrv.Sys, Hymem.Sys e Emm386.Exe. E uns poucos além destes.

Estes arquivos não são programas no sentido lato do termo, isto é, não podem ser executados diretamente. Eles são trechos de código para gerenciar entrada e saída de diferentes dispositivos, que somente podem ser acionados através de chamadas do restante do BIOS, do DOS e de programas. Em geral têm a extensão Sys (mas não obrigatoriamente, como você mesmo pode ver no Emm386.Exe) para deixar claro que fazem parte do sistema operacional. São tão importantes que o DOS criou um atributo de arquivo para distinguí-los dos demais, o atributo "de sistema". E serão o assunto das próximas páginas.

B. Piropo