交换空间或页面文件中的页面

时间:2017-12-29 16:32:26

标签: x86 operating-system paging cpu-architecture virtual-memory

操作系统何时实际将进程的地址空间划分为页面?

假设我编写程序并保存。 OS是否会将程序的地址空间划分为页面,即使它没有在硬盘中执行和空闲?

我读到我们有一部分称为交换空间或页面文件驻留在硬盘中,其大小可以配置,它包含未使用的页面或已从物理内存交换到硬盘的页面。

所以在执行程序之前,整个程序是复制到交换空间还是可以从硬盘的任何部分执行?

2 个答案:

答案 0 :(得分:1)

  

操作系统何时实际将进程的地址空间划分为页面?

通常,LINKER将应用程序划分为页面以建立程序/进程的初始状态,并将执行此操作的指令写入可执行文件。程序加载器按可执行文件的指示分配页面。

  

假设我编写程序并保存。 OS是否会将程序的地址空间划分为页面,即使它没有在硬盘中执行和空闲?

见上文。链接器将您写入的内容划分为页面。

  

所以在执行程序之前,整个程序是复制到交换空间还是可以从硬盘的任何部分执行?

在任何虚拟内存系统(其功能)上,分配给进程的每个页面都将在页面文件中具有相应的位置。在某些系统上,可能有多个页面文件。例如,可执行文件可以成为静态数据和代码的页面文件。

答案 1 :(得分:0)

交换空间是匿名页面的后备存储,或“私有”映射中的脏页(例如,可执行文件的数据段:它是从可执行文件中读取的,但更改不会更新文件)。

进程虚拟地址空间中的未修改页面仍由磁盘(或任何库)上的可执行文件支持。

大多数现代操作系统实际上并没有进行严格的计费以确保他们让进程分配的所有虚拟内存页面都有足够的交换(这称为overcommit),但传统的模型是操作系统确实在虚拟时保留交换记忆已分配。

  

OS是否会将程序的地址空间划分为页面,即使它没有在硬盘中执行并处于空闲状态?

我几乎不知道从哪里开始回答这一部分。去找一个操作系统教科书(或维基百科)并查找:

  • 进程:正在运行的程序实例
  • 可执行文件:只是磁盘上的字节,与运行它之前的任何其他文件没有区别。
  • 虚拟与物理地址空间。

如果程序没有执行,则没有进程也没有地址空间。如果它正在执行,则每个进程都有自己的虚拟地址空间。 (并且只读页面都由磁盘上的同一文件支持。)