Paginação, Deadlocks e Starvation | Amigo Nerd

http://amigonerd.net/exatas/informatica/paginacao-deadlocks...

Com pressa? Não achou o que precisava? Solicite um trabalho personalizado. Clique aqui!
Curtir 3.978 pessoas curtiram isso. Cadastre-se para ver do que seus amigos gostam. +129

Paginação, Deadlocks e Starvation

Autor: Flávio Vieira de Castro Instituição: CEFET Tema: Algoritmos de Substituição de Paginação

Compartilhe este trabalho

0

Algoritmos de Substituição de Páginas

Introdução Neste trabalho apresentarei características dos sitemas operacionias modernos como: Paginação – Um excelente recurso que faz com que projetos de hardware de pouco desempenho em relação a memórias, possam apresentar bom desempenho frente a programas que exijam maior quantidade de memória do que o existente no projeto. Deadlock – Um problema que está presente em todos os sistemas operacionais atuais, que leva ao travamento de processos, serão apresentadas algumas formas de evitar este problema. Starvation – A situação de starvation está presente quando o sistema operacional provê prioridades a processos, que não atualizados fazem com que os processos de menor prioridade nunca sejam executados causando assim, deficiência em servidores de impressão e etc.

1 - Paginação A maioria dos sistemas de memória virtual usa a técnica denominada paginação, que será descrita a seguir. Em muitos computadores existe um conjunto de endereços de memória que os programas podem gerar no decorrer de suas execuções. Quando um programa executa uma instrução como MOVE REG,1000 ele está copiando o conteúdo do endereço de memória 1000 para o REG, ou vice-versa, dependendo do computador. Os endereços podem ser gerados por indexação, registradores-base, registradores de segmento, além de várias outras técnicas. Tais endereços, gerados pelo programa, são chamados de endereços virtuais e forma o espaço de endereçamento virtual. Em computadores sem memória virtual, o endereço virtual é colocado diretamente no barramento da memória, fazendo com que o endereço físico da memória, equivalente a ele, seja lido ou escrito. Quando a memória virtual é usada, os endereços virtuais não vão direto para o barramento da memória. Em vez disso, eles são encaminhados à unidade de gerência de memória (MMU), um chip ou um conjunto de chips que mapeiam os endereços virtuais em endereços físicos da memória, conforme ilustrado na Fig. 3.10. Um exemplo de como este mapeamento trabalha é mostrado na Fig. 3.11. Neste exemplo, temos um computador que pode gerar endereços de 16 bits, de 0 até 64k, correspondentes ao espaço de endereçamento virtual da máquina. No entanto, este computador tem apenas 32K de memória física, de forma que apesar de podermos escrever programas com até 64K, estes não podem ser totalmente carregados na memória e executados. Uma cópia completa do programa deve sempre ser mantida no disco, de forma que pedaços dele possam ser colocados na memória, quando necessários. O espaço de endereçamento virtual é dividido em unidades denominadas páginas. As unidades correspondentes na memória física são as molduras de página (page frames). As páginas e as molduras de página são sempre do mesmo tamanho. Neste exemplo, elas têm 4K endereços, porém páginas de 512 até 8K são usadas rotineiramente. Com 64K de espaço de endereçamento virtual, e 32K de memória real, teremos 16 páginas virtuais e oito molduras de página. As transferências da memória para o disco e vice-versa são sempre feitas em páginas. Quando o programa tenta acessar o endereço 0, por exemplo, usando a instrução MOVE REG,0 o endereço virtual 0 é enviado à MMU. Esta conclui que este endereço virtual cai na página 0 (endereços virtuais de 0 a 4095), que de acordo com seu processo de mapeamento está na moldura de página 2(endereços reais de 8.192 a 12.287). Ela então transforma o endereço que lhe foi entregue para 8.192, e coloca este valor no barramento da memória. A placa de memória desconhece a existência da MMU, e simplesmente enxerga uma requisição para ler ou escrever no endereço 8.192, realizando tal acesso. Então, a MMU efetivamente mapeia todos os endereços virtuais de 0 a 4.095 nos endereços reais de 8.192 a 12.287. Da mesma forma, a instrução MOVE REG,8192 é executada como

1 de 9

20-06-2013 22:57

e esta página ser mapeada na moldura 6 (endereços físicos de 24. e entender por que escolhemos um tamanho de página que é uma potência inteira de 2. Ao decidir assim. tanto teórico quanto experimental. Se uma página não vai ser usada antes de oito milhões de instruções serem executadas.671) e é mapeado no endereço real 12. modifica o mapa e reexecuta a instrução causadora do trap. Como resposta ao trap.192 encontrar-se na página 2. copiados sem nenhuma modificação em relação ao deslocamento do endereço virtual. se o sistema operacional resolver substituir a página na moldura 1. ele deve marcar a entrada correspondente à página virtual 1 como não-mapeável. somente oito das páginas virtuais da Fig.Paginação. não são mapeáveis. Então ele busca a página referenciada e a copia na moldura que acabou de ser liberada. O único senão deste algoritmo é que ele não é realizável na prática. 3. O que ocorre se um programa tenta usar uma página não mapeada. Quando um processo é (re)inicializado. Desta forma.O Algoritmo Ótimo O melhor dos algoritmos de substituição de páginas é fácil de descrever. Depois. 1. realizada pela MMU. mas impossível de implementar. por exemplo.11. permitindo ao sistema operacional setar o bit M e mudar o modo para LEITURA/ESCRITA. que tem início em 32. talvez tenhamos de trazê-la de volta muito em breve. a primeira deve ser removida antes da segunda. A bibliografia do paper de Smith (1978) lista nada mais nada menos que 300 outros papers a respeito do assunto.096 bytes que compõem uma determinada página.32780 cujo endereço virtual gerado está 12 bits após a origem da página 8. os esforços canalizados na busca de um algoritmo melhor só poderão redundar em uma melhora de no máximo 1 por cento. Outras páginas poderão só ser referenciadas 10. Obviamente. para que um trap seja gerado quando houver qualquer acesso futuro a um endereço virtual desta página. ele permanecerá em um até que o sistema operacional o faça novamente 0. Para evitar confusão.12. a cada interrupção de temo o bit R é zerado para tornar possível a identificação de painas que não tenham sido referenciadas recentemente daquelas que foram. ele deve carregar a página virtual 8 no endereço 4K e fazer duas mudanças no mapeamento da MMU. em virtude do endereço virtual 8. o número da moldura de página é copiado para os três bits de mais alta ordem do registrador de saída da MMU. ele não é usado na prática. Deadlocks e Starvation | Amigo Nerd MOVE REG.Algoritmo da Página Não Usada Recentemente De modo a permitir que o sistema operacional colete as informações necessárias decidir quais das páginas na memória principal estão sendo usadas e quais não estão. O sistema operacional então seta o bit R (em suas tabelas internas). Os bits R e M podem ser usados para construir um algoritmo de paginação muito simples. uma página de código). Cada página pode ser identificada pelo número de instruções depois da corrente que deverão ser executadas até que ela seja novamente referenciada. O algoritmo de substituição ótimo diz apenas que a página com o número de identificação mais alto deve ser removida primeiro. Com os quatro bits referentes ao número da página. O endereço virtual de 16 bits que chaga à MMU é dividido em um número de pagina de quatro bits. Um deles. Se o hardware na possuir esses bits. eles podem ser simulados com a seguir. Se o bit e Presença/Ausência for 0. vemos um exemplo do endereço virtual 8. o sistema operacional pega a moldura de página menos usada e a copia de volta para o disco.Algoritmos de substituição de páginas Quando ocorre falta de página. Na Fig. Apesar de ser poder escolher randomicamente a página a ser retirada a cada ocorrência de uma falta de página. tentando. levando ao número da moldura de página correspondente a esta página virtual.1 . identificadas por um X na figura. sendo mapeado usando o mapa da MMU da Fig. A nova página é simplesmente escrita em cima da página escolhida para ser retirada. A exemplo das pessoas.2 .108.768? A MMU observa que se trata de uma página não-mapeável e força o processador a executar um trap para o sistema operacional. Por exemplo. e outra antes da execução de seis milhões de instruções. os computadores também tendem a adiar o quanto possível a ocorrência de eventos desagradáveis. Juntos eles formam o endereço físico de 15 bits. seta o modo leitura e retoma a execução da instrução interrompida pela falta de página. tem sido feito em cima da questão dos algoritmos de substituição de páginas. Se removermos uma página fortemente referenciada. O conteúdo do registrador de saída é então colocado no barramento da memória. Este trap é denominado falta de página. As outras. Por si só.1. junto com os 12 bits do deslocamento. ela deve ser reescrita no disco. é feito igual a 1 sempre que a página a ele associada for referenciada (lida ou escrita).196 (0010000000000100 em binário). ele deve substituir o xis na entrada correspondente à página virtual 8 por um 1. Se a página escolhida para ser removida tiver sido modificada durante sua estada de memória.576 a 28. a performance do sistema será muito melhor se conseguirmos substituir uma página que não esteja sendo muito referenciada. O número da página é usado como índice da tabela de páginas. não resolve o problema do espaço virtual ser maior do que o espaço real disponível na memória. No hardware real. um bit de presença/ausência existente em cada uma das entradas informa se a pagina pode eu não ser mapeada. resultante do endereço virtual que foi apresentado anteriormente à MMU. a cópia do disco continua atualizada. Se a página não tiver sofrido nenhuma modificação (por exemplo..780 no endereço físico 4. por exemplo. de foram que é fundamental que essa atualização seja efetuada por hardware. rodando o programa num simulador. deve ser enfatizado que o log de referência a páginas obtido refere-se programa medido. é gerado um trap para o sistema operacional. o algoritmo procura adiar o problema da próxima falta de página o máximo possível. O algoritmo de substituição resultante dele só é válido para este programa em particular. modifica a entrada da tabela de páginas de forma a fazê-la apontar para a página correta. Tão logo uma página seja referenciada. Se um sistema operacional tem um algoritmo de substituição que causa uma performance.1. 3. Ele funciona da seguinte forma: no momento em que há a ocorrência de falta de página. de forma a atualizar a cópia lá existente. para ver como ela funciona.000 instruções depois da atual. Tais bits fazem parte de cada uma as entradas da tabela de páginas. Apesar de este método ser útil na avaliação de algoritmos de substituição de páginas. de maneira que quando a instrução que gerou o trap for reexecutada. o sistema operacional não tem como saber quando cada uma das páginas da memória será referenciada de novo. 3. Agora vamos dar uma olhada dentro da MMU. ou seja.1 . toas as suas entradas da tabela de páginas são marcadas como se não estivessem na memória. Quando um processo é (re)inicializado. e anotando todas as referências a páginas realizadas. executar a instrução MOVE REG. 2 de 9 20-06-2013 22:57 . É importante observar que estes bits precisam ser atualizados a casa referência à memória.. ocorrerá uma falta de página. o sistema operacional deve escolher uma página a ser removida para dar lugar à que deve ser gravada na memória real. é possível implementar o algoritmo ótimo na segunda rodada do programa usando a lista de referência obtida na primeira rodada. deve haver o mapeamento do endereço virtual 32.288 + 20 = 12. o bit M. O outro. correspondendo ao endereço físico. é setado quando alguma informação for escrita na página (quando a página for modificada). é possível comparar a performance de outros algoritmos realizáveis na prática com a performance do melhor algoritmo possível de ser construir. Uma vez que um destes bits seja setado. e não é necessário recopiá-la. causando um overhead desnecessário. uma nova falta de paina é gerada.24576 http://amigonerd. e em um deslocamento de 12 bits. e com os 12 do deslocamento podemos endereçar todos os 4. 1. 1.net/exatas/informatica/paginacao-deadlocks. o bit R. Periodicamente. Se este bit for igual a 1.308. Como dispomos de apenas oito molduras de página.11 são passíveis de ser mapeadas em endereços físicos. está capacidade de mapear as 16 páginas em qualquer uma das molduras de página. podemos representar 16 páginas. Uma delas será referenciada na próxima instrução. Na ocorrência de uma falta de página. Muito trabalho. Se a página for escrita depois. trata-se da página que contém a instrução que gerou a falta de página. 100 ou até 1. muitos computadores com memória virtual têm dois bits de estado associados a cada página. existe um conjunto delas armazenado na memória. ambos os bits de todas as páginas são feitos iguais a 0 pelo sistema operacional. Primeiro. digamos 1 por cento abaixo da obtida com o algoritmo ótimo.

este algoritmo degenera no FIFO puro. Uma a uma. Encontra uma página na lista. Este procedimento se repete até que seja encontrada uma página com R=0. a busca continua. existem outras formas de se implementar o LRU em hardware. não tem sido referenciada. Inevitavelmente ele voltará a examinar a página A. modificadas. A será colocado no fim da fila. uma nova página é inserida em seu lugar. sendo a nova página adicionada ao fim desta fila. modificadas. Uma alternativa seria buscar uma forma de implementar uma aproximação deste algoritmo por software. Uma forma mais apropriada pra gerenciar a idade das páginas é mantê-las em uma fila circular. a mesma idéia pode ser aplicada. Na Fig. zerando seus bits R a cada vez que uma página é movimentada. ordenadas de acordo com o tempo de chegada à memória. Sempre que uma moldura K for referenciada. então.5 . que é incrementado automaticamente. eliminando de suas prateleira algum outro produto. A página mais antiga é A. O método requer um contador de 64 bits. A operação deste algoritmo. após a execução de cada instrução.1. Vamos examinar agora um outro tipo de hardware para tal algoritmo. Classe 2: referenciadas. este algoritmo diz que é melhor remover uma paina que tenha sido modificada e não referenciada em pelo menos entre duas interrupções de tempo (tipicamente 20 ms). é necessária a manutenção de uma lista ligada de todas as páginas da memória.O Algoritmo FIFO Um outro algoritmo com muito pouco overhead na implementação é o FIFO (Primeiro-a-Entrar. a página aponta é inspecionada. sendo seu "tempo de carga" atualizado pra o tempo corrente (20). e a que foi usada há mais tempo atrás. Certo dia. Se R for 1. Na ocorrência de uma falta de página. o hardware do LRU pode manter uma matriz n X n. com a página no topo da fila sendo a mais antiga e a do fim da fila a que chegou há menos tempo. retira-la da lista e mover uma outra para o inicio da lista são operações que consomem muito tempo. O algoritmo NUR (Não Usada Recentemente) remove randomicamente uma página da classe com o menor número de identificação. A maior atração do NUR é que ele é fácil de entender. devendo este ser eliminado. O Algoritmo da segunda chance seta procurando uma página antiga que não tenha sido referenciada dentro do último intervalo entre duas interrupções de tempo. Além do mais.. alem de velha. é fazer com que o algoritmo examine o bit R da página mais antiga. O bit R recebe o valor 0. Um ponteiro aponta para a página mais antiga. diferindo da segunda chance apenas na implementação mais eficiente. Se R for igual a 1. Não sem razão. Implicitamente. o hardware coloca todos os bits da linha K em 1. Na ocorrência de uma falta de página. as páginas que não foram referenciadas pelas últimas instruções provavelmente continuarão não sendo usadas por um bom tempo. como sal ou manteiga. em sua forma pura. Em cada instante. Em algoritmos de substituição de páginas. o mesmo problema ocorre.3 . 3. sendo escrita de volta no disco ou simplesmente abandona.1.. Se ele for 0. ela será retirada da memória. o sistema operacional examina todos os valores dos contadores armazenados na tabela de páginas para encontrar o mais baixo.1.O Algoritmo Relógio Apesar do algoritmo da segunda chance ser razoável. com aquela que foi usada mais recentemente na frente. alguma indústria introduz um novo tipo de alimento que faz um tremendo sucesso comercial.24. No entanto. se R estiver setado. a linha com o menor valor binário armazenado será correspondente à página usada há mais tempo. o algoritmo zera seu valor e avança para examinar a próxima página. pois o supermercado mantém uma fila ligada de todos os produtos vendidos atualmente. Por isso. o valor corrente do contador é armazenado na entrada da tabela de páginas correspondente à página que acabou de ser referenciada. embora não certamente a ótima. Da mesma forma. sendo então considerada como tendo acabado de entrar na memória. Depois disso. não-modificadas. não-modificadas. Primeiro-a-Sair). este bit é zerado. ma página pode ser colocada nesta classe quando ela já houver sido modificada. Apesar do LRU ser em tese realizável. e numa interrupção de tempo o sistema operacional tenha zerado seu bit R. como mostra a Fig. nunca é usado. tal decisão é tomada com facilidade. Evidentemente que o sistema operacional não pode muar o bit M. denominado segunda chance. Neste momento A é escolhida para deixar a memória. mesmo quando realizadas por hardware. pois está sempre movendo páginas para o fim da lista.25. cada entrada da tabela de páginas precisa ter um campo extra para armazenar o valor do contador.4 . 1. há necessidade de se contar com um hardware especial (caro).1. a página do início deve ser removida.24(a) têm seus bits R setados. o algoritmo FIFO. 1. Deadlocks e Starvation | Amigo Nerd http://amigonerd. Esta estratégia é conhecida como da página usada há mais tempo (LRU). O sistema operacional mantém uma fila de todas as páginas que estão na memória. e depois zera todos os bits da coluna K. De fato. C. A procura pela página que vai ser eliminado continua com o exame das informações referentes a B. O problema é que a lista precisa ser atualizada a cada referência à memória. quanto um dos menos vendidos. mantidas numa fila ligada. que chegou no tempo 0. Na ocorrência de falta de página. Para implementar totalmente o LRU. este algoritmo é conhecido como algoritmo do relógio. Vamos considerar em primeiro lugar. remova da memória a página que foi usada há mais tempo. Classe 3: referenciadas.net/exatas/informatica/paginacao-deadlocks. arranjar um jeitinho pra vendê-lo. Após cada referencia à memória. 3. Por outro lado. do que uma não-modificação que esteja em uso. Quando aplicado ao problema do supermercado. ele é desnecessariamente ineficiente. Se seu bit R for 0. pois tal informação é necessária para que se possa saber se será ou não preciso copiar esta página de volta no disco quando ela sair da memória. Quando aplicada aos computadores. 1. sua implementação não é barata. o sistema operacional move as páginas para o fim da fila. baseado no valor corrente dos bits R e M: Classe 0: não-referenciadas. 3. como sacos de lixo. na ordem em que eles entraram pela primeira vez no estoque. quando o processo (re)iniciou sua execução. a mais simples delas. em forma de relógio. considere um supermercado que tem prateleiras suficientes para armazenar exatamente K produtos diferentes. e que não esteja vazia. ela sai da memória. Especificamente.24(a) vemos as páginas de A até H. 1.6 . A busca em uma lista ligada e a manipulação das informações esta lista a cada instrução executada são proibitivas em função da lentidão intrínseca destas operações. O mais novo está no fim da fila. fácil de implementar e tem uma boa performance. Suponha que uma falta de página ocorra não tempo 20.O Algoritmo da Segunda Chance Uma pequena mudança no algoritmo FIFO. Se todas as páginas presentes na memória tiverem sido referenciadas no intervalo citado. é mostrada na Fig. Se A tem bit R em 0. conforme o valor de seu bit M. aquela com o próximo valor será a próxima usada há 3 de 9 20-06-2013 22:57 . Na ocorrência de uma falta de página. para evitar que páginas muito usadas sejam descartadas. 3. o sistema operacional inspeciona todas as páginas. Classe 1: não-referenciadas. inicialmente zerada. Esta idéia sugere um novo algoritmo: quando ocorrer uma falta de página. Para uma máquina com n molduras de página.O Algoritmo da Página Usada Há mais tempo (LRU) Uma boa aproximação do algoritmo ótimo é baseada na observação de que páginas que foram muito usadas pelas últimas instruções executadas continuarão sendo usadas pelas próximas instruções. o algoritmo FIFO tanto pode remover um dos itens mais vendidos. considere que todas as páginas da Fig. e o ponteiro é atualizado para apontar para a próxima posição. Além disso. Nosso supermercado deve. a página. Uma possibilidade é descobrir qual dos produtos este supermercado vem estocando há mais tempo e livrar-se dele. agora com R em 0. Para ilustrar seu funcionamento. e o mais velho o início. a página é colocada no fim da fila de páginas. de modo que ela deve ser removida imediatamente para da lugar a outra. dividindo-as em quatro categorias. A página correspondente a esta entrada será aquela que foi usada há mais tempo. Apesar da caracterização da classe 1 parecer em princípio sem sentido.Paginação.

nenhum deles poderá fazer acontecer qualquer um dos eventos que pode vira a acordar um dos demais membros do conjunto.1 . este pode simplesmente adquirir acesso a todos os recursos de que precisar e fazer seu trabalho. 0. Na verdade. O fato de haver dois processos usando a impressora simultaneamente leva a resultados indesejáveis. A cada interrupção de tempo. e nenhum dos processos será acordado. Felizmente. Este algoritmo difere do LRU em dois aspectos. cada um dos membros do conjunto de processos em deadlock está esperando por um recurso que foi entregue a outro processo deste mesmo conjunto. o valor do bit R. quatro interrupções consecutivas. Com efeito. em vez daquelas que não mais estão sendo usadas. é necessário que haja uma solução em software. No entanto. As quatro colunas restantes mostram a situação dos seis contadores após a ocorrência das próximas quatro interrupções de tempo. Em conseqüência. digamos. 1. Os deadlocks podem ocorrer em diversas outras situações. no momento alocado a um outro processo do conjunto. e o processo B faz o mesmo com um registro R2. que existam dois processos. De acordo com o LRU. Guardando somente um bit por intervalo perdemos a capacidade de distinguir a ordem das referências dois intervalos antes. Em muitas aplicações. 2.27 ilustra como este algoritmo. também teremos a ocorrência de um deadlock. uma destas duas deverá ser a escolhida. o sistema operacional vai remover páginas em uso.000 intervalos.Simulação do LRU em Software Apesar de ambas as implementações do LRU serem perfeitamente realizáveis.net/exatas/informatica/paginacao-deadlocks. (1971) mostrou que quatro condições devem ocorrer para que se configure uma situação de deadlock: 1. conhecido como aging. 3. pode muito bem ter acontecido de uma as páginas ter sido referenciada por último há nove intervalos. página 1 é 0. em vez de liberar a fita.27(a). e a 3 não. além daquela onde processos solicitam aceso a dispositivos de entrada/saída dedicados. 2. Condição de exclusão mútua: cada recurso ou está alocado a exatamente um processo ou está disponível. Assim sendo todos os processos do conjunto vão ficar eternamente bloqueados. O processo B requer e também consegue permissão para usar a unidade de fita. a página com a contagem mais baixa é escolhida para deixar a memória.1. e assim sucessivamente. 1. Um exemplo do funcionamento deste algoritmo aparece ilustrado na Fig. A segunda diferença entre o LRU e a aging é que neste último os contadores têm um número finito de bits. Na realidade. O problema é que não temos como saber qual delas foi referenciada por último no intervalo entre as interrupções 1 e 2. 3. sendo de pouca utilidade para projetistas de sistemas operacionais que vão rodar em máquinas que não possuam tal hardware. Se um processo A bloqueia o acesso a um registro R1. e então cada processo tenta acesso ao registro do outro processo. Para cada uma delas. funciona. o sistema operacional percorre todas as páginas da memória. a prática mostra que oito bits são suficientes se o intervalo entre interrupções de tempo for de em torno de 20 ms. o evento que cada processo está esperando é a liberação de algum dos recursos. e a outra há 1. Suponha que após o primeiro sinal do clock os bits R das páginas de 0 a 5 sema 1. Em um sistema com somente um processo. A seguir. inicialmente em zero. Suponha duas páginas. Por conta disso. acesso exclusivo a certos recursos. Fica claro que a página que não tiver sido referenciada por.. Uma de tais soluções é a denominada página não usada frequentemente ou algoritmo NFU.. Suponha por exemplo.26(a). Infelizmente. pois seus bits R mantiveram-se em 0. e as demais não foram. Observe que tanto a quantidade de processos quanto a de recursos envolvidos no problema é irrelevante. e consequentemente). Em outras palavras. vai ter quatro zeros nos bits mais significativos de seu contador. as páginas 0. Como nenhum destes processos pode rodar. Segundo. 3. em sistemas multiprogramados. 4 de 9 20-06-2013 22:57 . ambas com seu contador zerado. 3. as páginas que foram muito usadas durante o primeiro passo terão ainda uma contagem alta durante os demais passos. pois seus bits R estão em 1. Contudo. B solicita permissão pra usar a impressora. ambos os processos estão bloqueados. Está situação é conhecida como deadlock. a página cujo contador tem o valor mais baixo deve der removida.Condições para Ocorrência de Deadlocks O artigo de Coffman et al.Deadlocks O deadlock pode ser definido formalmente como se segue: Um conjunto de processos está em uma situação de deadlock. Considere as páginas 3 e 5 da Fig. os valores resultantes de tais contadores são mostrados na Fig.1 . antes de serem adicionados a R. Um processo que estiver fazendo cópia de arquivo armazenado em fita magnética para a impressora precisa ter acesso exclusivo a ambos os dispositivos. na execução de um compilador com mais de um passo. a um determinado processo. Sua implementação requer um contador em software associado a cada página. Em conseqüência. temos a situação mostrada na Fig. O processo A solicita e consegue permissão pra usar a impressora. fica claro que o sistema operacional deve ser capaz de garantir. as contagens constituem uma tentativa de tomar conta de freqüência de uso de cada página. cada um dos quais querendo imprimir um arquivo armazenado em fita. elas dependem de um hardware especial. 3. um processo precisa ter acesso exclusivo não apenas a um recurso. Os computadores possuem diversos recursos que só podem ser usados por um processo de cada vez. Quando ocorre uma falta de página. respectivamente (página 0 é 1. provavelmente não é tão importante. uma pequena modificação no algoritmo do NFU torna-o habilitado a simular muito bem o LRU. oito neste exemplo. Em outras palavras. Pelo fato de todos os processos estarem esperando.Paginação. é adicionado ao valor corrente do contador. o bit R é adicionado ao bit mais à esquerda do contador. 2 . Quando ocorre uma falta de página. 1. se cada processo do conjunto estiver esperando por um evento que somente outro processo pertencente ao conjunto poderá fazer acontecer. e ambas referencias no intervalo anterior e estes. e.27(e). o processo A pede acesso à unidade de fita. pra evitar a ocorrência de condições de corrida. o sistema de arquivos de um computador ficará irremediavelmente comprometido se dois processos utilizarem a mesma posição da tabela de nós-i. um programa pode ser obrigado a bloquear vários registros. entre as interrupções de tempo 0 e 1.26 para quatro molduras de página e a seguinte ordem de referências às páginas 0123210323 Após a referência à página 0. Na maioria dos casos. mas a vários. nenhum recurso será liberado. Após os seis contadores correspondentes terem sido deslocados e os bits R inseridos à esquerda de cada um deles. Por exemplo. O grande problema do NFU é que ele nunca esquece coisa alguma. em vez do mais à direita. Primeira. Não há como enxergar isto. Tudo o que podemos fazer é remover uma delas randomicamente. A modificação consiste em duas partes. Nenhuma das duas foi referenciada nos dois primeiros intervalos entre interrupções de tempo. temporariamente. portanto terá um valor menor que o de outro contador cuja página não foi referenciada por três interrupções consecutivas. Neste ponto. o passo que executar por mais tempo vai fazer com que as páginas com seu código tenham sempre contagem mais alta que aquelas pertencentes aos outros passos. Exemplos típicos e tais recursos incluem impressoras. Conclui-se que os deadlocks podem ocorrer tanto em recursos de hardware quanto em recursos de software. A Fig. 4 e 5 foram referenciadas. Em um sistema de banco de dados. e assim permanecerão pra sempre. que é 0 ou 1. 0. os contadores são sempre deslocados um bit à direita. Da mesma forma. mais tempo.6. a questão do aceso aos recursos torna-se um pouco mais complicada. se uma página tiver que ser substituída. mas a solicitação não vai poder ser atendida até que o processo B libera esta unidade. ao mesmo tempo. Deadlocks e Starvation | Amigo Nerd http://amigonerd. e assim por diante. unidades de fita e posições na tabela de nós-i do sistema. Se a pagina não foi referenciada por 160 ms. página 2 é 1.

Normalmente. mantendo-os reservados até que o job termine. Neste momento. Eventualmente.. e depois uma unidade de fita. então B não pode requisitar i. devendo esse aguardar antes de iniciar sua execução. vamos analisar a questão da exclusão mútua.2.net/exatas/informatica/paginacao-deadlocks. Mesmo com o uso de vários processos. de que se usarmos a técnica do spooll para as saídas dos processos na impressora. 2. Um problema imediato que pode ocorrer com esta abordagem é o fato de muitos processos não conhecerem com antecedência quantos e quais os recurso necessários à sua execução. Se i<j. A resposta pode ser encontrada. fazendo com que ele possa rodar até terminar. poderemos eliminar completamente a possibilidade de ocorrência de deadlocks. Apesar de este método passar ao programador mais uma obrigação. então A não pode requisitar j. O processo que estiver de posse deste recurso não vai poder solicitar nenhum dos recursos já alocados. se usarmos esta técnica para tratar da competição por espaço em disco. Neste caso. O sistema então adquire todos estes recursos.11(a). Ou ele termina usando os recursos à sua disposição. esta regra continua a valer. Em vista disto. Lamentavelmente. espaço em disco para spooll. está claro também que dar permissão a dois processos para acessar a mesma impressora ao mesmo tempo vai levar a uma situação caótica. no que concerne a resultados práticos. Por isso. além de imprimir os resultados em um plotter. registros de base de dados bloqueados. este processo vai terminar e liberar todos os seus recursos. Uma forma de se alcançar este objetivo é exigir que todos os processos requisitem todos os recursos de que precisam. esta informação só estará disponível ao longo do processamento. 2. Se determinado processo requisitar os recursos 9 e 10. Lembremo-nos. Um processo pode solicitar primeiro uma impressora. poderemos garantir que será estruturalmente impossível a ocorrência de deadlocks (Havender. com a adoção deste modelo não teremos deadlocks envolvendo a impressora. eles vão ter numeração diferente. nunca teremos configurada uma situação de deadlock. Assumindo que i e j são recurso distintos. antes de iniciar a execução. que em geral não estão disponíveis. o algoritmo do banqueiro poderia ser empregado com sucesso. Com esta regra. Se todos os recursos precisarem ser solicitados com antecedência. se ele só mandar o segundo conjunto de dados para impressão horas depois de ter mandado o primeiro.Ataque ao Problema da Exclusão Mútua Em primeiro lugar. De qualquer forma. solicita um recurso de numeração ainda maior do que a de todos os já alocados. é impossível encontrar uma ordenação que satisfaça a todos. Agora a regra é esta: processos podem solicitar recursos sempre que necessário. todos os recursos que lhe estiverem alocados. como nenhum processo terminou de gravar seus dados na área de spooll. Se pudermos impedir processos de manter a posse de recursos enquanto esperam por outros recursos. é impossível que uma condição de deadlock se configure. a impressora pode permanecer sem uso. Se i>j. A condição de espera circular pode ser eliminada de diversas maneiras. este é o germe de uma idéia aplicada com freqüência: evitar entregar um recurso. e outros recursos abstratos. Se pudermos garantir que pele menos uma destas condições nunca será satisfeita. No caso citado acima. 2. Em resumo. Quando os recursos incluírem posições na tabela de processos. só poderá haver deadlock se A requisitar o recurso j. um dos recursos alocados terá o número mais alto.2. está montado um cenário em que tosos os processos podem terminar sua execução. No entanto. de forma que não há possibilidade de ocorrer deadlock. 6. Condição de posse e de espera: processos que estejam de posse de recursos obtidos anteriormente podem solicitar novos recursos. Deadlocks e Starvation | Amigo Nerd http://amigonerd. 6. o grafo de alocação de recursos nunca vai conter ciclos. Um outro problema é o fato de os recursos não serem usados de maneira ótima quando este método é empregado. Eles precisam ser liberados explicitamente pelo processo que detém sua posse. cada um dos quais esperando por um recurso que está com o próximo membro da cadeia. seremos levados a situações de deadlock. o número de recursos em potencial e seus diferentes usos vai ficar tão grande que nenhum tipo de ordenação vai funcionar.Prevenção de Deadlocks Estudos anteriores deixaram claro que evitar os deadlocks é impossível na prática. mas todas as solicitações precisam ser feitas em ordem numérica. contudo. 5 de 9 20-06-2013 22:57 . 3. ou. pois são necessárias informações sobre solicitações futuras. Para um processo que precise copiar o conteúdo de uma fita inteira pra a impressora. já que nenhuma das três anteriores revelou-se atrativa na prática. o processo vai ocupar desnecessariamente. e nenhum dos dois tiver terminado? Se o gerente de impressão tiver sido programado pra começar a impressão física logo depois que o processo enviar o primeiro conjunto de dados para a área de spooll. No entanto. em primeiro lugar. Todas as quatro condições acima citadas devem estar presentes para que possa ocorrer deadlock. Depois disso. sem nenhum problema.3 . conforme mostrado na Fig.Paginação. e insistir no fato de que nenhum processo possa adquirir um recurso de numeração menor do que qualquer um que ele já possua. nem todos os dispositivos podem ser gerenciados pela técnica do spooll. Uma pequena variação deste algoritmo é forçar os processos a solicitar seus recursos numa ordem estritamente crescente. Tomemos como exemplo o caso de um processo que lê dados de uma unidade de fita. Condições de não-preempção: recursos já alocados a processos não podem ser tomados à força. Neste modelo. Se um ou mais destes recursos estiverem ocupados. Caso o processo dispusesse destas informações. além de desperdiçar recursos. os gerentes de impressão são programados para iniciar a impressão somente depois de toda a saída estar disponível.Ataque ao Problema da Posse e da Espera A segunda das condições de Coffmam et al. Parece ser um pouco mais promissora do que a primeira.1 . Considerando que tal processo nunca precisa de outro recurso que não seja a impressora. algum dos demais processos vai pegar o recurso de numeração mais alta e também vai terminar sua execução. Além disso. Condição de espera circular: deve existir uma cadeia circular de dois ou mais processos.2 . por uma hora. nenhum deles será alocado ao processo. 1968). esta restrição é inaceitável. e tentar estar certo de que o mínimo possível de processos está precisando de recursos. fica a questão de como os sistemas operacionais evitam o deadlock. analisa-os durante uma hora. mas não pode requisitar primeiro a fita e depois a impressora. 2. 4. (1971). em geral. Se todos estiverem disponíveis.Ataque ao Problema da Condição de Não-Preempção Resta-nos somente uma condição para tentar resolver a questão dos deadlocks. mas alocada a este processo por muito tempo. o único processo que pode requerer a posse física da impressora é o gerente da impressora. Se uma delas estiver ausente. e B o recurso i. ele deve tentar adquirir de uma vez todos os recursos que lhe forem necessários. alguns sistemas batch que rodam em mainframes exigem que o usuário liste todos os recursos que pretende usar na primeira linha de comando do job. Apesar disso.11(b). usando os dois processos mostrados na Fig. vários processos poderão gerar saídas ao mesmo tempo.2. O que aconteceria se dois processos usassem cada um a metade do espaço em disco pra escrever suas saídas. utiliza-los e depois libera-los. não há a menor possibilidade de ocorrer uma situação de deadlock. ele não previne os deadlocks.. ele poderá requisitar o recurso 1. A cada instante.2 . e então escreve suas conclusões numa fita de saída. 2. tanto a unidade de fita de saída quanto o plotter. serão alocados ao processo. quando ele não for absolutamente necessário. Se ele precisar de um segundo recurso deve liberar o primeiro. teremos uma situação de deadlock no disco. Outra forma de evitar a espera circular é utilizar uma numeração global para todos os recursos. Uma forma um pouco diferente de tratar a questão da posse-espera é exigir que um processo que esteja solicitando um recurso libere. Vamos ver a razão disto ser verdadeiro. Uma delas é simplesmente seguindo regra de que um processo só está autorizado a usar apenas um recurso por vez. se voltarmos às quatro condições enunciadas por Coffman et al. Se não houver possibilidade de nenhum recurso ser entregue exclusivamente a um único processo. Apesar da ordenação numérica dos recursos eliminar o problema dos deadlocks. no pior caso.

3 .net/exatas/informatica/paginacao-deadlocks. · take_fork((i+1) % N). Pelo fato do spaguetti ser muito escorregadio (o molho é um bolonhesa bem ralo) cada filósofo precisa de dois garfos para comer. 6.. ·} } Uma implementação correta usando semáforos · #include "prototypes. Exemplos: Uma implementação não correta: · #include "prototypes. Deadlocks e Starvation | Amigo Nerd http://amigonerd. // um estado para cada filosofo · semaphore mutex = 1. · eat(). Enquanto um filósofo está comendo os outros dois filósofos vizinhos não podem comer pela falta dos garfos.h" · · #define N 5 // numero de filosofos · #define LEFT (i-1)%N // uma macros para calcula o filosofo da esquerda · #define RIGHT (i+1)%N // idem da direita · #define THINKING 0 · #define HUNGRY 1 · #define EATING 2 · · typedef int semaphore.h" · · #define N 5 // são 5 filósofos · · void philosoper(int i) ·{ · while (TRUE) { · think(). A dificuldade do problema é a implementação de uma rotina que não entre em deadlock quando um filósofo tentar pegar os garfos dos seus vizinhos. · put_fork((i+1) % N). // semaforo da secao critica · semaphore s[N]. · int state[N].Paginação. // um semaforo para cada filosofo 6 de 9 20-06-2013 22:57 .O problema dos filósofos jantando spaghetti O problema dos filósofos jantando consiste numa mesa com 5 pratos de spaghetti e cinco garfos entre os pratos. Então eles aproveitam para pensar um pouco. · put_fork(i).12.. As várias abordagens para prevenção de deadlocks são mostradas resumidamente na Fig. · take_fork(i).

· up(&mutex). · up(&s[i]). · put_forks(i).Starvation Adiamento Indefinido É a situação onde um processo nunca consegue executar sua região crítica e.. acessar o recurso compartilhado. Deadlocks e Starvation | Amigo Nerd · · void philospher(int i) // a rotina dos filosofos ·{ · while (TRUE) { · think(). mas você realmente deveria considerar os filósofos como N. ·} · http://amigonerd. Todos esses itens satisfazem as condições prévias para paralisação completa ou Deadlock.net/exatas/informatica/paginacao-deadlocks. · test(LEFT). · up(&mutex). conseqüentemente. ·} ·} · · void take_forks(int i) // verifica se os vizinhos nao estao comendo e pega os garfos ·{ · down(&mutex). Exclusão mútua: garfo compartilhado. · take_forks(i). · state[i] = HUNGRY. · eat(). ·} · · void test(int i) // verifica se os garfos estao disponiveis ·{ · if (state[i] == HUNGRY && · state[LEFT] != EATING && · state[RIGHT] != EATING) { · state[i] = EATING. · state[i] = THINKING. Cada um precisa de dois garfos. · test(i). 5 pratos de macarrão. · test(RIGHT). 5 garfos. Não-Preempção: A pessoa pode não querer deixar o outro tome posse do garfo. Espera circular: Um deverá esperar o outro num processo que percorrerá da mesa. 4 .. 7 de 9 20-06-2013 22:57 . 5 filósofos. ·} } Esse clássico problema é discutido entre 5 filósofos.Paginação. jantando numa mesa circular. · void put_forks(int i) // devolve os garfos e acorda algum vizinho que estiver com fome ·{ · down(&mutex). · down(&s[i]). onde podemos reconhecer alguns casos típicos de tentativas de resolver o problema. Segure e espera: A pessoa pode segurar o garfo esquerdo e sempre pode esperar pelo garfo certo.

e o processo pronto para executar com a maior prioridade é quem ganha o processador. o adiamento indefinido pode ser evitado permitindo que a prioridade de um processo em espera cresça conforme ele espera por um recurso. podem e devem ser melhorados visando sempre uma melhor performance quanto à velocidade. Prioridades podem ser associadas a processos estaticamente ou dinamicamente. os de média prioridade a 75 por hora. Conclusão Apesar da constante evolução dos Sistemas Operacionais e do aparecimento de novas ideologias sobre suas constituições ainda existem problemas que não foram sanados. Então executa processos da classe 2 e assim por diante.i2. bem como devem considerar a eficiência de todo o sistema. Muito já foi feito. Quando recursos são alocados segundo um esquema de prioridades. Andrew – Sistemas Operacionais Modernos 1997 http://www. para que possa iniciar sua próxima requisição de E/S.. Na prática. alguns processos são altamente limitados por E/S.com. as prioridades de processamento normalmente são para a administração em primeiro lugar. processos de coronéis com 90. É freqüentemente conveniente agrupar processos em classes de prioridade e utilizar escalonamento com prioridades entre as classes. é possível que ocorra adiamento indefinido também chamado de bloqueamento indefinido ou starvation). em um sistema com quatro classes de prioridade. novos sistemas nascem e junto com eles novos desafios.br/~rora/aulas/soii00b/aula3/ Acessado em 28/05/04 às 13:30 Comentários 8 de 9 20-06-2013 22:57 . porém ainda não conseguiram o erradicar por completo. secretárias e finalmente estudantes. a cada interrupção de relógio). então uma troca de processos ocorre. pois sua vez nunca chega). ele deve obtê-la imediatamente. Velhos paradigmas são derrubados soluções de velhos problemas são apresentadas. Se as prioridades não forem ajustadas de tempos em tempos. o escalonador executa os processos na classe 4 segundo a política round robin até que não haja mais processos na classe 4.Escalonamento com Prioridades O algoritmo round robin assume que todos os processos são igualmente importantes. o escalonador pode decrementar a prioridade do processo atualmente executando a cada tick de relógio (isto é. Por exemplo. Alternaticamente. mas round robin dentro de cada classe. Um processo que utilizou somente 2 ms do seu quantum de 100 ms ganharia uma prioridade 50. Um algoritmo simples para prover um bom serviço a um processo limitado por E/S é ajustar a sua prioridade para 1/f. Deadlocks e Starvation | Amigo Nerd http://amigonerd. em um centro de computação comercial (incomum hoje em dia).1 . Se esta ação fizer com que a prioridade do processo se torne menor do que a prioridade do processo que possuía a segunda mais alta prioridade. Por exemplo. Freqüentemente. 4. mas essa linha de estudo é muito ampla recursos já implantados como paginação de memória. de capitães com 70. Em uma Universidade. Prioridades podem também ser atribuídas dinamicamente pelo sistema para atingir certos objetivos do sistema.net/exatas/informatica/paginacao-deadlocks. muitos programadores tem se lançado em projetos próprios que nascem em todas as partes do mundo visões diferentes sobre gerenciamento de recursos. Em alguns sistemas. jobs de alta prioridade poderiam custar 100 dólares por hora. e deixá-la sendo feita em paralelo com outro processo realmente processando. e os de baixa prioridade a 50 por hora.. enquanto houverem processos nesta classe. Em sistemas onde processos ficam esperando pela alocação de recursos ou pelas decisões de escalonamento. O sistema operacional UNIX possui um comando. enquanto um processo que executou durante 50 ms antes de bloquear ganharia prioridade 2. onde f é a fração do último quantum de processador que o processo utilizou. por exemplo. Fazer com que processos limitados por E/S esperem um bom tempo pela CPU significa deixá-los um tempo demasiado ocupando memória. ninguém utiliza este comando. de majores com 80. Os sistemas operacionais devem ser justos com processos em espera. seguida de professores. o superusuário UNIX pode aumentar a prioridade de processos. Isto é chamado de aging (envelhecimento). Sempre que um desses processos quiser a CPU. os processos nas classes de prioridades mais baixas podem sofrer o fenômeno que chamamos starvation (o processo nunca recebe o processador. e passam a maior parte do tempo esperando por operações de E/S. pois ele somente permite baixar a prioridade do processo. processos iniciados por generais deveriam começar com a prioridade 100. Adiamento indefinido pode ocorrer devido às políticas de escalonamento de recursos do sistema. Em um computador militar.Paginação. Durante os últimos anos. as pessoas que possuem e operam centros de computação possuem um pensamento diferente sobre este assunto. Para evitar que processos com alta prioridade executem indefinidamente. nice. de tenentes com 60. que permite a um usuário voluntariamente reduzir a prioridade de um processo seu. Bibliografia TANNEMBAW. A idéia básica é direta: cada processo possui uma prioridade associada. Então ele passa a executar os processos de classe 3 também segundo a política round robin. O deadlock é um exemplo claro desses problemas foram desenvolvidos vários metos que visam diminuir a sua incidência. de modo a ser gentil (nice) com os outros usuários. Entretanto. um desafio para os matemáticos e desenvolvedores de Sistemas em todo o mundo. por exemplo. é possível que um determinado processo espere indefinidamente por um recurso conforme processos com prioridades mais altas venham chegando. A necessidade de se levar em conta fatores externos nos leva ao escalonamento com prioridades. e assim por diante. talvez incentivados pelo Linux. e um processo que utilizou todo o quantum ganharia uma prioridade 1.

Comentar..... Comentário usando.net/exatas/informatica/paginacao-deadlocks. Deadlocks e Starvation | Amigo Nerd http://amigonerd..Paginação.. Plug-in social do Facebook Páginas relacionadas Exatas > Informática Deadlocks Exatas > Informática Memória Virtual e Paginação do Windows 2000 Exatas > Informática Paginação Exatas > Informática Questões de Implementação Exatas > Engenharia Segmentação de Memória Exatas > Informática Gerência de Memória Exatas > Informática Memória Virtual Biológicas Biologia Bioquímica Educação Física Enfermagem Farmácia Fisioterapia Fonoaudiologia Medicina Nutrição Odontologia Terapia Ocupacional Veterinária Zootecnia Exatas Agronomia Astronomia Engenharia Estatística Informática Química Humanas Administração Arquitetura Cinema Contabilidade Desenho Industrial Direito Economia Hotelaria Marketing Produção Cultural Relações Internacionais Secretariado Executivo Turismo Sociais Aplicadas Arquivologia Arte Biblioteconomia Ciências Sociais Comunicação Filosofia Geografia História Letras Pedagogia Psicologia Serviço Social Outras Colegial Diversos Política de privacidade | Contato 9 de 9 20-06-2013 22:57 .