. Espacos-de-Memoria
Esse documento representa parte dos meus estudos acerca do Livro - Operational Systems Three Easy Pieces, de dominio publico.
Address space
Para poder compartilhar memoria de forma eficiente e permitir distintos programas rodarem simultaneamente precisamos gerar a virtualizacao de memoria para cada programa de forma eficiente. Este espaco abstrato de memoria gerado eh chamado de address space (espaco de enderecos).
O address space contem todo o estado de memoria do programa executado. O codigo do programa esta no address space, assim como uma pilha que contem as chamadas de funcao, recursoes, variaveis locais e parametros. Ha tambem o heap que eh utilizado por padrao para alocacao dinamica de memoria.
Podemos colocar o codigo do programa na parte superior do espaco, pois o codigo do programa certamente nao alterara seu tamanho (com algumas excessoes). Em seguida, temos as partes que alteram de tamanho constantemente. Podemos colocar a stack no final do endereco, e a heap no comeco, assim, elas podem crescer de forma oposta em direcao, mas com a unica limitacao do total de memoria possivel.
Para atingirmos isso, precisamos garantir que a virtualizacao ocorra, ou seja, que consigamos links logicos entre o endereco real e a regiao de endereco do processo. Precisamos, entao, utilizar de enderecoes virtuais de memoria
Objetivos de virtualizacao de memoria
Transparencia: a virtualizacao deve ser invisivel para o processo atual, ou seja, o SO faz a multiplexacao de memoria devida para que o programa entenda que esta rodando em sua totalidade com memoria privada e particular.
Eficiencia: tanto em tempo, quanto espaco, o que nos levara as TLB’s (Translation lookaside buffer)
Protecao: garantir acesso exclusivo do processo a regiao destinada a ele, impedindo qualquer outro acesso.

