22
SSC0143 PROGRAMAÇÃO CONCORRENTE Pthreads Prof. Jó Ueyama

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#

Embed Size (px)

Citation preview

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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#

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