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: