SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf ·...
Transcript of SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf ·...
![Page 1: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/1.jpg)
SSC-‐0143 PROGRAMAÇÃO CONCORRENTE
Pthreads Prof. Jó Ueyama
![Page 2: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/2.jpg)
Créditos
2 1º Semestre de 2013
Os slides integrantes deste material foram construídos a par4r dos conteúdos relacionados às referências bibliográficas descritas neste documento
![Page 3: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/3.jpg)
Processos
• O que é um processo? – Instância de um programa em execução
• Contadores • Registradores • Variáveis globais e locais • Pilha de execução
1º Semestre de 2013 3
![Page 4: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/4.jpg)
Regiões de um processo • Pilha (stack)
– Região da memória uQlizada para guardar dados dinâmicos (parâmetros de funções, variáveis locais, valores de retorno)
• Segmento de Texto (text) – Código executável
(instruções) do programa
• Segmento de Dados (data) – Variáveis globais inicializadas
• Heap – Região uQlizada para alocar
memória ao processo
1º Semestre de 2013 4
Figura: Regiões de um processo.
![Page 5: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/5.jpg)
Threads • Processos leves
– Possuem o mesmo endereço na memória
– ComparQlham variáveis globais
– Cada thread possui sua própria pilha de execução • Procedimentos e Variáveis locais
• Dois Qpos de threads – Usuário e de Kernel
1º Semestre de 2013 5
Figura: Regiões de um processo com threads.
![Page 6: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/6.jpg)
Threads de usuário • Podem ser implementadas em SO
que não suportam threads • Somente o processo pai é
enxergado pelo kernel. • Cada processo possui sua própria
tabela de threads • O escalonador de threads e os
procedimentos que salvam seus estados são locais (mais eficientes que uma chamada ao sistema).
1º Semestre de 2013 6
Figura: Thread de usuário.
• Se uma thread é bloqueada por uma chamada ao sistema todas as outras threads em execução também são bloqueadas.
• Threads só podem escalonar entre si.(Não pode escalonar threads entre processos.)
![Page 7: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/7.jpg)
Threads de Kernel • Uma única tabela de threads
localizada no kernel gerencia todas as threads do sistema
• Criar e destruir threads – chamadas ao sistema
• O bloqueio de uma thread não atrapalha as outras threads em execução
1º Semestre de 2013 7
Figura: Thread de Kernel.
• O escalonador de processos pode escalonar threads entre processos diferentes
• Chamadas ao sistema são custosas – overhead.
![Page 8: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/8.jpg)
Pthreads
• POSIX Threads: Padrão IEEE POSIX 1003.1c – 1995
• Define uma API para a criação e manipulação de threads
• AlternaQva para as soluções proprietárias de threads desenvolvidas pelos fabricantes de hardware
1º Semestre de 2013 8
![Page 9: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/9.jpg)
Pthreads
Estrutura e funções básicas: • pthread t (struct) • pthread create • pthread join • pthread exit
1º Semestre de 2013 9
![Page 10: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/10.jpg)
Pthreads • pthread_create: Cria uma nova thread e a torna
executável int pthread_create(pthread_t *thread, const
pthread_attr_t *attr , void *(*start_routine) (void *), void *arg);
• thread: Estrutura para thread criada; • aCr: Atributos para nova thread ou NULL para valores
padrão; • start_rouEne: roQna que será executada quando a
thread for iniciada • arg: argumento a ser passado para a roQna de início Retorna 0 se houve sucesso, ou o código do erro, caso contrário
1º Semestre de 2013 10
![Page 11: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/11.jpg)
Pthreads
• pthread_exit: Finaliza a thread; void pthread_exit(void *retval);
• retval: Código de retorno da Thread.
1º Semestre de 2013 11
![Page 12: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/12.jpg)
Pthreads
Exemplo 1
1º Semestre de 2013 12
![Page 13: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/13.jpg)
Pthreads • pthread_create: permite apenas que um argumento seja passado;
• Para casos em que vários argumentos tenham que ser passados uQliza-‐se structs;
• Todos argumentos desta função devem ser passados por referência e um cast para (void *) deve ser feito
Exemplo 2
1º Semestre de 2013 13
![Page 14: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/14.jpg)
Pthreads • pthread_join: Aguarda o término de alguma Thread
int pthread_join(pthread_t thread, void **retval); • Esta função aguarda pelo término da Thread especificada no arugmento thread. Se a mesma já terminou sua execução quando a função foi chamada, então a função retorna imediatamente.
• retval: Se não for NULL, este argumento conterá o código de retorno da Thread que estava sendo aguardada.
• Retorna 0 se houve sucesso, ou o código do erro, caso contrário
1º Semestre de 2013 14
![Page 15: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/15.jpg)
Pthreads
Exemplo 3
1º Semestre de 2013 15
![Page 16: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/16.jpg)
Mutexes
– Mecanismos de exclusão mútua entre threads – Garantem que regiões críQcas do código não sejam executadas simultaneamente
– protegem estruturas de dados comparQlhadas de modificações simultâneas
– Dois estados: lock e unlock
1º Semestre de 2013 16
![Page 17: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/17.jpg)
Pthreads
Estrutura e funções básicas:
• pthread_mutex_t • pthread_mutex_lock • pthread_mutex_unlock
1º Semestre de 2013 17
![Page 18: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/18.jpg)
Pthreads
• pthread_mutex_lock: muda o estado do mutex para locked(bloqueado).
pthread_mutex_lock(pthread_mutex_t *mutex); • mutex: Estrutura para o mutex criado
1º Semestre de 2013 18
![Page 19: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/19.jpg)
Pthreads
• pthread_mutex_unlock: muda o estado do mutex para unlocked(desbloqueado).
pthread_mutex_unlock(pthread_mutex_t *mutex); • mutex: Estrutura para o mutex criado
1º Semestre de 2013 19
![Page 20: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/20.jpg)
Exemplo 4 void* doSomeThing(void *arg) { pthread_mutex_lock(&lock); unsigned long i = 0; counter += 1; prinv("\n Job %d started\n", counter); for(i=0; i<(0xFFFFFFFF);i++); prinv("\n Job %d finished\n", counter); pthread_mutex_unlock(&lock); return NULL; }
1º Semestre de 2013 20
![Page 21: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/21.jpg)
Dúvidas
21 1º Semestre de 2013
![Page 22: SSC#0143 PROGRAMAÇÃO(C - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/30/Aula-03-_Pthreads.pdf · Créditos& 1º&Semestre&de&2013& 2 Os# slides# integrantes# deste# material# foram#](https://reader031.fdocumentos.tips/reader031/viewer/2022021809/5c2cb99a09d3f2577a8d2925/html5/thumbnails/22.jpg)
Bibliografia Mutex, disponível em: h}p://www.lsd.ic.unicamp.br/mo806wiki/index.php/Estudo_Mutex Phtreads, disponível em: h}ps://compuQng.llnl.gov/tutorials/pthreads/#Pthread TANENBAUM, Andrew. Sistemas operacionais modernos. Rio de Janeiro: LTC. 1999. Material de Aula, Renê Souza Pinto
22 1º Semestre de 2013