Faculdade Pernambucana - FAPE

Slides:



Advertisements
Apresentações semelhantes
Sistemas Distribuídos
Advertisements

Sistemas Operacionais
Sistemas Operacionais
DESENVOLVIMENTO DE SISTEMAS PARA INTERNET
Gerenciamento de memória
Gerenciamento de Memória
Arquitetura de Sistemas Operacionais Francis Berenger Machado
SSC541 - SISTEMAS OPERACIONAIS I Aula 12 – Gerenciamento de Memória
SSC SISTEMAS OPERACIONAIS I Aula 10 – Gerenciamento de Memória
SSC SISTEMAS OPERACIONAIS I Aula 15 – Gerenciamento de Memória
SSC541 - SISTEMAS OPERACIONAIS I Aula 13 – Gerenciamento de Memória
Gerenciamento de Memória
Gerência de Memória.
Gerência de Memória Algoritmos de Substituição de Páginas
Arquitetura de Computadores
Sistemas Operacionais Turmas MBI1 e NBI2. Prof: Marcelo Mendes.
Debian Gerência de Memória.
Threads.
Sistemas Operacionais I
Gerência de Memória.
HARDWARE do CLP Os controladores lógicos programáveis são equipamentos com uma aplicação muito vasta dentro dos diversos processos de automação. Desta.
Sistemas Operacionais I
Resumindo Na arquitetura x86 (32 e 64 bits), são usadas a segmentação e a paginação. O espaço de endereçamento de uma aplicação é dividido em segmentos,
Gerenciamento de Memória
Proteção de Memória O sistema operacional deve impedir que um processo tenha acesso ou modifique uma página do sistema sem autorização. Proteção para páginas.
Sistemas Operacionais Gerenciamento de Memória
Fundamentos da Arquitetura de Computadores
Fundamentos da Arquitetura de Computadores
Sistemas Operacionais
Sistemas Operacionais
Sistemas Operacionais
Sistemas Operacionais
Gerência de Memória Fundamentos Swapping Alocação Contígua de memória
SISTEMAS OPERACIONAIS
Gerência de Memória Virtual
Conteúdo Processos e threads Partes do processo
Memória virtual Professor Esp. Diego André Sant’Ana
Sistemas Operacionais
SISTEMAS OPERACIONAIS I
Sistemas Operacionais
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
SISTEMAS OPERACIONAIS I
Sistemas Operacionais
Sistemas Operacionais
Capítulo 8: Memória principal
SISTEMAS OPERACIONAIS I Gerenciamento de Arquivos
SISTEMAS OPERACIONAIS I
DEPARTAMENTO DE INFORMÁTICA UFPE GRECO Gerenciamento de Memória.
Sistemas Operacionais
Infra-Estrutura de Software Gerenciamento de Memória.
Gerenciamento de Memória
SISTEMAS OPERACIONAIS
Memória Virtual O problema é que temos um espaço limitado de memória RAM e, cada vez mais, os aplicativos consomem partes maiores dela. E o que o processador.
Prof. André Luis M. Silva Hierarquia de Memória Prof. André Luis M. Silva
Gerenciamento de Memória - Capítulo 7 - Sistemas Operacionais Prof. Dr. José Carlos Becceneri Luciana Sêda Cardoso.
Gerenciamento de Memória Sistemas Recentes
Bruno Iran Ferreira Maciel
Sistemas de Arquivos- Cap4
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
Sistemas Operacionais IV – Gerenciamento de E/S
Memória Virtual.
Sistemas de Arquivos. Alocação em memória – Problemas Quantidade Limitada de Informações Perda de informações quando o processo é terminado Vários processos.
MEMÓRIAS.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Gerenciamento de Memória Capítulo Gerenciamento básico de memória 3.2 Troca de processos.
Gerência de Memória. Memória Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos residentes.
Hierarquia de Memória – Parte 2 Prof. André Luis M. Silva
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais Prof.: Gustavo Wagner
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
Transcrição da apresentação:

Faculdade Pernambucana - FAPE Sistemas Operacionais Abertos

Gerenciamento de Memória A memória é um recurso que precisa ser gerenciado com cuidado. Lei de Parkinson: “Os programas tendem a expandir até ocupar toda a memória disponível para armazená-los” A maioria dos computadores tem um hierarquia de memória, sendo função do SO coordenar como essas memórias são utilizadas. A parte do SO responsável pela gerencia dessa hierarquia é o gerenciador de memória. Algumas funções: Controla que partes da memória está em uso Aloca memória para processos Realiza o swap

Gerenciador Básico de Memória Os sistemas de gerenciamento de memória podem ser divididos em duas classes: Aqueles que movem processos de um lado para outro entre a MP e o disco durante a execução Aqueles que não fazem a atividade anterior. Monoprogramação sem Troca ou Paginação O esquema mais simples de gerenciamento de memória é executar somente um programa por vez, compartilhando a memória entre esse programa e o SO.

Gerenciador Básico de Memória Três maneiras simples de organizar memória com um sistema operacional e com um processo de usuário. Também existem outras possibilidades.

Gerenciador Básico de Memória Quando o sistema está organizado dessa maneira, somente um processo por vez pode estar executando. Multiprogramação com Partições Fixas Para sistemas operacionais complexos é necessário compartilhamento de tempo. Uso otimizado da CPU Pseudoparalelismo A maneira mais fácil de alcançar a multiprogramação é simplesmente dividir a memória em n partições (possivelmente desiguais) ao iniciar o sistema.

Gerenciador Básico de Memória Partições fixas de memória com filas separadas para cada partição. Partições fixas de memória com uma única fila de entrada

Gerenciador Básico de Memória A desvantagem de classificar os jobs de entrada em filas separadas torna-se aparente quando a fila para uma partição grande está vazia, mas a fila para uma partição pequena está cheia. Uma organização alternativa é manter uma única fila. Sempre que uma partição torna-se livre, o job mais próximo do início da fila que se ajusta na partição vazia poderia ser carregado nela e executado. Para não discriminar jobs pequenos, uma saída é dispor de pelo menos uma partição pequena ou estabelecendo uma regra que um job não pode ser ignorado k vezes.

Gerenciador Básico de Memória Sistemas com partições fixas definidas ao iniciar foi utilizado em mainframes IBM OS/360. Hoje em dia, poucos SOs suportam esse modelo, se é que algum suporta.

Gerenciador Básico de Memória Realocação e Proteção A multiprogramação introduz dois problemas essenciais que devem ser resolvidos: realocação e proteção Problema da realocação: Endereços dentro do arquivo binário (produzido pelo linkeditor) precisam ser ajustados para serem acessados quando o programa for carregado nas partições (em virtude do deslocamento). Endereço 100 na partição 1 é acessado no endereço 100K + 100. Se fosse na terceira partição seria 400K + 100

Gerenciador Básico de Memória Realocação e Proteção A realocação durante o carregamento não resolve o problema da proteção. Um programa malicioso sempre pode construir uma nova instrução e saltar para ela. Em sistemas multiusuários, é indesejável deixar um processo ler ou gravar memória pertencente a outros usuários. A solução que a IBM escolheu para proteger os 360 foi dividir a memória em blocos de 2KB e atribuir um código de proteção de 4 bits a cada bloco

Gerenciador Básico de Memória Realocação e Proteção O hardware do 360 interrompia qualquer tentativa, por parte de um processo em execução, de acessar memória cujo código de proteção o impedia. Uma solução alternativa para ambos os problemas, realocação e proteção, é equipar a máquina com dois registradores especiais de hardware, chamados registrador de base e registrador de limite.

Gerenciador Básico de Memória Realocação e Proteção Quando um processo é agendado, o registrador de base é carregado com o endereço do início de sua partição, e o registrador de limite é carregado com o comprimento de sua partição.Ex: Registrador de base = 100k CALL 100 transforma-se em CALL 100K + 100 O hardware protege os registradores de base e de limite para impedir que os programas de usuários os modifiquem. Desde os 286 um esquema melhor foi adotado

Troca Com um sistema de lotes, organizar a memória em partições fixas é simples e efetivo. Cada job é carregado em uma partição quando chega no começo da fila e permanece na memória até que termine. Às vezes, não há memória principal suficiente para armazenar todos os processos atualmente ativos, então os processos em excessos são mantidos no disco e trazidos de lá para execução dinamicamente.

Troca Duas abordagens dependendo do hardware disponível: Troca – Permite trazer cada processo inteiro, executá-lo temporariamente e, então, devolvê-lo ao disco Memória virtual – Permite que os programas executem mesmo quando estão apenas parcialmente na memória.

Troca As alterações de alocação de memória enquanto os processos entram e saem da memória. As regiões sombreadas correspondem à memória não-utilizada

Troca A flexibilidade de usar partições variáveis introduzem uma maior complexidade na tarefa de alocar e desalocar memória. Quando a troca cria múltiplas lacunas na memória, é possível juntar todas elas em um grande espaço, movendo todos os processos para baixo o máximo possível (compactação de memória). Quanta memória deve ser alocada para um processo? Se possuir tamanho fixo, a memória é o tamanho indicado Senão, a técnica é mais apurada.

Troca Se existir uma lacuna adjacente ao processo, ela pode ser alocada e oferecida ao processo. Se não existir, o processo em crescimento terá de ser movido para uma lacuna maior ou um ou mais processos terão de ser enviados para o disco para criar essa lacuna. Por fim, se o processo não pode crescer na memória, e a área de troca no disco está cheia, o processo deverá esperar ou ser eliminado. Se é esperado que a maioria dos processos crescerá ao executar, provavelmente é uma boa idéia alocar uma pequena memória extra sempre que se fizer a troca ou mover-se um processo

Troca Alocando espaço para um segmento de dados crescente. Alocando espaço para uma pílha e para um segmento de dados crescente

Troca Gerenciamento de Memória com Mapas de bits. Quando a memória é atribuída dinamicamente,o sistema operacional deve gerenciá-la. Duas maneiras de monitorar o uso de memória: Mapas de bits e listas livres Mapa de bits A memória é dividida em unidades de alocação, talvez tão pequenas quanto algumas palavras e talvez tão grandes quanto vários kilobytes. Correspondendo a cada unidade de alocação há um bit no mapa de bits,que é 0 se a unidade está livre, e 1 se estiver ocupada (ou vice-versa)

Troca Gerenciamento de Memória com Mapas de bits. Uma parte da memória com cinco processos e três lacunas. Os traços menores mostram as unidades de alocação de memória. As regiões sombreadas (0 no mapa de bits) estão livres. (b) O mapa de bits correspondente. (c) As mesmas informações como uma lista.

Troca Gerenciamento de Memória com Mapas de bits. O tamanho da unidade de alocação é uma importante questão de projeto. Quanto menor a unidade de alocação maior o mapa de bits (e vice-versa). Uma memória de 32n bits utilizará n bits de mapa usando uma unidade de alocação de 4 bytes. A pesquisa no mapa de bits por uma lacuna de k bits 0 consecutivos para acomodar um processo é uma atividade lenta.

Troca Gerenciamento de Memória com Listas Encadeadas Consiste numa lista encadeada dos segmentos de memória alocados e livres, onde um segmento é um processo ou uma lacuna entre dois processos. Um processo que termina normalmente tem dois vizinhos (exceto quando está na parte superior da memória) A eliminação de um processo leva a quatro combinações:

Troca Gerenciamento de Memória com Listas Encadeadas Quatro Combinações de Vizinho para o Processo Terminante X.

Troca Gerenciamento de Memória com Listas Encadeadas Quando os processos e as lacunas são mantidos em uma lista classificada por endereço, vários algoritmos podem ser utilizados para alocar memória para um processo recentemente criado ou trocado para a memória. Algoritmo do primeiro ajuste: Varre a lista de segmentos até encontrar uma memória que seja suficientemente grande. Ao achar, a lacuna é dividida em um espaço para o processo e em um outra para a memória não-utilizada.

Troca Gerenciamento de Memória com Listas Encadeadas Algoritmo do próximo ajuste: Semelhante ao primeiro ajuste com exceção de que ele monitora a posição em que ele está sempre que encontra uma lacuna adequada. Na próxima vez em que é chamado a pesquisa não começará do início da lista e sim a partir do lugar que ele deixou da última vez. Desempenho ligeiramente inferior ao do algoritmo do primeiro ajuste

Troca Gerenciamento de Memória com Listas Encadeadas Algoritmo do melhor ajuste: Pesquisa na lista inteira e pega a melhor lacuna que seja adequada. Mais lento que o primeiro ajuste. Algoritmo do pior ajuste: Sempre pegar a maior lacuna disponível de modo que a lacuna resultante seja suficientemente grande para ser útil.

Troca Gerenciamento de Memória com Listas Encadeadas Todos os 4 algoritmos podem ser acelerados mantendo-se listas separadas para processos e para lacunas. Listas de lacunas podem ser classificadas por tamanho tornando o algoritmo do melhor ajuste mais rápido. As próprias lacunas podem ser utilizadas para guardar informações armazenadas na lista de lacunas (economia de memória) Outro algoritmo de alocação: ajuste rápido

Troca Gerenciamento de Memória com Listas Encadeadas Ajuste rápido Mantém listas separadas para alguns dos tamanhos exigidos mais comuns. Tabela com n entradas em que a primeira é um ponteiro para a cabeça de um lista de lacunas de 4K, a segunda para lista de 8K, a terceira para lista de 12 K,etc. Problema da fragmentação e custo associado para desfragmentar.

Memória Virtual As memória dos primeiros computadores eram pequenas e caras. O PDP-1 tinha uma memória de 4096 palavras, de 18 bits cada uma. Memória usada para abrigar tanto o SO quanto os programas de usuários. Muitas vezes, o programador era obrigado a usar algoritmos mais lentos porque o melhor algoritmo não cabia na memória

Memória Virtual A solução tradicional para a questão da falta de espaço de memória foi utilizar o conceito de memória secundária. O programa era dividido em partes, chamadas overlays, que cabiam na memória disponível. Cada overlay era carregado do disco para a memória, segundo a seqüência do programa, e executado. O programador era responsável por gerenciar todo o processo de overlays sem qualquer ajuda do computador.

Memória Virtual Algumas tarefas do programador: Dividir o programa em overlays. Decidir onde cada overlay devia ser armazenado na memória secundária. Programar o transporte do overlay da memória secundária para a memória principal e vice-versa. Fica claro que a gerência do overlay era muito trabalhosa.

Memória Virtual Em 1961 foi criado um método para processar overlay automaticamente, sem que o programador nem precisasse saber da sua existência. Esse método é conhecido como Memória Virtual. A definição de overlays evoluiu para o conceito de memória virtual. No início da década de 70, a memória virtual estava disponível na grande maioria dos computadores.

Memória Virtual Atualmente existem sistemas sofisticados de memória virtual. Implementações: Paginação Segmentação Segmentação com paginação.

Memória Virtual - Paginação Paginação é uma técnica utilizada por muitos sistemas de memória virtual. Endereços gerados por programas são chamados endereços virtuais e formam o espaço de endereço (endereçamento) virtual. Em computadores sem memória virtual o endereço virtual é colocado diretamente no barramento de memória e corresponde diretamente a um endereço real ou físico Com memória virtual, os endereços virtuais não vão diretamente para o barramento de memória, e sim para a Unidade de Gerenciamento de Memória (Memory Management Unit – MMU).

Memória Virtual - Paginação A MMU é um hardware que mapeia os endereços virtuais em endereços físicos de memória. A posição e a função da MMU

Memória Virtual - Paginação A relação entre endereços virtuais e endereços físicos de memória é dada pela tabela de páginas.

Memória Virtual - Paginação Na paginação, o espaço de endereço virtual é dividido em unidades chamadas páginas. Já a memória principal (física) é dividida em molduras de páginas. As páginas e as molduras de página têm sempre o mesmo tamanho. Com 64K de espaço de endereçamento virtual (16 bits) e 32K de memória física, temos 16 páginas virtuais e 8 molduras de página considerando uma página de 4K. As transferências entre memória e disco são sempre em unidades de uma página.

Memória Virtual - Paginação Na figura anterior, ao utilizar a instrução MOVE REG, 0, ocorre o seguinte: O endereço virtual 0 é enviado para a MMU. A MMU vê que esse endereço virtual cai na página 0 (0 a 4095), que de acordo com seu mapeamento é a moldura de página 2 (8192 a 12287) Assim, transforma o endereço para 8192 e coloca o endereço 8192 no barramento. O que acontece se o programa tentar utilizar uma página não-mapeada: MOVE REG, 32780

Memória Virtual - Paginação O endereço corresponde ao byte 12 dentro da página virtual 8 (iniciando em 32768). A MMU nota que a página não está mapeada e gera uma interrupção, passado a CPU para o SO Tal interrupção é chamada falta/falha de página O SO seleciona uma moldura de página pouco utilizada e grava o seu conteúdo de volta no disco. Então, ele busca a página que acabou de ser referenciada e carrega-a na moldura de página que acabou de ser liberada Por fim, altera o mapa e reinicia a instrução interrompida.

Memória Virtual - Paginação Funcionamento da MMU convertendo o endereço virtual 8192 em 24580 A Operação interna da MMU com 16 páginas de 4K

Memória Virtual - Paginação Tabelas de Páginas Para realizar o mapeamento entre a pagina e sua respectiva moldura é utilizada uma tabela chamada tabela de páginas. Ela armazena o número da moldura de página correspondente a página virtual. Apresenta um bit que indica se a página está ou não na memória (bit presente/ausente) Se o bit presente/ausente for 0 uma interrupção é gerada, passando a CPU para o SO. Senão, o MMU gera o endereço físico.

Memória Virtual - Paginação Tabela de Página. O endereço virtual é dividido em um número de página virtual e um deslocamento O número de página virtual funciona como um índice na tabela de página para achar a moldura de página se houver. O propósito da tabela de páginas é mapear páginas virtuais em molduras de página. Duas questões importantes devem ser encaradas: A tabela de páginas pode ser extremamente grande O mapeamento deve ser rápido.

Memória Virtual - Paginação Tabela de Página. Tabela grande Com endereços de 32 bits teremos teremos 4G de endereços Com páginas de 4k teremos 1 milhão de páginas resultando em 1 milhão de entradas na tabela de páginas. Rapidez no mapeamento Cada referência à memória deve ser feito o mapeamento virtual para físico Cada instrução pode ser necessário 2 ou mais referências à memória.

Memória Virtual - Paginação Tabela de Página. Para otimizar o desempenho, o projeto mais simples é ter uma única tabela de páginas consistindo em uma matriz de rápidos registradores de hardware. O problema é o custo No outro extremo a tabela de páginas pode estar inteiramente na memória principal.

Memória Virtual Paginação Tabela de páginas para o topo dos 4M de memória Tabela de Páginas Multinível Tabelas de páginas multinível evita o problema de ter páginas muito grandes na memória. Um endereço de 32 bits com dois campos de tabela de páginas. Tabelas de páginas de dois níveis

Memória Virtual - Paginação O segredo para tabela de páginas multinível é evitar manter todas as tabelas de página na memória todo o tempo. Mais níveis podem ser explorados mas a complexidade aumentaria O arranjo exato de uma entrada é altamente dependente de máquina, mas os tipos de informações presentes são grosseiramente os mesmos de máquina para máquina. 32 bits é um tamanho comum

Memória Virtual - Paginação Uma entrada típica de tabela de páginas

Memória Virtual - Paginação TLBs – Translation Lookaside Buffers Na maioria dos esquemas de paginação as tabelas de páginas são mantidas na memória em virtude de seu tamanho A solução é baseada na observação de que a maioria dos programas tende a fazer um grande número de referências a um pequeno número de páginas, e não o contrário A solução foi equipar computadores com pequeno dispositivo de hardware para mapear endereços virtuais em endereços físicos sem passar pela tabela de página. Essse dispositivo é chamado de TLB ou memória associativa.

Memória Virtual - Paginação TLBs – Translation Lookaside Buffers Um TLB para acelerar a paginação

Memória Virtual - Paginação TLBs – Translation Lookaside Buffers Funcionamento: Quando um endereço virtual é apresentado para a MMU para tradução, o hardware primeiro verifica se seu número de página virtual está presente no TLB, comparando com todas as entradas simultaneamente (em paralelo) Se uma coincidência válida for localizada, e o acesso não violar os bits de proteção, a moldura de página será tomada diretamente do TLB, sem passar pela tabela de páginas. Pode ocorrer falha de proteção na leitura.

Memória Virtual - Paginação TLBs – Translation Lookaside Buffers Se o número da página virtual não estiver no TLB, a MMU detecta a falta e faz uma pesquisa rotineira na tabela de páginas. Em seguida, a MMU expulsa uma das entradas na TLB e a substitue pela página recém pesquisada. Gerenciamento por Software do TLB No passado o gerenciamento de TLB é feito por hardware (MMU). Entretanto, algumas páginas modernas fazem todo o gerenciamento de páginas por software

Memória Virtual - Paginação Nessas máquinas as entradas de TLB são explicitamente carregadas pelo SO. Quando uma falta de TLB ocorre, em vez de a MMU simplesmente ir para a tabela de páginas localizar e buscar a referência de página necessária, ela apenas gera uma falha de TLB e joga o problema para o SO.

Memória Virtual - Paginação Tabelas de Páginas Invertidas. Com 32 bits de endereçamento com 4k por tamanho de página teremos 1 milhão de entradas na tabela de páginas. A tabela de página deve ter no mínimo 4MB Com 64 bits com 4k por tamanho de página, é necessário 1015 bytes para a tabela de página (valor inaceitável para armazenar) Solução: tabela de página invertida. O número de entradas na tabela é o número de molduras e não o número de páginas. Com 64 bits de endereço e 4K por página é preciso só de 8192 entradas. Cada entrada monitora qual (processo, página virtual) está localizado na moldura de página.

Memória Virtual - Paginação Problema da abordagem: a tradução virtual para físico torna-se muito mais difícil. A solução é utilizar o TLB Em uma falta de página a tabela invertida precisa ser pesquisada. As tabelas de páginas invertidas são atualmente utilizadas em algumas estações de trabalho IBM e HP e vão se tornar mais comuns à medida que as máquinas de 64 bits difundirem-se