memória

download memória

If you can't read please download the document

Transcript of memória

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 arquivostexto 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 arquivofonte 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 arquivoexecutvel 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:

Cabealho 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. TSE 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 relocvel, 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 Ligadores (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 Mdulos importadores Aqueles onde so indicadas quais funes, estruturas de dados e variveis encontramse declaradas e implementadas em mdulos externos. Utilizam variaes de clusulas import ou include.

// Importao de mdulos em linguagem C #include #include #include #include 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 Relocadores (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.6 Memria virtual 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 [DEI92, p. 215]. 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: A idia bsica da memria virtual que o tamanho combinado do programa, dados e pilha podem exceder a quantidade de memria fsica disponvel para o mesmo [TAN92, p. 89]. 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: Memria Virtual uma tcnica que permite a execuo de processos que podem no estar completamente na memria [SG94, p. 301]. 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. V elMemFisica > V elMemTotal > V elMemV irtual A memria virtual pode ser implementada basicamente atravs de mecanismos de: Paginao 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. Segmentao 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.7 Modelos 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.7.1 Monoprogramado com armazenamento 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.7.2 Particionamento fixo 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): First fit: Aloca-se o processo para a primeira partio encontrada que comporte o processo, minimizando o trabalho de procura. Best fit: 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. Worst fit: 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. Langsam 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.7.3 Particionamento varivel 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.7.4 Paginao 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.7.5 Segmentao 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.7.6 Paginao versus Segmentao 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.7.7 Paginao 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.7.8 Tabelas de pginas 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.7.9 Algoritmos de troca de pginas 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) Troca de pginas 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. Troca de pginas FIFO 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. Troca de pginas segunda chance 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. Troca de pginas 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. Troca de pginas LRU 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]. Troca de pginas LFU 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. Troca de pginas NRU 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.