← Voltar ao Encontro 5
Sistemas Operacionais · ADS23
01 / 14
Encontro 5 de 17

Processos: Conceito
e Diagnóstico

Abrindo a Unidade III: o que é, de fato, um processo — e como enxergar, ao vivo, o que está rodando (ou preso) numa máquina Linux.

ADS23IFCE Campus HorizonteProf. José Stelio Sampaio Bastos Neto
↓ role pra avançar · use os pontos à direita pra navegar direto
De onde viemos

Três encontros de arquitetura, um de Docker de verdade — hoje, processos

Encontros 1–3

O SO por fora e por dentro

Máquina estendida, gerenciador de recursos, arquiteturas, chamadas de sistema — o mapa geral de como um SO é organizado.

Encontro 4

Virtualização e Docker de verdade

Imagem, container, Dockerfile — vocês já constroem e rodam containers próprios.

Agora a gente entra na Unidade III: processos. É aqui que "gerenciador de recursos" — a segunda lente do Encontro 1 — ganha nome, número e comando de diagnóstico.

Pergunta pra turma

Quando vocês abrem o mesmo navegador duas vezes,
é o mesmo programa rodando duas vezes, ou duas coisas diferentes?

E se uma das duas travar — por que a outra continua funcionando normalmente?

Conceito-base

Programa é estático. Processo é vivo.

Programa

Um arquivo parado no disco

Um binário, instruções guardadas. Não faz nada sozinho — só existe fisicamente, esperando ser executado.

Processo

Um programa em execução, com estado próprio

Tem um número (PID), uma posição de memória, um contador de instruções, e um lugar na fila da CPU. Dois processos podem vir do mesmo programa e serem completamente independentes.

É por isso que dois navegadores abertos não derrubam um o outro: são processos diferentes, ainda que rodem o mesmo programa.

O que compõe um processo

Todo processo carrega uma identidade própria

Guardem "PID" — é a chave que vocês vão usar em praticamente todo comando de diagnóstico a partir de hoje.

O ciclo de vida

Três estados — e é isso que "gerenciar recursos" significa

Um processo nunca está "rodando" o tempo inteiro. Ele alterna entre três estados, e é o SO quem decide quando cada transição acontece.

PRONTO — na fila, esperando o escalonador liberar a CPU
⇅ escalonado / interrompido (preemptado)
RODANDO — usando a CPU agora (só um processo por núcleo, por vez)
⇅ pede E/S (bloqueia) / E/S termina (libera)
BLOQUEADO — esperando algo externo (disco, rede, teclado)

Um processo nunca pula direto de bloqueado pra rodando — ele sempre passa por pronto primeiro, esperando sua vez na fila.

Ninguém nasce sozinho

Todo processo tem um pai — exceto o primeiro

Um processo só existe porque outro processo pediu pra criá-lo, através da chamada de sistema fork (relembrando o Encontro 3). Isso forma uma árvore genealógica inteira.

systemd — PID 1 (o processo raiz; nasce direto do kernel no boot)
cron
sshd
bash (seu terminal)
top
sleep 300

Cada processo guarda o PPID (PID do pai) — é assim que o comando pstree desenha essa árvore inteira na tela.

Primeira ferramenta de diagnóstico

ps: uma fotografia de tudo que está rodando agora

ps aux lista todos os processos do sistema num instante — cada coluna revela uma parte da anatomia que vimos no slide 4.

ColunaO que revela
USERQuem é dono do processo
PIDO número único do processo
%CPU / %MEMQuanto de CPU/memória ele está consumindo agora
STATO estado (R=rodando, S=dormindo/bloqueado, Z=zumbi)
COMMANDO comando que originou o processo
Segunda ferramenta

top: se ps é foto, top é vídeo

Em vez de uma fotografia parada, top atualiza a lista de processos ao vivo, ordenada por quem está consumindo mais CPU agora.

A ponte que vocês já conhecem

Todo PID também é uma pasta em /proc

Lembram do Encontro 2? Cada processo rodando tem sua própria pasta dentro de /proc, nomeada com o próprio PID — e ps/top são, por baixo, só leitores organizados dessas pastas.

ArquivoO que revela
/proc/<pid>/statusNome, estado, PPID, uso de memória — em texto legível
/proc/<pid>/cmdlineO comando exato (com argumentos) que criou o processo
/proc/<pid>/exeLink pro binário executável que originou o processo
Eixo do curso

Um processo pode ter dois PIDs diferentes ao mesmo tempo

Lembram que container compartilha o núcleo do host (Encontro 4)? Pois bem: o namespace de PID do Linux faz um processo dentro de um container se enxergar como PID 1 — mesmo tendo um PID bem diferente visto de fora.

Visto de fora (no host)

Só mais um processo comum

Um ps aux no host mostra o processo do container com um PID qualquer, como 48213 — igual a qualquer outro processo do sistema.

Visto de dentro (no container)

PID 1 — o "processo raiz" daquele mundo isolado

Um ps aux rodado dentro do mesmo container mostra o processo como PID 1 — o container tem seu próprio namespace de números de PID.

Isso é namespaces na prática — a mesma peça técnica que faz o container "achar" que está sozinho na máquina, mencionada de leve no Encontro 4.

Prévia da prática

Do ps comum ao PID duplo do container

Uma sequência real: localizar um processo, subir um container em segundo plano, e comparar o PID de dentro e de fora.

Cada uma dessas linhas vira um passo do roteiro de laboratório de hoje.

Mão na massa

De observar processos comuns ao PID duplo do container

DIAGNÓSTICO

ps, top e /proc/<pid>

Localizar processos, ler colunas, comparar a "foto" do ps com o "vídeo" do top.

REFORÇO DOCKER

PID por dentro x por fora

Subir um container em segundo plano e comparar o mesmo processo visto do host e visto de dentro.

O roteiro de laboratório detalha os passos, com dicas se algo travar. Todas as observações vão pro instrumento semanal (quiz) no fim.

Para ler

Leitura da semana

🟢

Laureano — Programas e Processos + Informações no /proc

A base teórica de hoje, com os mesmos arquivos de /proc que vimos no slide 9. p. 99–106

🔵

Tanenbaum — Processos

Modelo de processo, criação, término, hierarquia e os três estados — a teoria por trás do ps e do top. p. 59–67

⚪

Laureano — O ciclo de vida de um processo no Linux

Pra quem quer se aprofundar além do que cai no quiz. p. 132–150

O quiz da semana verifica essa leitura e recolhe suas observações da prática — tudo no mesmo instrumento.