Quando um processo não está usando memória virtual, ele tem o kernel ou a memória do usuário na RAM?

2

Um processo pode usar até 4 GB de memória virtual (incluindo usuário e kernel), mas quando não está usando memória virtual, ele tem o kernel e a memória do usuário em memória RAM?

    
por cps 05.08.2010 / 16:35

1 resposta

3

Usar memória virtual não é opcional, um aplicativo não pode evitá-lo. Supondo que estamos falando de memória protegida x86, que é o que a maioria dos sistemas operacionais atuais, como Linux, OS X e Windows, usam no x86.

Basicamente, cada processo vê um espaço de endereço virtual (VAS) de 4 GB. O sistema operacional, em conjunto com o hardware, configura as chamadas tabelas de descritor de página (PDT) que descrevem como esse VAS é mapeado, com granularidade de página (geralmente 4 KB). Uma página pode ser mapeada para a memória física, pode ser mapeada para um arquivo (o que significa que quando o processo tenta ler a partir daquela parte do VAS, ele vai se prender no sistema operacional que lerá a página do arquivo no disco e coloque-o na memória), ou pode não ser mapeado em todos os casos, caso em que tentar acessar essa parte do VAS fará com que o processo trave. E, à parte, enquanto a memória do kernel é mapeada no processo, o processo não pode acessá-la diretamente e irá falhar se tentar fazer isso.

E, o sistema operacional pode usar um arquivo de paginação ou uma partição swap, permitindo que o sistema operacional mova páginas de memória menos usadas para o disco e use a memória para algo mais útil. Novamente, se isso acontecer, os PDTs precisam ser atualizados de acordo e, assim como os arquivos mapeados na memória, se o processo tentar acessar as páginas que foram trocadas, ele será retido no sistema operacional, o que trará a página de volta à memória. (Embora a capacidade de troca seja frequentemente confundida com a memória virtual em si, a ideia fundamental por trás da memória virtual é o conceito de os endereços virtuais serem distintos dos endereços de memória física.)

    
por 05.08.2010 / 18:30