Skip to content

Laboratório de Sistemas Operativos sobre programação com processos e tarefas

Notifications You must be signed in to change notification settings

tecnico-so/lab_tarefas-processos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Guião sobre programação com tarefas e processos

IST

Objetivos

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 e pthread_join;
  • utilizar primitivas para a gestão de processos, como o fork e wait.

Requisitos

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

1. Tarefas

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.

1.1 Interpretação dos resultados

Consulte o seguinte diagrama e interprete o resultado do programa.

THREAD

Porque razão diferentes execuções do programa podem resultar em diferentes valores para variável global g_value?

1.2 Exercício

Monte uma experiência que prove a afirmação anterior (ponto 1.1).
Sugestão: utilize a chamada sistema sleep.

1.3 Uso de sanitizador

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.


2. Processos

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?


Conclusão

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

About

Laboratório de Sistemas Operativos sobre programação com processos e tarefas

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published