TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

UVA - AVA2 - Sistemas Operacionais

Por:   •  19/11/2021  •  Exam  •  782 Palavras (4 Páginas)  •  603 Visualizações

Página 1 de 4

Algoritmo "concorrentes"

Var

  // Variaveis de controle das threads

  thread thread_A, thread_B, thread_C: thread;

  // Semaforos de controle

  sema_impressora, sema_plotter, sema_scanner: semaforo;

 

Procedimento Proc_A()

Início

  Enquanto (verdadeiro) Faça // Procedimento nunca termina

         processa_algo();

         aloca_plotter();

         processa_algo_utilizando_plotter();

         libera_plotter();

  Fim Enquanto;

Fim;

 

Procedimento Proc_B()

Início

  Enquanto (verdadeiro) Faça // Procedimento nunca termina

         processa_algo();

         aloca_scanner();

         processa_algo_utilizando_scanner();

         aloca_impressora();

         processa_algo_utilizando_scanner_impressora();

         aloca_plotter();

         processa_algo_utilizando_scanner_impressora_plotter();

         libera_plotter();

         libera_impressora();

         libera_scanner();

  Fim Enquanto;

Fim;

 

Procedimento Proc_C()

Início

  Enquanto (verdadeiro) Faça // Procedimento nunca termina

         processa_algo();

         aloca_impressora();

         processa_algo_utilizando_impressora();

         aloca_scanner();

         processa_algo_utilizando_scanner_impressora();

         libera_impressora();

         libera_scanner();

  Fim Enquanto;

Fim;

 

Início

  sema_impressora = 1; // Inicia semaforo de controle da impressora

  sema_plotter = 1; // Inicia semaforo de controle do plotter

  sema_scanner = 1; // Inicia semaforo de controle do scanner

  // Inicia as threads colocando-as em execução paralelamente

  pthread_create(thread_A, Proc_A); // Inicia Proc_A como uma thread

  pthread_create(thread_B, Proc_B); // Inicia Proc_A como uma thread

  pthread_create(thread_C, Proc_C); // Inicia Proc_A como uma thread

  // faz com que a thread principal espere as demais acabarem

  pthread_join(thread_A);

  pthread_join(thread_B);

  pthread_join(thread_C);

Fim.

1 - Estão identificadas m vermelho as linhas que podem causar problemas durante a execução do problema, sendo elas 24,26 e 40.

2 – Em todas as ocasiões supracitadas os recursos anteriores não foram liberados pela respectiva função, ocasionando um deadlock no processamento seguinte.

3 – A correção seria a utilização da função de liberação do(s) respectivo(s) recursos(s) após cada processamento que faz uso destes, conforme abaixo:

Proposta de correção

Var

  // Variaveis de controle das threads

  thread thread_A, thread_B, thread_C: thread;

  // Semaforos de controle

  sema_impressora, sema_plotter, sema_scanner: semaforo;

 

Procedimento Proc_A()

Início

  Enquanto (verdadeiro) Faça // Procedimento nunca termina

         processa_algo();

         aloca_plotter();

         processa_algo_utilizando_plotter();

...

Baixar como (para membros premium)  txt (4.4 Kb)   pdf (29 Kb)   docx (151 Kb)  
Continuar por mais 3 páginas »
Disponível apenas no TrabalhosGratuitos.com