Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Processos e Threads
12/16/2002 2001/2002 2
ProcessosO modelo de processo
Multiprogramação de quatro programasModelo conceptual de 4 processos sequenciais independentesApenas 1 processo está activo em dado instante
12/16/2002 2001/2002 3
Criação de processos
Eventos principais que causam a criação de processos
– Inicialização de sistema
– Execução de um processo de criação do sistema
– Pedido de utilizador
– Inicialização de uma tarefa por batch
12/16/2002 2001/2002 4
Terminação de processos
Condições que terminam um processo:
– Saida Normal (voluntaria)
– Saida com erro (voluntaria)
– Erro fatal (involuntaria)
– Morto por outro processo (involuntaria)
12/16/2002 2001/2002 5
Hierarquia de processos
Pai cria processos filhos e processos filhos podemcriar os seus processos
Forma uma hierarquia– Em UNIX chama-se “grupo de processos"
Windows não tem a conceito de hierarquia de processos– Todos os processos são iguais
12/16/2002 2001/2002 6
Estado de processo (1)
Possiveis estados– running– blocked– ready
Transições entre estados na figura acima
12/16/2002 2001/2002 7
Estado de processo(2)
Lowest layer of process-structured OS– handles interrupts, scheduling
Above that layer are sequential processes
12/16/2002 2001/2002 8
Implementação de processos (1) Campos da tabela de processos
12/16/2002 2001/2002 9
Implementação de processos (2)
Lista de operações que um SO realizaquando recebe uma interrupção
12/16/2002 2001/2002 10
ThreadsO modelo de Thread (1)
(a) Três processos cada com um thread(b) Um processo com três threads
12/16/2002 2001/2002 11
O modelo de thread (2)
Items são partilhados por todos os threads de um processoItems privados por cada processo
12/16/2002 2001/2002 12
O modelo de thread (3) Cada thread tem o seu stack
12/16/2002 2001/2002 13
Utilização de thread (1) Um processador de texto com três threads
12/16/2002 2001/2002 14
Utilização de thread (2) Um servidor Web multi-threaded
12/16/2002 2001/2002 15
Utilização de thread (3)
Codigo para figura anterior:(a) Dispatcher thread(b) Worker thread
12/16/2002 2001/2002 16
Utilização de thread (4) Três formas de construir um servidor
12/16/2002 2001/2002 17
Implementação de threads no espaço do utilizadorUm grupo de threads do nível de utilizadores
12/16/2002 2001/2002 18
Implementação de threads no espaço KernelUm grupo de threads gerido pelo kernel
12/16/2002 2001/2002 19
Implementações hibridasMultiplexagem de threads do nível de utilizador em threads do nível do kernel
12/16/2002 2001/2002 20
Scheduler Activations
Goal – mimic functionality of kernel threads– gain performance of user space threads
Avoids unnecessary user/kernel transitionsKernel assigns virtual processors to each process– lets runtime system allocate threads to processors
Problem:– Fundamental reliance on kernel (lower layer) – calling procedures in user space (higher layer)
12/16/2002 2001/2002 21
Threads “pop-up”
Quando uma mensagem chega, é processada por outro thread:– (a) antes de a mensagem chegar– (b) depois de a mensagem chegar
12/16/2002 2001/2002 22
Conver. código single-thread em multi-thread (1)
Conflitos entre threads para acesso a variaveis globais
12/16/2002 2001/2002 23
Conver. código single-thread em multi-thread (2)
Threads podem ter variaveis globais privadas
12/16/2002 2001/2002 24
Posix threads#include<pthreads.h>
Void first_function(int*) {...}Void second_function(int*) {...}Void final_function(int*) {...}Main(){
pthread_t th1,th2;
pthread_create(&th1,..., first_function,...);pthread_create(&th1,..., second_function,...);
/* Quantos threads tems nesta altura em execução? */pthread_join(th1);pthread_join(th2);final_function();
}
12/16/2002 2001/2002 25
Exemplos de aplicação
SequencialWhile (TRUE){
Receber_questao();Obter_resposta();enviar_resposta();
}
ConcurrenteWhile (TRUE){
Receber_questao();if (fork == 0){
Obter_resposta();enviar_resposta();exit();
}
}
Multi-thread#include <pthread.h>
Void processar_um_pedido(){Obter_resposta();
enviar_resposta();}Main(){...While (TRUE){
Receber_questao();pthread_create(...,processar_um_pedido,...)
}
}