Baixe o app para aproveitar ainda mais
Prévia do material em texto
Unidade VII: Gerência de Memória Principal INSTITUTO DE CIÊNCIAS EXATAS E NATURAIS FACULDADE DE COMPUTAÇÃO BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS Professor: Dr. Josivaldo Araújo josivaldo@ufpa.br Objetivos desta Unidade... � Estudar as vantagens, desvantagens e principais implementações da memória principal; � Fornecer uma descrição detalhada de várias maneiras de organizar o hardware memória; � Analisar as motivações que levaram à ampla adoção do mecanismo de gerência de memória virtual e outras técnicas de gerência de memória. � Discutir várias técnicas de gerência de memória, inclusive a paginação e a segmentação; � A memória principal sempre foi vista como um recurso escasso e caro; � Seu gerenciamento é um dos fatores mais importantes no projeto de S.O.; (Determina o bom desempenho) � Computadores utilizam uma hierarquia de memórias; • Memória Cache (volátil, rápida, alto custo); • Memória Principal (volátil, rápida, custo médio); • Memória Secundária (não-volátil, baixa velocidade e baixo custo) Introdução � A parte que gerência a hierarquia de memória é denominada de gerenciador e memória; • Manter o controle de quais partes da memória estão em uso e quais não estão, alocando memória aos processos quando eles precisam e liberando quando terminam; • Gerenciar a troca de processos (swapping) entre memória e o disco quando a memória principal não é suficiente para todos os processos; Introdução � Programas são armazenados em memória secundária, ou seja, o uso de discos ou fitas === Meios não voláteis, com grande capacidade e baixo custo; � Processador executa instruções localizadas na memória principal; • S.O. deve transferir programas da memória secundária para memória principal; � Maximizar o compartilhamento do processador e demais recursos computacionais: • Manter o maior número de processos residentes na memória principal; Funções Básicas � Mesmo na ausência de espaço livre, o sistema deve permitir o aceite e execução de novos processos. • Isso é possível através da técnica de swapping; � Permitir a execução de programas que sejam maiores que a memória física disponível, para isso, pode-se utilizar duas técnicas: 1. Overlay; 2. Memória Virtual; Funções Básicas � Foi implementada nos primeiros sistemas operacionais, porém ainda reside em alguns sistemas monoprogramáveis; � A memória principal é subdividida em duas áreas: uma para o sistema operacional e a outra para o programa do usuário (Fig.01).; � O programador deve desenvolver suas aplicações, preocupado, apenas, em não ultrapassar o espaço de memória disponível; � O usuário tem controle sobre toda a memória, podendo ler qualquer posição, inclusive a área do S.O. Alocação Contígua Simples � Para proteger o sistema desse tipo de acesso, alguns sistemas implementam um registrador que delimita as áreas (Fig.02).; � Não permite a utilização eficiente dos recursos computacionais, pois apenas um usuário pode dispor desses recursos (Fig.03). S.O. Área para programa Memória Principal S.O. Área para programa Memória Principal Registrador S.O. Área Livre Memória Principal Programa do usuário Fig. 01 Fig. 02 Fig. 03 Alocação Contígua Simples Técnica do Overlay � Na alocação contígua simples, os programas estão limitados ao tamanho da memória principal; � Solução encontrada é a técnica do Overlay: • É 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. � A independência do código significa que quando um módulo estiver na memória para execução, o outro não precisa necessariamente estar presente; � Módulo principal é comum e deve permanecer na memória durante todo o tempo de execução. � A definição das áreas de overlay é função do programador, através de comandos específicos da linguagem utilizada; Sistema Operacional Módulo Principal Área de overlay Área livre 2 Kb 3 Kb 4 Kb 1 Kb 4 Kb Cadastramento Impressão 2 Kb 2 Kb Área não utilizada Técnica do Overlay � Evolução dos S.O. � Melhor aproveitamento dos recursos disponíveis: • Monoprogramáveis: O processador permanece ocioso grande parte do tempo e a memória principal é subutilizada; • Multiprogramáveis: Diversos programas estejam na memória principal ao mesmo tempo e que novas formas de gerência da memória sejam implementadas. � A alocação particionada pode ser: 1. Estática; 2. Estática Absoluta; 3. Estática Relocável; 4. Dinâmica Alocação Particionada 1. Alocação Particionada Estática � A memória era dividida em pedaços de tamanho fixo, chamados partições e era definido em função do tamanho dos programas que executariam no ambiente; � Alteração no tamanho de uma partição, o sistema deveria ser desativado e reinicializado com nova configuração. Sistema Operacional Partição 1 Partição 2 Partição 3 2 Kb 5 Kb 8 Kb E A B 2 Kb 5 Kb 8 Kb Alocação Particionada � No código absoluto, todas as referências a endereços no programa são posições físicas na memória principal. � Os programas só podiam ser carregados e executados em apenas uma partição específica, mesmo se outras estivessem disponíveis; Sistema Operacional Partição 1 Partição 2 Partição 3 2 Kb 5 Kb 8 Kb E A C B D 2 Kb 1 Kb 4 Kb 3 Kb 6 Kb 2. Alocação Particionada Estática Absoluta Alocação Particionada � Evolução � O código passa a ser 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, ou seja, os programas puderam ser executados a partir de qualquer partição. Sistema Operacional Programa C Programa A Programa B 2 Kb 5 Kb 8 Kb E 3Kb D 6 Kb 3. Alocação Particionada Estática Relocável Alocação Particionada � Para controlar as partições alocadas, a gerência de memória mantém uma tabela; � Quando um programa é carregado na memória, o sistema percorre a tabela para localizar uma partição livre. Partição Tamanho Livre 1 2 3 2 Kb 5 Kb 8 Kb Não Não Sim 3. Alocação Particionada Estática Relocável Alocação Particionada � Na alocação de memória estática, a proteção baseia- se em dois registradores, que indicam os limites inferior e superior da partição onde o programa está sendo executado; � Se o programa tentar acessar uma posição de memória fora dos limites, ele é interrompido e uma mensagem de erro é gerada; � Fragmentação Interna: Quando os programas não preenchem totalmente as partições onde são carregados; � Problema decorrente da alocação fixa das partições. � Características Alocação Particionada � Elimina-se o conceito de partições fixas; � Cada programa utilizará o espaço necessário, tornando essa área sua partição; � Elimina-se o problema da fragmentação interna; � Contudo, quando os programas forem sendo finalizados e deixando espaços cada vez menores na memória, não permitirão que novos programas ingressem na memória principal; � Esse problema é chamado de fragmentação externa. 4. Alocação Particionada Dinâmica Alocação Particionada Sistema Operacional 15 Kb Sistema Operacional Programa E6 Kb 4 Kb Programa B2 Kb Sistema Operacional Programa E Programa D Programa C 6 Kb 1 Kb 3 Kb Programa B2 Kb 3 Kb Área Livre 3 Kb Área Livre Área Livre Fragmentação Externa 4. Alocação Particionada Dinâmica Alocação Particionada Solução 01: � Apenas os espaços livres adjacentes são reunidos, produzindo áreas livres de tamanho maior. Solução 02: � Relocação de todas as partições ocupadas, eliminando os espaços livres entre elas e criando uma única área livre contígua;� Sistema tenha a capacidade de mover os diversos programas da memória principal, ou seja, relocação dinâmica. 4. Alocação Particionada Dinâmica Alocação Particionada � Os S.O. implementam basicamente três estratégias para determinar em qual área livre um programa será carregado para execução: 1. Best-fit � A melhor partição é escolhida, ou seja, aquela em que o programa deixa o menor espaço sem utilização; � A lista de áreas livres está ordenada por tamanho, diminuindo o tempo de busca por uma área desocupada; � Desvantagem: A memória fica com pequenas áreas não contíguas, aumentando o problema da fragmentação. Estratégias de Alocação de Partição 2. Worst-fit � A pior partição é escolhida, ou seja, aquela em que o programa deixa o maior espaço sem utilização; � Diminui o problema da fragmentação: deixa espaços livres maiores que permitem a um maior número de programas utilizar a memória; 3. First-fit � A primeira partição livre de tamanho suficiente para carregar o programa é escolhida; � Das três estratégias, esta é a mais rápida, consome menos recursos. Estratégias de Alocação de Partição Sistema Operacional Programa C Programa A 4 Kb 5 Kb 3 Kb Sistema Operacional Programa C Programa A 1 KbBest-fit 1 Kb 1 KbWorst-fit 1 KbFirst-fit Estratégias de Alocação de Partição � As três estratégias de alocação podem ser visualizadas abaixo: � Introduzida para contornar o problema da insuficiência de memória principal; � Evita que um processo fique esperando na memória principal por algum evento, ou seja, programas que esperam por memória livre para serem executados, são transferidos da memória principal para a memória secundária. � Posteriormente são transferidos novamente a memória principal e podem continuar sua execução como se nada tivesse ocorrido. � Retirar da memória principal aquele processo com menores chances de ser executado; (evitar swapping desnecessário) Swapping Sistema Operacional Programa E Programa D Programa C Programa B Programa A R D Swap out Arquivo de Swap Sistema Operacional Programa E Programa R Programa C Programa B Área Livre Swap in Memória Principal Memória Principal Swapping � Retirada do processo da memória é chamado de swap out; � Recolocação do processo para a memória é chamado de swap in; � O sistema precisa oferecer um loader que implemente a relocação dinâmica de programas; � A relocação é realizada através de um registrador denominado registrador de relocação; � Programas podem ser carregados em qualquer posição da memória. OBS.: Loader (ou carregador) é o utilitário responsável por carregar na memória principal um programa para ser executado. Podendo ser do tipo: • Absoluto: o loader só necessita conhecer o endereço de memória inicial e o tamanho do módulo para realizar o carregamento. • Relocável: o programa pode ser carregado em qualquer posição de memória, e o loader é responsável pela relocação no momento do carregamento. Swapping Conclusão � Os algoritmos de gerenciamento de memória para sistemas operacionais multiprogramados vão desde a abordagem de sistemas monousuários simples à segmentação paginada; � Programas e dados devem estar na memória principal antes que o sistema possa executá-los ou referencia-los; � Existem várias técnicas que podem ser utilizadas para melhorar o desempenho do sistema ou permitir com que a memória seja melhor utilizada; � Técnicas como Overley, Swapping e Memória Virtual trouxeram benefícios tanto para a otimização do sistema quanto da memória principal;
Compartilhar