You are on page 1of 11

1

SISTEMAS OPERACIONAIS
PROF: GUILHERME GODOY

APOSTILA 2
Até aqui vimos que um aplicativo para ser executado precisaria estar todo na memória,
ocupando espaço a maioria das vezes de forma desnecessária.

Introdução à Memória Virtual


A idéia básica da memória virtual é permitir que programas muito maiores
que a memória disponível possam ser executados.

Com o uso dessa memória o sistema operacional mantém apenas as


partes ativas do programa na memória e o restante em disco, sendo
carregadas ou removidas da memória de acordo com as necessidades.

Memória virtual é uma técnica que se utiliza da memória secundária para


produzir o efeito prático de aumentar significativamente o espaço de
endereçamento disponível aos programas. Essa técnica não depende do
tamanho
ho da memória principal – que continua sendo limitado – para ser
implementada.

A memória secundária (normalmente um disco rígido) passa a servir como uma


espécie de extensão da memória principal, armazenando a maior parte dos
programas e dados carregados para execução.

À memória principal são transferidas por vez apenas algumas partes destes
programas e dados, essenciais ao momento pontual da execução.

Porém, antes é necessário relembrarmos os conceitos de paginação e segmentação.


2

Paginação
A paginação é um esquema de gerenciamento de memória que permite
que o espaço de endereçamento físico de um processo NÃO seja
contíguo.

Esta técnica é utilizada na maioria dos sistemas com memória virtual, mas funciona em
sistemas em que não exista uma memória virtual.

Como sabemos, os endereços gerados pelos programas são denominados


endereços lógicos e constituem o espaço de endereçamento lógico. Em
computadores que não tem memória virtual, os endereços lógicos são idênticos
aos endereços físicos. Por outro lado, quando usamos memória virtual estes
endereços diferem. Portanto, o endereço gerado pelo programa não pode ser
colocado diretamente no barramento do sistema para acessar uma posição
qualquer de memória.

Assim, a MMU mapeia os endereços virtuais em físicos.

FUNCIONAMENTO

A memória física é dividida em blocos de tamanho fixos denominados


molduras de páginas ou quadros (dependendo do autor). Já a memória
lógica é dividida em blocos de tamanho fixos denominados páginas.

As páginas e as molduras de páginas (ou quadros) são sempre do mesmo


tamanho.
3

Quando um processo é iniciado no sistema operacional, suas páginas são


carregadas em quaisquer quadros (ou molduras de páginas) livres a partir de
sua origem. Lembrando que os tamanhos dos blocos da memória física são do
mesmo tamanho da memória lógica.

Cada endereço gerado pela CPU na memória lógica é dividido em 02 partes:

• Um número de página
• Um deslocamento de página

O tamanho da página é definido pelo hardware, quase sempre sendo uma


potência de 2 para facilitar os cálculos de busca de página.

O número de página é usado como índice em uma tabela de páginas.

A tabela de páginas funciona como um índice realmente, informando para cada


página lógica, qual a página física correspondente.

No exemplo básico acima as páginas lógicas do processo foram mapeadas


pela tabela de páginas e inseridas na memória física dentro dos quadros ou
molduras de paginas correspondentes, e de forma não contígua.

A memória lógica foi dividida em 4 quadros que foram mapeados pela tabela de
paginas e indexados de acordo com o que foi inserido nos quadros (ou
molduras de páginas) na memória física.

Ex: a página 2 lógica corresponde ao quadro (ou moldura de página) 3 da


memória física.

Veremos um exemplo mais prático.


4

No exemplo acima a memória lógica de um processo é composta por 12 bytes,


ela foi dividida em 3 páginas lógicas de 4 bytes cada uma. O endereço lógico
também foi dividido em 2 partes: número da página e deslocamento.

No exemplo, endereços lógicos possuem 5 bits.

Considere o byte y2. Ele possui o endereço lógico 00101. Podemos ver esse
endereço composto por duas partes: os primeiros 3 bits indicam o número da
página ou seja 001, e os últimos 2 bits indicam a posição de y2 dentro da
página, que é 01. Importante
Import observar
ar que todos os bytes pertencentes a uma
mesma página lógica apresentam o mesmo número de página. De forma
semelhante, todas as páginas possuem bytes com deslocamento entre 00 e 11.

A memória física também foi dividida em páginas, chamados neste caso de


quadros ou molduras de páginas. Neste exemplo a memória possui 24 bytes,
bytes
divididos em 6 páginas com 4 bytes cada uma, ou seja, quadros mesmo
tamanho da página da memória lógica, porém com maior número de quadros.
quadros

Um programa é carregado página a página, sendo que cada página lógica


corresponde a uma física. Porem a área ocupada na física não é contígua e
nem precisa seguir a mesma ordem da lógica.

Uma tabela da páginas foi montada, possuindo o mesmo número de páginas


da memória lógica. Esta tabela informa onde está a página na memória física.
5

Seguido o exemplo, o byte y2 da página lógica 001 é encontrado no quadro


101 da memória física. Como ele tem o deslocamento 01 dentro da página
lógica ele estará no mesmo deslocamento 01 dentro da física, sendo o
endereço completo 10101.

FRAGMENTAÇÃO

Na paginação, uma página lógica pode ser carregada em qualquer página


física livre. Assim não existe fragmentação externa.

Entretanto, considere um sistema com páginas de tamanho 4 Kb e um


programa precisa de 201 Kb para executar. Serão alocadas neste caso 51
páginas para o programa, totalizando 204 Kb, resultando numa fragmentação
interna de 3 Kb. Ou seja, existe pequena fragmentação interna na paginação.

TABELA DE PÁGINAS

Cada sistema operacional tem seus próprios métodos para armazenar a tabela
de páginas.

O tamanho de página geralmente é definido pelo hardware.

Nos processadores 32 bits, o espaço de endereçamento pode ser de até de 4


GB.

1 GB equivale a 1024 x 1024 x 1024 bytes ou 230 bits.

Cada página ocupa 4 Kb. Isso significa que um processo pode ter até
1.048.576 entradas na tabela de páginas o que representa uma tabela de
páginas ocupando 4 MB (cada entrada são 4 bytes).

Por isso um processador 32 bits ou um sistema operacional 32 bits não “enxerga” mais
de 4 GB de memória, ele não consegue realizar o endereçamento.

Assim temos uma tabela muito grande ocupando espaço significativo, o que
leva a um problema: quanto maior for a tabela maior será a pesquisa por uma
entrada específica.

Como acessar de forma rápida a tabela de páginas?


6

TRANSLATION LOOKASIDE BUFFER (TLB)

A forma como a tabela de páginas é implementada é um fator importante e que


deve ser pensado, uma vez que ela deve ser consultada a cada acesso à
memória. Tabelas de páginas pequenas podem ser colocadas em registradores
de acesso rápido, melhorando bastante o desempenho de pesquisas pelo
endereço físico.

Tabelas de páginas muito grandes não podem ser mantidas em registradores,


portanto, outra solução deve ser pensada. Uma outra estratégia é manter a
tabela de páginas na própria memória do computador. Nesta abordagem, a
MMU possui dois registradores para localizar a tabela de páginas na memória.

O primeiro é chamado de registrador de base da tabela de páginas (Page


Table Base Register, PTBR) que indica o endereço físico de memória onde a
tabela está colocada.

O segundo denominado registrador de limite da tabela de páginas (Page


Table Limit Register,PTLR) indica o número de entradas da tabela.

Qual o problema dessa solução? Agora cada acesso que um processo faz à
memória lógica transforma-se em dois acessos à memória física. No primeiro
acesso, a tabela de páginas é consultada, e o endereço lógico é transformado
em endereço físico. No segundo acesso, a memória do processo é lida ou
escrita.

Foi criada então uma memória cache especial que vai manter as entradas de
tabela de páginas mais recentemente utilizadas.

Essa memória cache é interna à MMU e é chamada de Translation Lookaside


Buffer (TLB).

Portanto, quando a entrada requerida da tabela de páginas está na TLB, o


acesso à memória lógica do processo é feito com um único acesso à memória
física, como quando registradores são utilizados. Nessa situação diz que houve
um acerto (hit).

Por outro lado, quando a entrada da tabela de páginas associada com a página
lógica não está na TLB diz que ocorreu uma falta (miss). Neste caso, é
necessário um duplo acesso à memória física, como no esquema sem o cache.

O procedimento adotado é semelhante ao que acontece na cache


convencional, ou seja, a entrada referente à página lógica
acessada é incluída na TLB. Os próximos acessos já encontrarão essa entrada
da tabela de páginas na TLB e o acesso será rápido.
7

O diagrama acima mostra o funcionamento de uma memória com paginação,


tabela de páginas armazenada na memória física e TLB.

Segmentação
É o esquema de gerenciamento de memória que suporta a visão do
usuário sobre a memória. Neste caso, um espaço de endereçamento
lógico é um conjunto de segmentos.

Normalmente um aplicativo é compilado em segmentos por exemplo:

• Código
• Dados alocados estaticamente
• Dados alocados dinamicamente
• Pilha de execução
• Bibliotecas
• Etc..
Em geral o programador atribui nomes aos segmentos.

Exemplo: “Sub rotina para biblioteca de controle de movimentos”

Então o compilador transforma esses nomes em números, passando o


exemplo anterior a ser conhecido pelo compilador apenas como segmento 7.
8

O diagrama acima mostra que diversas partes de um programa são divididos


em segmentos no espaço de endereçamento lógico.

FUNCIONAMENTO

Quando o sistema utiliza o esquema de segmentação, o endereço lógico é


também dividido em: número do segmento e deslocamento dentro do
segmento (semelhante ao esquema de paginação).

Os segmentos não necessariamente precisam ter o mesmo tamanho. No


entanto, existe um tamanho máximo definido para os segmentos.

Os endereços lógicos são traduzidos para um endereço físico através de uma


tabela de segmentos, que basicamente contém as mesmas informações da
tabela de páginas vista anteriormente em paginação.

Essa tabela informa o local onde o segmento foi colocado em memória (base)
e qual o seu tamanho (limite).
9

De acordo com a figura acima, temos 5 segmentos numerados de 0 a 4. Os


segmentos estão armazenados na memória física. A tabela de segmentos tem
uma entrada separada para cada segmento, fornecendo o endereço inicial
(base) do segmento e o tamanho desse segmento (limite).

Exemplo: o segmento 2 (programa principal ou main program) tem 400 bytes


começando na localização 4300 da memória.

Assim sabemos que o espaço dele vai até a posição 4700 (4300 + 400).

Então:

1) Uma referência ao byte 53 do segmento 2 é mapeada para a localização


4353 (4300+53=4353).
2) Referência ao byte 852 do segmento 3 leva a localização 4052
(3200+852=4052)

FRAGMENTAÇÃO

Devemos ressaltar que a segmentação não apresenta fragmentação interna,


uma vez que cada segmento recebe a quantidade exata de memória que ele
precisa.

Contudo, a fragmentação externa se faz presente, uma vez que pequenos


segmentos podem ser liberados e dificilmente serão reutilizados.
10

COMPARTILHAMENTO

É interessante observar que segmentos podem ser compartilhados, como por


exemplo, um segmento que represente uma rotina específica dentro de um
programa.

Um segmento compartilhado só é removido da memória se ele não estiver mais


sendo utilizado por nenhum processo. Este compartilhamento pode ajudar
bastante em termos economia de espaço de memória.

A figura acima mostra um editor de texto aberto por 2 usuários, sendo que a
parte do editor está na memória apenas 1x sendo que apenas os dados é que
são colocados 2x na memória, visto que são eles que os diferenciam.

Paginação com Segmentação ou Segmentação Paginada


Na segmentação paginada o espaço lógico é formado por segmentos e cada
segmento é dividido em páginas lógicas. Cada segmento possui uma tabela de
páginas associada. No momento de endereçar a memória, a tabela de
segmentos indica, para cada segmento, onde a respectiva tabela de páginas
está. Essa tabela de páginas é usada para transformar o endereço de página
lógica de determinado segmento em endereço de página física, como é feito
normalmente por paginação.
11

A figura ilustra o funcionamento da segmentação paginada, observe que para


cada segmento existe uma tabela de páginas que leva até a localização da
página da memória física (quadro).

You might also like