Sistemas Operacionais - AULA 1
 

O que é um SO?

Um sistema operacional pode ser encarado como um conjunto de programas que auxiliam o usuário na utilização do computador. Dentre esse conjunto de aplicações pode estar editores de texto, navegadores web, interpretadores de comandos, dentre outros. Pois bem, com essa definição é difícil estabelecer que programas fazem parte do SO. Por exemplo, você pode achar que todos os programas que foram instalados com a mídia do SO fazem parte do sistema operacional.

Após o exposto aqui gostaria definir o foco de estudo deste material, que é basicamente o núcleo (kernel) do sistema operacional. Nesse curso estaremos preocupados com os aspectos relacionados ao projeto de kernels de sistemas operacionais. De forma que apenas algumas aplicações auxiliares (externas ao contexto do SO) serão citadas como o caso do interpretador de comandos e do bootloader.

SO x Empresa

Uma analogia que pode ser feita é do SO com uma grande empresa. Uma empresa está inserida em um ambiente onde ela terá que tratar com diversos agentes externos, aqui para exemplificar, temos: Cliente, Fornecedores e o Governo.

Dentro da empresa cada recurso é especializado para interagir de alguma forma com um ou mais de um destes elementos. O Depto. Comercial Faz o relacionamento com o cliente até a venda. O Depto. técnico assume o relacionamento com esse cliente a após a venda. O Depto. de Pessoas Gerencia os recursos humanos da empresa. Já o Depto. Financeiro é responsável pela cobrança e pagamentos.

As empresas tendem a se dividir em áreas de especialização, essa estratégia é conhecida como dividir para conquistar, e tem o objetivo de dividir um problema maior em partes menores, tornando mais claro os processos internos e atendendo melhor a demanda do cliente. Observe que essa divisão é sugerida e pode variar de empresa para empresa, o fato é que os administradores aceitam essa divisão como uma boa prática.

Um sistema operacional pode ser visto da mesma forma. Os departamentos de uma empresa podem ser comparados as gerências de um SO: Por exemplo o Ger. de Processos é responsável por criar os processos e alocá-los para a CPU conforme a sua característica ou prioridade. Já o Ger. de Memória será responsável por tratar as requisições de memória do processo como também garantir a disponibilidade de memória para outros processos. A Ger. de E/S é acionada sempre que algum processo precisa comunicar-se com o mundo externo, porém elementos internos do próprio SO, podem querer também se comunicar com o mundo externo. Observe que esta é uma divisão também sugerida, e os projetistas de sistemas operacionais tem aceito isso como uma boa forma de organizar as rotinas do SO.

Perspectivas de um SO

O SO existe basicamente para cumprir duas missões básicas:

  • Gerenciar a expectativa do usuário: atendendo a suas requisições dentro do esperado pelo usuário;
  • Gerenciar recursos do Sistema: Controlando e disponibilizando recursos para atender as demandas dos usuários.
  • Maquina Estendida

    O usuário quer que as suas solicitações sejam atendidas, mas não quer, de maneira alguma, saber como isso vai ser feito. Sendo assim o usuário “preenche um formulário” e o SO se encarrega de atender a sua solicitação. Por exemplo, um processo pode pedir: SO Abra um arquivo. Informando o caminho do arquivo, e o local onde será guardado o descritor para o arquivo. O SO por sua vez deve criar a condições para o que o usuário possa realizar operações sobre o arquivo aberto, desta forma o SO através dos diferentes subsistemas deve preparar-se para eventuais solicitações do usuário para aquele arquivo.

    Gerente de Recursos

    Como gerente de recursos o sistema operacional tem a função de garantir a disponibilidade dos recursos, para que as solicitações dos processos possam ser atendidas. Muitos processos podem solicitar uma impressão por exemplo. Porém, dada a sua natureza, a porta de impressão só pode ser usada para atender uma requisição por vez, e sendo assim o sistema operacional deve enfileirar essas requisições e atende-las da maneira mais otimizada possível.

    Ecossistema

    O diagrama acima apresenta os diferentes elementos de um sistema operacional moderno. Nos primeiros sistemas computacionais não havia essas camadas o usuário interagia direto com o hardware. Desta forma só quem poderia operar o computador eram pessoas extremamente especializadas.

    Com o passar do tempo diferentes camadas foram introduzidas no sentido de facilitar o uso do computador, ou seja reduzindo a sua complexidade e tornando o seu uso possível por pessoas cada vez menos especializadas.

    Por exemplo, o SO tem como uma de suas finalidades esconder a complexidade do hardware (HW) para o usuário. Porém o uso da interface bruta (API) do sistema operacional, ainda é bastante complicado.

    Para esconder a complexidade do sistema operacional, existe o interpretador de comandos, também conhecido como SHELL. O SHELL é uma aplicação como outra qualquer, é através dele que o usuário “preenche o formulário” com a sua solicitação para o SO, ou seja é através do shell que o usuário poderá lançar e terminar aplicações. copiar arquivos, desligar o computador, dentre outras operações.

    Um computador é uma ferramenta de trabalho programável, o que ele pode fazer é limitado apenas pela imaginação do seu programador. Sendo assim, alguns usuário mais especializados podem querer programá-los, para isso existem duas formas, ou escreve-se o código em linguagem de máquina (0s e 1s), ou escreve-se um código em um nível mais elevado e usa-se os montadores e compiladores para traduzir esse código em linguagem de nível mais elevado em código de máquina. Esse código gerado é o que chamamos de aplicativos (APPS).

    Gerações de Sistemas Operacionais

    GeraçãoHardwareProgramação
    1a. (45-55)VálvulasPainéis Programação
    2a. (55-65)TransistoresSistemas de Lote
    3a. (65-80)Circuitos integradosMultiprogramação e Timesharing
    3a. (80-hoje)Alto Grau de Integração - LSI
    CHIPS
    SO especializados
    Desktop
    Tempo Real

    1a Geração de Computadores (45-55)

    Neste primeiro momento os computadores eram projetados, construídos e programados pelas mesmas pessoas, não existia o comercio destes equipamentos. A programação era realizada em código absoluto, através de fios, plugs e chaves para controlar as funções básicas da máquina, ainda não existia o conceito de linguagem de programação e os sistemas operacionais ainda não existiam. Os computadores podiam ter até 20.000 válvulas. nessa época os programas processados pelos computadores eram constituídos essencialmente por cálculos numéricos repetitivos, como por exemplo a geração de tabelas de funções trigonométricas. Ainda nesta geração, no começo dos anos 50, se criou os cartões perfurados para evitar a programação em painéis.

    São exemplos de computadores desta época o COLOSSUS, ENIAC e EDVAC.

    2a Geração de Computadores (55-65)

    A principal característica destes computadores é o uso do transistor (inventados no inicio dos anos 50) ao invés das valuvulas. Isso teve um grande impacto no custo e no tamanho dos computadores.

    Nesta epoca os computadores eram extremamente caros, e surgiram as primeiras técnicas que tinham por objetivo otimizar o uso dos computadores, pois anteriormente perdia-se muito tempo carregando-se programas e dados para o processamento posterior. Foi nesta época que foi criado o sistema de processamento em lote (batch).

    Os sistemas em lote, consistem no uso de um computador de pequeno porte (ex.: IBM 1401) para a leitura dos jobs (programas + dados) para a fita magnética. Essa fita, contendo os jobs era levada para o computador responsável pelo processamento (ex.: IBM 7094), onde eram executados em sequência.

    O principal uso destes computadores foi o cálculo matemático. Esses computadores eram programados em linguagem de montagem ou FORTRAN, são exemplos de sistemas operacionais desta época, o FMS (Fortran Monitor System) e o IBSYS do 7094.

    3a Geração de Computadores (65-80)

    Essa geração de computadores trouxe 3 grandes avanços:

    O primeiro deles foi a integração, um conceito que permite agrupar vários transistores em uma única pastilha de silicio. Com isso era possível construir circuitos integrados para funções específicas, com centenas de transistores, isso trouxe redução no custo, no tamanho e no consumo de energia destes computadores, além do aumento na velocidade de processamento.

    O outro avanço foi a multiprogramação. Para entender a vantagem desta técnica é preciso entender como um job faz a leitura e saida dos dados. Em geral, os computadores possui dispositivos de E/S responsáveis por fazer a leitura dos dados e eventuais impressões de resultados. O fato é que, tanto na época como hoje, os dispositivos de E/S são mais lentos que a CPU, sendo assim, sempre que um job acessa dados em uma fita por exemplo, a unidade de processamento fica ociosa, até que o resultado seja transferido para a memória. Se durante essa transferencia for possível rodar outro job, esse tempo de CPU não seria disperdiçado. Lembrando que um job para rodar precisa está na memória RAM, então se num dado momento existem vários jobs disponíveis na memória para executar, durante um acesso de E/S por parte de um job a CPU poderá ser alocada para outro job. Essa é a idéia da multiprogramação: Permitir que vários jobs estejam na memória do computador em um dado instante.

    O ultimo avanço foi o Timesharing. Esse tipo de recurso, provê a chamada interativadade para sistemas computacionais. Num primeiro momento a interatividade permitiu o uso de terminais on-line conectados a um sistema computacional. Cada terminal pode ser operado por um usuário e este poderá submeter diversos jobs(processos). O sistema operacional se encarregará de escalonar a CPU entre as diferentes requisições, através do compartilhamento do tempo da CPU

    4a Geração de Computadores (80 - dias Atuais)

    O principal avanço desta geração é a integração em Larga escala (LSI), isso tornou os computadores muito baratos, criando as condições para o surgimento dos chamados computadores pessoais (PC).

    Referências:

    Sistemas Operativos ao longo do Tempo

    História dos computadores

    História dos computadores II

    Tipos de Sistemas de Operacionais

    Os sistemas operacionais mais conhecidos hoje em dia, são em sua maioria de proposito geral, ou seja, pode se encaixar em vários dos tipos abaixo. Por exemplo: o GNU/Linux poderá ser usado em Mainframe, Computadores Pessoais e Servidores, mas também é um sistema que pode ter escolanamento de Tempo Real e ainda ser usado em dispositivos embarcados. Então, tenha em mente que a classificação abaixo é apenas para fins didáticos.

    Para computadores de Grande Porte (Main Frame): Essas máquinas se caracterizam pela especialização do Hardware, o que lhe dá um alto poder de processamento.

    Para Multiprocessamento: Sistemas Computacionais com mais de um núcleo de processamento;

    Multiusuário e Multitarefa: Esses sistemas prove proteção entre recursos dos usuários (privacidade) e a capacidade de executar várias tarefas ao mesmo tempo;

    Tempo Real: São Sistemas Operacionais que devem entregar uma resposta de solicitação dentro de um prazo acordado (SLA);

    Embutido: Esse tipo de Sistema Operacional normalmente roda em hardware com limitações de processamento e memória;

    Hardware

    O sistema operacional que você irá desenvolver rodará sobre um hardware. Você deve conhecer os aspectos deste hardware para que obter um melhor despenho do sistema operacional. Os principais aspectos que você deve observar:

    CPU: O Conjunto de instruções disponíveis, registradores, mecanismos de proteção existentes, modos de acesso a memória, modo de endereçamento dos controladores de dispositivos, hardware de gerencia de memória.

    Memória: Memórias disponíveis no sistema, se existe armazenamento persistente. Se o modelo de memória tem espaço separado para instrução e dados.

    E/S:Existe disponibilidade de interrupções, Controlador de interrupções, Controlador DMA?

    Barramentos: Os barramentos são padrões de mercado. A tratativa em relação a alguns barramentos mais importantes (ex. PCI/ISA) devem está incluída diretamente no SO (gerencia de E/S), para outros barramentos pode-se implementar o suporte através de drivers de dispositivo.