O termo Memória pode ser definido como uma coleção de dados em um formato específico. É usado para armazenar instruções e dados processados. A memória compreende uma grande array ou grupo de palavras ou bytes, cada um com sua própria localização. O motivo principal de um sistema de computador é executar programas. Esses programas, junto com as informações que acessam, devem estar na memória principal durante a execução. A CPU busca instruções da memória de acordo com o valor do contador do programa. Show
Para atingir um grau de multiprogramação e utilização adequada da memória, o gerenciamento da memória é importante. Existem muitos métodos de gerenciamento de memória, refletindo várias abordagens, e a eficácia de cada algoritmo depende da situação.
Agora antes, vamos começar o gerenciamento de memória, vamos saber sobre o que é memória principal. O que é memória principal:A memória principal é fundamental para a operação de um computador moderno. A memória principal é uma grande variedade de palavras ou bytes, variando em tamanho de centenas de milhares a bilhões. A memória principal é um repositório de informações rapidamente disponíveis compartilhadas pela CPU e dispositivos de E / S. A memória principal é o local onde os programas e as informações são mantidos quando o processador os está utilizando efetivamente. A memória principal está associada ao processador, portanto, mover instruções e informações para dentro e para fora do processador é extremamente rápido. A memória principal também é conhecida como RAM (Random Access Memory). Esta memória é uma memória volátil. A RAM perdeu seus dados quando ocorreu uma interrupção de energia. Figura 1: Hierarquia de memória O que é gerenciamento de memória:Em um computador com multiprogramação, o sistema operacional reside em uma parte da memória e o resto é usado por vários processos. A tarefa de subdividir a memória entre diferentes processos é chamada de gerenciamento de memória. O gerenciamento de memória é um método no sistema operacional para gerenciar as operações entre a memória principal e o disco durante a execução do processo. O principal objetivo do gerenciamento de memória é obter uma utilização eficiente da memória. Por que o gerenciamento de memória é necessário:
Agora estamos discutindo o conceito de espaço de endereço lógico e espaço de endereço físico: Espaço de endereçamento lógico e físico:Espaço de endereço lógico: Um endereço gerado pela CPU é conhecido como “Endereço lógico”. Também é conhecido como endereço virtual. O espaço de endereço lógico pode ser definido como o tamanho do processo. Um endereço lógico pode ser alterado. Espaço de endereço físico: um endereço visto pela unidade de memória (ou seja, aquele carregado no registro de endereço de memória da memória) é comumente conhecido como “Endereço físico”. Um endereço físico também é conhecido como endereço real. O conjunto de todos os endereços físicos correspondentes a esses endereços lógicos é conhecido como espaço de endereço físico. Um endereço físico é calculado por MMU. O mapeamento de tempo de execução de endereços virtuais para físicos é feito por um dispositivo de hardware Memory Management Unit (MMU). O endereço físico sempre permanece constante. Carregamento estático e dinâmico:O carregamento de um processo na memória principal é feito por um carregador. Existem dois tipos diferentes de carregamento:
Vinculação estática e dinâmica:Para realizar uma tarefa de vinculação, um vinculador é usado. Um vinculador é um programa que pega um ou mais arquivos-objeto gerados por um compilador e os combina em um único arquivo executável.
Troca:Quando um processo é executado, ele deve residir na memória. Permuta é um processo de troca de um processo temporariamente para uma memória secundária da memória principal, que é rápido, em comparação com a memória secundária. Uma troca permite que mais processos sejam executados e cabem na memória de uma vez. A parte principal da troca é o tempo de transferência e o tempo total diretamente proporcional à quantidade de memória trocada. A troca também é conhecida como roll-out , roll in, porque se um processo de prioridade mais alta chega e deseja serviço, o gerenciador de memória pode trocar o processo de prioridade mais baixa e, em seguida, carregar e executar o processo de prioridade mais alta. Depois de terminar o trabalho de alta prioridade,o processo de prioridade mais baixa foi trocado de volta na memória e continuou com o processo de execução. Alocação de memória contígua:A memória principal deve obrigar tanto o sistema operacional quanto os diferentes processos do cliente. Portanto, a alocação de memória torna-se uma tarefa importante no sistema operacional. A memória geralmente é dividida em duas partições: uma para o sistema operacional residente e outra para os processos do usuário. Normalmente, precisamos que vários processos do usuário residam na memória simultaneamente. Portanto, precisamos considerar como alocar a memória disponível para os processos que estão na fila de entrada esperando para serem trazidos para a memória. Na distribuição de memória adjacente, cada processo está contido em um único segmento contíguo de memória. Alocação de memória:Para obter a utilização adequada da memória, a alocação de memória deve ser alocada de maneira eficiente. Um dos métodos mais simples de alocar memória é dividir a memória em várias partições de tamanho fixo e cada partição contém exatamente um processo. Assim, o grau de multiprogramação é obtido pelo número de partições. Alocação de múltiplas partições : neste método, um processo é selecionado da fila de entrada e carregado na partição livre. Quando o processo termina, a partição fica disponível para outros processos. Alocação de partição fixa: neste método, o sistema operacional mantém uma tabela que indica quais partes da memória estão disponíveis e quais são ocupadas por processos. Inicialmente, toda a memória está disponível para os processos do usuário e é considerada um grande bloco de memória disponível. Esta memória disponível é conhecida como “Furo”. Quando o processo chega e precisa de memória, procuramos um buraco que seja grande o suficiente para armazenar esse processo. Se o requisito for atendido, alocamos memória para processar, caso contrário, manteremos o restante disponível para atender a requests futuras. Durante a alocação de uma memória, às vezes ocorrem problemas de alocação de armazenamento dinâmico, que dizem respeito a como satisfazer uma solicitação de tamanho n de uma lista de buracos livres. Existem algumas soluções para este problema: Primeiro ajuste: - No primeiro ajuste, o primeiro orifício livre disponível atende ao requisito do processo alocado. Aqui, neste diagrama, o bloco de memória de 40 KB é o primeiro orifício livre disponível que pode armazenar o processo A (tamanho de 25 KB), porque os primeiros dois blocos não tinham espaço de memória suficiente. Melhor ajuste: - No melhor ajuste, aloque o menor orifício que seja grande o suficiente para processar os requisitos. Para isso, pesquisamos a lista inteira, a menos que a lista seja ordenada por tamanho. Aqui neste exemplo, primeiro percorremos a lista completa e descobrimos que o último furo de 25 KB é o furo mais adequado para o Processo A (tamanho 25 KB). Neste método, a utilização da memória é máxima em comparação com outras técnicas de alocação de memória. Pior ajuste: - No pior ajuste, aloque o maior furo disponível para processar. Este método produz o maior furo restante. Aqui neste exemplo, o Processo A (tamanho 25 KB) é alocado para o maior bloco de memória disponível, que é 60 KB. A utilização ineficiente da memória é um grande problema no pior ajuste. Fragmentação:Uma fragmentação é definida como quando o processo é carregado e removido após a execução da memória, ele cria um pequeno buraco livre. Esses buracos não podem ser atribuídos a novos processos porque os buracos não são combinados ou não atendem ao requisito de memória do processo. Para atingir um certo grau de multiprogramação, devemos reduzir o desperdício de memória ou o problema de fragmentação. No sistema operacional, dois tipos de fragmentação: Fragmentação interna: A fragmentação interna ocorre quando os blocos de memória são alocados para o processo mais do que seu tamanho solicitado. Devido a isso, algum espaço não utilizado sobra e cria um problema de fragmentação interna. Exemplo: Suponha que haja um particionamento fixo usado para alocação de memória e diferentes tamanhos de bloco de 3 MB, 6 MB e 7 MB de espaço na memória. Agora vem um novo processo p4 de tamanho 2 MB e demanda pelo bloco de memória. Ele obtém um bloco de memória de 3 MB, mas a memória do bloco de 1 MB é um desperdício e não pode ser alocada para outros processos também. Isso é chamado de fragmentação interna. Fragmentação externa: Na fragmentação externa, temos um bloco de memória livre, mas não podemos atribuí-lo ao processo porque os blocos não são contíguos. Exemplo: Suponha (considere o exemplo acima) três processos p1, p2, p3 vêm com tamanhos de 2 MB, 4 MB e 7 MB, respectivamente. Agora eles recebem blocos de memória de 3 MB, 6 MB e 7 MB alocados respectivamente. Depois de alocar o processo, o processo p1 e o processo p2 ficaram com 1 MB e 2 MB. Suponha que um novo processo p4 venha e exija um bloco de memória de 3 MB, que está disponível, mas não podemos atribuí-lo porque o espaço de memória livre não é contíguo. Isso é chamado de fragmentação externa. Tanto o primeiro como o sistema de melhor ajuste para alocação de memória afetada pela fragmentação externa. Para superar o problema de fragmentação externa, a compactação é usada. Na técnica de compactação, todo o espaço de memória livre se combina e forma um grande bloco. Portanto, este espaço pode ser utilizado por outros processos de forma eficaz. Outra solução possível para a fragmentação externa é permitir que o espaço de endereço lógico dos processos seja não contíguo, permitindo assim que um processo seja alocado na memória física sempre que esta estiver disponível. Paging:Paging é um esquema de gerenciamento de memória que elimina a necessidade de alocação contígua de memória física. Este esquema permite que o espaço de endereço físico de um processo seja não contíguo.
Exemplo:
O mapeamento do endereço virtual para o físico é feito pela unidade de gerenciamento de memória (MMU), que é um dispositivo de hardware e esse mapeamento é conhecido como técnica de paging.
Vamos considerar um exemplo:
O endereço gerado pela CPU é dividido em
O endereço físico é dividido em
A implementação de hardware da tabela de página pode ser feita usando registradores dedicados. Mas o uso de registro para a tabela de páginas é satisfatório apenas se a tabela de páginas for pequena. Se a tabela de páginas contiver um grande número de entradas, podemos usar o TLB (buffer de look-side de tradução), um cache de hardware especial, pequeno e de consulta rápida. Quais são os métodos de gerenciamento de memória com alocação dinâmica?Resposta verificada por especialistas. Os métodos de gerenciamento de memória com alocação dinâmica são mencionados na: Alternativa b) Mapa de bits e listas encadeadas.
Quais são principais métodos de alocação de memória?A alocação estática ocorre quando são declaradas variáveis globais ou estáticas; geralmente alocadas em Data. A alocação automática ocorre quando são declaradas variáveis locais e parâmetros de funções. O espaço para a alocação dessas variáveis é reservado quando a função é invocada, e liberado quando a função termina.
Qual a diferença entre alocação de memória estática e dinâmica?Na alocação estática, o espaço de memória é definido durante o processo de compilação, já na alocação dinâmica o espaço de memória e reservado durante a execução do programa.
O que é o gerenciamento de memória?Gerenciamento de Memória (Gerenciamento de Memória)
O gerenciador de memória implementa memória virtual, fornece um conjunto principal de serviços, como arquivos mapeados de memória, memória copiada na gravação, suporte à memória grande e suporte subjacente para o gerenciador de cache.
|