在纯需求分页期间交换空间管理


12

以下是我在进行OS家庭作业时遇到的一个疑问-但是,它似乎比基于概念的问题要多于简单的编码问题,因此恕我直言,我认为作业标签不适合这样做。

在给定固定数量的RAM和交换内存的情况下,针对同时运行的多个进程的纯需求分页方案中,在以下两种情况下,交换空间会发生什么情况:

  1. 进程遇到页面错误,RAM中没有可用的空闲帧,因此需要将进程的内核帧块中的一个页面写出以进行交换(为简单起见,我不考虑复制-on-write case)。明确地说,将在交换空间中的哪个位置写入此帧,并且为此需要更新哪些数据结构?

  2. 当某个进程需要进入特定页面时,它在交换内存中的位置如何?如何知道该特定页面是否全部存在于交换中?

如您所料,我很难理解在纯需求管理方案中以何种方式管理交换空间,以及什么数据结构必不可少。如果您可以在答案中引用任何链接,那就太好了(我在“操作系统概念-Silberschatz的第8版,我找不到我的问题的明确答案”中进行了搜索)。


3
一个不错的核心CS问题!
戴夫·克拉克

Answers:


8

为了回答这个问题,我将访问一些先决条件。没有硬件支持,就无法实现纯需求分页。所有现代计算机体系结构都支持分页,但是许多具有不同的实现细节。

x86处理器使用所谓的页表来跟踪虚拟地址空间和页映射,以及有关访问权限的位,更重要的是,该页是否甚至存在于物理内存中。违反将触发由OS捕获的页面错误。

有关更多信息,请参阅本文

为了回答页面交换问题,我们必须首先访问以下问题:操作系统如何跟踪哪些进程使用了​​哪些页面以及如何分配它们。有许多不同的数据结构可用于此。标记是否分配帧的平面位数组是一种方法。链接列表或堆栈是另一个。使用纯需求分页时,分配的页面在分配时实际上并未标记为存在。这样的结果是,在实际写入进程之前,不会为进程预留物理内存。完成后,硬件将引发OS陷阱的故障,然后,如果没有可用的物理页面分配给已分配的虚拟页面,则OS使用交换算法。

有关页面框架分配的更多信息,请参见此处。在那里,您将看到一些合适的数据结构的概述。

一旦实现了合适的页面分配算法,就必须选择另一种分配磁盘空间以进行交换的算法。例如,Windows历史上一直在文件系统中使用平面文件进行页面交换。我可以想象,对于跟踪分配页面的数据结构中的每个节点,都有一个指向文件中偏移量的关联指针,用于指示页面在磁盘中的位置。传统上,类似于Unix的操作系统使用单独的分区进行页面交换,这可以说是更快的,因为没有文件系统层。

也可以将交换算法的数据结构与分配算法的数据结构分离,但是两者是相关的,因此可能不经常这样做。

尽管我已经比较简短,但我希望能回答您的问题。我发现,学习操作系统的最佳方法是深入研究有时令人讨厌的特定于体系结构的细节,这些细节可以在wiki.osdev.org和www.osdever.net等网站中找到,这些网站专门处理业余操作系统的制作并提供出色的教程。关于这些细节。


是的,现在我了解了操作系统之间数据结构等的详细信息如何发生巨大变化-指向osdev.org的链接+1!
TCSGrad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.