Outras soluções:
- First-fit
- É atribuído ao processo o primeiro pedaço livre com
tamanho suficiente. A procura começa no princípio do conjunto de pedaços
livres ou no ponto em que a busca anterior tinha terminado
- Best-fit
- É atribuído ao processo parte do pedaço livre mais
pequeno e com tamanho suficiente para carregar o programa. Permite
utilizar de forma eficiente a memória, mas pode ser lento
- Worst-fit
- É atribuído ao processo parte do pedaço livre maior.
Permite a existência de pedaços livres de maiores dimensões, mais
facilmente utilizáveis do que pedaços de pequenas dimensões
- Fragmentação
- Externa
- À medida que os processo são retirados e carregados
em memória a memória pode ficar com espaços livres contínuos, de
pequenas dimensão
- Quando um programa requerer a sua carga em memória,
embora a memória total disponível seja maior que os requisitos do
programa, tal pode não ser possível dado não existir nenhum pedaço de
memória com dimensão suficiente
- Analise estatística de vários casos permitiu
determinar que cerca de 1/3 da memória de um computador é desperdiçada
devido à fragmentação
- Interna
- Normalmente a memória é alocada utilizando pedaços
de memória de tamanho fixo. Por ex., 4096 Bytes
- Logo, se um programa não for um múltiplo da unidade
fixa, vai existir sempre um pedaço de memória desperdiçado
- Solução
- Compactação
- Processo através do qual os pedaços de memória
ocupados são agrupados, ficando apenas um “grande” pedaço livre
- Apenas é possível se o SO permitir realocação
dinâmica em tempo de execução
- Permitir a um processo a alocação de espaços de memória não
contíguos
Topo Paginação de Memória - Método de gestão de memória que permite que o espaço de armazenamento
seja não contíguo
- A paginação é suportada por hardware ou por uma combinação do
hardware com o software
- Divide-se a memória física em blocos de tamanho fixo, chamados
frames, cujo tamanho é uma potência de 2
- Divide-se a memória lógica em blocos do mesmo tamanho, chamados
páginas (pages)
- Há que registar todas as frames livres
- Para correr um programa com um tamanho de n páginas, é necessário
encontrar n frames livres e carregar o programa
- Activar uma tabela de páginas para converter endereços lógicos em
endereços físicos
- Nota: A fragmentação externa é eliminada, mas não a fragmentação
interna
- O endereço gerado pela UCP é dividido em 2 partes:
- Page number: usado como índice na tabela de páginas que
contém o endereço base de cada página em memória física
- Page offset: combinado com o endereço de base para definir
o endereço físico que é enviado para a unidade de memória
- Implementação:
- A tabela de páginas é guardada na memória principal
- Page-table base register (PTBR) aponta para a tabela
de páginas
- Page-table length register (PRLR) indica o tamanho
da tabela de páginas
- Qualquer acesso a dados/instruções requer 2 acessos
à memória:
- um para a tabela de páginas
- outro para os dados/instruções
- O problema dos dois acessos à memória pode ser
resolvido através duma cache de pesquisa rápida, designada por memória
associativa ou Translation Look-aside Buffers (TLBs)
- Protecção
- A protecção de memória é feita através da associação de um bit
de protecção a cada frame, na tabela das páginas
- O bit valid-invalid está associado a cada entrada na tabela de
páginas:
- “valid” indica que a página associada está no espaço
de endereçamento lógico do processo, sendo por isso uma página legal
- “invalid” indica que a página não está no espaço de
endereçamento lógico do processo
- Estrutura hierárquica
- Permite gerir máquinas com grandes capacidades de endereçamento
físico
- Exemplo:
- Sistema com endereçamento de 32bits
- Tamanho de página 4kBytes
- Número de entradas da tabela de páginas ~1
Milhão com 4bytes – 4MB
- Hashed pages
- Para processadores superiores a 32bits
- O apontador para a página é calculado através de uma
função hash, obtendo o primeiro elemento de uma lista ligada
- Cada entrada na lista é constituída por três elementos:
- Endereço lógico
- Endereço da página
- Apontador para a próxima entrada
- Vantagens:
- A busca é limitada aos elementos da lista ligada
- Inverted Page Table
- Uma entrada para cada página de memória
- Cada entrada contém:
- o endereço lógico da página;
- o endereço físico;
- o processo que é dono da página.
- Vantagens:
- Diminui a memória necessária para armazenar a
tabela, mas pode aumentar o tempo necessário para procurar na tabela
- Páginas partilhadas
- O código referente a algumas bibliotecas ou programas, desde que
seja reentrante, pode ser partilhado entre vários processos
- Normalmente páginas do tipo read-only
Segmentação de Memória - A Segmentação da Memória permite que um utilizador veja o espaço de
memória como se estivesse dividido em várias partes (segmentos)
diferentes
- Um endereço lógico passa a ser referenciado pelo número do
segmento e pelo offset dentro do segmento:
- Tabela de segmentos
- traduz endereços lógicos bidimensionais em endereços físicos
unidimensionais; cada entrada da tabela tem:
- base – contém o endereço físico do início do
segmento em memória
- limit – especifica o comprimento do segmento
- Segment-Table Base Register (STBR)
- aponta para a localização da tabela de segmentos em memória
- É gravada pelo SO no PCB sempre que existe uma mudança de
contexto
- Segment-Table Length Register (STLR)
- indica o número de segmentos usados pelo programa; o
identificador segmento s, é verdadeiro se s<STLR
- Principal vantagem
- Protecção no acesso aos segmentos de memória
- Exemplo: a tentativa de acesso para além dos limites de um
determinado segmento de memória causa uma interrupção de software e não
permite o
acesso caso o processo não tenha direito de acesso ao segmento
- A segmentação permite também a partilha de segmentos de memória entre
processo diferentes de acordo com as protecções de acesso definidas