OS SISTEMAS OPERACIONAIS
Por: pkavalcante • 24/11/2020 • Trabalho acadêmico • 431 Palavras (2 Páginas) • 530 Visualizações
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.
...