Baixe o app para aproveitar ainda mais
Prévia do material em texto
CCT0011 – Sistemas Operacionais Aula 08 – Gerência de Memória Sistemas Operacionais Conteúdo da Aula Breve Revisão Última Aula Funções Espaço de Endereçamento Físico Espaço de Endereçamento Lógico Sistemas Operacionais Sumário • Funções básicas • Alocação contígua simples • Técnica de overlay • Alocação Particionada – Alocação Particionada Estática – Alocação Particionada Dinâmica – Estratégias de Alocação de Partição • Swapping Sistemas Operacionais Introdução A memória RAM é um recurso importante que deve ser gerenciado com muito cuidado. Ao longo dos anos, as pessoas descobriram o conceito de hierarquia de memórias, em que computadores têm alguns megabytes de memória caches muito rápidas, de custo alto e volátil, alguns gigabytes de memória principal volátil de velocidade e custo médios e alguns terabytes de armazenamento em disco não volátil de velocidade e custo baixos. A função do sistema operacional é abstrair essa hierarquia em um modelo útil e, então, gerenciar a abstração. Sistemas Operacionais Introdução A parte do sistema operacional que gerencia (parcialmente) a hierarquia de memórias é denominada gerenciador de memória. Sua função é gerenciar a memória de modo eficiente: 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-a quando esses processos terminam. Sistemas Operacionais Introdução Os primeiros computadores de grande porte (antes de 1960), microcomputadores (antes de 1970) e computadores pessoais (antes de 1980) não possuíam abstração de memória. Cada programa simplesmente considerava a memória física. O modelo de memória apresentado ao programador era um conjunto de endereços de 0 a algum máximo, cada endereço correspondendo a uma célula. Nestas condições, não era possível executar dois programas na memória simultaneamente. Ainda assim vária opções eram possíveis. Sistemas Operacionais Funções Básicas • Manter o maior número de processos na memória • Maximizar o compartilhamento da CPU e demais recursos • Swapping • Execução de programas maiores que memória disponível • Proteção • Compartilhamento Sistemas Operacionais O problema Em ambiente multiprogramado, é necessário: Subdividir a memória para acomodar múltiplos processos. Mas se poucos processos estão na memória, em boa parte do tempo estarão esperando por E/S e a CPU estará sub-utilizada. Então, deve-se alocar a memória de forma eficiente ao maior número de processos possíveis. Solução Gerenciador de Memória Sistemas Operacionais Alguns Requisitos do Gerenciador de Memória Relocação • O programador não deve se preocupar com o local onde o programa (processo) será carregado para execução. • Durante a execução, o processo poderá sair da memória e retornar para um local diferente, nesta mesma memória. • Referências devem ser resolvidas para endereços de memória física. Sistemas Operacionais Alguns Requisitos do Gerenciador de Memória Proteção • Processos não devem conseguir referenciar posições de memória em outros processos sem permissão.. • Em virtude da relocação, não é possível testar endereços em programas. • Com suporte de h/w, o teste deverá ser em tempo de execução. Sistemas Operacionais Alguns Requisitos do Gerenciador de Memória Compartilhamento • Deve-se permitir que vários processos possam acessar a mesma porção de memória. • O mecanismo de proteção deve ter flexibilidade. • Caso por exemplo, exclusão mútua. Sistemas Operacionais Alguns Requisitos do Gerenciador de Memória Organização lógica • Programas são normalmente separados em módulos, que podem ser escritos e compilados separadamente. • Graus diferentes de proteção podem ser atribuídos aos módulos. • Compartilhamento de módulos. • Manipulação de diferentes módulos de um mesmo executável pode ser melhor realizada através de segmentação. Sistemas Operacionais Alguns Requisitos do Gerenciador de Memória Organização física • Memória é organizada como uma hierarquia. • Se um programa precisa de mais memória do que o disponível na MP, a MS deverá ser utilizada. • Uso de memória cache. • Este gerenciamento deverá ser feito de forma transparente pelo SO. Sistemas Operacionais Particionamento Fixo Particionamento da memória em regiões fixas Se partições idênticas processos menores que o tamanho da partição podem ser carregados diretamente. Processos maiores exigirão overlay. Processos menores provocaram fragmentação interna e desperdício de MP. Sistemas Operacionais Particionamento Fixo Partições de tamanhos distintos • diminuem a ineficiência (não a elimina) • associa o processo à partição menor possível • aumenta a sobrecarga do gerenciamento (e.g., uma fila por partição ou fila única?) De qualquer forma o número de partições determina o número de processos no sistema. Processos pequenos utilizam de maneira ineficiente a memória relocação Sistemas Operacionais Alocação Contígua Simples A memória principal é dividida em duas áreas, uma para o sistema operacional e outra para o programa do usuário. O usuário tem controle total sobre toda a memória principal. Alguns sistemas implementam proteção através de um registrador que delimita as áreas do sistema operacional e do usuário. Memória Principal Sistema Operacional Área para programa Memória Principal Registrador Sistema Operacional Área para programa Sistemas Operacionais Alocação Contígua Simples Subutilização da memória Apesar de fácil implementação e do código reduzido, este tipo de alocação não permite a utilização eficiente dos recursos computacionais, pois apenas um usuário pode dispor desses recursos. Memória Principal Sistema Operacional Programa do usuário Área livre Sistemas Operacionais Alocação Particionada Estática Primeiros sistemas multiprogramáveis. A memória era dividida em pedaços de tamanho fixo, chamados de partição. O tamanho das partições, era estabelecido na fase de inicialização do sistema. Memória Principal Sistema Operacional 2 Kb 5 Kb 8 Kb Partição 1Partição Tabela de partições Tamanho 1 2 Kb 2 5 Kb 3 8 Kb Partição 2 Partição 3 Programas a serem executados: AE 3 Kb D 6 Kb C 1 Kb B 4 Kb 2 Kb Sistemas Operacionais Alocação Particionada Estática Alocação Particionada Estática Absoluta Inicialmente, os programas só podiam ser carregados e executados em apenas uma participação específica, mesmo se outras estivessem disponíveis. No código absoluto, todas as referências a endereços no programa são posições físicas na memória principal, ou seja, o programa só poderia ser carregado a partir do endereço de memória especificado no seu próprio código. Memória Principal Sistema Operacional 2 Kb 5 Kb 8 Kb Partição 1 Partição 2 Partição 3 A B D C E 3 Kb 6 Kb 1 Kb 4 Kb 2 Kb Sistemas Operacionais Alocação Particionada Estática Com a evolução dos compiladores, montadores, linkers e loaders, o código gerado deixou de ser absoluto e passa a ser relocável, todas as referências a endereços no programa são relativas ao início do código, desta forma os programas puderam ser executados a partirde qualquer partição. Memória Principal Sistema Operacional 2 Kb 5 Kb 8 Kb Programa C Programa A Programa B ED 6 Kb 3 Kb Memória Principal Sistema Operacional 1 2 3 Programa C Área livre Programa B Partição Tamanho Livre 1 2 Kb Não 2 5 Kb Sim 3 8 Kb Não Sistemas Operacionais Alocação Particionada Estática Proteção Neste esquema de alocação a proteção baseia- se em dois registradores, que indicam os limites inferior e superior da partição onde o programa está sendo executado. Memória Principal Sistema Operacional Endereço inicial Endereço final Memória Principal Sistema Operacional 1 Kb 3 Kb 5 Kb Programa C Programa A Programa E BD 6 Kb 4 Kb Tanto nos sistemas de alocação absoluta quanto relocável, os programas, normalmente não preenchem totalmente as partições onde são carregados. Este tipo de problema, decorrente da alocação fixa das partição, é conhecido como fragmentação interna. Sistemas Operacionais Particionamento Dinâmico • Número e tamanho das partições é variável. • Cada processo recebe a quantidade de memória que necessita. • Gerenciando buracos e processos. IC - UFF SO P1 320k SO SO P1 P3 288k SO SO P1 P2 P2 224k SO SO P1 P2 P3 P4 128k - sem espaço - SO faz swap out - SO escolhe P1 Sistemas Operacionais Particionamento Dinâmico Buracos começam a ser formados Tamanhos tendem a ser pequenos Necessidade de rearrumar os espaços SO SO P2 P3 P4 Sistemas Operacionais Particionamento Dinâmico Sistemas Operacionais Particionamento Dinâmico Políticas de alocação • Primeiro encaixe (o melhor) - first fit • seleciona o primeiro que encaixa, a partir do início • mais simples, mais rápido e melhor na maioria das vezes • Próximo encaixe (um pouco pior) – next fit • seleciona o primeiro que encaixa, a partir da última partição selecionada • usualmente seleciona para o final da MP • Melhor encaixe (o pior!) - best fit • de todas as partições, seleciona aquela imediatamente maior • mais custoso, maior grau de fragmentação externa Sistemas Operacionais Particionamento Dinâmico Buracos na memória: fragmentação externa Compactação: tempo perdido e relocação dinâmica (melhor com swapping) Sobrecarga maior que método fixo Em qualquer caso, relocação Então, o que fazer? Sistemas Operacionais Alocação Particionada Dinâmica Eliminado o conceito de partições de tamanho fixo. Memória PrincipalMemória Principal Sistema OperacionalSistema Operacional 4 Kb 1 Kb 3 Kb 5 Kb 2 Kb 15 Kb Programa C Programa B Programa A Programa E BA 2 Kb E 3 Kb C 1 Kb 4 Kb Sistemas Operacionais Alocação Particionada Dinâmica Fragmentação externa Memória Principal Sistema Operacional 4 Kb 3 Kb 5 Kb Programa C Programa A D 6 Kb Sistemas Operacionais Alocação Particionada Dinâmica Solução para a Fragmentação Externa Conforme os programas terminam, apenas os espaços livres adjacentes são reunidos, produzindo áreas livres de tamanho maior. Memória PrincipalMemória Principal Sistema OperacionalSistema Operacional 8 Kb 4 Kb 3 Kb 5 Kb5 Kb Programa C Programa APrograma A Sistemas Operacionais Relocação Dinâmica Loader relocável. A implementação dinâmica é realizada através de um registrador denominado registrador de relocação. No momento em que o programa é carregado na memória, o registrador recebe o endereço inicial da posição de memória que o programa irá ocupar. Toda vez que ocorrer uma referência a algum endereço, o endereço contido na instrução será somado ao conteúdo do registrador, gerando o endereço físico. Endereço de memória Endereço incial da partição Registrador de Relocação Instrução Endereço Código de operação Sistemas Operacionais Alocação Particionada Dinâmica Alocação particionada dinâmica com relocação: Relocação de todas as partições ocupadas, eliminando todos os espaços entre elas e criando uma única área livre contígua. (relocação dinâmica) Memória PrincipalMemória Principal Sistema Operacional Relocação Sistema Operacional 4 Kb 3 Kb 12 Kb 5 Kb Programa C Programa C Programa A Programa A Sistemas Operacionais Estratégias de Alocação Os sistemas operacionais implementam, basicamente, três estratégias para determinar em qual área livre um programa será carregado para execução. Lista de Áreas Livres Memória Principal Sistema Operacional 4 Kb 3 Kb 5 Kb Programa C Programa A Áreas livres Área livre 1 Área livre 2 Área livre 3 Tamanho 1 4 Kb 2 5 Kb 3 3 Kb Sistemas Operacionais Estratégias de Alocação First-fit: A primeira partição livre de tamanho suficiente para carregar o programa é escolhida (primeira que se encaixa a partir co início). A lista de áreas livres está ordenada crescentemente por endereços. Mais simples, mais rápida e melhor na maioria das vezes. Memória Principal Sistema Operacional 4 Kb 3 Kb 5 Kb Programa C Programa A F 1 Kb Sistema Operacional 3 Kb Programa C Programa A Área livre Programa F Sistemas Operacionais Estratégias de Alocação Worst-fit: A pior partição é escolhida, ou seja, aquela em que o programa deixa o maior espaço sem utilização. Deixa espaços livres maiores que permitem a um maior número de programas utilizar a memória. Memória Principal Sistema Operacional 4 Kb 3 Kb 5 Kb Programa C Programa A F 1 Kb Sistema Operacional 4 Kb Programa C Programa A Área livre Programa F Sistemas Operacionais A rq u it et u ra d e S is te m as O p er ac io n ai s – M ac h ad o /M ai a Estratégias de Alocação Best-fit: a melhor partição é escolhida, ou seja, aquela em que o programa deixa o menor espaço sem utilização (aquela imediatamente maior). Mais custoso, maior grau de fragmentação externa. A lista de áreas livres está ordenada por tamanho, diminuindo o tempo de busca por uma área desocupada. Memória Principal Sistema Operacional 4 Kb 3 Kb 5 Kb Programa C Programa A F 1 Kb Sistema Operacional 2 Kb Programa C Programa F Programa A Área livre Sistemas Operacionais Técnica de Overlay Divisão do 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. Memória Principal Cadastramento Impressão Sistema Operacional2 Kb 3 Kb 4 Kb 4 Kb 2 Kb 2 Kb 1 Kb Módulo principal Área de overlay Área livre Área não utilizada Sistemas Operacionais 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, deforma que seja possível a execução independente de cada módulo,utilizando uma mesma área da memória. 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 outrosmódulos for referenciado pelo módulo principal, aquele será carregado na memória principal, na área de overlay Sistemas Operacionais 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. Sistemas Operacionais Swapping Técnica aplicada à gerência de memória para programas que esperam por memória livre para serem executados. O sistema escolhe um processo residente, que é transferido da memória principal para a memória secundária (swap out). • 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 . Memória Pr incipal Memória Pr incipal Sistema Operacional Sistema Operacional Programa A Programa A Programa G Área Livre Swap in Swap out Arquivo de Swap Programa E Programa E Programa B Programa H H B B Sistemas Operacionais Swapping Sistema operacional mantém uma fila de processos que estão prontos para executar, que possuem imagens da memória em disco Sistemas Operacionais Memória Virtual Técnica que combina memória principal e secundária, dando ao usuário a ilusão de existir uma memória muito maior • Maximizar o número de processos na memória • Reduzir a fragmentação • Permitir estruturas e dados maiores que a memória Memória Virtual . . . . Memória Principal Memória Secundária . . . Sistemas Operacionais Espaço de Endereçamento Virtual Ideia de um vetor • Quando um programa faz referência a um elemento do vetor, não há preocupação em saber a posição de memória daquele dado. • O compilador se encarrega de gerar instruções que implementam esse mecanismo. • Um programa no ambiente de memória virtual não faz referência a endereços físicos de memória (endereços reais), mas a endereços virtuais. Memória Virtual Memória Principal Mapeamento . . . . . . Endereço Físico 500 501 502 503 504 . . . 599 VET [1] VET [2] VET [3] VET [4] VET [5] . . . . . . VET [100] O mecanismo de tradução de um endereço virtual para endereço físico é denominado mapeamento. Sistemas Operacionais Espaço de Endereçamento Virtual Espa ço d e en dere çam ento virt ual Espa ço d e en dere çam ento rea l Endereço virtual 0 Endereço virtual 1 Endereço virtual 2 Endereço virtual 3 Endereço virtual 4 Endereço virtual 5 . . . Endereço virtual V Endereço real 0 Endereço real 1 Endereço real 2 Endereço real 3 . . . Endereço real R Memória Virtual . . . . Memória Principal Memória Secundária . . . Sistemas Operacionais Mapeamento Mapeamento: tradução de um endereço localizado no espaço virtual para um associado no espaço real. Dispositivo de hardware responsável por esta tradução é conhecido como unidade de gerência de memória (MMU); Cada processo tem seu espaço de endereçamento virtual como se possuísse sua própria memória. Tabela de mapeamento: mapeiam blocos de dados, cujo tamanho determina o número de entradas existentes nas tabelas de mapeamento. Processo A Espaço de endereçam en to vi r tua l de A Endereço vir tual 1 . . . Tabela de m apeam en to de A Espaço de endereçam en to vi r tua l de B Endereço vir tual 1 . . . Tabela de m apeam en to de B Processo B M em ór ia Pr incipal Sistemas Operacionais Mapeamento Tabelas mapeiam blocos de dados, cujo tamanho determina o número de entradas existentes na tabela de mapeamento. Quanto maior o bloco, menos entradas nas tabelas de mapeamento e consequentemente, tabelas de mapeamento que ocupam um menor espaço de memória. Sistemas Operacionais Dúvidas
Compartilhar