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

OS SISTEMAS OPERACIONAIS

Por:   •  24/11/2020  •  Trabalho acadêmico  •  431 Palavras (2 Páginas)  •  539 Visualizações

Página 1 de 2

Os semáforos controlam os acessos, a utilização de semáforos faz com que, quando um recurso estiver em um e um segundo procedimento tentar alocá-lo, esse segundo procedimento ficará bloqueado até que o procedimento que detém o recurso libere.

Procedimento Proc_A()

Início

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

   processa_algo();

        aloca_plotter();

        processa_algo();

        libera_plotter();

 Fim Enquanto;

Fim;

//Proc_A() aloca o potter, processa e depois libera

Procedimento Proc_B()

Início

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

        processa_algo();

        aloca_scanner();

        processa_algo();

        aloca_impressora();

        processa_algo();

        aloca_plotter();

        processa_algo();

        libera_plotter();

        libera_impressora();

        libera_scanner();

 Fim Enquanto;

Fim;

//Proc_B() Enquanto o scanner não "libera"o sistema não conseguirá aloca a impressora e nem mesmo o potter.

Procedimento Proc_C()

Início

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

   processa_algo();

        aloca_impressora();

        processa_algo();

        aloca_scanner();

        processa_algo();

        libera_impressora();

        libera_scanner();

 Fim Enquanto;

Fim;

//Proc_C() Ao alocar a impressora, processar_algo o sistema não consegue aloca o scaner sem ter feito o "libera_impressora", desta forma o sistema não conseguirá alocar o scanner.

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.

A thread_A pode ser processada, a thread_B alocará o scanner, depois de liberar o scanner ela alocará a impressora, feito, ela irá alocar o potter mas o sistema só conseguirá se a thread_A já estiver acabado e não é o caso, com isso o sistema ficará desorientado, tentará enfileirar e causara deadlock.

...

Baixar como (para membros premium)  txt (2.6 Kb)   pdf (33.3 Kb)   docx (7.7 Kb)  
Continuar por mais 1 página »
Disponível apenas no TrabalhosGratuitos.com