磁盘上每个进程实际分配了多少逻辑内存?

磁盘上每个进程实际分配了多少逻辑内存?

假设处理器是 32 位的。因此,在该处理器上运行的每个进程都会获得 2^32 位的逻辑内存。

  1. 如果系统有 n 个进程,那么 n*2^32 位是否分配在磁盘上?分配在哪里?是在交换空间中吗?
  2. 如果页面大小为 4KB,则页面总数为 2^32/2^12 = 2^20。此进程驻留在磁盘和 RAM 上的页面总数是否为 2^20?如果不是,那么这 2^20 中分配了多少个?3.#include <stdio.h> int main(){ printf("Hello World"); }

    这个简单的过程也占用了RAM+Disk上的2^20页吗?

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

    加载时最初在磁盘+RAM 上分配了多少页?它也是 2^20 吗?如果不是,那么随着每次调用 malloc 调用,它如何增长?

答案1

分配OS尽可能多的虚拟页面来映射可执行文件中定义的部分。

如果另一个进程已经在运行相同的可执行文件,则操作系统至少会重用只读页面,如果操作系统支持“写时复制”,则它会为新进程重用已映射的未更改的读写页面。对于堆栈、堆等,它将保留虚拟地址空间,但页面将按需分配,即当堆栈超出已映射的空间时,操作系统会分配更多页面

当系统决定将进程的一些已更改页面从 RAM 中交换出去时,就会分配交换文件中的空间。这是最佳策略,但实际行为可能因操作系统而异。

相关内容