Você está na página 1de 4

1.

Swapping

É uma técnica aplicada à gerência de memória que visa dar maior taxa de utilização
à memória principal, melhorando seu compartilhamento. Visa também resolver o problema
da falta de memória principal num sistema.
Toda vez que um programa precisa ser alocado para execução e não há espaço na
memória principal, o sistema operacional escolhe entre os processos alocados que não
tem previsão de utilizar a CPU nos próximos instantes (quase sempre entre aqueles que
estão em interrupção de E/S ou no final da fila de pronto), e “descarrega” este processo
da memória para uma área especial em disco, chamada arquivo de swap, onde o processo
fica armazenado temporariamente. Durante o tempo em que o processo fica em swap, o
outro que necessitava de memória entra em execução ocupando o espaço deixado pelo
que saiu. Pouco antes de chegar a vez do processo armazenado em swap utilizar a CPU, o
sistema escolhe um outro processo para descarregar para swap e devolve o anterior da
área de swap para a memória principal, para que este possa ser executado novamente. E
vai trabalhando assim até que os processos vão terminando. O problema dessa técnica é
que pode provocar um número excessivo de acesso à memória secundária (disco),
levando o sistema a uma queda de desempenho.

2. Memória Virtual

Anteriormente foram apresentadas diversas técnicas de gerenciamento de memória


que evoluíram no sentido de maximizar o número de processos residentes na memória
principal e reduzir o problema da fragmentação, porém os esquemas vistos se mostraram
muitas vezes ineficientes. Além disso, o tamanho dos programas e de suas estruturas de
dados estava limitado ao tamanho da memória disponível. Como vimos, a utilização da
técnica de overlay para contornar este problema é de difícil implementação na prática e
nem sempre uma solução garantida e eficiente.

Memória virtual é uma técnica sofisticada e poderosa de gerência de memória onde


as memórias principal e secundária são combinadas, dando ao usuário a impressão de que
existe muito mais memória do que a capacidade real de memória principal.

O conceito de memória virtual baseia­se em não vincular o endereçamento feito


pelo programa aos endereços físicos da memória principal. Desta forma, o programa e
suas estruturas de dados deixam de estar limitados ao tamanho da memória física
disponível, pois podem possuir endereços vinculados à memória secundária, que funciona
como uma extensão da memória principal.

Outra vantagem desta técnica é permitir um número maior de processos


compartilhando a memória principal, já que apenas partes de cada processo estarão
residentes. Isto leva a uma utilização mais eficiente do processador, além de minimizar
(ou quase eliminar) o problema da fragmentação.

A seguir, os conceitos que envolvem a gerência de memória virtual, incluindo a


paginação:
­ espaço de endereçamento virtual: é o conjunto de endereços virtuais que um
processo pode endereçar.

1
­ Espaço de endereçamento real: analogamente, é o conjunto de endereços reais
que um processo pode endereçar.

­ Mapeamento: como o espaço de endereçamento virtual não tem nenhuma


relação com o espaço de endereçamento real, um programa pode fazer
referência a um endereço virtual que esteja fora dos limites da memória
principal (real), ou seja, os programas e suas estruturas de dados não estão
mais limitados ao tamanho da memória física disponível. Quando um programa
é executado, apenas uma parte do seu código fica residente na memória
principal, permanecendo o restante na memória virtual até o momento de ser
referenciado. Este esquema de endereçamento virtual é ignorado pelo
programador no desenvolvimento das aplicações. Cabe ao compilador e ao
linkeditor gerar códigos executáveis em função do endereçamento virtual, e o
sistema operacional se incumbe de administrar os detalhes durante a sua
execução. O processador apenas executa instruções e referencia dados
residentes no espaço de endereçamento real. Portanto, deve existir um
mecanismo que transforme os endereços virtuais em endereços reais. Este
mecanismo é o que chamamos de mapeamento, e consiste em permitir a
tradução do endereço virtual em endereço real. Como conseqüência, um
programa não mais precisa estar necessariamente em endereços contíguos na
memória real para ser executado.

­ Tabela de endereçamento de páginas: estrutura mantida pelo sistema para


armazenar, entre outras informações, o mapeamento. É única e exclusiva para
cada processo, relacionando os endereços virtuais do processo ás suas posições
na memória real.

­ Memória virtual por paginação: é a técnica de gerência de memória onde o


espaço de endereçamento virtual e o espaço de endereçamento real são
divididos em blocos do mesmo tamanho chamados páginas. As páginas do
espaço virtual são chamadas páginas virtuais, enquanto as páginas do espaço
real são chamadas páginas reais ou frames.

­ Page fault: é a falha de página. Sempre que o processo referencia um endereço


virtual, o sistema verifica se a página correspondente já está carregada na
memória real. Se não estiver, acontece o page fault. Neste caso, o sistema deve
transferir a página virtual para um endereço na memória real. Esta transferência
é chamada de paginação. O número de page faults gerados por um processo
em um determinado intervalo de tempo é chamado de taxa de paginação do
processo. Se esta taxa atingir valores elevados, pode haver um
comprometimento do desempenho do sistema. Um page fault provoca uma
interrupção no processo, pois há a necessidade de acessar operações de E/S.
Assim, sempre que acontece a paginação, uma interrupção de E/S fará com que
o processo em execução seja interrompido e colocado em estado de espera até
que sua intervenção de E/S seja realizada, quando então o processo voltará à
fila de pronto e entrará em execução de acordo com o escalonamento normal.
Enquanto o sistema trata a interrupção deste processo, um outro ocupará a
CPU.

2
­ Working­set: é o conjunto de páginas de um processo, em memória real, em um
determinado instante. Este conceito surgiu com o objetivo de reduzir o problema
do thrashing e está relacionado ao princípio da localidade. Existem dois tipos de
localidade que são observados durante a execução da maioria dos programas. A
localidade espacial é a tendência de que, após uma referência a um endereço de
memória, sejam realizadas novas referências a endereços próximos ou
adjacentes. A localidade espacial é a tendência de que, após a referência a uma
posição de memória, esta mesma posição seja referenciada novamente num
curto intervalo de tempo. A partir desse princípio de localidade, o processador
tenderá a concentrar suas referências a um conjunto de páginas do processo
durante um determinado período de tempo. Imagine um loop principal de um
programa que ocupe três páginas. A tendência é que estas três páginas tenham
um alto índice de referências durante a execução do programa.

­ Thrashing: é o efeito causado pelo excesso de page faults durante a execução


de um processo. Pode acontecer a nível de programa ou de sistema. A nível de
programa, pode ser provocado por um programa mal escrito, com desvios
incondicionais espalhados por seu código (desobedecendo portanto aos
princípios da localidade), ou por um limite de working­set muito pequeno (que
não comporte o loop principal do programa, por exemplo). A solução para estes
casos é reescrever o programa ou aumentar o limite do working­set. No caso de
thrashing de sistema, significa que há mais páginas sendo requeridas na
memória real do que ela pode realmente suportar. A solução é aumentar o
tamanho da memória física.

­ Tamanho da página: deve estar entre 512 bytes e 128KB, aproximadamente.


Páginas menores promovem maior compartilhamento da memória, permitindo
que mais programas possam ser executados. Páginas maiores diminuem o grau
de compartilhamento da memória, com menos programas disputando o
processador. Assim conclui­se que quanto menor o tamanho da página, MAIOR
é o grau de compartilhamento da memória e da CPU.

­ Políticas de busca de páginas: definem como as páginas serão carregadas da


memória virtual para a memória real. A política por demanda estabelece que
uma página somente será carregada quando for referenciada. Este mecanismo é
conveniente, pois leva para a memória real somente as páginas realmente
necessárias à execução do programa, ficando as outras na memória virtual. A
outra política, chamada paginação antecipada, funciona carregando
antecipadamente várias páginas da memória virtual para a principal, na
tentativa de economizar tempo de E/S. Nem sempre o sistema acerta na
antecipação, mas o índice de acertos é quase sempre maior que o de erros.
­ Políticas de alocação de páginas: determinam quantos frames cada processo
pode manter na memória real. A política de alocação fixa determina um limite
de working­set igual para todos os processos, e pode ser vista como uma
política injusta, na medida em que processos maiores normalmente necessitam
de um working­set maior. A outra política é a variável, que define um limite de
working­set diferente e variável para cada processo, em função de seu
tamanho, taxa de paginação ou até mesmo da taxa de ocupação da memória
principal.

3
­ Políticas de substituição de páginas: definem onde serão trocadas as páginas,
quando se fizer necessária uma substituição. Na política local, somente as
páginas do processo que gerou o page fault são candidatas a serem
substituídas.Já na política global, todas as páginas alocadas na memória
principal são candidatas à substituição, independente do processo que gerou o
page fault. Como uma página de qualquer processo pode ser escolhida, pode
ser que este processo sofra um aumento temporário da taxa de paginação em
função da diminuição das suas páginas alocadas em memória.

3. Algoritmos de substituição de páginas

O maior problema na gerência de memória virtual por paginação não é decidir quais
páginas carregar para a memória real, mas sim quais páginas liberar. Quando há a
necessidade de carregar uma página, o sistema deve selecionar entre as diversas páginas
alocadas na memória qual delas deverá ser liberada pelo processo.

Os algoritmos de substituição de páginas têm o objetivo de selecionar os frames


que tenham as menores chances de serem referenciados num futuro próximo. Caso
contrário, o frame poderia retornar diversas vezes para a memória real, provocando
excesso de page faults.
São algoritmos de substituição de páginas:

­ algoritmo ótimo: impossível de ser implementado, pois o processador não


consegue prever com segurança qual frame não será mais referenciado durante
a execução do programa. Tal fato deve­se à lógica do programa e aos dados
que ele manipula, desconhecidos pelo processador.

­ Algoritmo aleatório: escolhe qualquer página, entre as alocadas na memória,


para fazer a substituição. Em função de sua baixa eficiência, este algoritmo não
muito utilizado, embora consuma poucos recursos do sistema.

­ Algoritmo FIFO (first in, first out): escolhe a página que está há mais tempo na
memória principal para fazer a troca. É um algoritmo de simples implementação,
mas corre o risco de retirar uma página que, embora tenha sido carregada há
mais tempo, esteja sendo muito utilizada. Por essa razão não é muito usado.
­ Algoritmo LFU (least frequently used): elege a página menos freqüentemente
usada para efetuar a troca. Através de um contador, armazenado na tabela de
endereçamento de páginas, o sistema identifica quantas referências cada página
teve e utiliza esta informação para escolher a página.

­ Algoritmo LRU (least recently used): elege a página menos recentemente usada
para fazer a troca. O sistema mantém na tabela de endereçamento de páginas
um campo onde são armazenadas a data e a hora da última referência de cada
página, e com base nestas informações faz a seleção.

­ Algoritmo NRU (not recently used): elege a página não recentemente usada
para efetuar a troca. O sistema exclui da decisão a página mais recente e
escolhe entre as outras, pelo método FIFO, qual página deve sair.

Você também pode gostar