680 likes | 893 Views
Gerenciamento de Memória (Paginação e Memória Virtual). Prof. Alexandre Monteiro Recife. Contatos. Prof. Guilherme Alexandre Monteiro Reinaldo Apelido: Alexandre Cordel E-mail/ gtalk : alexandrecordel@gmail.com greinaldo@fbv.edu.br Site: http://www.alexandrecordel.com.br/fbv
E N D
Gerenciamento de Memória (Paginação e Memória Virtual) Prof. Alexandre Monteiro Recife
Contatos • Prof. Guilherme Alexandre Monteiro Reinaldo • Apelido: Alexandre Cordel • E-mail/gtalk: alexandrecordel@gmail.com greinaldo@fbv.edu.br • Site: http://www.alexandrecordel.com.br/fbv • Celular: (81) 9801-1878
A memória pode ser vista como um array (vetor) de células de armazenamento (palavras ou bytes), cada célula com seu endereço Memória
Memórias física, lógica e virtual • Memória física • É a memória implementada pelo hardware, normalmente associada a memória principal - RAM. • Memória lógica de um processo • É a memória endereçada pelas instruções de máquina do processo. • Memória Virtual • É uma memória implementada pelo SO, com o auxílio da memória secundária (disco rígido). Comumente, é implementada através de paginação ou segmentação. • Normalmente, é maior que a memória física do computador.
Gerência de Memória • Rotinas do SO que controlam o uso da memória. • Controle de quais partes da memória encontram-se livres e quais estão em uso • Alocação da memória de acordo com as necessidades dos processos • Liberação da memória alocada após o término de um processo • Transferência do processo, ou parte dele, entre a memória principal e a memória secundária
Multiprogramação através de Swapping • O programa que perde a CPU é copiado p/ disco, enquanto o programa que ganha a CPU é transferido do disco p/ a memória principal reg. limite Monitor Espaço do Usuário Swap-in U1 Swap-out U2
Efeito da Multiprogramação • Utilização da CPU como função do grau de multiprogramação (= número de processos na memória)
Realocação e Proteção • São dois problemas introduzidos pela Multiprogramação: • Realocação: não se sabe de antemão em qual região de memória o processo vai ser executado • Proteção: evitar que um processo acesse uma região usada por outro processo
Partições Múltiplas • Com multiprogramação, é conveniente ter vários programas na memória ao mesmo tempo para que a CPU seja rapidamente alternada entre eles. • Solução: dividir a memória em partições (cada partição irá conter um programa) • partições fixas (normalmente o hw usa registradores limite inferior e limite superior) • partições variáveis (normalmente o hw usa registradores base e limite)
Memória com Partições Fixas (a) Filas de entrada separadas: (Por tamanho de Processo x Partição) (b) Fila única para todas as partições: (Simples de Implementar)
Partições Fixas • Exemplo: memória de 256K • espaço do SO: 64K • espaço para processos pequenos: 16K • espaço para processos médios: 48K • espaço para processos grandes: 128K
Memória com Partições Fixas, mas de tamanho variável Espaço para Expansão Espaço para Expansão
Partições Variáveis • Os tamanhos das partições variam de acordo com a necessidade • Tamanho e número de partições variam dinamicamente • Elimina a fragmentação interna e introduz a fragmentação externa • Mais difícil de implementar • O SO mantém uma lista indicando quais partes da memória estão disponíveis e quais estão ocupadas. • As áreas disponíveis são denominadas lacunas(holes) • Quando um processo chega para ser executado, a lista de lacunas é consultada e é escolhida uma lacuna de tamanho suficiente
Partições Variáveis JOB 1 2 3 4 5 Memória 60K 100K 30K 70K 50K Tempo 10 5 20 8 15
Partições Variáveis: Algoritmos de Alocação de área livre • First Fit – percorre a lista e aloca o primeiro espaço encontrado • Next Fit – como first Fit, só que a partir da posição na lista onde foi feita a alocação anterior • Best Fit – percorre toda a lista e aloca o menor possível espaço epode deixar fragmentos muito pequenos para alocação para outros processos • WorstFit – percorre toda a lista e aloca o maior possível espaço. OBS. Em muitos sistemas, o overhead adicional exigido pelos Best/WorstFit não valem a pena para obter uma alocação mais efetiva.
Partições Variáveis: Algoritmos de Alocação de área livre • Qualquer um dos algoritmo anteriores é mais eficiente se: • Houverem 2 listas: lista de partições usadas + lista de espaços livres • Listas são mantidas ordenadas por tamanho (nr. de unidades de alocação) Problema: há uma complexidade extra quando ocorre uma liberação de memória (precisa-se verificar se há espaços adjacentes livres e inserir o novo espaço na posição correta da lista). • Alternativa: • Quick Fit: mantém listas separadas por tamanho do espaço livre (2K, 4K, 8K, etc.) • Problema: ao liberar memória, o novo espaço criado precisa ser inserido na fila correspondente (possivelmente, após combinação com áreas vizinhas)
Atividade Valendo NOTA • Estude e siga as orientações descritas no material de aula. • Utilizando Listas ou Vetores, implemente os 5 algoritmos citados anteriormente, de modo que resolvam os problemas de alocação de espaços livres de memória. • Deve-se selecionar o algoritmo e este deve alocar corretamente o espaço de memória mais conveniente de acordo com as regras de funcionamento de cada uma dos algoritmos. • Apresentação ao final do semestre.
Swapping • Em sistemas com compartilhamento de tempo (timesharing) memória principal pode não ser suficiente para todos os processos (ex. muitos processos interativos de muitos usuários) • Ideia básica: usar espaço em disco como extensão da memória RAM, e colocar lá os processos enquanto estão bloqueados, carregando-os de volta para a memória assim que são desbloqueados • Duas Situações: • Copiar a imagem inteira (Swapping) • Permitir que processo fique parcialmente em memória, e parcialmente em disco (paginação) -> Memória Virtual
Swapping • Quando um processo é bloqueado (espera por E/S) ele pode ser swapped out, e depois swapped in para memória principal. • Maior número de processos ativos, aumentando a utilização da CPU • OBS 1: Buracos de memória não utilizada de tamanho qualquer (Fragmentação de Memória) • OBS 2: Um mesmo processo pode ocupar diferentes partições ao longo de sua execução
Fragmentação de Memória • São perdas (desperdício) de memória: • fragmentação interna: memória é perdida dentro da partição alocada (é um desperdício de espaço dentro da partição usada pelo processo) • fragmentação externa: ocorre quando existe espaço disponível mas este é pequeno demais para os processos que estão à espera (perda de espaço fora das partições alocadas)
Swapping • Principal problema do swapping com partições de tamanho variável: • Manter a informação sobre espaços não utilizados (livres) • Evitar uma fragmentação externa da memória (= muitos espaços pequenos não utilizados) Compactação de memória é muito cara – da ordem de segundos para alguns MBs de RAM.
Swapping • Como lidar com processos que crescem (em demanda de memória)? • Tentar alocar uma partição vizinha do processo de uma partição não usada (nem sempre é possível) • Alocar uma partição conjunta para a pilha e o heap, e fazê-los crescer em sentidos opostos. • Se processo usa todo espaço de memória disponível, fazer um swap out, e um swap in em uma partição maior (mas, se disco de swap está cheio, processo precisa ser terminado)
Gerenciamento de Espaço Livre • Divide a memória em unidades de alocação de n bytes e representa a ocupação (livre/ocupado) de lotes de unidades usando um bit map(b)ou uma lista encadeada (c). • Cada nó contém o endereço inicial e o tamanho de uma partição ocupada ou livre.
Gerenciamento de Espaço Livre • Quando o processo é swapped out, a lacuna correspondente precisa ser combinada com espaços vizinhos livres. • Quando processo é swapped in, percorre-se a lista buscando um espaço livre suficientemente grande (lista geralmente ordenada por endereços de memória) • Quando X é swapped out: quatro combinações de nós na lista
É necessária, quando o total de memória necessária para um conjunto de processos excede o tamanho da memória física. Também aqui, usa-se parte do disco como extensão da memória RAM. A grande maioria dos SO’s (exceto alguns para tempo real), implementam Memória Virtual. MV usa a técnica de paginação: Memória física e espaço de endereçamento lógico de cada processo são divididos em partições de mesmo tamanho: Espaço do processo é dividido em páginas Memória é dividida em molduras de página Em vez de fazer o swap in/out de uma imagem inteira de processo, cada página pode ser movida do disco para a memória e vice-versa. Memória Virtual
Paginação • Requer da existência de suporte por hardware (MemoryManagement Unit- MMU) • MMU intercepta qualquer acesso à memória (p/ instruções e dados) • Mapeia endereços lógicos para endereços físicos (através de uma Tabela de Página) • Quando a página acessada não está em memória, gera uma interrupção de falta de página (Page Fault), que causa a interrupção do processo em execução e o seu bloqueio, até que a página tenha sido transferida para a memória.
Paginação • A memória física é dividida em um número de partições de mesmo tamanho, denominadas páginas físicas,quadros ou framesou molduras. • A memória lógica é dividida em partições do mesmo tamanho, denominadas páginas lógicas (ou, simplesmente, páginas) • Cada página lógica é carregada em uma moldura de páginaquando o processo é carregado na memória principal. • Nessa ocasião, uma Tabela de Páginasé criada. • Permite que o espaço físico ocupado por um processo seja não contíguo.
Paginação A1 A2 A3 A4 A 4 B1 B 3 B2 C 4 B3 C1 D 5 C2 C3 C4 Processos A, B, C estão prontos Exemplo: número de páginas/processo
Paginação A1 A1 A2 A2 A3 A3 A4 A4 D1 D2 D3 C1 C1 C2 C2 C3 C3 C4 C4 D4 D5 B termina D é submetido
Paginação Problemastantoemparticionamentofixoquantodinâmico: fixo – fragmentaçãointerna dinâmico – fragmentaçãoexterna e realocaçãodinâmica Solução: Processo é divididoempáginas (blocos de processos) MP é divididaemquadros de mesmotamanho Páginas/quadros/moldurassão de pequenotamanho(ex., 1K): fragmentaçãointernapequena. Paginaçãoeliminafragmentaçãoexterna. SO mantémumaTabelade Páginasporprocesso.
Paginação Processonãoprecisaestarcompletamentena MP (veremosadianteemMemória Virtual) Processonãoprecisaocuparáreacontíguaemmemória Endereçossãogeradosdinamicamenteem tempo de execução Somente um registradorentão, não é suficiente Tabela de Páginas
Exemplo em Memória Virtual Espaço de Endereçamento Virtual Página Virtual Espaço de Endereçamento Físico Moldura de Página
Tabela de Páginas • MMU com 16 páginas de tamanho 4 KB cada. • Endereço lógico: • Bits mais significativos = número da página • Bits menos significativos = deslocamento do endereço dentro de uma página
Paginação • Se um processo tem tamanho K, os seus endereços lógicos (endereços especificados nas suas instruções) vão desde 0 até K-1. Este é o espaço de endereçamento do processo. • Cada endereço lógico é quebrado em duas partes: • número da página p • deslocamento d (offset) • Endereço lógico: composto do par (número-da-página, deslocamento), onde número-página é usado como índice para uma entrada na Tabela de Páginas • Acontece relocação dinâmica, pois cada endereço lógico é traduzido em endereço físico em tempo de execução 15 10 9 0 Página (p) deslocamento (d)
Realocação Mapeamento de endereços virtuais em reais necessário, pois processos são alocados em espaço de MP dinamicamente Ex.: processo P1 P1: novo pronto executando bloqueado P1 em end. de MP 500 P1 passa para suspenso Ao voltar para MP P1 vai para end. 1024
Realocação Mapeamento eficiente endereço físico só calculado quando acesso a MP endereços definidos: lógico, relativo, físico Registradores: base – armazena o endereço inicial de MP do processo (quando o processo passa para executando) limite – armazena endereço final do processo Acesso ao endereço Z no programa if (Z + base <= limite) acesse Z+base senão “trap”
registrador limite comparador int Relocação endereço relativo registrador de base PCB somador programa imagem do processo na memória endereço absoluto dados pilha
Paginação • Processo pode ser executado contanto que haja um número mínimo de páginas na memória (as páginas sendo acessadas) • O espaço de endereçamento lógico é contiguo, o espaço físico equivalente é distribuído/separado. • A tradução é feita de forma transparente pela MMU, que além da TP, mantém um cache das páginas recentemente consultadas.
Em suma Paginação • Cada processo P possui a sua Tabela de Páginas, que precisa ser carregada na MMU a cada troca de contexto. • Para tal, cada entrada Tabela Processos(P) contém um ponteiro para a Tabela de Páginas de P. • O dispatcher é o encarregado de "carregar" a nova tabela de páginas na MMU. • Como qualquer acesso à memória ocorre através do mapeamento pela TP. Isso fornece também automaticamente um mecanismo de proteção...contanto que o preenchimento da tabela de página seja feita em modo privilegiado (supervisor)!! • => à medida que as páginas vão sendo alocadas, o núcleo preenche as entradas na tabela de página. • Além disto, kernel precisa manter informações sobre o conjunto de molduras livres na memória principal: • Para isso, usa-se uma tabela de molduras (tabela de moldura de páginas), com uma entrada por moldura, informando se o mesmo está alocado, e para qual processo.
Tabela de Páginas – bits de controle • Cada entrada da tabela possui alguns bits adicionais para implementar proteção • um bit para indicar se a página é de apenas leitura (readonly) • um bit para indicar se a página é válida ou inválida • Vejamos:
Controle de Acesso • A paginação pode ser facilmente estendida para incorporar controle de acesso para cada página: • além do endereço do quadro da memória, cada entrada da TP contém bits para o tipo de acesso permitido, podendo ser: somente-leitura, leitura-e-escrita ou somente-execução • se uma instrução viola o acesso permitido, a MMU gera outra interrupção (violação de acesso de memória) • a validade de uma operação sob um endereço lógico pode ser testada em paralelo com a obtenção do endereço físico correspondente. • Além disto, pode-se usar bits valido/inválido para marcar as páginas lógicas que efetivamente compõem o espaço de endereçamento lógico do processo • é útil para espaços de endereçamentos grandes e utilizados de forma descontínua • note-se que devido ao problema do não alinhamento de dados com os limites das páginas, esse tipo de controle de acesso não é muito preciso.
Entrada da Tabela de Páginas Cache desabilitado Modificada Presente/Ausente Número da moldura de página Referenciada Proteção
Implementação da Tabela de Páginas • Conjunto de registradores dedicados • Memória Principal • TLB ou Memória Associativa
Tabela de Páginas em Conjunto de Registradores Dedicados • Na mudança de processo em execução estes registradores são carregados com os valores correspondentes ao novo processo. • TP é mantida em um conjunto de registradores dedicados, que são carregados através de instruções privilegiadas (ex. DEC PDP-11) • Pró: não necessita de MMU e tradução é veloz. • Contra: número de entradas é pequeno (tipicamente, de 16 a 64)