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 -auxpstreesleep 60 &jobs, fg, bg
nice -n 10 sleep 60renice para processos já em execução
echo $$ps -o pid,ppid,comm -p $$
fuserInicie 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 &
killkill <PID>kill -9 <PID>killall meu_programak dentro do topF9pkill -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.