(11 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 3: Linha 3:
'''''Vemos um sistema operacional como os programas, implementados como software ou firmware, que tornam o hardware utilizável.O hardware oferece capacidade computacional bruta. Os sistemas operacionais disponibilizam convenientemente tais capacidades aos usuário, gerenciando cuidadosamente o hardware para que se obtenha uma performance adequada.''''' [DEI92, p.3]
'''''Vemos um sistema operacional como os programas, implementados como software ou firmware, que tornam o hardware utilizável.O hardware oferece capacidade computacional bruta. Os sistemas operacionais disponibilizam convenientemente tais capacidades aos usuário, gerenciando cuidadosamente o hardware para que se obtenha uma performance adequada.''''' [DEI92, p.3]


Provavelmente você estará usando um dos três maiores sistemas operacionais atuais, seja o Windows, Mac Os e Linux, neste exato momento. Porem existe uma longa história até chegar onde se encontra hoje os conceitos e aplicações dos mesmos. Vale relembrar que existe hoje outros, além destes, como é o caso mais recente lançado pela Google o Chromium OS ou Chrome OS. Mas o que é um Sistema Operacional?


A despeito do tipo, sofisticação ou capacidades do computador, um sistema operacional deve seguir os princípios:  
A despeito do tipo, sofisticação ou capacidades do computador, um sistema operacional deve seguir os princípios:  
Linha 10: Linha 9:
   • Gerenciar a utilização dos recursos existentes buscando seu uso eficiente em termos do sistema;
   • Gerenciar a utilização dos recursos existentes buscando seu uso eficiente em termos do sistema;
   • Garantir a integridade e a segurança dos dados armazenados e processados no sistema e também de seus recursos físicos.
   • Garantir a integridade e a segurança dos dados armazenados e processados no sistema e também de seus recursos físicos.
  • Proporcionar uma interface adequada para que o usuário possa utiliza-lo.


Também deve-se proporcionar uma interface adequada para que o usuário possa utiliza-lo. Historicamente falando, as primeiras interfaces dos sistemas operacionais eram baseadas em um conjunto de palavras-chaves (comandos) e mensagens de diálogo que permitiam a execução de tarefas e a comunicação entre o operador e a máquina. A Interface Humano-Computador (IHC) daquele sistema era dada por estes comandos. Hoje usamos interfaces do tipo gráficas, bem mais simples e de fácil utilização, pois possuem uma aparência atraente e um uso intuitivo sem muitas exigências de linguagem e comandos.
Um breve resumo do começo da história anterior aos sistemas operacionais:
  • 1934 a máquina eletromecânica programável do engenheiro Konrad Zuse.
  • 1935 iniciou-se o projeto da máquina eletrônica ABC, baseada em válvulas, para resolução de sistemas, proposta pelo físico John Vincent Atanasolft.
  • 1937 John Von Neumann, matemático húngaro, propõe uma arquitetura genérica para computador (curiosamente lembrando, usada até hoje, figura 1)
  • 1939 desenvolve-se a primeira calculadora eletromecânica dos laboratórios Bell.


Um dos primeiros sistemas programáveis construídos foi o computador eletromecânico Mark I, projetado pela IBM e a Universidade de Havard, datado de 1944. Em 1946 o Exército Americano revela seu computador eletrônico digital, o ENIAC, utilizado para cálculos de balística. Porem estes sistemas eram particulares somente a engenheiros que sabiam da arquitetura e funcionamento, eles exerciam o papel de programadores, determinando quais módulos deveriam ser interligados e em que ordem.
Um dos primeiros sistemas programáveis construídos foi o computador eletromecânico Mark I, projetado pela IBM e a Universidade de Havard, datado de 1944. Em 1946 o Exército Americano revela seu computador eletrônico digital, o ENIAC, utilizado para cálculos de balística. Porem estes sistemas eram particulares somente a engenheiros que sabiam da arquitetura e funcionamento, eles exerciam o papel de programadores, determinando quais módulos deveriam ser interligados e em que ordem.
Linha 32: Linha 24:
Figura 2 Estrutura de um Sistema Operacional típico
Figura 2 Estrutura de um Sistema Operacional típico


O conceito de abstração leva em conta vários processos, um exemplo é acessar um arquivo em leitor de CD ou mídia removível e realizar a abertura do mesmo:
= Estrutura =
 
[[Arquivo:estruturadeumso.jpg]]


  1. Verificam se parâmetros (tais como nome do arquivo, identificador da origem da leitura, buffer de leitura, etc.);
Figura 3 Estrutura de um sistema operacional
  2. Verificar se o leitor está disponível;
  3. Verificar se a algum conteúdo no leitor;
  4. Ligar o leitor e esperar que esse atinja a velocidade exigida;
  5. Ler tabela de diretório e localizar o arquivo ou subdiretório desejado;
  6. Ler bloco inicial do arquivo e depositá-lo em buffer de memória;


Assim, o sistema operacional deve definir interfaces abstratas para os recursos do hardware, visando atender os seguintes objetivos:


    • Prover interfaces de acesso aos dispositivos, mais simples de usar que as interfaces de baixo nível, para simplificar a construção de programas aplicativos. Por exemplo: para ler dados de um disco rígido, uma aplicação usa um conceito chamado arquivo, que implementa uma visão abstrata do disco rígido, acessível através de operações como open, read e close. Caso tivesse de acessar o disco diretamente, teria de manipular portas de entrada/saída e registradores com comandos para o controlador de disco (sem falar na dificuldade de localizar os dados desejados dentro do disco).
Como um sistema operacional não é um bloco de caráter único, na realidade, ele é composto de diversos componentes com objetivos e funcionalidades complementares. Dentre os mais importantes temos:
    • Tornar os aplicativos independentes do hardware. Ao definir uma interface abstrata de acesso a um dispositivo de hardware, o sistema operacional desacopla o hardware dos aplicativos e permite que ambos evoluam de forma mais autônoma. Por exemplo, o código de um editor de textos não deve ser dependente da tecnologia de discos rígidos utilizada no sistema.
    • Definir interfaces de acesso homogêneas para dispositivos com tecnologias distintas. Através de suas abstrações, o sistema operacional permite aos aplicativos usar a mesma interface para dispositivos diversos. Por exemplo, um aplicativo acessa dados em disco através de arquivos e diretórios, sem precisar se preocupar com a estrutura real de armazenamento dos dados, que podem estar em um disquete, um disco IDE, uma máquina fotográfica digital conectada à porta USB, um CD ou mesmo um disco remoto, compartilhado através da rede


Quando se trata de gerencia de recursos deve se lembrar dos programas aplicativos que usam o hardware para ler e armazenar dados, editar e imprimir documentos, navegar na internet, tocar música, etc. Como em geral um sistema possui atividades simultâneas, isso poderia gerar conflitos no uso do hardware, levando a quebra do sistema ou overclock, pois um ou mais aplicativos precisariam exatamente daquele determinado hardware ao mesmo tempo. Entra então a definição de política de uso dada pelo sistema operacional, quem e quando poderá ser usado determinada parte eletrônica do sistema computacional. Assim acaba por resolver as eventuais disputas e conflitos no uso de recurso pelos aplicativos.


    • Cada computador normalmente possui menos processadores que o número de tarefas em execução. Por isso, o uso desses processadores deve ser distribuído entre os aplicativos presentes no sistema, de forma que cada um deles possa executar na velocidade adequada para cumprir suas funções sem prejudicar os demais. O mesmo ocorre com a memória RAM, que deve ser distribuída de forma justa entre as aplicações.
* '''Núcleo:''' responsável pela gerencia dos recursos do hardware usados pelas aplicações; é ele também que implementa as principais abstrações a serem utilizadas pelos programas.
    • A impressora é um recurso cujo acesso deve ser efetuado de forma mutuamente exclusiva (apenas um aplicativo por vez), para não ocorrer mistura de conteúdo nos documentos impressos. O sistema operacional resolve essa questão definindo uma fila de trabalhos a imprimir (print jobs) normalmente atendidos de forma sequencial (FIFO).
    • Ataques de negação de serviço (DoS – Denial of Service) são comuns na Internet. Eles consistem em usar diversas técnicas para forçar um servidor de rede a dedicar seus recursos a atender um determinado usuário, em detrimento dos demais. Por exemplo, ao abrir milhares de conexões simultâneas em um servidor de e-mail, um atacante pode reservar para si todos os recursos do servidor (processos, conexões de rede, memória e processador), fazendo com que os demais usuários não sejam mais atendidos. É responsabilidade do sistema operacional do servidor detectar tais situações e impedir que todos os recursos do sistema sejam monopolizados por um só usuário (ou um pequeno grupo).


Assim, um sistema operacional visa abstrair o acesso e gerenciar os recursos de hardware, provendo aos aplicativos um ambiente de execução abstrato, no qual o acesso aos recursos se faz através de interfaces simples, independentes das características e detalhes de baixo nível, e no qual os conflitos no uso do hardware são minimizados.


= Estrutura =
* '''Drivers:''' módulos de código específicos para acessar os dispositivos físicos. Como sabemos cada dispositivo possui um determinado driver especifico, por exemplos portas USB, placas de vídeo, webcam, etc.
 
 
* '''Código de inicialização:''' para ligar ou inicializar uma determina parte ou hardware de sistema deve-se atentar-se para uma série de sequencias de séries de tarefas complexas, como reconhecer os dispositivos instalados, testá-los e configura-los para um uso a posteriori.


[[Arquivo:estruturadeumso.jpg]]


Figura 3 Estrutura de um sistema operacional
* '''Programas utilitários:''' são os programas fabricados para facilitar o uso do sistema operacional, permitindo funcionalidades complementares ao núcleo, coo 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, gerencia de janelas, etc.


Como um sistema operacional não é um bloco de caráter único, na realidade, ele é composto de diversos componentes com objetivos e funcionalidades complementares. Dentre os mais importantes tempos:
= '''Tipos de SOs''' =


'''Núcleo:''' responsável pela gerencia dos recursos do hardware usados pelas aplicações; é ele também que implementa as principais abstrações a serem utilizadas pelos programas.


'''Drivers:''' módulos de código específicos para acessar os dispositivos físicos. Como sabemos cada dispositivo possui um determinado driver especifico, por exemplos portas USB, placas de vídeo, webcam, etc. A maior parte dos fabricantes dos hardwares já fornecem os relativos drivers.
Os sistemas operacionais se diferenciam em tamanho, velocidade, suporte a recursos específicos, acesso à rede, etc. A seguir apresentaremos alguns dos tipos de sistemas usuais:
<br>


'''Código de inicialização:''' para ligar ou inicializar uma determina parte ou hardware de sistema deve-se atentar-se para uma série de sequencias de séries de tarefas complexas, como reconhecer os dispositivos instalados, testá-los e configura-los para um uso a posteriori. Outra tarefa fica a cargo de carregar o núcleo do sistema operacional em memória e iniciar sua execução.


'''Programas utilitários:''' são os programas fabricados para facilitar o uso do sistema operacional, permitindo funcionalidades complementares ao núcleo, coo 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, gerencia de janelas, etc.
* '''Batch (de lote):''' como citado na parte do conceito, alguns sistemas iniciais trabalhavam "por lote", ou seja, todos os programas a executar eram enfileirados, com seus dados e as devidas informações para execução. O computador recebia o programa, processava, só que sem interagir com o usuário, o que fomentava um alto grau de desempenho do sistema. Hoje toda interação feita de forma indireta, ou seja, sem o uso do usuário, como transações de bancos de dados, recebe este nome.


= Tipos de SOs =


[[Arquivo:tiposdeso.jpg]]
* '''Distribuído:''' neste os recursos de cada máquina estão disponíveis globalmente, de forma transparente ao usuário. Ao executar 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. Exemplos: Clouds.


Tabela retirada de [JAN04]


Os sistemas operacionais se diferenciam em tamanho, velocidade, suporte a recursos específicos, acesso à rede, etc. A seguir apresentaremos alguns dos tipos de sistemas usuais:
* '''Multi-usuário:''' deve suportar a identificação do "portador" 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 dos recursos por usuários não autorizados previamente. Fundamental para segurança dos SOs de rede e distribuídos. A maior parte dos sistemas operacionais hoje são multi-usuários.


'''Batch (de lote):''' como citado na parte do conceito, alguns sistemas iniciais trabalhavam "por lote", ou seja, todos os programas a executar eram enfileirados, com seus dados e as devidas informações para execução. O computador recebia o programa, processava, só que sem interagir com o usuário, o que fomentava um alto grau de desempenho do sistema. Hoje toda interação feita de forma indireta, ou seja, sem o uso do usuário, como transações de bancos de dados, recebe este nome. Exemplos desses sistemas: OS/360 e VMS, entre outros.


'''De rede:''' para que um sistema operacional seja de rede este deve possuir suporte à operação em rede, basicamente é a capacidade de oferecer às aplicações locais recursos que estejam localizados em outros computadores da rede, como arquivos e impressoras. Na mesma medida devem também disponibilizar recursos locais aos demais computadores, de forma controlada. Nos atuais SOs a maioria oferece esse tipo de função.
* '''Desktop:''' conhecido como "de mesa" é voltado para o usuário doméstico e corporativo para a realização de atividades corriqueiras, como edição de texto, gráficos, planilhas, navegação na internet e reproduções de mídias simples. Suas principais características são interface gráfica, o suporte à  interatividade e a operação de rede. Exemplos: Windows (XP, Vista, 7, 8, etc.), o MacOS X e Linux.


'''Distribuído:''' neste os recursos de cada máquina estão disponíveis globalmente, de forma transparente ao usuário. Ao executar 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. Exemplos: Amoeba e Clouds.


'''Multi-usuário:''' deve suportar a identificação do "portador" 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 dos recursos por usuários não autorizados previamente. Fundamental para segurança dos SOs de rede e distribuídos. A maior parte dos sistemas operacionais hoje são multi-usuários.
* '''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 pelo usuários e seus aplicativos. Grande parte das vezes esse tipo de SO também tem suporte para rede e multi-usuário. Similar ao de rede


'''Desktop:''' conhecido como "de mesa" é voltado para o usuário doméstico e corporativo para a realização de atividades corriqueiras, como edição de texto, gráficos, planilhas, navegação na internet e reproduções de mídias simples. Suas principais características são interface gráfica, o suporte à  interatividade e a operação de rede. Exemplos: Windows (XP, Vista, 7, 8, etc.), o MacOS X e Linux.


'''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 pelo usuários e seus aplicativos. Grande parte das vezes esse tipo de SO também tem suporte para rede e multi-usuário.
* '''Embarcado:''' embarcado (embutido ou ''embedded'') quando é construído para operar sobre um hardware com poucos recursos de processamento, armazenamento e energia. Esse tipo de sistema é encontrado em telefones celulares, sistemas de automação industrial e controladores automotivos, equipamentos eletrônicos de uso doméstico (aparelhos de TV e DVD, fornos micro-ondas, centrais de alarme, etc.). LynxOS, Xylinx e VxWorks são exemplos de SOs voltados para automação. Sistemas operacionais para celulares (smartphones) incluem o Symbian, Android, Apple - iOS 8, entre outros.


'''Embarcado:''' embarcado (embutido ou embedded) quando é construído para operar sobre um hardware com poucos recursos de processamento, armazenamento e energia. Esse tipo de sistema é encontrado em telefones celulares, sistemas de automação industrial e controladores automotivos, equipamentos eletrônicos de uso doméstico (aparelhos de TV e DVD, fornos micro-ondas, centrais de alarme, etc.). LynxOS, Xylinx e VxWorks são exemplos de SOs voltados para automação. Sistemas operacionais para celulares (smartphones) incluem o Symbian, Android, Apple - iOS 8, entre outros.


'''Tempo real:''' apesar do nome este tipo não precisa ser necessariamente ultra-rápido; essencialmente deve ter um comportamento temporal previsível. A estrutura interna de um SO de tempo real deve internamente ter uma estrutura construída de forma a minimizar esperas e latências imprevisíveis, como tempo de acesso a disco e sincronizações excessivas.
* '''Tempo real:''' apesar do nome este tipo não precisa ser necessariamente ultra-rápido; essencialmente deve ter um comportamento temporal previsível. A estrutura interna de um SO de tempo real deve internamente ter uma estrutura construída de forma a minimizar esperas e latências imprevisíveis, como tempo de acesso a disco e sincronizações excessivas. Exemplos: funcionalidade de uma turbina de avião a jato ou uma caldeira industrial.
    ''soft real-time systems'': perda por prazos, implicado por degradação do serviço prestado, exemplo: suporte para gravação de CDs ou reprodução de músicas.
    ''hard real-time systems'': perda de prazo pelo sistema perturbar o objeto controlado, com graves consequências humanas, economicas ou ambientais. Exemplos: funcionalidade de uma turbina de avião a jato ou uma caldeira industrial.


= Funcionalidades =
= Funcionalidades =
Linha 101: Linha 76:
As principais funcionalidades implementadas por um sistema operacional típico são:
As principais funcionalidades implementadas por um sistema operacional típico são:


'''Gerência do Processador:''' gerência de processos ou atividades, visa distribuir a capacidade de processamento de forma justa (não necessariamente igual, pois cada aplicação terá uma demanda distinta de processamento) entre as aplicações, sempre respeitando as prioridades determinadas pelo usuário. Provê uma falsa ideia de processamento independente de cada tarefa, o que o torna mais interativos.


'''Gerência de Memória:''' aqui o objetivo é fornecer a cada aplicação uma área de memória própria, independente e isolada das demais aplicações e inclusive do núcleo do sistema. Este "isolamento" de áreas de memórias melhora a estabilidade e segurança do sistema, pois impede aplicações com erros (ou malwares) de interferir no funcionamento das demais aplicações. No caso da memória RAM existente seja insuficiente para as aplicações, usando o espaço disponível em meio de armazenamento secundário (como disco rígido). A noção de memória virtual, que desvincula os endereços de memória vistos por cada aplicação acessadas pelo processador de memória RAM. Em resumo o usuário tem assim a possibilidade de acesso livro em qualquer posição da memória, sem se atentar a endereços de memória de onde irá executar.
* '''Gerência do Processador:''' gerência de processos ou atividades, visa distribuir a capacidade de processamento de forma justa (não necessariamente igual, pois cada aplicação terá uma demanda distinta de processamento) entre as aplicações, sempre respeitando as prioridades determinadas pelo usuário.
 
 
* '''Gerência de Memória:''' aqui o objetivo é fornecer a cada aplicação uma área de memória própria, independente e isolada das demais aplicações e inclusive do núcleo do sistema. Este "isolamento" de áreas de memórias melhora a estabilidade e segurança do sistema, pois impede aplicações com erros (ou malwares) de interferir no funcionamento das demais aplicações. O usuário tem assim a possibilidade de acesso livro em qualquer posição da memória, sem se atentar a endereços de memória de onde irá executar.


'''Gerência de Dispositivos:''' cada periférico tem suas diferenças, o procedimento de interação com uma placa de rede é adversa totalmente da interação com um disco rígido SCSI. É possível criar uma unica abstração para a maioria dos dispositivos de armazenamento como pen-drives, discos SCSI ou IDE, etc., na forma de um vetor de blocos de dados. Esta função é também conhecida pelo nome de gerência de entrada/saída, e nada mais é que uma forma de implementar a interação com cada dispositivo por meio de drivers e criar modelos abstratos que permitam agrupar vários dispositivos distintos sob a mesma interface de acesso.


'''Gerência de Arquivos:''' constitui-se sobre a gerência de dispositivos e visa criar arquivos e diretórios, definindo sua interface de acesso para o posterior uso. Exemplos disso são conexões de rede (nos sistemas UNIX e Windows, cada socket TCP é visto como um descritor de arquivo no qual pode-se ler ou escrever dados) e as informações do núcleo do sistema (como o diretório/proc do UNIX). Outro curiosidade, no sistema operacional experimental Plan 9, todos os recursos são vistos como arquivos.
* '''Gerência de Dispositivos:''': É possível criar uma unica abstração para a maioria dos dispositivos de armazenamento como pen-drives, discos SCSI ou IDE, etc., na forma de um vetor de blocos de dados. Esta função é também conhecida pelo nome de gerência de entrada/saída.


'''Gerência de Proteção:''' como praticamente tudo está conectado em rede e compartilhados por uma vasta gama de usuários, é importante definir claramente os recursos que cada usuário pode acessar, as formas de acesso permitidas (leitura, escrita, etc.) e garantir que essas definições sejam corretamente realizadas. Para proteger os recursos do sistema contra acessos indevidos é necessário:
    ''1- definir usuários e grupos de usuários;      2- identificar os usuários que se conectam ao sistema, através de procedimentos de autenticação;      3- definir e aplicar regras de controle de acesso aos recursos, relacionado através de usuários, para fins de auditoria e contabilização.'' [MAZ14]


Essas básicas funcionalidades são oferecidas pela maioria dos sistemas operacionais, várias outras agregam aos sistemas modernos, para cobrir aspectos complementares, como a criação da interface gráfica, suporte de rede, fluxos multimídia, gerência de energia, etc.
* '''Gerência de Arquivos:''' constitui-se sobre a gerência de dispositivos e visa criar arquivos e diretórios, definindo sua interface de acesso para o posterior uso.
As funcionalidades dos SOs geralmente são inter-dependentes, exemplificando seria como quando a gerência do processador depende de aspectos da gerência de memória assim como a gerência de memória depende da gerência de dispositivos e da gerência de proteção.
 
 
* '''Gerência de Proteção:''' como praticamente tudo está conectado em rede e compartilhados por uma vasta gama de usuários, é importante definir claramente os recursos que cada usuário pode acessar, as formas de acesso permitidas (leitura, escrita, etc.) e garantir que essas definições sejam corretamente realizadas. ' [MAZ14]
 


[[Arquivo:FuncionalidadedoSO.jpg]]
[[Arquivo:FuncionalidadedoSO.jpg]]
Linha 119: Linha 96:
Figura 4 Funcionalidades do sistema operacional
Figura 4 Funcionalidades do sistema operacional


Um outro conceito a ser lembrando por sua importância é o de política e mecanismo. Politica são os aspectos de decisão mais abstratos, que podem ser resolvidos por algoritmos de nível mais alto, como exemplo decidir a quantidade de memória que cada aplicação ativa deve receber, ou qual o próximo pacote de rede a enviar para satisfazer determinada especificação de qualidade de serviço. Já o mecanismo considera-se o procedimento de baixo nível usado para implementar as políticas, ou seja, atribuir ou retirar memória de uma aplicação, enviar ou receber um pacote de rede, etc. Assim acaba que a interatividade e a eficiência sofrem ganhos sem ter que um código qualquer interaja diretamente com o hardware, tornando mais personalizável. Alguns sistemas, como o InfoKernel permitem que as escolhas de quais politicas mais adequadas adotar sejam feitas pelo próprio sistema
= Referências bibliográficas =


= Referências bibliográficas =
[DEI92] DEITEL, Harvey M. '''An Introduction to Operating Systems'''. 2nd Edtition. Addison-Wesley, Reading, MA, 1992.
 
[JAN04] JANDL, Peter, Jr. '''Notas sobre Sistemas Operacionais'''. Versão 1.1. Peter Jandl Jr. Apostila, IFRN (Instituto Federal do Rio Grande do Norte), RN, 2004.
 
[MAZ14] MAZIERO, Carlos A. '''Sistemas Operacionais: Conceitos e Mecanismos'''. Dainf – UTFPR, PR, 2014.


Válido para consulta: Livros, Artigos e Revistas.
SISTEMA OPERATIVO. In: Wikipédia: a enciclopédia livre. Disponível em: <http://pt.wikipedia.org/w/index.php?title=Sistema_operativo&redirect=no> Acesso em: 29 out 2014.

Edição atual tal como às 00h33min de 3 de dezembro de 2014

Conceito

Vemos um sistema operacional como os programas, implementados como software ou firmware, que tornam o hardware utilizável.O hardware oferece capacidade computacional bruta. Os sistemas operacionais disponibilizam convenientemente tais capacidades aos usuário, gerenciando cuidadosamente o hardware para que se obtenha uma performance adequada. [DEI92, p.3]


A despeito do tipo, sofisticação ou capacidades do computador, um sistema operacional deve seguir os princípios:

  •	Oferecer os recursos do sistema de forma simples e transparente;
  •	Gerenciar a utilização dos recursos existentes buscando seu uso eficiente em termos do sistema;
  •	Garantir a integridade e a segurança dos dados armazenados e processados no sistema e também de seus recursos físicos.
  •	Proporcionar uma interface adequada para que o usuário possa utiliza-lo. 


Um dos primeiros sistemas programáveis construídos foi o computador eletromecânico Mark I, projetado pela IBM e a Universidade de Havard, datado de 1944. Em 1946 o Exército Americano revela seu computador eletrônico digital, o ENIAC, utilizado para cálculos de balística. Porem estes sistemas eram particulares somente a engenheiros que sabiam da arquitetura e funcionamento, eles exerciam o papel de programadores, determinando quais módulos deveriam ser interligados e em que ordem.

Com a proposta feita por Von Neumann de um sistema baseado numa arquitetura composta por três blocos básicos (figura 1) em que a sequência dos processos e passos a serem executadas pela máquina fossem armazenadas nela própria sem necessidade de modificação de seu hardware. O computador proposto por ele era uma máquina genérica, cujo bloco de processador seria capaz de realizar um conjunto de operações logicas, além de algumas de movimentação de dados entre blocos da máquina. As operações eram chamadas de instruções, seriam armazenadas em um bloco de memória enquanto bloco de dispositivos de E/S (entrada e saída) ou I/O (input and output), responsável pela entrada e saída de dados, instruções e controle do sistema.


Figura 1 Arquitetura de Von Neumann

Logo, os sistemas operacionais se tornaram elementos fundamentais para o funcionamento de praticamente qualquer sistema de computação, dos minúsculos sistemas embarcados e telefones celulares aos gigantescos centros de processamento de dados das grandes empresas. O sistema operacional é uma camada de software que opera entre o hardware e os programas aplicativos voltados ao usuário final. O sistema operacional é uma estrutura de software ampla, muitas vezes 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). Os objetivos básicos de um sistema operacional podem ser sintetizados em duas palavras-chave: “abstração” e “gerência”.


Figura 2 Estrutura de um Sistema Operacional típico

Estrutura

Figura 3 Estrutura de um sistema operacional


Como um sistema operacional não é um bloco de caráter único, na realidade, ele é composto de diversos componentes com objetivos e funcionalidades complementares. Dentre os mais importantes temos:


  • Núcleo: responsável pela gerencia dos recursos do hardware usados pelas aplicações; é ele também que implementa as principais abstrações a serem utilizadas pelos programas.


  • Drivers: módulos de código específicos para acessar os dispositivos físicos. Como sabemos cada dispositivo possui um determinado driver especifico, por exemplos portas USB, placas de vídeo, webcam, etc.


  • Código de inicialização: para ligar ou inicializar uma determina parte ou hardware de sistema deve-se atentar-se para uma série de sequencias de séries de tarefas complexas, como reconhecer os dispositivos instalados, testá-los e configura-los para um uso a posteriori.


  • Programas utilitários: são os programas fabricados para facilitar o uso do sistema operacional, permitindo funcionalidades complementares ao núcleo, coo 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, gerencia de janelas, etc.

Tipos de SOs

Os sistemas operacionais se diferenciam em tamanho, velocidade, suporte a recursos específicos, acesso à rede, etc. A seguir apresentaremos alguns dos tipos de sistemas usuais:


  • Batch (de lote): como citado na parte do conceito, alguns sistemas iniciais trabalhavam "por lote", ou seja, todos os programas a executar eram enfileirados, com seus dados e as devidas informações para execução. O computador recebia o programa, processava, só que sem interagir com o usuário, o que fomentava um alto grau de desempenho do sistema. Hoje toda interação feita de forma indireta, ou seja, sem o uso do usuário, como transações de bancos de dados, recebe este nome.


  • Distribuído: neste os recursos de cada máquina estão disponíveis globalmente, de forma transparente ao usuário. Ao executar 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. Exemplos: Clouds.


  • Multi-usuário: deve suportar a identificação do "portador" 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 dos recursos por usuários não autorizados previamente. Fundamental para segurança dos SOs de rede e distribuídos. A maior parte dos sistemas operacionais hoje são multi-usuários.


  • Desktop: conhecido como "de mesa" é voltado para o usuário doméstico e corporativo para a realização de atividades corriqueiras, como edição de texto, gráficos, planilhas, navegação na internet e reproduções de mídias simples. Suas principais características são interface gráfica, o suporte à interatividade e a operação de rede. Exemplos: Windows (XP, Vista, 7, 8, etc.), o MacOS X e Linux.


  • 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 pelo usuários e seus aplicativos. Grande parte das vezes esse tipo de SO também tem suporte para rede e multi-usuário. Similar ao de rede


  • Embarcado: embarcado (embutido ou embedded) quando é construído para operar sobre um hardware com poucos recursos de processamento, armazenamento e energia. Esse tipo de sistema é encontrado em telefones celulares, sistemas de automação industrial e controladores automotivos, equipamentos eletrônicos de uso doméstico (aparelhos de TV e DVD, fornos micro-ondas, centrais de alarme, etc.). LynxOS, Xylinx e VxWorks são exemplos de SOs voltados para automação. Sistemas operacionais para celulares (smartphones) incluem o Symbian, Android, Apple - iOS 8, entre outros.


  • Tempo real: apesar do nome este tipo não precisa ser necessariamente ultra-rápido; essencialmente deve ter um comportamento temporal previsível. A estrutura interna de um SO de tempo real deve internamente ter uma estrutura construída de forma a minimizar esperas e latências imprevisíveis, como tempo de acesso a disco e sincronizações excessivas. Exemplos: funcionalidade de uma turbina de avião a jato ou uma caldeira industrial.

Funcionalidades

As principais funcionalidades implementadas por um sistema operacional típico são:


  • Gerência do Processador: gerência de processos ou atividades, visa distribuir a capacidade de processamento de forma justa (não necessariamente igual, pois cada aplicação terá uma demanda distinta de processamento) entre as aplicações, sempre respeitando as prioridades determinadas pelo usuário.


  • Gerência de Memória: aqui o objetivo é fornecer a cada aplicação uma área de memória própria, independente e isolada das demais aplicações e inclusive do núcleo do sistema. Este "isolamento" de áreas de memórias melhora a estabilidade e segurança do sistema, pois impede aplicações com erros (ou malwares) de interferir no funcionamento das demais aplicações. O usuário tem assim a possibilidade de acesso livro em qualquer posição da memória, sem se atentar a endereços de memória de onde irá executar.


  • Gerência de Dispositivos:: É possível criar uma unica abstração para a maioria dos dispositivos de armazenamento como pen-drives, discos SCSI ou IDE, etc., na forma de um vetor de blocos de dados. Esta função é também conhecida pelo nome de gerência de entrada/saída.


  • Gerência de Arquivos: constitui-se sobre a gerência de dispositivos e visa criar arquivos e diretórios, definindo sua interface de acesso para o posterior uso.


  • Gerência de Proteção: como praticamente tudo está conectado em rede e compartilhados por uma vasta gama de usuários, é importante definir claramente os recursos que cada usuário pode acessar, as formas de acesso permitidas (leitura, escrita, etc.) e garantir que essas definições sejam corretamente realizadas. ' [MAZ14]


Figura 4 Funcionalidades do sistema operacional

Referências bibliográficas

[DEI92] DEITEL, Harvey M. An Introduction to Operating Systems. 2nd Edtition. Addison-Wesley, Reading, MA, 1992.

[JAN04] JANDL, Peter, Jr. Notas sobre Sistemas Operacionais. Versão 1.1. Peter Jandl Jr. Apostila, IFRN (Instituto Federal do Rio Grande do Norte), RN, 2004.

[MAZ14] MAZIERO, Carlos A. Sistemas Operacionais: Conceitos e Mecanismos. Dainf – UTFPR, PR, 2014.

SISTEMA OPERATIVO. In: Wikipédia: a enciclopédia livre. Disponível em: <http://pt.wikipedia.org/w/index.php?title=Sistema_operativo&redirect=no> Acesso em: 29 out 2014.