Cursos / Automação Industrial / Sistemas Operacionais / Aula

arrow_back Aula 11 - Gerenciamento de Memória

Quando a memória não é suficiente

Às vezes, a memória não é suficiente para manter todos os processos atualmente ativos, sendo assim, foram desenvolvidos técnicas de gerenciamento de memória RAM com auxílio de uma memória secundária (geralmente, o HD do computador). Vamos, então, apresentar dois esquemas que se utilizam de mais memória do que a RAM disponível: são os esquemas de troca e de memória virtual.

Troca

O esquema de troca tem como objetivo otimizar o gerenciamento de memória e permitir também que vários programas, cujo espaço total de memória requerida seja maior do que o espaço de memória principal disponível, possam ser executados “simultaneamente”. Ele consiste em manter na memória (área de troca) apenas alguns processos, os demais são mantidos no HD. Cada um desses processos é trazido temporariamente do disco para a memória, de forma que possam ser executados e, posteriormente, devolvidos para o disco novamente, de maneira que outros processos possam ter vez. A Figura 5 mostra como esse esquema funciona.

Gerenciamento de memória por trocas de processos

Nesse esquema, a alocação da memória não segue a ideia de partições fixas, variando seu tamanho de acordo com o processo que for sendo carregado. Dessa forma, estaremos otimizando o uso da memória, mas tornando ainda mais complexo o seu gerenciamento. No início, a área livre fica concentrada em único lote, como ilustrado na partição cor de rosa da Figura 5.

Entretanto, conforme podemos ver no exemplo da Figura 6, com o passar do tempo e a liberação de memória, devido à realização de várias trocas, lacunas vão aparecendo, tornando ineficiente o uso da memória. Isso acontece porque quando as lacunas forem muito pequenas, praticamente não cabe nenhum processo. Então, métodos de compactação da memória podem ser utilizados para juntar os processos presentes e eliminar as lacunas entre processos. Com isso, juntam-se as lacunas, tornando o espaço disponível em uma única área livre de tamanho grande, e que poderia agora ser utilizada. Entretanto, essa ação consome bastante tempo de CPU.

Problema da fragmentação das áreas livres que vão surgindo

Para gerenciar as trocas e quais áreas da memória estão ocupadas ou livres, dois esquemas básicos são utilizados. Veja-os a seguir:

  1. Gerenciamento de memória com mapas de Bits

    Pense no mapa de sua cidade. Nele devem estar representadas as áreas ocupadas (urbanas) e áreas livres (terrenos, áreas ambientais e zonas rurais). Se dividirmos a memória em pequenos lotes e criarmos um mapa de ocupação, podemos, com o gasto (ocupação) de uma pequena área da memória, saber quais áreas estão livres e quais estão ocupadas. A Figura 7 representa essa forma de gerenciamento.

    Mapeamento da memória com mapa de bits
  2. Gerenciamento de memória com lista encadeada

    Para esse esquema, utiliza-se uma lista de lotes da memória indicando quais estão ocupados com processos e quais são áreas livres. Como a lista é encadeada, cada lote, além das informações sobre sua partição da memória, também aponta para a próxima área (lote). É como se pegássemos um bloco de notas e descrevêssemos cada cômodo de nossa casa em uma das folhas informando quem está no cômodo e realizando qual atividade. Adicionalmente, indica-se com uma seta que aponta para o próximo cômodo, que poderá estar ocupado ou não.

    A Figura 8 descreve melhor a relação da lista encadeada com as partições da memória.

    Lista encadeada para mapear processos e áreas livres

    Observando a Figura 8, perceba que no momento em que um processo for finalizado e sua partição for liberada, caso exista uma ou duas partições vizinhas livres, ocorre uma fusão, gerando uma partição livre maior. Como exemplo dessa situação, imagine a finalização do processo P2, o que acarretaria a fusão dos lotes livres L2 e L3, constituindo-se agora num único lote.

Versão 5.3 - Todos os Direitos reservados