Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
19/12/1994

< Acessos em 32 Bits >
<
Parte II: 16 bits >


Pois bem: já sabemos que programas não acessam disco: requisitam tais acessos ao DOS. Cuja missão é justamente prestar tais serviços. Que não se restringem a acessos a disco: todas as necessidades dos programas são providas pelo DOS através de serviços. Quando um programa quer que o DOS faça algo, solicita o serviço correspondente através de uma interrupção, uma ocorrência tão freqüente que há uma instrução em assembly (ou "linguagem de máquina") específica para isso. O DOS, então, interrompe seus afazeres para atender ao programa.

As interrupções que nos interessam são a Int 13h e Int 21h (as interrupções são conhecidas por seu número na base hexadecimal, indicada por esse "h" depois dos algarismos). A primeira corresponde a acessos a disco e a segunda a acessos a arquivos. O que, no mínimo, parece confuso: afinal, os arquivos não estão no disco?

Estão sim. E, evidentemente, toda vez que se acessa um arquivo, acessa-se o disco. Embora o contrário nem sempre seja verdadeiro: para se formatar um disco, por exemplo, acessa-se o disco, não arquivos. E a diferença é justamente essa: na 13h estão grupados os serviços de acesso a disco chamados de "baixo nível", já que tratam de acesso direto ao hardware, o dispositivo físico. E por isso mesmo grupados em um "pedaço" do sistema operacional conhecido como BIOS (Basic Input/Output System), ou sistema básico e entrada e saída. Listá-los todos não faria sentido, mas para dar uma idéia da diferença entre eles e os da Int 21h, lá vão alguns: Serviço 00: resetar a controladora dos drives de disquete; Serviços 02/03: ler/gravar setores (diretamente, sem levar em conta se pertencem ou não a arquivos); Serviço 05 formatar trilha (sim, é possível formatar apenas uma ou algumas trilhas de um disco); e assim por diante.

Já os serviços da Int 21h fazem parte do DOS propriamente dito (e já não mais do BIOS), ou seja, levam em conta a estrutura de arquivos e diretórios. Nem todos têm a ver com acesso a arquivos: alguns atendem a outros periféricos, como teclado, vídeo ou impressora. Mas a maioria deles lida exclusivamente com arquivos. São dezenas. Aqui vão apenas alguns exemplos: Serviços 14h/15h: ler/escrever seqüencialmente em arquivo; Serviços 0Fh/10h: abrir/fechar arquivo; Serviço 39h: criar subdiretório; Serviço 41h: deletar arquivo; Serviço 56h: renomear arquivo; e assim por diante.

Nesse ponto me desculpo por tanto tecnicismo. Mas é imprescindível distinguir entre serviços de acesso a disco da Int 13h e serviços de acesso a arquivos da Int 21h para que possamos perceber a diferença entre acesso a disco em 32 bits (32BDA) e acesso a arquivos em 32 bits (32BFA) de Windows. Pois uma coisa tem tudo a ver com a outra.

Por falar em "32 bits", estamos quase prontos para discuti-los. E podemos adiantar que eles se referem a Windows, um "sistema operacional de 32 bits". Contrapondo-se ao DOS, um "sistema operacional de 16 bits". Vejamos o que quer dizer isso.

O DOS é um sistema operacional limitadíssimo. Durante seus longos anos de vida evoluiu bastante a cada versão, mas jamais desvencilhou-se de alguns defeitos congênitos, todos ligados às limitações da CPU 8088 da Intel, para a qual foi criado.

Para começar, a CPU 8088 é miserável e irremediavelmente limitada a um universo de 1Mb. É verdade que, numa época em que os micros pessoais exibiam orgulhosamente uma memória RAM de 16K (isso mesmo, "K" de Kilobytes), isso não era assim tão grave. Tanto que quando a IBM lançou seu PC (para o qual o DOS foi desenvolvido), resolveu exagerar e lá meteu logo 64K de RAM. Por isso ninguém ligou muito para o fato de que no esquema de endereçamento do 8088 só cabiam 1Mb. E como o DOS foi desenvolvido para essa CPU, não "enxerga" absolutamente nada além disso. Incidentalmente: daí derivou o conceito de "memória estendida". Em um sistema operacional decente, ele não faz sentido. Mas acontece que para o DOS o endereço 1Mb tem um significado sinistro: depois dele, nada existe. Nos tempos dos 386 e 486, que são capazes de endereçar 4Gb (Gigabytes, ou milhões de Megabytes), foi preciso criar mecanismos engenhosos para contornar essa limitação. A memória estendida, portanto, nada mais é que um "remendo" do DOS para que as CPUs modernas possam acessar mais de 1Mb de memória RAM enquanto rodam esse limitadíssimo sistema operacional. Em Windows NT ou OS/2 o conceito de "memória estendida" não existe (exceto quando simulam o DOS para rodar seus programas).

Mas não é só isso. Acontece que, devido às suas características internas, o 8088 é irremediavelmente monotarefa. Ou seja: ao contrário dos modernos 386 e 486, que quando rodam Windows ou OS/2 podem manejar diversos programas ao mesmo tempo, o velho 8088 só podia rodar um programa de cada vez (e mal...). Note que a multitarefa (na qual um micro roda mais de um programa ao mesmo tempo) é diferente do esquema adotado pelos velhos programas residentes que rodavam no 8088. Os residentes, como o SideKick (alguém ainda lembra do maravilhoso SideKick para DOS?), ficavam "dormindo" na memória até serem despertados mediante uma combinação de teclas para assumir o controle da máquina. Em um esquema assim, cada programa é executado a seu tempo, um depois do outro. A diferença pode parecer sutil, mas na verdade é essencial e está ligada às características da CPU.

E há ainda a "proteção" de memória. Como o DOS foi concebido para rodar um único programa de cada vez, deixa esse programa ser o "dono" da máquina: enquanto estiver rodando, pode fazer o que quiser, inclusive acessar diretamente o hardware (vídeo, memória e periféricos) e ler ou escrever dados em qualquer endereço de memória. Mas, em um esquema de multitarefa, um programa que resolva mexer nos trechos de memória onde se aninha o código executável do sistema operacional ou de outro programa que esteja rodando ao mesmo tempo, pode causar um desastre. Do qual, garanto, você já ouviu falar: nas CPU modernas, que protegem os trechos de memória ocupados por cada programa, esse desastre chama-se Falha Geral de Proteção, mais conhecida por GPF. Um conceito sem sentido para o 8088 (e para o DOS).

A principal característica das CPU é o tamanho de seus registros internos (posições de memória "embutidas" no chip onde são manipulados os valores transportados da memória RAM). Uma característica tão importante que identifica o tipo da CPU. Os registros internos do 8088 são de 16 bits. Por isso o 8088 é uma CPU "de 16 bits".

Resumindo: o DOS é um sistema operacional limitado a um campo de memória de 1Mb e não suporta multitarefa nem proteção de memória. Essas limitações são congênitas e devem-se a características da CPU para a qual foi desenvolvido, o chip 8088 da Intel, um microprocessador de 16 bits. Por isso o DOS é considerado um "sistema operacional de dezesseis bits".

B. Piropo