Baixe o app para aproveitar ainda mais
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
Compartilhar