Sistemas Operacionais

Sem "software" um computador é basicamente um inútil amontoado de metal. Com "software", um computador pode armazenar, processar, recuperar informações, exibir documentos de multimídia, pesquisar na "Internet" e envolver-se em muitas outras importantes atividades que justificam o seu valor. O "software" de computador pode ser dividido, grosso modo, em duas espécies: programas de sistema, que gerenciam a operação do computador em si, e programas aplicativos, que executam o trabalho que o usuário realmente deseja. O programa de sistema mais fundamental é o "Sistema operacional", que controla todos os recursos do computador e fornece a base sobre a qual os programas aplicativos podem ser escritos.

Um moderno sistema de computador consiste em um ou mais processadores, alguma memória principal (também conhecida como RAM – "Random Access Memory" – Memória de acesso aleatório), discos, impressoras, interfaces de rede e outros dispositivos entrada/saída. Em suma, um sistema complexo. Escrever os programas que controlam todos esses componentes e usá-los corretamente é um trabalho extremamente difícil. Se cada programador tivesse de preocupar-se com o modo como as unidades de disco funcionam e como todas as dúzias de coisas que podem dar errado ao ler um bloco de disco, seria provável que muitos programas sequer pudessem ser escritos.

Há muitos anos tornou-se bastante evidente a necessidade de encontrar uma maneira de isolar os programadores da complexidade do "hardware". A maneira com que isso se desenvolveu gradualmente foi colocar uma camada de "software" por cima do "hardware" básico para gerenciar todas as partes do sistema e oferecer ao usuário uma "interface" ou maquina virtual que é mais fácil de entender e de programar. Essa camada de "software" e conhecido como o "Sistema Operacional" e constitui o assunto desta cadeira.

 

Figura 1 : Um sistema de computador consiste em "hardware", em programas de sistema e em programas aplicativos.

 

Observando a figura 1 temos na parte inferior o "hardware" que, em muitos casos, é composto de duas ou mais camadas. A camada baixa contém dispositivos físicos, consistindo em circuitos integrados, cabos, fonte alimentadora, tubos de raios catódicos e dispositivos físicos semelhantes. Como tais elementos são construídos e como funcionam é assunto do Engenheiro Eletricista.

Em seguida (em algumas máquinas), vem uma camada de "software" primitivo que controla diretamente esses dispositivos e proporciona uma interface limpa para a próxima camada. Esse "software", chamado microprograma, normalmente esta localizado em ROM ( Read Only Memory - memória somente para leitura). Ele é realmente um interpretador, buscando as instruções de linguagem de maquina como ADD, MOVE e JUMP, executando-as como uma série de pequenos passos.

Ex:

Para executar uma instrução ADD o microprograma deve determinar onde os números a serem somados estão localizados, busca-los, adcioná-los e armazenar o resultado em algum lugar. O conjunto de instruções que o microprograma interpreta define a linguagem de máquina, que não é realmente parte do "hardware" da maquina, mas os fabricantes de computador sempre descrevem em seus manuais dessa maneira, de modo que as pessoas pensam que ela é a "maquina real".

Alguns computadores chamados de maquinas RISC (Reduced Instruction Set Computers), não têm um nível de microprogramação. Nestas maquinas o "hardware" executa diretamente as instruções da linguagem de maquina.

Ex:

Motorola 680x0 : possui um nível de microprogramação

IBM Power PC : não possui um nível de microprogramação

A linguagem de máquina tipicamente tem entre 50 e 300 instruções que, na sua maior parte, servem para:

- mover dados pela máquina

- fazer aritmética

- comparar valores

Nessa camada os dispositivos de entrada/saída são controlados carregando valores em registradores especiais de dispositivo.

Ex:

Um disco pode ser comandado para ler carregando em seus registradores:

- os valores do endereço do disco

- o endereço de memória principal

- a contagem de bytes

- a instrução (read ou write)

Na pratica muitos parâmetros a mais são necessários e o resultado retornado pela unidade depois de uma operação é altamente complexo. Além disso para muitos dispositivos de E/S o temporizador desempenha um papel importante na programação.

Uma importante função do Sistema Operacional (S.O) é esconder toda essa complexidade e oferecer um conjunto mais conveniente de instruções para o programador trabalhar.

Ex:

A instrução "READ BLOCK FROM FILE" é uma instrução conceitualmente mais simples que ter que preocupar-se com:

- os detalhes do movimento das cabeças do disco

- esperar que elas abaixem

- etc...

Sobre o Sistema Operacional esta o resto do "software" do sistema. Aqui encontramos:

- o interpretador de comandos (SHELL)

- sistema de janelas

- compiladores

- editores

- programas independentes de aplicação semelhante

OBS:

Estes programas definitivamente não são parte do sistema operacional (mesmo que tipicamente sejam fornecidos pelo fabricante do computador). E isto é um ponto crucial mas sutil.

O sistema operacional é aquela porção do "software" que executa no modo "kernel" ou no modo de "supervisor" . É protegido do usuário pelo "hardware" (ignorando por enquanto os microprocessadores mais antigos que não tinham nenhuma proteção de "hardware"). Os compiladores e editores executam no modo de "usuário".

OBS:

Se um usuário não gosta de um compilador em particular, ele é livre para escrever seu próprio compilador. Não obstante ele não é livre para escrever o seu próprio manipulador de interrupções de disco, que é parte integrante do sistema operacional e normalmente é protegido por "hardware"contra tentativas dos usuários de modificá-lo.

Por fim, acima dos programas de sistema vêm os programas aplicativos. Esses programas são comprados ou são escritos pelos usuários para resolver seus problemas particulares como:

- planilhas eletrônicas

- programas de cálculo de engenharia

- jogos

- etc...

 


1