Sistemas Operacionais

e Softwares de Sistema

Organização de Computadores

O que é um Sistema Operacional?

O Sistema Operacional (SO) é o software que gerencia o hardware e oferece serviços aos programas. É a camada intermediária entre o usuário/aplicativos e a máquina física.

Sem SO, cada programa teria que controlar diretamente o hardware. O SO faz duas coisas centrais: ser uma máquina estendida (esconde a complexidade do hardware) e um gerenciador de recursos (distribui CPU, memória e dispositivos entre os programas).

Onde o SO se encaixa

Usuário
Aplicativos
Software de Sistema (compiladores, utilitários)
Sistema Operacional (kernel)
Hardware

Cada camada se apoia na de baixo e serve a de cima. O kernel é o núcleo do SO: roda em modo privilegiado e tem acesso direto ao hardware.

Os aplicativos pedem serviços ao SO por meio de chamadas de sistema (system calls), como abrir um arquivo ou enviar dados pela rede.

Principais funções do SO

GerênciaO que faz
ProcessosCria, escalona e encerra programas em execução; divide o tempo da CPU.
MemóriaAloca e protege a memória entre os processos; gerencia memória virtual.
ArquivosOrganiza dados em arquivos e pastas; controla acesso.
Dispositivos (E/S)Coordena periféricos por meio de drivers.
SegurançaAutentica usuários e controla permissões.
RedeGerencia comunicação entre computadores.

Processos e escalonamento

Um processo é um programa em execução, com seu próprio espaço de memória. Como há mais processos que núcleos, o SO faz multitarefa: alterna rapidamente entre eles, dando a impressão de simultaneidade.

O escalonador decide quem usa a CPU e por quanto tempo (a "fatia de tempo" ou quantum).

Estados de um processo

  • Pronto: esperando a CPU.
  • Executando: usando a CPU.
  • Bloqueado: esperando E/S.

Threads são linhas de execução dentro de um mesmo processo, compartilhando sua memória — úteis para fazer várias coisas ao mesmo tempo (ex.: baixar e exibir simultaneamente).

Gerência de memória e memória virtual

O SO dá a cada processo a ilusão de ter toda a memória só para si — a memória virtual. Endereços virtuais são traduzidos para físicos pela MMU (hardware).

Sistema de arquivos

É a forma como o SO organiza os dados no armazenamento, em arquivos e diretórios (pastas), escondendo os detalhes físicos do disco.

Sistema de arquivosUsado por
NTFSWindows
ext4Linux
APFSmacOS
FAT32 / exFATPendrives, cartões SD

O sistema de arquivos também controla permissões (quem pode ler/escrever/executar) e mantém metadados (data, tamanho, dono).

Tipos de Sistemas Operacionais

Desktop

Windows, macOS, distribuições Linux. Foco em uso pessoal e produtividade.

Móvel

Android, iOS. Otimizados para bateria, toque e mobilidade.

Servidor / Embarcado

Linux Server, Windows Server; e os de tempo real em carros, eletrodomésticos, IoT.

Quanto à interação: monousuário/multiusuário, monotarefa/multitarefa e, em casos críticos, tempo real (resposta dentro de um prazo garantido).

Software de Sistema x Aplicativo

Software de Sistema

Faz o computador funcionar e dá suporte aos demais programas.

Ex.: sistema operacional, drivers, compiladores, montadores, utilitários (antivírus, desfragmentador, backup), firmware/BIOS.

Software Aplicativo

Resolve tarefas do usuário final.

Ex.: navegador, editor de texto, planilha, jogos, players de mídia, aplicativos de banco.

Softwares de sistema essenciais

SoftwarePapel
Tradutores (compilador, interpretador, montador)Convertem código-fonte em linguagem de máquina executável.
DriversPermitem ao SO comunicar-se com cada dispositivo de hardware.
UtilitáriosManutenção do sistema: backup, compactação, antivírus, limpeza.
Firmware (BIOS/UEFI)Inicia o computador e carrega o SO (boot).
Carregador (loader) e linkerMontam e carregam programas na memória para execução.

O processo de inicialização (boot)

1. Liga o computador
2. BIOS/UEFI (firmware na ROM) faz o POST
   (testa hardware)
3. Localiza o dispositivo de boot
4. Carrega o bootloader (ex.: GRUB)
5. Bootloader carrega o kernel do SO
6. SO inicia serviços e a interface do usuário

Esse encadeamento mostra as camadas em ação: do firmware gravado em ROM até a interface gráfica, cada etapa entrega o controle à seguinte.

Aprofundamento: modo usuário, modo núcleo e a trap

A proteção do sistema depende de um suporte do hardware: a CPU opera em pelo menos dois níveis de privilégio (os "anéis"). Aplicativos rodam em modo usuário (restrito); o kernel roda em modo núcleo (acesso total).

Essa fronteira é o que impede um aplicativo de derrubar o sistema ou ler a memória de outro: todo acesso sensível passa, obrigatoriamente, pelo kernel.

Aprofundamento: algoritmos de escalonamento

O escalonador decide qual processo pronto recebe a CPU. Há vários algoritmos, com compromissos diferentes:

AlgoritmoComo decideLimitação
FCFSOrdem de chegadaUm processo longo atrasa todos (efeito comboio)
SJFMenor tarefa primeiroÓtimo na espera média, mas exige prever a duração
Round RobinFatia de tempo (quantum) rotativaJusto e interativo; sensível ao tamanho do quantum
PrioridadeMaior prioridade primeiroPode causar starvation dos de baixa prioridade
Multinível com realimentaçãoVárias filas que ajustam prioridade dinamicamenteFlexível, mas complexo de ajustar

Critérios de avaliação: vazão, tempo de retorno (turnaround), tempo de espera e tempo de resposta. Sistemas interativos priorizam resposta; servidores, vazão. O escalonamento preemptivo (RR) pode tirar a CPU à força; o não-preemptivo, não.

Aprofundamento: concorrência e sincronização

Quando processos/threads compartilham dados, surge a condição de corrida: o resultado depende da ordem (imprevisível) de execução.

saldo = 100; // dois saques de 50 em paralelo
T1: lê saldo (100) ............ grava 50
T2: ...... lê saldo (100) ............ grava 50
// resultado: 50 (deveria ser 0!) → corrida

A solução é a exclusão mútua: garantir que só um entre por vez na seção crítica. Os mecanismos clássicos são o mutex (trava binária) e o semáforo (contador com operações atômicas wait/signal), propostos por Dijkstra. Usados de forma errada, geram bugs sutis e travamentos.

Aprofundamento: impasse (deadlock)

Um deadlock trava processos que esperam, em ciclo, recursos uns dos outros. Coffman mostrou que ele só ocorre se as quatro condições valerem ao mesmo tempo:

CondiçãoSignificado
Exclusão mútuaO recurso só pode ser usado por um processo por vez
Posse e esperaProcesso segura um recurso e espera por outro
Não preempçãoRecurso não pode ser tomado à força
Espera circularExiste um ciclo de processos esperando uns aos outros

Estratégias do SO: prevenir (negar uma das condições), evitar (algoritmo do banqueiro, de Dijkstra), detectar e recuperar, ou simplesmente ignorar (a "abordagem do avestruz", comum em SOs de uso geral, pois deadlocks reais são raros).

Aprofundamento: paginação e substituição de páginas

A memória virtual divide o espaço em páginas (e a RAM em quadros). A tabela de páginas mapeia páginas virtuais em quadros físicos; a TLB faz cache desse mapeamento. Quando uma página não está na RAM, ocorre um page fault e o SO a traz do disco.

Se a RAM está cheia, qual página remover? Os algoritmos de substituição tentam acertar:

AlgoritmoIdeia
ÓtimoRemove a que será usada mais tarde (teórico, irrealizável — serve de referência)
FIFORemove a mais antiga (sofre da anomalia de Belady)
LRURemove a menos usada recentemente (boa, mas cara de implementar exatamente)
Clock / segunda chanceAproximação eficiente de LRU usando um bit de referência

Thrashing: se há páginas de menos para muitos processos, o sistema passa mais tempo trocando páginas com o disco do que executando — o desempenho despenca.

Aprofundamento: arquiteturas de kernel

Monolítico

Todo o SO (drivers, sistema de arquivos, rede) roda no núcleo. Rápido, mas um bug pode derrubar tudo. Ex.: Linux.

Microkernel

O núcleo é mínimo; serviços rodam como processos em modo usuário. Robusto e modular, com custo de comunicação. Ex.: Minix, QNX.

Híbrido

Combina os dois: núcleo com serviços essenciais, mas modular. Ex.: Windows NT, núcleo do macOS (XNU).

O debate monolítico × microkernel (célebre entre Linus Torvalds e Andrew Tanenbaum, 1992) ilustra o eterno trade-off entre desempenho e isolamento/segurança em sistemas.

Glossário do tópico

KernelNúcleo do SO; controla o hardware diretamente.
Processo / ThreadPrograma em execução / linha de execução interna.
EscalonadorDecide qual processo usa a CPU.
Memória virtualAbstração que isola e expande a memória dos processos.
System callPedido de um programa por um serviço do SO.
DriverSoftware que controla um dispositivo.
Modo usuário/núcleoNíveis de privilégio da CPU; protegem o sistema.
Semáforo / MutexMecanismos de exclusão mútua na seção crítica.
DeadlockImpasse circular (4 condições de Coffman).
Page fault / ThrashingFalta de página no acesso / troca excessiva de páginas.

Exercícios resolvidos

1. Três processos chegam em t=0 com surtos de CPU P1=24, P2=3 e P3=3 (ms). Compare o tempo médio de espera em FCFS (ordem P1, P2, P3) e em SJF.

Ver solução
FCFS: esperas = 0, 24, 27 → média = (0+24+27)/3 = 17 ms. SJF (ordem P2, P3, P1): esperas = 0, 3, 6 → média = (0+3+6)/3 = 3 ms. O SJF reduz drasticamente a espera ao priorizar tarefas curtas.

2. Em um sistema de 32 bits com páginas de 4 KB, quantas páginas tem o espaço de endereçamento virtual?

Ver solução
Espaço = 232 bytes; página = 212 bytes. Nº de páginas = 232 / 212 = 220 = 1.048.576 páginas.

3. Cite uma forma de prevenir deadlock quebrando uma das condições de Coffman.

Ver solução
Exemplo: quebrar a espera circular impondo uma ordem global de aquisição de recursos (todo processo só pode pedir recursos em ordem crescente de id). Sem ciclo possível, não há deadlock. Outras opções: exigir que o processo peça todos os recursos de uma vez (quebra "posse e espera") ou permitir preempção de recursos.

4. Qual a diferença entre processo e thread?

Ver solução
Um processo é um programa em execução com seu próprio espaço de memória isolado. Threads são linhas de execução dentro de um processo, que compartilham a mesma memória e recursos. Criar e alternar threads é mais leve, mas o compartilhamento exige sincronização para evitar condições de corrida.

Resumindo

O sistema operacional é o gerente do computador: controla processos, memória, arquivos e dispositivos, oferecendo serviços via chamadas de sistema. Ao lado dele, os softwares de sistema (drivers, compiladores, utilitários, firmware) mantêm tudo funcionando, abaixo dos aplicativos do usuário.

Voltar aos Tópicos