Buscar

Técnicas de Gerenciamento de Memória

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
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.
2 
­  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.
3 
­  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.
4 
­  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.

Outros materiais