Какой объем логической памяти фактически выделяется для каждого процесса на диске?

Предположим, процессор 32-битный. Таким образом, каждый процесс, работающий на этом процессоре, получает 2 ^ 32 бита логической памяти.

  1. Если в системе n процессов, на диске выделено n * 2 ^ 32 бита? где это выделено? это в пространстве подкачки?
  2. Если размер страницы составляет 4 КБ, общее количество страниц составляет 2^32/2^12 = 2^20. сумма страниц находится на диске и ОЗУ для этого процесса 2^20? если нет, то сколько из этих 2 ^ 20 выделено? 3.#include <stdio.h> int main(){ printf("Hello World"); }

    этот простой процесс также занимает 2 ^ 20 страниц на RAM+ диск?

  3. #include <stdio.h> int main(){ int x; scanf("%d",&x); while(x!=0){ malloc(sizeof(int)); x--; } }

    Сколько страниц выделяется на диске + ОЗУ изначально в момент загрузки? это также 2^20? если нет, то как он растет при каждом вызове malloc?

1 ответ

OS выделяет столько виртуальных страниц, сколько необходимо для сопоставления разделов, определенных в исполняемых файлах.

Если другой процесс уже выполняет те же исполняемые файлы, то ОС повторно использует страницы только для чтения, а если ОС поддерживает "копирование при записи", то она повторно использует уже сопоставленные неизмененные страницы чтения и записи для нового процесса. Для стеков, куч и т. Д. Он зарезервирует виртуальное адресное пространство, но страницы будут выделяться по требованию, т. Е. Когда стек выходит за пределы уже отображенного пространства, ОС выделяет больше страниц.

Пространство в файле подкачки выделяется, когда система решает поменять некоторые измененные страницы процесса из ОЗУ. Это оптимальная стратегия, однако реальное поведение может варьироваться от ОС к ОС.

Другие вопросы по тегам