Vá para uma página ou matéria
Prática · Sistemas Operacionais · 24/09/2026
Ciclo de vida: Novo (sendo criado), Pronto (aguardando a CPU), Em execução (usando a CPU), Em espera ou bloqueado (aguardando um evento, como E/S) e Encerrado (recursos liberados). Ao pedir E/S, ocorre o bloqueio (execução para espera). Quando a E/S termina, ocorre o desbloqueio: o processo volta para Pronto, e não direto para execução, porque precisa ser escolhido pelo escalonador (transição de escalonamento). As demais transições são criação (novo para pronto) e finalização.
Thread é um fluxo de execução dentro de um processo; quatro threads são um processo com quatro fluxos, não quatro processos. Compartilhados pelas threads: código, dados, memória/heap e arquivos e recursos abertos. Individuais: registradores, contador de programa, pilha e estado de execução. Ter várias threads não significa executar tudo ao mesmo tempo: concorrência é progredir no mesmo intervalo alternando a CPU (possível com 1 núcleo); paralelismo é executar efetivamente ao mesmo tempo em unidades de processamento diferentes (exige 2 ou mais núcleos).
Escalonamento por prioridade, preemptivo ou não, dá preferência a processos críticos, mas pode causar fome (starvation) nos de baixa prioridade. No preemptivo, a chegada de um processo mais prioritário interrompe o de menor prioridade. O envelhecimento (aging) aumenta aos poucos a prioridade de quem espera muito, até que ele seja atendido. SRTF, a versão preemptiva do SJN que sempre escolhe o menor tempo restante, também pode causar fome em processos longos. Quantum é conceito do Round-Robin.
No multinível simples, os processos são divididos em filas com algoritmos próprios (por exemplo, interativos em Round-Robin e batch em FCFS); a desvantagem é a rigidez, pois é difícil mover processos entre filas. No multinível com realimentação, processos mudam de fila com base no comportamento (quem usa muita CPU desce para menor prioridade): é flexível, mas complexo de implementar e ajustar. Em tempo real, o RMS (Rate-Monotonic) dá maior prioridade a quem tem maior frequência, ou seja, menor período, e é bom para tarefas periódicas e previsíveis; o EDF (Earliest Deadline First) executa primeiro o prazo mais próximo, mas pode não cumprir todas as tarefas com carga muito alta.
P1 executa de 0 a 6, P2 de 6 a 9 e P3 de 9 a 10. Waiting time é o tempo total na fila de prontos: P3 esperou 9 ms. Turnaround time é o tempo total desde a submissão até a conclusão: 10 ms (espera mais execução). Aqui o response time, tempo até a primeira resposta, também seria 9 ms. Se o algoritmo fosse SJF, P3 executaria primeiro com espera 0, mostrando por que o SJF reduz o tempo médio de espera. Throughput, por sua vez, é o número de processos concluídos por unidade de tempo: 3 processos em 10 ms.
No Round-Robin cada processo recebe uma fatia de tempo (quantum); quando ela se esgota, o processo vai para o fim da fila e o próximo executa. É justo e adequado a sistemas de tempo compartilhado. Com quantum muito grande, quase todo processo termina antes de ser interrompido, e o RR se comporta como FCFS. Com quantum muito pequeno, a CPU passa boa parte do tempo trocando de contexto, gerando overhead. A primeira alternativa inverte os efeitos.
No escalonamento preemptivo, o sistema pode interromper (preemptar) um processo em execução para dar lugar a outro: salva seu estado atual para retomá-lo depois e atribui a CPU ao outro processo. O processo interrompido não espera evento nenhum, ele só perdeu a CPU, então volta para Pronto. No não preemptivo, o processo só libera o processador voluntariamente, quando termina ou faz uma chamada de sistema.
Programa é um conjunto de instruções armazenado no SSD ou HD; processo é uma instância de um programa em execução, à qual o SO associa código, dados, memória, estado de execução (registradores, contador de programa), arquivos abertos, recursos, informações de segurança e um PID. Essas informações ficam no PCB (Process Control Block): PID, estado, registradores, contador de programa, prioridade, memória e recursos. Um mesmo programa pode originar vários processos, como o navegador. E um processo não usa a CPU continuamente: pode estar pronto, executando, em espera ou encerrado, por isso 8 núcleos atendem 200 processos, alternando entre eles.
Em sistemas de tempo real críticos, perder um prazo pode resultar em falha do sistema, então importam a garantia de prazo (concluir certos processos antes de um prazo específico) e a previsibilidade (poder prever o comportamento do escalonador, especialmente o tempo de resposta). Throughput (processos concluídos por tempo) e utilização de CPU (manter a CPU ocupada) medem eficiência geral; fairness evita a inanição; turnaround, waiting e response time medem rapidez média, mas nenhum deles garante prazos.
No FCFS (First-Come, First-Served) os processos executam na ordem de chegada até o fim, sem interrupção: simples de implementar, mas sofre o convoy effect, em que processos longos atrasam os curtos e o tempo de resposta varia muito. O SJF, também chamado SJN (Shortest Job Next), escolhe o menor tempo estimado e minimiza o tempo médio de espera, mas exige conhecer o tempo de execução antecipadamente e pode causar fome (starvation) dos longos. Round-Robin e SRTF são preemptivos, e EDF é de tempo real.