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