Baixe o app para aproveitar ainda mais
Prévia do material em texto
Gerenciamento de memória Apresentação Em qualquer tarefa realizada no computador, diversos programas estão em execução apoiando no desenvolvimento, alguns de modo perceptível, como um editor de texto, outros de modo mais discreto, como o corretor ortográfico e o sistema operacional. Os programas, para serem executados, precisam estar armazenados na memória do computador. Contudo, a tecnologia atual não alcançou o desenvolvimento de uma memória com armazenamento infinito, rápida o suficiente e com baixo custo. Para contornar essa limitação, os computadores são compostos por um conjunto de memórias, cada uma com um propósito específico. Nesta Unidade de Aprendizagem, você vai aprender como funciona o gerenciamento de memória em um computador, observando as diferentes categorias de memórias usadas, vai verificar como os programas são endereçados e aprender as principais características de cada estratégia. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Definir a hierarquia de memória de um computador.• Descrever o espaço de endereçamento e de troca de memória.• Identificar os modos de gerenciamento de memória e suas características.• Desafio Os programas de usuário utilizados para diferentes tarefas ficam armazenados na memória do computador. Diferentemente do que a maioria das pessoas pensa, o computador não tem uma única memória, e sim uma combinação de diferentes tipos de memórias. Isso se dá pelas características de cada uma quanto a preço, volatilidade e velocidade. Você trabalha em uma empresa de hospedagem de sites, servidores e serviços. A empresa oferece diversos planos mensais, que variam conforme a capacidade de processamento, transferência de dados, quantidade de memória RAM e espaço de armazenamento. Um cliente da empresa entrou em contato reclamando da velocidade em que os dados estavam sendo armazenados no servidor contratado. 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/f3d289e3-ae7b-4b3f-83dc-ad7552d4b388/61b9e3d0-9f6a-46c5-8ff7-cfd5824d568c.jpg A partir da análise do gráfico, responda: a) O que pode estar causando a lentidão na transmissão de dados relatada pelo cliente? b) Qual solução pode ser empregada nesse caso? Infográfico Na memória do computador, os processos são alocados e desalocados constantemente, muitos destes com diferentes tamanhos. Nesse processo de alocação, alguns espaços vazios podem surgir entre as regiões de memória alocadas, o que pode exigir que eles sejam gerenciados. Confira, no Infográfico a seguir, o processo de gerenciamento de espaços vazios com listas encadeadas e alguns dos principais algoritmos. 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/acc36793-53fa-457d-a99e-64c8b8d54467/dfabe43f-2c84-471c-8399-232993b928b2.jpg Conteúdo do livro Gerenciar memória em sistemas operacionais é importante porque a memória é um recurso limitado e valioso em um computador. Sem gerenciamento adequado da memória, os processos podem consumir mais memória do que o necessário, levando à exaustão de recursos e falhas do sistema. Além disso, o gerenciamento de memória é crucial para garantir a proteção de memória e a segurança do sistema. O gerenciamento de memória também é importante para garantir o desempenho do sistema, pois o tempo de acesso à memória é significativamente mais rápido do que o tempo de acesso a dispositivos de armazenamento, como discos rígidos. Dessa forma, o gerenciamento de memória é fundamental para garantir a eficiência, a segurança e a estabilidade de um sistema operacional. No capítulo Gerenciamento de memória, base teórica desta Unidade de Aprendizagem, você poderá compreender como a hierarquia de memória é organizada em camadas em um computador, além de entender o espaço de endereçamento e troca de memória e conhecer os principais modos de gerenciar memória. Boa leitura. SISTEMAS OPERACIONAIS OBJETIVOS DE APRENDIZAGEM > Definir a hierarquia de memória de um computador. > Descrever o espaço de endereçamento e de troca de memória. > Identificar os modos de gerenciamento de memória e suas características. Introdução Sistemas operacionais são a base fundamental de qualquer computador moderno. Eles são responsáveis por gerenciar todos os recursos do sistema, como a me- mória, os processadores e os dispositivos de entrada/saída, e por garantir que as aplicações sejam executadas de forma eficiente e segura. O gerenciamento de memória é uma das principais funções dos sistemas operacionais e é crítico para garantir o desempenho adequado de um sistema. O objetivo do gerenciamento de memória é garantir que o sistema possa alocar a quantidade necessária de memória para cada processo em execução e, ao mesmo tempo, minimizar o desperdício de recursos. Um gerenciamento inadequado de memória pode levar a falhas no sistema, problemas de desempenho e outros problemas de estabilidade. Por isso, é crucial entender as técnicas usadas pelos sistemas operacionais para gerenciar a memória de forma eficiente. Neste capítulo, você vai refletir sobre a hierarquia de memória de um compu- tador e suas diferentes características. Também poderá compreender o espaço de endereçamento e de troca de memória, conceitos muito importantes para entender como funciona a alocação de recursos. Além disso, vai identificar os diferentes modos de gerenciar memória, conhecendo suas caraterísticas e vantagens. Gerenciamento de memória Nicolli Souza Rios Alves Memória de um computador Em um computador, a memória corresponde aos componentes eletrônicos usados para armazenar dados e instruções que o processador do computa- dor pode acessar rapidamente (TANENBAUM; BOS, 2016). A memória em um computador normalmente é dividida em duas categorias principais: memória primária, também conhecida como “memória principal” ou “memória de acesso aleatório” (RAM, do inglês random access memory), e memória secundária (como os discos rígidos). A memória primária é a memória principal em um sistema de computador, sendo usada para armazenar dados e instruções que o processador precisa acessar rapidamente (TANENBAUM; BOS, 2016). Esse tipo de memória é volátil, o que significa que seu conteúdo é perdido quando o computador é desligado. Usada para armazenar dados temporariamente enquanto o computador está em execução, a memória principal é essencial para o bom funcionamento do sistema operacional e do software do computador. A memória secundária, por sua vez, é usada para armazenamento de longo prazo de dados e programas (TANENBAUM; BOS, 2016). Esse tipo de memória é não volátil, ou seja, seu conteúdo não é perdido quando o computador é desligado. A memória secundária é normalmente usada para armazenar o sistema operacional, aplicativos e dados do usuário. Ela fornece uma grande capacidade de armazenamento a um custo menor por byte em comparação com a memória principal, mas o acesso a ela é muito mais lento. A hierarquia de memória de um computador é uma organização em ca- madas de diferentes tipos de memória, cada um com diferentes níveis de capacidade, velocidade e custo. Essa hierarquia é projetada para fornecer uma combinação ideal de custo e desempenho, maximizando a eficiência e o desempenho do sistema de computador (SILBERCHATZ; GALVIN; GAGNE, 2015). A camada mais alta da hierarquia de memória é composta pela memória cache, que é uma memória de acesso rápido e pequena que armazena os dados mais frequentemente usados pelo processador (SILBERCHATZ; GALVIN; GAGNE, 2015). A memória cache é muito mais rápida do que a memória RAM, mas é muito mais cara e tem uma capacidade muito menor. A camada seguinte da hierarquia de memória é a memória RAM, que é uma memória volátil e de acesso aleatório usada para armazenar temporariamentedados e programas enquanto o computador está em execução (SILBERCHATZ; GALVIN; GAGNE, 2015). Já a camada mais baixa da hierarquia de memória é a memória de armazenamento secundário, que inclui dispositivos como discos rígidos e unidades flash. Esses dispositivos oferecem uma capacidade muito Gerenciamento de memória2 maior do que a memória RAM, mas são muito mais lentos em termos de acesso e transferência de dados. Existem vários tipos de memória usados em um sistema de computador, cada um com suas características e funções exclusivas. Além disso, várias opções são possíveis, como mostra a Figura 1. A seguir, vamos descrever as características de alguns dos tipos mais comuns de memória (TANENBAUM; BOS, 2016). � Memória de acesso aleatório (RAM): essa é a memória principal em um sistema de computador, sendo usada para armazenar dados e instruções que o processador precisa acessar rapidamente. Como já descrevemos, a RAM é uma memória volátil (isto é, seu conteúdo é perdido quando o computador é desligado) que geralmente é usada para armazenar dados temporariamente enquanto o computador está em execução, conforme pode ser observado no exemplo de uso mos- trado na Figura 1a. � Memória somente leitura (ROM): essa é uma memória não volátil usada para armazenar firmware e outros softwares de baixo nível necessários para a inicialização do computador. A ROM é normalmente programada na fábrica e não pode ser modificada pelo usuário, como mostra a Figura 1b. � Memória cache: essa é uma pequena memória de alta velocidade usada para armazenar dados e instruções acessados com frequência. A memó- ria cache é mais rápida que a RAM e ajuda a melhorar o desempenho do computador, reduzindo o número de vezes que o processador precisa acessar a memória principal mais lenta. � Memória virtual: essa é uma técnica usada pelo sistema operacional para aumentar a quantidade efetiva de memória disponível transferindo temporariamente dados da RAM para o disco rígido. Isso permite que o computador execute mais aplicativos do que seria possível, mas também poderá diminuir o desempenho se o disco rígido estiver lento, como mostra a Figura 1c. � Armazenamento secundário: isso inclui dispositivos como discos rí- gidos, unidades de estado sólido e unidades ópticas, que são usadas para armazenar dados e programas para uso a longo prazo. O armaze- namento secundário é uma memória não volátil, ou seja, seu conteúdo não é perdido quando o computador é desligado. Gerenciamento de memória 3 Figura 1. Três exemplos simples de organização da memória com um sistema operacional e um processo de usuário. Fonte: Adaptada de Tanenbaum e Bos (2016). Programa do usuário Programa do usuário Programa do usuário Drivers de dispositivo em ROM Sistema operacional em ROM Sistema operacional em RAM Sistema operacional em RAM 0 0xFFF ... (a) (b) (c) 0 0 Nesta seção, vimos que os diferentes tipos de memória em um sistema de computador incluem a RAM, a ROM, a memória cache, a memória virtual e o armazenamento secundário. Cada tipo de memória tem suas próprias características e funções únicas, e todas trabalham juntas para permitir que o computador execute suas tarefas com eficiência. Agora que aprendemos sobre os diferentes tipos de memória, veremos a seguir como funciona o espaço de endereçamento e troca de memória. Espaço de endereçamento e troca de memória O espaço de endereçamento de memória é o conjunto de endereços de me- mória que podem ser acessados por um processador ou um programa em um sistema de computador (SILBERCHATZ; GALVIN; GAGNE, 2015). Ele é dividido em várias áreas, cada uma com um propósito específico. O espaço de endereçamento é organizado em um conjunto de endereços numéricos que representam a posição de cada byte de memória no sistema (SILBERCHATZ; GALVIN; GAGNE, 2015). Cada endereço corresponde a um byte específico de memória, e o processador usa esses endereços para ler e gravar dados na memória. Os programas são carregados na memória a partir de dispositivos de ar- mazenamento secundário, como um disco rígido, e são atribuídos a um bloco de endereços de memória para uso (SILBERCHATZ; GALVIN; GAGNE, 2015). O Gerenciamento de memória4 sistema operacional é responsável por gerenciar o espaço de endereçamento da memória, alocando e desalocando blocos de memória para diferentes programas, conforme necessário. O espaço de endereçamento também é utilizado para a comunicação entre diferentes partes do sistema. Por exemplo, um dispositivo de entrada/ saída pode usar um bloco de endereços de memória para enviar dados para o processador, e o processador pode usar outro bloco de endereços para enviar dados para um dispositivo de saída (SILBERCHATZ; GALVIN; GAGNE, 2015). Em sistemas modernos, o espaço de endereçamento é geralmente de 32 ou 64 bits, o que significa que o processador pode acessar até 232 ou 264 bytes de memória, respectivamente (SILBERCHATZ; GALVIN; GAGNE, 2015). Isso fornece uma quantidade suficiente de espaço de endereçamento para a maioria das aplicações e dos sistemas operacionais. O endereçamento de memória é usado para acessar diferentes áreas de memória por meio de endereços numéricos únicos que correspondem a posições específicas na memória do sistema (TANENBAUM; BOS, 2016). Quando um programa precisa acessar uma determinada área de memória, ele usa o endereço correspondente para ler ou gravar dados. Os registradores base e limite são usados em sistemas operacionais para implementar a proteção de memória (TANENBAUM; BOS, 2016). Cada processo tem seu próprio espaço de endereço de memória, que é protegido para garantir que um processo não acesse a memória de outro processo. O registrador base contém o endereço base do espaço de endereço de memória do processo, ou seja, é o endereço inicial da memória que o processo pode acessar (TANENBAUM; BOS, 2016). O registrador limite, por sua vez, contém o tamanho do espaço de endereço de memória do processo, isto é, o endereço final que o processo pode acessar. Combinados, o registrador base e o registrador limite definem o intervalo de endereços de memória permitidos para o processo. Quando um processo tenta acessar a memória, o sistema operacional verifica se o endereço de memória que o processo está tentando acessar está dentro do intervalo definido pelos registradores base e limite (TANENBAUM; BOS, 2016). Se o endereço estiver fora do intervalo, ocorre uma violação de proteção de memória, e o processo é encerrado pelo sistema operacional. Gerenciamento de memória 5 Suponha que um processo tenha um registrador base com o valor 1000 e um registrador limite com o valor 500. Isso significa que o processo pode acessar a memória do endereço 1000 ao endereço 1499. Se o processo tentar acessar um endereço de memória menor que 1000 ou maior que 1499, ocorrerá uma violação de proteção de memória. Swapping A troca de processos, também conhecida como swapping, é um processo utilizado pelo sistema operacional para gerenciar a memória disponível em um computador (MACHADO; MAIA, 2007). O objetivo da troca de memória é permitir que os programas usem mais memória do que a capacidade física da RAM disponível, utilizando uma parte do espaço disponível no disco rígido para simular a presença de mais memória RAM. O processo de troca de memória ocorre da seguinte forma: quando um programa solicita mais memória do que a RAM disponível, o sistema opera- cional utiliza a memória virtual para alocar uma parte do espaço em disco rígido, conhecido como “arquivo de paginação” ou “swap file”, para servir como extensão da memória RAM (TANENBAUM; BOS, 2016). O sistema operacional então divide a memória RAM disponível em blocos chamados “páginas”, que têm o mesmo tamanho que as páginas no arquivo de paginação. Quando um programa precisa acessar uma página de memória que está armazenada no arquivo de paginação, ocorre uma falha de página. Nesse mo- mento, o sistema operacionaltransfere a página correspondente do arquivo de paginação para a memória RAM, atualizando a tabela de páginas para refletir a nova localização da página de memória (SILBERCHATZ; GALVIN; GAGNE, 2015). Se não houver espaço disponível na RAM para acomodar a nova página, o sistema operacional escolhe uma página que não está sendo utilizada no momento e a transfere para o arquivo de paginação para liberar espaço na RAM. O processo de troca de memória envolve a transferência de dados entre a RAM e o disco rígido, que é significativamente mais lento do que a operação de acesso à RAM. Portanto, o uso excessivo de troca de memória pode im- pactar negativamente o desempenho do sistema, causando lentidão e outros problemas de desempenho (SILBERCHATZ; GALVIN; GAGNE, 2015). Por isso, é importante que o sistema operacional seja configurado adequadamente para balancear o uso da memória RAM e o uso do arquivo de paginação de modo a maximizar o desempenho do sistema. Gerenciamento de memória6 Há dois métodos de gerenciamento de memória bastante conhecidos: mapa de bits e lista encadeada. A principal diferença entre eles é como a informação é armazenada e gerenciada (TANENBAUM; WOODHULL, 2008). No método de mapa de bits, a memória disponível é dividida em blocos de tamanho fixo, e cada bloco é representado por um bit no mapa de bits, como mostra a Figura 2. Se um bit é 1, isso significa que o bloco correspondente está sendo usado por algum processo, ao passo que um bit 0 indica que o bloco está livre. Esse método é rápido e eficiente para encontrar blocos livres de memória, mas pode ser ineficiente em termos de uso de memória, uma vez que cada bloco é do mesmo tamanho, o que pode resultar em fragmentação de memória (TANENBAUM; WOODHULL, 2008). Figura 2. (a) Uma parte da memória com cinco processos e três lacunas. Os tracinhos mostram as unidades de alocação de memória. As regiões sombreadas (0 no mapa de bits) estão livres. (b) O mapa de bits correspondente. (c) As mesmas informações mostradas como uma lista. Fonte: Adaptada de Tanenbaum e Bos (2016). A B C Lacuna começa em 18 Comprimento 2 Processo Já no método de lista encadeada, cada bloco de memória livre é represen- tado por um nó em uma lista encadeada, como mostra a Figura 2c. Cada nó contém informações sobre o tamanho do bloco e a localização na memória. Quando um processo precisa de memória, o sistema operacional pesquisa na lista encadeada em busca de um bloco livre com tamanho suficiente para alocar ao processo (TANENBAUM; WOODHULL, 2008). Quando um bloco é liberado por um processo, ele é adicionado à lista encadeada novamente. Esse método é eficiente em termos de uso de memória, pois os blocos de memória podem ser de tamanhos diferentes, o que ajuda a evitar a frag- mentação de memória. No entanto, a pesquisa por um bloco livre pode ser mais lenta do que no método de mapa de bits, já que é necessário percorrer toda a lista encadeada. Gerenciamento de memória 7 Portanto, o método de mapa de bits é eficiente para encontrar blocos livres de memória, mas pode levar à fragmentação de memória, ao passo que o método de lista encadeada é mais eficiente em termos de uso de me- mória, mas pode ter uma pesquisa mais lenta por um bloco livre. A escolha do método depende das necessidades específicas do sistema operacional e dos aplicativos em execução (TANENBAUM; WOODHULL, 2008). Memória virtual A memória virtual é uma técnica usada pelos sistemas operacionais para permitir que um computador use mais memória do que a que está fisica- mente disponível no sistema (SILBERCHATZ; GALVIN; GAGNE, 2015). Ela funciona transferindo dados temporariamente da RAM do computador para o disco rígido, liberando espaço na RAM para outros programas ou dados. Isso é feito automaticamente pelo sistema operacional, sem que o usuário precise fazer nada (SILBERCHATZ; GALVIN; GAGNE, 2015). Quando o programa precisa acessar os dados que foram movidos para o arquivo de paginação, eles são trazidos de volta para a RAM, e os dados que foram usados menos recentemente são movidos para o arquivo de pagina- ção. Esse processo é conhecido como “paginação”, ou “troca” (SILBERCHATZ; GALVIN; GAGNE, 2015). A memória virtual permite que o computador use efetivamente mais me- mória do que fisicamente disponível, o que pode ser especialmente útil para executar programas grandes ou vários programas simultaneamente (SILBER- CHATZ; GALVIN; GAGNE, 2015). No entanto, acessar dados do disco rígido é muito mais lento do que acessar dados da RAM; portanto, o uso da memória virtual também pode causar uma diminuição no desempenho geral do sistema. A memória virtual é usada pelo sistema operacional para gerenciar o espaço de endereçamento e a troca de memória entre a RAM e o disco rígido. Como descrevemos anteriormente, quando um programa solicita mais memória do que a RAM disponível, o sistema operacional usa a memória virtual para alocar uma parte do espaço em disco rígido para servir como extensão da memória RAM (TANENBAUM; BOS, 2016). Então, o sistema operacional divide a memória RAM disponível em páginas, cujo tamanho é igual ao das páginas no arquivo de paginação. As páginas são mantidas em uma tabela de páginas que mapeia o endereço lógico do processo para o endereço físico da memória. Se um processo tenta acessar uma página de memória armazenada no arquivo de paginação, acontece uma falha de página, e, então, o sistema operacional lê a página correspondente do arquivo de paginação de volta Gerenciamento de memória8 para a memória RAM e atualiza a tabela de páginas para refletir a nova localização da página de memória. Esse processo é conhecido como “troca de páginas” (TANENBAUM; BOS, 2016). A memória virtual também permite que os programas usem mais memória do que a capacidade física da RAM, já que o sistema operacional pode transferir dados entre a RAM e o arquivo de paginação, conforme necessário. O uso da memória virtual para gerenciamento de memória pode ter um impacto no desempenho do sistema, já que a troca de páginas envolve a transferência de dados entre a RAM e o disco rígido, que é significativamente mais lento (TANENBAUM; BOS, 2016). No entanto, a memória virtual permite que o sistema operacional aloque mais memória para processos do que seria possível apenas com a RAM física, o que pode ser útil para executar aplicativos que exigem grandes quantidades de memória. Existem diferentes tipos de endereçamento de memória que podem ser usados para acessar diferentes áreas de memória, incluindo os apresentados a seguir (TANENBAUM; BOS, 2016). � Endereçamento absoluto: envolve o uso de um endereço de memória específico para acessar uma localização de memória específica. Esse tipo de endereçamento é geralmente usado para acessar áreas fixas de memória, como as áreas de sistema ou a ROM. � Endereçamento relativo: envolve o uso de um endereço de memória que é relativo a uma posição atual na memória. Ele é comumente usado para acessar áreas de memória de dados que mudam de tamanho ou posição ao longo do tempo. � Endereçamento indireto: envolve o uso de um endereço que aponta para outro endereço de memória. Ele é comumente usado em programação para criar ponteiros, que são variáveis que armazenam endereços de memória. Além disso, o endereçamento de memória também pode ser usado para acessar diferentes áreas de memória física, como a memória principal, a memória cache ou a memória virtual. O sistema operacional é responsável por gerenciar o endereçamento de memória, atribuindo áreas de memória para diferentes processos e garantindo que eles não interfiram uns nos outros (TANENBAUM; BOS, 2016). Agora que pudemos compreender como o espaço de endereçamento da memória é usado para acessar diferentes áreas da memória, abordaremos a seguir os diferentes modos de gerenciamento de memória. Gerenciamento de memória 9 Modos de gerenciamento de memória Gerenciamento de memória é o processo de gerenciara alocação, o uso e a liberação de memória em um sistema computacional (SILBERCHATZ; GALVIN; GAGNE, 2015). O gerenciamento de memória é uma parte essencial de um sistema operacional, responsável por garantir que todos os programas tenham acesso à quantidade de memória necessária para executar adequadamente, sem que ocorram conflitos ou desperdício de recursos. O gerenciamento de memória inclui várias tarefas, como a alocação e a desalocação de memória para programas e processos em execução, o controle do acesso à memória por diferentes programas e processos, o gerenciamento da memória virtual e a troca de memória (SILBERCHATZ; GALVIN; GAGNE, 2015). Para garantir que a memória esteja disponível para os programas que preci- sam dela, o gerenciamento de memória também envolve o monitoramento e a identificação de desperdícios de memória, isto é, onde os programas alocam mais memória do que necessitam, mas não a liberam quando não a estão utilizando. O gerenciamento de memória é uma tarefa crítica para o desempenho e a estabilidade do sistema, pois o acesso à memória é uma das operações mais frequentes realizadas pelos programas em execução (TANENBAUM; BOS, 2016). Um gerenciamento ineficiente da memória pode causar lentidão, travamentos e outros problemas no sistema. Por isso, é importante que os sistemas operacionais implementem estratégias eficazes de gerenciamento de memória para garantir o melhor desempenho e a estabilidade do sistema. Existem vários modos de gerenciamento de memória que podem ser utili- zados em um sistema operacional, dependendo da arquitetura do hardware e dos requisitos de desempenho do sistema. A seguir, apresentamos alguns dos modos mais comuns de gerenciamento de memória (TANENBAUM; BOS, 2016). � Gerenciamento de memória em modo de usuário: nesse modo, a alo- cação e a desalocação de memória são controladas pelos próprios programas em execução, sem a intervenção do sistema operacio- nal. O sistema operacional fornece uma interface de programação de aplicação (API, do inglês application programming interface) que permite que os programas acessem a memória disponível. Esse modo de gerenciamento de memória é comum em sistemas embarcados e em sistemas operacionais de tempo real. � Gerenciamento de memória em modo kernel: nesse modo, o sistema operacional é responsável pela alocação e desalocação de memória Gerenciamento de memória10 para os programas em execução. Isso garante que a memória seja gerenciada de forma centralizada e que todos os programas tenham acesso equitativo à memória disponível. Esse modo é comum em sis- temas operacionais de desktop e servidor. � Gerenciamento de memória por segmentação: nesse modo, a memória é dividida em segmentos de tamanhos diferentes, cada um com um propósito específico. Por exemplo, um segmento pode ser alocado para a pilha de execução do programa, enquanto outro segmento é alocado para a área de dados. Esse modo de gerenciamento de memória é comum em sistemas operacionais mais antigos. � Gerenciamento de memória por paginação: nesse modo, a memória é dividida em blocos de tamanho fixo chamados “páginas”. Cada página é mapeada para um endereço de memória virtual, que, por sua vez, pode ser mapeado para um endereço físico correspondente na RAM ou no disco rígido. Esse modo de gerenciamento de memória é comum em sistemas operacionais modernos. Cada modo de gerenciamento de memória tem suas vantagens e des- vantagens, e o modo escolhido dependerá da arquitetura do hardware, dos requisitos de desempenho e da finalidade do sistema operacional. Existem várias estratégias de alocação de memória que podem ser usadas pelos sistemas operacionais para gerenciar a memória disponível. Veja a seguir algumas das estratégias mais comuns (TANENBAUM; BOS, 2016). � Alocação contígua: nessa estratégia, a memória é alocada de forma contígua, ou seja, em blocos consecutivos de endereços de memória. Isso pode ser útil em sistemas com pouca memória e pode melhorar o desempenho ao minimizar a fragmentação da memória. No entanto, a alocação contígua pode levar a um problema de fragmentação externa, em que a memória livre é dividida em pequenos blocos que não são grandes o suficiente para atender às solicitações de alocação de memória maiores. � Alocação de lista vinculada: nessa estratégia, a memória é alocada em blocos independentes que são vinculados em uma lista. Quando um programa solicita memória, um bloco livre é localizado na lista e a memória é alocada a partir desse bloco. Esse método pode ser mais flexível do que a alocação contígua e pode lidar com fragmentação externa, mas pode ter uma sobrecarga maior de gerenciamento de lista. � Alocação de pilha: nessa estratégia, a memória é alocada de forma semelhante a uma pilha, em que as alocações mais recentes são empi- Gerenciamento de memória 11 lhadas no topo da pilha. A alocação de memória é rápida, pois a pilha é sempre alocada de forma contígua. No entanto, a alocação de pilha pode levar a um problema de fragmentação interna, em que a memória é alocada em blocos maiores do que o necessário, resultando em uma parte não utilizada do bloco. � Alocação de heap: nessa estratégia, a memória é alocada dinamica- mente a partir de um pool de memória livre chamado “heap”. A alocação de heap é mais flexível do que a alocação de pilha, pois os blocos de memória podem ser alocados de tamanhos variáveis. No entanto, a alocação de heap pode ser mais lenta do que a alocação de pilha, pois pode haver fragmentação interna e externa. Cada estratégia de alocação de memória tem suas vantagens e desvan- tagens, e a estratégia escolhida dependerá dos requisitos de desempenho e do uso do sistema operacional. Atualmente, existem várias técnicas de alocação de memória. A seguir, apresentamos algumas das principais (OLIVEIRA; CARISSIMI; TOSCANI, 2001; MACHADO; MAIA, 2007). � First fit (primeiro ajuste): nessa técnica, o sistema operacional aloca a primeira seção de memória livre que pode acomodar a solicitação de memória. Essa técnica é rápida e simples, mas pode levar a um alto nível de fragmentação de memória. � Best fit (melhor ajuste): nessa técnica, o sistema operacional aloca o menor bloco de memória livre que pode acomodar a solicitação de memória. Essa técnica pode minimizar a fragmentação de memória, mas pode levar a um maior número de fragmentos pequenos. � Worst fit (pior ajuste): nessa técnica, o sistema operacional aloca o maior bloco de memória livre que pode acomodar a solicitação de memória. Essa técnica pode acarretar uma maior fragmentação de memória e desperdício de espaço livre. � Next fit (próximo ajuste): nessa técnica, o sistema operacional aloca a primeira seção de memória livre que pode acomodar a solicitação de memória, mas começa a procurar no próximo bloco de memória livre após o último bloco alocado. Essa técnica pode minimizar a fragmen- tação de memória e é mais eficiente do que o primeiro ajuste. � Buddy system (sistema de amigos): nessa técnica, a memória é alocada em blocos que são potências de 2. Quando um bloco é alocado, ele é dividido em dois blocos menores, que são denominados “amigos”. Se Gerenciamento de memória12 um amigo não é usado, ele pode ser combinado com seu amigo cor- respondente para formar um bloco maior. Essa técnica é eficiente em termos de espaço, mas pode levar a uma sobrecarga de gerenciamento. O gerenciamento de memória é um aspecto fundamental dos sistemas operacionais modernos e é crucial para a eficiência e desempenho geral do sistema. Neste capítulo, exploramos a hierarquia de memória de um compu- tador, desde a memória cache mais rápida até a memória secundária mais lenta. Também aprendemos sobre o espaço de endereçamento e a troca de memória, que são recursos importantes que permitem que os programas acessem mais memória do que a que realmente está disponível no hardware físico. Compreender os conceitos e técnicas de gerenciamento dememória é essencial para desenvolvedores de software e administradores de siste- mas operacionais para garantir que os sistemas operacionais e aplicativos executem de maneira eficiente e eficaz. À medida que a tecnologia evolui e a demanda por processamento de dados aumenta, a gestão eficaz da memória continua a ser um elemento chave para o desempenho e a estabilidade de um sistema operacional. Referências MACHADO, F. B.; MAIA, L. P. Arquiteturas de sistemas operacionais. 4. ed. Rio de Janeiro: LTC, 2007. OLIVEIRA, R. S. D.; CARISSIMI, A. D. S.; TOSCANI, S. S. Sistemas operacionais. Revista de informática teórica e aplicada, v. 8, n. 3, dez. 2001. Disponível em: http://www. romulosilvadeoliveira.eng.br/artigos/Romulo-Carissimi-Simao-Rita2001.pdf. Acesso em: 10 jun. 2023. 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. TANENBAUM, A. S.; WOODHULL, A. S. Sistemas operacionais: projeto e implementação. 3. ed. Porto Alegre: Bookman, 2008. Leituras recomendadas AWAIS, M. A. Memory management: challenges and techniques for traditional memory allocation algorithms in relation with today's real time needs. Advances in Computer Science: an International Journal, v. 5, n. 2, 2016. Disponível em: http://www.acsij.org/ acsij/article/view/459. Acesso em: 10 jun. 2023. MAZIERO, C. Alocação de memória. Curitiba: UFPR, 2021. Disponível em: https://wiki.inf. ufpr.br/maziero/doku.php?id=prog2:alocacao_de_memoria. Acesso em: 10 jun. 2023. Gerenciamento de memória 13 NAG, B.; DEWITT, D. J. Memory allocation strategies for complex decision support queries. In Proceedings of the seventh international conference on Information and knowledge management. In: International Conference on Information and Knowledge Management, 17., 1998. Proceedings […]. Maryland, 1998. Disponível em: https://dl.acm. org/doi/10.1145/288627.288647. Acesso em: 10 jun. 2023. 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. Gerenciamento de memória14 Dica do professor Um fator importante para todo sistema operacional é o gerenciamento e o compartilhamento dos recursos. Isso não é diferente quanto ao uso da memória principal do computador, que deve ser distribuída entre o sistema operacional e os programas de usuário para garantir o correto funcionamento de todas as partes. Mesmo que o objetivo possa ser simples, o sistema operacional, por meio do gerenciador de memória, precisa lidar com diferentes fatores que aumentam a complexidade do gerenciamento da memória, como, por exemplo, a implementação de multiprogramação. Confira, na Dica do Professor, os diferentes modos ou categorias de gerenciamento de memória. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. O gerenciamento de memória em um sistema operacional é essencial para garantir a eficiência dos programas que são executados no computador. Existem diferentes tipos de memória que auxiliam na execução dos programas. A seguir, neste objeto de aprendizagem, veja as características desses tipos de memória e as principais diferenças entre eles. 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/b9cb1a507cc7d6ec2185af0a4d712c3c https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/54ec26472acd5a78505db6db81c3476b Exercícios 1) A multiprogramação requer que dois ou mais programas estejam carregados na memória para a execução. Cada programa apresenta suas próprias variáveis referenciadas, os próprios endereços. Um computador tem dois programas, A e B: o programa A tem uma variável F no endereço 28, e o programa B uma variável G no endereço. Se o programa A tiver o espaço de memória iniciado na posição 0 e o programa B na posição 200, quais serão as posições de endereço das variáveis F e G? A) A variável F ficará no endereço -28, e a variável G, no endereço 172. B) A variável F ficará no endereço 0, e a variável G, no endereço 200. C) A variável F ficará no endereço 28, e a variável G, no endereço 228. D) A variável F ficará no endereço 200, e a variável G, no endereço 0. E) A variável G ficará no endereço 28, e a variável F, no endereço 228. 2) A respeito do carregamento de processos na memória física do computador, existem dois métodos principais: a troca de processos e a memória virtual. Quanto ao primeiro método, a troca de processos, também conhecido como swapping, pode- se dizer: A) Impossibilita a criação de espaços adicionais de memória ao processo. B) Pode gerar espaços vazios entre os processos na memória. C) Carrega os processos parcialmente. D) Impede a alocação dos processos de modo contíguo. E) Quando um processo cresce, os vizinhos são transferidos para outras áreas. Quando a memória é atribuída dinamicamente aos processos, o sistema operacional precisa controlar quais espaços estão ocupados e quais estão livres, para distribuí-los conforme a 3) necessidade dos processos. Os principais métodos de gerenciamento são o mapa de bits e as listas encadeadas. Sobre esses métodos de controle, pode-se afirmar: A) O gerenciamento de memória com mapa de bits divide-a em unidades com tamanhos variados; se a unidade estiver ocupada, representa-se o bit com 1, se disponível, com 0. B) O gerenciamento de memória com listas encadeadas divide-a em segmentos de tamanho igual, que podem ser ocupados ou estar disponíveis para uso. C) Um computador com memória física de 1 megabyte usa o método de mapa de bits com unidades de tamanho de 4 kilobytes; logo, são necessários 512 bits para representar o mapa. D) Um computador com memória física de 1 megabyte usa o método de mapa de bits com unidades de tamanho de 512 bytes; logo, serão necessários 2.048 bits para representar o mapa. E) O gerenciamento de memória com listas encadeadas não permite que os segmentos de memória disponíveis e adjacentes sejam unidos formando um segmento maior. 4) No gerenciamento de memória com listas encadeadas, existem diferentes algoritmos para seleção do segmento para alocação dos processos. Sobre esses algoritmos, é correto afirmar: A) O algoritmo next fit sempre aloca o processo no segundo seguinte encontrado. B) O algoritmo best fit aloca o processo no melhor segmento possível, ou seja, o segmento de maior espaço. C) O algoritmo worst fit aloca o processo no menor segmento disponível. D) O algoritmo best fit aloca o processo no segmento em que sobre o menor espaço possível. E) O algoritmo next fit aloca o processo no segmento ao lado do segmento atual. 5) Na implementação do espaço de endereçamento de processos, algumas abordagens utilizam dois registradores especiais: o registrador-base e o registrador-limite. Quanto a esses registradores, pode-se afirmar: A) O registrador-base define o início do espaço de endereçamento. B) O registrador-limite define o tamanho do espaço de endereçamento em bytes. C) O registrado-base define o fim do espaço de endereçamento. D) O registrador-limite define o início do espaço de endereçamento. E) Dois processos podem conter o mesmo registrador-base, mas não o limite. Na prática O processo de gerenciamento de memória é responsável por alocar as regiões de memória aos seus respectivos processos, permitindo a execução dos processos e o carregamento dos dados necessários. Quando o sistema oferece suporte à multiprogramação, a tarefa se torna mais complexa, poisé necessário gerenciar o compartilhamento da memória por todos os processos, controlar o acesso ao espaço reservado para cada um e garantir que um processo não corrompa a memória do outro. Confira, Na Prática, como Lucas e sua equipe atuaram no gerenciamanento de memória em sistemas embarcados. 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/fbbf8658-5f47-407d-84d6-0d3bd444f85c/dd42b625-01d9-4a59-aecb-262fa809aa59.jpg Saiba + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Introdução ao gerenciamento de memória Nesta videoaula da Univesp TV, você pode rever os conceitos relacionados ao gerenciamento de memória. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Como funcionam as diferentes memórias quando um computador está em uso Compreenda o funcionamento dos diferentes tipos de memória presentes em computador e o propósito de cada um. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Gerência de memória Conheça, de forma ilustrativa, o processo de gerência de memória que o sistema operacional realiza. 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/Q8ZqjEafmNc https://www.tecmundo.com.br/armazenamento/9415-como-funcionam-as-diferentes-memorias-quando-o-computador-esta-em-uso.htm https://sites.google.com/site/proffernandosiqueiraso/aulas/9-gerencia-de-memoria
Compartilhar