Sistemas Operacionais Gerenciamento de memória A multiprogramação implica em manter-se vários processos em memória. A memória necessita ser alocada de forma eficiente para permitir o máximo possível de processos Existem diferentes técnicas para gerência que dependem do hardware do processador. de memória, Gerenciamento de memória Um sistema de memória possui pelo menos dois níveis: o Memória principal: acessada pela CPU o Memória secundária: discos Gerenciamento de memória • Programas são armazenados em disco o Executar um programa se traduz em transferi-lo da memória secundária à memória primária Gerenciamento de memória • Qualquer memória Monotarefa: gerência é simples Multitarefa: complexa • Algoritmos de dependem de hardware da máquina sistema operacional gerência facilidades tem gerência de de memória disponíveis pelo Gerenciamento de memória Memória lógica e memória física Memória lógica o É aquela que o processo “enxerga” o Endereços lógicos são aqueles manipulados por um processo Gerenciamento de memória Memória lógica e memória física Memória física Implementada pelos circuitos integrados de memória. Endereços físicos são aqueles que correspondem a uma posição real de memória. Gerenciamento de memória Endereço lógico versus endereço físico Espaço lógico de um processo é diferente do espaço físico. Endereço lógico: gerado pela CPU (endereço virtual) Endereço físico: endereços enviados para a memória RAM Programas de usuários “vêem” apenas endereços lógicos. Endereços lógicos são transformados em endereços físicos no momento de execução dos processos. Gerenciamento de memória Unidade de gerência de memória • Memory Management Unit (MMU) • Hardware que faz o mapeamento entre endereço lógico e endereço físico Gerenciamento de memória Unidade de gerência de memória Gerenciamento de memória Um programa deve ser transformado em um processo para poder ser executado. Alocação de um descritor de processos Alocação de áreas de memória para código, dados e pilha Transformação é feita através de uma série de passos, alguns com a ajuda do próprio programados. Compilação, diretivas de compilação e/ou montagem, ligação, etc... Amarração de endereços (binding) Gerenciamento de memória Amarração de endereços (binding) Atribuição de endereços (posições de memória) para código e dados pode ser feita em três momentos diferentes. Em tempo de compilação Em tempo de carga Em tempo de execução . Gerenciamento de memória Amarração de endereços (binding) Gerenciamento de memória Amarração de endereços (binding) Atribuição de endereços para instruções e dados pode ser feita em três momentos diferentes: Em tempo de compilação: se a localização da memória é conhecida a priori, código absoluto pode ser gerado; tem que recompilar o código se a alocação inicial mudar Em tempo de carga: deve gerar código relocável se a localização da memória não é conhecida em tempo de compilação Em tempo de execução: a atribuição é adiada até o tempo de execução se o processo puder ser movido durante sua execução de um segmento de memória para outro. Precisa de suporte de hardware para mapear endereços (ex.: registradores base e limite) Gerenciamento de memória Gerenciamento de memória Carregador relocador Gerenciamento de memória Gerenciamento de memória Alocação contígua simples • Sistema mais simples • Memória principal é dividida em duas partições: o Sistema operacional (parte baixa de memória) o Processo de usuário (restante da memória) • Usuário tem controle total da memória podendo inclusive acessar a área do sistema operacional. Ex.: DOS (não confiável) Gerenciamento de memória Evolução: inserir proteção através de mecanismos de hardware + software Registradores de base e de limite o Memory Management Unit (MMU) Gerenciamento de memória Alocação contígua particionada • Existência de múltiplas partições • Imposta pela multiprogramação • Filosofia: o Dividir a memória em blocos (partições) o Cada partição pode receber um processo (programa) o Grau de multiprogramação é fornecido pelo número de partições * * Importante: não considerando a existência de swapping Gerenciamento de memória Alocação contígua particionada • Duas formas básicas: Alocação contígua com partições fixas (estática) Alocação contígua com partições variáveis (dinâmica) Gerenciamento de memória Alocação contígua particionada • O sistema operacional é responsável pelo controle das partições mantendo informações como: o Partições alocadas o Partições livres o Tamanho das partições Gerenciamento de memória Alocação contígua particionada dinâmica Gerenciamento de memória Alocação contígua particionada fixa • Memória disponível é dividida em partições de tamanho fixo que podem ser do mesmo tamanho ou não Gerenciamento de memória Alocação contígua particionada fixa Questões: o Processos podem ser carregados em qualquer partição? Depende se o código é absoluto ou relocável o Número de processos que podem estar em execução ao mesmo tempo? Sem swapping – igual ao número de partições (máximo) Com swapping – maior que o número de partições o Se o programa é maior que o tamanho da partição? Não executa a menos que se empregue um esquema de overlay Gerenciamento de memória Técnica de Overlay ● Enquanto na alocação contígua simples os programas estão limitados ao tamanho da área disponível na memória principal para o usuário, na técnica de Overlay os programas são divididos em módulos, de forma que seja possível a execução independente de cada módulo, utilizando uma mesma área da memória Gerenciamento de memória Técnica de Overlay Exemplo de Overlay: Um programa que consista em um módulo principal e outros dois módulos independentes, um correspondente ao cadastro e outro, à impressão. Quando o programa é carregado, apenas o módulo principal é introduzido na memória, os demais aguardam em memória secundária. Quando um dos outros módulos for referenciado pelo módulo principal, aquele será carregado na memória principal, na área de overlay Gerenciamento de memória Técnica de Overlay A definição das áreas de overlay é feita pelo próprio programador, através de comandos específicos da linguagem de programação. ● O tamanho da área de overlay deve ser igual ou maior ao tamanho do maior módulo. ● Como vantagem, a técnica de overlay possibilita um melhor aproveitamento da memória principal. ● Sua utilização exige cuidado, pois pode trazer implicações tanto na manutenção como no desempenho das aplicações, devido à possibilidade de transferências excessivas dos módulos entre a memória principal e a memória secundária. Gerenciamento de memória Alocação contígua particionada fixa Gerenciamento de partições fixas Com código absoluto o o Um processo só pode ser carregado na área de memória (partição) para a qual foi compilado Pode haver disputa por uma partição mesmo que tendo outras livres Processo é mantido no escalonador de longo prazo (termo) Empregar swapping Gerenciamento de memória Alocação contígua particionada fixa Gerenciamento com código relocável Um processo de tamanho menor ou igual ao tamanho da partição pode ser carregado em qualquer partição disponível Se todas as partições estão ocupadas, duas soluções: - Processo é mantido no escalonador de longo prazo (termo) - Empregar swapping (escalonador a médio prazo) Gerenciamento de memória Swapping Processo necessita estar na memória para ser executado Se não há mais espaço em memória é necessário fazer um rodízio de processos em memória Um processo pode ser temporariamente movido para fora da memória (backing store) e então trazido de volta para a memória para continuar a execução Gerenciamento de memória Swapping Backing store – memória secundária suficientemente grande para armazenar cópias de todos os processos de usuários A maior parte do tempo de swap é tempo de transferência; tempo de swap é proporcional ao tamanho do processo Existem variantes do sistema de swapping utilizados em sistemas como UNIX, Linux e Windows Roll out, roll in – swapping variante usado para algoritmos de escalonamento baseados em prioridade; processo de baixa prioridade é movido da memória para que processos de alta prioridade possam ser carregados e executados Gerenciamento de memória Swapping sistema operacional mantém uma fila de processos que estão prontos para executar, que possuem imagens da memória em disco Gerenciamento de memória Alocação contígua particionada fixa Fragmentação Interna • Problema da alocação fixa é uso ineficiente da memória principal • Um processo, não importando quão pequeno seja, ocupa uma partição inteira Gerenciamento de memória Alocação contígua particionada fixa Fragmentação Interna Gerenciamento de memória Alocação contígua particionada fixa Paliativo para reduzir fragmentação interna Partições de tamanho diferentes Gerenciamento de memória Algoritmos para alocação de partições fixas Se código é absoluto a alocação é determinada na fase de montagem, compilação ou ligação. Se código é relocável: - Partições de igual tamanho * Não importa qual partição é utilizada - Partições de diferentes tamanhos * Atribui ao processo a menor partição livre capaz de armazena o processo * Processo são atribuídos a partições de forma a minimizar o desperdício de memória (fragmentação interna) Gerenciamento de memória Algoritmos para alocação de partições fixas Gerenciamento de memória Alocação particionada dinâmica • Objetivo é eliminar a fragmentação interna • Processos alocam memória de acordo com suas necessidades • Partições são em número e tamanho variáveis Gerenciamento de memória Alocação particionada dinâmica Gerenciamento de memória Alocação particionada dinâmica Fragmentação externa • A execução de processos pode criar pedaços livres de memória • Pode haver memória disponível, mas não contígua Gerenciamento de memória Alocação particionada dinâmica Fragmentação externa Gerenciamento de memória Alocação particionada dinâmica Soluções possíveis fragmentação externa Reunir espaços adjacentes de memória Empregar compactação Relocar as partições de forma a eliminar os espaços entre elas e criando uma área contígua Desvantagem: Consumo do processador Acesso a disco Acionado somente quando ocorre fragmentação Necessidade de código relocável Gerenciamento de memória Alocação particionada dinâmica Gerenciamento de partições dinâmicas • Determinar qual área de memória livre será alocada a um processo • Sistema operacional mantém uma lista de lacunas o Pedaços de espaços livres em memória • Necessidade de percorrer a lista de lacunas sempre que um processo é criado Gerenciamento de memória Alocação particionada dinâmica Algoritmos para alocação contígua dinâmica Best fit Minimizar tam_processo - tam_bloco o Deixar espaços livres os menores possíveis Worst fit Maximizar tam_processo - tam_bloco o Deixar espaços livres os maiores possíveis First fit tam_bloco > tam_processo Circular fit Variação do first-fit Gerenciamento de memória Algoritmo alocação particionada dinâmica Gerenciamento de memória Algoritmo alocação particionada dinâmica Desvantagem de partições variáveis Tende a criar lacunas de memória livres que individualmente podem não ser suficientes para acomodar um processo Pode haver memória livre, mas não contígua Fragmentação externa Gerenciamento de memória Algoritmo alocação particionada dinâmica Desvantagem de partições variáveis Gerenciamento de memória Soluções possíveis para fragmentação externa Reunir espaços adjacentes de memória Empregar compactação Relocar as partições de forma a eliminar os espaços entre elas e criando uma área contígua o Desvantagem: Consumo do processador Acesso a disco Acionado somente quando ocorre fragmentação Necessidade de código relocável Gerenciamento de memória Problemas com alocação particionada o Necessidade de uma área contígua de memória (tamanho do processo) o Fragmentação interna (partições fixas) ou externa (partições variáveis) Gerenciamento de memória Nova abordagem é considerar a existência de um espaço de endereçamento lógico e de um espaço de endereçamento físico O espaço de endereçamento físico não precisa ser contíguo o Necessita “mapear” o espaço lógico no espaço físico Dois métodos básicos: • Paginação • Segmentação