processos e threads - ipsltodi.est.ips.pt/nribeiro/lecturing/so_02-03/a02.pdf · processos e...

Post on 12-Aug-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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,...)

}

}

top related