O que são, o que fazem e como fazem
O computador é composto fisicamente pelo hardware, isto é, a UCP, o Disco Rígido, a Memória, a Placa Gráfica, a Impressora, o Teclado, o Rato, a Placa de Rede e inúmeros outros dispositivos que lhe podem ser ligados por portas USB, Firewire, slots PCIe, PCI, etc.
Portanto, o programador, quando está a desenvolver um programa tem de saber as características de todo o equipamento com que vai atuar, para que o seu programa consiga interagir com todos os dispositivos do computador. O programa deve incluir outros pequenos programas que permitam ao computador entender um teclado, um rato e uma impressora, no mínimo. Como já vimos atrás, o computador é completamente ignorante, nasceu assim, portanto para fazer qualquer coisa precisa que lhe ensinem.
Qual teclado, qual rato, qual impressora?
O programador deve perguntar isso ao seu cliente antes de fazer o programa. Informar-se sobre as marcas e modelos de todo o equipamento com que o seu programa vai interagir no computador desse cliente. De seguida deve contactar os fabricantes desses equipamentos para que o informem sobre o conjunto de instruções e comandos de cada dispositivo, para que possa executar os programas de interação com os mesmos.
Então, quando se faz um programa, faz-se para um determinado computador com determinados dispositivos?
Pois, como ressalta do descrito, lá terá que ser. E quando se quer estender o mesmo programa a outro tipo de computador, têm que se acrescentar os tais pequenos programas que vão preparar a interatividade com os seus dispositivos. Se quiser que o seu programa seja de âmbito global, então terá que conhecer todo o tipo de dispositivos existentes e ter os tais pequenos programas para interagir com os mesmos. E estar permanentemente a atualizá-lo com adicionais para interagir com novos dispositivos.
Mas assim, o programador perde mais tempo com esse tipo de questões do que com o programa propriamente dito.
Pois efetivamente assim seria, se o que vimos dizendo fosse verdade. Digamos até que seria quase impossível a um simples programador ter programas que interagissem com todo o tipo de dispositivos. O caso ainda seria pior se pensássemos que a interação com esses dispositivos obriga a detetar quando os mesmos solicitam a UCP ou são solicitados pela mesma, isto é, é preciso estar à escuta de quem bate à porta, saber como se abre a mesma e como se encaminha o visitante.
Esta é uma das funções do SO: a gestão de dispositivos de E/S (Entrada/Saída)
É um dos trabalhos que os SO fazem em silêncio e no anonimato sem que nos apercebamos, apresentando ao programador dispositivos abstratos ao que o mesmo se dirige sem ter que se preocupar com todos esses aspetos. E assim, os programadores podem dedicar-se ao seu verdadeiro objetivo, o seu programa com o seu fim específico.
Os fabricantes de dispositivos para computadores têm acordos com os produtores de SO, segundo os quais aqueles produzem os tais pequenos programas para os seus dispositivos, para que determinado Sistema Operativo o reconheça e possa interagir com ele. A esses pequenos programas chamamos Drivers, nome que já vos deve ser familiar. O Driver da impressora X, o Driver do Gamepad Y, o Driver do teclado Z, etc.
Como é bom ligar aquele sofisticado Gamepad que fomos comprar para melhor jogarmos aquele jogo de que tanto gostamos e perceber que alguns instantes depois o Gamepad está a funcionar, com todos os botões configurados e preparado para interagir com o tal jogo. E o jogo até sabe o nome do Gamepad e as suas características, sem que o seu programador sequer soubesse da sua existência quando fez o jogo.
O que acabámos de descrever é próprio de um dispositivo plug and play (liga e usa). O dispositivo plug and play, mais não faz do que comunicar ao SO, quando é ligado ao computador, as referências necessárias para que o SO o identifique e consiga encontrar nos seus arquivos ou em alternativa online, os tais drivers que lhe ensinam o que precisa de saber para lidar com esse novo dispositivo.
Os mais recentes SO já não pedem ao utilizador para inserir o CD com o driver do dispositivo, caso do Windows 7, por exemplo. São eles próprios que se encarregam de encontrar os mesmos, pois antes de os utilizarem, querem certificar-se da sua autenticidade. Estão em causa questões importantes de segurança, pois esses pequenos programas vão executar-se na parte exclusiva do SO, o núcleo (kernel), havendo histórias recentes de computadores infetados por vírus que se faziam passar por drivers e assim penetravam no núcleo do SO, ficando com acesso a todo o computador.
Vamos analisar os SO essencialmente na vertente dos PC (Personal Computers ou Computadores Pessoais), cuja evolução está neste momento a elevar as suas UCP ao nível das grandes máquinas e os seus SO a evoluções para servidores de sistemas distribuídos com muito maior complexidade.
- Os SO que atualmente detêm a quase totalidade do mercado dos PC são:
- O UNIX, em conjunto com as suas versões Linux e MAC OS X e
- O Windows.
Curiosamente são estes dois SO, com as devidas evoluções que também têm um peso significativo, embora não tão dominante, nos Sistemas profissionais.
O Sistema Operativo (passaremos a designar por SO) é uma interface entre o Hardware, o Software e o Utilizador.
Vamos lá decompor esta afirmação, referindo algumas das principais funções do SO:
- Gestão de dispositivos de E/S apresentando dispositivos virtuais ao utilizador.
- Gestão de Ficheiros, a abstração com que o utilizador lida quando pretende algo do Disco Rígido (Hard Disk ou HD como passaremos a tratá-lo).
- Gestão de utilizadores, garantindo que cada utilizador só consegue aceder aos ficheiros para que tem permissão.
- Gestão de processos, designação dada a um programa quando está em execução.
- Definição de espaços de endereçamento, tendo cada processo um espaço próprio na memória.
- Disponibilização de interfaces de comando, ou gráficas que permitem ao utilizador executar facilmente tarefas de grande complexidade.
Gestão de Dispositivos de E/S
Esta função já foi definida na introdução. Quanto à forma como o SO é informado de cada vez que um desses dispositivos quer interagir com um programa, falaremos mais adiante quando abordarmos a Organização dos SO.
O SO apresenta ao utilizador uma abstração que consiste na apresentação dos dispositivos prontos a serem utilizados sem que para isso seja necessário saber como funcionam, de que marca ou modelo são, etc.
Gestão de Ficheiros
O SO é também uma interface amigável para o programador na função de lidar com o Disco Rígido. Já imaginaram o que seria um programador ter que se dirigir a um disco referindo o Cilindro, a Cabeça e o Setor ou o CHS (Cilinder, Head, Sector) onde se encontra determinado dado? Seria uma tarefa impossível, até porque teria de saber lidar com o controlador do HDD a que queria aceder, cuja complexidade já conhecem da nossa viagem pelo mundo dos HDD.
Para essa tarefa os SO criaram o conceito de ficheiro, a abstração que constitui tudo o que o utilizador tem que saber sobre o HDD quando está a programar. Ficheiro de imagem, de vídeo, de som, de programa, de texto, etc., tudo o que está em disco está sob a forma de ficheiros. E os ficheiros estão organizados em arquivos semelhantes aos arquivos que os humanos utilizam para guardar os seus documentos.
O programador só tem que indicar o caminho (path) para o ficheiro pretendido. O edifício, a sala, a estante, a prateleira, a pasta, o separador e o nome do documento. Ou antes, o diretório raiz, a rede de subdiretórios que representam uma abstração do que acabámos de descrever antes e finalmente a designação do ficheiro.
Para organizar os dados em disco, os SO dispõem dos Sistemas de Ficheiros, dos quais podemos mencionar alguns, como por exemplo UFS (Unix), FAT (MS-DOS e Windows 9x), NTFS (Windows NT), HFS + (MAC OS X), ext4 (Linux). Os sistemas de ficheiros são a forma como os SO (mencionados entre parênteses a seguir a cada um dos sistemas de ficheiros indicado) organizam e gerem os ficheiros num HDD. A complexidade dos sistemas de ficheiros foi evoluindo de acordo com a capacidade dos HDD, com as necessidades de segurança e com a recuperação de desastres que afetem a sua consistência.
No Capítulo anterior já analisámos a forma como o HDD se organiza em termos lógicos. Fizemos mesmo o caminho até um ficheiro num HDD com a ajuda de um editor hexadecimal.
Os SO e os HDD
O MS-DOS, o primeiro SO vendido separado de uma máquina e que permitiu a qualquer cidadão do mundo comprar uma máquina e poder trabalhar com a mesma, sem depender de soluções proprietárias, podendo assim dar largas à sua imaginação, fazendo assim disparar a evolução da informática para aquilo que hoje conhecemos.
MS-DOS significa Microsoft Disk Operating System e resulta duma evolução de um dos muitos Sistemas Operativos DOS (Disk Operating System) existentes, que a Microsoft comprou e modificou a pedido da IBM para a sua linha de computadores pessoais, os IBM PC.
O MS-DOS foi durante uma década (os 80’s) o SO para todos os computadores IBM PC compatíveis e foi o SO que introduziu o sistema de ficheiros FAT (File Allocation Table), ainda hoje em uso para alguns dispositivos, legível e interpretável por qualquer SO.
Falámos no DOS para chamar a atenção para a sua designação de Disk Operating System, pois os primeiros SO eram precisamente isso, sistemas para operar o disco. A única interface que esses SO dispunham era a linha de comandos, vulgo Shell e era através do seu conjunto de comandos que os programadores acediam a ficheiros em disco, para com os mesmos poderem trabalhar.
Portanto, lidar com Discos Rígidos foi sempre uma tarefa da responsabilidade dos Sistemas Operativos.
Quando falámos dos Sistemas de Ficheiros, aperceberam-se da enorme complexidade que representa a gestão do mesmo, atualmente mais de 2 TB de informação a indexar, garantindo consistência, segurança e outras. No entanto, quão fácil é chegar a uma interface gráfica que o SO nos proporciona e movermos um ficheiro de um diretório para outro. Basta selecioná-lo com o rato e arrastá-lo para o diretório de destino. Mas quanto trabalho de reindexação e outros está por detrás desse simples gesto. Já vimos isso no Capítulo anterior.