Предположим, процессор 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 ответ1

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .