【问题标题】:Pages in swap space or page file交换空间或页面文件中的页面
【发布时间】:2018-06-10 01:38:33
【问题描述】:

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

假设我编写了一个程序并保存它。即使程序没有执行并且在硬盘中处于空闲状态,操作系统也会将程序的地址空间划分为页面吗?

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

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

【问题讨论】:

  • 硬盘不在地址空间中。
  • @OliverCharlesworth 你能详细说明一下吗?
  • 没什么好说的了,直接——一个硬盘(或更一般地说,一个文件系统)既不在物理地址空间也不在虚拟地址空间中。但是,通常操作系统允许您map files into the virtual address space
  • @OliverCharlesworth 当我们执行程序时,它是否转移到交换空间?
  • 通常在执行程序时,操作系统会将其映射到虚拟地址空间。因此无需将其移动到交换位置,如果操作系统由于内存压力而决定删除这些页面,它可以在需要时从磁盘重新读取它们。

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


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 我们在 Windows 中配置的虚拟内存大小与可分配给所有进程的总虚拟内存或交换空间大小相同吗?
  • @Zephyr:不,从文件映射为只读的页面可以将其用作后备存储,而不是交换空间。而且,Windows 允许过度使用,即使没有交换空间也可以运行。在这种情况下,脏页占用物理 RAM,操作系统无法回收这些物理页(某些操作系统术语中的“页框”)。好吧,除了使用内存压缩作为交换的一种形式......无论如何,我不使用 Windows,所以我不知道你的“总”是否包括物理内存 + 页面文件大小,但即使如果是,过量使用允许更多的虚拟分配。
  • 这个网站说是分页文件或交换空间的大小makeuseof.com/tag/virtual-memory-low-heres-fix
  • @Zephyr:不,这是物理 RAM + 交换空间的大小。这与计算机科学家谈论操作系统理论时所使用的术语不同。
【解决方案2】:

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

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

假设我编写了一个程序并保存它。即使程序没有执行并且在硬盘中处于空闲状态,操作系统也会将程序的地址空间划分为页面吗?

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

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

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

【讨论】:

  • 您的最后一段仅适用于不会过度使用内存的系统。大多数现代操作系统默认会过度使用,否则我们需要的交换空间几乎与物理 RAM 一样多。
  • 维基百科说 MMU 将地址空间划分为页面en.m.wikipedia.org/wiki/Memory_management_unit。您能否为第一个陈述提供参考?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多