segunda-feira, 14 de janeiro de 2019

SISTEMAS OPERACIONAIS – PARTE 1




O sistema operacional é o software feito para controlar componentes eletrônicos de um dispositivo com capacidade computacional (computadores, celulares, tablets, etc), facilitando, desta forma,  sua utilização por programas que não precisarão ser programados especificamente para cada tipo de dispositivo.

Ele é o primeiro software visto assim que o computador é ligado e, para a maioria dos usuários, ele praticamente define o computador como um todo. Por exemplo, atualmente muitas pessoas perguntam se o seu pc é Windows ou Mac, ou se o seu telefone é Android ou iPhone.

 Porém, nem Windows nem Android são marcas de computador. Eles são sistemas operacionais utilizados, respectivamente, em computadores desktop e dispositivos móveis (como celulares e tablets).

Para o usuário final, não faz muita diferença se o PC é um DELL ou um HP. Se o sistema operacional for Windows, então ele (provavelmente) saberá utilizá-lo para instalar e executar seus programas.

 E daí tiramos a primeira função do sistema operacional: fornecer a usuários finais e programadores de aplicativos uma visão padronizada do computador, independente do hardware que o compõe.

Esta padronização vai muito mais longe do que se imagina: mesmo em uma mesma marca de computador, podem ser encontrados vários modelos de discos rígidos e adaptadores de vídeo, todos eles incompatíveis entre si.

 Mas uma vez que o sistema operacional consiga reconhecer e controlar aquele modelo específico de disco ou vídeo, tudo fica padronizado e transparente para os programas instalados.

No caso do Mac e do iPhone, já que estes dispositivos normalmente só rodam o sistema da própria Apple, esta distinção entre o hardware e o sistema operacional é menos evidente, mas pode ser notada quando um programa não pode ser instalado porque “o sistema precisa ser atualizado”. 

Isso ocorre quando um programa precisa de uma função que apenas um sistema mais novo oferece.

Para que o sistema operacional possa mostrar ao usuário final uma visão padronizada do computador, ele deve gerenciar todo o hardware presente no computador. Daí tiramos a segunda função do sistema operacional, que é gerenciar os recursos do hardware e compartilhá-los de forma eficiente e segura entre todos os usuários/programas que precisarem utilizá-los.

 De uma forma simplificada, o sistema gerencia pelo menos os seguinte recursos: memória RAM, disco rígido, utilização do processador e acesso aos dispositivos externos (como impressoras, e rede).

Os diferentes sistemas operacionais

Cada fabricante (ou equipe desenvolvedora no caso de sistemas gratuitas) escreve seu sistema focando em um conjunto de dispositivos onde ele deverá ser utilizado, e neste conjunto de dispositivos, alguns tipos diferentes de hardware. Em especial, é muito importante definir a CPU – ou processador-  para qual o sistema será desenvolvido.

Uma vez desenvolvido o sistema, ele é preparado para instalação para cada tipo de dispositivo e CPU que ele deverá suportar.

Da combinação do sistema operacional com a CPU, obtém-se o conceito de system (ou sistema). Aplicativos são preparados para rodar em sistemas específicos. A mesma versão de um determinado aplicativo normalmente funciona em qualquer computador ou dispositivo que suporte o mesmo system e não irão funciona em computadores ou dispositivos com system diferentes.


Figura 1: tela do Windows mostrado as especificações do sistema. Notem que ele inclui o Processador e o sistema operacional assim como sua versão e informações básicas sobre o dispositivo.

Nota: especificamente os sistemas Windows e LINUX de 64 bits rodam programas de usuário em 32 bits mas isso só é possível porque estes sistemas têm provisões específicas para isso e rodam em CPUs que podem ser chaveados entre “modo 32 bits” e “modo 64 bits”.

Não é possível instalar um sistema operacional preparado para a CPU ARM em um computador que tem uma CPU INTEL I7. Também não é possível instalar diretamente o sistema operacional preparado para um computador em um telefone.
Atualmente, temos os sistemas mais utilizados, de acordo com o tipo de dispositivo:
Para computadores
  • Windows
  • Mac OSX
  • Linux
Para telefones celulares e tablets
  • IOS
  • Android
  • Windows Phone
Sistemas antigos
  • Para microcomputadores
    • MSDOS
    • CPM
    • BASIC*
  • Para computadores grandes
    • OS360
    • ATT UNIX
    • VAX/VMS

Componentes do sistema operacional

Kernel (ou núcleo do sistema)

Como diz o nome, o kernel é o centro do sistema operacional. Ele é o componente que se comunica com todos os outros componentes e também é quem provê a interface de programas de usuário que o sistema operacional oferece aos programadores de aplicativos. É o primeiro módulo carregado na memória quando o sistema inicia, quando então passa a ser responsável por carregar todos os outros módulos do sistema e inclusive o programa que dá acesso do usuário ao computador.

O Kernel é o que, em última análise, define o todo o comportamento do Sistema Operacional. Dentro do kernel ficam módulos responsáveis pelas seguintes funções:
  • Gerenciamento de todos os programas carregados na memória.
  • Gerenciamento da memória RAM e seu compartilhamento entre os programas.
  • Gerenciamento de todos os discos reconhecidos pelo sistema.
  • Gerenciamento de todas as funções da CPU.
  • Gerenciamento da sequência de inicialização do computador, incluindo o carregamento de todos os outros módulos do sistema e finalmente a interface de usuário.
Uma característica interessante do Kernel é o fato que ele é executado em um modo da CPU que permite acesso completo a todas as funções da mesma, assim como acesso completo a todos os sistemas que compõem o hardware do computador (memória, controladores de disco, interrupção, energia, etc..).

 Este modo de operação da CPU é chamado de “Kernel mode”, e é um modo restrito ao kernel e os módulos carregados por ele. Um programa de usuário nunca tem acesso direto a este modo e depende do kernel para acessar qualquer hardware conectado ao computador.

“Device drivers” ou “drivers de dispositivo”


Uma vez que o Sistema Operacional tem que suportar todos os tipos de hardware, não faria muito sentido que o programa que controla cada modelo disponível de cada tipo de dispositivo ficasse no kernel. Se fosse assim, haveria um grande desperdício de memória. Para resolver isso, existem os device drivers.


Estes são módulos que controlam funções específicas e são carregados pelo kernel à medida que os dispositivos são detectados pelo sistema. Porém, ao contrário dos programas de usuário, uma vez que o device driver é carregado, ele passa a funcionar junto com o kernel e em “kernel mode” (quase como uma parte dele) e, da mesma forma que o kernel, os device drivers tem acesso irrestrito ao hardware do computador.


Nem todo device driver serve para controlar um dispositivo. Alguns servem para implantar funções intermediárias (como por exemplo se comunicar com o barramento USB onde os dispositivos são conectados), e outros servem para implementar funções não obrigatórias do kernel (como o protocolo IPV6, que nem sempre é suportado pela rede local).


Uma outra característica importante dos device drivers é o fato que eles normalmente não são programados pelas mesmas pessoas que implementam o kernel. Na maioria das vezes, os times nem são da mesma empresa. Isso possibilita que um fabricante de dispositivo possa programar sozinho o device driver para fornecer aos compradores do seu dispositivo o suporte em vários sistemas operacionais diferentes.


 Em termos gerais, quando compramos uma placa de rede que diz na caixa “funciona em Windows e em MAC OSX”, o fabricante está dizendo que estão disponíveis device drivers para estes sistemas. Afinal, com o driver correto, qualquer sistema operacional pode utilizar os dispositivos.


Chamadas de sistema


Como foi mencionado acima, uma das funções do sistema operacional é fornecer uma visão padronizada do sistema aos aplicativos para que estes não tenham que se preocupar com o hardware. 


 Este objetivo é atingido através do disponibilização, pelo sistema operacional, das “chamadas de sistema” (em inglês, SYSCALLs). O conjunto de todas as SYSCALLS de um sistema, junto com as especificações dos parâmetros de entrada e saída para elas, é chamado de “Kernel API”  ou, traduzindo, “Interface do Kernel para programadores de aplicações”.


Uma vez que os programas de usuário não tem permissão para acessar diretamente o hardware, todos os aspectos do processamento que não dependam exclusivamente do que está na memória do programa ocorrem dentro do kernel e são, portanto, requisitados através de chamadas de sistema. Numa lista simplificada, as seguintes operações são feitas desta forma: leitura/escrita de arquivos, envio/recebimentos dos dados na rede, execução de programas, escritas de dados na tela, suspensão do programa, leitura de dados do teclado, etc..


Uma outra consequência interessante deste modelo de chamadas de sistema é que um programa de usuário em qualquer momento só pode estar em 2 estados: ou ele está executando instruções no processador (fazendo contas e acessando a memória do próprio programa), ou então está aguardando o término de uma SYSCALL (e neste caso ele estará aguardando o kernel, que executa em “kernel mode”.


Existem programas capazes de monitorar as chamadas de sistema de outros programas e servem para dar uma boa idéia do que o programa monitorado está fazendo e são extremamente úteis para encontrar problemas ou fazer engenharia reversa. No LINUX, o programa se chama “strace”.


Interpretador de comandos ou Shell


O interpretador de comandos ou shell é o programa que “dá a cara” ao sistema operacional. Ele é o programa que aparece assim que o usuário inicia uma sessão e é através do shell que o usuário inicia sua interação o computador, iniciando e instalando programas. No Window, é o Windows Explorer; no Mac OSX, FINDER; e na família UNIX/LINUX (no modo console) é o bash.


O interpretador de comandos ou Shell (assim como os programas utilitários explicados abaixo) não é parte do sistema operacional, afinal ele é apenas um programa de usuário, e como tal não é executado no “modo Kernel” e sim no “modo usuário”. Inclusive, é possível escolher vários interpretadores de comandos diferentes para o mesmo sistema operacional, assim como é possível utilizar o mesmo interpretador de comando em vários sistemas operacionais diferentes.


 Porém, cada distribuição de sistema operacional já vem com um interpretador de comandos padrão. Saber utilizar o interpretador de comandos é muito importante no conhecimento do sistema operacional pois é através do interpretador que se manipula o computador como um todo. Por este motivo, optamos por incluir o interpretador de comandos nesta seção.


Utilitários


Os utilitários são programas de modo usuário  que tem a função de configurar o sistema operacional. Assim como o interpretador de comandos, eles não fazem parte integral do sistema operacional, mas é importante conhecê-los para configurar e manipular o sistema.
No UNIX/LINUX/Mac OSX

  • comandos para gerenciar armazenamento: mount/umount, mkfs, fsck
  • comandos para gerenciar processos: top, ps, kill, nice, renice
  • arquivos de inicialização do diretório /etc (particularmente o init.d)

No Windows (a maioria dos programas são gráficos)


  • painel de controle
  • mmc
  • administrador do computador
  • comandos net, taskkill, shutdown, time, etc..


Resumindo

Os sistemas operacionais são a nossa forma de interagir com todos os computadores e dispositivos inteligentes. Seu conhecimento nos possibilita utilizar melhor os computadores e escrever programas mais eficientes. Nos próximos capítulos iremos estudar melhor as funcionalidades do sistema operacional


Obrigado e até a próxima.
Ariel Nigri
                                                          FONTE: WINCO SISTEMAS

Nenhum comentário: