Sistemas Operacionais Abertos Prof. MSc. André Yoshimi Kusumoto [email protected] Prof. André Y. Kusumoto – [email protected] Gerência de Memória Fundamentos • A memória consiste em um grande vetor de palavras ou bytes Mapeamento de endereços • Geralmente, um programa reside em disco como um arquivo executável binário. • O programa deve ser levado à memória e colocado em um processo para ser executado. • A medida que o processo é executado, ele acessa instruções e dados da memória. • Por fim, o processo termina e seu espaço de memória é declarado disponível. 2/ Prof. André Y. Kusumoto – [email protected] Gerência de Memória Espaço de endereçamento lógico versus físico • • • • • Um endereço gerado pela CPU é normalmente chamado de endereço lógico, enquanto um endereço visto pela unidade de memória, ou seja, aquele carregado no registrador de endereços de memória, é normalmente chamado de endereço físico. O conjunto de todos os endereços lógicos gerados por um programa é um espaço de endereçamento lógico O conjunto de todos os endereços físicos que correspondem a esses endereços lógicos é um espaço de endereçamento físico. O mapeamento de tempo de execução dos endereços virtuais (lógicos) para físicos é feito pela unidade de gerência da memória (MMU – Memory-Management Unit), que é um dispositivo de hardware. Todo endereço gerado por um processo de usuário no momento em que ele é enviado para a memória é adicionado a um valor do registrador de relocação (proteção de memória). 3/ Prof. André Y. Kusumoto – [email protected] Swapping • • • • • Um processo precisa estar na memória para ser executado. Um processo, no entanto, pode ser removido temporariamente da memória para um armazenamento auxiliar e, em seguida, retornado à memória para continuar sua execução. Normalmente, um processo que é descarregado será carregado para o mesmo espaço de memória que ocupava anteriormente. O sistema mantém uma fila de processos prontos consistindo em todos os processos cujas imagens de memória estejam no armazenamento auxiliar ou na memória principal e prontas para executar. Sempre que o escalonador de CPU executar um processo, ele chama o dispatcher que verifica se o próximo processo na fila está na memória. Se o processo não estiver, e não houver região de memória livre, o dispatcher descarrega um processo que está na memória (swap out) e carrega o processo desejado em seu lugar (swap in). É evidente que o tempo de troca de contexto em um sistema de troca como esse é relativamente alto. A parte principal do tempo de troca é o tempo de transferência. 4/ Prof. André Y. Kusumoto – [email protected] Paginação Permite que o espaço de endereçamento físico de um processo seja não-contíguo. A paginação evita o problema de ajustar os pedaços de memória dos mais diversos tamanhos no armazenamento auxiliar. Quando alguns fragmentos de código ou dados que residem na memória principal precisam ser descarregados (operação de swap out), deve haver espaço disponível no armazenamento auxiliar. Metodologia • A memória física é quebrada em blocos de tamanhos fixo chamados quadros (frames). A memória lógica também é quebrada em blocos de tamanho igual chamados páginas. Quando um processo vai ser executado, suas páginas são carregadas em qualquer quadro de memória disponível a partir do armazenamento auxiliar. • Cada endereço gerado pela CPU é dividido em duas partes: um número de página (p) e um deslocamento de página (d), ou offset. O número de página é usado como índice em uma tabela de página. A tabela de página contém o endereço base de cada página na memória física. Esse endereço base é combinado com o deslocamento de página para definir o endereço de memória física que é enviado para a unidade de memória. • • 5/ Prof. André Y. Kusumoto – [email protected] Paginação • • O tamanho de uma página é geralmente uma potência de 2 Assim o endereço lógico será o seguinte: número página deslocamento na página p d onde p é um índice na tabela de páginas e d é o deslocamento dentro da página. 6/ Prof. André Y. Kusumoto – [email protected] Paginação Exemplo: • Usando um tamanho de página de 4 bytes e uma memória física de 32 bytes (8 frames) • O endereço lógico 0 corresponde página 0, com deslocamento • A página 0 está no quadro 5. O endereço lógico 0 é mapeado no endereço físico 20 (=(5x4)+0); onde 5 é o endereço da tabela, 4 o tamanho do frame e 0 o deslocamento • O endereço lógico 3 (página 0, deslocamento 3) é mapeado no endereço físico 23 (=(5x4)+3) • O endereço lógico 4 (página 1, deslocamento 0) é mapeado no endereço físico 24 (=(6x4)+0) • O endereço lógico 13 é mapeado no endereço físico 9 7/ Prof. André Y. Kusumoto – [email protected] Segmentação Metodologia • Oferece suporte a visão de usuário da memória. • Um espaço de endereçamento lógico é uma coleção de segmentos. Cada segmento tem um nome e 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. • Assim, um endereço lógico consiste em uma dupla: s d <número do segmento, deslocamento> • • • O número de segmento é usado como um índice para a tabela de segmentos. O deslocamento d do endereço lógico deve estar entre 0 e o limite de segmento. Ele será adicionado à base do segmento para gerar o endereço na memória física do byte desejado. Se não estiver, é gerada uma exceção para o sistema operacional. A tabela de segmentos é basicamente um vetor de pares de registradores base limite. 8/ Prof. André Y. Kusumoto – [email protected] Segmentação Exemplo • 5 segmentos numerados de 0 a 4 • os segmentos são armazenados na memória física • a tabela de segmentos possui uma entrada para cada segmento (endereço de início do segmento na memória física – base e o tamanho desse segmento – limite) • o segmento 2 tem 400 bytes de comprimento e começa na posição 4300 • Assim, uma referência ao byte 53 do segmento 2 é mapeada na posição 4300 + 53 = 4353. • Uma referência ao segmento 3, byte 852, é mapeada para 3200 + 852 = 4052 • Uma referência ao byte 1222 do segmento 0 resultaria em uma exceção ao sistema operacional, pois esse segmento só tem 1000 bytes de comprimento. 9/ Prof. André Y. Kusumoto – [email protected] Paginação x Segmentação • • A paginação divide o programa em partes de tamanho fixo, sem qualquer ligação com a estrutura do programa A segmentação permite uma relação entre a lógica do programa e sua divisão na memória (dados,instruções) 10/