Sistemas Operacionais
Aula 2: Gerência de Processos
Referências
Concorrência
Porque executar vários programas simultaneamente ?
Processos
Um processo é um fluxo de controle sequencial e seu espaço de endereçamento.
Informalmente é a execução de um programa junto com os dados usados por ele.
Pontos importantes:
Programa != Processo
Programa é o código. Processo é a execução:
Threads
Um processo tem duas partes:
Um thread consiste somente do fluxo de controle.
Porque???
Nomenclatura
Processo (Unix):
Espaço de endereçamento + fluxo de controle
Thread:
Fluxo de controle
Tarefa (task):
Espaço de endereçamento
Confusão: frequentemente se usa processo ou tarefa quando se quer dizer thread!
Implementação
Tarefa contém:
Thread contém:
Todos os threads de uma tarefa acessam a mesma memória:
Até a pilha de execução de um thread pode ser acessada por outro.
Pilhas de Execução
Diversas Combinações
Uma tarefa, um thread:
Uma Tarefa, vários threads:
Várias tarefas, um thread por tarefa:
Várias tarefas, vários threads por tarefa:
Vários threads, uma CPU ?
Cada thread tem a ilusão de ter uma CPU dedicada, mas só existe uma CPU.
O Escalonador é o programa que controla qual thread executa a cada instante:
while (true) {
espera_evento();
salva_thread_corrente();
escolhe_novo_thread();
carrega_novo_thread();
}
Escalonador
Cada thread é representado por um PCB -- Process Control Block que contém:
Escalonador
espera_evento();
Eventos podem causar reescalonamento:
Internos:
Externos
Escalonador
O escalonador afeta o estado do thread:
Escalonador
salva_thread_corrente();
Salva o estado do thread corrente no PCB:
Escalonador
escolhe_novo_thread();
Escolher um thread entre os que estão Ready. Várias políticas de escalonamento existem:
Escalonador
carrega_novo_thread();
Carrega o estado do thread corrente do PCB e coloca nos registradores.
Salvar o estado do thread antigo e carregar o estado do próximo é chamado de troca de contexto.
Escalonador
Resumo
Concorrência: Processos & threads:
Implementação via Escalonador: