Sistemas operacionais
48 pág.

Sistemas operacionais


DisciplinaSistemas Operacionais I7.679 materiais168.603 seguidores
Pré-visualização17 páginas
de e bytes por entrada. Assim, o numero de páginas que um
processo precisará é de s/p. O espaço que esse processo ocupa na tabela de páginas é s*e/p. O tamanho perdido na
última página devido a fragmentação interna será de p/2.
Assim, haverá um custo de s*e/p + p/2 da tabela de páginas. Para que o tamanho da página seja ideal, o custo será
zero. Dessa forma, derivando a expressão anterior e igualando a zero obtemos que o tamanho ideal de página é de
s*e*sqrt(2).
Gerência de memória 13
Thrashing
Estado no qual o sistema operacional ao invés de executar instruções efetivas "gasta" tempo efetuando a troca de
páginas entre memória física e memória lógica, em outras palavras desperdiça um tempo significante trazendo ou
removendo páginas da memória. Para o usuário a sensação é que o sistema está travado ou congelado e para o
hardware há um significante acesso ao disco ao invés de processamento.
Algoritmos de substituição de páginas
Como visto anteriormente, sempre que uma página (endereço virtual) não estiver em uma moldura de página, uma
interrupção ocorre e ela deve ser carregada para uma moldura antes de ser executada. No entanto, alguma página que
está atualmente em uma moldura deve ser retirada (gravada em disco). Veja que o algoritmo escolhido afeta
diretamente o desempenho do sistema como um todo, pois "uma escolha errada significa que a página removida será novamente
acessada em seguida, gerando uma nova falta de página. É importante que o algoritmo usado seja capaz de remover da memória física páginas que
provavelmente não serão necessárias em seguida."[R. da S. Oliveira, A. da S. Carissimi e S. S. Toscani; Sistemas Operacionais 2ª ed]
Os algoritmos de substituição de páginas se preocupam em escolher a melhor página a ser retirada da moldura.
Existem várias alternativas:
\u2022 algoritmo de substituição de página ótimo: deve ser retirada a página que só será referenciada o mais tarde
possível. Apesar de, teoricamente, ser um algoritmo interessante, é extremamente difícil prever quando uma
página será referenciada;
\u2022\u2022 algoritmo de substituição de página não recentemente utilizada(NRU): o S.O. e o hardware mantêm uma coleção
de estatísticas sobre as páginas referenciadas e/ou modificadas (através dos bits de referência e modificação das
entradas da tabela de páginas) e dão preferência para a troca de páginas não referenciadas e/ou não modificadas;
\u2022 algoritmo de substituição de página \u201cprimeira a entrar, primeira a sair (FIFO \u2013 first-in first-out): a página mais
antiga é removida.No entanto, pode estar sendo removida uma página bastante utilizada;
\u2022\u2022 algoritmo de substituição de página de segunda chance(SC): uma modificação do algoritmo FIFO, que busca não
substituir uma página antiga e, no entanto, bastante utilizada. A solução é inspecionar o bit R (referenciada) da
página mais antiga; se o bit for 1 (foi referenciada) o bit será limpo e a pesquisa continua. Se todas as páginas
tiverem sido referenciadas, o algoritmo FIFO acaba sendo executado e a página mais antiga (que agora estará com
o bit R limpo) será substituída;
\u2022 algoritmo de substituição de página menos recentemente utilizada (LRU \u2013 least recently used): a idéia é que as
páginas que foram intensamente utilizadas nas últimas instruções provavelmente serão utilizadas de forma intensa
no futuro próximo. Desta forma, deve ser removida a página que não foi utilizada por mais tempo.
\u2022 algoritmo de substituição de página relógio: O algoritmo SC, apesar de mais eficiente do que algoritmo FIFO,
reinsere págimas no final da lista constantemente. Uma solução para isso é q a lista seja ordenada em uma
circularmente tal como um relógio. O ponteiro do relogio aponta para a pagina mais antiga e assim que ocorrer
uma falta a pagina mais antiga é inspecionada. Se o bit R dessa pagina for 0 ele é substituida, se não esse bit é
setado como 0 e o ponteiro aponta para a proxima pagina mais antiga. Esse proesso é então repetido até a proxima
pagina com o bit 0 ser encontrada.
\u2022\u2022 algoritmo de substituição de página menos recentemente utilizada(MRU):Trabalha de forma oposta ao algoritmo
otimo, pois há a possibilidade de que as paginas que não foram referenciadas continuem não sendo referenciadas.
A tarefa de implementa-ló é trabalhosa mas possivel. Ele pode ser implementado de uma maneira mais simples
com um contador de 64-bits que é incrementado automaticamente após cada intrução e a tabel de paginas deve ter
um campo extra para armazenar o valor do contador. O valor é então armazenado neste campo correpondente à
pagina que acabou de ser referênciada. Quando o corre a falta o S.O. examina esse campo e substitui a pagina que
tiver o menor deles.Pode-se tambem implementalo com o auxílio de um hardware especial.
Gerência de memória 14
Segmentação
A memória virtual apresentada anteriormente é unidimensional, ou seja, os endereços virtuais vão de 0 até algum
valor máximo. No entanto, em alguns casos, ter dois ou mais espaços de endereços virtuais separados é uma
estratégia interessante. A segmentação prove à máquina vários espaços de endereço completamente independentes,
chamados segmentos, liberando o programador da tarefa de gerenciar a expansão e a contração de tabelas, da mesma
forma que a memória virtual elimina a preocupação de organizar o programa em overlays.
Os comprimentos de cada segmento podem ser diferentes e podem variar durante a execução. Como cada segmento
constitui um espaço de endereçamento completamente independente e diferente, eles podem aumentar ou encolher
sem afetar um ao outro. Para especificar um endereço neste tipo de memória segmentada, o programa deve fornecer
um endereço de duas partes: um número de segmento e o endereço dentro do segmento. É importante salientar que
cada segmento pode conter várias páginas, logo, toda a discussão apresentada anteriormente sobre paginação
continua válida aqui. Outra questão fundamental é que, diferentemente da paginação, que é executada inteiramente
pelo S.O., os segmentos são entidades lógicas das quais o programador está ciente e as quais ele pode utilizar como
qualquer entidade lógica. Um segmento pode conter um procedimento ou uma matriz, ou uma pilha, mas
normalmente ele não contém uma mistura de tipos diferentes.
Como cada segmento forma uma entidade lógica da qual o programador está ciente (tal como pilha, procedimentos,
etc.) segmentos diferentes podem ter tipos de proteção diferentes: é possível especificar que um procedimento só
pode ser executado (sendo proibido ler ou armazenar nele), dados poderão ser lidos e gravados e assim por diante.
Este tipo de proteção é útil para detectar erros de programação. A proteção na memória segmentada é importante
porque o usuário está ciente do que está em cada segmento. Este modelo é difícil de aplicar a paginação, pois a
paginação é invisível ao programador (que não tem como saber de antemão em que página ou moldura um
determinado pedaço de programa está), o que não possibilita a separação dos tipos em cada página.
Uma das possibilidades da segmentação é que ela pode facilitar o compartilhamento de procedimentos e/ou dados
entre vários processos. Um exemplo é uma biblioteca compartilhada. Neste caso, os procedimentos desta biblioteca
permanecem em um único segmento que pode ser utilizado por diversos programas (processos), sem que cada um
precise possuí-la em seu espaço de endereço.
A implementação da segmentação difere da paginação porque as páginas têm tamanho fixo e os segmentos não. A
substituição dos processos gera lacunas fazendo com que a memória se transforme em um tabuleiro de xadrez,
formado por segmentos e lacunas, que pode ser tratado com compactação. No entanto, se os segmentos são grandes
pode ser impossível mantê-los na memória principal em sua totalidade (segmentação pura). Neste caso, pode ocorrer
uma segmentação com paginação: o espaço lógico é dividido em segmentos, este são divididos em páginas lógicas
sendo que cada