SISTEMAS OPERACIONAIS Gerência de Memória Apostila 7 UNIBAN Sistemas Operacionais 1.0 – INTRODUÇÃO Historicamente, a memória principal sempre foi vista como um recurso escasso e caro. Uma das maiores preocupações dos projetistas foi desenvolver ocupassem muito espaço otimizassem a utilização Sistemas de Operacionais memória e, ao que mesmo não tempo, dos recursos computacionais. Mesmo atualmente, com a redução de custo e consequente aumento da capacidade da memória principal, seu gerenciamento é um dos fatores mais importantes no projeto de Sistemas Operacionais. Enquanto nos sistemas monoprogramáveis a gerência da memória não é muito complexa, nos sistemas multiprogramáveis essa gerência se torna crítica, devido à necessidade de se maximizar o número de usuários e aplicações utilizando eficientemente o espaço da memória principal. 1.1 - Funções Básicas Em geral programas são armazenados em memórias secundárias, como discos ou fitas, por ser um meio não-volátil, abundante e de baixo custo. Como o processador somente executa instruções localizadas na memória principal, o Sistema Operacional deve sempre transferir programas da memória secundária para a memória principal antes deles serem executados. Como o tempo de acesso à memória secundária é muito superior ao tempo de acesso à memória principal, o Sistema Operacional deve buscar reduzir o número de operações de E/S à memória secundária, para evitar problemas de desempenho do sistema. A gerência de memória deve tentar manter na memória principal o maior número possível de processos residentes, permitindo maximizar o compartilhamento do processador e demais recursos computacionais. sistema deve permitir Mesmo na ausência de espaço livre, o que novos processos sejam aceitos e executados. Isto é possível através da transferência temporária de Gerência de Memória 2 UNIBAN processos Sistemas Operacionais residentes na memória principal para a memória secundária, liberando espaço para novos processos. Este mecanismo é conhecido como swapping. Outra preocupação na gerência de memória é permitir a execução de programas que sejam maiores que a memória física disponível, implementando técnicas como overlay e memória virtual. Em um ambiente de multiprogramação, o sistema operacional deve proteger as áreas de memória ocupadas por cada processo, além da área onde reside o próprio sistema. Caso um programa tente realizar algum acesso indevido à memória, o sistema de alguma forma deve impedí-lo. Apesar de a gerência de memória garantir a proteção de áreas da memória, mecanismos de compartilhamento devem ser oferecidos para que diferentes processos possam trocar dados de forma protegida. 2.0 - ALOCAÇÃO DE MEMÓRIA Simples Contígua Particionada Estática(Fixa) / Dinâmica Alocação Paginação Não-Contígua Segmentação (Memória Virtual) Segmentação com Paginação 2.1 - Alocação Contígua Simples Foi implementada nos primeiros Sistemas Operacionais, porém ainda está presente em alguns sistemas monoprogramáveis. Nesse tipo de organização, a memória principal é subdividida em duas áreas: uma para o sistema operacional e outra para o programa do usuário. Dessa forma, o programador deve desenvolver suas Gerência de Memória 3 UNIBAN Sistemas Operacionais aplicações, preocupado, apenas, em não ultrapassar o espaço de memória disponível, ou seja, a diferença entre o tamanho total da memória principal e área ocupada pelo Sistema Operacional. Figura 1 - Alocação Contígua Simples Esquema em que o usuário tem controle sobre toda a memória principal, inclusive a área do Sistema Operacional. Implementa controle de proteção do sistema através de registrador que delimita a área do Sistema Operacional. Fácil implementação e código reduzido, porém não utiliza os recursos computacionais de forma eficiente, pois apenas um usuário/aplicação pode dispor deste recurso. 2.2 - Técnia de Overlay Na alocação contígua simples, todos os programas estão limitados ao tamanho da área de memória principal disponível para o usuário. Uma solução encontrada para o problema é dividir o programa em módulos, de forma que seja possível a execução independente de cada módulo, utilizando uma mesma área de memória. Essa técnica é chamada de overlay. Gerência de Memória 4 UNIBAN Sistemas Operacionais Figura 2 - Técnia de Overlay A técnica de overlay utiliza uma área de memória comum, os os módulos “não-carregados” poderão compartilhar esta área de memória (área de overlay). Sempre que um módulo “não-carregado” for referenciado pelo módulo principal, o módulo será carregado da memória secundária para a área de overlay. No caso de uma referência a um módulo já carregado, a carga não será realizada. A definição das áreas de overlay é função do programador, através de comandos específicos das linguagem de programação utilizada. O tamanho da área de overlay é estabelecido a partir do tamanho do maior módulo. Esta técnica tem a vantagem de permitir ao programador expandir os limites da memória principal, porém deve ser utilizada com cuidado, pois pode trazer sérios problemas de desempenho, devido a possibilidade de transferência excessiva dos módulos entre a memória principal e a secundária. 2.3 - Alocação Contígua Particionada Gerência de Memória 5 UNIBAN Os Sistemas Operacionais Sistemas Operacionais evoluiram no sentido de proporcionar melhor aproveitamento dos recursos disponíveis. Nos sistemas monoprogramáveis, o processador permance grande parte do tempo ocioso e a memória principal é subutilizada. Os sistemas multiprogramáveis jão são muito mais eficientes no uso do processador, necessitando assim, que diversos programas estejam na memória principal ao mesmo tempo e que novas formas de gerência da memória sejam implementadas. 2.4 - Alocação Contígua Particionada Fixa (Estática) Nos primeiros sistemas multiprogramáveis, a memória era dividida em pedaços de tamanho fixo, chamados partições. O tamanho das partições, estabelecido na fase de inicialização do sistema, era definido em função do tamanho dos programas que executariam no ambiente. Sempre que fossem necessárias alterações do tamanho de uma partição, o sistema deveria ser reinicializado com a nova configuração. Figura 3 - Alocação Contígua Particionada Fixa (Estática) - Absoluta Inicialmente, os programas só podiam ser carregados e executados em apenas uma partição específica, mesmo se outras estivessem disponíveis. Gerência de Memória 6 UNIBAN Sistemas Operacionais Esta limitação se devia aos compiladores e montadores, que geravam apenas código absoluto. No exemplo acima, supondo que os programas A e B estivesem sendo executados, os programas C e E não poderiam ser processados na terceira partição, mesmo esta estando livre. A esse tipo de gerência chamou-se alocação particionada estática absoluta. Com a evolução dos compiladores, montadores, ligadores e carregadores, o código gerado deixou de ser absoluto e passou a ser relocável. No código relocável, todas as referências a endereços no programa são relativas ao início do código e não a endereços físicos de memória. Desta forma, os programas puderam ser executados a partir de qualquer partição. Figura 4 - Alocação Contígua Particionada Fixa (Estática) Relocável Supondo que na partição 1 esteja o programa C, na partição 2 o programa A e na partição 3 o programa B. Caso os programas A e B terminassem, o programa E poderia ser executado tanto na partição 2 quanto na partição 3. Gerência de Memória 7 UNIBAN Sistemas Operacionais Para manter o controle sobre as partições alocadas, a gerência de memória mantém uma tabela com o endereço inicial de cada partição, seu tamanho, e se está em uso ou não. Figura 5 – Tabela de Alocação de Partições A esse tipo de gerência chamou-se alocação particionada estática relocável. Neste esquema de memória, a proteção baseia-se em dois registradores, que indicam os limites (inferior e superior) da partição onde o programa está sendo executado. Figura 6 – Proteção na Alocação Particionada Tanto nos sitemas de alocação absoluta quanto nos de alocação relocável, os programas, normalmente, não preenchem Gerência de Memória 8 UNIBAN Sistemas Operacionais totalmente as partições onde são carregados, deixando área de memória livre. Este problema é conhecido como fragmentação interna. Um exemplo de sistema operacional que implementou esse tipo de gerência de memória é o OS/MFT (Multiprogramming with Fixed Number of Tasks) da IBM. 2.5 - Alocação Contígua Particionada Dinâmica Na alocação particionada dinâmica ou variável, foi eliminado o conceito de partições de tamanho fixo. Nesse esquema, cada programa utilizaria o espaço necessário, tornando essa área sua partição. Como cada programa utiliza apenas o espaço que necessita, o programa de fragmentação interna não ocorre. Um outro problema começará a ocorrer, conhecido como fragmentação externa. Ele ocorre quando os programas forem terminando e deixando espaços cada vez menores na memória, não permitindo o ingresso de novos programas. Figura 7 - Alocação Contígua Particionada Dinâmica Existem duas soluções para este problema. O primeiro método indica que, conforme os programas terminem, apenas os espaços livres adjacentes sejam reunidos, produzindo áreas livres de tamanho maior. Gerência de Memória 9 UNIBAN Sistemas Operacionais Figura 8 - Primeira Solução para Fragmentação Interna A segunda solução envolve a relocação de todas as partições ocupadas, eliminando todos os espaços entre elas e criando uma única área livre contígua. Para que esta solução possa ser implementada, é necessário que o sistema tenha a capacidade de mover os diversos programas na memória principal, ou seja, realizar a relocação dinâmica. Figura 9 - Segunda Solução para Fragmentação Interna Esta técnica de gerenciamento é conhecida como alocação particionada dinâmica com relocação. Reduz em muito o problema da fragmentação, porém aumenta a complexidade do algoritmo e o consumo de recursos do sistema (processador e área de disco). Exemplo de implementação: OS/MVT (Multiprogramming with a Variable Number os Tasks) da IBM. Gerência de Memória 10 UNIBAN Sistemas Operacionais 2.6 - Estratégias de Alocação de Partição O Sistemas Operacionais implementam, basicamente, três estratégias para determinar em qual área livre um programa será carregado para execução. A melhor estratégia depende de uma série de fatores, como o tamanho dos programas a serem processados. Independente do algoritmo utilizado, o sistema possui uma lista das áreas livres, com o endereço e o tamanho de cada área. Figura 10 - Estratégias de Alocação de Partição Qual partição livre alocar a um processo que pede por um tamanho X ? FIRST-FIT: a primeira partição livre onde caibam X bytes é escolhida; o A procura pode começar sempre no início da lista, ou a partir do último bloco alocado (“next-fit”). BEST-FIT: a partição livre de tamanho mais parecido com X bytes é escolhida (sendo igual ou maior do que X); o Pode se aproveitar da ordenação da lista de área livres. o Pode aumentar o problema de fragmentação. WORST-FIT: a maior a partição livre é escolhida; o Diminui o problema de fragmentação, pois deixa espaços livres maiores. Gerência de Memória 11 UNIBAN Sistemas Operacionais Figura 11 – Exemplo de Uso das Estratégias de Alocação de Partição Gerência de Memória 12