usr*_*ΛΩΝ 7 windows linux hibernate
我的问题是计算机操作系统的理论问题,特别是关于休眠的问题。
据我所知,休眠(ACPI 状态 S5,对吗?)涉及将操作系统再次启动时恢复 RAM 所需的所有数据写入硬盘。好的,这对我来说听起来不错。
但是,我记得以前在操作系统课上老师解释了操作系统之间内存管理的差异。Windows 和 Linux 内核都使用虚拟内存:所有页面都初始化为交换区,然后在需要时加载到 RAM 中,以便随时重新定位它们。
我也知道内存页面不会立即刷新到交换,而是在内存中保留一段时间,或者当需要从交换加载页面并且所有内存页面都是脏的
我的问题是:为什么 Windows 需要存储一个单独的hiberfil.sys文件,所有的 RAM 都转储在里面,因为所有页面都应该已经存在于交换文件中(并且休眠只是意味着刷新缓存并停止计算机)并且在长时间不活动后几乎所有页面都是干净的?
同样的,为什么Linux 明确说它正在复制页面到交换分区?当我简单地挂起系统时,在停止之前需要几秒钟的连续磁盘访问(可能是内核刷新缓存),但是当我想休眠时,它需要与恢复相同的时间。
我是否缺少有关内核的信息?
小智 2
您所描述的一些内容听起来不太像虚拟内存,而更像磁盘缓存,操作系统在内存中保留从磁盘读取的数据副本,以防应用程序想要再次读取它。在这种情况下,它还可能会延迟将“脏”页面写回磁盘,以便通过一次写入一堆页面来提高效率。
虚拟内存则相反——数据首先写入RAM,只有当内核需要释放RAM用于其他目的时才写入交换文件。(并不是每一位内存都必须在交换文件中拥有相应的空间;否则你不可能拥有比 RAM 大小更小的交换文件。)传统的想法是,这就是它需要的方式;实际上,它是这样的。在不需要的时候一直将 RAM 复制到磁盘的成本太高了。想象一下,当您运行大量占用内存的程序并且必须开始破坏交换空间时,计算机的运行速度有多慢。
也就是说,有一些实验性研究操作系统的工作方式更像您所描述的那样,具有一些复杂的规则,用于定期将内存复制回磁盘,结果是不需要休眠 - 您可以拔掉插头计算机可能会丢失 30 秒的工作时间。如果您对理论上感兴趣,请查看CoyotOS、CapROS或EROS 。我不知道他们的性能如何,也不知道这种策略可能有什么其他缺点,但是当你考虑到与显卡或其他设备共享内存等疯狂的事情时,我想很难得到它在所有情况下都能正常工作。据我所知,没有任何生产操作系统可以做这种事情。
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |