2012-04-06 54 views

回答

3

如果我们谈论x86或类似的(在页面转换方面)体系结构,在任何给定的时间都有一个虚拟地址空间,通常一部分是为内核保留的,另一部分是为用户模式流程。

在两个进程之间的上下文切换中,只有虚拟地址空间的用户模式部分发生更改。

对于这样的组织,内核始终可以完全访问当前的用户模式进程,因为同样,内核和用户模式进程在任何时刻都只有一个当前的虚拟地址空间,而不是两个,这是一个。所以,内核并不一定要为用户模式页面提供另外的额外映射。但这不是主要观点。

重点是内核为每个页面保留一些统计信息,如果需要的话可以保存到磁盘并在别处重新使用。 CPU在第一次读取或写入页面时将每个页面的page table entry (PTE)标记为accessed,并在第一次写入页面时将其标记为dirty

内核将扫描的PTE定期读取accesseddirty标记更新所述统计,并清除accesseddirty因此它可以(如果有的话,当然)后检测它们的变化。根据这些统计数据,它可以确定哪些页面很少被使用或长时间未被使用,并且可以重新使用。

如果“swapper”在当前进程的上下文中运行,并且它在内核中运行,那么理论上它有足够的来自内核的信息(很少使用或长未使用页的列表来保存和取消映射if dirty或只是取消映射,如果不是dirty)以及对感兴趣页面的访问权限。

如果“swapper”本身作为用户模式进程运行,事情会变得更加复杂,因为默认情况下,它无法访问另一个进程的页面,必须创建映射或要求内核做一些额外的在感兴趣的过程中为它工作。

因此,在内核中发现很少使用和长未使用的页面及其地址。 CPU帮助将PTE自动标记为accesseddirty。如果它们被保存到磁盘而不是在拥有它们的进程的上下文中,则可能需要额外映射到dirty页面。

+0

你是说内核(letz说linux)会始终运行在进程上下文中(在x86架构中)?如果那样,你是否有任何关于Linux内核如何访问需要被换出的页面(对于不在上下文中的过程)的想法?还有,如果没有进程正在运行(理论上)呢?\ – viji 2012-04-06 14:13:00

+0

它可以切换到该进程的上下文,也可以在不切换的情况下创建映射。我不知道它的两个中的哪一个。 – 2012-04-06 14:18:44

+0

那么为什么有3种类型的上下文? (内核上下文,中断上下文,进程上下文)[http://www.learninglinuxkernel.com/Introduction_03.html](http://www.learninglinuxkernel.com/Introduction_03.html) – viji 2012-04-06 14:25:50

相关问题