Baixe o app para aproveitar ainda mais
Prévia do material em texto
Memória virtual: segmentação Apresentação Mecanismos de paginação de memória resolvem o problema da escassez de memória principal no computador, estendendo o espaço de endereçamento além da capacidade instalada na máquina. A paginação, no entanto, é uma abordagem limitada por oferecer um único espaço de endereçamento linear. Isso pode causar problemas quando programas crescem na memória e precisam alocar muito mais espaço do que outros programas em execução. Os mecanismos de segmentação visam a permitir a existência de múltiplos espaços de endereçamento que possam crescer de forma independente, sem interferir ou sofrer interferência dos espaços de outros processos. O uso de segmentação também pode fazer com que a memória disponível seja usada de forma mais eficiente, pois é possível contar com propriedades de proteção de memória que permitem o compartilhamento seguro de segmentos de memória para usos específicos. Nesta Unidade de Aprendizagem, você aprenderá o conceito de segmentação de memória, como as abordagens desse tipo funcionam e como elas se diferenciam do modelo de paginação de memória. Com a implementação de segmentação pura, você será apresentado ao problema da fragmentação de memória. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Explicar o funcionamento de segmentação.• Comparar paginação e segmentação.• Discutir a implementação de segmentação pura.• Desafio A aplicação de mecanismos de memória virtual, como a paginação e a segmentação, exige que, a cada leitura de memória efetuada pelo processador, um tipo de tradução seja realizado da posição de memória virtual indicada pela instrução que o processador está executando para a posição na memória física onde os dados referenciados pela memória virtual realmente estão presentes. Na segmentação, cada posição de memória pode ser referenciada a partir de um par de informações: o número do segmento X e a posição de memória dentro do segmento Y. Ao receber o valor X,Y, o sistema deve verificar se o segmento X está carregado em memória. Se o segmento ainda não está disponível, ele deve carregá-lo (a depender do nível de fragmentação, antes de carregar pode ser necessário efetuar uma compactação). Com o segmento X na memória, a tradução pode ocorrer para obter a posição real do dado a ser acessado. Obtém-se a posição base do segmento X na memória principal, e é somado Y a esse valor. O resultado desse processo é a posição na memória física relativa ao par X,Y informado, e com esse valor é possível obter os dados e retorná-los ao processador para que o processo continue a sua execução. A partir das informações acima, responda aos seguintes questionamentos: a) Se o processador tentar acessar a posição 256 do segmento 2, qual posição na memória principal precisaria ser acessada? b) Se o processador tentar acessar a posição 4224 do segmento 1, qual posição na memória principal precisaria ser acessada? O acesso a essa posição de memória teria sucesso? Explique a sua resposta. c) Com base na observação do cenário descrito, explique por que os dados de um segmento precisam ser carregados completos e de forma contínua na memória principal. Infográfico A fragmentação de memória ocorre quando lacunas vão sendo acumuladas na memória principal na medida em que os segmentos, que têm tamanho variável, são carregados, removidos e substituídos. Em casos extremos, a memória principal pode ter espaço suficiente para carregar um segmento, mas não ser capaz de suportá-lo, pois esse espaço é não contínuo, ou seja, está fragmentado. Nessa situação, é necessário executar rotinas de desfragmentação da memória, como a compactação, fazendo movimentações na memória para que haja espaço contínuo livre na memória principal. No Infográfico a seguir, você poderá compreender visualmente o que é a fragmentação de memória, em que situação ela ocorre e qual procedimento pode ser tomado para resolver esse problema. 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/c19eb26a-a4be-4ed2-988b-76a75cf66ac2/f04eacd9-e35f-480c-99f2-7d9a5a5c6ce3.jpg Conteúdo do livro A segmentação de memória é uma abordagem para lidar com a memória virtual, que permite que existam vários espaços de endereçamento separados. Essa implementação de memória virtual, na qual cada programa tem conhecimento de seu próprio espaço de endereçamento, é muito útil para o desenvolvimento de sistemas mais complexos. Como cada segmento tem a sua própria posição zero, e toda a sua memória é indexada a partir dessa posição, os programas podem crescer sem causar problemas para outros dados que são armazenados na memória do computador. Isso também permite que o programa seja carregado em qualquer posição de memória inicial fisicamente. Leia o capítulo Memória virtual: segmentação, da obra Sistemas Operacionais, no qual você irá aprender o funcionamento dos mecanismos de segmentação de memória e entenderá como ele se difere das estratégias de paginação. T164s Tanenbaum, Andrewa S. Sistemas operacionais [recurso eletrônico] : projeto e implementação / Andrew S. Tanenbaum, Albert S. Woodhull ; tradução João Tortello. – 3. ed. – Dados eletrônicos. – Porto Alegre : Bookman, 2008. Editado também como livro impresso em 2008. ISBN 978-85-7780-285-2 1. Sistemas operacionais. I. Woodhull, Albert S. II. Título. CDU 004.4 Catalogação na publicação: Mônica Ballejo Canto – CRB 10/1023 CAPÍTULO 4 • GERENCIAMENTO DE MEMÓRIA 383 O compartilhamento de páginas também pode ser usado para implementar um sistema de passagem de mensagens de alto desempenho. Normalmente, quando as mensagens são passadas, os dados são copiados de um espaço de endereçamento para outro a um custo considerável. Se os processos puderem controlar seus mapas de página, uma mensagem po- derá ser passada, com o processo remetente desfazendo o mapeamento da(s) página(s) que contém(êm) a mensagem e o processo receptor mapeando-a(s) novamente. Aqui, apenas os nomes de página precisam ser copiados, em vez de todos os dados. Uma outra técnica avançada de gerenciamento de memória é a memória comparti- lhada distribuída (Feeley et al., 1995; Li e Hudak, 1989; e Zekauskas et al., 1994). A idéia aqui é permitir que vários processos em uma rede compartilhem um conjunto de páginas, possivelmente (mas não necessariamente) como um único espaço de endereçamento linear compartilhado. Quando um processo referencia uma página que não está correntemente ma- peada, obtém uma falta de página. Então, a rotina de tratamento de falta de página, que pode estar em espaço de núcleo ou em espaço de usuário, localiza a máquina que contém a página e envia para ela uma mensagem pedindo para que desfaça o mapeamento da página e a envie pela rede. Quando a página chega, é mapeada e a instrução que provocou a falta de página é reiniciada. 4.6 SEGMENTAÇÃO A memória virtual discutida até aqui é unidimensional, pois os endereços virtuais vão de 0 até algum endereço máximo, um endereço após o outro. Para muitos problemas, ter dois ou mais espaços de endereçamento virtuais separados pode ser muito melhor do que ter apenas um. Por exemplo, um compilador tem muitas tabelas que são construídas à medida que a compi- lação prossegue, possivelmente incluindo: 1. O salvamento do texto do código-fonte para a listagem impressa (em sistemas de lote). 2. A tabela de símbolos, contendo os nomes e atributos das variáveis. 3. A tabela contendo todas as constantes inteiras e em ponto fl utuante usadas. 4. A árvore de análise, contendo a análise sintática do programa. 5. A pilha usada para chamadas de função dentro do compilador. Cada uma das quatro primeiras tabelas cresce continuamente, à medida que a compila- ção prossegue. A última aumenta e diminui de maneiras imprevisíveis durante a compilação. Em uma memóriaunidimensional, para essas cinco tabelas, teriam de ser alocados trechos adjacentes do espaço de endereçamento virtual, como se vê na Figura 4-21. Considere o que acontecerá se um programa tiver um número excepcionalmente grande de variáveis, mas uma quantidade normal do restante. O trecho do espaço de endereçamento alocado para a tabela de símbolos poderá ser totalmente preenchido, mas ainda poderá haver muito espaço disponível nas outras tabelas. Naturalmente, o compilador poderia simplesmen- te emitir uma mensagem dizendo que a compilação não pode continuar devido à existência de variáveis demais, mas fazer isso não parece muito justo, quando resta espaço sem utilização nas outras tabelas. Outra possibilidade é brincar de Robin Hood, roubando espaço das tabelas com excesso de espaço e dando-o para as tabelas com pouco espaço. Essa troca pode ser feita, mas é aná- logo a gerenciar os próprios overlays – na melhor das hipóteses, um incômodo, e, na pior, um trabalho enorme e sem recompensa. 384 SISTEMAS OPERACIONAIS O que é realmente necessário é uma maneira de fazer com que o programador não tenha que gerenciar o aumento e a redução das tabelas, da mesma maneira que a memória virtual elimina a preocupação de organizar o programa em overlays. Uma solução simples e extremamente geral é fornecer à máquina vários espaços de endereçamento completamente independentes, chamados de segmentos. Cada segmento con- siste em uma seqüência linear de endereços, de 0 até algum máximo. O comprimento de cada segmento pode ser qualquer um, de 0 até o máximo permitido. Diferentes segmentos podem ter (e normalmente têm) comprimentos diferentes. Além disso, o comprimento dos segmen- tos pode mudar durante a execução. O comprimento de um segmento de pilha pode aumentar quando algo for colocado na pilha e diminuir quando algo for retirado dela. Como cada segmento constitui um espaço de endereçamento separado, diferentes seg- mentos podem aumentar ou diminuir independentemente, sem afetar uns aos outros. Se uma pilha em determinado segmento precisa de mais espaço de endereçamento para crescer, ela pode tê-lo, pois não há mais nada em seu espaço de endereçamento para colidir. É claro que um segmento pode ser preenchido, mas os segmentos normalmente são muito grandes, de modo que essa ocorrência é rara. Para especifi car um endereço nessa memória segmentada, ou bidimensional, o programa precisa fornecer um endereço de duas partes, um número de segmento e um endereço dentro do segmento. A Figura 4-22 ilustra uma memória segmen- tada sendo usada para as tabelas de compilador discutidas anteriormente. Cinco segmentos independentes são mostrados aqui. Salientamos que, em sua forma mais pura, um segmento é uma entidade lógica, da qual o programador está ciente e a usa como tal. Um segmento pode conter uma ou mais funções, um array, uma pilha ou um conjunto de variáveis escalares, mas normalmente ele não contém uma mistura de tipos diferentes. Uma memória segmentada tem outras vantagens, além de simplifi car a manipulação de estruturas de dados que crescem ou diminuem. Se cada função ocupa um segmento separado, com o endereço 0 como seu endereço inicial, a ligação de funções compiladas separadamente é bastante simplifi cada. Depois que todas as funções que constituem um programa tiverem Árvore de análise Pilha de chamadas Espaço correntemente usado pela árvore de análise Livre Espaço de endereçamento virtual Tabela de símbolos A tabela de símbolos colidiu com a tabela do texto do código-fonte Espaço de endereçamento alocado para a árvore de análise Texto do código-fonte Tabela de constantes Figura 4-21 Em um espaço de endereçamento unidimensional com tabelas que crescem, uma tabela pode colidir com outra. CAPÍTULO 4 • GERENCIAMENTO DE MEMÓRIA 385 sido compiladas e ligadas, uma chamada para a função no segmento n usará o endereço de duas partes (n, 0) para endereçar a palavra 0 (o ponto de entrada). Se a função no segmento n for subseqüentemente modifi cada e recompilada, nenhuma outra função precisará ser alterada (pois nenhum endereço inicial foi modifi cado), mesmo que a nova versão seja maior do que a antiga. Com uma memória unidimensional, as funções são concisamente empacotadas uma ao lado da outra, sem nenhum espaço de endereçamento entre elas. Conseqüentemente, alterar o tamanho de uma função pode afetar o endereço inicial de ou- tras funções não relacionadas. Isso, por sua vez, exige modifi car todas as funções que chamam qualquer uma das funções deslocadas por essa alteração para incorporar seus novos endereços iniciais. Se um programa contém centenas de funções, esse processo pode ser dispendioso. A segmentação também facilita o compartilhamento de funções ou dados entre vários processos. Um exemplo comum é o de biblioteca compartilhada. As estações de trabalho mo- dernas que executam avançados sistemas de janelas, freqüentemente têm bibliotecas gráfi cas extremamente grandes compiladas em praticamente todo programa. Em um sistema segmenta- do, a biblioteca gráfi ca pode ser colocada em um segmento e compartilhada por vários proces- sos, eliminando a necessidade de tê-la no espaço de endereçamento de cada processo. Embora também seja possível ter bibliotecas compartilhadas nos sistemas de paginação puros, isso é muito mais complicado. Na verdade, esses sistemas fazem isso simulando a segmentação. Como cada segmento forma uma entidade lógica da qual o programador está ciente, como uma função, um array ou uma pilha, diferentes segmentos podem ter diferentes tipos de proteção. Um segmento de função pode ser especifi cado como apenas de execução, proi- bindo tentativas de leitura ou de armazenamento de dados nele. Um array em ponto fl utuante pode ser especifi cado como de leitura/escrita, mas não execução, e as tentativas de “executá- lo” serão detectadas. Tal proteção é útil na identifi cação de erros de programação. Você deve tentar entender por que a proteção faz sentido em uma memória segmentada, mas não em uma memória paginada unidimensional. Em uma memória segmentada, o usuá- rio está ciente do que há em cada segmento. Normalmente, um segmento não conteria uma função e uma pilha, por exemplo, mas uma ou a outra. Como cada segmento contém apenas um tipo de objeto, o segmento pode ter a proteção apropriada para esse tipo em particular. A paginação e a segmentação são comparadas na Figura 4-23. Tabela de símbolos Texto do código-fonte Constantes Árvore de análise Pilha Segmento 0 Segmento 1 Segmento 2 Segmento 3 Segmento 4 20K 16K 12K 8K 4K 0K 12K 8K 4K 0K 0K 16K 12K 8K 4K 0K 12K 8K 4K 0K Figura 4-22 Uma memória segmentada permite que cada tabela aumente ou diminua inde- pendentemente das outras tabelas. 386 SISTEMAS OPERACIONAIS Consideração Paginação Segmentação O programador precisa estar ciente de que essa técnica está sendo utilizada? Não Sim Quantos espaços de endereços lineares existem? 1 Muitos O espaço de endereçamento total pode ultrapassar o tamanho da memória física? Sim Sim As funções e os dados podem ser distinguidos e protegidos separadamente? Não Sim As tabelas cujo tamanho varia podem ser acomodadas facilmente? Não Sim O compartilhamento de funções entre os usuários é facilitado? Não Sim Por que essa técnica foi inventada? Para se obter um espaço de endereçamento linear sem ter de comprar mais memória física Para permitir que programas e dados sejam divididos em espaços de endereçamento logicamente independentes e para ajudar no compartilhamento e na proteção Figura 4-23 Comparação entre paginação e segmentação. De certo modo, o conteúdo de uma página é acidental. O programador ignora até mes- mo o fato de que a paginação está ocorrendo. Embora fosse possível colocar alguns bits em cada entrada da tabela de páginas para especifi car o acesso permitido, o programador para utilizar esse recurso teria de monitorar onde estariam todos os limites de página emseu espa- ço de endereçamento. Entretanto, a paginação foi inventada para eliminar precisamente esse tipo de gerenciamento mais complexo. Como o usuário de uma memória segmentada tem a ilusão de que todos os segmentos estão o tempo todo na memória principal – isto é, ele pode endereçá-los como se estivessem lá –, ele pode proteger cada segmento separadamente, sem precisar se preocupar com a administração de overlays. 4.6.1 Implementação da segmentação pura A implementação da segmentação difere da paginação de uma maneira fundamental: as páginas têm tamanho fi xo e os segmentos, não. A Figura 4-24(a) mostra um exemplo de me- mória física contendo inicialmente cinco segmentos. Agora, considere o que acontece se o segmento 1 é eliminado e o segmento 7, que é menor, for colocado em seu lugar. Chegamos à confi guração de memória da Figura 4-24(b). Entre o segmento 7 e o segmento 2 existe uma área não utilizada – isto é, uma lacuna. Então, o segmento 4 é substituído pelo segmento 5, como na Figura 4-24(c), e o segmento 3 é substituído pelo segmento 6, como na Figura 4- 24(d). Depois que o sistema tiver executado por algum tempo, a memória será dividida em várias porções, algumas contendo segmentos e outras contendo lacunas. Esse fenômeno, chamado de checkboarding (formação de um tabuleiro de xadrez) ou fragmentação exter- na, desperdiça memória nas lacunas. Isso pode ser tratado com compactação, como se vê na Figura 4-24(e). CAPÍTULO 4 • GERENCIAMENTO DE MEMÓRIA 387 (c)(b)(a) (d) (e) Segmento 0 (4K) Segmento 7 (5K) Segmento 2 (5K) Segmento 5 (4K) (3K) Segmento 3 (8K) Segmento 6 (4K) (3K) Segmento 0 (4K) Segmento 7 (5K) Segmento 2 (5K) Segmento 3 (8K) (3K) Segmento 2 (5K) Segmento 0 (4K) Segmento 1 (8K) Segmento 4 (7K) Segmento 4 (7K) Segmento 3 (8K) Segmento 0 (4K) Segmento 7 (5K) Segmento 2 (5K) (3K) Segmento 5 (4K) (3K) (4K) Segmento 0 (4K) Segmento 7 (5K) Segmento 2 (5K) Segmento 6 (4K) Segmento 5 (4K) (10K) Figura 4-24 (a)-(d) Desenvolvimento da fragmentação externa. (e) Eliminação da fragmen- tação externa pela compactação. 4.6.2 Segmentação com paginação: o Pentium Intel O Pentium suporta até 16K segmentos, cada um com até 232 bytes de espaço de endereça- mento virtual. O Pentium pode ser confi gurado (pelo sistema operacional) para usar apenas segmentação, apenas paginação ou ambos. A maioria dos sistemas operacionais, incluindo o Windows XP e todos os tipos de UNIX, usa o modelo de paginação puro, no qual cada processo tem um único segmento de 232 bytes. Como o Pentium é capaz de fornecer aos pro- cessos um espaço de endereçamento muito maior, e apenas um sistema operacional (OS/2) usava todo esse poder de endereçamento, descreveremos o funcionamento da memória virtual do Pentium em toda sua generalidade. O centro da memória virtual do Pentium consiste em duas tabelas, a LDT (Local Des- criptor Table – tabela de descritores local) e a GDT (Global Descriptor Table – tabela de descritores global). Cada programa tem sua própria LDT, mas há apenas uma GDT, compar- tilhada por todos os programas no computador. A LDT descreve os segmentos locais de cada programa, incluindo seu código, dados, pilha etc., enquanto a GDT descreve os segmentos de sistema, incluindo o sistema operacional em si. Para acessar um segmento, um programa primeiro carrega um seletor para esse segmen- to em um dos seis registradores de segmento do processador. Durante a execução, o registra- dor CS armazena o seletor do segmento de código e o registrador DS armazena o seletor do segmento de dados. Os outros registradores de segmento são menos importantes. Cada seletor é um número de 16 bits, como se vê na Figura 4-25. Um dos bits do seletor informa se o segmento é local ou global (isto é, se ele está na LDT ou na GDT). Outros 13 bits especifi cam o número de entrada da LDT ou da GDT; por- Índice 0 = GDT/1 = LDT Nível de privilégio (0-3) Bits 13 1 2 Figura 4-25 Um seletor do Pentium. Dica do professor Apesar de tanto a segmentação como a paginação serem abordagens para implementação de memória virtual em sistemas operacionais, cada uma delas contém motivações diferentes, e, dessa forma, são implementadas seguindo abordagens distintas. É possível usar ambos os mecanismos em conjunto, de forma que os objetivos tanto da paginação como da memória virtual sejam atendidos no sistema. Inclusive, processadores, como os Intel da família Intel64 e IA-32, dão suporte via hardware para abordagens de uso misto de paginação com segmentação. Nesta Dica do Professor, você poderá conferir as principais diferenças existentes entre segmentação e paginação de memória. Serão apresentadas questões técnicas e práticas do ponto de vista de programadores, assim como princípios que orientaram a criação de cada um desses mecanismos. 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/1d67f10ab5d71f596bee2a51dc9ea157 Exercícios 1) A carga de trabalho de alguns tipos de programa faz com que sua alocação de memória seja imprevisível em tempo de desenvolvimento. Dependendo da entrada repassada para o programa, em uma execução pode ser necessário que a estrutura X tenha uma quantidade de memória alocada maior que a estrutura Y, mas outra entrada pode exigir do mesmo programa exatamente o contrário, ou seja, mais memória para a estrutura Y do que para a estrutura X. Assinale a alternativa que explica corretamente como a segmentação permite que um programa tenha estruturas em memória que possam crescer de forma independente, sem causar interferência umas nas outras: A) A segmentação permite que a memória seja dividida em partes de tamanhos iguais, que podem ser alocadas individualmente. B) A segmentação permite que existam vários espaços de endereçamento de tamanhos diferentes e independentes. C) A segmentação permite que um único espaço de endereçamento seja compartilhado por várias estruturas. D) A segmentação permite a criação de múltiplos espaços de endereçamento, todos com o mesmo tamanho, porém independentes. E) A segmentação evita a ocorrência de fragmentação externa na medida em que os segmentos são carregados na memória. 2) Bibliotecas compartilhadas são muito usadas para permitir a modularização de sistemas operacionais e aplicações. Elas permitem a evolução do software sem a necessidade de uma recompilação completa, por exemplo. Mesmo sistemas operacionais que não têm suporte à segmentação implementam alternativas para permitir o uso do conceito de bibliotecas compartilhadas. Assinale a alternativa que descreve corretamente como o uso de segmentação otimiza o uso de bibliotecas compartilhadas: A) Espaços de endereçamento independentes, cada um com uma base zero, permitem que a biblioteca compartilhada seja carregada apenas uma vez na memória. B) Bibliotecas compartilhadas podem ser carregadas em fragmentos separados, permitindo uma maior distribuição do código na memória principal. C) A memória unidimensional oferecida pelo modelo de segmentação permite que a biblioteca compartilhada tenha endereços fixos sem a necessidade de alteração para uso por outros processos. D) A disponibilidade de mecanismos de proteção no modelo de segmentação permite que a biblioteca compartilhada tenha endereços fixos sem a necessidade de alteração para uso por outros processos. E) O espaço de endereçamento único, com apenas uma base zero, permite que a biblioteca compartilhada seja carregada apenas uma vez na memória, sendo essa mesma instância usada por todos os processos. 3) Paginação e segmentação são abordagens diferentes para a implementação de memória virtual, cada uma com seus objetivos, vantagens e desvantagens. Apesar do mecanismo de paginação ser mais presente nos principais sistemas operacionais contemporâneos, as ideias gerais do mecanismo de segmentação de memória também são aplicadas. Assinale a alternativacorreta sobre as características dos mecanismos de paginação e segmentação: A) Ao contrário da paginação, na segmentação, não é possível definir níveis de proteção distintos para cada segmento. B) Ao contrário da segmentação, a paginação exige que o desenvolvedor projete o sistema ciente de que há um mecanismo de paginação. C) A segmentação não permite que cada segmento cresça de forma independente, sem interferir em outros segmentos. D) A paginação exige que páginas sequenciais sejam carregadas de forma contínua na memória principal. E) Tanto a paginação como a segmentação permitem que o espaço de endereçamento total seja maior que a memória principal disponível. A fragmentação de memória é um problema sério, que pode causar redução de performance do sistema ou impossibilitar o seu uso. Identificar a sua ocorrência nem sempre é uma tarefa simples. 4) Assinale a alternativa que contém a afirmação correta sobre fragmentação de memória: A) Não é possível ocorrer fragmentação de memória com o uso de paginação, apenas com segmentação. B) A fragmentação externa, quando não tratada, tem sintomas similares à falta de memória principal disponível. C) A fragmentação interna é o principal tipo de fragmentação possível com o uso de segmentação. D) A fragmentação não ocorre se há memória principal disponível no sistema. E) A fragmentação interna tem resolução mais simples do que a externa. 5) Apesar de ser um problema sério, a fragmentação de memória tem na compactação da memória uma solução relativamente simples, apesar de computacionalmente cara. Assinale a alternativa correta sobre o uso de compactação para resolver a fragmentação externa de memória. A) A compactação reduz o tamanho de cada segmento, liberando mais espaço livre na memória principal. B) A compactação escolhe o segmento menos usado para ser removido da memória principal. C) A compactação move os segmentos na memória principal para aumentar o espaço livre contínuo. D) A compactação transfere dados entre os segmentos, para aumentar o espaço livre na memória. E) A compactação executa um algoritmo de substituição de segmento quando não há espaço livre contínuo. Na prática Problemas relacionados à fragmentação de memória tendem a ser difíceis de se identificar. Um sistema sofrendo com alto nível de fragmentação terá sintomas similares ao de um computador, no qual não há memória principal disponível. No entanto, o sistema pode indicar que há muita memória livre, induzindo o profissional, que está analisando o problema, ao erro de acreditar que não há nada de errado com a memória. Nesse caso, apesar de haver memória disponível, ela não é contínua, e não poderá ser alocada para um processo caso seja solicitado um espaço maior do que o maior bloco de memória livre contínuo. Na Prática, você verá um caso real de análise de um problema de fragmentação de memória em um servidor de grande porte focado na disponibilização de um serviço de banco de dados. 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/97f09db3-6d8f-4b35-8a90-4c6102489a8f/4550d1c0-d330-4c07-8480-44fc4c97bbaf.jpg Saiba + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Segmentação e paginação combinada com segmentação Nestas seções do livro Princípios Básicos de Arquitetura e Organização de Computadores, você poderá aprender mais detalhes sobre o mecanismo de segmentação, assim como de sua implementação em conjunto ao uso de paginação. Conteúdo interativo disponível na plataforma de ensino! Gerência de memória Este vídeo apresenta três estratégias para alocar um bloco de memória em um sistema baseado em uma abordagem que permita a ocorrência de fragmentação externa, como a segmentação. Cada uma das estratégias discutidas tenta minimizar os efeitos da fragmentação externa de uma forma diferente. 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/Q2yRR1SmdK4
Compartilhar