Gerenciando a memória

Propaganda
Introdução
Devido aos Sistemas Operacionais apresentarem características variadas,
determinados procedimentos tornam-se por vezes semelhantes ou próprios
de cada Sistema. O gerenciamento de memória é um procedimento
fundamental na objetividade de todos os Sistemas Operacionais.
É responsabilidade do Sistema Operacional executar inúmeras tarefas,
independente da quantidade de tarefas assim como o tamanho das mesmas.
Neste contexto parece complicado para o Sistema Operacional gerenciar
tarefas que exigem uma quantidade de memória superior ao que é
disponibilizado pela máquina. Cada Sistema possui suas características
próprias para complementar estas tarefas e principalmente gerenciar a
memória disponível para estas execuções. No entanto, é necessário garantir
para elas além da possibilidade de execução um alto grau de segurança.
Recursos do modo usuário
O gerenciador da memória virtual (VM) permite aos subsistemas do modo
usuário compartilhar memória eficientemente usando objetos que são
protegidos, denominados e manipulados como qualquer objeto do
executivo. Os subsistemas podem definir proteção a nível de página na
memória privativa, bloquear páginas selecionadas na memória, tirar
proveito dos arquivos mapeados e gerenciar os espaços de endereçamento
virtual de outros processos.
Gerenciando a memória





O gerenciador VM fornece um conjunto de serviços nativos que um
processo pode usar para gerenciar diretamente sua memória virtual. Estes
serviços permitem que um processo faça o seguinte:
alocar memória em um processo de dois estágios.
ler e gravar na memória virtual.
bloquear páginas virtuais na memória física.
obter informações sobre páginas virtuais.
descarregar páginas virtuais para o disco.
O gerenciador VM estabelece uma abordagem de duas fases para alocar
memória, reservá-la e depois comprometê-la. A memória reservada é um
conjunto de endereços virtuais que o gerenciador VM reservou para ser
usado futuramente por um processo. A reserva de memória é uma operação
rápida e barata no windows NT. A memória comprometida é memória para
qual o gerenciador VM separou espaço no seu arquivo de paginação.
Outro serviço do gerenciador VM do windows NT possibilitam ao
chamador fornecer uma alça de processos para indicar um processo cuja
memória virtual será manipulada. O chamador pode manipular sua própria
memória virtual ou aquela de um outro processo. Esta facilidade é poderosa
porque permite que um processo do modo usuário gerencie o espaço de
endereçamento de um outro processo.
Representação do esquema de memória virtual do Windows NT
Compartilhando a memória
Uma tarefa importante de qualquer subsistema de gerenciamento de
memória é permitir que os processos compartilhem memória quando
solicitarem ou quando isto tornar o sistema operacional mais eficiente. A
memória virtual oferece um mecanismo conveniente para o
compartilhamento de memória. Como cada processo tem um espaço de
endereçamento virtual separado, o sistema operacional pode carregar o
compilador para a memória uma vez e quando outro processo invocar o
compilador, o gerenciador VM pode simplesmente mapear os endereços
virtuais do segundo processo para as estruturas de páginas físicas já
ocupadas pelo compilador.
O gerenciador VM não permite que nenhum processo modifique as páginas
ocupadas pelo compilador. As páginas virtuais em ambos os processos são
designadas como sendo somente para leitura.
Seções, visões e arquivos mapeados
Assim como todos os outros componentes do Windows NT, o gerenciador
VM é totalmente paralelo. Ele roda simultaneamente em todos os
processadores de um computador multiprocessado e tem de compartilhar
suas estruturas de dados com as linhas que estão sendo executadas em
processadores diferentes.
Memória compartilhada pode ser definida como a memória que é visível
apartir de mais de um processo ou que está presente em mais de um espaço
de endereçamento virtual. A abordagem do windows NT ao
compartilhamento de recursos é implementá-los como objetos protegidos e
a memória não é nenhuma exceção. O objeto de seção representa um bloco
de memória que dois ou mais processos podem compartilhar. Uma linha de
um processo cria um objeto de seção e dá a ele um nome para que as linhas
de outros processos possam abrir alças para ele.
Um objeto de seção do NT pode ser muito grande, ocupando dezenas ou
até milhares de páginas, por isso um processo precisa mapear apenas as
partes do objeto de seção que lhes são necessárias. O mapeamento de
visões de uma seção permite a um processo acessar grandes blocos de
memória que, caso contrário, ele poderia não ter espaço de endereçamento
virtual para mapear.
Da mesma forma que a memória privativa, o conteúdo da memória
compartilhada é paginado para o disco quando a demanda de memória está
alta. O gerenciador VM também permite que os objetos de seção sejam
paginados para um arquivo mapeado. O executivo do NT usa os arquivos
mapeados para carregar imagens executáveis para a memória e o
gerenciador de cache do sistema usa os arquivos mapeados para ler e
gravar em páginas do cache.
Representação do mapeamento na memória virtual
Representação da referência do endereço virtual em um endereço físico
Protegendo a memória
1.
2.
3.
4.
A proteção de memória no windows NT é oferecida em quatro formas:
um espaço de endereçamento separado para cada processo.
dois modos de operação: modo kernel e modo usuário.
um mecanismo de proteção baseado em páginas.
proteção de memória baseado em objetos.
Memória privativa do processo
Toda vez que uma linha usa um endereço, o gerenciador VM do executivo
do NT, juntamente com o hardware, intervém e traduz o endereço virtual
em endereço físico. O sistema de memória virtual através do controle da
tradução dos endereços virtuais, consegue garantir que as linhas de um
processo não acessarão uma estrutura de página de memória que pertença a
um outro processo.
O gerenciador VM oferece as proteções de página somente leitura e
leitura/gravação, e suplementa estas proteções de memória em alguns
mecanismos
próprios:




somente execução.
guardar página.
nenhum acesso.
cópia na gravação.
Usando os serviços nativos de memória virtual, o subsistema de ambiente
tem condições de controlar a proteção a nível de página virtuais. O controle
da proteção a nível de páginas pode produzir programas mais confiáveis já
que assegura que as linhas não gravarão em páginas designadas como
somente para leitura.
Memória compartilhada
A proteção de página copiar na gravação, mencionada anteriormente, é
uma otimização que o gerenciador VM usa para economizar memória.
Quando dois processos querem ler e gravar o mesmo conteúdo de memória,
o gerenciador VM atribui a proteção de página copiar na gravação à região
de memória. Depois ele compartilha a memória física entre os processos,
desde que nenhum deles efetue gravações. Se uma linha de um dos dois
processos gravar em uma página, o gerenciador VM copia a estrutura da
página física para um outro local de memória, atualiza o espaço de
endereçamento virtual do processo para que ele aponte para a cópia e
define a nova proteção para leitura/gravação. Portanto a linha pode gravar
em sua cópia de página sem afetar outros processos que estejam usando a
mesma.
Todos os mecanismos de proteção de memória descritos até agora são
implementados no hardware ou no software de gerenciamento de memória
baixa que é invocada toda vez que uma linha usa um endereço. A
arquitetura de objetos do windows NT oferece uma camada adicional de
proteção para a memória compartilhada entre dois processos. O subsistema
de segurança protege os objetos de seção da mesma maneira que protege os
outros objetos executivos, usando as listas de controles de acessos (LCAs),
que especificam que usuários podem ler, gravar, obter informações sobre
ou ampliar o tamanho da seção.
A segurança também entra em ação quando uma linha cria uma seção que
irá conter um arquivo mapeado. Para tanto, a linha tem de ter acesso ao
objeto de arquivo subjacente. Uma vez carregado um arquivo para uma
seção, a linha pode alterar a LCA do objeto de seção, mas somente dentro
dos limites definidos pela LCA do arquivo que foi mapeado .
Implementação da memória virtual
Espaço de Endereçamento
Cada processo nativo do NT tem um grande espaço de endereçamento
virtual de 4 GB, sendo que 2 GB são reservados para uso do sistema. A
metade inferior do espaço de endereçamento virtual é acessível às linhas do
modo usuário e do modo kernel e é exclusiva de cada processo. A metade
superior do espaço de endereçamento virtual é acessível apenas às linhas do
modo kernel e é a mesma para todo o processo.
O código e os dados do kernel residem na parte inferior de memória do
sistema e nunca são paginados fora da memória. A porção superior de
memória do sistema é controlada pelo gerenciador VM e é usada para
armazenar outros códigos e dados do sistema. Uma parte desta área é
reservada para códigos e dados que podem ser paginados para o disco em
uma outra parte é reservada para código do sistema que nunca pode ser
paginado fora da memória.
Paginação
Os mecanismos de memória virtual incluem a maneira como o gerenciador
VM traduz os endereços virtuais para endereços físicos e maneira como ele
traz as páginas para a memória física. As políticas de memória virtual, em
contraste determinam quando trazer uma página para a memória e onde
colocá-la.
Normalmente, o processador fornece mecanismos primitivos de paginação,
que são amplicados pelo sistema de memória virtual. O paginador, código
do gerenciador VM que transfere páginas do disco e para o disco, é um
intermediário importante entre os mecanismos do hardware e as políticas
do
software.


ele invalida uma página quando ocorre uma falha de página.
ele oferece proteção baseada em página para páginas inválidas e aumenta
as proteções que o hardware oferece para as páginas válidas.
ele atualiza e mantém as estruturas de dados do gerenciador da memória.
Os sistemas de memória virtual geralmente definem três políticas que
ditam como a paginação é efetuada: uma política de busca, uma política de
colocação e uma política de substituição.
A política de busca determina quando o paginador deve trazer a página do
disco para a memória. Um tipo de política de busca tenta carregar as
páginas que um processo irá precisar antes que ele as solicite. Outra
política de busca, chamada de políticas de paginação na demanda,
carregam uma página para a memória física apenas quando ocorre uma
falha de página.
O gerenciador VM do NT usa um algoritmo de paginação na demanda com
argumentos para carregar as páginas para a memória. Quando uma linha
recebe uma falha de página, o gerenciador VM carrega para a memória a
página para onde ocorreu a falha e mais algumas páginas em volta dela.
Quando uma linha recebe uma falha de página, o sistema de gerenciamento
de memória também tem de determinar onde colocar a página virtual na
memória física. O conjunto de regras que ele usa chama-se política de
colocação. No NT, se a memória não esta esgotada, o gerenciador VM
simplesmente seleciona a primeira estrutura de página em uma lista de
estruturas de páginas livres. Se a lista esta vazia, ele cruza uma série de
outras listas por ele mantidas.
Se a memória física estiver repleta quando ocorrer uma falha de página,
uma política de substituição é usada para determinar que página virtual
deve ser removida da memória para abrir espaço para a página nova.
As políticas de substituição podem ser ainda caracterizadas como globais
ou locais. Uma política de substituição local aloca um número fixo de
estruturas de páginas a cada processo. A política de substituição global
permite que uma falha de página seja satisfeita por qualquer estrutura de
página, seja ela possuída ou não por um outro processo.
Quando cada processo é criado, ele recebe um conjunto de trabalho no
tamanho mínimo, que é o número de páginas que o processo
garantidamente terá na memória durante sua execução. Se a memória não
está totalmente cheia, o gerenciador VM permite que o processo tenha
tantas páginas quantas forem o máximo do seu conjunto de trabalho. Se o
processo precisar de mais páginas, o gerenciador VM remove uma página
para cada nova falha de página gerada. Para determinar que página deve ser
removida do conjunto de trabalho de um processo, o gerenciador VM
emprega um algoritmo FIFO simples, removendo as páginas que estão na
memória a mais tempo.
Quando a memória física começa a se esgotar, o gerenciador VM usa uma
técnica chamada de corte automático do conjunto de trabalho para
aumentar a quantidade de memória livre disponível no sistema. Ele
examina os processos na memória, comparando o tamanho atual do
conjunto de trabalho de cada um deles com o valor mínimo. Quando
encontra processos que estão usando mais do que os mínimos permitidos,
ele remove páginas desses conjuntos de trabalho, tornando-as disponíveis
para outros usos. Se a quantidade de memória livre ainda estiver baixa, o
gerenciador VM continua a remover páginas dos conjuntos de trabalho dos
processos até que cada um atinja seu mínimo.
Quando isto ocorre, o gerenciador VM registra o número de falhas de
páginas em que o processo incorre. Se ele gera falhas de páginas e a
memória não está totalmente repleta, o gerenciador VM aumenta o
tamanho do conjunto de trabalho desse processo. Se, porém, o processo não
incorre em nenhuma falha de página durante um certo tempo, é porque o
código que as linhas do processo estão executando cabe confortavelmente
no conjunto mínimo de trabalho daquele processo ou então nenhuma linha
do
processo
está
sendo
executada.
Gerência de memória em arquiteturas diferentes
As versões do Windows NT até a 3.51 inclusive utilizam a arquitetura de
MICROKERNEL1 modificada em razão do aumento de velocidade.
As tarefas fundamentais executadas pelo sistema operacional tais como, o
agendamento de threads, sincronização de multiprocessador e outras tarefas
de baixo nível são implementadas no microkernel. O gerenciamento de
memória , processos e outros serviços de sistema operacional são
implementados em uma camada separada sobre o microkernel e o próprio
microkernel é isolado, a partir das características físicas, de timers,
controladoras de interrupção e outros dispositivos de hardware por meio de
serviços da Hardware Abstraction Layer (HAL ou Camada de Acesso de
Hardware). Juntos, estes módulos formam o Windows NT Executive.
Os microprocessadores modernos permitem que threads de execução linhas de conduta tomadas através de código armazenado na memória
sejam executados em vários níveis de prioridade. O código que está sendo
executado em um nível alto de prioridade pode ter acesso aos dados em
níveis mais baixos; contudo, o código executado em um nível de prioridade
baixo não pode ter acesso a dados na memória marcados com níveis mais
altos.
Grande parte da famosa estabilidade do Windows NT é resultado direto da
arquitetura do sistema operacional. Os aplicativos não podem interferir uns
nos outros, uma vez que são executados em espaços de endereços
separados. Os dados e o código do sistema operacional nos subsistemas são
protegidos dos aplicativos devido aos subsistemas, também, residirem em
seus próprios espaços de endereços. O Windows NT Executive compartilha
espaço de endereço com processos em execução, mas ele está protegido
pela parede entre o modo Kernel e o modo usuário.
Download