DEE355 – Sistemas Operacionais
Prof. Jéfer – jefer@ufpr.br
EAD – Moodle: ava.ufpr.br
Explore os fundamentos e práticas relacionadas a tarefas, processos e threads em sistemas operacionais modernos.
Slides: Versão Antiga
Tarefa: Execução de uma sequência de instruções em linguagem de máquina, normalmente gerada pela compilação de um programa escrito em qualquer linguagem.
Características (Anos 40):
Sistemas Multitarefa Preemptivos:
Estados (Maziero, Cap. 3):
Definição: Salvar e restaurar o contexto de uma tarefa (TCB – Task Control Block) para permitir a alternância entre tarefas.
arch/i386/kernel/process.c
dos fontes do núcleo.Processo: Uma tarefa associada a recursos (memória, arquivos, etc.) – Silberschatz, Cap. 3.
ps -aux
: Lista todos os processos em execução, com informações como PID, usuário, uso de CPU e memória.pstree
: Mostra a hierarquia de processos em formato de árvore, destacando processos pais e filhos.top
: Interface interativa em tempo real que mostra os processos mais ativos. Pressione q
para sair.htop
: Versão visual melhorada do top
(pode exigir instalação com sudo apt install htop
).jobs
: Lista tarefas em segundo plano no terminal atual (ex: após usar &
ou Ctrl+Z
).fg
/ bg
: Traz uma tarefa para o primeiro plano (fg
) ou envia para segundo plano (bg
).kill PID
: Envia um sinal para encerrar um processo. Exemplo: kill 1234
.kill -9 PID
: Força a finalização do processo usando o sinal SIGKILL
.killall nome
: Encerra todos os processos com determinado nome. Ex: killall firefox
.pkill -f nome
: Encerra processos com base em expressões. Ex: pkill -f python
.nice -n valor comando
: Executa um processo com prioridade ajustada (quanto menor, mais prioridade). Ex: nice -n 10 ./meuprog
.renice -n valor -p PID
: Altera a prioridade de um processo já em execução.fuser -n tcp 80
: Mostra o PID de processos que usam a porta 80 (exemplo comum: servidor web).nohup comando &
: Executa um processo que continua mesmo após logout. Ex: nohup ./servidor &
echo $$
: Mostra o PID do shell atual.ps -o pid,ppid,comm -p $$
: Mostra o PID e o PPID (processo pai) do shell.wait
: Aguarda a finalização de um processo filho antes de continuar a execução (útil em scripts).
🧪 Experimente:
Execute ps -aux
, pstree
, top
ou htop
no terminal.
Use sleep 60 &
para simular um processo em segundo plano e manipule com jobs
, fg
, kill
.
Thread: Fluxo de execução dentro de um processo, com sua própria pilha e registradores, mas que compartilha os recursos do processo (Silberschatz, Cap. 4).
ps -aux
pstree
sleep 60 &
jobs
, fg
, bg
nice -n 10 sleep 60
renice
para processos já em execução
echo $$
ps -o pid,ppid,comm -p $$
fuser
Inicie um servidor local:
sudo python3 -m http.server 80
Em outro terminal:
sudo fuser -n tcp -v 80
Finalizar processo da porta:
sudo fuser -k -n tcp 80
#!/bin/bash for i in {1..5} do echo "Processo em execução: $i" sleep 1 done
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> void *thread_func(void *arg) { int id = *(int*)arg; for (int i = 0; i < 5; i++) { printf("Thread %d executando: %d\n", id, i); sleep(1); } pthread_exit(NULL); } int main() { pthread_t t1, t2; int id1 = 1, id2 = 2; pthread_create(&t1, NULL, thread_func, &id1); pthread_create(&t2, NULL, thread_func, &id2); pthread_join(t1, NULL); pthread_join(t2, NULL); return 0; }
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { pid_t pid = getpid(); printf("PID do processo: %d\n", pid); fflush(stdout); while(1) { sleep(1); } return 0; }
gcc -o meu_programa meu_programa.c ./meu_programa ps -ef | grep meu_programa pgrep meu_programa Ctrl + Z → bg → fg nohup ./meu_programa &
kill
kill <PID>
kill -9 <PID>
killall meu_programa
k
dentro do top
F9
pkill -f meu_programa
- Silberschatz et al., Fundamentos de SOs, 8ª ed., LTC, 2010.
- Tanenbaum, SOs Modernos, 3ª ed., Prentice Hall, 2009.
- Marques et al., Sistemas Operacionais, 1ª ed., LTC, 2011.
- Maziero, SOCM
- Toscani et al., Sistemas Operacionais, 4ª ed., Bookman, 2010.
- Silberschatz et al., SOs com Java, 7ª ed., Campus, 2008.