Logo Hostnet Logo SBP Logo Hostnet Logo SBP
Busca

Retornar para: Colunas - Como Funciona

Sítio do Piropo

B. Piropo

< Coluna Como Funciona >
< (publicada no site "PromoInfo") >
Volte

10/10/2005

< Como funciona o "Boot" >

III - O Sistema Operacional

Na coluna anterior discutimos o "ciclo de busca e execução", a única coisa que a CPU sabe fazer sozinha e por isso mesmo repete indefinidamente enquanto está ligada: ler uma instrução na memória principal, ou MP, "apontar" para a seguinte e executar a que foi lida, ciclo após ciclo. Coisa simples, mas que explica algo fundamental: como os programas são executados.

O fato do primeiro passo do ciclo de busca e execução consistir em ler a instrução na MP significa que, para ser executado, um programa (ou o conjunto de instruções que formam um programa) deve necessariamente estar na MP.

Eles não estão lá o tempo todo. Nem poderiam, posto que em princípio a MP é quase toda formada por circuitos eletrônicos constituídos de semicondutores e capacitores, que são de natureza volátil. Essa volatilidade implica que, quando desligamos os computadores, os circuitos da MP deixam de ser alimentados por energia elétrica e, simplesmente, deitam a perder seu conteúdo. Em outras palavras: memória volátil é aquela que "esquece" o que armazenava quando é desligada.

Em geral os programas a serem executados no computador são armazenados em um tipo de memória não volátil, a chamada "memória secundária". Há diversos dispositivos que podem constituir a memória secundária, como disquetes, outros dispositivos de armazenamento removíveis como discos de CD e DVD e até mesmo fitas magnéticas. Mas, de longe, o dispositivo mais comum usado para este fim é o disco rígido ou disco magnético. Como seu nome indica ele é constituído por um (ou mais) disco(s) de superfícies revestidas por um material magnético, onde se podem gravar, ler e sobrescrever informações. Talvez um dia venhamos a discutir como funcionam os discos magnéticos. Por enquanto, vamos nos ater apenas a três informações sobre eles, justamente as que são essenciais para o tema que estamos discutindo.

A primeira é que discos magnéticos são um tipo de memória não volátil. Portanto as informações neles gravadas não são perdidas quando a máquina é desligada. Se eu armazenar as instruções de um programa qualquer em um arquivo gravado em um disco rígido (discos rígidos armazenam informações sob a forma de "arquivos"), elas lá permanecerão até que alguém as altere ou remova (a superfície magnética constitui um tipo de memória não volátil, porém não permanente, ou seja, eu posso a qualquer momento substituir por outras as informações nela gravadas).

A segunda é que informações em discos rígidos são agrupadas em "setores", ou linhas magnetizadas traçadas sobre sua superfície. Setores de discos magnéticos contêm sempre 512 Bytes de informações e os arquivos são formados por conjuntos de setores.

O terceiro ponto é que o microprocessador não tem acesso direto à memória secundária. Para que um byte contido em um setor do disco rígido seja transferido para um dos registradores do microprocessador é preciso que ele seja antes transferido (na verdade melhor seria dizer "copiado", já que o conteúdo do setor permanece íntegro após a transferência dos dados) para a memória principal.

Portanto, para que um programa armazenado em disco possa vir a ser executado, é preciso antes que o arquivo que contêm seu conjunto de instruções seja lido na memória secundária e as instruções copiadas para um trecho da memória principal. A isso se chama "carregar" um programa. Programas somente podem ser executados após serem carregados.

O que nos leva à questão que levantamos no final da coluna anterior: quem ou o quê "carrega" os programas?

Se você quisesse uma resposta sucinta eu poderia lhe dizer que quem carrega os programas é o sistema operacional. Mas você não é do tipo que gosta de respostas sucintas. Se fosse, não estaria lendo esta coluna. Então, vamos destrinchar o assunto, começando pelo princípio.

No princípio, sabemos todos, era o caos. Os computadores, então chamados de "cérebros eletrônicos", eram máquinas imensas e mal humoradas. Vídeo e teclado, nem pensar. Entrava-se dados com cartões perfurados e os resultados eram vomitados em longas folhas impressas. E os programadores, senhores, eram senhores programadores! Pois nada havia que facilitasse seu trabalho. Cada operação, por mínima que fosse, havia que ser incorporada ao programa, desde a leitura dos cartões até a impressão de cada caractere do resultado final. E isso não ocorreu na pré-história: eu mesmo vi operar um desses colossos há pouco mais de quatro décadas.

Mas as coisas evoluíram. Teclados e vídeos tornaram mais fácil a interação com as máquinas. Surgiram os micros pessoais, vieram os mouses, modems, scanners, caixas de som e esse mundo de penduricalhos que circundam nossas máquinas. E que trouxeram com eles um novo universo de complexidades.

Imaginem se, para usar toda essa parafernália, cada programador tivesse que introduzir em seus programas todas as rotinas necessárias para se comunicar com cada uma dessas bugigangas, incluindo teclado, vídeo e discos? Com tanto trabalho braçal, onde iriam eles buscar alguma criatividade?

Porém como evitá-lo se, com raras exceções, qualquer programa que se preze deve permitir um mínimo de interação com o usuário e alguns periféricos?

Bem, se houvesse um programa que permanecesse rodando o tempo todo e se encarregasse das tarefas comuns, como prover as rotinas básicas de acesso a disco e demais periféricos, gerenciar memória, carregar os outros programas e cuidar do funcionamento básico da máquina enquanto eles estivessem rodando, o programador seria poupado dessas tarefas para se dedicar apenas a seu programa...

Pois há. E esse programa é o sistema operacional.

O sistema operacional é um programa que é executado durante todo o tempo em que a máquina permanece ligada. Ele consiste de um enorme número de rotinas capazes de perfazer uma infinidade de pequenas tarefas necessárias a maioria dos programas. Que se chamam, muito apropriadamente, "serviços". Se o programa precisa, digamos, de remover um arquivo do disco, ele pede ao sistema operacional que o faça. Essa solicitação é feita de uma forma previamente determinada pelo sistema operacional, acionando aquilo que se convencionou chamar de "interrupção". E com propriedade: o programa, de fato, interrompe sua execução, passa os dados (no exemplo, o nome do arquivo a ser removido) e o controle do micro ao sistema operacional que atende ao pedido e devolve o controle ao programa. Que prossegue então do ponto em que solicitou a interrupção. E o arquivo desaparece do disco sem que o programador tenha que se preocupar com os maçantes detalhes de modificar diretório, ajustar o sistema de arquivos e coisas afins. O próprio sistema operacional se encarrega disso.

O sistema operacional funciona então como um programa "mestre", que na maior parte do tempo opera "por detrás dos panos", prestando serviços aos demais programas e ao usuário. Sem ele, cada programa teria que cuidar sozinho de toda a interação com os periféricos. Com ele, se seu editor de textos precisa imprimir uma página, solicita que o sistema o faça. E se o navegador da internet, o programa de correio eletrônico, o editor de imagens, enfim, qualquer outro programa também deseja imprimir algo, solicita igualmente ao sistema operacional. Ou seja: ele funciona como intermediário entre todos os programas e o hardware, seja qual for o hardware. Pois também é o sistema operacional que "toca" sons nas caixas de som, exibe figuras, caracteres e filmes no monitor, captura imagens no scanner, lê e escreve arquivos em disco, recebe caracteres do teclado, em suma: se interpõe entre os programas e a máquina, de tal forma que, para os programas, a máquina não existe, o que existe é o sistema operacional (na verdade, é um pecado grave de programação fazer com que um programa qualquer tenha acesso direto ao hardware; embora isso seja tecnicamente possível, qualquer acesso deve ser feito sempre através do sistema operacional).

Ora, como o sistema operacional é o responsável pelos acessos à disco e gerenciamento da memória, é óbvio que ele é o responsável pela "carga" dos programas na memória. E aqui está a resposta a nossa pergunta: quem carrega os programas é o sistema operacional.

Mas quantos sistemas operacionais existem?

Bem, como o sistema operacional é um intermediário entre os programas e o hardware, ele deve ser desenvolvido especificamente para o tipo de computador no qual irá rodar.

Por exemplo: se você usa um computador da Apple, da "linha" MacIntosh, deverá usar obrigatoriamente o sistema operacional desenvolvido para essa linha. E como a linha é "proprietária" (ou seja, há apenas um fabricante de MacIntosh, a própria Apple), o único sistema operacional que roda nessa linha de micros é aquele licenciado pela própria Apple, o Mac OS (em suas diferentes versões).

Mas a maioria dos computadores pessoais são micros da "linha PC". Uma arquitetura de computadores que foi desenvolvida a partir do primeiro computador pessoal da IBM, o IBM PC lançado em agosto de 1981.

Naqueles dias o PC era um computador bastante limitado (usava o microprocessador 8088 da Intel, magnífico para a época com seus fantásticos quase 5 MHz, mas uma carroça se comparado aos modernos Pentium). E seu sistema operacional, o DOS, compartilhava estas limitações. Veja, na Figura 1, o aspecto da capa do manual de uma das versões do DOS.

Capa do manual da versão 5 do DOS

Figura 1: Capa do manual da versão 5 do DOS

O DOS (sigla de Disk Operating System, ou "sistema operacional de disco") usava uma "interface de caracteres" baseada na "linha de comando".

Destrinchemos: interface é a forma pela qual o sistema operacional se comunica conosco, os usuários. Os sistemas operacionais modernos usam uma interface gráfica baseada em ícones. O DOS usava uma interface de caracteres, ou seja, aquelas antigas telas onde apareciam apenas letras. Se você usa Windows e quer ver o aspecto de uma delas, abra uma janela do "prompt de comando". A janela que então se abre é muito parecida com a tela do velho DOS. Deixe-a aberta.

Já "linha de comando" é a forma pela qual o usuário interage com o sistema. Para executar cada operação ele tinha que digitar letra a letra o comando correspondente e teclar ENTER ao final. Por exemplo: no DOS o comando para limpar a tela era "CLS" (contração de "CLear Screen", ou "limpe a tela" em inglês). Experimente: volte à sua janela do prompt de comando, digite "cls" (assim mesmo, tanto faz maiúsculas ou minúsculas, porém sem as aspas) e tecle ENTER. Repare: tudo o que está no interior da janela desaparece, exceto uma linha que indica em que diretório (ou pasta) você se encontra (essa linha chama-se "prompt" de comando).

Quer ter uma amostra de como era dura a vida dos usuários do DOS? Pois então aproveite sua janela limpa e digite "labek" seguido de ENTER. Você receberá uma mensagem informando que "labek não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo de lotes" ou algo parecido. Isso porque você, deliberadamente, digitou o comando com uma única letra errada. Agora, digite certo: "label" e ENTER. O sistema lhe informará o "nome" (ou "label", que significa "rótulo") de seu drive C (agora cuidado: na sua janela de comando, tecle ENTER e, ao ser perguntado se deseja excluir o nome do volume atual, tecle "N" para voltar ao prompt; cuidado para não mudar o nome de seu disco; para fechar a janela do prompt de comandos, digite "exit" e tecle ENTER).

Como você viu, para usar o DOS era necessário não somente conhecer um número enorme de comandos cujos nomes provinham do inglês e digitá-los sem cometer um único erro. Para carregar um programa, entrava-se com o nome de seu arquivo executável.

Para facilitar as coisas, apareceram as interfaces gráficas. A primeira foi Windows 3 (pelo menos a primeira que foi aceita pelo mercado; antes dela houve outras, como a GEM e as próprias versões anteriores de Windows, mas não "vingaram"). Ela se baseia no uso de ícones, pequenos desenhos que representam objetos que por sua vez podem ser programas ou dispositivos. Foi concebida para ser operada com um mouse. Clicar sobre um objeto "abre" o objeto. O que significa "abrir" um objeto depende do objeto. Se for um disco, por exemplo, abre-se uma janela que exibe seu conteúdo. Se for um programa, ele é carregado e executado. Veja, na Figura 2, a capa do manual de uma das versões de Windows 3, a versão 3.11 para grupos de trabalho, em alemão.

manual de Windows 3.11 em alemão

Figura 2: Capa do manual de Windows 3.11 em alemão

Mas Windows 3 ainda era uma interface gráfica. Para rodar, dependia do DOS. Foi apenas a partir da versão Windows 95 que Windows tornou-se um sistema operacional completo. E evoluiu para as versões 98, 98 SE, 2000 e, finalmente, Windows XP (pelo menos por enquanto; uma nova versão já paira no horizonte).

Windows XP professional

Figura 3: Windows XP professional

Mas como a linha PC não é proprietária (ou seja, há diversos fabricantes de micros, todos - em princípio - compatíveis), Windows não é seu único sistema operacional. Há alguns anos a IBM lançou um (excelente) sistema operacional para esta linha de micros. Chamava-se OS/2. Teve um relativo sucesso durante pouco tempo, mas faleceu devido à falta de competência da IBM de lidar com o usuário final e ao excesso de competência da MS para lidar com esse mesmo usuário. Mas isso são águas passadas. Atualmente, o único rival de peso do Windows é o Linux.

Trata-se de um sistema operacional, também baseado em interface gráfica, de código aberto, bastante estável. Enfrenta, no entanto, dois obstáculos: o número relativamente pequeno de aplicativos de uso geral e o formidável poder de fogo da MS, receosa da concorrência.

Sendo um sistema de código aberto, há várias versões (ou "distribuições") disponíveis do Linux. A figura 4 mostra a Red Hat, uma das mais populares.

Red Hat Linux

Figura 4: Red Hat Linux

Pois bem, agora você já sabe quem carrega os programas e o que é este famoso sistema operacional.

E, seguramente, já se deu conta da contradição básica da coisa, aquela que deu origem ao mistério do boot: se quem carrega os programas é o sistema operacional e o sistema operacional é um programa, então quem carrega o sistema operacional?

Mistério que será resolvido na próxima - e, prometo, última - coluna desta série.