Universidade Estadual de Mato Grosso do Sul – UEMS Curso de Computação, Licenciatura Sistemas Operacionais Gerência de Memória Prof. José Gonçalves Dias Neto [email protected] Introdução A memória principal sempre foi vista como um recurso escasso e caro. Nos ambientes monoprogramados a gerência de memória não é muito complexa, já nos multiprogramados torna-se crítica; Precisamos sempre desenvolver SO que não ocupem muito espaço de memória e que otimizem a utilização de recursos. Funções básicas da gerência de memória Programas ficam dispostos em memória secundária, mas o processador só executa instruções vindas da memória principal. Tempo de acesso da memória secundária é muito maior do que o acesso a memória principal. SO deve reduzir o número de instruções de E/S para não causar perda de desempenho; A gerência de memória deve tentar manter na memória principal o maior número de processos residentes; Mesmo na ausência de espaço livre, o SO deve permitir a criação e execução de novos processos; Funções básicas da gerência de memória O SO consegue transferir temporariamente processos da memória principal para a memória secundária, caso a primeira esteja cheia (swapping); Deve-se permitir a execução de programas maiores do que a memória física disponível; O SO deve proteger as áreas de memória ocupadas por cada processos, inclusive as áreas que o próprio SO reside; Apesar da proteção, o SO deve permitir áreas de compartilhamento entre processos. Alocação Contígua Implementada nos primeiros SO monoprogramados; A memória principal é dividida em duas áreas, uma para o SO e a outra para o programa de usuário; Aqui o programador deve preocupar-se apenas em não ultrapassar o espaço de memória disponível; Nesse esquema o usuário tem acesso a toda a memória disponível, incluindo a ocupada pelo SO; Como tentativa de proteção, alguns SO marcam o espaço ocupado por este através de um registrador; Alocação Contígua Overlay É a divisão do programa em módulos, que permite a execução independente de cada módulo, utilizando a mesma área de memória; Considere: Um programa maior que a memória disponível, com 3 módulos (Principal, Cadastro e impressão); Cadastro e Impressão são independentes um do outro; O programador cria uma área de memória que será utilizada alternadamente entre os módulos independentes; Esta área deve ser do tamanho capaz de armazenar o maior módulo; Overlay Alocação Particionada Nos sistemas monoprogramados o processador permanece muito tempo ocioso e a memória principal subutilizada; Os sistemas multiprogramados permitem que diversos programas estejam residentes em memória principal ao mesmo tempo; Existem duas técnicas de alocação particionada, a estática e a dinâmica; Alocação Particionada Estática Nos primeiros sistemas multiprogramados, a memória era divida em partições de tamanho fixo; O tamanho das partições era definido durante o boot do sistema; Sempre que necessitasse alterar o tamanho das partições, o SO deveria ser desativado e reiniciado; Inicialmente os programas só podiam ser carregados e executados em uma partição específica devido conter o código absoluto (endereços físicos de memória). Neste caso não sendo possível a utilização de outra área de memória pelo programa, mesmo que esta estivesse vazia; Alocação Particionada Estática Alocação Particionada Estática Absoluta Alocação Particionada Estática Com a evolução dos compiladores, o código deixou de ser absoluto passando a ser relocável; Todas as referências a endereços são para com o inicio do código e não a endereços físicos de memória; No momento do carregamento, o SO calcula os espaços de memória segundo o inicio do código, permitindo que programas reaproveitem áreas de memória vazias deixadas por programas já desalocados. Alocação Particionada Estática Relocável Alocação Particionada Estática A gerência de memória mantém uma tabela com dados referentes a cada partição (endereço inicial, tamanho e status); Antes de carregar um programa para a memória, o SO percorre a tabela buscando áreas livres; Alocação Particionada Estática Alocação Particionada Estática A proteção das partições baseiase em dois registradores que armazena o endereço inicial e o endereço final da partição. Alocação Particionada Estática Independente da alocação particionada estática ser absoluta ou estática, ainda assim os programas deixam áreas de memória livres que não podem ser utilizadas; Isso ocorre que raramente um programa ocupara toda a área de memória disponível na partição; Este problema é denominado Fragmentação Interna Alocação Particionada Estática Alocação Particionada Dinâmica Veio para sanar o problema da fragmentação interna e aumentar o grau de compartilhamento de memória principal; Eliminou o conceito de partições de tamanho fixo; Cada programa utiliza o espeço de memória necessário, fazendo deste a sua partição; Com isso o problema da fragmentação interna é resolvido. Alocação Particionada Dinâmica Alocação Particionada Dinâmica O problema é que na medida que programas sejam desalocados e outros sejam alocados em seus lugares, provavelmente ocorrerá a sobra de espaços cada vez menores de memória livre; Isso não permitirá o ingresso de novos programas. A este novo problema é dado o nome de fragmentação externa. Fragmentação Externa Alocação Particionada Dinâmica Solução 1: Reunir os espaços de memória livres adjacentes Alocação Particionada Dinâmica Solução 2: Realocar todas as partições ocupadas, eliminando os espaços entre elas. (alto custo computacional) Estratégias de Alocação de Partição Existem 3 (três) abordagens utilizadas pelos SO modernos para decidir em qual espaço de memória alocar o programas: • • • Best-fit Worst-fit First-fit Independente da abordagem adotada, o sistema mantém uma lista das áreas livres, com endereço e tamanho de cada uma Estratégias de Alocação de Partição Estratégias de Alocação de Partição Best-fit: (Melhor partição) O critério é escolher a partição em que o programa deixe o menor espaço sem utilização; Ordena a lista de partições por tamanho; Tende a aumenta a fragmentação; Worst-fit: (Pior partição) Escolhe a maior partição possível; Tende a diminuir a incidência de fragmentação; First-fit: (primeira partição) Escolhe a primeira partição da lista com tamanho suficiente para armazenar o programa; Ordena crescentemente a lista de partições segundo seu endereço; Considerada a estratégia mais rápida e com menor consumo de recursos; Swapping Muitas vezes um programa não pode ser executado por falta de partição de memória disponível; O sistema escolhe um processo residente em memória principal e o transfere para a memória secundária (geralmente HD); (swap out) Posteriormente o processo transferido retorna a memória principal; (swap in) O problema é: Qual processo escolher? Swapping Swapping O algoritmo de swapping deve tentar transferir sempre o processo com menor probabilidade de executar; Geralmente são transferidos os processos em estado de bloqueado (espera), mas também pode ocorrer com processo no estado de pronto; Vantagem: Aumento do compartilhamento da memória principal; Desvantagem: Alto custo das operações de E/S; Exercícios 1- Considere um sistema computacional com 40Kb de memória principal e que utilize um sistema operacional de 10Kb que implemente alocação contígua de memória. Qual a taxa de subutilização de memória principal para um programa que ocupe 20Kb de memória? (responda em percentual) Exercícios 2- Suponha um sistema computacional com 64Kb de memória principal e que utilize um sistema operacional de 14Kb que implemente alocação contígua de memória. Considere também um programa de 90Kb, formado por um módulo principal de 20Kb e três módulos independentes de 10Kb, 20Kb e 30 Kb. como o programa poderia ser executado em memória utilizando apenas a técnica de overlay? Exercícios 3- Suponha um sistema computacional com 128KB de memória principal e que utilize um sistema operacional de 64Kb que implementa alocação particionada estática relocável. Considere também que o sistema foi inicializado com três partições: P1 (8KB), P2 (24KB) e P3 (32 KB). Calcule a fragmentação interna da memória principal após a carga de três programas PA, PB, PC: a) P1← PA(6KB), P2← PB(20KB), P3← PC(28KB) b) P1← PA(4KB), P2← PB(16KB), P3← PC(26KB) c) P1← PA(8KB), P2← PB(24KB), P3← PC(32KB) Exercícios 4 – Um sistema utiliza alocação particionada dinâmica como mecanismo de gerência de memória. O sistema operacional aloca uma área de memória total de 50Kb e possui, inicialmente, os programas dispostos a seguir PROGRAMA A 5kB PROGRAMA B 3kB LIVRE 10kB PROGRAMA C 6kB LIVRE 26kB Realize as operações a seguir sequencialmente mostrando o estado da memória após cada uma delas. Resolva a questão utilizando as estratégias best-fit, worst-fit, first-fit a) Alocar uma área para o programa D que possui 6Kb b) Liberar a área do programa A; c) Alocar uma área para o programa E que possui 4Kb;