O que é um Sistema Operacional?

Um sistema operacional (SO) é o software fundamental que gerencia os recursos de hardware de um computador e fornece serviços para programas aplicativos. Ele atua como uma camada intermediária entre o usuário e o hardware, facilitando a execução de tarefas e garantindo que múltiplos programas possam compartilhar recursos sem conflitos.

O SO é responsável por inicializar o sistema, gerenciar processos, memória, dispositivos de entrada e saída, sistema de arquivos, segurança e rede. Sem um SO, o programador precisaria interagir diretamente com o hardware, o que seria extremamente complexo e ineficiente. Os principais objetivos de um SO são: proporcionar conveniência ao usuário, melhorar a eficiência do sistema e permitir a evolução do hardware e software.

Exemplos de sistemas operacionais incluem Windows, Linux, macOS, Android e iOS, cada um projetado para diferentes plataformas e necessidades.

Funções Principais

As funções de um sistema operacional podem ser divididas em várias áreas de gerenciamento. Abaixo, destacamos as principais:

  • Gerenciamento de Processos: O SO controla a criação, escalonamento e término de processos. Ele decide qual processo será executado pela CPU em cada instante, utilizando algoritmos como Round-Robin, Prioridades e Múltiplas Filas. Além disso, gerencia a comunicação e sincronização entre processos (IPC).
  • Gerenciamento de Memória: O SO aloca e desaloca memória para os processos, gerencia a memória virtual, a paginação e a segmentação. Ele garante que cada processo tenha seu espaço de endereçamento isolado, protegendo a integridade do sistema.
  • Gerenciamento de Dispositivos: Através de drivers, o SO controla os dispositivos de entrada e saída (teclado, mouse, discos, impressoras, etc.) e fornece uma interface uniforme para os programas. Ele trata as interrupções e gerencia os buffers de dados.
  • Gerenciamento de Arquivos: O SO organiza os dados em arquivos e diretórios, controla permissões de acesso e gerencia o espaço em disco. Sistemas de arquivos como ext4, NTFS e FAT32 são implementados pelo SO.
  • Segurança e Proteção: O SO implementa mecanismos para proteger o sistema contra acessos não autorizados, garantindo que apenas processos autorizados possam acessar determinados recursos. Isso é feito através de contas de usuário, permissões, criptografia e auditoria.

Tipos de Sistemas Operacionais

Existem diferentes tipos de sistemas operacionais, cada um adequado a um contexto específico. Os principais são:

  • Batch (Lote): Processam tarefas em sequência, sem interação do usuário durante a execução. Eram comuns em mainframes antigos para processamento de grandes volumes de dados.
  • Tempo Compartilhado (Time-Sharing): Permitem que múltiplos usuários interajam simultaneamente com o computador, alternando rapidamente o uso da CPU. O Unix foi um dos pioneiros nesse modelo.
  • Sistemas Distribuídos: Conjunto de computadores independentes que se apresentam como um único sistema para o usuário. Ex: clusters, grids, sistemas como Kubernetes.
  • Tempo Real: Sistemas que devem responder a eventos dentro de prazos rigorosos. Usados em controle de processos industriais, aviônica, sistemas médicos. Dividem-se em hard real-time e soft real-time.
  • Embarcados: Sistemas operacionais projetados para dispositivos com recursos limitados, como smartphones, IoT, eletrodomésticos. Ex: FreeRTOS, Embedded Linux.

Chamadas de Sistema

As chamadas de sistema (system calls) são a interface de programação entre os aplicativos e o kernel. Quando um programa precisa realizar uma operação que requer privilégios do kernel (como ler um arquivo ou criar um processo), ele faz uma chamada de sistema.

As system calls podem ser categorizadas em:

  • Controle de processos: fork(), exec(), exit(), wait()
  • Gerenciamento de arquivos: open(), read(), write(), close()
  • Gerenciamento de dispositivos: ioctl(), read(), write()
  • Comunicação: pipe(), socket(), shmget()
  • Informação: getpid(), time()

Exemplo em C usando a chamada write:

#include <unistd.h>

int main() {
    const char *mensagem = "Olá, kernel!\n";
    write(1, mensagem, 14);  // 1 = saída padrão (stdout)
    return 0;
}

Neste exemplo, a função write é uma system call que solicita ao kernel para escrever a string no terminal. O valor de retorno indica quantos bytes foram escritos. As system calls são essenciais para qualquer interação com recursos gerenciados pelo SO.

Estrutura do Sistema Operacional

A estrutura interna de um sistema operacional pode assumir diferentes arquiteturas. As principais são:

  • Monolítico: O kernel é um único programa grande que contém todos os serviços (gerenciamento de processos, memória, drivers, sistema de arquivos) executando no modo kernel. É comum em sistemas Unix/Linux. Apesar de monolítico, o Linux moderno suporta módulos carregáveis dinamicamente.
  • Microkernel: O kernel mínimo contém apenas os serviços essenciais (IPC, gerenciamento de memória básico, escalonamento). Os demais serviços, como sistema de arquivos e drivers, rodam como processos no espaço do usuário. Ex: Minix, QNX. Isso melhora a modularidade e a segurança, mas pode ter desempenho inferior devido ao custo das trocas de contexto.
  • Camadas (Layered): O sistema é organizado em camadas hierárquicas, onde cada camada oferece serviços à camada superior e utiliza serviços da inferior. Ex: sistema THE (Dijkstra). Essa abordagem facilita o desenvolvimento e a depuração.
  • Híbrido: Combina elementos de monolítico e microkernel. O Windows NT, por exemplo, usa um kernel híbrido com alguns serviços no kernel e outros no espaço do usuário.

Conclusão

Nesta aula, exploramos os conceitos essenciais dos sistemas operacionais, desde sua definição até a estrutura interna. Vimos que o SO é o software central que gerencia todos os recursos do computador, oferecendo uma base para execução de aplicativos. As funções de gerenciamento de processos, memória, dispositivos e arquivos são fundamentais para o funcionamento correto e eficiente do sistema.

Entender os tipos de SO, as chamadas de sistema e as arquiteturas de kernel é crucial para quem deseja trabalhar com desenvolvimento de software, administração de sistemas ou ciência da computação. Nos próximos encontros, aprofundaremos em tópicos como escalonamento de processos, gerência de memória virtual e sistemas de arquivos.

Perguntas Frequentes

Qual a diferença entre modo usuário e modo kernel?

O modo usuário (user mode) é um nível de privilégio restrito onde as aplicações executam. Elas não podem acessar diretamente o hardware ou instruções privilegiadas. O modo kernel (kernel mode) é o nível mais privilegiado, onde o sistema operacional executa e tem acesso total ao hardware. Quando uma aplicação precisa de um serviço do sistema, ela faz uma chamada de sistema que transfere o controle para o kernel.

O que é um processo?

Um processo é um programa em execução, incluindo seu código, dados, pilha, registradores e recursos alocados (como arquivos abertos). Cada processo possui um espaço de endereçamento próprio e é gerenciado pelo SO através de seu bloco de controle de processo (PCB). O SO é responsável por criar, escalonar e destruir processos conforme necessário.

O que é memória virtual?

Memória virtual é uma técnica que permite que um programa use mais memória do que a fisicamente disponível no sistema. O SO gerencia a transferência de dados entre a memória RAM e o disco (swap) de forma transparente para o programa. Isso permite que programas maiores que a memória física sejam executados e isola o espaço de endereçamento de cada processo, aumentando a segurança.

Qual a função do escalonador de processos?

O escalonador (scheduler) é o componente do SO que decide qual processo deve ser executado pela CPU a cada momento. Ele utiliza algoritmos como First-Come First-Served (FCFS), Shortest Job First (SJF), Round-Robin (RR) e escalonamento por prioridades. O objetivo é otimizar o uso da CPU, maximizar a vazão, minimizar o tempo de resposta e evitar starvation (adiamento indefinido).

O que é uma chamada de sistema?

Uma chamada de sistema (system call) é um mecanismo pelo qual um programa no espaço do usuário solicita um serviço ao kernel do sistema operacional. Exemplos incluem leitura/escrita de arquivos, criação de processos e comunicação com dispositivos. As system calls são a interface fundamental entre aplicativos e o SO.