trabalho 1 semaforos

21
IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Página 1 de 21. Sumário Introdução ...........................................................................................................................................4 Resumo.................................................................................................................................................5 Objectivos ............................................................................................................................................6 Semáforos ............................................................................................................................................7 Operações de acesso aos semáforos .............................................................................................9 Algoritmo 2: Vagas de carros num estacionamento ............................................................... 10 Semáforos como um mecanismo de sincronização geral ..................................................... 11 Semáforo Contador ............................................................................................................................... 11 Valor inteiro positivo pode variar sem limites............................................................................. 11 Semáforos genéricos ou Semáforo Binário.................................................................................... 11 Algoritmo de codificação de um mutexes ..................................................................................... 12 Algoritimo 5: Decodificacao de um mutex. .............................................................................. 12 Variáveis de condição .................................................................................................................... 13 Algoritmo 6: Implementecao Hipotetica das operações wait, notify e broadcast. .......... 13 Algoritmo 7: Espera sequencial de processos. ......................................................................... 14 Monitores .......................................................................................................................................... 15 Algoritmo 8: Monitor. .................................................................................................................... 15 Algoritmo 9: Monitor (em Java). .................................................................................................. 16 Deadlock e starvation .................................................................................................................... 17 Tentativa de evitar Deadlocks/Impasses .................................................................................. 18 Gráfico de espera ............................................................................................................................ 19 Conclusão ......................................................................................................................................... 20 Referências bibliográficas ............................................................................................................. 21

Upload: onesio-machuza

Post on 17-Aug-2015

46 views

Category:

Documents


4 download

DESCRIPTION

Semaforos deadlock e starvation

TRANSCRIPT

IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 1 de 21. Sumrio Introduo ...........................................................................................................................................4 Resumo .................................................................................................................................................5 Objectivos ............................................................................................................................................6 Semforos ............................................................................................................................................7 Operaes de acesso aos semforos .............................................................................................9 Algoritmo 2: Vagas de carros num estacionamento ............................................................... 10 Semforos como um mecanismo de sincronizao geral ..................................................... 11 Semforo Contador ............................................................................................................................... 11 Valor inteiro positivo pode variar sem limites ............................................................................. 11 Semforos genricos ou Semforo Binrio .................................................................................... 11 Algoritmo de codificao de um mutexes ..................................................................................... 12 Algoritimo 5: Decodificacao de um mutex. .............................................................................. 12 Variveis de condio .................................................................................................................... 13 Algoritmo 6: Implementecao Hipotetica das operaes wait, notify e broadcast. .......... 13 Algoritmo 7: Espera sequencial de processos. ......................................................................... 14 Monitores .......................................................................................................................................... 15 Algoritmo 8: Monitor. .................................................................................................................... 15 Algoritmo 9: Monitor (em Java). .................................................................................................. 16 Deadlock e starvation .................................................................................................................... 17 Tentativa de evitar Deadlocks/Impasses .................................................................................. 18 Grfico de espera ............................................................................................................................ 19 Concluso ......................................................................................................................................... 20 Referncias bibliogrficas ............................................................................................................. 21 IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 2 de 21. 1 Lista de abreviaturas API aplicao de programas de interface FIFO First In First Out (Primeiro aentrar, primeiro a sair). TSL Test. and Set lock 2Vocabulrios 1.Awake Acordado, Apto. 2.Broadcast-propagao3.Counter Contador. 4.Deadlock- Impasse // situaes queno oferece sada ouembarao. 5.Down- Baixo, Em Baixo, Por Baixo. 6.End Fim. 7.Exclusion Excluso. 8.If Se. 9.Livelock 10. Lock Fechar, Trancar. 11. Mutex 12. Notify Notificar. 13. Queue Fila.14. Semaphore Semforo. 15. Starvation Fome. 16. Synchronized Sincronizado. 17. Then Logo, Deles. 18. Try Tentar. 19. Unlock Destrancar, Liberar. 20. Up Cima, Em Cima. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 3 de 21. 21. 22. Wait Esperar. Nota Bem: Alguns termos foram traduzidos diretamente e outros por serem de linguagem tcnica, o grupo optou por no fazer uma traduo direita.AgradecimentoAodocentedacadeiraemestudo,(Sistemasoperactivos).Responsvelpelo nosso melhoramento tcnico e sobre a organizao dos trabalhos. Aos docentes pelo esforo que tem desempenhando no nosso sistema de ensino.A todos os colegas que directa ou indirectamente contriburam para a elaborao do presente trabalho. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 4 de 21. Introduo Opresentetrabalhotemcomotemaoficialsemforos,ossemforosso dispositivos utilizados com o objectivo de ordenar o trfego. Os Semforos esto subdivididos em dois tipos: Semforo Contador valor inteiro positivo pode variar sem limites e Semforos genricos ou Semforo Binrio tambm conhecido como mutexlockssoossemforosnosquaisocontadorinteiropodeassumir qualquervaloreconstituemummecanismodecoordenaomuitopoderoso. OsDedlockeStarvationsogeralmenteelementosdesincronizaode semforos,osquaistambmserodetalhadoseespecificadosnotrabalhoem estudo. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 5 de 21. Resumo Semforossodispositivosutilizadoscomoobjectivodeordenarotrfego, subdivididosemdoistipos:SemforoContadorvalorinteiropositivopode variar sem limites e Semforos genricos ou Semforo Binrio tambm conhecido como mutex locks so os semforos nos quais o contador inteiro pode assumir qualquervaloreconstituemummecanismodecoordenaomuitopoderoso. Ambos possuem seus algoritmos e seus processos de programao organizados de acordo com suas funcionalidades mas com mesma finalidade de ordenar o trfego.Ossemforospossuemumsistemadefuncionamentousando mecanismosDeadlock(quandodoisoumaisprocessosficamesperando indefinidamenteporumeventoquepodesercausadoapenasporumdos processosbloqueados),Starvation(quandoumsegmentopodeesperar indefinidamente, porque os outros segmentos continuam chegando e recebendo osrecursossolicitadosantesdestesegmentoserexecutado)ouaindaLivelock (quando um processo pode nunca terminar a sua execuo). IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 6 de 21. Objectivos Objectivos Gerais: Facilitar a circulao de pees e de veculos de forma alternada e de uma forma gerenciada; Fazer entender a lgica do funcionamento de um semforo, e tambm os colegas da rea em estudo em relao a sua programao. Objectivos Especficos: Explicar o funcionamento de semforos; Especificar a sincronizao dos semforos e seus algoritmos de sincronia; Mostrar as alternncias dos processos num semforo, neste caso, os Dedlock e Starvations dentro dos semforos e outros processos multi-programados. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 7 de 21. Semforos Em1965,omatemticoholandsE.Dijkstrapropsummecanismode coordenaoeficienteeflexvelparaocontroledaexclusomtuaentren tarefas: o semforo [Raynal, 1986]. Apesar de antigo, o semforo continua sendo omecanismodesincronizaomaisutilizadonaconstruodeaplicaes concorrentes,sendousadodeformaexplcitaouimplcita(naconstruode mecanismos de coordenao mais abstratos, como os monitores). UmsemforopodeservistocomoumavarivelS,querepresentaumaseo crticaecujocontedonodiretamenteacessvelaoprogramador. Internamente, cada semforo contm um contador inteiroS:counter e uma fila de tarefas S:queue, inicialmente vazia. Figura 1: Exemplo de um Semforo comum. Down(s): usado para solicitar acesso seo crtica associada a s. Caso a seo estejalivre,aoperaoretornaimediatamenteeatarefapodecontinuarsua execuo;casocontrrio,atarefasolicitantesuspensaeadicionadafilado semforo;ocontadorassociadoaosemforodecrementado.Dijkstra denominou essa operao P(s) (do holands probeer, que significa tentar). P(s)(Down)-checaovalordosemforo.Seovalormaiorque0(zero), decrementa e continua. Se for igual a 0, o processo posto para dormir _ Ao atmica: garantido que, uma vez iniciada a operao, nenhum outro processo tem acesso ao semforo(essencialpararesolverproblemasde sincronizao e evitar condies de corrida) IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 8 de 21. 1.P(s) equivale a: 2.Se s > 0 ento3.s:= s - 1 4.seno 5.bloqueia o processo at s > 0 (= wait(s)) Down(s): // a executar de forma atmica 1.s:counter s:counter + 1 2.if s:counter < 0 then pe a tarefa corrente no final de s:queue suspende a tarefa corrente3.end if Up(s): invocado para liberar a seo crtica associada a s; o contador associado ao semforo incrementado. Caso a fila do semforo no esteja vazia, a primeira tarefa da fila acordada, sai da fila do semforo e volta fila de tarefas prontas para retomar sua execuo. Essa operao foi inicialmente denominada V(s) (do holands verhoog, que significa incrementar). V(s)(Up)-seumoumaisprocessosestodormindonosemforo,umdeles escolhidoaleatoriamentepeloSOecontinuasuaoperaoDown(ovalorzero continua). Se no h ningum dormindo no semforo, incrementa o valor dele, operao tambm indivisvel. V(s)Verifica se existe uma lista com processos bloqueados por causa de s, se existe escolhe um e o acorda, deixando-o pronto para seguir sua execuo de P(s) (= signal(s))1.Seno 2.s:= s + 1 Deve-seobservarqueestachamadanobloqueante:atarefanoprecisaser suspensa ao execut-la. Up(s): // a executar de forma atmica 1.s:counter s:counter + 1 2.if s:counter _ 0 then retira a primeira tarefa t de s:queue devolve t fila de tarefas prontas (ou seja, acorda t)3.end if IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 9 de 21. Operaes de acesso aos semforos So geralmente implementadas pelo ncleo do sistema operacional, na forma de chamadasdesistema.importanteobservarqueaexecuodasoperaes Down(s)eUp(s)deveseratmica,ouseja,nodevemocorreracessos concorrentessvariveisinternasdosemforo,paraevitarcondies.Alguns sistemasimplementamtambmachamadaTryDown(s),cujasemnticano-bloqueante:casoosemforosolicitadoestejaocupado,achamadaretorna imediatamente, com um cdigo de erro. Para garantir a atomicidade dessas operaes em um sistema mono processador, seria suficiente inibir as interrupes durante a execuo das mesmas; no caso de sistemas com mais de um ncleo, torna-se necessrio usar outros mecanismos decontroledeconcorrncia,comooperaesTSL,paraprotegeraintegridade interna do semforo. Nestes casos, a espera ocupada no constitui um problema, pois a execuo dessas operaes muito rpida. Usando semforos, o cdigo de depsito em conta bancria apresentado na Seo 2 poderia ser reescrito da seguinte forma: Algoritmo 1: Automao. 1.typedef struct conta_t 2.{ 3.int saldo ; // saldo atual da conta 4.sem_t s = 1; // semforo associado conta, valor inicial 1 5.... // outras informaes da conta 6.} conta_t ; 7. 8.void depositar (conta_t * conta, int. valor) 9.{ 10. down (conta->s) ; // solicita acesso conta 11. conta->saldo += valor ; // seo crtica 12. up (conta->s) ; // libera o acesso conta 13. } A suspenso das tarefas que aguardam o acesso seo crtica elimina a espera ocupada, o que torna esse mecanismo mais eficiente no uso do processador que osanteriores. A filade tarefas associada ao semforo contm todasas tarefas queforamsuspensasaosolicitaracessosecocrticausandoachamada Down(s). Como a fila obedece uma poltica FIFO, garante-se a tambm a justia noacessoseocrtica,poistodososprocessosqueaguardamnosemforo IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 10 de 21. sero atendidos em sequncia. Por sua vez, o valor inteiro associado ao semforo funcionacomoumcontadorderecursos:casosejapositivo,indicaquantas instncias daquele recurso esto disponveis. Caso seja negativo, indica quantas tarefas esto aguardando para usar aquele recurso. Alistagemaseguirapresentaumexemplohipotticodeusodeumsemforo para controlar o acesso a um estacionamento. O valor inicial do semforo vagas representaonmerodevagasinicialmentelivresnoestacionamento(500). Quandoumcarrodesejaentrarnoestacionamentoelesolicitaumavaga; enquantoosemforoforpositivonohaverbloqueios,poishvagaslivres. Caso no existam mais vagaslivres, a chamadacarro_entra() ficar bloqueada atquealgumavagasejaliberada,oqueocorrequandooutrocarroacionara chamada carro_sai (). Esta soluo pode ser aplicada a um estacionamento com vrias entradas e vrias sadas simultneas. Algumas implementaes de semforos acordam uma tarefa aleatria da fila, no necessariamenteaprimeiratarefa.Essasimplementaessochamadasde semforos fracos, por no garantirem a justia no acesso seo crtica nem a ausncia de inanio (starvation) de tarefas. Algoritmo 2: Vagas de carros num estacionamento 1.sem_t vagas = 500 ; 2. 3.void carro_entra () 4.{ 5.down (vagas) ; // solicita uma vaga de estacionamento 6.... // demais aes especficas da aplicao 7.} 8. 9.void carro_sai () 10. { 11. up (vagas) ; // libera uma vaga de estacionamento 12. ... // demais aes especficas da aplicao 13. } A API POSIX define vrias chamadas para a criao e manipulao de semforos. As chamadas mais frequentemente utilizadas esto indicadas a seguir: IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 11 de 21. Algoritmo 3: API POSIX num semforo. 1.#include 2. 3.// inicializa um semforo apontado por "sem", com valor inicial "value" 4.int sem_init(sem_t *sem, int pshared, unsigned int value); 5. 6.// Operao Up(s) 7.int sem_post(sem_t *sem); 8.// Operao Down(s) 9.int sem_wait(sem_t *sem); 10. 11. // Operao TryDown(s), retorna erro se o semforo estiver ocupado 12. int sem_trywait(sem_t *sem); Semforos como um mecanismo de sincronizao geral Semforo ContadorValor inteiro positivo pode variar sem limites Semforos genricos ou Semforo BinrioTambm conhecido como mutex locks so os semforos nos quais o contador inteiro pode assumir qualquer valor e constituem um mecanismo de coordenao muito poderoso. No entanto, Muitos ambientes de programao, bibliotecas de threadseatmesmoncleosdesistemaproveemumaversosimplificadade semforos,naqualocontadorsassumedoisvalorespossveis:livre(1)ou ocupado(0).Essessemforossimplificadossochamadosdemutexes(uma abreviaodemutualexclusion)ousemforosbinrios.Porexemplo,algumas das funes definidas pelo padro POSIX [Gallmeister, 1994, Barney, 2005] para criareusarmutexessoaschamadas.Chamadasmaisfrequentemente utilizadas em API POSIX esto indicadas a seguir: Algoritmo 4: Mutex Locks e API POSIX. 1.#include 2. 3.// inicializa um semforo apontado por "sem", com valor inicial "value" 4.int sem_init(sem_t *sem, int pshared, unsigned int value); IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 12 de 21. 5. 6.// Operao Up(s) 7.int sem_post(sem_t *sem); 8. 9.// Operao Down(s) 10. int sem_wait(sem_t *sem); 11. // Operao TryDown(s), retorna erro se o semforo estiver ocupado 12. int sem_trywait(sem_t *sem); Algoritmo de codificao de um mutex Semaphore S; // initialized to 1 P(S); criticalSection(); V(S); Algoritimo 5: Decodificacao de um mutex. 1.#include 2. 3.// inicializa uma varivel do tipo mutex, usando um struct de atributos 4.int pthread_mutex_init (pthread_mutex_t *restrict mutex, 5.const pthread_mutexattr_t *restrict attr); 6. 7.// destri uma varivel do tipo mutex 8.int pthread_mutex_destroy (pthread_mutex_t *mutex); 9. 10. // solicita acesso seo crtica protegida pelo mutex; 11. // se a seo estiver ocupada, bloqueia a tarefa 12. int pthread_mutex_lock (pthread_mutex_t *mutex); 13. 14. // solicita acesso seo crtica protegida pelo mutex; 15. // se a seo estiver ocupada, retorna com status de erro 16. int pthread_mutex_trylock (pthread_mutex_t *mutex); 17. 18. // libera o acesso seo crtica protegida pelo mutex 19. nt pthread_mutex_unlock (pthread_mutex_t *mutex); IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 13 de 21. Variveis de condio Alm dos semforos, outro mecanismo de sincronizao de uso frequente so as variveis de condio, ou variveis condicionais. Uma varivel de condio no representa um valor, mas uma condio, que pode ser aguardada por uma tarefa. Quando uma tarefa aguarda uma condio, ela colocada para dormir at que a condiosejaverdadeira.Assim,atarefanoprecisatestarcontinuamente aquela condio, evitando uma espera ocupada. . Uma tarefa aguardando uma condio representada pela varivel de condio c pode ficar suspensa atravs do operador wait(c), para ser notificada mais tarde, quandoacondiosetornarverdadeira.Essanotificaoocorrequandooutra tarefachamarooperadornotify(c)(tambmchamadosignal(c)).Pordefinio, uma varivel de condio c est sempre associada a um semforo binrio c.mutex eaumafilac.queue.Omutexgaranteaexclusomtuasobreacondio representada pela varivel de condio, enquanto a fila serve para armazenar em ordem as tarefas que aguardam aquela condio. Uma implementao hipottica para as operaes wait, notify e broadcast (que notificatodasastarefasnaesperadacondio)paraumatarefat,seriaa seguinte:Assimcomoosoperadoressobresemforos,osoperadoressobre variveis de condio tambm devem ser implementados de forma atmica. Algoritmo 6: Implementecao Hipotetica das operaes wait, notify e broadcast. 1.wait (c): 2.c:queue t // coloca a tarefa t no fim de c.queue 3.unlock (c:mutex) // libera o mutex 4.suspend (t) // pe a tarefa atual para dormir 5.lock (c:mutex) // quando acordar, obtm o mutex imediatamente 6. 7.notify (c): 8.awake (first (c:queue)) // acorda a primeira tarefa da fila c.queue 9. 10. Broadcast (c): 11. awake (c:queue) // acorda todas as tarefas da fila c.queue No exemplo a seguir, a tarefa A espera por uma condio que ser sinalizada pela tarefa B. A condio de espera pode ser qualquer: um novo dado em um bu_er de entrada, a concluso de um procedimento externo, a liberao de espao em disco, etc. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 14 de 21. Algoritmo 7: Espera sequencial de processos. 1.Task A () 2.{ 3.... 4.lock (c:mutex) 5.while (not condition) 6.wait (c); 7.... 8.unlock (c:mutex) 9.... 10. } 11. Task B () 12. { 13. ... 14. lock (c:mutex) 15. condition = true 16. notify (c) 17. unlock (c:mutex) 18. ... 19. } importanteobservarquenadefiniooriginaldevariveisdecondio (conhecida como semntica de Hoare), a operao notify(c) fazia com que a tarefa notificadoraperdesseimediatamenteosemforoeocontroledoprocessador, queeramdevolvidosprimeiratarefadafiladec.Comoessasemntica complexa de implementar ou programar e interfere directamente no escalonador deprocessos,asimplementaesmodernasdevariveisdecondio normalmente adoptam a semntica Mesa [Lampson and Redell, 1980], proposta nalinguagemdemesmonome.Nessasemntica,aoperaonotify(c)apenas acordaastarefasqueesperampelacondio,semsuspenderaexecuoda tarefa corrente. Cabe ao programador garantir que a tarefa corrente vai liberar o mutex e no vai alterar o estado associado varivel de condio. As variveis de condio esto presentes no padro POSIX, atravs de operadores comopthread_cond_wait,pthread_cond_signalepthread_cond_broadcast.O padro POSIX adota a semntica Mesa. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 15 de 21. Monitores Em 1972, os cientistas Per Brinch Hansen e Charles Hoare definiram o conceito demonitor[LampsonandRedell,1980].Ummonitorumaestruturade sincronizaoquerequisitaeliberaaseocrticaassociadaaumrecursode forma transparente, sem que o programador tenha de se preocupar com isso. Um monitor consiste de: umrecursocompartilhado,vistocomoumconjuntodevariveisinternasao monitor. Um conjunto de procedimentos que permitem o acesso a essas variveis; Um mutex ou semforo para controle de excluso mtua; cada procedimento de acesso ao recurso deve obter o semforo antes de iniciar e liberar o semforo ao concluir; Um invariante sobre o estado interno do recurso. Aousarsemforos,umprogramadordefineexplicitamenteospontosde sincronizaonecessriosemseuprograma.Essaabordagemeficazpara programaspequenoseproblemasdesincronizaosimples,massetorna invivelesusceptvelaerrosemsistemasmaiscomplexos.Porexemplo,seo programadoresquecer-sedeliberarumsemforopreviamentealocado,o programa pode entrar em um impasse. Por outro lado, se ele se esquecer de requisitar um semforo, a excluso mtua sobre um recurso pode ser violada. Opseudocdigoaseguirdefineummonitorparaoperaessobreumaconta bancria(observesuasemelhanacomadefiniodeumaclasseem programao orientada a objetos): Algoritmo 8: Monitor. 1.Monitor conta 2.{ 3.float saldo = 0.0 ; 4. 5.void depositar (float valor) 6.{ 7.if (valor >= 0) 8.conta->saldo += valor ; 9.else IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 16 de 21. 10. error ("erro: valor negativo\n"); 11. } 12. 13. void retirar (float saldo) 14. { 15. if (valor >= 0) 16. conta->saldo -= valor ; 17. else 18. error ("erro: valor negativo\n"); 19. } 20. } A definio formal de monitor prev e existncia de um invariante, ou seja, uma condio sobre as variveis internas do monitor que deve ser sempre verdadeira. No caso da conta bancria, esse invariante poderia ser o seguinte: O saldo atual deve ser a soma de todos os depsitos efetuados e todas as retiradas efetuadas (com sinal negativo). Entretanto, a maioria das implementaes de monitor no suporta a definio de invariantes, com exceo da linguagem Ei_el. Decertaforma,ummonitorpodeservistocomoumobjetoqueencapsulao recursocompartilhado,comprocedimentos(mtodos)paraacess-lo.No entanto, a execuo dos procedimentos feita com excluso mtua entre eles. Asoperaesdeobtenoeliberaodosemforosoinseridas automaticamente pelo compilador do programa em todos os pontos de entrada esadadomonitor(noincioefinaldecadaprocedimento),liberandoo programador dessa tarefa e assim evitando erros. Monitores esto presentes em vrias linguagens, como Ada, C#, Ei_el, Java e Modula-3. O cdigo a seguir mostra um exemplo simplificado de uso de monitor em Java: Algoritmo 9: Monitor (em Java). 1.class Conta 2.{ 3.private float saldo = 0; 4. 5.public synchronized void depositar (float valor) 6.{ 7.if (valor >= 0) 8.saldo += valor ; 9.else IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 17 de 21. 10. System.err.println("valor negativo"); 11. } 12. 13. public synchronized void retirar (float valor) 14. { 15. if (valor >= 0) 16. saldo -= valor ; 17. else 18. System.err.println("valor negativo"); 19. } Em Java, a clusula synchronized faz com que um semforo seja associado aos mtodos indicados, para cada objeto (ou para cada classe, se forem mtodos de classe). Noexemploanterior,apenasumdepsitoouretiradadecadavezpoderser feito sobre cada objecto da classe Conta. Variveis de condio podem ser usadas no interior de monitores (na verdade, os dois conceitos nasceram juntos). Todavia, devido s restries da semntica Mesa,umprocedimentoqueexecutaaoperaonotifyemumavarivelde condiodeveconcluiresairimediatamentedomonitor,paragarantirqueo invariante associado ao estado interno do monitor seja respeitado [Birrell, 2004]. Deadlock e starvation Deadlock pode ser definido como uma dependncia cclica entre processos que esto esperando por um evento (por exemplo, acesso a um conjunto de recursos) que jamais ocorre, dois ou mais processos ficam esperando indefinidamente por um evento que pode ser causado apenas por um dos processos bloqueados. Sejam S e Q dois semforos inicializados com 1 P0 P1 P(S); P(Q); P(Q); P(S); . . . . . . V(S); V(Q); V(Q); V(S); IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 18 de 21. Tentativa de evitar Deadlocks/Impasses Mudarasprioridadesparaquecadasegmentotemachancedeteralta prioridade. Por exemplo, leitores dar prioridade a escritores de espera, mas os escritoresactivosdarprioridadeaosleitoresdeespera.Quandoambosesto esperando, eles acabaro alternados. Aumentar prioridade se um segmento tem sido esperando por muito tempo. Uso ordem FIFO entre pedidos concorrentes ou impasses que impedem. Para entender como evitar impasses, devem-se descobrir condies necessrias para um impasse parar ocorrer. Existem quatro necessrias condies, todas as quaisdevempossuir,porumbloqueiodeocorrer.Sequalquerumacondio falhar, ento voc no pode ter um impasse. 1.Limitada recurso (compartilhado), ou seja, no suficiente para atender a todos os segmentos simultaneamente. Caso contrrio no h espera. 2.Nopreempo:preemposignificaquevoctiraaforarecursode algum. (Difcil de fazer isso com fechos.) 3.Mantenhaeesperar:Tpicosemumimpassesegurarumrecurso,e aguarde outro recurso. Circular esperar: IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 19 de 21. Grfico de espera Segmento A est espera de recursos y; Recurso y detido por segmento B; Fio B est espera de recursos x; Recurso x detido por segmento A. Starvation Ocorrequandoumprocessoesperaporumrecursoebloqueadoporqueo recurso est sempre alocado a outro processo ou seja, bloqueio indefinido. Um processopodenuncaserremovidodafiladesemforosnaqualeleest bloqueado Injustia. Umsegmentopodeesperarindefinidamente,porqueosoutrossegmentos continuam chegando e recebendo os recursos solicitados antes deste segmento ser executado. Note-se que recurso est sendo activamente Utilizadoedadiscussovaiparardeesperar,seoutrostpicospararemde chegar dentro. Livelock - ocorre quando um processo no continua a sua execuo, enquanto outros processos executam normalmente.O processo pode nunca terminar a sua execuo. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 20 de 21. Concluso Semforos como um conjunto ou sequencias de instrues, so no nosso dia-a-dia,implementadoemquasetodosossectores,vistoquetantoemquestes urgentesquantoemquestesmaissimples,nosvemosdevidamenteem situaesdeesperaporqualquerquesejaqualforarazo.Osprogramase funcionamentodelesassimcomoodossemforos,sodetalhadosdeacordo com os impasses da nossa vida, deadlock e starvation no se distanciam muito doscasosderelaoestudante/docente,comprador/cliente, utilizador/fabricanteeoutrosexemplos,vistoquequantomelhorforo atendimentoourelaoentreambos,maiscongestionamentosrelacionais destacam-se,contudo,maisimpassespararelacionamentosdognero.Deum modo geral, referir que impasses fazem parte da vida dos seres. IPST 2014 SISTEMAS OPERACTIVOS - SEMAFAROS, DEADLOCK E STARVATION Pgina 21 de 21. Referncias bibliogrficas 1.[Barney,2005]Barney,B.(2005).POSIXthreadsprogramming. http://www.llnl.gov/computing/tutorials/pthreads. 2.[Ben-Ari, 1990] Ben-Ari, M. (1990). Principles of Concurrent and Distributed Programming. 3. [Birrell,2004]Birrell,A.(2004).Implementingconditionvariableswith semaphores. 4.Computer Systems Theory, Technology, and Applications, pages 2937. 5.[Co_manetal.,1971]Co_man,E.,Elphick,M.,andShoshani,A.(1971). System deadlocks. ACM Computing Surveys, 3(2):6778. 6 [Gallmeister, 1994] Gallmeister, B. (1994). POSIX.4:Programming for the Real World. 7. [Holt,1972]Holt,R.(1972).Somedeadlockpropertiesofcomputer systems. ACM Computing Surveys, 4(3):179196. 8.[Lampson and Redell, 1980] Lampson, B. and Redell, D. (1980). Experience with processes and monitors in Mesa. Communications of the ACM. [Tanenbaum, 2003] Tanenbaum, A. (2003). Sistemas Operacionais Modernos, 2a edio. Pearson Prentice-Hall. 10.FredKuhns([email protected],http://www.arl.wustl.edu/~fredk) Department of Computer Science and Engineering; Washington University in St. Louis; (3/15/2004) CS422, Operating Systems Concepts