Entendendo a estrutura de um sistema operacional

nfo94

Natália Oliveira

Posted on October 28, 2020

Entendendo a estrutura de um sistema operacional

Um sistema operacional é formado por várias rotinas, que em conjunto são denominadas núcleo do sistema, ou kernel.

Algumas funções do kernel:

  • Tratamento de interrupções e exceções
  • Criação e eliminação de processos e threads
  • Sincronização e comunicação entre processos e threads
  • Escalonamento e controle dos processos e threads
  • Gerência de memória
  • Gerência do sistema de arquivos
  • Gerência de dispositivos de E/S
  • Suporte a redes locais e distribuídas
  • Contabilização do uso do sistema
  • Auditoria e segurança do sistema

Modos de acesso ao sistema

Para proteger o núcleo do sistema e o acesso ao seus serviço, alguns mecanismos de segurança são implantados como, por exemplo, o modo de acesso. Tente imaginar o que pode acontecer caso qualquer aplicação, mesmo as maliciosas, pudessem acessar com facilidade o kernel do computador: todo o sistema poderia ficar comprometido!

No modo usuário a aplicação só tem acesso a instruções não privilegiadas. No modo kernel a aplicação tem acesso a todo conjunto de instruções do processador.

Rotinas do sistema e system calls

As funções do núcleo são implementadas, com instruções privilegiadas, por rotinas do sistema operacional. O controle da execução dessas rotinas é realizado por system calls (chamadas do sistema).

Quando alguma aplicação deseja chamar uma rotina do sistema, o system call é ativado e verifica se a aplicação possui privilégios de administrador do sistema para isso. Trata-se de um mecanismo de proteção por software.

Você a esse ponto provavelmente está pensando em um terminal e nas vezes em que teve que usar o sudo para realizar alguma tarefa ou executar alguma aplicação, como o Docker, por exemplo.

Quando damos um comando com uma linguagem de programação para, digamos, leitura de um arquivo, acontece o seguinte:

(...) o comando da linguagem de alto nível é convertido pelo compilador para uma chamada a uma rotina específica que, quando executada, verifica a ocorrência de erros e retorna os dados ao programa de forma transparente aos usuários.

Essa é uma chamada explícita a uma rotina do sistema operacional. Também podemos ter uma chamada implícita, que ocorre quando feita por intermédio de um comando da própria linguagem de programação.

POSIX

POSIX significa portable operating system interface for unix. Caso não se lembre, Unix é o precursor de sistemas operacionais como Linux e MacOS. O POSIX é uma biblioteca de chamada, resultado de uma padronização, pensada em portabilidade entre sistemas Unix.

Obviamente, cada sistema operacional tem seu conjunto de rotinas, com nomes específicos e parâmetros específicos, então não é possível portar uma aplicação diretamente de um sistema operacional para outro sem fazer ajustes, daí o POSIX.

Linguagem de comandos (linguagem de controle)

É uma linguagem que permite a comunicação do usuário com o sistema operacional para realizar tarefas, como ler arquivos ou consultar pastas (diretórios).

Pense no terminal linux, por exemplo. Usamos, normalmente, o bash shell, que significa bourne again shell. Um shell é um interpretador de comandos da linguagem de controle. No Linux falamos em shell script, que nos permite automatizar tarefas.

Alt Text

Ativação do sistema

Quando você liga seu computador o sistema operacional ainda não está carregado na memória. O Windows, digamos, está guardado no HD (hard drive), ocupando trocentos gigas, ou seja, na memória secundária.

Ao ligar o pc, o sistema operacional precisa ser carregado na memória principal, nos seu 4gb de RAM (random access memory), ou seja, na memória principal. Quem faz essa tarefa é o boot (ativação do sistema), com o programa de boot loader.

O processo é o seguinte:

  1. Execução do boot loader
  2. Boot loader chama o power-on self test para verificar a integridade do hardware
  3. Verificação se há um dispositivo de armazenamento com um sistema operacional
  4. Se não houver, apresenta mensagem de erro
  5. Se houver, carrega-se instruções na memória num bloco chamado boot sector
  6. Executa-se as instruções
  7. Finalmente o sistema operacional é carregado na memória principal
  8. Execução de arquivos de inicialização e customização (no meu caso, por exemplo, meu Linux carrega um Remap27.sh, porque remapeei uma tecla)

Arquiteturas do núcleo (kernel)

Existem diversos tipos de arquiteturas do kernel:

  • Arquitetura monolítica
  • Arquitetura de camadas
  • Arquitetura de máquina virtual
  • Arquitetura microkernel

A arquitetura monolítica possui vários módulos compilados separadamente, que depois são linkados para formar um único programa executável. Aqui, pense no MS-DOS da da Microsoft.

A arquitetura em camadas consiste em níveis sobrepostos, onde cada camada tem um conjunto de funções que podem ser utilizadas pelas camadas superiores. Aqui podemos pensar na maioria das versões do Linux, ou o Windows.

Na arquitetura de máquina virtual cria-se um nível intermediário entre hardware e sistema operacional, que cria diversas máquina virtuais independentes com uma cópia virtual do hardware. Isso é útil para

  • Portabilidade de código
  • Consolidação de servidores (executar diversas aplicações em uma única máquina ao invés de diversos servidores separados)
  • Aumento da disponibilidade (qualquer problema com uma VM basta restaurar a cópia da VM em outro servidor)
  • Facilidade de escalabilidade e balanceamento de carga (se o sistema ficar sobrecarregado a VM pode ser migrada para outro ambiente com facilidade)
  • Facilidade no desenvolvimento de software (mais fácil de testar software em dois sistemas operacionais diferentes)

A arquitetura de microkernel é pensada para tornar o sistema operacional menor e mais simples. Para isso, os serviços do sistema são disponibilizados por processos,e cada um é responsável por fornecer um conjunto específico de funções.

Nessa arquitetura chamamos de cliente a aplicação que solicita um serviço, e servidor o processo que responde essa solicitação. O núcleo aqui é focado em realizar essa comunicação entre cliente e servidor.

Para ir mais a fundo no assunto dá uma lida no livro Arquitetura de Sistemas Operacionais dos mestres Francis Machado e Luiz Maia.


Fontes:
MACHADO, Francis Berenger; MAIA, Luiz Paulo. Arquitetura de Sistemas Operacionais: Incluindo Exercícios com o Simulador SOSIM e Questões do ENADE. Rio de Janeiro: LTC, 2013.


Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar.

💖 💪 🙅 🚩
nfo94
Natália Oliveira

Posted on October 28, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Entendendo a estrutura de um sistema operacional
sistemasoperacionais Entendendo a estrutura de um sistema operacional

October 28, 2020

O que é um processo em um sistema operacional?
sistemasoperacionais O que é um processo em um sistema operacional?

October 21, 2020