Programação de Sistemas Introdução à gestão de memória Programação de Sistemas Gestão de memória : 1/16 Introdução (1) • A memória central de um computador é escassa. – [1981] IBM PC lançado com 64KB na “motherboard”, podendo ser expandida com 3 cartas de memória 64KB cada – ao todo 256KB de memória central!!! – [2007] PCs possuem, tipicamente, 2GB de memória central! • A memória é hierarquizada a 4 níveis: A. Memória virtual, residente em disco B. Memória central RAM, actualmente formada por módulos montados em circuitos com sockets de 30,72 e 168 pinos. C. Cache, colocada entre CPU e a memória central (parte reside no chip do CPU, parte na “motherboard”). D. Registos do CPU Aumento de custo, Diminuição no tempo acesso e de capacidade Programação de Sistemas Gestão de memória : 2/16 Introdução (2) CPU registos • Tipo Registo Cache RAM Disco Espaço <1KB 1 MB 2 GB 300 GB Tacesso 3 ns 6 ns 60 ns 8 ms Largura banda 100GB/s 10GB/s 2GB/s 50MB/s Gerido por Compilador CPU SO SO Ao longo dos anos a memória RAM aumentou, mas o espaço do SO e número/espaço de programas também! Programação de Sistemas Gestão de memória : 3/16 Introdução (3) Programação de Sistemas Gestão de memória : 4/16 Divisão de memória central (1) A. Para um sistema operativo monoprocesso, a memória central é dividida apenas entre o SO e o processo. Arquitecturas possíveis de divisão de memória central: Figura 4-1, Modern Operating Systems Programação de Sistemas Gestão de memória : 5/16 Divisão de memória central (2) B. Nos SO multiprocesso iniciais, na memória central eram criadas partições fixas à partida (não necessariamente todas de tamanho igual). Partições: • pequenas-1 e 4, • média-2 • grande-3 Figura 4-2, Modern Operating Systems Programação de Sistemas Gestão de memória : 6/16 Divisão de memória central (3) Estratégias de distribuição de partições pelos processos: a) O processo lançado colocado na fila de espera da partição que tenha espaço suficiente para as necessidades. – Inconveniência: um processo que gasta pouco espaço pode ficar à espera numa partição ocupada, enquanto outras partições maiores se encontram livres. b) Em alternativa, a fila de espera é única com 2 estratégias de alocação – Atribuída partição ao processo à frente na lista (pode resultar em desperdício). – Logo que uma partição fique livre, ela é atribuída ao maior processo que nela caiba (os processos de reduzida dimensão ficam prejudicados). Programação de Sistemas Gestão de memória : 7/16 Divisão de memória central (4) C. Nos actuais sistemas operativos multiprocessamento, a memória central é dividida por – Sistema operativo – Vários processos (total ou parcialmente residentes na memória central) • Frequentemente, a dimensão do processo (programa e dados) é maior que a fatia de RAM disponível. Para que o processo possa ser executado são usadas 2 técnicas: – Paginação ou segmentação: o programa/dados são dividos por várias páginas, ou por segmentos. – Permutação (“swapping”), que troca páginas entre disco e RAM. Programação de Sistemas Gestão de memória : 8/16 Divisão de memória central (5) • A alocação de memória atribuída a um processo pode ser alterada pelo SO, quando for necessário arranjar espaço para outro processo acabado de ser lançado. Exemplo: localização do processo A deslocada Figura 4-5, Modern Operating Systems Programação de Sistemas Gestão de memória : 9/16 Problemas no acesso em multiprocessamento 1. Relocação – Um programa não sabe a zona de memória onde efectivamente reside (essa é tarefa reservada ao SO). O CPU deve garantir que: 1. Os endereços de saltos e rotinas são relativos. Nota: no Intel Pentium, os saltos condicionais são relativos a 8 bits (±127 B de endereço) e os dados /saltos incondicionais/ rotinas são endereçados a 32 bits. 2. Os endereços de código e dados são virtuais. O endereço efectivo de memória é calculado pelo CPU, somando ao endereço virtual um valor base (este pode ser alterado pelo SO durante a vida do processo). 2. Protecção – Um processo não pode aceder ao espaço de outro processo. O CPU deve garantir a observação de limites nos acessos. Programação de Sistemas Gestão de memória : 10/16 Objectivos do gestor de memória • O sistema de gestão de memória deve: – assegurar que cada processo dispõe da memória que precisa. – garantir que cada processo só acede à memória a que tem direito (protecção). – optimizar (i.e. minimizar) as transferências de informação em memórias organizadas hierarquicamente. – tornar o mais rapido possível o acesso aos dados em memória central. Como os processos vêm o PS e o MM: • O PS (escalonamento de processos) decide quando o processo corre. • O MM (gestor de memória) determina onde o processo é armazenado. Programação de Sistemas Gestão de memória : 11/16 Gestão de memória central (1) • A gestão de memória central adopta 3 modelos, por ordem crescente de sofisticação A. Sobreposição (“overlay”): as zonas de memória, definidas estaticamente, são ocupadas sucessivamente por partes de programas. Os dados intermédios são guardados em disco. Programa principal (residente) Nota: a sobreposição, usada nos SO antigos quando a memória central era escassa, caiu em desuso. Overlay 1 Overlay 2 Memória principal Programação de Sistemas Overlay 3 Gestão de memória : 12/16 Gestão de memória central (2) B. Partições dinâmicas : o sistema operativo determina que bloco de memória é atribuído ao processo. As partições dinâmicas podem ser implementadas em 2 formas, de acordo com a estrutura de dados usada para representar os blocos disponíveis. i. Lista: em que o SO executa um algoritmo de procura linear de um bloco que permita encaixar o pedido. Vários algoritmos “fit” foram identificados. ii. Baseadas em árvore: em que os blocos são divididos e recombinados numa estrutura baseada em árvore. Programação de Sistemas Gestão de memória : 13/16 Gestão de memória central (3) C. Memória virtual (VM-”virtual memory”) : o programa referencia sempre endereços virtuais (lógicos) e o gestor de memória mapeia esses endereços para o endereço real (físico). A memória virtual pode ser implementada em 2 formas: i. Paginação: em que o programa é dividido em páginas e num dado instante apenas algumas estão em memória. O SO encarrega-se do carregamento e da permuta (“swap”) de páginas, bem como a transcrição do endereço virtual para o endereço real. Nota: paginação foi implementada pela primeira vez em 1962 no computador Atlas, da Universidade Manchester/UK. Programação de Sistemas Gestão de memória : 14/16 Gestão de memória central (4) – A gestão de memória por paginação baseia-se em dois factos: • • – A dimensão dos programas é frequentemente maior que a área de memória central disponibilizada ao processo. Durante a maior parte da vida de um processo, ele passa o tempo a aceder apenas uma pequena fracção de todo o espaço do programa (ex: código-execução de um ciclo, dados-acesso a elementos de uma tabela). A página só é trazida para memória central quando for referenciada (“page-demand”). A página de memória central é enviada para disco apenas se tiver sido modificada. • • Menor gasto de RAM. Menos I/O. Programação de Sistemas Gestão de memória : 15/16 Gestão de memória central (5) – – A técnica de paginação é extensivamente usada nos SO modernos (excepto em sistemas limitados, como sistemas embebidos). Este capítulo foca maioritariamente as técnicas de paginação. ii. Segmentação: as secções de um programa (código, dados, pilha) são armazenadas em áreas possivelmente distintas. • • A segmentação, usada pela primeira vez no Multics, da Honeywell 635, foi adoptada no Intel x86 por forma os 16 bits poderem endereçar 1MB. Nos µP actuais da Intel, a segmentação pura é mantida apenas em modo de endereçamento real. Em geral, o Pentium e Core usam a combinação de segmentação e paginação no modo de endereçamento protegido. Programação de Sistemas Gestão de memória : 16/16