Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paginação em memória virtual Apresentação Todo usuário gostaria que seu computador tivesse memória suficiente para executar todos os seus programas de modo rápido. Infelizmente essa não é a realidade. Por mais que o desenvolvimento de memórias tenha evoluído muito nos últimos anos, proporcionando capacidades maiores, os programas de usuário têm crescido em um ritmo muito rápido, sempre criando a necessidade de alternativas para gerenciamento do espaço para os programas. Desde a década de 60, com programas científicos e financeiros, a necessidade de executar programas maiores que a memória do computador já era um problema real. Esse problema também pode acontecer quando os programas, mesmo que individualmente sejam menores que a memória, se executados simultaneamente, não podem estar em sua totalidade na memória principal. Dentre as soluções inventadas, tem-se a memória virtual. Nesta Unidade de Aprendizagem, você vai aprender sobre uma das principais técnicas de memória virtual, a paginação, e entender o funcionamento e os problemas/soluções que podem acontecer. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Definir a técnica de paginação de memória, explicando seus princípios, vantagens e desvantagens. • Explicar o processo de troca de páginas em memória virtual.• Reconhecer problemas em um sistema de paginação e a forma de solucioná-los.• Desafio O desenvolvimento de software evoluiu muitos nos últimos tempos, de modo que, hoje, os programas têm cada vez mais funcionalidades e consomem muito mais recursos. Dentre esses recursos está a memória, que, apesar da sua evolução, também precisa ser gerenciada. Quando a memória principal não é suficiente, é comum adotar o uso de memória virtual. Você trabalha em uma empresa que desenvolve software para equipamentos embarcados, principalmente voltados para indústrias no monitoramento da produção dos equipamentos utilizados. Como os sistemas são embarcados e também na tentativa de redução de custos, os recursos são limitados e devem ser aproveitados o máximo possível. Dentre os softwares desenvolvidos, além dos programas de análise, é comum desenvolver um sistema operacional para gerenciamento do componente como um todo. Em geral, os programas são bem divididos, em termos de memória quanto a instruções, pilha e áreas de dados. Contudo, você tem enfrentado um problema quanto à troca de processos entre a memória e o disco do componente, em que muitas páginas ao serem salvas em discos são reescritas sem necessidade, pois não estão modificadas. Por exemplo, algumas páginas são compostas somente pelas instruções do programa, e geralmente não são modificadas durante a execução, logo, quando essa página for substituída por outra na memória principal, não haverá a necessidade de reescrita, pois esta permanece inalterada. Por outro lado, as páginas que armazenam dados do programa provavelmente são modificadas, e isso só pode ser descoberto durante a execução da página na memória principal. Com base no cenário descrito, que tipo de informação poderia ser armazenada para indicar se a página precisa ser reescrita ou não em disco? Onde esse dado seria armazenado? Infográfico A paginação divide os processos em páginas que são armazenadas em uma memória, geralmente disco. Conforme a execução do processo, as instruções são executadas e podem necessitar de páginas que não estão presentes na memória, desse modo, cada página solicitada é carregada em uma moldura em substituição de outra. No Infográfico, conheça melhor o funcionamento do processo de paginação de um processo. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/e665332b-e132-449e-a096-b76efbf84059/7c9e4b2a-2612-4940-93ec-8e1779c8a60c.jpg Conteúdo do livro Olá, alunos! No mundo da computação, é fundamental entender como a memória é gerenciada em um sistema operacional. A memória virtual é uma técnica utilizada para permitir que programas usem mais memória do que realmente está disponível na memória RAM física. Para isso, o sistema operacional aloca espaço em disco rígido para servir como uma extensão da memória RAM. Uma das técnicas utilizadas no gerenciamento de memória virtual é a paginação. A ideia é dividir a memória física e a memória virtual em blocos de tamanho fixo, chamados de páginas. Quando um programa tenta acessar uma determinada página, o sistema operacional verifica se ela está presente na memória RAM. Se não estiver, o sistema operacional a busca no disco rígido e a coloca na memória RAM. Esse processo é chamado de paginação e é uma técnica importante para gerenciar a memória de um sistema operacional. No capítulo Paginação em memória virtual, base teórica desta Unidade de Aprendizagem, discutiremos a técnica de paginação, abordando conceitos importantes, como mapeamento de páginas, cálculos de endereçamento virtual e físico, tamanhos de página e algoritmos de substituição de páginas. Além disso, apresentaremos exemplos práticos de como esses conceitos são aplicados em sistemas operacionais reais. A compreensão desses tópicos é fundamental para qualquer desenvolvedor ou administrador de sistemas, pois a gerência de memória é um aspecto crucial do desempenho e da estabilidade do sistema. Boa leitura. SISTEMAS OPERACIONAIS OBJETIVOS DE APRENDIZAGEM > Definir a técnica de paginação de memória, explicando seus princípios, vantagens e desvantagens. > Explicar o processo de troca de páginas em memória virtual. > Reconhecer problemas em um sistema de paginação e a forma de solucioná- -los. Introdução Memória virtual é um recurso importante em sistemas operacionais modernos, permitindo que programas utilizem mais memória do que há fisicamente presente no sistema. A memória virtual é implementada por meio de técnicas de paginação e segmentação. A memória virtual divide a memória física em blocos de tamanho fixo chamados de páginas. Cada página pode ser mapeada para um espaço de endereço virtual. O espaço de endereço virtual é dividido em blocos também de tamanho fixo chamados de páginas virtuais. Neste capítulo, você vai aprender sobre memória virtual e como ela é imple- mentada mediante paginação. Vamos discutir as vantagens e desvantagens da memória virtual, bem como a implementação de algoritmos de substituição de página. Além disso, também veremos como a memória virtual é gerenciada pelo sistema operacional e como os programas interagem com ela. Paginação em memória virtual Victor de Andrade Machado Paginação e a memória virtual A memória virtual é uma técnica utilizada pelos sistemas operacionais para permitir que os programas possam acessar mais memória do que a fisicamente disponível. Mediante a memória virtual, o sistema operacional utiliza o disco rígido como extensão da memória principal, fazendo com que os programas possam acessar áreas de memória que estão na memória física ou na memória virtual (MACHADO; MAIA, 2007). A técnica de paginação é uma das mais utilizadas para implementar a memória virtual. Consiste em dividir a memória virtual em páginas de tamanho fixo e armazenar essas páginas em blocos consecutivos no disco rígido. Cada página da memória virtual é mapeada para uma página física na memória principal. O mapeamento entre as páginas virtuais e físicas é mantido numa tabela de páginas. Quando um programa tenta acessar uma página virtual que não está presente na memória física, ocorre uma exceção de página falha. O sistema operacional intercepta essa exceção e carrega a página correspondente do disco rígido para a memória física. O endereço virtual é então mapeado para o endereço físico correspondente na tabela de páginas e o programa pode continuar sua execução normalmente (TANENBAUM; BOS, 2016). A técnica de paginação é transparente para o programa em execução, pois ele não tem conhecimento da existênciada memória virtual. Assim, o programa trata toda a memória como se estivesse presente na memória física. A Figura 1 representa a relação entre memória física e memória virtual. Paginação em memória virtual2 Figura 1. Relação entre endereços virtuais e endereços de memória física. Fonte: Tanenbaum e Bos (2016, p. 136). De acordo com Tanenbaum e Bos (2016, p. 134), a memória virtual apresenta bom funcionamento em: [...] sistema de multiprogramação, com pedaços e partes de muitos programas na memória simultaneamente. Enquanto um programa está esperando que partes de si mesmo sejam lidas, a CPU pode ser dada para outro processo. Vantagens e desvantagens da paginação A técnica de paginação traz vários benefícios para a implementação da memória virtual. Um dos principais é que permite que os programas pos- sam acessar mais memória do que a fisicamente disponível. Isso significa que os programas podem ficar maiores e mais complexos, pois não estão limitados pela quantidade de memória física presente no sistema (TANEN- BAUM; BOS, 2016). Paginação em memória virtual 3 Outro benefício da técnica de paginação é permitir que os programas sejam compartilhados entre vários processos. Quando um processo é criado, ele herda a tabela de páginas do processo-pai. Isso significa que os processos podem compartilhar as mesmas páginas físicas, reduzindo a quantidade de memória física necessária para executar vários processos simultaneamente (MACHADO; MAIA, 2007). A técnica de paginação também permite que o sistema operacional possa implementar políticas de gerenciamento de memória mais sofisticadas, como swapping, que é a troca de páginas entre a memória física e o disco rígido. Isso permite que o sistema operacional possa balancear a carga de trabalho entre a memória física e o disco rígido, maximizando a utilização dos recursos do sistema (SILBERSCHATZ; GALVIN; GAGNE, 2015). Apesar dos benefícios, a técnica de paginação também traz algumas desvantagens. Uma das principais é o alto comprometimento mínimo, ou overhead, do mapeamento entre as páginas virtuais e físicas. Esse overhead é causado pela necessidade de manter uma tabela de páginas em memória, o que pode consumir uma quantidade significativa de memória física. Outra desvantagem da técnica de paginação é o aumento do tempo de acesso à memória. Quando um programa tenta acessar uma página virtual que não está presente na memória física, ocorre uma exceção de página falha e o sistema operacional precisa carregar a página correspondente do disco rígido para a memória física. Esse processo pode ser demorado, pois o disco rígido é muito mais lento que a memória física. Além disso, a técnica de paginação pode levar a problemas de fragmentação de memória. Como as páginas virtuais são de tamanho fixo, pode haver casos em que o espaço livre na memória física é menor que o tamanho da página, o que leva a desperdício de espaço. Tal desperdício, por sua vez, pode levar a uma diminuição da eficiência da memória virtual, pois o sistema operacional precisa carregar mais páginas do disco rígido para a memória física a fim de atender as solicitações dos programas (TANENBAUM; BOS, 2016). O sistema operacional é responsável por gerenciar a memória virtual. Isso inclui a alocação e desalocação de páginas de memória, o car- regamento de páginas do disco rígido para a memória RAM e a substituição de páginas na memória RAM. Paginação em memória virtual4 De modo geral, a paginação permite que os programas acessem uma quantidade maior de memória do que realmente está disponível na memória física. Isso é possível porque o sistema operacional pode substituir páginas menos utilizadas por outras que são necessárias. Troca de páginas virtuais A memória virtual permite que o sistema operacional gerencie a memória de forma mais eficiente do que seria possível sem ela. Assim, o sistema opera- cional pode alocar e liberar páginas de memória física conforme necessário, sem afetar o espaço de endereço virtual dos programas. Segundo Silberschatz, Galvin e Gagne (2015), o sistema operacional tam- bém pode usar a técnica de swapping para liberar espaço na memória física. Quando a memória física está cheia, o sistema operacional pode escolher uma página menos utilizada e movê-la para o espaço de armazenamento secundário. Os autores ainda definem a troca de páginas como o processo de transferir páginas de memória entre a memória principal (RAM) e o ar- mazenamento secundário (disco rígido) para otimizar a utilização eficiente da memória. Quando um programa é executado, ele é dividido em unidades de tamanho fixo chamadas de páginas. A memória principal também é dividida em blocos do mesmo tamanho, conhecidos como frames. A troca de páginas ocorre quando uma página do programa não está presente na memória principal, exigindo que seja buscada no armazenamento secundário. Isso libera espaço na memória física para novas páginas que são requi- sitadas pelo programa em execução. Quando a página movida se faz nova- mente necessária, o sistema operacional pode mover a página de volta para a memória física e atualizar o mapeamento na tabela de páginas. A Figura 2 apresenta um exemplo desse processo. Paginação em memória virtual 5 Figura 2. Estrutura operacional da tabela de páginas. Fonte: Tanenbaum e Bos (2016, p. 137). Além disso, a memória virtual também permite a implementação de recursos de proteção de memória. Cada página virtual pode ser marcada como somente leitura, somente escrita ou somente execução. Isso impede que programas acessem partes da memória que não deveriam ser acessadas (MACHADO; MAIA, 2007). Quando a memória RAM está cheia e um novo programa ou página precisa ser carregado na memória, é necessário liberar espaço na memória RAM. Isso é feito substituindo uma página existente na memória RAM por uma página que precisa ser carregada. Existem vários algoritmos de substituição de página que podem ser usados para determinar qual página deve ser removida da memória RAM. Esses algoritmos são projetados para maximizar o desempenho Paginação em memória virtual6 do sistema, minimizando o número de páginas que precisam ser carregadas do disco rígido (TANENBAUM; BOS, 2016). O Translation Lookaside Buffer (TBL) é um buffer de memória cache que armazena as entradas da tabela de páginas virtual recentemente usadas. É usado para acelerar o acesso à memória física correspondente aos endereços virtuais. Quando um endereço virtual é acessado, o sistema verifica se a entrada correspondente está presente no TBL. Se estiver presente, o endereço físico é obtido diretamente do TBL, sem a necessidade de consultar as tabelas de páginas em memória principal. Isso acelera o acesso à memória e reduz o tempo de latência do sistema. No entanto, se a entrada não estiver presente no TBL, o sistema precisa buscar a entrada nas tabelas de páginas em memória principal, o que pode ser mais lento. Portanto, o TBL é usado para melhorar o desempenho do sistema de memória virtual, mas não substitui completamente as tabelas de páginas em memória principal (TANENBAUM; BOS, 2016). Um dos algoritmos de substituição de página mais comuns é o FIFO (first-in, first-out, ou “primeiro a entrar, primeiro a sair”). Nesse algoritmo, a página mais antiga na memória RAM é substituída por uma nova página. Outro algoritmo comum é o LRU (least recently used, ou “menos recentemente usado”), que substitui a página que não foi acessada há mais tempo. Outros algoritmos de substituição de página incluem o LFU (least frequen- tly used), que substitui a página que foi usada menos frequentemente, e o MFU (most frequently used), que substitui a página que foi usada com mais frequência (SILBERSCHATZ; GALVIN; GAGNE, 2015). Alguns algoritmos de substituição Quando um sistema operacional utiliza a técnica de paginação, pode ocorrer o caso em que não haja mais espaço livre na memória principal para alocar uma nova página. Nesse momento,é necessário escolher alguma página para ser removida da memória principal e dar lugar à nova página. Essa escolha é feita por um algoritmo de substituição de páginas, que tem como objetivo minimizar o número de faltas de página e maximizar a eficiência do sistema. Vamos ver alguns exemplos de algoritmos de substituição de páginas. O algoritmo FIFO escolhe para remoção a página que foi carregada na memória principal há mais tempo. É como uma fila, em que a primeira página a entrar é a primeira a sair. Esse algoritmo é fácil de implementar, mas pode não ser eficiente em alguns casos, especialmente quando as páginas mais antigas ainda estão sendo usadas com frequência (TANENBAUM; BOS, 2016). Paginação em memória virtual 7 Suponha que temos três páginas na memória principal e que a sequência de referência de páginas é 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. Na primeira vez em que a página 1 é referenciada, ela é carregada na primeira posição da memória principal. Na segunda vez em que a página 1 é referenciada, ela já está na memória principal, então não é necessário carregar novamente. Na terceira vez em que a página 1 é referenciada, a página 3 é removida da memória principal, pois é a primeira página a ter sido carregada na memória. O mesmo acontece com a página 2, que é carregada na segunda posição da memória, e com a página 3, que é carregada na terceira posição. Quando a página 4 é referenciada, ela substitui a página 1, que foi a primeira página a ser car- regada na memória. O mesmo acontece quando a página 5 é referenciada, substituindo a página 2. Por sua vez, o algoritmo LRU escolhe para remoção a página que foi usada menos recentemente, ou seja, que foi acessada há mais tempo. Esse algoritmo é mais complexo que o FIFO, pois requer a manutenção de um contador para cada página, indicando quando ela foi usada pela última vez. No entanto, o LRU pode ser mais eficiente em alguns casos, já que tende a manter na memória as páginas que estão sendo usadas com mais frequência (TANENBAUM; BOS, 2016). Suponha que temos três páginas na memória principal e que a sequência de referência de páginas é 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. Quando a página 1 é referenciada pela primeira vez, ela é carregada na primeira posição da me- mória principal. Quando a página 2 é referenciada pela primeira vez, ela é carregada na segunda posição. Quando a página 3 é referenciada pela primeira vez, ela é carregada na terceira posição. Quando a página 4 é referenciada pela primeira vez, ela substitui a página que foi usada menos recentemente, que é a página 1. Na sequência seguinte de referência de páginas, a página 5 é referenciada, substituindo a página 2, que foi a página usada menos recentemente. Na próxima sequência de referência de páginas, a página 1 é referenciada novamente, mas agora ela já está na memória principal e não é necessário carregá-la novamente. Já o LFU é um algoritmo que escolhe para remoção a página que foi usada menos frequentemente, ou seja, que foi acessada menos vezes. Esse algoritmo também requer a manutenção de um contador para cada página, indicando quantas vezes ela foi acessada. O LFU pode ser eficiente em sistemas em que algumas páginas são usadas com mais frequência do que outras (SILBERS- CHATZ; GALVIN; GAGNE, 2015). Suponha que temos três páginas na memória principal e que a sequência de referência de páginas é 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. Quando a página 1 é re- ferenciada pela primeira vez, ela é carregada na primeira posição da memória Paginação em memória virtual8 principal. Quando a página 2 é referenciada pela primeira vez, ela é carregada na segunda posição. Quando a página 3 é referenciada pela primeira vez, ela é carregada na terceira posição. Quando a página 4 é referenciada pela primeira vez, ela substitui a página que foi usada menos frequentemente, que é a página 1. Na sequência seguinte de referência de páginas, a página 5 é referenciada, substituindo a página 2, que foi a página usada menos frequentemente. Na próxima sequência de referência de páginas, a página 1 é referenciada novamente, mas agora ela já está na memória principal e não é necessário carregá-la novamente. Outro algoritmo de substituição de páginas é o NRU (not recently used), que divide as páginas em quatro categorias, com base em dois bits que indicam se cada página foi usada recentemente e se é escrita ou somente leitura. Em seguida, o NRU escolhe aleatoriamente uma página de uma categoria que não seja a mais recente. Esse algoritmo é simples, mas pode não ser eficiente em sistemas em que algumas páginas são usadas com mais frequência do que outras. Por fim, podemos citar o algoritmo MFU (most frequently used), que faz as substituições baseado na frequência de uso de cada página. O MFU opera escolhendo para ser mantida na memória principal a página que foi usada com mais frequência e substituindo a página que foi usada com menos frequência (MACHADO; MAIA, 2007). Uma das vantagens do algoritmo MFU é que ele é adequado para lidar com o problema do envelhecimento, pois com ele as páginas que são usadas com mais frequência têm uma contagem maior e, portanto, são menos propensas a serem removidas da memória principal. No entanto, assim como outros algoritmos de substituição de página, o MFU não é perfeito e pode não funcionar bem em todas as situações. Em particular, esse algoritmo pode ter problemas com páginas que são usadas com frequência no início de sua vida útil e, em seguida, deixam de ser usadas com frequência (ARAÚJO; FERNANDES, 2018). Suponha que temos três páginas na memória principal e que a sequência de referência de páginas é 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. Quando a página 1 é re- ferenciada pela primeira vez, ela é carregada na primeira posição da memória principal. Quando a página 2 é referenciada pela primeira vez, ela é carregada na segunda posição. Quando a página 3 é referenciada pela primeira vez, ela é carregada na terceira posição. Quando a página 4 é referenciada pela primeira vez, ela substitui a página que foi usada mais frequentemente, que é a página 1. Na sequência de referência de páginas, a página 5 é referenciada, Paginação em memória virtual 9 substituindo a página 2, que foi a página usada menos frequentemente. Na próxima sequência de referência de páginas, a página 1 é referenciada novamente, mas agora ela já está na memória principal e não é necessário carregá-la novamente. Aplicações e problemas de desempenho Existem vários algoritmos de substituição de página que podem ser usados, cada qual com seus próprios prós e contras. A escolha do algoritmo ideal depende das características específicas do sistema e da carga de trabalho. É importante destacar que a substituição de página é um processo dinâmico que deve ser ajustado continuamente à medida que a carga de trabalho vai mudando (TANENBAUM; BOS, 2016). A seguir, vamos explorar alguns exemplos práticos que mostram como o tamanho de página afeta a representação de endereço virtual. Suponha que estamos trabalhando com um processador que suporta endereços virtuais de 32 bits e que o sistema operacional utiliza páginas de 4 KB de tamanho. Isso significa que há 220 páginas possíveis em um espaço de endereço virtual de 32 bits, e cada página tem um tamanho de 4 KB, ou 212 bytes. Um endereço virtual de 32 bits pode ser representado como um número de 32 bits, o que significa que pode ter um valor máximo de 232 – 1, ou 429.4967.295 em decimal. Para traduzir esse endereço virtual em um endereço físico, o sistema operacional divide o endereço virtual em três partes: o número da página, o deslocamento dentro da página e o número do quadro de página físico correspondente. O número da página é determinado pelos bits mais significativos do en- dereço virtual, que são os primeiros 20 bits. Isso significa que há 220 páginas possíveis. O deslocamento dentro da página é determinado pelos bits menos significativos doendereço virtual, que são os últimos 12 bits. Como o tamanho da página é de 4 KB, o deslocamento pode ter um valor máximo de 212 – 1 ou 4.095 em decimal. O número do quadro de página físico é determinado pelo sistema operacional, que mantém uma tabela de páginas que mapeia os números de página virtuais para números de quadros físicos correspondentes. Outro exemplo que podemos considerar é um endereço virtual de 64 bits. Suponha que estamos trabalhando com um sistema que usa páginas de 2 MB de tamanho. Isso significa que há 221 páginas possíveis num espaço de ende- reço virtual de 64 bits, e cada página tem um tamanho de 2 MB, ou 221 bytes. Paginação em memória virtual10 Um endereço virtual de 64 bits pode ser representado como um número de 64 bits, o que significa que pode ter um valor máximo de 264 – 1. Para traduzir este endereço virtual em um endereço físico, o sistema operacional divide o endereço virtual em quatro partes: o número do diretório de página, o número da tabela de páginas, o deslocamento dentro da página e o número do quadro de página físico correspondente. O número do diretório de página é determinado pelos bits mais significati- vos do endereço virtual, que são os primeiros 16 bits. Isso significa que temos 216 diretórios de página possíveis. Cada diretório de página pode ter 29 (512) entradas, cada qual correspondente a uma tabela de páginas. Dessa forma, os próximos 9 bits do endereço virtual determinam o número da tabela de páginas, ou seja, existem 512 tabelas de páginas possíveis em cada diretório. Cada tabela de página também pode ter 29 entradas, cada uma corres- pondente a uma página física na memória principal. Portanto, os próximos 9 bits do endereço virtual determinam o número da entrada na tabela de páginas correspondente à página virtual. O deslocamento dentro da página é determinado pelos 21 bits seguintes, que representam a posição do byte desejado dentro da página. Como cada página tem um tamanho de 2 MB, ela pode armazenar 221 bytes, e o desloca- mento é representado por um valor entre 0 e 221 – 1. Por fim, o número do quadro de página físico correspondente é determi- nado pelo sistema operacional a partir do número da tabela de páginas e da entrada correspondente na tabela. Esse número identifica o endereço físico da página na memória principal. Em resumo, segundo Tanenbaum e Bos (2016), a tradução de um endereço virtual de 64 bits para um endereço físico em um sistema com páginas de 2 MB envolve os seguintes passos: � Divida o endereço virtual em quatro partes: número do diretório de página, número da tabela de páginas, deslocamento dentro da página e número do quadro de página físico correspondente. � Use os primeiros 16 bits do endereço virtual para determinar o número do diretório de página. � Use os próximos 9 bits para determinar o número da tabela de páginas correspondente ao endereço virtual dentro do diretório de página. � Use os próximos 9 bits para determinar o número da entrada na tabela de páginas correspondente à página virtual. � Use os 21 bits seguintes para determinar o deslocamento dentro da página. Paginação em memória virtual 11 � Use o número da tabela de páginas e a entrada correspondente na tabela para obter o número do quadro de página físico correspondente. � Calcule o endereço físico adicionando o deslocamento dentro da página ao endereço-base do quadro de página físico. Esses cálculos podem ser automatizados pelo hardware do sistema, mas é importante entender como eles funcionam para perceber como a memória virtual e a paginação funcionam em um nível mais baixo. Mais especificadamente, podemos ver alguns exemplos dos algoritmos de substituição de páginas. Para ilustrar o funcionamento do algoritmo MFU, considere o seguinte conjunto de referências a página: 1, 2, 3, 1, 4, 2, 5, 1, 2, 3, 5, 2 Nesse exemplo, cada número representa uma referência a uma página — a primeira referência é para a página 1, a segunda para a página 2 e assim por diante. A tabela a seguir mostra como o algoritmo MFU contaria as referências a cada página: Página Contagem 1 3 2 4 3 2 4 1 5 2 No início, todas as páginas estão ausentes na memória principal, então o sistema operacional deve trazer a primeira página (página 1) para a memória. Na segunda referência, o sistema operacional deve trazer a segunda página (página 2) para a memória, uma vez que essa página ainda não está presente. Na terceira referência, o sistema operacional deve trazer a terceira página (página 3) para a memória. Paginação em memória virtual12 Na quarta referência, o sistema operacional deve substituir uma página na memória, uma vez que a página 1 está presente na memória e a quarta referência é para essa página. Como a página 1 tem a menor contagem (3), ela é substituída pela quarta página (página 4). O processo continua assim, com o sistema operacional trazendo novas páginas para a memória conforme necessário e substituindo as páginas menos usadas quando a memória principal está cheia. Para exemplificar o algoritmo de substituição FIFO, suponha que temos um sistema com quatro quadros de página físicos e uma lista de referência à memória virtual dada por: 1. 0 2. 1 3. 2 4. 3 5. 0 6. 1 7. 2 8. 3 9. 0 10. 1 Nesse exemplo, as primeiras quatro páginas (0, 1, 2 e 3) são carregadas na memória principal e cada uma delas ocupa um quadro de página físico. Quando a quinta página (0) é referenciada, a substituição de página é necessária, porque não há mais quadros de página disponíveis. O algoritmo FIFO seleciona a página que foi carregada na memória há mais tempo para ser substituída. No nosso exemplo, isso significa que a primeira página a ser substitu- ída é a página 0, que foi carregada na memória no início da execução do programa. Portanto, a página 0 é removida do quadro de página físico 0 e a nova página (também 0) é carregada nesse quadro. Quando a sexta página (1) é referenciada, a substituição de página é necessária novamente. Como o quadro de página físico 1 está livre, a página 1 é carregada nesse quadro. O mesmo processo se repete quando as páginas 2, 3 e 0 são referenciadas novamente nas posições 7, 8 e 9 da lista, respectivamente. Quando a décima página (1) é referenciada, todas as páginas do programa já foram carregadas na memória e não há necessidade de substituição de página. Paginação em memória virtual 13 Portanto, a ordem de substituição de página de acordo com o algoritmo FIFO nesse exemplo seria: 1. 0 2. 1 3. 2 4. 3 5. 0 Vale ressaltar que o algoritmo FIFO não leva em consideração o número de vezes que uma página é referenciada, apenas a ordem em que foi carregada na memória. Por isso, ele pode não ser o algoritmo mais eficiente em termos de desempenho, já que uma página importante pode ser substituída mesmo que seja frequentemente referenciada. Problemas de desempenho Cada algoritmo de substituição de páginas apresentado anteriormente tem suas vantagens e desvantagens em termos de desempenho. Vamos apresentar a seguir uma análise de cada um desses algoritmos e seus problemas de desempenho, bem como possíveis maneiras de contorná-los. O problema do algoritmo FIFO é que ele não leva em consideração o número de vezes que uma página é referenciada, o que pode levar à substituição de uma página frequentemente usada. Uma maneira de contornar esse problema é utilizar um algoritmo que leve em conta a frequência de referência de cada página, como o algoritmo NFU (SILBERSCHATZ; GALVIN; GAGNE, 2015). Por sua vez, o algoritmo LRU pode ser bastante eficiente em sistemas nos quais a memória é suficiente para manter as páginas frequentemente usadas. No entanto, em sistemas com pouca memória, pode ser necessário substituir uma página frequentemente usada. Nesse caso, o algoritmo LRU pode se tornar lento, pois requer o rastreamento do tempo de referência para todas as páginas. Uma maneira de contornar esse problema é usar uma variação do algoritmo LRU quemantém uma lista de páginas frequentemente referenciadas, em vez de manter um registro de tempo para todas as páginas. Já o algoritmo MRU pode ser eficiente em sistemas que usam páginas de grande tamanho ou quando as páginas frequentemente usadas são mantidas na memória. No entanto, pode ser menos eficiente que o LRU em sistemas nos quais as páginas são frequentemente acessadas em ordem não decrescente. Uma maneira de contornar esse problema é usar uma variação do algoritmo Paginação em memória virtual14 MRU que utiliza um temporizador para evitar a retenção de páginas antigas na memória (SILBERSCHATZ; GALVIN; GAGNE, 2015). O algoritmo NFU pode ser eficiente em sistemas cujas páginas frequente- mente usadas devem ser mantidas na memória, mas pode ser menos eficiente em sistemas cujas páginas são frequentemente referenciadas em curtos intervalos de tempo. Uma maneira de contornar esse problema é usar uma variação do algoritmo NFU que limita o número de vezes que uma página pode ser referenciada antes de ser substituída, como o algoritmo Aging (MACHADO; MAIA, 2007). Por fim, o principal problema do algoritmo MFU é que ele pode sofrer de um efeito de “envelhecimento”: as páginas que foram referenciadas várias vezes em curto período de tempo podem ser consideradas “frias” pelo al- goritmo, uma vez que a frequência de referência diminui ao longo do tempo. Isso pode levar a uma alta taxa de substituição de páginas para as páginas mais frequentemente utilizadas. Uma solução para esse problema é o uso de um algoritmo MFU adaptativo, que ajusta dinamicamente a frequência de referência das páginas com base em sua idade. Isso pode ser feito, por exemplo, atribuindo um peso maior às referências recentes do que às refe- rências antigas (BARRETO, 2017). Outra abordagem é o uso de um algoritmo híbrido, como o MFU-LRU, que combina as características do algoritmo MFU com as do algoritmo LRU. Nesse caso, o algoritmo MFU é usado para classificar as páginas com base na frequência de referência, enquanto o algoritmo LRU é usado para considerar a idade da página. É importante destacar que, assim como nos outros algoritmos de substi- tuição de páginas, o tamanho da memória física disponível e o tamanho das páginas também pode afetar o desempenho do algoritmo MFU. Em sistemas com pouca memória física disponível, por exemplo, pode ser necessário reduzir o tamanho das páginas para melhorar o desempenho do algoritmo (MACHADO; MAIA, 2007). Em sistemas de computador modernos, o gerenciamento de memória é uma tarefa crucial que permite que os programas possam acessar dados na memória de forma eficiente e segura. Uma das técnicas de geren- ciamento de memória mais utilizadas é a memória virtual, que permite que o sistema operacional simule uma quantidade de memória maior que a disponível fisicamente no sistema. Neste contexto, uma das questões mais importantes a serem consideradas é o tamanho das páginas usadas pelo sistema e quantas molduras de páginas podem ser indexadas (TANENBAUM; BOS, 2016). Paginação em memória virtual 15 Suponha que temos um sistema de computador com 16 GB de RAM e que usa páginas de 8 KB. O número máximo de molduras de página que podem ser indexadas por esse sistema depende do tamanho total da memória física e do tamanho das páginas. Primeiramente, precisamos converter o tamanho da memória de GB para bytes, já que a contagem de memória é realizada em bytes: 16 GB = 16 × 230 bytes Em seguida, precisamos converter o tamanho das páginas de KB para bytes: 8 KB = 8 × 210 bytes Agora podemos calcular o número máximo de molduras de página que podem ser indexadas pelo sistema: Portanto, o número máximo de molduras de página que podem ser indexadas por este sistema é de 221, ou seja, 2.097.152 molduras de página. Esse cálculo é importante para determinar quantos blocos de memória o sistema pode indexar e como o sistema operacional pode gerenciar a memória virtual. Quando a quantidade de molduras de página que pode ser indexada é pequena, pode haver problemas de fragmentação da memória, o que pode levar a um desempenho pior do sistema. Por outro lado, se a quantidade de molduras de página for grande demais, pode haver um alto consumo de recursos do sistema, o que pode levar a problemas de desempenho. Portanto, é importante encontrar um equilíbrio entre a quantidade de memória física disponível e o tamanho das páginas para obter o melhor desempenho do sistema. A memória virtual é uma técnica de gerenciamento de memória importante utilizada pelos sistemas operacionais modernos. Ela permite que programas acessem mais memória do que realmente está disponível na memória física, além de permitir o gerenciamento eficiente da memória. Especificamente, a paginação é uma técnica fundamental da memória virtual que permite o Paginação em memória virtual16 mapeamento entre o espaço de endereço virtual e a memória física. Embora a memória virtual tenha algumas desvantagens, suas vantagens as supe- ram, tornando-a uma técnica indispensável para os sistemas operacionais modernos. Referências ARAÚJO, R. M.; FERNANDES, F. M. R. Um estudo comparativo de algoritmos de substi- tuição de página para sistemas de memória virtual. In: CONGRESSO BRASILEIRO DE INFORMÁTICA NA EDUCAÇÃO, 7., 2018. Anais [...]. Fortaleza, 2018. BARRETO, R. G. Sistemas operacionais: uma abordagem prática. São Paulo: Érica, 2017. MACHADO, F. B.; MAIA, L. P. Arquiteturas de sistemas operacionais. 4. ed. Rio de Janeiro: LTC, 2007. SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. Fundamentos de sistemas operacionais. 9. ed. Rio de Janeiro: LTC, 2015. TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson Prentice Hall, 2016. Leituras recomendadas DEITEL, H. M. et al. Sistemas operacionais. 3. ed. São Paulo: Prentice-Hall, 2005. TANENBAUM, A. S.; WOODHULL, A. S. Sistemas operacionais: projeto e implementação. 3. ed. Porto Alegre: Bookman, 2008. Os links para sites da web fornecidos neste capítulo foram todos testados, e seu funcionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Paginação em memória virtual 17 Dica do professor A utilização de memória virtual e paginação permite a divisão de programas em páginas, possibilitando que processos maiores (ou quando executados junto com outros) que a memória principal possam ser executados mantendo as páginas necessárias na memória principal e efetuando trocas conforme a execução. Esse mecanismo trouxe grandes benefícios, principalmente por ser independente quanto à programação, estando sob responsabilidade total do sistema operacional. Contudo, não existem somente benefícios, mas sim problemas e questões que precisam ser decididos e resolvidos. Situações relacionadas ao tamanho do espaço de endereçamento, diferentes arquiteturas e velocidade de mapeamento de endereço são questões relevantes. Nesta Dica do Professor, conheça um dos principais problemas da paginação, o tamanho do espaço de endereçamento, juntamente com algumas estratégias para solucioná-lo. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/d4ae0cb39b98b4f949d73fc8d30c8ffb Exercícios 1) Um sistema operacional utiliza a técnica de paginação para o uso de memória virtual. Sabe- se que cada endereço virtual tem 14 bits e os quatro bits mais significativos são responsáveis por identificar a página na memória virtual. Qual o tamanho da página utilizada? A) 256 bytes. B) 512 bytes. C) 1 KB. D) 2 KB. E) 4 KB. 2) A paginação em memória virtual utiliza páginas e molduras de páginas para a divisão do processo tanto na memória físicaquanto virtual. A respeito do funcionamento e do propósito desses dois elementos, pode-se afirmar que: A) as páginas ficam presentes na memória principal, cujas correspondentes molduras estão em disco para serem requisitadas. B) as molduras de página ficam presentes na memória principal, as quais podem alocar uma ou mais páginas, de modo que não exceda o espaço da moldura e a quantidade seja potência de 2. C) as molduras de página ficam presentes na memória principal e só podem alocar uma página por vez, a qual tem o mesmo tamanho da moldura. D) as páginas e molduras podem ter tamanhos diferentes conforme a necessidade, mas a alocação de página na memória deve obedecer à capacidade de espaço. E) as páginas ficam presentes na memória principal e a divisão é feita pelo programador. Um processo de 24 KB foi dividido em partições de 4 KB, numeradas de 1 a 6 em ordem. Quando uma posição de memória é acessada, a página precisa estar alocada em uma moldura na memória principal. Em um dado momento da execução, o endereço 8296 foi 3) acessado. Desse modo, para executar a instrução nesse endereço sem causar uma chamada de sistema de page fault, qual página precisa estar carregada na memória? A) Página 1. B) Página 2. C) Página 3. D) Página 4. E) Página 5. 4) O uso de memória virtual requer um mapeamento entre o endereço físico e virtual em tempo adequado para não prejudicar o desempenho do processo. Sobre o processo de mapeamento, pode-se dizer que: A) uma solução para agilizar a conversão entre endereços é utilizar uma tabela associativa, também conhecida como TBL, em nível de hardware. B) o acesso à memória para conversão do endereço virtual ao endereço físico não prejudica o desempenho do processo. C) as diferenças entre arquiteturas de 32 bits e 64 bits não tem qualquer influência quanto ao endereçamento dos processos. D) na implementação de tabelas de páginas multinível, as páginas são organizadas em listas encadeadas em pares de página e moldura. E) na implementação de tabelas de páginas invertidas, as páginas são organizadas de modo hierárquico em blocos, sendo que os níveis superiores apontam para o início dos níveis inferiores, na tentativa de somente alocar as páginas necessárias de cada bloco, e não o bloco de páginas inteiro. 5) Um computador de arquitetura de 32 bits trabalha com páginas de 4 KB e tem 1 GB de RAM. Qual é o total de molduras de páginas que podem ser indexadas nessa arquitetura? A) 65.536. B) 1.048.576. C) 16.384 . D) 1.024. E) 268.435.456. Na prática O processo de paginação tem diversos fatores que podem influenciar no desempenho. Em uma determinada arquitetura de computador, se for estabelecido que o tamanho da página será pequeno, haverá um grande número de entradas na tabela de página que precisa ser gerenciado. Isso também pode acontecer se a arquitetura puder mapear um grande número de endereços, como em arquiteturas 64 bits. Além disso, também é necessário garantir que o mapeamento de endereços virtuais em físicos seja rápido. Conheça uma solução em nível de hardware que tem sido utilizada no aprimoramento do processo de paginação. Conteúdo interativo disponível na plataforma de ensino! Saiba + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: O que é a memória virtual? Neste artigo, você entenderá melhor o que é memória virtual e como gerenciá-la por meio de programas no Windows. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Sistemas operacionais - paginação Nesta videoaula da Univesp TV, você conhecerá a fundo o processo de paginação implementado em sistemas operacionais. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Como configurar swap no Ubuntu/Debian Neste artigo, você aprenderá como configurar o swap, também conhecido como memória virtual, em sistemas baseados no Ubuntu/Debian. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Técnicas de memória virtual https://www.infonova.com.br/artigo/o-que-e-a-memoria-virtual/ https://www.youtube.com/embed/4EaBN98dk40 https://www.kelvinsantiago.com.br/como-adicionar-swap-no-ubuntudebian/ Nesta videoaula da Univesp TV, você poderá conhecer algumas técnicas de implementação de memória virtual. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://www.youtube.com/embed/QjieJPckuDI
Compartilhar