Buscar

Definição de gerência de memória, alocação dinâmica,alocação

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Definição de gerência de memória, alocação dinâmica,alocação estática e partições fixas 
Gerência de Memória
– Introdução
Na memória principal residem os programas em execução.
Memória secundária são mecanismos de armazenamento permanente, são mais abundantes e baratas.
Para um programa ser executado deve ser carregado na memória principal.
Gerenciamento complexo em sistemas multiprogramáveis com múltiplos usuários utilizando-a eficientemente
Tipos de memórias
Memória física 
É a memória implementada pelo hardware
Memória lógica de um processo
É a memória endereçada pelas instruções de máquina do processo
Memória Virtual
É uma memória implementada pelo SO, com o auxílio da memória secundária (disco). Comumente, é implementada através de paginação ou segmentação.
Normalmente, é maior que a memória física do computador
Mapeamento
Mecanismo que transforma os endereços virtuais em endereços reais;
Todo programa  precisa estar nos espaços de endereçamento real para poder ser referenciado ou executado;
Atualmente, o mapeamento é realizado via hardware junto com o Sistema Operacional, de forma a não comprometer seu desempenho e torná-lo transparente aos usuários e suas aplicações;
A maioria das aplicações tende a fazer referência a um reduzido número de páginas, logo, somente uma pequena fração da tabela de páginas é necessária.
Memória associativa ou Translation Lookside Buffer – Hardware especial para mapear endereços virtuais para endereços físicos sem a necessidade de acesso à tabelas de páginas;
Quando um programa está em execução, existe uma tabela de mapeamento do processo no qual o programa executa. Se outro programa for executado no contexto de outro processo, o sistema deve passar a referenciar a tabela do novo processo. Toda vez que há mudança de contexto, o registrador é atualizado com o endereço da nova tabela.
Paginação
Técnica de gerência de memória onde o espaço de endereçamento virtual e o espaço de endereçamento real são divididos em blocos do mesmo tamanho (páginas);
Páginas virtuais no espaço virtual e páginas reais ou frames (molduras) no espaço real;
Todo mapeamento é realizado a nível de página, através de tabelas de páginas, em que cada página virtual do processo possui uma entrada na tabela ETP;
Paginação por demanda  é quando as páginas dos processos são transferidas da memória secundária para a principal apenas quando são referenciadas.
Paginação Antecipada é o carregamento de páginas na memória antecipadamente, sendo que o sistema tenta prever as páginas que serão necessárias à execução do programa.
ALGORÍTMO DA PAGINAÇÃO.
Working Set
Working Set de um processo é o conjunto de páginas referenciadas por ele durante determinado intervalo de tempo, ou, segundo Denning, é o conjunto de páginas constantemente referenciadas pelo processo, devendo permanecer na memória principal para que execute de forma eficiente, evitando a elevada taxa de paginação (thrashing).
Sempre que um processo é criado, todas as suas páginas estão na memória secundária.
O Working Set deve Ter um limite máximo de páginas permitidas.
Problemas
Paginação exigem operações de E/S (que deve ser evitado) quando um processo faz referência a uma página que não se encontra na memória;
O Sistema Operacional deve se preocupar em ter um certo número de páginas na memória que reduza ao máximo a taxa de paginação dos processos e não prejudique os demais processos que desejam acesso a memória.
Observações:
 Quando um programa começa a ser executado, percebe-se uma elevada taxa de page faults (páginas que não se encontram na memória), que se estabiliza com o decorrer de sua execução.
Localidade é a tendência que existe em um programa de fazer referências a posições de memória de forma quase uniforme, ou seja, instruções próximas.
A partir da observação da localidade Denning formulou o modelo de working set.
Swapping em Memória Virtual
Quando existem novos processos que desejam ser processados e não existe memória real suficiente, o sistema seleciona um ou mais processos que deverão sair da memória para ceder espaço aos novos processos.
Os critérios mais utilizados para a escolha são a prioridade,  escolhendo processos de melhor prioridade, e o estado do processo, selecionando os processos que estão no estado de espera.
Thrashing
É a excessiva transferência de páginas/segmentos entre a memória principal e a memória secundária. Problema existente tanto em paginação quanto a segmentação.
Na paginação:
A nível de processo:
o working set de um processo pode ser pequeno demais para acomodar as páginas constantemente acomodadas referenciadas por ele, a solução é aumentar o tamanho do working set.
O thrashing também pode ocorrer pela não obediência do conceito da localidade, ou seja, o programa faz referência a comandos/dados localizados em páginas fora do working set do processo e a solução para isso é reescrever a aplicação.
A nível de sistema:
o trashing ocorre quando existem mais processos competindo por memória que espaço disponível.
O primeiro passo é a redução do tamanho dos working set dos processos, mas isso pode levar o thrashing a nível de processo.
Na segmentação:
Em nível de processo, quando a trasferência de segmentos é excessiva devido a modularização extrema do programa não seguindo o conceito da modularidade.
Em nível de sistema é semelhante ao caso da paginação.
Em qualquer caso, se existem mais processos para serem executados que a memória real disponível, a única solução é expandir a memória principal.
Este problema ocorre em todos os sistemas que possuem um mecanismo de gerência de memória.
 Alocação Particionada Estática:
Divisão da memória em tamanhos fixos (partições) definidos na inicialização do Sistema em função dos programas que executariam no ambiente.
A alteração do tamanho de uma partição necessita a inicialização do Sistema Operacional.
Os programas só podiam executar em uma das partições, mesmo com outras disponíveis.
Limitações impostas pelos compiladores e montadores que geravam apenas códigos absolutos
Posteriormente, evolução dos compiladores, linkers e loaders com geração de código realocável, sendo que os programas puderam ser carregados em qualquer partição (alocação particionada estática realocável).
Surgimento da tabela de partições com informações de tamanho, uso e delimitações.
Proteção da memória através de dois registradores, início e fim da partição.
Os programas não preenchiam totalmente as partições onde eram carregados.
Problemas de fragmentação.
 Alocação Dinâmica
Uso da memória:
 – alocação dinâmica:
• espaço de memória é requisitado em tempo de execução
 • espaço permanece reservado até que seja explicitamente liberado
 – depois de liberado, espaço estará disponibilizado para outros usos e não pode mais ser acessado
 – espaço alocado e não liberado explicitamente, será automaticamente liberado ao final da execução
• Uso da memória: – uso de variáveis globais (e estáticas):
• espaço reservado para uma variável global existe enquanto o programa estiver sendo executado 
uso de variáveis locais: 
• espaço existe apenas enquanto a função que declarou a variável está sendo executada
 • liberado para outros usos quando a execução da função termina – variáveis globais ou locais podem ser simples ou vetores.
• para vetor, é necessário informar o número máximo de elementos pois o compilador precisa calcular o espaço a ser reservado
Alocação Estática
Sempre que um programa é carregado para a memória, o SO examina a tabela de partições e se há uma entrada indicando uma partição vazia, o SO armazena nela o código do processo;
 – O SO também deve alterar a entrada na tabela para refletir a modificação das novas partições ocupadas. Isso deve acontecer tanto quando o processo inicia, quanto quando o processo termina seu processamento.
Divisão da memória em tamanhos fixos (partições) definidos na inicialização do Sistema em função dos programas que executariam
no ambiente.
A alteração do tamanho de uma partição necessita a inicialização do Sistema Operacional.
Os programas só podiam executar em uma das partições, mesmo com outras disponíveis.
Limitações impostas pelos compiladores e montadores que geravam apenas códigos absolutos.
Proteção (Considerações):
 Um endereço inválido causa um Trap (interrupção) que transfere o controle para uma rotina de manipulação especial; 
É melhor armazenar os valores dos limites nos registradores da CPU do que na memória, pois isso reduz o tempo necessário para executar cada instrução. Referências extras à memória fazem o processo ser executado mais lentamente. 
Caso a proteção não seja implementada de maneira eficaz, pode ocorrer o colapso do sistema (system crash).
Partições fixas
O modelo de partição fixa divide o espaço da memória em lacunas bem definidas atribuindo um tamanho específico para cada lacuna. Um processo de 5 kb precisaria de uma lacuna com tamanho igual ou maior para poder existir. Contudo esse modelo de partição gera desperdícios como fragmentação interna e externa. A fragmentação interna ocorre quando o tamanho do processo é menor que a área alocada, ou seja, uma lacuna com 6kb seja utilizada para alocar um processo de 5kb desperdiçando memória. Outra maneira de fragmentação é a externa que ocorre devido a não existência de uma área contígua na memória, ou seja, um processo qualquer precisa de 5kb porém existem duas lacunas sendo uma de 2kb e uma 3kb, porém em lugares separados. Abaixo segue duas imagens explicando o efeito das fragmentações:
Divide-se a memória em um número fixo de blocos (do mesmo tamanho ou não)
Quando um processo é criado, ele é colocado em uma fila (em disco) à espera que uma partição de tamanho suficiente se torne disponível
		Para definir a partição onde o programa vai ser colocado, existem duas opções:
Montar uma fila individual para cada partição
Montar uma fila única para todas as partições
O controle de partições fixas é conceitualmente simples. Necessita levar em conta:
tamanhos das partições de memória
algoritmo para gerenciar a lista de processos em espera
Exemplo: memória de 256K
espaço do SO: 64K
espaço para processos pequenos: 16K
espaço para processos médios: 48K
espaço para processos grandes: 128K
Bibliografia
http://professor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/17785/material/AULA%2014%20-%20Memria%20Virtual.pdf
http://www.gsigma.ufsc.br/~popov/aulas/so1/cap9so.html
http://www.ebah.com.br/search?q=mem%C3%B3ria+virtual++fisica++l%C3%B3gica
http://wiki.icmc.usp.br/images/c/c7/Aula10.pdf
https://msdn.microsoft.com/pt-br/library/windows/desktop/cc441804(v=vs.85).aspx

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais