550 likes | 637 Views
Gerência de Memória. Fundamentos Swapping Alocação Contígua de memória Paginação Segmentação Segmentação com Paginação. Fundamentos. O programa deve ser levado à memória e colocado em um processo para ser utilizado;
E N D
Gerência de Memória • Fundamentos • Swapping • Alocação Contígua de memória • Paginação • Segmentação • Segmentação com Paginação
Fundamentos • O programa deve ser levado à memória e colocado em um processo para ser utilizado; • Fila de Entrada (Input queue) – Coleção de processos no disco que está esperando para ser levados à memória para execução; • Um programa de usuário passa por várias etapas antes de ser executado
Associação de Instruções e dados para Memória • Tempo de Compilação: Se a Posição de memória for conhecida em tempo de compilação, um código absoluto pode ser gerado; O código deverá ser recompilado se a posição de início mudar; • Tempo de Carga: Deve ser gerado um código relocável, se a localização na memória não for conhecida em tempo de compilação; • Tempo de Execução: Se o processo puder ser movido durante a execução de um segmento de memória para outro, a associação deverá ser retardada até o tempo de execução. Hardware precisa ter suporte a mapeamento de endereços (registradores base e limite). Associação de instruções e dados para endereços de memória podem Acontecer em três diferentes estágios
Espaço de Endereçamento Lógico vs. Físico • O conceito de um espaço de endereçamento lógico que é limitado a um espaço de endereçamento físico separado é central à um gerenciamento de memória adequado • Endereço Lógico – gerado pela CPU, também conhecido como endereço virtual; • Endereço Físico – endereço visto pela unidade de memória (registrador de endereço de memória) - MMU • Os métodos de resolução de endereços Lógicos e Físicos geram endereços iguais em tempo de carga e de compilação, Endereços lógicos (virtuais) e físicos são diferentes quando se usa o esquema de resolução de endereços em tempo de execução
Unidade de Gerência de Memória (MMU) • Dispositivo de hardware que mapeia endereços virtuais para endereços físicos; • No esquema do MMU, o valor do registrador de relocação (base) é adicionado a todo endereço gerado por um processo de usuário no momento em que ele é enviado para a memória; • O programa de usuário negocia com endereços lógicos, nunca vê o endereço físico real;
Carga Dinâmica • Rotina não é carregada até que seja chamada • Melhor utilização do espaço de memória, rotinas não utilizadas nunca são carregadas; • Útil quando há necessidade de grande quantidade de código para lidar com casos que ocorrem com pouca freqüência; • Carga Dinâmica não requer suporte especial por parte do sistema operacional, é implementado através de projeto de programa;
Ligação Dinâmica • Ligação é adiada até o tempo de execução (ver 4º slide) • Pequeno trecho de código, stub, utilizado para localizar a rotina de biblioteca apropriada residente na memória (ou não); • O Stub substituí a si mesmo pelo endereço da rotina, e executa a rotina • Sistema Operacional precisam checar se a rotina está edereçada na memória; • Ligação dinâmica é particularmente útil para bibliotecas (correções de bugs)
Overlays • Manter em memória apenas as instruções e dados que são necessários em determinado momento; • Necessário quando um processo é maior do que o montante de memória alocado a ele; • Implementado pelo usuário, não necessita de suporte especial do Sistema Operacional, programar e projetar as estruturas de overlay é complexo.
Swapping • Um processo pode ser removido temporariamente da memória para um armazenamento auxiliar e, em seguida, retornado à memória para continuar sua execução; • Backing store – Disco grande e rápido o suficiente para armazenar uma cópia de todas as imagens de memória de todos os usuários, deve fornecer acesso direto a essas imagens de memória; • Roll out, roll in – Uma variante de swapping é utilizada para algoritmos de escalonamento baseado em prioridade, processos de baixa prioridade são descarregados e é carregado e executado um processo de prioridade mais alta (swapped); • A Maior parte de tempo de swap é o tempo de transferência; O tempo total de transferência é proporcional à quantidade de memória trocada; • Muitas diferentes versões de swapping são encontradas em muitos sistemas (Unix, Linux and Windows);
Visão Esquemática de Swapping • Problema de I/O • Manter o job em memória enquanto ele estiver envolvido em I/O; • Executar I/O somente em buffers de SO
Alocação Contígua de Memória • Memória principal geralmente dividida em duas partições: • Sistema Operacional residente, normalmente carregado na memória baixa (vetor de interrupção); • Processos de usuário ficam na memória alta; • Alocação com partição simples • Esquema do registrador de relocação utilizado para proteger processos de usuário de outros, e de mudanças do código e dados do Sistema Operacional; • Registrador de relocação contém o valor do menor endereço físico, registrador limite contém a faixa de endereços lógicos, cada endereço lógico deve ser menor que o valor do registrador limite;
Suporte de Hardware para os registradores de relocação e limite
Alocação Contígua (Cont.) • Alocação com Múltiplas Partições • Hole (Buraco) – Bloco de memória disponível, blocos de vários tamanhos disponíveis na memória; • Quando um processo chega, é alocado memória de um hole grande o suficiente para acomodá-lo; • Sistema operacional mantém informações sobre: • A) partições alocadas b) Partições livres (hole) OS OS OS OS process 5 process 5 process 5 process 5 process 9 process 9 process 8 process 10 process 2 process 2 process 2 process 2
Problema de alocação de Memória Dinâmica • First-fit: Aloca o primeiro bloco de memória grande o suficiente • Best-fit: Aloca o menor bloco grande o suficiente; deve procurar em toda lista, a menos que a lista esteja ordenada por tamanho. Produz o menor bloco restante. • Worst-fit: Aloca o maior bloco; Deve procurar também em toda a lista. Gera o maior bloco restante. Como atender a um pedido de tamanho n de uma lista de blocos de memória livres: First-fit e Best-fit são melhores em termos de redução de tempo e utilização da memória
Fragmentação • Fragmentação Externa – Existe espaço total na memória para satisfazer uma requisição, mas não é contíguo; • Fragmentação Interna – A memória alocada pode ser um pouco maior do que a memória necessária; esta diferença de tamanho é memória interna à partição, que não é utilizada; • Reduzir fragmentação externa através da compactação • Trocar de posição o conteúdo da memória, para reunir toda a memória livre em um grande bloco; • Compactação só será possível se a relocação for dinâmica, e for feita em tempo de execução;
Paginação • Espaço de endereçamento físico de um processo pode ser não contíguo; o processo é alocado na memória física, sempre que esta está disponível; • Divide a memória física em blocos de tamanho fixo, chamados frames-quadros (tamanho é potência de 2, variando entre 512 bytes e 16 megabytes); • Divide a memória lógica em blocos de tamanho igual, chamados pages-páginas; • Mantém uma lista de todos os frames livres; • Para rodar um programa de n pages, precisa encontrar n frames livres e carregar o programa; • Mantém uma tabela de pages para traduzir o endereço lógico para físico; • Fragmentação interna
Esquema de Tradução de Endereços • Endereços gerados pela CPU são divididos em: • Número de página(p) – Usado como um índice em uma tabela de páginas, a qual contém o endereço base de cada página na memória física • Deslocamento de página (offset)(d) – Combinado com o endereço de página para definir o endereço de memória física que é enviado para a unidade de memória
Frames Livres (a) Antes da alocação (b) Depois da Alocação
Implementação da Tabela de Páginas • A tabela de página é mantida na memória principal; • Registrador Base da Tabela de Página (PTBR)aponta para a tabela de página; • Registrador de Tamanho da Tabela de Página (PTLR), indica o tamanho da tabela de página • Neste esquema todo acesso a dados/instruções requerem dois acessos à memória. Um para a tabela de página e outro para o dado/instrução; • O problema dos dois acessos à memória pode ser resolvido através do uso de um cache de hardware especial, pequeno e de busca rápida, chamado Registradores Associativos ou Translation look-aside buffers (TLBs)
Registradores Associativos • Registradores Associativos – busca paralela Tradução de Endereço (A´, A´´) • Se A´ está nos Registradores Associativos, pegue o endereço do frame • Se não pegue o endereço do frame da tabela de página na memória Page # Frame #
Tempo Efetivo de Acesso • Associative Lookup = unidades de tempo • Assumindo ciclo de memória de 1 microssengundo • Taxa de Acerto (Hit Ratio) – porcentagem de vezes que o nº da página é encontrado nos registradores associativos; está diretamente associada ao nº de registradores associativos; • Taxa de Acerto = • Tempo Efetivo de Acesso (EAT) EAT = (1 + ) + (2 + )(1 – ) = 2 + –
Proteção de Memória • Proteção de memória é implementado pela associação de um bit de proteção com cada quadro; • Um bitVálido-Inválidoé associado a cada entrada na tabela de páginas: • “válido”, indica que a página associada está no espaço de endereçamento lógico do processo, portanto, é uma página legal (válida); • “Inválido”, indica que página associada não está no espaço de endereçamento lógico do processo.
Estrutura de Tabelas de Páginas • Paginação Hierárquica; • Tabela de Página Compartilhada; • Tabela de Página Invertida.
Tabelas de Páginas Hierárquicas • Quebrar o espaço de endereçamento lógico em múltiplas tabelas de páginas; • Uma técnica simples é uma tabela de página de dois níveis.
Exemplo de paginação de dois níveis • Um espaço de endereçamento lógico (de 32 bits, com página do tamanho de 4K) é dividido em: • Um nº de página consistindo em 20 bits • Um deslocamento de pagina consistindo em 12 bits • Paginamos a tabela de página , o nº da página é dividido em: • Nº de página de 10 bits • Um deslocamento de 10 bits • Assim, um endereço lógico torna-se: Onde p1 é um índice para a tabela de página externa e p2é o deslocamento dentro da página da tabela de página externa page number page offset p2 pi d 10 12 10
Esquema de Tradução de Endereços • Esquema de tradução de endereços com paginação de dois níveis de 32 bits
Tabelas de Páginas “Hashed” • Comum em espaços de endereçamento maiores que 32 bits • O número de página virtual é “hashed” em uma tabela de página. Esta tabela de página contém um “conjunto” de elementos “hashing” da mesma locação; • Números de página virtual são comparados neste “conjunto”, procurando por um igual. Se um endereço igual é encontrado, o quadro físico correspondente é extráído
Tabela de Página Invertida • Uma entrada para cada página real de memória; • Cada entrada consiste no endereço virtual da página armazenada naquela posição real de memória, com informações sobre o processo que é proprietário da página; • Diminuí a memória necessária para armazenar cada tabela de página, mas aumenta o tempo necessário de pesquisa na tabela quando ocorre uma referência de página; • Usa uma hash para limitar a pesquisa para uma entrada – ou, ao menos algumas – entradas de tabela de página
Páginas Compartilhadas • Código Compartilhado • Uma cópia de código (reentrante) compartilhado ente os processos (ex. Editores de texto, compiladores, ambientes gráficos); • Código compartilhado deve aparecer na mesma localização no espaço de endereçamento lógico de todos os processos; • Código e Dados Privados • Cada processo mantém uma cópia separada do código e dos dados; • As páginas de dados e códigos privados podem aparecer em qualquer lugar do espaço de endereçamento lógico;
Segmentação • Esquema de gerenciamento de memória que oferece suporte à visão de usuário da memória; • Um programa é uma coleção de segmentos. Um segmento é uma unidade lógica: Programa Principal, Procedimentos, Funções, Métodos, Objetos, Variáveis Locais, Variáveis Globais, Pilhas, Tabela de símbolos, arrays
1 4 2 3 Visão Lógica de Segmentação 1 2 3 4 user space physical memory space
Arquitetura de Segmentação • Endereço Lógico consiste de uma dupla: <nº do segmento, deslocamento>, • Tabela de Segmentos – mapeia endereços bidimensionais para endereços unidimensionais físicos; Cada entrada da tabela tem: • base – Contém o endereço físico de início no qual reside o segmento na memória; • limite – especifica o tamanho do segmento; • Registrador Base da Tabela de Segmentos (STBR) aponta para a localização da tabela de segmentos na memória; • Registrador de Tamanho da Tabela de segmentos (STLR) indica o número de segmentos usados pelo programa; o número de segmento s é legal se s < STLR
Arquitetura de Segmentação (Cont.) • Relocação. • Dinâmica • Por tabela de segmentação • Compartilhamento. • Segmentos Compartilhados • Mesmo número do segmento • Alocação. • First Fit/Best Fit • Fragmentação Externa
Arquitetura de Segmentação (Cont.) • Proteção. Associado com cada entrada na Tabela de segmento: • Bit de validação = 0 segmento ilegal • Privilégios de read/write/execute • Bits de proteção associados com segmentos; compartilhamento de código ocorre em nível de segmento; • Segmentos variam de tamanho, alocação de memória é um problema de alocação dinâmica de armazenamento; • Um exemplo de segmentação é mostrado no diagrama