No final deste guião, deverá ser capaz de:
- compreender os conceitos programação paralela com tarefas (que é um dos requisitos essenciais do 1º exercício do projeto de SO) e também com processos;
- utilizar primitivas para a gestão de tarefas como o
pthread_create
epthread_join
; - utilizar primitivas para a gestão de processos, como o
fork
ewait
.
- Sistema operativo Linux Ubuntu 20.04 LTS (se não o tiverem disponível no vosso computador pessoal, podem utilizar os computadores do laboratório).
Clone este repositório, usando: git clone https://github.com/tecnico-so/lab_tarefas-processos.git
.
Aceda à diretoria com o comando: cd lab_tarefas-processos
.
Na pasta src
estude, compile e execute a aplicação.
O programa cria diferentes tarefas (threads) a executar em paralelo.
Consulte o seguinte diagrama e interprete o resultado do programa.
Porque razão diferentes execuções do programa podem resultar em diferentes valores para variável global g_value
?
Monte uma experiência que prove a afirmação anterior (ponto 1.1).
Sugestão: utilize a chamada sistema sleep
.
Como iremos lidar com programas concorrentes aconselha-se a utilização do ThreadSanitizer
para ajudar a detetar problemas de acessos concorrentes.
Para isto, note a ativação deste sanitizador com a opção -fsanitize
na Makefile.
Revisite o guião sobre ferramentas de deteção de erros, onde pode encontrar mais detalhes sobre o uso de sanitizadores de código.
Componha um programa paralelo alternativo, process.c
, em que as chamadas a pthread_create
e pthread_join
são substituídas por chamadas a fork
e wait
(tenha o cuidado de assegurar que a função wait
só é chamada pelo processo pai).
Neste caso, o paralelismo acontecerá com processos distintos, e não com tarefas dentro do mesmo processo. O que muda no resultado que este novo programa imprime no stdout?
As tarefas (threads) permitem ter paralelismo dentro de um processo, com partilha de memória. Os processos permitem ter paralelismo dentro de um sistema, permitindo ter várias aplicações a executar-se separadamente, com isolamento da memória. Neste laboratório vimos os dois tipos de paralelismo em ação.
Contactos para sugestões/correções: LEIC-Alameda, LEIC-Tagus, LETI