Carlos Gustavo A. da Rocha
A memória principal (RAM) é um recurso importante, e deve ser gerenciado com cuidado Nossos computadores pessoais possuem memória milhares de vezes maior que a dos maiores supercomputadores da década de 60 Contudo os programas continuam a ficar maiores, e mais famintos por memória Como o SO realiza este gerenciamento?
Introdução Para todo programador o computador ideal possui memória totalmente disponível aos seus programas, infinitamente grande e rápida, e que não perca nenhum dado, caso ocorra algum bug ou o computador seja acidentalmente desligado
Introdução Além dos requisitos anteriores, porque não torna-la barata, ou quase gratuita O fato é que tal memória não existe (mantemos a esperança de que alguém aqui vai descobrir como fabricá-la)
Introdução A alternativa realística, ao longo dos anos, tem sido criar uma hierarquia de memória com Poucos megabytes de memória extremamente rápida, muito cara e volátil. (Cache) Poucos gigabytes de memória com velocidade e preços médios, mas ainda volátil. (RAM) Poucos terabytes (ou muitos gigabytes) de memória lenta, barata e não volátil. (Discos Rígidos)
Introdução É trabalho do sistema operacional abstrair esta hierarquia, tornando o uso das diferentes memórias transparentes para o usuário Duas funções principais do SO estão ligados ao gerenciamento desta hierarquia Gerenciamento de memória (que estudaremos agora) Sistemas de arquivos (que estudaremos em breve)
Introdução O gerenciamento de memória deve Manter o controle de quais partes, de quais memórias, estão livres e ocupadas Alocar memória a processos, quando eles necessitarem Desalocar a memória, quando eles não precisarem mais
Sistemas sem abstração (ou gerência) de memória Computadores da década de 60, 70 e o IBM-PC, com sistema operacional MS-DOS realizavam pouca, ou nenhuma gerência de memória Cada programa avistava todos os registradores, cache (se houvesse) e memória RAM Normalmente estes sistemas executavam um programa por vez, que podia utilizar toda a memória RAM
Sistemas sem abstração (ou gerência) de memória Atualmente voltamos a ter sistemas com esta abordagem em tocadores de mídia, eletrodomésticos, celulares simples etc
Espaços de endereçamento Expor a memória física aos processos possui algumas desvantagens Cada processo pode utilizar toda a memória, ocupando até mesmo a utilizada pelo próprio SO (o que irá resultar em um travamento ) Fica complicado, ou impossível, implementar multiprogramação, essencial nos computadores desktop, servidores, computadores de grande porte etc
Espaços de endereçamento Para permitir a multiprogramação, dois problemas devem ser resolvidos Proteção: garante que processos não irão interferir na memória utilizada por outros, ou pelo próprio SO Relocação: permite que um programa possa ser carregado em qualquer local da memória física
Espaços de endereçamento Criam uma espécie de memória abstrata (ou virtual) para os processos São representados por um conjunto de endereços (virtuais) que cada processo pode utilizar para acessar a sua memória (real) Cada processo possui seu próprio espaço de endereçamento, independente do pertencente aos outros processos
Swap O total de memória RAM necessária para todos os processos é frequentemente maior que a RAM A estratégia atual utilizada por sistemas operacionais como Windows, Linux, Mac OS X, permite que parte de cada processo esteja na memória RAM, e outra em uma partição ou arquivo especial do disco rígido A escolha de quais partes de quais processos serão mantidas no disco é de grande importância para o desempenho da máquina Esta técnica é conceitualmente chamada de memória virtual, e popularmente de swap