• 1 Conceito

Sistemas operacionais são uma área de pesquisa importantíssima no âmbito da computação, pois permitem que nos comuniquemos de maneira mais efetiva com os recursos do computador, sem o sistema operacional intermediando o nosso acesso seria necessário um profundo conhecimento a respeito do hardware para operar o computador e até mesmo tarefas corriqueiras (como copiar e colar um arquivo), seriam extremamente complicadas, demoradas e sujeitas a erros.

O sistema operacional é uma estrutura de software ampla e complexa, que incorpora aspectos de baixo nível (como drivers de dispositivos e gerência de memória física) e de alto nível (como programas utilitários e a própria interface gráfica).


  • 2 Estrutura

Apesar de ser constantemente retratado como tal, é errado pensar no sistema operacional como apenas uma camada que executa acima do Hardware, ele na verdade é composto de diversos componentes com seus objetivos e funcionalidades. Alguns dos componentes mais relevantes de um sistema operacional são:

Núcleo : é o coração do sistema operacional, responsável pela gerência dos recursos do hardware usados pelas aplicações. Ele também implementa as principais abstrações utilizadas pelos programas ou aplicativos.

Drivers : módulos de código específicos para acessar os dispositivos físicos. Existe um driver para cada tipo de dispositivo, como discos rígidos IDE, SCSI, portas USB, placas de vídeo, etc. Muitas vezes o driver é construído pelo próprio fabricante do hardware e em forma compilada (em linguagem de máquina) para ser acoplado ao restante do sistema operacional.

Código de inicialização : a inicialização do hardware requer uma série de tarefas complexas, como reconhecer os dispositivos instalados, testá-los e configurá-los adequadamente para seu uso posterior. Outra tarefa importante é carregar o núcleo do sistema operacional em memória e iniciar sua execução.


Programas utilitários : são programas que facilitam o uso do sistema computacional, fornecendo funcionalidades complementares ao núcleo, como formatação de discos e mídias, configuração de dispositivos, manipulação de arquivos (mover, copiar, apagar), interpretador de comandos, terminal, interface gráfica, gerência de janelas, etc.


  • 2.1 Sistemas monolíticos

Um sistema operacional de estrutura monolítica é escrito através de diversas rotinas que interagem entre si para garantir o funcionamento das funções desejadas no

Neste tipo de arquitetura é importante que cada função/rotina do sistema tenhas seus parÂmetros e resultados bem definidos, para que dessa forma possam interagir livremente e integrar o programa sem que uma falha comprometa todo o funcionamento do sistema operacional. 

Suas principal vantagem é o tempo de resposta, como as funções que o sistema desempenha são implementadas diretamente no núcleo a eficácia do software é uma das melhores dentre as arquiteturas, mas como não há módulos para segmentar a aplicação, todas as informações e rotinas são visíveis às outras o que pode comprometer a confidencialidade do software e a fácil comunicação entre todas as rotinas faz com que uma falha em qualquer uma das rotinas possa comprometer o funcionamento do software como um todo.


  • 2.2 Sistemas em camadas

Como o próprio nome sugere nessa arquitetura o sistema operacional é segmentado em camadas. Visto que os sistemas são divididos, as implementações de um módulo do sistema, podem referenciar apenas as implementações do módulo atual ou das camadas inferiores à ela.

Quanto mais superficial a camada mais próxima ela estará do usuário e quanto mais "profunda" mais perto ela estará do Hardware, A camada 0 da aplicação pode, por exemplo, gerenciar o escalonamento dos processos na CPU enquanto camadas mais superficiais ofereceriam interfaces gráficas para facilitar a utilização do usuário.

  • 2.3 Sistemas Cliente-Servidor

Na arquitetura de sistemas Cliente-Servidor as implementações e funcionalidades são dividas em dois tipos: Os procedimentos "Cliente" e os procedimentos "Servidor". Também é comum que haja o mínimo possível de operações sendo executadas do lado do "cliente", deixando a maioria dos processos executando no servidor, dessa maneira sempre que o usuário faz uma requisição a aplicação do cliente envia uma requisição para o servidor e o servidor, por sua vez, faz o processamento necessário para resolver a requisição do cliente e devolve apenas a resposta.


  • 2.4 Interação

Visto que a principal premissa do sistema operacional é facilitar nossa interação com a máquina, é lógico deduzir que há funções que nos permitam acessar diretamente as informações e rotinas do sistema operacional, nos exemplos a seguir é demonstrado como podemos interagir com o sistema operacional através da linguagem "C",utilizando a função System para recuperar informações do sistema.

/*
     *   exemplo uso de system: leitura com atualizacao de data
     */
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[]) {
      FILE *arq;
      int ch;
      char comando[60];

      /* testa se numero de argumentos correto */
      if (argc != 2) {
        printf("Uso: %s <nome arquivo>\n",argv[0]);
        return(1);
      }

      /* abre arquivo para leitura */
      arq = fopen(argv[1],"r");
      if (arq == 0) {
        perror(argv[1]);
        return(1);
      }

      /* atualiza data do arquivo */
      /*-- prepara comando */
      sprintf(comando, "touch %s", argv[1]);
      /*-- executa */
      system(comando);

      /* apresenta arquivo carater a carater */
      do {
        ch = getc(arq);
        putchar(ch);
      } while (ch != EOF);

      /* finalizacoes */
      fclose(arq);
      return(0);
    }

Nesse exemplo utilizando a linguagem C é possível acessar uma arquivo na memória do sistema e atualizar informações.


  • 2.5 Classificação dos sistemas operacionais


Batch (de lote) : os sistemas operacionais mais antigos trabalhavam “por lote”, ou seja, todos os programas a executar eram colocados em uma fila, com seus dados e demais informações para a execução. O processador recebia os programas e os processava sem interagir com os usuários, o que permitia um alto grau de utilização do sistema. Atualmente, este conceito se aplica a sistemas que processam tarefas sem interação direta com os usuários, como os sistemas de processamento de transações em bancos de dados. Além disso, o termo “em lote” também é usado para designar um conjunto de comandos que deve ser executado em sequência, sem interferência do usuário. Exemplos desses sistemas incluem o OS/360 e VMS, entre outros.

De rede : um sistema operacional de rede deve possuir suporte à operação em rede, ou seja, a capacidade de oferecer às aplicações locais recursos que estejam localizados em outros computadores da rede, como arquivos e impressoras. Ele também deve disponibilizar seus recursos locais aos demais computadores, de forma controlada. A maioria dos sistemas operacionais atuais oferece esse tipo de funcionalidade.


Distribuído : em um sistema operacional distribuído, os recursos de cada máquina estão disponíveis globalmente, de forma transparente aos usuários. Ao lançar uma aplicação, o usuário interage com sua janela, mas não sabe onde ela está executando ou armazenando seus arquivos: o sistema é quem decide, de forma transparente. Os sistemas operacionais distribuídos já existem há tempos (Amoeba [Tanenbaum et al., 1991] e Clouds [Dasgupta et al., 1991], por exemplo), mas ainda não são uma realidade de mercado.


Multi-usuário : um sistema operacional multi-usuário deve suportar a identificação do “dono” de cada recurso dentro do sistema (arquivos, processos, áreas de memória, conexões de rede) e impor regras de controle de acesso para impedir o uso desses recursos por usuários não autorizados. Essa funcionalidade é fundamental para a segurança dos sistemas operacionais de rede e distribuídos. Grande parte dos sistemas atuais são multi-usuários. 


Desktop : um sistema operacional “de mesa” é voltado ao atendimento do usuário doméstico e corporativo para a realização de atividades corriqueiras, como edição de textos e gráficos, navegação na Internet e reprodução de mídias simples. Suas principais características são a interface gráfica, o suporte à interatividade e a operação em rede. Exemplos de sistemas desktop são os vários sistemas Windows (XP, Vista, 7, etc.), o MacOS X e Linux. 


Servidor : um sistema operacional servidor deve permitir a gestão eficiente de grandes quantidades de recursos (disco, memória, processadores), impondo prioridades e limites sobre o uso dos recursos pelos usuários e seus aplicativos. Normalmente um sistema operacional servidor também tem suporte a rede e multi-usuários.


Embarcado : um sistema operacional é dito embarcado (embutido ou embedded) quando é construído para operar sobre um hardware com poucos recursos de processamento, armazenamento e energia. Aplicações típicas desse tipo de sistema aparecem em telefones celulares, sistemas de automação industrial e controladores automotivos, equipamentos eletrônicos de uso doméstico (leitores de DVD, TVs, fornos-micro-ondas, centrais de alarme, etc.). Muitas vezes um sistema operacional embarcado se apresenta na forma de uma biblioteca a ser ligada ao programa da aplicação (que é fixa). LynxOS, µC/OS, Xylinx e VxWorks são exemplos de sistemas operacionais embarcados para controle e automação. Sistemas operacionais para telefones celulares inteligentes (smartphones) incluem o Symbian e o Android, entre outros.


Tempo real : ao contrário da concepção usual, um sistema operacional de tempo real não precisa ser necessariamente ultra-rápido; sua característica essencial é ter um comportamento temporal previsível (ou seja, seu tempo de resposta deve ser conhecido no melhor e pior caso de operação). A estrutura interna de um sistema operacional de tempo real deve ser construída de forma a minimizar esperas e latências imprevisíveis, como tempos de acesso a disco e sincronizações excessivas. 

Existem duas classificações de sistemas de tempo real: soft real-time systems, nos quais a perda de prazos implica na degradação do serviço prestado. Um exemplo seria o suporte à gravação de CDs ou à reprodução de músicas. Caso o sistema se atrase, pode ocorrer a perda da mídia em gravação ou falhas na música que está sendo tocada. Por outro lado, nos hard real-time systems a perda de prazos pelo sistema pode perturbar o objeto controlado, com graves consequências humanas, econômicas ou ambientais. Exemplos desse tipo de sistema seriam o controle de funcionamento de uma turbina de avião a jato ou de uma caldeira industrial. 

Exemplos de sistemas de tempo real incluem o QNX, RT-Linux e VxWorks. Muitos sistemas embarcados têm características de tempo real, e vice-versa.

  • 3 Referências

Wikipedia: https://pt.wikipedia.org/wiki/Sistema_operativo

Sistemas Operacionais: Conceitos e Mecanismos - Prof. Carlos Alberto Maziero : http://wiki.inf.ufpr.br/maziero/lib/exe/fetch.php?media=so:so-cap01.pdf

Sistemas Operacionais - Prof. Dr. Márcio Andrey Teixeira : http://ctd.ifsp.edu.br/~marcio.andrey/images/estrutura_so-ifsp-catanduva.pdf