3. Considerações Gerais
• Memória necessita ser alocada de forma eficiente para permitir o
máximo possível de processos.
• Um sistema de memória possui pelo menos dois níveis:
Memória principal: acessada pela CPU
Memória secundária: discos
• Programas são armazenados em disco.
Executar um programa se traduz em transferi-lo da memória secundária à
memória primária.
• Qualquer sistema operativo tem gerência de memória.
Monotarefa: gerência é simples.
Multitarefa: complexa.
Nilza dos Santos
4. Memória lógica e Memória física
• Memória lógica
É aquela que o processo “enxerga”.
Endereços lógicos são aqueles manipulados por um processo.
• Memória física
Implementada pelos circuitos integrados de memória.
Endereços físicos são aqueles que correspondem a uma posição real de
memória.
Nilza dos Santos
5. Endereço lógico versus endereço físico
• Espaço lógico de um processo é diferente do espaço físico.
Endereço lógico: gerado pela CPU (endereço virtual)
Endereço físico: endereços enviados para a memória RAM
• Programas de usuários “vêem” apenas endereços lógicos.
• Endereços lógicos são transformados em endereços físicos no momento
de execução dos processos.
Nilza dos Santos
6. Unidade de gerência de memória
• Memory Management Unit (MMU)
Hardware que faz o mapeamento entre endereço lógico e endereço físico.
• Existem inúmeros tipos de MMU (ou UGM):
Inicialmente simples, baseada em registos de relocação
Constituída depois por um chip dedicado com mais funções.
Actualmente faz parte do chipset da maioria dos processadores, tendo-se
tornado bastante complexo de utilizar e programar.
Nilza dos Santos
7. Ligação de Instruções e Dados à Memória
• A ligação das Instruções e Dados a Endereços Físicos da Memória podem ser
feitos em três alturas distintas:
• Na compilação: se os endereços de memória são conhecidos à priori, o código
pode ser gerado de forma absoluta.
Mas se o endereço de início muda, terá de ser recompilado.
• No carregamento: se os endereços da memória onde o processo vai ser
carregado não são conhecidos no momento da compilação, o código é gerado
em modo relocável.
• Na execução: se o processo pode ser carregado em vários endereços e memória
diferentes durante a sua execução, a ligação aos endereços não pode ser
realizada de forma definitiva.
• Nesse dois últimos casos é necessário suporte do hardware para realizar o
mapeamento de endereços:
Registos de Base e Limite
Unidade de Gestão Memória
Nilza dos Santos
8. Código relocável
• Carregador relocador
Correção de todas as referências a memória de forma a corresponder ao
endereço de carga do programa.
• Necessidade de identificar quais endereços devem ser corrigidos.
Código relocável
Mapeamento das posições a serem corrigidas é mantida através de tabelas
• Código executável mantém informações de relocação na forma de
tabelas.
No momento da carga o programa executável é interpretado e os endereços
corrigidos.
Nilza dos Santos
9. Código absoluto
• Carregador absoluto
Não realiza correção de endereços no momento da
carga do programa em memória.
• Código executável absoluto não necessita manter tabelas de endereços
a serem corrigidos.
• Endereço de carga
Fixo pelo programa (programador)
Qualquer correção pode ser feita automaticamente, de
forma transparente, a partir de registradores de base.
Nilza dos Santos
10. Mecanismo Básico de Relocação
• A todos os endereços lógicos gerados pelo CPU é adicionado o valor
contido num registo de relocação.
Nilza dos Santos
11. Mecanismo Básico de Limitação
• É também necessário limitar o espaço de endereçamento lógico a que
um processo pode aceder.
• Para isso são utilizados os dois registos base e limite.
Nilza dos Santos
12. Mecanismo Básico de Protecção
• Com os Registos de Base e Limite é possível implementar um
esquema de protecção muito simples:
Quando o endereço gerado pelo CPU é inferior à base ou superior ao
limite é gerada uma excepção para o sistema operativo.
Para cada processo são carregados valores diferentes nos registos.
Nilza dos Santos
13. Alocação de Memória
• Para carregar um processo em memória, é necessário
atribuir-lhe uma zona de memória de tamanho igual ou
superior ao espaço físico total que ocupa.
• A alocação de Memória mais simples é feita através do
particionamento do espaço físico disponível em
múltiplos blocos
Bloco livre: espaço contínuo de memória livre que
pode estar localizado em qualquer sítio da memória
física.
Quando um processo está para ser carregado em
memória, é-lhe atribuída memória de um bloco livre.
O Sistema Operativo mantém informações sobre os
Blocos livres.
Blocos ocupados.
Nilza dos Santos
14. Mecanismos de Particionamento
• Existem várias formas de particionar o espaço memória, que dependem
sobretudo do tipo de Unidade de Gestão Memória utilizada.
O mecanismo mais simples consiste na utilização de dois registos base e limite,
que só permitem alocação contínua de toda a memória de um processo.
• Com a evolução do hardware, mecanismos mais complexos têm sido
desenvolvidos e integrados pelos SO ao longo dos tempos.
• Utilização de múltiplos registos de relocação, permitindo distinguir
várias zonas distintas no espaço de um processo.
Segmentação
• Decomposição do espaço lógico e físico em inúmeras pequenas zonas
independentes da natureza do seu conteúdo
Paginação
Nilza dos Santos
15. Alocação Memória em Modo Contínuo
• Como responder a um pedido de alocação de N bytes a partir de uma
lista de blocos livres:
• First-fit: alocar o primeiro bloco livre suficientemente grande para
conter N bytes.
• Best-fit: alocar o mais pequeno bloco que seja suficientemente grande
para conter N bytes.
É preciso percorrer a lista toda, a menos que esteja ordenada por tamanhos.
Produz os melhores resultados pois provoca menos desperdícios.
•
• Worst-fit: alocar o maior bloco que seja suficientemente grande.
Necessita percorrer a lista toda.
Nilza dos Santos
20. Swapping
• Um processo pode ser temporariamente e parcialmente retirado da
memoria central caso haja falta de espaço para manter todos os
processo, e mais tarde de novo carregado para continuar a execução.
A unidade de swapping é geralmente o segmento.
• Memória Secundária (Backing Store) – espaço em disco rápido
suficientemente grande para guardar cópias das imagens memória de
todos os processos residentes; deve permitir acesso rápido e directo a
essas imagens.
• Roll out, roll in – variante do swapping utilizada para algoritmos de
scheduling baseados na prioridade: os processos com baixa prioridade
podem ser retirados da memória para deixar espaço a processos com
maior prioridade.
Nilza dos Santos
Protecção Memoria
A protecção memória é implementada para garantir uso exclusivo de processos a espaço memória.
Bit Válido/inválido associado a cada entrada na tabela de páginas:
“válido” indica que a página associada está no espaço de endereçamento do processo e é portanto um acesso legal.
“inválido” indica que a página não está acessível no espaço de endereçamento de um processo.
Um acesso de um processo a uma página com o bit inválido provoca uma excepção (trap).
Cada processo tem um conteúdo específico da tabela de páginas que faz parte do seu contexto de execução.
Mesmo as páginas não utilizadas pelo processo têm de ser declaradas inválidas para prevenir acessos fora do espaço autorizado.
Paginação
Para resolver os problemas de fragmentação introduzidos pela alocação contínua em arquitecturas segmentadas.
O espaço de endereçamento físico de um processo pode ser descontínuo
A memória livre é utilizada onde estiver disponível
A memória física é dividida em blocos de tamanho fixo chamados frames (“molduras”) cujo tamanho é uma potência de 2, geralmente compreendido entre 512 e 8192 bytes.
A memória lógica é dividida em blocos do mesmo tamanho chamados páginas.
O sistema guarda a lista de todas as frames livres.
Para executar um programa com n páginas é necessário encontrar n frames livres.
A localização física de cada frame é guardada numa tabela de páginas para realizar a tradução de endereços lógicos em endereços Físicos.
A única fragmentação que existe é no interior das páginas.