Escolar Documentos
Profissional Documentos
Cultura Documentos
Ambiente UNIX
4Processos:
reviso de conceitos bsicos processos no SO UNIX
3programao
criao (exec, fork, etc), sincronizao (wait), eliminao, processos zombie
signals
Threads em Linux
4conceito de threads 4Posix threads 4create, exit and join 4simultaneidade e concorrncia 4seo crtica 4semforos, mutex
no contexto de threads
Taisy Weber
Threads
4processo
definido pelo recursos usados e espao de memria onde est executando
F
4thread
pode ser interessante partilhar recursos concorrentemente semelhante a um processo filho com novo IP mas executando no mesmo espao de endereamento do pai
4
Taisy Weber
Thread
processo leve (lightweigth process)
thread
compartilha recursos com threads da mesma task conjunto de threads uma task com apenas uma thread igual a um processo convencional
5
Taisy Weber
Thread
4principais vantagens frente a processos: 3maior facilidade na criao 3maior velocidade de troca de contexto entre threads da mesma task
ainda necessrio troca de registradores
segmento de dados
task
mltiplas threads em uma task
Taisy Weber
3apenas uma thread de cada vez em execuo na CPU 3uma thread executa seqencialmente 3uma thread pode criar threads filhas
Taisy Weber
3quando uma thread bloqueia, outra thread da mesma task pode ser executada
um processo fica inteiramente bloqueado
Implementao de threads
4ou suportadas pelo kernel
atravs de system calls como os processos
4ou ambas
Taisy Weber
thread: processo com identidade prpria, com prprio contexto de escalonamento, mas que compartilha a estrutura de dados com seu pai
11
Suporte a threads
4padro POSIX 3_POSIX_VERSION 4teste de suporte
no livro texto h um exemplo de programa para verificao do suporte a threads Matthew & Stones, cap 11 fonte: thread1.c aconselhvel testar suporte a threads no seu sistema antes de iniciar com os exerccios
Taisy Weber
12
Posix threads
4biblioteca para threads Posix 3lpthread linkar usando -lpthread 4designao 3nomes de chamadas de funo iniciam com pthread incluir arquivo pthread.h
3nome do header file: pthread.h
Taisy Weber
13
Cdigo reentrante
3pode ser chamado mais de uma vez e ainda funcionar corretamente
vale para invocaes aninhadas vale para threads
3macro _REENTRANT
usar antes de qualquer #include em programas multithread informa ao compilador que necessrio
gerar cdigo reentrante
Taisy Weber
14
rotina da thread
exit
uma thread criada pela funo pthread_create, que indica qual a rotina deve ser executada pela nova thread
Taisy Weber
15
create
#include <pthread.h> int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void*), void *arg);
identificador da thread
pthread_t *thread
Taisy Weber
16
retorna um ponteiro para um objeto (jamais retornar pointer para uma varivel local a thread, pois essas variveis desaparecem aps exit)
#include <pthread.h>
pthread_t th
identificador da thread que se deseja esperar ponteiro para um ponteiro com o valor de retorno da thread
17
void **pthread_return
Taisy Weber
19
Simultaneidade e concorrncia
em computadores monoprocessados, threads no executam simultaneamente mas concorrentemente
3evitando conflitos
garantir que apenas um processo (ou thread) de cada vez manipule uma varivel compartilhada
usar semforos e mutexes para sincronizar threads
Taisy Weber
20
Seo crtica
4o que ?
acesso a recursos compartilhados
trecho de cdigo no qual um processo pode estar alterando variveis comuns, escrevendo uma tabela, escrevendo um arquivo, ...
quando um processo executa em sua seo crtica, nenhum outro processo pode executar na sua seo crtica
cada regio crtica pode ser diferente
Taisy Weber
21
se nenhum outro processo pode executar na regio crtica, variveis compartilhadas so preservadas
22
Requisitos para SC
4excluso mtua 4progresso
quando um processo executa em sua SC, nenhum dos outros processos pode executar na sua SC
se no existem processos na SC e se existem procs. que querem entrar na SC, ento apenas esses procs. podem participar da deciso de quem ser o prximo e a deciso no pode ser postergada infinitamente
4espera limitada
existe um nmero limitado de vezes que um outro processo pode entrar sua SC depois que um processo que pediu permisso a receba
Taisy Weber
23
Semforo
fora a inicializao
3S uma varivel inteira que acessada apenas por duas operaes atmicas: P e V
wait e signal so sees crticas
semforo
P V
se um processo altera o valor do semforo, nenhum outro processo pode simultaneamente modificar o mesmo semforo
24
lock while mutex 0 do no-op; mutex := mutex - 1; unlock mutex := mutex +1;
25
26
processo vai para fila de espera associada ao semforo, estado do processo = wait
4signal
um processo executando signal retira um outro processo da fila de espera associada ao semforo como mutex um caso especial de semforo, a mesma implementao vale para lock e unlock
Taisy Weber
27
2 ou mais processos esperam indefinidamente por um evento causado apenas por outro processo tambm bloqueado
Taisy Weber
28
atributos para mutex (mutexattr) podem ser alterados de forma a evitar deadlocks aqui sero usados atributos padres (passando null no argumento)
Taisy Weber
29
30
res = pthread_create(&a_thread, NULL, thread_function, NULL); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); }
errno no usado por essas funes pthread, res deve ser testado
Taisy Weber
31
verifica se a outra thread consumiu o string lido testando varivel compartilhada dentro de uma regio crtica
32
outra thread
destroi mutex
Taisy Weber
33
rotina da thread
primeira entrada na regio crtica
pthread_mutex_lock(&work_mutex); while(strncmp("end", work_area, 3) != 0) { printf("You input %d characters\n", strlen(work_area) -1); work_area[0] = '\0'; pthread_mutex_unlock(&work_mutex); sleep(1); strncmp compara strings pthread_mutex_lock(&work_mutex); strlen comprimento do string while (work_area[0] == '\0' ) { pthread_mutex_unlock(&work_mutex); sleep(1); pthread_mutex_lock(&work_mutex); } } time_to_exit = 1; work_area[0] = '\0'; pthread_mutex_unlock(&work_mutex); ltima sada da regio crtica pthread_exit(0); }
34
Fim
3existem mais detalhes sobre threads 3fogem ao escopo da nossa disciplina
olhar livros textos olhar man sobre threads
Taisy Weber
35