Какой объем логической памяти фактически выделяется для каждого процесса на диске?
Предположим, процессор 32-битный. Таким образом, каждый процесс, работающий на этом процессоре, получает 2 ^ 32 бита логической памяти.
- Если в системе n процессов, на диске выделено n * 2 ^ 32 бита? где это выделено? это в пространстве подкачки?
Если размер страницы составляет 4 КБ, общее количество страниц составляет 2^32/2^12 = 2^20. сумма страниц находится на диске и ОЗУ для этого процесса 2^20? если нет, то сколько из этих 2 ^ 20 выделено? 3.
#include <stdio.h> int main(){ printf("Hello World"); }
этот простой процесс также занимает 2 ^ 20 страниц на RAM+ диск?
#include <stdio.h> int main(){ int x; scanf("%d",&x); while(x!=0){ malloc(sizeof(int)); x--; } }
Сколько страниц выделяется на диске + ОЗУ изначально в момент загрузки? это также 2^20? если нет, то как он растет при каждом вызове malloc?
1 ответ
OS
выделяет столько виртуальных страниц, сколько необходимо для сопоставления разделов, определенных в исполняемых файлах.
Если другой процесс уже выполняет те же исполняемые файлы, то ОС повторно использует страницы только для чтения, а если ОС поддерживает "копирование при записи", то она повторно использует уже сопоставленные неизмененные страницы чтения и записи для нового процесса. Для стеков, куч и т. Д. Он зарезервирует виртуальное адресное пространство, но страницы будут выделяться по требованию, т. Е. Когда стек выходит за пределы уже отображенного пространства, ОС выделяет больше страниц.
Пространство в файле подкачки выделяется, когда система решает поменять некоторые измененные страницы процесса из ОЗУ. Это оптимальная стратегия, однако реальное поведение может варьироваться от ОС к ОС.