Como o uso da memória é gerenciado durante a execução de processos?

Como funciona

Cabe ao kernel do openSolaris a responsabilidade por diversas funções de gerência de memória, como controlar que partes da memória estão em uso e que partes não estão, alocar memória para processos quando eles necessitarem, liberar quando eles terminarem e gerenciar a troca entre a memória principal e o disco quando a memória principal for muito pequena para armazenar todos os processos.

Em sistemas de tempo compartilhado, o gerenciador de memória é responsável pela suspensão e retomada de um processo em intervalos de tempos distintos. Na espera pela execução, os processos ficam na memória até que seja identificado o processo ativo que, a partir desse momento, terá sua execução retomada.

O gerenciador também reconhece os processos que estão em estado de espera por entrada/saída para que estes não sejam incluídos na partilha de tempo de execução. O escalonamento de memória do Solaris define as prioridades dos processos, cujo cálculo é referente ao tempo de execução acumulado. Os processos que em execução acumularam muito tempo terão prioridade menor do que processos que ainda não foram executados.

No Solaris, além do swapping – técnica que seleciona alguns processos para retirar da memória caso esta esteja cheia – é implementado a gerência de memória virtual com paginação por demanda. Nesse esquema, páginas do processo são trazidas do disco para a memória somente quando são referenciadas.

 Métodos

O Kernel gerencia a memória utilizando os seguintes métodos:

Paginação

  • A memória física é dividida em páginas.
  • Toda página ativa (não livre) é um mapeamento entre um arquivo (vnode) e a memória.
  • Páginas são identificadas a partir do vnode e de um offset (par vnode/offset).
  • O par vnode/offset também mapeia o arquivo em swap ou para o cache de arquivo.
  • O mapeamento entre página física e seu espaço virtual é feito pelo HAT.
  • Uma lista hash global de páginas contem ponteiros para listas de páginas e é indexada por uma função hash (vnode/offset)
  • A paginação feita pelo sistema é chamada de paginação por demanda.
  • Um processo não precisa ser retirado totalmente da memória para dar espaço a outro, para isso basta substituir uma ou mais páginas desse processo.
  • Essa politica não interfere na execução dos processos que não percebem a troca uma vez que alteramos apenas a referencia do endereço lógico.

Como o uso da memória é gerenciado durante a execução de processos?

  Swapping

  • Consiste na escolha de um programa residente na memória para ser transferido para o disco com a finalidade de liberar espaço na memória.
  • É possível classificar em dois tipos o swap realizado pelo Open Solaris, soft swapping e hard swapping.

          Soft swapping

  •  Se a memória disponível do sistema se encontra abaixo de um nível mínimo de memória livre, por um determinado período de tempo, o escalonador de memória começa a fazer a troca de processos.
  • Inicialmente o escalonador irá procurar por processos que estão inativos por mais tempo (com um mínimo de tempo definido por maxslp), ou seja o que está na memória mais tempo sem ser referenciado .

        Hard swapping

  • Acontece se há mais de um processo na fila de processos ativos e a atividade de paginação ultrapassa um valor predefinido. Então o núcleo descarrega todos os módulos e cache do sistema que não estão ativos e começa a fazer a troca de processos sequencialmente até que exista memória livre disponível.

Cyclical page cache

  • Solaris 8 usa um algoritmo diferente para fazer a remoção de paginas da memória chamada cyclical page cache.
  • Ela foi projetada para remover os problemas do cache do sistema de arquivos com a memória virtual.
  • Esse novo sistema substitui paginação por demanda existente nas versões anteriores
  • Utiliza novo sistema para fazer apenas o cache dos dados do sistema de arquivos. Qualquer outro objeto da memória é tratado em listas diferentes (binários, bibliotecas…).
  • Dessa maneira o sistema de arquivos só compete com ele mesmo por memória.

Controle de Memória

O Kernel do Open Solaris tem acesso completo à memória. É ele quem deve dar permissão para que os programas do espaço do usuário tenham acesso à memória quando requisitada.

Como é feito o gerenciamento de memória?

O gerenciamento de memória é, portanto, o resultado da aplicação de duas práticas distintas dentro de um sistema de computação: Como a memória é vista, isto é, como pode ser utilizada pelos processos existentes neste sistema. Como os processos são tratados pelo SO quanto às suas necessidades de uso de memória.

O que é o gerenciamento de memória?

O gerenciador de memória implementa memória virtual, fornece um conjunto principal de serviços, como arquivos mapeados de memória, memória copiada na gravação, suporte à memória grande e suporte subjacente para o gerenciador de cache.

Qual o principal objetivo da Gerência de memória em um sistema?

Objetivos do Gerenciamento de Memória Tentar manter na memória principal o maior número de processos residentes, permitindo maximizar o compartilhamento d processador e demais recursos computacionais.