Você está na página 1de 26

4.

4 Definio de gerenciamento de memria


A necessidade de manter mltiplos programas ativos na memria do sistema impe outra, a
necessidade de controlarmos como esta memria utilizada por estes vrios programas. O
gerenciamento de memria , portanto, o resultado da aplicao de duas prticas distintas
dentro de um sistema computacional:
1. Como a memria principal vista, isto , como pode ser utilizada pelos processos
existentes neste sistema.
2. Como os processos so tratados pelo sistema operacional quanto s suas necessidades
de uso de memria.
Como a memria um recurso caro, cuja administrao influencia profundamente na eficincia
e performance de um sistema computacional, necessrio considerar-se trs estratgias para
sua utilizao:
1. Estratgias de busca
As estratgias de busca (fetch strategies) preocupam-se em determinar qual o prximo
bloco de programa ou dados que deve ser transferido da memria secundria para a
memria primria. Usualmente se utilizam estratgias de demanda, ou seja, so
transferidos os blocos determinados como necessrios para a continuao do
processamento.
2. Estratgias de posicionamento
So as estratgias relacionadas com a determinao das regies da memria primria
(fsica) que sero efetivamente utilizados pelos programas e dados, ou seja, pela
determinao do espao de endereamento utilizado (placement strategies).
3. Estratgias de reposio ou substituio
So as estratgias preocupadas em determinar qual bloco ser enviado a memria
secundria para disponibilizao de espao na memria principal para execuo de
outros programas, ou seja, determinam quais blocos de memria sero substitudos por
outros (replacement strategies).
Minimamente, todo sistema computacional possui alguma estratgia de busca e alguma
estratgia bsica de posicionamento. O aumento da sofistica o dos sistemas computacionais
exige a utilizao de estratgias de busca posicionamento mais sofisticadas. Para maximizar-se
as capacidades dos sistemas computacionais so necessrias as estratgias de reposio.
Historicamente, o desenvolvimento da organizao e gerenciamento de memria foi
grandemente afetado pelo prprio desenvolvimento dos computadores e evoluo dos sistemas
operacionais. Os modos bsicos de organiza o da memria dos sistemas so:
monoprogramado
multiprogramados com armazenamento real, particionamento fixo e endereamento
absoluto
multiprogramados com armazenamento real, particionamento fixo e endereamento
relocvel
multiprogramados com armazenamento real, de particionamento varivel
multiprogramados com armazenamento virtual paginado
multiprogramados com armazenamento virtual segmentado
multiprogramados com armazenamento virtual combinado
Na Figura 4.6 temos um quadro onde se ilustra o relacionamento dos modelos bsicos de
organizao da memria e, de certa forma, sua evoluo.
Com relao ao primeiro aspecto bsico da gerncia de memria, para entendermos como os
processos enxergam a memria, necessrio conhecer em detalhe como os programas se
comportam durante sua execuo.
O comportamento exibido pelos programas durante sua execuo cria determinadas limitaes
que devem ser observadas cuidadosamente pelo sistema operacional atravs de seu
gerenciamento de memria. Por outro lado, os programas tambm devem se comportar dentro
de regras estabelecidas pelo prprio sistema operacional, as quais compem o modelo de
administrao de memria empregado pelo sistema.
Para sabermos como se comporta um programa durante sua execuo e quais so suas
limitaes quanto a utilizao da memria, devemos analisar todo o processo de criao dos
programas.
Figura 6: Evoluo da organizao da memria
4.5 Criao de programas
Os programas so criados a partir de arquivos-texto, que contm um roteiro estruturado de
passos e aes a serem executadas pelo programa que se deseja., ou seja, estes arquivos-
texto so uma representao dos algoritmos que se desejam programar. Estes passos e aes
esto descritos dentro do arquivo-texto atravs de uma linguagem de programao e por isso
so usualmente chamados de arquivo-fonte do programa (resumidamente arquivo-fonte ou
fonte). As linguagens de programao utilizadas podem ser de alto, mdio ou baixo nvel, mas
qualquer que seja a linguagem, seu tipo e a forma de estruturao do programa, o arquivo-
fonte continua a ser simplesmente um texto, anlogo uma redao, sujeito regras de
sintaxe e de contexto.
Da mesma forma que os computadores no entendem a nossa linguagem, ou seja a linguagem
que naturalmente utilizamos para nossa comunicao, estas mquina to pouco entendem as
linguagens de programao diretamente. Existem entidades especiais responsveis pela
transformao do arquivo-fonte do programa em uma forma passvel de execuo pelo
computador. Estas entidades esto ilustradas na Figura 7.
O compilador (compiler) um programa especial que traduz o arquivo fonte em um arquivo
binrio que contm instrues, dados e endereos (representados binariamente) que permitem
executar as aes necessrias atravs das instrues em linguagem de mquina do
processador existente no computador em questo. Os arquivos binrios produzidos pelo
compilador so os arquivos-objeto ou resumidamente objeto. Note que cada compilador
apropriado para uma nica linguagem de programao.
Figura 7: Esquema de criao de programas
O ligador (linker), quando necessrio, apenas encadeia dois ou mais arquivos objeto sob a
forma de um nico arquivo de programa executvel ou arquivo-executvel. O arquivo-
executvel aquele que pode ser transferido para a memria do computador possibilitando a
execuo do programa.
Assim como os compiladores, o ligador tambm uma entidade deste processo de gerao de
programas e tambm est sujeito a operar com arquivos objeto produzidos apenas por
determinados compiladores.
Devemos ressaltar que at agora os arquivos fonte, objeto e executvel constituem arquivos,
ou seja, esto armazenados nas estruturas de memria secundria (unidades de disco rgido,
discos flexveis, fitas, cartuchos ou discos pticos).
Existe uma outra entidade especial, chamada carregador (loader), que parte integrante do
sistema operacional, responsvel por transportar os arquivos de programa executvel da
memria secundria para a memria principal, onde se dar a execuo do programa
carregado.
Os carregadores constituem uma parte do sistema operacional porque a colocao de
programas na memria e a execuo dos mesmos so funes deste, responsvel por
controlar eficientemente as estruturas de memria primria, de armazenamento secundrio e
o processamento do sistema computacional.
Aps o transporte do arquivo executvel para a memria principal possvel iniciar sua
execuo, onde ele mesmo se transforma numa imagem executvel, que representa a
expanso do cdigo de programa contido no arquivo executvel em cdigo executvel, reas
de memria reservadas para variveis do programa, pilha retorno e rea extra para alocao
dinmica por parte do programa. A bem da verdade, o sistema operacional, antes da carga do
mdulo de cdigo, deve conhecer de antemo seu tamanho total e a quantidade mnima de
memria extra necessria. Tais informaes residem geralmente num cabealho (header)
localizado no incio do arquivo de programa executvel, que no copiado para memria, mas
apenas lido pelo sistema operacional.
4.5.1 Espaos lgicos e fsicos
Retomemos os conceitos envolvidos com os arquivos de programa fonte.
Qual o objetivo bsico de um programa? A resposta : ensinar o computador a executar um
seqncia de passos, manuseando dados de forma interativa ou no, com o objetivo final de
realizar clculos ou transformaes com os dados fornecidos durante a execuo do programa.
Para isto, aps o entendimento do problema, idealiza-se conceitualmente uma forma de
representao do dados a serem manipulados e depois disso um conjunto de operaes
especiais que manipularo as estruturas criadas possibilitando a obteno dos resultados
esperados do programa.
Notem que ao projetar-se um programa, por mais simples ou complexo que ele seja, define-se
um espao lgico que rene todas as abstraes feitas para criar-se o programa, sejam elas de
natureza estrutural ou procedural/funcional. Tais abstraes so os objetos lgicos do
programa. O espao lgico contm todas as definies necessrias para o programa, mas sem
qualquer vnculo com as linguagens de programao ou com os processadores e computadores
que executaro os programas criados a partir desta concepo. O espao lgico a
representao abstrata da soluo do problema, tambm abstrata.
Durante a implementao dos programas utilizam-se, como meios de expresso, as linguagens
de programao que possibilitam expressar de maneira concreta (apesar das limitaes
impostas por qualquer linguagem de programao) as formulaes contidas no espao lgico.
Pode-se dizer assim que os programas fonte representam, numa dada linguagem de
programao, o espao lgico do programa. Num outro extremo, dentro do computador a
execuo do programa tem que ocorrer dentro da memria principal, como conseqncia e
limitao da arquitetura de Von Neumann.
Seja qual for o computador e a particularizao da arquitetura de seu hardware, a memria
principal pode sempre ser expressa como um vetor, unidimensional, de posies de memria
que se iniciam num determinado ponto, usualmente o zero, e terminam em outro,
536.870.912 para um computador com 512 Mbytes de memria, por exemplo. Cada posio
desta estrutura de memria idntica, podendo armazenar o que se chama de palavra de
dados do computador, na prtica um conjunto de bits.
Se a palavra de dados tem 4 bits , a memria est organizada em nibbles. Palavras de dados
de 8, 16 e 32 bits representam, respectivamente, organizaes de memria em bytes, words e
double words. Tipicamente se organizam as memrias dos microcomputadores em bytes,
assim cada posio de memria poderia armazenar um byte de informao, sendo que nos
referenciamos as posies de memria pelos seus nmeros de posio, os quais so chamados
de endereos. Como a memria de um computador um componente eletrnico, fisicamente
palpvel, dizemos que os endereos de memria representam fisicamente a organizao de
memria de um computador.
Sabemos que um programa quando em execuo na memria principal de um computador se
chama imagem executvel e que esta imagem ocupa um regio de memria finita e bem
determinada. Ao conjunto de posies de memria utilizado por uma imagem se d o nome de
espao fsico desta imagem.
De um lado a concepo do programa, representada e contida pelo seu espao lgico. Do outro
lado, durante a execuo da imagem temos que as posies de memria usadas constituem o
espao fsico deste mesmo programa.
De alguma forma, em algum instante o espao lgico do programa foi transformado e ligado a
organizao de memria do sistema computacional em uso, constituindo o espao fsico deste
mesmo programa.
A ligao entre o espao lgico e fsico representa, na verdade, a um processo de
mapeamento, onde cada elemento do espao lgico unido de forma nica a uma posio de
memria do computador, acabando por definir um espao fsico. A este processo de ligao se
d o nome de mapeamento ou binding (amarrao), como representado na Figura 8. No nosso
contexto binding significa o mapeamento do espao lgico de um programa no espao fsico
que possibilita sua execuo dentro do sistema computacional em uso.
Figura 8: Representao do binding
Veremos a seguir que o binding tem que ser realizado por uma das entidades envolvidas no
processo de criao de programas, ou seja, em alguns instantes da compilao, ligao,
carregamento ou mesmo execuo. possvel tambm que o binding seja realizado por mais
de uma destas entidades, onde cada uma realiza uma parcela deste processo de mapeamento.
4.5.2 Compiladores compilers!
Como j foi definido, um compilador um programa especial capaz de traduzir um arquivo
escrito em uma linguagem de programao especfica em um outro arquivo contendo as
instrues, dados e endereos que possibilitam a execuo do programa por um processador
particular. O compilador , portanto, capaz de entender um algoritmo expresso em termos de
uma linguagem de programao, convertendo-o nas instrues necessrias para sua execuo
por um processador particular (vide Figura 9).
Figura 9: Compilador e cross-compilador
Todas as definies internas so transformadas em cdigo. Funes, estruturas de dados e
variveis externas, tem apenas o local de chamada marcado em tabelas de smbolos externos
para ligao posterior com bibliotecas ou outros mdulos de cdigo. Alm de considerar
oprocessador que executar tais instrues, alguns aspectos da arquitetura e do sistema
operacional devem ser observados pelos compiladores como forma de produzir cdigo
verdadeiramente til para uma dada arquitetura computacional.
No Exemplo 1 temos um trecho de cdigo escrito em linguagem de alto nvel e um possvel
resultado de compilao.
Os compiladores podem gerar cdigo de duas maneiras bsicas, isto , empregando dois
modos de endereamento: o absoluto e o relocvel.
Quando no modo de endereamento absoluto, o compilador imagina que o programa ser
sempre executado numa nica e bem determinada regio de memria. Sendo assim, durante a
compilao, o compilador associa diretamente posies de memria a estruturas de dados,
variveis, endereos de rotinas e funes do programa. Em outras palavras, o compilador fixa
os endereos de execuo do programa, realizando por completo o binding, tornando-se assim
compiladores absolutos.
// trecho de cdigo fonte; trecho de cdigo compilado
while (...) { 0200:
...
...
a = a + 1; LOAD 500
...
...
printf("%d\n", a); CALL printf
...
...
} JNZ 0200
Exemplo 1 Resultado da compilao
Figura 10: Arquivo objeto gerado atravs de compilao absoluta Na Figura 10, onde se
apresenta a estrutura interna de arquivos gerados atravs de compilao absoluta, temos os
elementos seguintes:
Cabeal"o
Regio onde so colocadas informaes gerais sobre o arquivo objeto e suas partes.
Tambm conhecido como header.
Cdigo
Segmento onde reside o cdigo do programa, propriamente dito. gerado da mesma
forma que na compilao absoluta.
#$E
A tabela de smbolos externos o local onde so listadas as posies de chamada de
smbolos externos (variveis, estruturas ou funes).
Os arquivos objeto produzidos tem seus endereos calculados a partir de um endereo de
origem padronizado ou informado antes da compilao. Este endereo de origem, a partir do
qual os demais so definidos, chamado de endereo base de compilao ou apenas de
endereo base. Desta maneira a compilao se torna mais simples, mas como conseqncia
direta disto temos que:
um arquivo de programa executvel s pode ser executado numa regio fixa de
memria;
no podem existir duas ou mais instncias do mesmo programa executvel na
memria, a no ser que se realizem compilaes adicionais forando a gerao do
cdigo para uso em diferentes regies de memria;
dois ou mais diferentes programas executveis no podem ser carregados na memria
a no ser que tenham sido compilados prevendo exatamente a ordem de carregamento
e as reas adicionais de memria que venham a utilizar;
duas ou mais imagens executveis no podem se sobrepor na memria (ocupar os
mesmos endereos de memria) total ou parcialmente;
uma imagem executvel deve sempre ocupar uma regio contnua de memria;
a soma das imagens possveis de serem carregadas em memria para execuo
paralela tem que ser menor ou igual a quantidade total de memria disponvel.
As razes para estas limitaes so simples e todas baseadas no fato de que dentro do arquivo
objeto s existem nmeros binrios. Tais nmeros representam tanto os cdigos das
instrues do processador como os dados constantes do programa e tambm os endereos
determinados pelo compilador. Como existem apenas nmeros binrios em todo o arquivo
objeto, no trivial a distino entre instrues, dados e endereos, tornando praticamente
impossvel:
reverter a compilao, pois o binding se tornou irreversvel, no sendo possvel
reconstituir-se o espao lgico que originou o programa;
modificar o endereamento do programa pois no se pode distinguir que so os
endereos dentro dos arquivos objeto gerados pelos compiladores absolutos.
Quando no modo de endereamento reloc%&el, o compilador continua realizando todas as
suas tarefas, como no caso da compilao absoluta, fixando os endereos de execuo durante
a compilao, mas alm de gerar o cdigo o compilador relocvel monta o arquivo objeto da
seguinte forma:
O nico elemento novo no arquivo objeto a TER (tabela de endereos relocveis) onde so
relacionadas as posies de todos os endereos existentes dentro do bloco de cdigo cujo valor
depende da posio inicial do cdigo, ou seja, lista todos os endereos relativos existentes.
Figura 11: Arquivo objeto gerado atravs de compilao relocvel
Desta forma, a TER relaciona onde esto os endereos que deveriam ser modificados para
permitir a transposio da imagem executvel de uma regio de memria para outra,
constituindo o segredo dos compiladores relocveis, pois atravs desta tabela que o binding
torna-se reversvel, ou melhor, altervel, o que corresponde dizer que o binding no se realizou
por completo. Portanto temos as seguintes implicaes:
ainda no possvel reverter-se a compilao em si pois apesar do binding ser
altervel, ainda impossvel reconstituir-se o espao lgico original do programa;
possvel que outra entidade venha a modificar o atual endereamento do programa,
pois os endereos esto evidenciados na TER, sendo que tal modificao possibilita
determinar o espao fsico do programa em funo da disponibilidade de memria do
sistema.
De qualquer forma o uso de compiladores relocveis proporcionar as seguintes situaes:
um arquivo de programa executvel poder ser executado em diversas regies de
memria, a serem determinadas pelo sistema operacional;
podero existir duas ou mais instncias do mesmo programa executvel na memria,
sem a necessidade da realizao de compilaes adicionais para forar a gerao do
cdigo para uso em diferentes regies de memria;
dois ou mais diferentes programas executveis podero ser carregados na memria
sem que seja necessria a previso da ordem exata de carregamento e as reas
adicionais de memria que venham a ser utilizadas;
duas ou mais imagens executveis no podem se sobrepor na memria (ocupar os
mesmos endereos de memria) total ou parcialmente;
uma imagem executvel deve sempre ocupar uma regio contnua de memria;
a soma das imagens possveis de serem carregadas em memria para execuo
paralela tem que ser menor ou igual a quantidade total de memria disponvel.
Vemos que uma parte das limitaes provocadas pelo uso de compiladores absolutos podem
ser contornadas com o uso do modelo de compilao relocvel. Como os ligadores no
exercem participao no binding no tocante a modificao ou finalizao do binding, temos que
os carregadores so os candidatos naturais a finalizao do binding no caso da compilao
relocvel.
4.5.3 'igadores linkers!
Programas capazes de unir parcelas de cdigo, compiladas separadamente, em um nico
arquivo de programa executvel. Atravs de smbolos e posies relacionados em tabelas de
smbolos geradas pelos compiladores, os ligadores so capazes de unir trechos de cdigo
existentes em diferentes arquivos objeto em um nico arquivo executvel.
Os smbolos destas tabelas representam funes ou estruturas de dados que podem, dentro de
certas regras, ser definidas e criadas em certos arquivos.
Segundo estas mesmas regras, outros arquivos de programa fonte podem utilizar-se destas
funes e estruturas sem a necessidade de redefini-las, bastando a indicao adequada de sua
existncia no exterior destes arquivos fontes. Assim sendo temos:
Mdulos exportadores
Aqueles onde so indicadas funes, estruturas de dados e variveis que sero
utilizadas por mdulos externos. Utilizam variaes de clusulas extern ou export.
// Exportao de estruturas e variveis em linguagem C
// estrutura de dados
typedef struct {
char FuncName[ID LEN];
int Loc;
} FuncType;
// vetor de estruturas exportado
extern FuncType FuncTable[];
// varivel inteira exportada
extern int CallStack[NUM FUNC];
Exemplo 2: Declaraes de exportao
(dulos importadores
Aqueles onde so indicadas quais funes, estruturas de dados e variveis encontram-
se declaradas e implementadas em mdulos externos. Utilizam variaes de clusulas
import ou include.
// Importao de mdulos em linguagem C
#include <vcl\Forms.hpp>
#include <vcl\Classes.hpp>
#include <vcl\ Windows.hpp>
#include <dos.h>
Exemplo 3: Declaraes de importao
Cabe ao ligador a tarefa de unir os arquivos que contm estas definies aos arquivos que as
utilizam, gerando disto um nico arquivo de programa, como ilustrado na Figura 12. A ligao
nunca afeta a maneira com que o binding foi ou ser realizado, constituindo um elemento
neutro dentro da criao dos programas quando analisada sob o aspecto de modelo de
endereamento.
Os ligadores participam do binding efetuando a unio dos espaos fsicos dos mdulos a serem
ligados como o programa executvel, que determina o espao fsico definitivo. Os ligadores
no exercem papel de modificao ou finalizao do binding, tarefa que fica a cargo das
entidades anteriores (os compiladores) ou posteriores (os carregadores e relocadores).
Figura 12: Esquema de compilao em separado e uso de ligador
A compilao em separado, com a conseqente unio posterior dos mdulos produzidos
atravs de um ligador, tem os seguintes objetivos:
1. Reduzir o tempo de desenvolvimento diminuindo os tempos consumidos durante a
compilao atravs da partio do programa fonte em pedaos (logicamente divididos e
encadeados). Pode-se a partir desta diviso concentrar-se o trabalho em uma das
partes de cada vez, que por ser menor toma um menor tempo de compilao. Quando
se considera o resultado final, as diversas compilaes intermedirias durante o
desenvolvimento totalizam um menor tempo quando feita por partes do que quando o
programa era manuseado por inteiro.
2. Permitir a diviso do trabalho dado que o programa pode ser dividido em partes.
Seguindo o mesmo princpio que o da reduo do tempo de desenvolvimento, as
diversas partes podem ser implementadas paralelamente por equipes de 2 ou mais
programadores. Assim os totais gastos so os mesmos quando se consideram a soma
dos tempos gastos por cada elemento da equipe ou o custo de tal trabalho, mas tem-se
a indiscutvel vantagem de que o desenvolvimento pode ser realizado num prazo
bastante inferior dado que as partes podem ser desenvolvidas em paralelo. Tal diviso
requer cuidadoso projeto e especificao detalhada e consistente das partes do
programa.
3. Permitir a padronizao de cdigo e a construo de bibliotecas de funes e estruturas
de dados. Dado que possvel a compilao de uma parte de um programa contendo
apenas funes (de uso geral ou especfico) e estruturas de dados associadas, pode-se
com isto distribuir-se esta funes e estruturas sob a forma compilada, ou seja um
mdulo objeto. Outros programadores podero utilizar este mdulo em seus
programas, mas no podero alter-lo, da obtm-se a padronizao segura de funes
e estruturas de dados. Para que isto seja possvel basta seguir as regras de compilao
por partes e acompanhar o mdulo objeto de uma descrio das suas funes
(parmetros de entrada, resultados retornados) criando-se assim bibliotecas.
4. Permitir o uso de diferentes linguagens de programao dentro de um mesmo
programa. Considerando a capacidade limitada dos Ligadores em interpretar as tabelas
de smbolos geradas pelos compiladores, se vrios compiladores, mesmo que de
diferentes linguagens de programao, so capazes de gerar um formato compatvel de
informao simblica, ento um ligador apropriado ser capaz de unir estes diferentes
mdulos num nico arquivo de programa executvel, mesmo que os mdulos tenham
sido escrito em diferentes linguagens. Na verdade, durante a implementao destes
mdulos, devem ser observadas as convenes de chamada para rotinas externas
escritas em outras linguagens especficas para cada linguagem. Com isto podem ser
aproveitadas bibliotecas escritas numa certa linguagem (as bibliotecas matemticas do
FORTRAN, por exemplo) em programas escritos em outras linguagens (C ou PASCAL).
Atravs destas tcnicas, podem ser melhor exploradas certas caratersticas das
linguagens em programas envolvendo vrias linguagens (C e Clipper, C e DBase, C e
SQL, C e PASCAL , VisualBasic e C, etc).
4.5.4 Carregadores loaders!
Os carregadores so os programas responsveis pelo transporte dos arquivos de programa
executveis das estruturas de armazenamento secundrio (unidades de disco ou fita) para a
memria principal. Os carregadores tem suas aes dirigidas pelo sistema operacional, que
determina qual mdulo executvel deve ser carregado e em que regio de memria isto deve
ocorrer (endereo base de execuo). Aps o trmino do processo de carregamento, o
carregador sinaliza ao sistema operacional que o programa foi carregado, neste ponto o
sistema operacional determinar quando se iniciar a execuo do programa, que se
transforma em uma imagem executvel ao iniciar sua execuo efetivamente.
Quando o arquivo objeto foi gerado em modo absoluto, os carregadores apropriados para esta
situao apenas realizam uma cpia do arquivo de programa executvel, transferindo dados do
dispositivo de armazenamento secundrio (unidades de disco ou fita) para a memria
principal. Nesta situao, tais carregadores so chamados de carregadores absolutos e
recebem do sistema operacional apenas as informaes do nome do arquivo executvel a ser
carregado e o endereo de carga (endereo a partir de onde se iniciar a cpia do cdigo na
memria principal).
Se o endereo de carga for o mesmo que o endereo base da compilao, a imagem resultante
ser executada sem problemas, de acordo com o que foi programado no fonte. Caso contrrio
as conseqncias so imprevisveis, resultando geralmente na interrupo abrupta do
programa pelo sistema operacional, na invaso da rea de dados/cdigo de outros programas,
no clculo imprprio dos resultados ou na perda de controle do sistema.
Quando temos que o arquivo objeto foi gerado em modo relocvel, devem ser utilizados
carregadores relocveis, ou seja, carregadores capazes de interpretar o contedo da TER
(tabela de endereos relocveis) de forma a transpor a imagem executvel da rea original
(iniciada/definida pelo endereo base de compilao) para uma outra rea de memria. A
transposio da rea de memria se baseia no fato de que durante a transferncia do
programa executvel para a memria principal o carregador relocvel, atravs da TER
identifica quem so os endereos componente do cdigo. Cada vez que o carregador relocvel
l um endereo dentro do cdigo, ele soma ao endereo lido (endereo original da compilao)
o valor do endereo de carga fornecido pelo sistema operacional e com isto se realiza o
modificao do binding (iniciado pelo compilador relocvel) finalizandose o mapeamento com a
transposio da imagem para uma nova regio de memria, determinada pelo sistema
operacional e no pelo compilador.
Figura 3
A TSE (tabela de smbolos externos) lida pelo sistema operacional para que os mdulos
externos necessrios ao programa sejam carregados previamente.
Caso tais mdulos sejam usados globalmente, isto , compartilhados por vrios programas
(como as DLLs dos sistemas MS-Windows 95/98), o sistema operacional s realiza o
carregamento quando tais mdulos no esto presentes na memria. Finalmente devemos
observar que tanto o cabealho existente no arquivo de programa executvel como a TSE no
so transferidas para memria principal.
No entanto a rea ocupada pelo programa no corresponde apenas ao segmento de cdigo
contido no arquivo executvel, sendo substancialmente maior, como ilustrado na Figura 13
Figura 13: Estrutura tpica de imagem executvel
Tal expanso do cdigo ocorre devido as necessidades dos programas de possuirem uma rea
adicional de memria para armazenamento da pilha dos endereos de retorno (stack) e outra
rea extra para armazenamento de contedo dinmico do programa (heap), tais como
variveis locais e blocos de memria alocados dinmicamente. Por essa razo, aps a
transferncia do cdigo do armazenamento secundrio para memria, chamamos tal contedo
de memria de imagem executvel ou simplesmente imagem.
4.5.5 )elocadores swappers!
Os relocadores so rotinas especiais do sistema operacional responsveis pela movimentao
do contedo de certas reas de memria primria para memria secundria (especificamente
dispositivos de armazenamento como unidades de disco) e vice-versa, como ilustrado na
Figura 14. A existncia de relocadores num sistema depende do tipo de gerenciamento de
memria oferecido pelo sistema operacional. Antes de verificarmos quais modelos de
gerenciamento de memria podem fazer uso dos relocadores, devemos compreender melhor a
natureza de seu trabalho.
Figura 14: Conceito de relocao
Considerando que num sistema multiprogramado existem vrios processos ativos (em estado
ready), bloqueados (em estado blocked) e suspensos (em estado suspended), sabemos que
apenas um processo est efetivamente em execuo, isto , utilizando o processador (estado
running), ento, a medida de suas necessidades, este processo em execuo poder solicitar
reas adicionais de memria. Estes pedidos de alocao de memria podem ser atendidos de
duas formas: reas efetivamente livres so cedidas ao processo ou aciona-se o relocador para
liberao de reas de memria pertencentes aos demais processos ativos e inativos atravs da
remoo de seu contedo para os arquivos de troca, no que se denomina operao de troca ou
swapping.
Seguindo instrues do sistema operacional, que detm o gerenciamento da memria e dos
processos, um relocador pode ser comandado para retirar o contedo de uma rea de
memria armazenado-a em disco. O espao em memria disponibilizado atravs desta
operao pode ser usado para atender pedidos de alocao de memria do processo
correntemente em execuo. Com isto, partes de alguns processos sero transferidas para o
disco. Quando estes processos, cuja algumas de suas partes esto armazenadas no disco,
necessitarem de tais contedos, uma nova operao de relocao pode ser efetuada para,
novamente disponibilizar espao, de modo que este seja agora usado para que o contedo das
partes anteriormente copiadas em disco, seja recolocada na memria. Todas estas operaes
ocorrem sob orientao do sistema operacional.
O que geralmente ocorre que o relocador realiza uma cpia das rea de memria
movimentadas para o disco em um arquivo especial denominado arquivo de troca ou swap file.
Ao copiar tais reas de memria para o disco, estas so assinaladas como livres, tornando-se
disponveis para outros processos. Tambm se efetua um registro do que foi copiado para
memria possibilitando recuperar este contedo quando necessrio.
Nesta situao, se avaliarmos a soma total de memria utilizada por todos os processos ativos,
isto , processos nos estados de running e tambm em ready, temos que a quantidade de
memria utilizada por eles pode ser significativamente maior do que a memria fsica instalada
no sistema, pois alguns destes processos tiveram suas rea de memria transferidas para a
unidade de disco quando no estavam em execuo. Este o princpio bsico que possibilita a
implementao de memria virtual como ser tratado a seguir (seo 1.6).
1.* (emria &irtual
O conceito de relocao de memria possibilitou o desenvolvimento de um mecanismo mais
sofisticado de utilizao de memria que se denominou memria virtual ou virtual memory.
Segundo Deitel:
O termo memria virtual normalmente associado com a habilidade de um sistema
enderear muito mais memria do que a fisicamente disponvel [D!"#$ p% #&'(%
Este conceito antigo: surgiu em 1960 no computador Atlas, construdo pela Universidade de
Manchester (Inglaterra), embora sua utilizao mais ampla s tenha acontecido muitos anos
depois. Tanenbaum simplifica a definio do termo:
) idia b*sica da memria virtual que o tamanho combinado do programa$ dados e
pilha podem e+ceder a quantidade de memria fsica disponvel para o mesmo [,)-"#$
p% ."(%
Outra definio possvel de memria virtual a quantidade de memria excedente a memria
fsica instalada em um sistema computacional que esta aparentemente em uso quando se
consideram a soma das quantidades totais de memria utilizadas por todos os processos
existentes num dado momento dentro deste sistema. Na Figura 15 temos uma representao
da memria real e virtual.
Figura 15: Representao da memria real e virtual
Por sua vez, Silberschatz e Galvin propem as seguintes definies:
/emria 0irtual uma tcnica que permite a e+ecu1o de processos que podem n1o
estar completamente na memria [23"4$ p% 56&(%
Memria Virtual a separao da memria lgica vista pelo usurio da memria fsica
[SG94, p. 302].
De qualquer forma, o termo memria virtual indica que o sistema computacional possui a
capacidade de oferecer mais memria do que a fisicamente instalada, ou seja, capaz de
disponibilizar uma quantidade aparente de memria maior do que a memria de fato (real)
existente do sistema.
Os maiores benefcios obtidos atravs da utilizao de sistemas que empregam mecanismos de
memria virtual so:
Percepo por parte de programadores e usurios de que a quantidade de memria
potencialmente disponvel maior do que a realmente existente no sistema.
Abstrao de que a memria um vetor unidimensional, contnuo, dotado de
endereamento linear iniciado na posio zero.
Maior eficincia do sistema devido presena de um nmero maior de processos,
permitindo uso equilibrado e sustentado dos recursos disponveis.
A memria fsica tem seu tamanho usualmente limitado pela arquitetura do processador ou do
sistema, ou seja, possui um tamanho mximo que fixo e conhecido. J a memria virtual
tem seu tamanho limitado, freqentemente, pela quantidade de espao livre existente nas
unidade de disco do sistema possuindo, portanto, um valor varivel e mais flexvel (pois mais
fcil acrescentar novas unidades de disco a um sistema ou substituir as unidades do sistema
por outras de maior capacidade).
Do ponto de vista de velocidade, a velocidade de acesso da memria fsica substancialmente
maior do que da memria virtual, mas a velocidade da memria total do sistema tende a ser
uma mdia ponderada das velocidades de acesso da memria fsica e virtual cujos pesos so
as quantidades envolvidas. De qualquer modo, a velocidade mdia de acesso a memria do
sistema torna-se uma valor intermedirio entre as velocidades de acesso da memria fsica e
virtual sendo que quanto maior a quantidade de memria virtual utilizada menor ser a
velocidade mdia de acesso a memria.
0 el/em7isica 8 0 el/em,otal 8 0 el/em0 irtual
A memria virtual pode ser implementada basicamente atravs de mecanismos de:
+aginao
Tcnica em que o espao de endereamento virtual dividido em blocos, denominados
unidades de alocao, de tamanho e posio fixas, geralmente de pequeno tamanho, os
quais se associa um nmero. O sistema operacional efetua um mapeamento das
unidades de alocao em endereos de memria, determinando tambm quais esto
presentes na memria fsica e quais esto nos arquivos de troca.
$egmentao
Tcnica em que o espao de endereamento virtual dividido em blocos de tamanho
fixo ou varivel, definidos por um incio e um tamanho, cuja posio tambm pode ser
fixa ou varivel, mas identificados univocamente. O sistema operacional mapeia estes
blocos em endereos de memria, efetuando um controle de quais blocos esto
presentes na memria fsica e quais esto nos arquivos de troca.
Atualmente, os mecanismos mais populares de implementao de memria virtual so atravs
da paginao. A segmentao um alternativa menos utilizada, embora mais adequada do
ponto de vista de programao, de forma que em alguns poucos sistemas se usam ambas as
tcnicas.
Figura 16: MMU e Relocao dinmica
Estas duas tcnicas s podem ser implementadas se for possvel a desassociao dos
endereos referenciados pelos processos em execuo dos efetivamente utilizados na memria
fsica do sistema. Isto eqivale a dizer que o binding deve se completar no momento da
execuo de cada instruo, permitindo adiar at o ltimo momento o mapeamento do espao
lgico de um programa em seu espao fsico definitivo de execuo, isto o que chamamos de
relocao dinmica. Para isto o processador deve dispor de mecanismos de deslocamento dos
endereos referenciados pelo programa para as regies de memria que efetivamente sero
usadas. bvio que tal tarefa s pode ser completada com um sofisticado mecanismo de
endereamento de memria, mantido pelo sistema operacional. Tais mecanismos so
geralmente imple mentados como uma unidade de gerenciamento de memria ou memory
management unit (MMU) esquematizada na Figura 53.
Alm dos mecanismos de paginao ou segmentao, a memria virtual exige a
disponibilizao de espao nos dispositivos de armazenamento secundrio para a criao de
um (ou mais) arquivos de troca, os swap files.
Em funo da velocidade dos dispositivos de E/S, as unidades de disco so quase sempre
utilizadas, minimizando o impacto das transferncias entre memria primria (memria fsica
do sistema) e memria secundria (unidades de disco).
A memria total de um sistema , portanto, a soma de sua memria fsica (de tamanho fixo)
com a memria virtual do sistema. O tamanho da memria virtual do sistema definida por,
basicamente, o menor valor dentre os seguintes:
capacidade de endereamento do processador,
capacidade de administrao de endereos do sistema operacional e
capacidade de armazenamento dos dispositivos de armazenamento secund rio
(unidades de disco).
Nos sistemas Win32 (Windows 95/98 e Windows NT) so oferecidas funes especficas para o
gerenciamento de memria virtual. Suas API (Application Program Interface) oferecem, dentre
outras, as importantes funes relacionadas na Tabela 3 [CAL96, p. 252-262].
Tabela 3: Funes de gerenciamento de memria virtual da API Win32
Atravs destas funes o usurio pode administrar o uso da memria virtual do sistema,
determinando a utilizao da memria fsica, tamanho e utilizao do arquivo de troca,
tamanho do heap etc. Alm disso pode efetuar a alocao de novas reas de memria para
sua aplicao, o que permite a criao de um mecanismo particular de utilizao e controle do
espao de endereamento virtual que opera de forma transparente com relao aos
mecanismos de memria virtual implementados pelo sistema operacional.
Nos Exemplos 4 e 5 temos exemplos de utilizao de algumas destas funes. O Exemplo 4
utiliza a funo da API GlobalMemoryStatus para determinar o tamanho da memria fsica
instalada, a quantidade de memria fsica disponvel, o tamanho do arquivo de troca e sua
utilizao.
{ Para Borland Delphi 2.0 ou superior. }
procedure TForm1.UpdateMemStatus;
var
Status: TMemoryStatus;
function ToKb(Value: DWORD): DWORD;
begin
result := Value div 1024;
end;
begin
{ Obt^em status da memria }
Status.dwLength := sizeof(TMemoryStatus);
GlobalMemoryStatus(Status);
with Status do { Atualiza labels e gauges }
begin
Label1.Caption:=IntToStr(ToKb(dwTotalPhys))+ Kb;
Label2.Caption:=IntToStr(ToKb(dwTotalPhys -
dwAvailPhys))+ Kb;
Label3.Caption:=IntToStr(ToKb(dwTotalPageFile))+ Kb;
Label4.Caption:=IntToStr(ToKb(dwTotalPageFile -
dwAvailPageFile))+ Kb;
Gauge1.MaxValue:=dwTotalPhys;
Gauge1.Progress:=dwTotalPhys - dwAvailPhys;
Gauge2.MaxValue:=dwTotalPageFile;
Gauge2.Progress:=dwTotalPageFile - dwAvailPageFile;
end;
end;
Exemplo 4 Uso de GlobalMemoryStatus
J no Exemplos 4.5 que aloca um bloco de memria de tamanho Size, permitindo seu uso
atravs de um ponteiro para a rea alocada, efetuando sua liberao aps o uso. A rotina
possui um tratamento mnimo de erros.
{ Para Borland Delphi 2.0 ou superior. }
P := VirtualAlloc(nil, Size,
memCommit or mem Reserve,
Page ReadWrite);
if P = nil then
ShowMessage("Alocao no foi possvel")
else
begin
{ Uso da rea alocada atravs do ponteiro P. }
...
{ Liberao da rea alocada aps uso. }
if not VirtualFree(P, 0, mem Release) then
ShowMessage("Erro liberando memria.");
end;
Exemplo 5 Alocao de bloco de memria com VirtualAlloc
4., (odelos de gerenciamento de memria
Como ilustrado na Figura 44, existem vrios diferentes modelos para a organizao e o
gerenciamento de memria os quais trataremos brevemente:
Monoprogramado com armazenamento real
Multiprogramado com parties fixas sem armazenamento virtual
Multiprogramado com parties variveis sem armazenamento virtual
Multiprogramado com armazenamento virtual atravs de paginao
Multiprogramado com armazenamento virtual atravs de segmentao
Multiprogramado com armazenamento virtual atravs de paginao e segmentao
combinadas
4.,.1 (onoprogramado com arma-enamento real
Neste modelo de gerenciamento a memria dividida em duas parties distintas, de
tamanhos diferentes, onde uma utilizada pelo sistema operacional e a outra utilizada pelo
processo do usurio conforme ilustrado na Figura 17. Este modelo, tambm chamado de
modelo de alocao contnua, armazenamento direto ou monoprogramado com
armazenamento real, era a forma mais comum de gerenciamento de memria at meados da
dcada de 1960. Tambm era a tcnica mais comum usada pelos sistemas operacionais das
primeiras geraes de microcomputadores.
Figura 17: Organizao da memria em modo monoprogramado real
Esta forma de gerenciamento de memria bastante simples e permite que apenas um
processo seja executado de cada vez, o que limita a programao a construo de programas
estritamente seqenciais. Na prtica este esquema de gerenciamento s est preparado para a
execuo de um programa de cada vez, sendo que raramente a memria ser inteiramente
utilizada, sendo freqente a existncia de uma rea livre ao final da rea de programa
destinada ao usurio.
Dado que o espao de endereamento corresponde a quantidade de memria primria
fisicamente instalada no sistema, que no so utilizados mecanismos de memria virtual e que
usualmente apenas um processo (programa) era executado de cada vez, este modelo de
organizao tambm conhecido como organizao monoprogramada real.
Como exemplo o PC-DOS/MS-DOS (Disk Operating System), sistema operacionais dos
microcomputadores IBM e seus compatveis, utiliza um esquema semelhante, onde o sistema
operacional ficava residente na primeira parte da memria e a rea de programa destinada aos
usurios utilizava o espao restante dos 640 Kbytes de espao de endereamento disponveis.
O CP/M (Control Program/Monitor ), dos microcomputadores Apple e compatveis utilizava
esquema semelhante. No caso do DOS, vrios outros esquemas adicionais forma criados para
estender as capacidades bsicas (e bastante limitadas) de endereamento do sistema
operacional, entre elas os mecanismos de extenso de memria e os overlays.
Os overlays (do termo recobrimento), so o resultado da estruturao dos procedimentos de
um programa em forma de rvore, onde no topo esto os procedimentos mais usados e nos
extremos os menos utilizados. Esta estruturao deve ser feita pelo usurio, satisfazendo as
restries do programa a ser desenvolvido e da memria disponvel no sistema. Uma biblioteca
de controle dos overlays, que funcionava como um sistema de gerenciamento de memria
virtual, deve ser adicionada ao programa e mantida na memria todo o tempo, procura manter
apenas os procedimentos de uma seo vertical da rvore, minimizando a quantidade
necessria de memria fsica e assim superando as limitaes do DOS [GUI86, p. 184].
4.,.2 +articionamento fi.o
Dada as vantagens dos sistemas multiprogramados sobre os monoprogramados, necessrio
que a memria seja dividida de forma tal a possibilitar a presena de vrios processos
simultaneamente. A maneira mais simples de realizar-se esta tarefa efetuar a diviso da
memria primria do sistema em grandes blocos os quais so denominados parties. As
parties, embora de tamanho fixo, no so necessariamente iguais, possibilitando diferentes
configuraes para sua utilizao, como ilustrado na Figura 18.
Figura 18: Organizao da memria em modo multiprogramado com parties fixas
Enquanto o sistema operacional utiliza permanentemente uma destas parties, usualmente a
primeira ou a ltima, os processos dos usurios podem ocupar as demais parties, cujo
nmero depender do tamanho total da memria do sistema e dos tamanhos das parties
realizadas.
Geralmente as parties eram determinadas atravs da configurao do sistema operacional, o
que poderia ser feito de tempos em tempos ou at mesmo diariamente pelo operador do
sistema. At uma nova definio dos tamanhos das parties, os tamanhos e posies
anteriormente definidos eram fixos.
Os processos podero ento ocupar as parties de memria a partir de uma fila nica de
processos que encaminhar o processo para a partio disponvel. Tanto o modelo de
endereamento absoluto como relocvel podem ser utilizados pois:
Nos sistemas batch os programas eram compilados no instante da execuo
possibilitando o uso de compiladores absolutos, dado que a posio que o programa
utilizaria na memria (partio) era conhecida;
Se utilizado compiladores relocveis, um carregador relocvel poderia transpor o cdigo
corretamente para a partio escolhida.
Quando do uso de parties iguais, uma nica fila de processos poderia atender a contento a
tarefa de definir qual processo ocuparia uma certa partio, embora ocorresse perda
significativa de memria pela no utilizao integral das parties. O uso de parties fixas de
diferentes tamanhos permitia fazer melhor uso da memria, pois nesta situao poderiam ser
utilizadas filas diferentes de processos para cada partio, baseadas no tamanho do processo/
artio. Ainda assim poderamos ter uma situao de parties livres e uma, em especial, com
uma fila de processos. A melhor soluo encontrada foi adotar uma nica fila de processos e
critrios de elegibilidade para designao de parties para processos visando bom uso da
memria e um throughput adequado.
Torna-se evidente que a determinao da partio para a execuo de um dado processo
influencia no desempenho do sistema. Para esta tarefa podemos utilizar um dos seguintes
critrios, que correspondem a estratgias de posicionamento (placement strategies):
/irst fit0 Aloca-se o processo para a primeira partio encontrada que comporte o
processo, minimizando o trabalho de procura.
1est fit0 O processo alocado para a menor partio que o comporte, produzindo o
menor desperdcio de reas de memria, exige pesquisa em todas as parties livres.
2orst fit0 O processo alocado para a maior partio que o comporte, produzindo o
maior desperdcio de reas de memria, exige pesquisa em todas as parties livres.
9angsam et al% [LAT96, p. 625] sugerem alguns algoritmos em linguagem C para a alocao de
blocos de memria utilizando o first fit e best fit, bem como para seleo da melhor partio a
ser liberada.
De qualquer forma, o espao de endereamento corresponde ao tamanho da memria primria
do sistema, ou seja, a somatria dos tamanhos das parties e, portanto, do tamanho mximo
dos processos em execuo, igual a memria fsica instalada no sistema. Assim, o
particionamento fixo um esquema de organizao de memria que no utiliza memria
virtual.
Vrios sistemas comerciais de grande porte utilizavam este esquema de gerenciamento de
memria, onde o operador ou o administrador do sistema definia o nmero e o tamanho das
parties da memria principal.
4.,.3 +articionamento &ari%&el
O particionamento varivel bastante semelhante organizao de memria em parties
fixas, exceto pelo fato de que agora o sistema operacional efetua o particionamento da
memria. A cada novo processo, a memria dividida, de forma que parties de diferentes
tamanhos sejam posicionadas na memria do sistema. A medida que os processos sejam
finalizados, suas parties tornam-se livres, podendo ser ocupadas no todo ou em parte por
novos processos como esquematizado na Figura 19. Este esquema de organizao de memria
tambm denominado de particionamento por demanda.
Figura 19: Organizao da memria em modo multiprogramado com parties variveis
Neste tipo de sistema, a estratgia de posicionamento worst fit bastante til pois permite
maximizar o tamanho das rea livres (buracos) obtidas a cada alocao, aumentando as
possibilidade de sucesso de transformao da rea desocupada em uma nova partio livre
para um novo processo.
Mesmo utilizando-se o algoritmo worst fit ainda possvel que existam regies livres de
memria entre as parties efetivamente alocadas. Este fenmeno, que tende a aumentar
conforme a utilizao do sistema e nmero de processos presentes na memria, denominado
fragmentao interna.
Desta forma, uma certa poro da memria total do sistema pode continuar permanecendo
sem uso, anulando alguns dos benefcios do particionamento varivel e do algoritmo worst fit.
Um estratgia possvel para eliminar a fragmentao interna a da compactao de memria,
onde todas as parties ocupadas so deslocadas em direo ao incio da memria, de forma
que todas as pequenas reas livres componham uma nica rea livre maior no final da
memria, como indicado na Figura 20.
A compactao de memria uma tcnica raramente utilizada devido ao alto consumo de
processador para o deslocamento de todas as parties e manuteno das estruturas de
controle da memria. O trabalho despendido no reposicionamento de uma partio pode ser
suficiente para finalizar o processo que a ocupa ou outro presente na memria, tornando a
movimentao de parties um nus para os processos em execuo.
Figura 20: Compactao de memria
Da mesma forma que na organizao da memria atravs de parties fixas, no
particionamento varivel o espao de endereamento igual ao tamanho da memria primria
existente no sistema e, portanto, um esquema de organizao de memria que tambm no
utiliza memria virtual.
4.,.4 +aginao
A paginao um esquema de organizao de memria que faz uso da memria virtual, ou
seja, o espao de endereamento maior que o tamanho da memria fisicamente presente no
sistema, como representado na Figura 21.
O espao de endereamento total do sistema, denominado de espao de endereamento
virtual dividido em pequenos blocos de igual tamanho chamados pginas virtuais (virtual
pages) ou apenas pginas (pages). Cada pgina identificada por um nmero prprio. Da
mesma forma a memria fsica dividida em blocos iguais, do mesmo tamanho das pginas,
denominados molduras de pginas (page frames). Cada moldura de pgina tambm
identificada por um nmero, sendo que para cada uma destas molduras de pgina corresponde
uma certa regio da memria fsica do sistema, como mostra a Figura 22.
Para que este esquema de diviso seja til, o sistema operacional deve realizar um
mapeamento de forma a identificar quais pginas esto presentes na memria fsica, isto ,
deve determinar quais os page frames que esto ocupados e quais pginas virtuais (virtual
pages) esto nele armazenados.
O sistema operacional tambm deve controlar quais pginas virtuais esto localizadas nos
arquivos de troca (swap files), que em conjunto com a memria fsica do sistema representam
a memria virtual do sistema (vide Figura 21: Espaos de endereamento virtual e real na
paginao Figura 15).
A medida que os programas vo sendo executados, o sistema operacional vai relacionando
quais pginas virtuais esto sendo alocadas para cada um destes programas, sem se
preocupar com o posicionamento contguo de partes de um mesmo programa. No instante
efetivo da execuo a MMU (memory management unit) converte os endereos virtuais em
endereos fsicos utilizando as tabelas de pginas, como esquematizado na Figura 61.
Neste mesmo momento a MMU detecta se uma dada pgina est ou no presente na memria
fsica, realizando uma operao de page fault (falta de pgina) caso no esteja presente.
Quando ocorre um page fault acionada uma rotina do sistema operacional que busca na
memria virtual (nos arquivos de troca) a pgina necessria, trazendo-a para a memria fsica.
Esta operao particularmente complexa quando j no existe espao livre na memria
fsica, sendo necessria a utilizao de um algoritmo de troca de pginas para proceder-se a
substituio de pginas.
Os page faults so um decorrncia da existncia de um mecanismo de memria virtual e
embora sejam operaes relativamente lentas quando comparadas ao processamento,
propiciam grande flexibilidade ao sistema. comum a implementao de mecanismos de
contabilizao dos page faults em sistemas de maior porte, onde pode existir at mesmo um
limite, configurado pelo administrador do sistema, para a ocorrncia de troca de pginas.
A converso de endereos por parte da MMU necessria porque cada programa imagina
possuir um espao de endereamento linear originado no zero quando na verdade compartilha
blocos isolados da memria fsica com outros programas que tambm esto em execuo.
Figura 22: Endereamento Virtual e Real na Paginao
Outra implicao deste mecanismo que os blocos fisicamente ocupados na memria principal
no necessitam estar continuamente nem ordenadamente posicionados. Isto permite tanto a
execuo de um processo com apenas uma de suas pginas presente na memria fsica, como
a execuo de um processo cujo tamanho total maior que o armazenamento primrio do
sistema. Sendo assim, a paginao um esquema extremamente flexvel.
O mapeamento das pginas virtuais nos efetivos endereos de memria realizado pela MMU
com o auxlio de tabelas de pginas, que determinam a relao entre as pginas do espao de
endereamento virtual e as molduras de pginas do espao de endereamento fsico, ou seja,
oferendo suporte para as operaes de converso de endereos necessrias ao uso deste
esquema de organizao de memria.
Num sistema de paginao pura, os endereos virtuais (veja a Figura 23) so denominados v,
tomando a forma de pares ordenados (p, d), onde p representa o nmero da pgina virtual e
da posio desejada, ou seja, o deslocamento (displacement ou offset) a partir da origem
desta pgina.
Figura 23: Formato do endereo virtual para sistema de paginao pura
J as posies das molduras de pginas (page frames), isto , seus endereos iniciais so
determinados da seguinte forma: como as molduras de pginas possuem o mesmo tamanho
das pginas virtuais, os endereos iniciais dos page frames so mltiplos integrais do tamanho
das pginas, no podendo ser designadas de outra forma. A Tabela 4 exibe a relao entre as
molduras de pginas e seu endereamento na memria fsica.
Tabela 4: Endereamento das Molduras de Pginas
O funcionamento da MMU, conforme esquematizado na Figura 24, pode ser descrito
resumidamente nos passos relacionados abaixo:
1. MMU recebe o endereo virtual contido nas instrues do programa.
2. O nmero de pgina virtual usado como ndice na tabela de pginas.
3. Obtm-se o endereo fsico da moldura de pgina que contm o endereo virtual
solicitado ou ocorre um page fault.
4. MMU compe o endereo final usando o endereo da moldura de pgina e uma parte do
endereo virtual (displacement).
Para o funcionamento apropriado da MMU necessria a existncia de tabelas de pginas,
mantidas total ou parcialmente na memria primria pelo sistema operacional. Cada entrada
da tabela de pginas contm, geralmente:
um bit indicando presena ou ausncia da pgina na memria principal;
o nmero da moldura de pgina (page frame number); e
dependendo da implementao, o endereo da pgina no armazenamento secundrio
(swap files) quando ausente da memria principal.
Figura 24: Converso de endereos pela MMU
O mecanismo de converso de endereos depende da organizao das tabelas de pginas (um,
dois ou mltiplos nveis) e da forma do mapeamento (mapeamento direto, mapeamento
associativo e mapeamento combinado associativo/direto). Em funo do tamanho do espao
de endereamento virtual, do tamanho da pgina e do tamanho da memria real, os arranjos
das tabelas de pginas podem se tornar grandes e complexos. Diversos estudos e estratgias
j foram realizados para sugerir organizaes mais eficientes para o mapeamento e a
converso de endereos.
Temos assim que a paginao permite a execuo de programas individualmente maiores que
a memria fsica do sistema ou, no caso mais comum, a execuo de diversos programas cuja
soma dos seus tamanhos exceda o tamanho da memria fsica. Graas a MMU, implementada
no hardware do processador, as aplicaes podem ser desenvolvidas imaginando um espao de
endereamento linear, contnuo e de grande tamanho, simplificando bastante o trabalho de
programao. A paginao o sistema de organizao de memria mais utilizado atualmente.
Exemplos de sistemas computacionais que utilizam a paginao pura so:
DEC PDP-11, minicomputador de 16 bits popular da dcada de 1970, contando com um
espao de endereamento virtual de 16 bits, pginas de 8 KBytes e at 4 MBytes de
memria fsica, utilizando tabelas de pginas de um nico nvel [TAN92, p. 97].
DEC VAX (Virtual Addresses eXtensions), sucessor do DEC PDP-11, minicomputador de
32 bits, possuindo um espao de endereamento virtual de 32 bits e pequenas pginas
de 512 bytes. Os modelos de sua famlia contavam com no mnimo 2 MBytes de
memria fsica at 512 MBytes. As tabelas de pginas possuam dois nveis [TAN92, p.
98].
IBM OS/2 2.0 (Operating System/2), operando em plataforma Intel 80386 ou 80486,
oferecia at 512 MBytes de espao lgico linear por processo num esquema de
endereamento de 32 bits, tamanho de pgina de 4 KBytes com paginao por
demanda [IBM92b, p. 11].
IBM AS/400, minicomputador de 64 bits que utiliza um esquema de tabela de pginas
invertidas (inverted page table) [STA96, p. 248].
Microsoft Windows 95, dirigido para processadores 80386 ou superior, oferece espao
de endereamento linear virtual de 2 GBytes (endereos de 32 bits), pginas de 4
KBytes [PET96, p. 293].
4.,.5 $egmentao
Enquanto que a organizao da memria atravs da paginao um modelo puramente
unidimensional, isto , o espao de endereamento virtual oferecido a cada um dos diversos
processos nico e linear, a segmentao prope um modelo bidimensional, onde cada
processo pode utilizar-se de diversos espaos de endereamento virtuais independentes. Este
conceito foi introduzido nos sistemas Burroughs e Multics [GUI86, p. 137].
Num esquema de memria segmentada, o espao de endereamento virtual dividido em
blocos de tamanho varivel, onde cada bloco pode assumir tambm um posicionamento
varivel, isto , para um dado processo, enquanto cada segmento deve ocupar um espao de
endereamento contnuo na memria fsica, no existe necessidade dos diversos segmentos
deste processo estarem alocados de forma contgua ou sequer ordenada. Estes blocos so
denominados segmentos de memria ou simplesmente segmentos, como ilustrado na Figura
25.
comum que os segmentos possuam um tamanho mximo, limitado ao tamanho da memria
fsica do sistema e um nmero mximo de segmentos distintos. Cada segmento representa um
espao de endereamento linear independente dos demais segmentos, isto permite que cada
segmento possa crescer ou diminuir conforme suas necessidades e livremente de outros
segmentos.
Uma situao possvel e comum a de um processo que possui um segmento de cdigo (o
programa em si), um ou mais segmentos de dados e um segmento para sua pilha (stack),
todos com diferentes tamanhos.
Dado que um segmento uma unidade lgica, o programador deve explicitamente determinar
sua utilizao. Embora seja possvel ter-se cdigo, dados e pilha num nico segmento, isto
representa uma m utilizao desta estrutura de organizao da memria, invalidando seus
benefcios.
Figura 25: Armazenamento primrio na segmentao
A organizao da memria em segmentos favorece e simplifica a organizao de estruturas de
dados, principalmente as de tamanho varivel em tempo de execuo. Alm disto oferece
importantes facilidades do ponto de vista de compartilhamento e proteo. Por exemplo, uma
biblioteca de funes pode ser colocada num segmento e compartilhada pelas diversas
aplicaes que as necessitem. A cada segmento podem ser associados tipos de acesso que
especifiquem as operaes que podem ser executadas no segmento, tais como leitura (read),
escrita (write), execuo (execute) e anexao (append). Tais operaes podem ainda ser
associadas a modos de acesso especficos, criando um amplo conjunto de possibilidades teis
para implantao de esquemas de segurana [DEI92, p. 233].
Num sistema de segmentao pura, os endereos virtuais, cuja estrutura se indica na Figura
26, so denominados v e tomam a forma de pares ordenados (s, d), onde s representa o
nmero do segmento e d a posio desejada, ou seja, o deslocamento (displacement ou
offset) a partir da origem deste segmento. Notamos que a formao dos endereos na
segmentao semelhante a existente na paginao.
Figura 26: Formato do endereo virtual para sistema de segmentao
Um processo somente pode ser executado se ao menos um de seus segmentos contendo
cdigo estiver presente na memria fsica. Para isto segmentos devem ser transferidos da
memria secundria para a memria primria da mesma forma que as pginas no esquema de
paginao, ou seja, cada segmento deve ser transferido inteiramente e posicionado numa
regio contnua de memria.
Isto indica que os segment faults so operaes mais lentas, dado que os segmentos so
usualmente maiores do que as pginas, e tambm menos freqentes, pois o nmero de
segmentos de um processo tipicamente menor que o nmero de pginas equivalente. Outro
ponto que deve ser determinada qual regio de memria permite a colocao do novo
segmento, operao que pode ser realizada atravs de algoritmos que apliquem as estratgias
de posicionamento (placement strategies). O segmento que deve ser substitudo, em caso de
um segment fault, deve ser obtido atravs de algoritmos que implementem as estratgias de
substituio (replacement strategies).
O mapeamento dos endereos virtuais em endereos reais pertencentes aos segmentos
corretos se faz de maneira idntica paginao, ou seja, utiliza um esquema de mapeamento
e tabelas de mapeamento de segmentos (segment map tables):
1. MMU recebe o endereo virtual contido nas instrues do programa.
2. O nmero de segmento virtual usado como ndice na tabela de segmentos.
3. Obtm-se o endereo fsico de incio do segmento ou ocorre um segment fault.
4. MMU compe o endereo final usando o endereo de incio do segmento e uma parte do
endereo virtual (displacement).
O mecanismo de converso de endereos depende da organizao das tabelas de segmentos e
da forma do mapeamento (mapeamento direto ou mapeamento associativo).
Exemplos de sistemas computacionais que utilizaram a segmentao pura so:
Burroughs B6700, computador do incio da dcada de 60, com arquitetura tipo pilha
[GUI86, p.157].
HP 3000, minicomputador tipo pilha cujo espao lgico consistia de at 255 segmentos
de cdigo executvel de 16 KBytes cada e um nico segmento de dados de 64 KBytes
manipulado por hardware [GUI86, p.172].
Intel 8086/8088, microprocessador de 8 bits, oferecia um espao de endereamento
lgico de 1 MByte, podendo efetuar o endereamento fsico de no mximo 64 Kbytes,
tamanho mximo dos segmentos que administrava [BOR92, p. 342].
IBM OS/2 1.x (Operating System/2), voltado para o microprocessador Intel 80286,
utilizava segmentao pura, onde o tamanho mximo dos segmentos era 64 Kbytes,
espao de endereamento virtual de 512 MBytes por aplicao e memria fsica mxima
de 16 Mbytes [IBM92b, p. 11][LET89, p. 142].
Microsoft Windows 3.x, tambm dirigido para o microprocessador Intel 80286, usava
segmentao pura, segmentos de no mximo 64 Kbytes, 48MBytes de espao de
endereamento virtual e memria fsica mxima de 16 MBytes [IBM92b, p. 14].
Apesar de ser um esquema de organizao de memria que oferece uma srie de vantagens, a
segmentao apresenta uma grande desvantagem: conforme os segmentos se tornam
grandes, as operaes de posicionamento e substituio tendem a se tornar lentas conduzindo
o sistema a uma situao de ineficincia. Existe ainda o problema maior de um segmento
individual se tornar maior que a memria fsica disponvel no sistema. A soluo desta
desvantagem se d na utilizao conjunta dos esquemas de segmentao e paginao, como
veremos mais a frente.
4.,.* +aginao &ersus $egmentao
Como visto, os esquemas de organizao de memria atravs de paginao e segmentao
possuem vantagens e desvantagens. Na Tabela 5 temos um quadro comparativo, tal como
proposto por Deitel [DEI92, p. 131], onde se avaliam estas formas de organizao do
armazenamento primrio.
Podemos notar que a paginao um esquema de organizao de mem ria mais simples,
principalmente para o programador, enquanto que a segmentao, a custo de uma maior
complexidade, oferece mecanismos mais sofisticados para organizao e compartilhamento de
dados ou procedimentos.
A razo para isto se encontra no porque destes esquemas terem sido inventados.
Enquanto a paginao foi desenvolvida para ser um esquema de organizao invisvel ao
programador, proporcionando um grande espao de endereamento linear, maior que a
memria fsica e de uso simples, o propsito da segmentao foi permitir que programas e
dados pudessem ser logicamente divididos em espaos de endereamento independentes
facilitando o compartilhamento e proteo [STA96, p. 249].
Enquanto o grande inconveniente da paginao pura sua excessiva simplicidade como
modelo de programao, a segmentao pura impe dificuldades no gerenciamento da
memria virtual, pois a troca de segmentos entre o armazenamento primrio e secundrio se
torna lento para segmentos de grande tamanho, penalizando o desempenho do sistema.
Tabela 5: Quadro comparativo paginao versus segmentao
4.,., +aginao e segmentao combinadas
De forma que possam ser obtidas as maiores vantagens dos esquemas de paginao e
segmentao, desenvolveu-se o uso combinado destas duas tcnicas em sistemas com
esquemas hbridos de gerenciamento de memria, mais conhecidos como sistemas
multiprogramados com paginao e segmentao combinadas.
A paginao proporciona grande espao de endereamento linear e facilidade para o
desenvolvimento embora no oferea mecanismos mais sofisticados de organizao de cdigo
e dados bem como de compartilhamento, segurana e proteo. Por sua vez, a segmentao
oferece tais mecanismos de organizao, compartilhamento e proteo, mas deixa de ser
conveniente quando os segmentos tornam-se grandes alm de impor um modelo de
desenvolvimento de software um pouco mais complexo. Combinando-se paginao e
segmentao de forma que os segmentos tornem-se paginados, associam-se as vantagens de
cada um destes esquemas eliminando suas maiores deficincias as custas de uma organizao
um pouco mais complexa mas transparente para o desenvolvedor.
Num sistema com paginao/segmentao combinadas, os segmentos devem necessariamente
ter tamanho mltiplo do tamanho das pginas, no mais necessitando ser armazenado
inteiramente na memria e to pouco de forma contgua e ordenada. Todos os benefcios da
segmentao so mantidos, ou seja, os programas podem ser divididos em mltiplos espaos
de ndereamento virtuais que, ao serem paginados, no necessitam de armazenamento
contnuo na memria real. Se desejado, todo programa e dados podem ser concentrados num
nico segmento, fazendo que o resultado sejam semelhante a um sistema paginado puro.
Desta forma, num sistema de paginao/segmentao combinadas, os endereos virtuais,
como indicado na Figura 27, denominados v, tomam a forma de triplas ordenadas (s, p, d),
onde s representa o nmero do segmento, p representa o nmero da pgina virtual e d a
posio desejada, ou seja, o deslocamento (displacement ou offset) a partir da origem da
pgina indicada dentro deste segmento.
Figura 27: Formato do endereo virtual para sistema de paginao e segmentao combinadas
Notamos que o espao de endereamento virtual oferecido tridimensional, tornando-se
necessrio a existncia de uma estrutura de controle mais sofisticada nestes sistemas.
Geralmente o sistema operacional mantm uma tabela de mapa de segmentos por processo,
cuja indicao figura no PCB (Process Control Block abordado na seo 2.4.1), e uma tabela de
pginas para cada segmento individual. Para se resolver um endereo virtual determinando-se
o endereo real torna-se necessria a utilizao de informaes em trs tabelas diferentes.
O funcionamento da MMU nestes sistemas, se encontra esquematizado na Figura 28 e pode ser
descrito, resumidamente, como segue:
1. MMU recebe o endereo virtual contido nas instrues do programa.
2. A partir da tabela de controle dos processos (tabela de PCB), selecionada a tabela de
mapa de segmentos pertencente ao processo.
3. O nmero de segmento virtual usado como ndice na tabela de segmentos obtendo-se
o nmero de pgina virtual.
4. utilizada a tabela de pginas relativa ao segmento em uso.
5. O nmero de pgina virtual usado como ndice na tabela de pginas.
6. Obtm-se o endereo fsico da moldura de pgina que contm o endereo virtual
solicitado ou ocorre um page fault.
7. MMU compe o endereo final usando o endereo da moldura de pgina e uma parte do
endereo virtual (displacement).
A manuteno desta estrutura complexa requer cuidadoso projeto para que no consuma
recursos excessivos e processamento significativo nos sistemas que as utilizam.
Exemplos de sistemas computacionais que utilizam a paginao e segmentao combinadas
so:
Honeywell 6000, computadores das dcadas de 1960 e 1970, operando com sistema
operacional MULTICS suportando processos com at 218 (262.144) segmentos cada um
com at 64 KBytes de tamanho [TAN92, p. 132].
IBM System/360, computador do final da dcada de 1960, com espao lgico de 16
MBytes divididos em 16 segmentos de 1 MByte [GUI86, p.154].
IBM MVS (Multiple Virtual Storage System), operando na arquitetura ESA/370, prov
cada processo com at 2 GBytes de, nos quais poderiam existir 2048 segmentos de 256
pginas de 4096 bytes [DEI92, p. 677].
Famlia Intel P6, suportando at 64 TBytes de endereamento virtual e um mximo de 4
GBytes de memria fsica, oferecendo at 8192 segmentos de at 4 GBytes cada um,
compostos de pginas de 4096 bytes [STA96, p. 252].
4.,.3 #abelas de p%ginas
Como visto, tanto a organizao de memria atravs de paginao como de segmentao e os
sistemas hbridos que utilizam a paginao combinada com segmentao, so implementadas
tabelas para realizar a converso de endereos virtuais em endereos fsicos. Estas tabelas,
suportadas diretamente pelo hardware do sistema e mantidas pelo sistema operacional so,
juntamente com os mecanismos de converso de endereos, o ponto central destes esquemas
de organizao de memria.
A idia bsica que o endereo virtual composto de duas partes, um nmero da pgina
virtual e um deslocamento dentro da pgina. O nmero da pgina virtual usado como ndice
numa tabela de pginas, ou seja, somado ao endereo de base da tabela de pginas,
mantido num registrador qualquer do processador, obtendo-se uma referncia para uma
entrada da tabela que contm o endereo real da moldura de pgina desejada. Somando-se o
deslocamento contido no endereo virtual ao endereo da moldura de pgina obtido da tabela
de pginas obtm-se o endereo real completo.
Na Figura 29 temos uma ilustrao que esquematiza as operaes realizadas na converso de
um endereo virtual para um outro real. Este esquema de converso de endereos
denominado converso ou traduo de endereos por mapeamento direto, ou ainda, paginao
com um nvel de tabelas.
Figura 28: Estrutura de tabelas para sistemas com paginao e segmenta
o combinadas
Figura 29: Converso de endereos por mapeamento direto
Embora de relativa simplicidade e eficincia, o mapeamento indireto pode apresentar dois
problemas importantes a medida que o espao de endere amento virtual se torna
relativamente muito maior que a memria fsica disponvel ou possvel de ser implementada no
sistema [TAN92, p. 93].
Os problemas identificados so:
1. A tabela de pginas pode se tornar extremamente grande.
Grandes espaos virtuais de endereamento requerem tabelas com muitas entradas. Se
as tabelas so grandes, uma poro preciosa da memria pode ser consumida para este
fim, reduzindo a memria disponvel para os processos que podem ser executados pelo
sistema.
2. Tabelas de pginas em memria versus troca de tabela de pginas.
Como cada processo possui suas tabelas de pginas, ao esgotar-se o seu quantum, a
sua execuo interrompida sendo substituda por outro processo. Se for realizada a
troca das tabelas durante o chaveamento de processos, economiza-se memria
primria embora tornando a operao de troca de contexto lenta. Se forem mantidas
todas as tabelas de pginas em memria primria, a troca de contexto torna-se rpida,
mas isto pode exaurir a memria primria do sistema.
3. O mapeamento pode se tornar lento para tabelas grandes ou complexos.
Como cada referncia a memria deve necessariamente ter seu endereo convertido,
quanto maiores ou mais complexas as tabelas, mais numerosas e complicadas sero as
operaes de converso e, assim, ser maior o overhead imposto pela converso dos
endereos, fazendo que o maepamento se torne inconvenientemente lento, afetando de
forma significativa a performance do sistema.
Para ilustrar esta situao, analisemos a seguinte situao: na arquitetura DEC VAX, cada
processo pode possuir at 2 GBytes (231 bytes) de espao de endereamento. Como as
pginas deste sistema possuem apenas 512 bytes (29 bytes), ento necessrio uma tabela
de pginas contendo 222 entradas para cada processo existente no sistema, ou seja,
4.194.304 entradas.
Se uma tabela desta magnitude j indesejvel, que tal um sistema Pentium, que no modo
segmentado/paginado oferece 64 TBytes (246 bytes) de memria virtual? Com pginas de
4096 bytes (212 bytes) e sabendo que metade do endereamento virtual oferecido
individualmente para cada processo, uma tabela simples por processo deveria conter 234 2
entradas, ou seja, 8.589.934.592 de entradas!
Uma primeira soluo seria submeter a tabela de pginas paginao, como qualquer outra
rea de memria, armazenando-a na memria virtual, fazendo que apenas uma parte dela
esteja necessariamente presente na memria primria.
Outra soluo para evitar a presena de enormes tabelas na memria, conforme indicado por
Tanembaum [TAN92, p. 94], diviso destas numa estrutura de mltiplos nveis, como
indicado na Figura 68. Um espao virtual de 32 bits poderia ter seu endereo divido em trs
partes: (1) um nmero de tabela de pginas TP1 de 10 bits, (2) um nmero de pgina virtual
TP2 de 10 bits e (3) um deslocamento (offset) de 12 bits.
O valor TP1 atua como ndice para a tabela de pginas de primeiro nvel, selecionando uma
das tabelas do segundo nvel. Na tabela de segundo nvel selecionada, o valor TP2 atua como
outro ndice, obtendo-se assim o endereo real da moldura de pgina (page frame). A MMU
compe o endereo real final a partir do endereo da moldura de pgina ,obtido na tabela de
segundo nvel, e do deslocamento (offset), retirado do endereo virtual.
Com a diviso de uma nica tabela (de primeiro nvel) em uma tabela de entrada (de primeiro
nvel) e tabelas de pginas auxiliares (de segundo nvel) passa a ser possvel administrar-se a
paginao das tabelas de pginas de maneira mais flexvel. Como regra geral, cada tabela de
pginas nunca maior que o tamanho de uma pgina [STA96, p. 248].
De forma anloga, um sistema de tabela de pginas de dois nveis pode ser expandido para
trs, quatro ou mais nvel, embora a flexibilidade adicionada torna-se menos valiosa do que a
complexidade inerente ao maior nmero de nveis. Cada hardware especfico possui uma
estrutura de tabelas particular, que leva em conta as peculiaridades da implementao tais
como o tamanho do espao de endereamento virtual, a mxima quantidade fsica de memria
enderevel e o tamanho da pgina.
Figura 30: Estrutura multinvel para tabelas de pginas
Independentemente do nmero de nveis e do layout das tabelas, as entradas tpicas das
tabelas de pginas possuem vrios campos utilizados para o controle adequado da memria: o
nmero da moldura de pgina (page frame number) que indica o endereo real da pgina, o
bit presente/ausente (present:absent) que sinaliza se a pgina est ou no na memria
primria, os bits de proteo (protection) que especificam as operaes que podem ser
realizadas na pgina, um bit de habilitao do cache (caching disabled) usado para evitar que
a pgina seja colocada no cache e os bits de referncia (referenced) e modificao (modified)
utilizados para controlar o uso e alterao do contedo da pgina.
Figura 31: Entrada Tpica de uma Tabela de Pginas
Exemplos de sistemas que se utilizam de diferentes formas para a implementao e
administrao de suas tabelas de pginas so:
Paginao em um nvel: DEC PDP-11.
Paginao em dois nveis: DEC VAX.
Paginao em trs nveis: Sun Spark.
Paginao em quatro nveis: Motorola 68030.
Paginao via memria associativa (nvel zero): MIPS R2000.
Paginao via tabelas invertidas: IBM RS6000 (sistemas RISC), IBM PowerPC, IBM
AS/400.
4.,.4 5lgoritmos de troca de p%ginas
Os mecanismos de memria virtual se baseiam no fato de que pores dos processos so
armazenadas em arquivos especiais denominados arquivos de troca. Quando um processo
necessita acessar uma poro de seu cdigo contida fora do espao de endereamento real,
ocorre um page fault, ou seja, detectada a falta de uma pgina que dever ser trazida
novamente para a memria principal.
As operaes de substituio de pginas so lentas pois envolvem o acesso memria
secundrio, ou seja, necessitam acessar dispositivos de entrada e sada, muito mais lentos do
que a memria primria. bvio que se a pgina substituda for necessria em breve ou for
preciso um nmero muito grande de substituies para execuo dos programas ativos,
ocorrer a hiperpaginao (hiperpaging ou thrashing) ou seja, uma degradao significativa da
performance do sistema devido ao excesso de operaes de troca de pginas.
Sendo assim estes algoritmos devem procurar substituir pginas pouco utilizadas ou no
utilizadas por aquelas que so freqentemente utilizadas pelos processos ativos, minimizando
as operaes de substituio de pginas. O grande problema consiste ento em determinar
qual pgina ser substituda ou copiada para os arquivos de troca como forma de liberar
espao para aquele pgina que se tornou necessria. Um algoritmo timo de troca de pginas
deveria ser capaz de identificar qual pgina no mais ser utilizada ou estabelecer aquela que
demorar mais a ser novamente utilizada, minimizando a ocorrncia de page faults e com isto
as operaes de troca de pginas. Como no possvel realizar tal previso, outras formas de
se definir qual pgina ser substituda so empregadas [DEI92, p. 254].
Note que se uma pgina no tiver sido modificada ento no necessita ser copiada para a
emria virtual (armazenamento secundrio), podendo ser simplesmente sobrescrita pela
pgina que tomar seu lugar na memria primria, ou seja, uma operao de substituio
simples. Se a pgina foi modificada ento dever ser copiada para o armazenamento
secundrio antes da substituio pela nova pgina, numa operao mais lenta do que uma
substituio simples.
Os algoritmos que tratam deste problema so aqueles que implementam as estratgias de
substituio (replacement strategies) e so denominados algoritmos de troca ou algoritmos de
substituio de pginas. Os algoritmos de substituio de pginas mais comuns so:
Random
First In First Out (FIFO)
Second Chance
Clock
Last Recently Used (LRU)
Last Frequently Used (LFU)
Not Recently Used (NRU)
#roca de p%ginas aleatria
Algoritmo de baixa sobrecarga que seleciona aleatoriamente qual pgina dever ser
substituda. Quanto maior o nmero de pginas existentes, maior so as chances de sucesso
imediato deste algoritmo. Embora seja rpido e de implementao simples, raramente
utilizado dado que a pgina substituda pode ser a prxima a ser necessria. Tambm
chamado de random page replacement.
#roca de p%ginas /6/7
A idia central deste algoritmo que as pginas que esto a mais tempo na memria podem
ser substitudas, ou seja, as primeiras que entram so as primeiras que saem (FIFO ou First In
First Out). Para isto associa-se um marca de tempo (timestamp) para cada pgina, criando-se
uma lista de pginas por idade, permitindo a identificao das mais antigas.
Este mecanismo de substituio, embora provvel e lgico, no necessariamente se traduz em
verdade, pois processos de longa durao pode continuar necessitando de suas pginas mais
do que processos de curta durao que entram e saem rapidamente enquanto os outro
permanecem. Dada esta razo no utilizado na forma pura, mas sim variaes deste
algoritmo.
#roca de p%ginas segunda c"ance
O algoritmo de troca de pginas segunda chance (second chance) uma variao da
estratgia FIFO. Como visto, a deficincia do algoritmo de troca de pginas FIFO que uma
pgina de uso intenso, presente a muito tempo na memria, pode ser indevidamente
substituda.
No algoritmo de troca de pginas Segunda Chance a seleo primria da pgina a ser
substituda e semelhante ao FIFO, ou seja, escolhe-se a pgina mais antiga. Antes de
proceder-se a substituio propriamente dita, verificasse o bit de referncia da pgina. Se o bit
estiver em 1, significa que a pgina foi usada, da o algoritmo troca sua marca de tempo por
uma nova e ajusta o bit de referncia para zero, simulando uma nova pgina na memria, ou
seja, uma segunda chance de permanncia na memria primria. Nesta situao outra pgina
deve ser escolhida para substituio. Se o bit de referncia estivesse em 0 a pgina seria
substituda. Com este comportamento, se uma pgina antiga utilizada, seu bit de referncia
sempre ser 1, fazendo com que permanea na memria primria a despeito de sua idade
real.
#roca de p%ginas relgio
O algoritmo de troca de pginas relgio (clock) uma outra variao da estratgia FIFO. Para
superar a deficincia do algoritmo de troca de pginas FIFO, que a substituio de uma
pgina de uso intenso em funo de sua idade na memria, o algoritmo segunda chance
verifica o bit de referncia mantendo na memria pginas em uso atravs da renovao de sua
marca de tempo. Tal comportamento eqivale a dizer que as pginas no incio da lista (mais
velhas) so reposicionadas no fim da lista (mais novas).
A estratgia do relgio manter uma lista circular, onde se o bit de referncia 1, seu valor
trocado por 0 e a referncia da lista movida conforme os ponteiros de um relgio. Caso
contrrio a pgina substituda.
#roca de p%ginas ')8
A atuao do algoritmo de troca de pginas LRU (least recently used ou menos usada
recentemente) se baseia em identificar a pgina que no foi utilizada pelo maior perodo de
tempo, assumindo que o passado um bom indicativo do futuro.
Para isto necessrio que cada pgina possua uma marca de tempo (timestamp) atualizada a
cada referncia feita pgina, o que significa uma sobrecarga substancial. A implementao
pode ser feita atravs de listas contendo uma entrada para cada page frame, sendo o
elemento da lista correspondente a uma pgina utilizada sendo posicionado no final da lista.
Este algoritmo no costuma ser usado sem otimizaes devido sobrecarga que impe. Alm
disso, em laos longos ou chamadas com muitos nveis de profundidade, a prxima pgina a
ser usada pode ser exatamente uma das menos usadas recentemente, colocando o sistema
numa situao de operaes desnecessrias devido a page faults.
O sistema operacional MS Windows 95 utiliza esta estratgia de substituio de pginas
[PET96, p. 725].
#roca de p%ginas '/8
Uma variante do algoritmo LRU a estratgia conhecida como LFU (least frequently used ou
menos freqentemente usada) ou ainda NFU (not frequently used ou no usada
freqentemente). Neste algoritmo pretende-se calcular a freqncia de uso das pginas, de
forma a se identificar qual pgina foi menos intensivamente utilizada.
Apesar de melhorar o desempenho do algoritmo LRU, ainda possvel que pginas
pesadamente utilizadas durante uma certa etapa do processamento permaneam
desnecessariamente na memria primria em relao a outras etapas mais curtas cujas
pginas no tero uso to intenso, levando a substituies inteis.
#roca de p%ginas 9)8
As entradas de cada pgina na tabela de pginas possuem geralmente bits de referncia e
modificao (bits referenced e modified, conforme Figura 69) cujos valores combinados
definem quatro situaes ou grupos de pginas, como relacionado na Tabela 6.
Tabela 6: Grupos de pginas
A atuao do algoritmo de troca de pginas NRU (not recently used ou no recentemente
usada) ou NUR (not used recently ou no usada recentemente) se baseia em remover uma
pgina, aleatoriamente escolhida, do grupo de menor utilizao que contiver pginas nesta
situao. Neste algoritmo se d preferncia a remoo de uma pgina modificada sem uso no
ltimo ciclo do que uma sem modificao que tenha sido utilizada.
Este algoritmo utilizado em vrios sistemas devido aos seus pontos fortes: simplicidade, fcil
implementao e performance adequada.