Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Aula 10 Capítulo 9 – Gerência de Memória • 9.1 Conceitos Básicos • 9.2 Swapping • 9.3 Alocação de memória contígua • 9.4 Paginação • 9.5 Segmentação • 9.6 Segmentação com paginação Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4 Paginação • A paginação é um esquema de gerência de memória que permite que o espaço de endereços físicos de um processo seja não contíguo. • A paginação evita o problema de ajustar os trechos de memória de tamanhos variados ao armazenamento de apoio. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.1 Método básico • O método básico para implementar a paginação envolve dividir a memória física em blocos de tamanho fixo, chamados quadros (frames). • E dividir a memória lógica em blocos de mesmo tamanho, chamados páginas. • Quando um processo tiver de ser executado, suas páginas são carregadas em quaisquer quadros de memória disponíveis a partir do armazenamento de apoio. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.1 Método básico • O armazenamento de apoio é dividido em blocos de tamanho fixo, que possuem o mesmo tamanho que os quadros de memória. • É definido uma tabela de página para traduzir endereços lógicos em físicos. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • O endereço gerado pela CPU é dividido em: • Número de página (p) – usado como um índice para a tabela de página, que contém o endereço de base de cada página na memória física. • Deslocamento de página (d) – combinado com o endereço de base para definir o endereço da memória física que é enviado para a unidade de memória. 9.4.1 Método básico Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Hardware de paginação Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Modelo de paginação da memória lógica e física páginas quadros Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.2 Suporte de hardware • Cada SO possui seus próprios métodos para armazenar tabelas de página. • A maioria aloca uma tabela de páginas para cada processo. • Um ponteiro para a tabela de página é armazenado com outros valores de registrador (como o contador de instruções) no bloco de controle de processo (BCP). Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.2 Suporte de hardware • Quando o despachante é requisitado a iniciar um processo, ele precisa recarregar os registradores de usuário e definir os valores corretos da tabela de página do hardware a partir da tabela de página do usuário armazenada. – OBS.: Despachante – é o módulo que dá o controle da CPU ao processo selecionado pelo escalonador de curto prazo. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.2 Suporte de hardware • A implementação de hardware da tabela de página pode ser feita de várias formas. • Nos casos mais simples, a tabela de página é implementada como um conjunto de registradores dedicados. • Esses registradores devem ser montados com uma lógica de altíssima velocidade, para tornar a tradução de endereço de paginação eficiente. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.2 Suporte de hardware • O uso desses registradores será satisfatório se a tabela for pequena (ex.: 256 entradas). • Nos computadores modernos a tabela de páginas é muito maior (ex.: 1 milhão de entradas). • Como o uso de registradores rápidos para implementar a tabela de página não é viável, utiliza-se a memória principal onde a tabela de página é mantida. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • O registrador de base da tabela de página (PTBR) aponta para a tabela de página. • O registrador de extensão da tabela de página (PRLR) indica o tamanho da tabela de página. • Nesse esquema, cada acesso a dados/instrução exige dois acessos à memória. – O problema dos dois acessos à memória pode ser resolvido usando um cache de hardware especial de pesquisa rápida chamado memória associativa ou translation look-aside buffers (TLBs). 9.4.2 Suporte de hardware Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • A TLB é memória associativa de alta velocidade. • Cada entrada da TLB consiste em duas partes: uma chave (ou tag) e um valor. • Quando a memória associativa recebe um item, ele é comparado com todas as chaves simultaneamente. Se o item for encontrado, o campo valor correspondente é retornado. 9.4.2 Suporte de hardware Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Hardware de Paginação com TLB Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.3 Proteção • A proteção de memória em um ambiente paginado é realizada pela proteção dos bits associados com cada quadro. • Esses bits costumam ser mantidos na tabela de páginas e podem definir uma página como sendo de leitura/escrita ou somente de leitura. • Como todo acesso passa pela tabela de página, ao mesmo tempo que o endereço físico está sendo calculado, os bits de proteção podem ser verificados para checar se existem escritas sendo feitas em uma página somente leitura. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.3 Proteção • Uma tentativa de escrita em uma página somente de leitura causará uma interrupção do hardware para o SO (violação de proteção de memória). • Podemos criar um hardware para prover proteção somente de leitura, leitura/escrita ou somente de execução. Ou, fornecer bits de proteção separados para cada tipo de acesso. • Além do bit de proteção também é definido mais um bit que é geralmente anexado a cada entrada na tabela de página: um bit válido-inválido. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.3 Proteção • Quando esse bit é definido como “válido”, a página associada está no espaço de endereços lógicos do processo e, portanto, é uma página legal (ou válida). • Quando o bit é definido como “inválido”, a página não está no espaço de endereços lógicos do processo. • Os endereços ilegais são interceptados pelo uso do bit “válido-inválido”. • O SO define esse bit para cada página, concedendo ou rejeitando os acessos à página. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.3 Proteção • Quando esse bit é definido como “válido”, a página associada está no espaço de endereços lógicos do processo e, portanto, é uma página legal (ou válida). • Quando o bit é definido como “inválido”, a página não está no espaço de endereços lógicos do processo. • Os endereços ilegais são interceptados pelo uso do bit “válido-inválido”. • O SO define esse bit para cada página, concedendo ou rejeitando os acessos à página. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Bit Válido (v) ou Inválido (i) em uma Tabela de Página Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.4 Estrutura da Tabela de Página • Vamos explorar algumas das técnicas mais comuns para estruturar a tabela de página: – Paginação Hierárquica – Tabelas de Página com Hash – Tabelas de Página Invertidas Sistemas Operacionais com Java •A maioria dos sistemas de computação modernos suporta um grande espaço de endereçamento lógico (232 a 264). • Nesse tipo de ambiente, a própria tabela de página se torna excessivamente grande. • A solução simples para esse problema é dividir a tabela de página em partes menores. • Uma forma é usar um algoritmo de paginação de dois níveis, no qual a tabela de página em si também é paginada. Silberschatz, Galvin e Gagne (c) 2003 9.4.4.1 Paginação hierárquica Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Esquema de Tabela de Página de Dois Níveis Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Exemplo de Paginação em Dois Níveis • Assim, um endereço lógico é representado da seguinte forma: Onde p1 é um índice para a tabela de página mais externa e p2 é o deslocamento dentro da página da tabela de página mais interna. Número de página Deslocamento de página p1 p2 d 10 10 12 Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.4.2 Tabelas de Página com Hash • Uma técnica comum para tratar de espaços de endereço maiores que 32 bits é usar uma tabela de página com hash, com o valor de hash sendo o número da página virtual. • Cada entrada na tabela de hash contém uma lista encadeada de elementos que se dirigem para o mesmo local. • Os números de página virtuais são comparados nessa lista à procura de uma ocorrência. Se uma for encontrada, o quadro físico correspondente é extraído. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Tabela de Página com Hash Sistemas Operacionais com Java • Uma tabela de página invertida tem uma entrada para cada página real (ou quadro) de memória. • Cada entrada consiste no endereço virtual da página armazenada nesse local da memória real, com informações sobre o processo que possui essa página. • Assim, somente uma tabela de página está no sistema, e ela tem apenas uma entrada para cada página da memória física. Silberschatz, Galvin e Gagne (c) 2003 9.4.4 Tabela de Página Invertida Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Arquitetura da Tabela de Página Invertida pid – identificador do espaço de endereços p – número da página Se for encontrada uma combinação, na entrada i, então o endereço físico <i, deslocamento> é gerado. Se nenhuma combinação for encontrada, então foi realizado um acesso a endereço ilegal. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.5 Páginas Compartilhadas • Outra vantagem da paginação é a possibilidade de compartilhar o código comum. • Código compartilhado – Uma cópia do código somente leitura (reentrante) compartilhada entre os processos (por exemplo, editores de texto, compiladores, sistemas de janela). – O código compartilhado precisa aparecer no mesmo local no espaço de endereçamento lógico de todos os processos. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 9.4.5 Páginas Compartilhadas • Código e dados privados – Cada processo mantém uma cópia separada do código e dos dados. – As páginas para o código e dados privados podem aparecer em qualquer lugar no espaço de endereçamento lógico. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Exemplo de Páginas Compartilhadas Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Um aspecto importante da gerência de memória que se tornou inevitável com a paginação é a separação da visão de usuário da memória e a memória física real. • A visão de usuário da memória não é igual à memória física real. • A visão de usuário é mapeada na memória física. • O mapeamento permite a diferenciação entre memória lógica e física. 9.5 Segmentação Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Visão de um programa pelo Usuário Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • O mecanismo de segmentação possibilita a visão da memória pelo usuário. • Um espaço de endereçamento lógico é uma coleção de segmentos. Cada segmento tem um nome e um tamanho. • Os endereços especificam o nome do segmento e o deslocamento dentro do segmento. • O usuário especifica, portanto, cada endereço por duas quantidades: um nome de segmento e um deslocamento. 9.5.1 Método básico Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • É necessário um mapeamento da memória pois temos endereço bidimensional em uma memória física unidimensional. E isso é feito pela tabela de segmentos. • Cada entrada na tabela de segmentos possui uma base de segmento e um limite de segmento. • A base de segmento contém o endereço físico inicial no qual reside o segmento na memória, enquanto o limite de segmento especifica o tamanho do segmento. 9.5.2 Hardware Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Um endereço lógico consiste em duas partes: um número de segmento, s, e um deslocamento dentro desse segmento, d. • O número do segmento (s) é usado como índice para a tabela de segmentos. • O deslocamento d do endereço lógico precisa estar entre 0 e o limite do segmento. Se não estiver, interceptamos para o SO. 9.5.2 Hardware Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Hardware de Segmentação Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Uma vantagem em particular da segmentação é a associação da proteção aos segmentos. • Como os segmentos representam uma parte do programa definida semanticamente, é provável que todas as entradas no segmento sejam usadas da mesma maneira. • Alguns segmentos são instruções, enquanto outros segmentos são dados. 9.5.3 Proteção e compartilhamento Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • O hardware de mapeamento de memória verificará os bits de proteção associados a cada entrada da tabela de segmento para evitar acessos ilegais à memória, como: – Tentativas de escrever em um segmento apenas de leitura. – Usar um segmento apenas de execução como dados. 9.5.3 Proteção e compartilhamento Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Outra vantagem de segmentação envolve o compartilhamento de código ou dados. • Cada processo possui uma tabela de segmento associada, que o despachante utiliza para definir a tabela de segmentos de hardware quando esse processo for dado à CPU. • O compartilhamento ocorre no nível do segmento. • Por exemplo, considere o uso de um editor de texto em um sistema de tempo compartilhado. 9.5.3 Proteção e compartilhamento Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Outra vantagem de segmentação envolve o compartilhamento de código ou dados. • Cada processo possui uma tabela de segmento associada, que o despachante utiliza para definir a tabela de segmentos de hardware quando esse processo for dado à CPU. • O compartilhamento ocorre no nível do segmento. 9.5.3 Proteção e compartilhamento Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Por exemplo: Considere o uso de um editor de texto em um sistema de tempo compartilhado. – Um editor de texto completo poderia ser muito grande,composto de muitos segmentos. – Esses segmentos podem ser compartilhados entre todos os usuários, limitando a memória física necessária para dar suporte às tarefas de edição. – Em vez de n cópias do editor, só precisamos de uma cópia. 9.5.3 Proteção e compartilhamento Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Tanto a paginação quanto a segmentação têm suas vantagens e desvantagens. • A segmentação oferece muitas vantagens no gerenciamento de memória, já que o sistema pode armazenar somente os segmentos necessários na memória. • A opção de segmentos de tamanhos variados também é útil, já que um processo pode variar em tamanho dependendo do que ele está fazendo. 9.6 Segmentação com paginação Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Podemos criar pequenos segmentos para partes simples de um processo, e segmento maiores para partes mais complexas. • Mas para melhorar esse esquema criamos um endereço virtual para segmentação com paginação onde temos o nº do segmento, nº relativo da página em um segmento e o deslocamento (dentro da página). 9.6 Segmentação com paginação Sistemas Operacionais com Java Referências • Capítulo 9 da referência abaixo: – SILBERSCHATZ, ABRAHAM; GAGNE, GREG; GALVIN, PETER BAES. Sistemas operacionais: com java. . Rio de Janeiro: Elsevier, 2004. Silberschatz, Galvin e Gagne (c) 2003
Compartilhar