Memory management 现代操作系统内核(UNIX、Windows)如何区分页面错误?

Memory management 现代操作系统内核(UNIX、Windows)如何区分页面错误?,memory-management,operating-system,kernel,Memory Management,Operating System,Kernel,我试图理解操作系统内核是如何处理页面错误的。维基百科上的文章区分了小错误、大错误和无效页面错误 一个主要的页面错误是,主内存中还没有虚拟->真实地址映射,但磁盘上存在真实地址,对于此页面错误异常,异常处理程序搜索磁盘并将页面帧带到主内存,并进行虚拟->真实地址映射 无效页面错误是指应用程序试图访问未映射的地址,例如恶意指针。引发相同的页面错误异常,但异常处理程序现在决定终止程序,主要是Seg错误(内核转储)错误 我的问题是,内核如何区分这两种类型的页面错误?我希望这个问题的答案能更深入一些,如果

我试图理解操作系统内核是如何处理页面错误的。维基百科上的文章区分了小错误、大错误和无效页面错误

一个主要的页面错误是,主内存中还没有虚拟->真实地址映射,但磁盘上存在真实地址,对于此页面错误异常,异常处理程序搜索磁盘并将页面帧带到主内存,并进行虚拟->真实地址映射

无效页面错误是指应用程序试图访问未映射的地址,例如恶意指针。引发相同的页面错误异常,但异常处理程序现在决定终止程序,主要是Seg错误(内核转储)错误

我的问题是,内核如何区分这两种类型的页面错误?我希望这个问题的答案能更深入一些,如果可能的话,希望能把我和更详细的文章联系起来。请问我任何澄清


谢谢。

大体上说,内核在某种程度上代表了(当前)进程的功能。它知道每个页面段如何处理页面错误。它在物理地址中工作(因此其地址空间不是用户模式的地址空间),但维护一些复杂的数据结构,以有效地表示虚拟地址和物理地址(如果有)之间的映射,并根据这些映射配置MMU

例如,参见戈尔曼的书(一些细节可能已经过时)

还可以阅读GNU机制

A给出了故障时的相关(物理和/或虚拟)地址(例如通过硬件)。请参阅,并阅读。内核处理所有页面错误(它为每个页面错误都提供相同的硬件,数据描述错误-包括错误虚拟地址),并确定错误类型

在Linux上,您甚至可以(以不可移植、ABI和特定于处理器的方式)处理。(因此,内核已经收集了它能够提供给
SIGSEGV
处理程序的所有信息。但是请仔细阅读)。但这通常是不值得的痛苦

还可以查看Linux内核源代码的内部

还可以阅读泛读。也许读一些关于处理器架构和操作系统的书,学习更简单的架构(比如or)


请参见其。

从总体上讲,内核具有(当前)进程的某些表示形式。它知道每个页面段如何处理页面错误。它在物理地址中工作(因此其地址空间不是用户模式的地址空间),但维护一些复杂的数据结构,以有效地表示虚拟地址和物理地址(如果有)之间的映射,并根据这些映射配置MMU

例如,参见戈尔曼的书(一些细节可能已经过时)

还可以阅读GNU机制

A给出了故障时的相关(物理和/或虚拟)地址(例如通过硬件)。请参阅,并阅读。内核处理所有页面错误(它为每个页面错误都提供相同的硬件,数据描述错误-包括错误虚拟地址),并确定错误类型

在Linux上,您甚至可以(以不可移植、ABI和特定于处理器的方式)处理。(因此,内核已经收集了它能够提供给
SIGSEGV
处理程序的所有信息。但是请仔细阅读)。但这通常是不值得的痛苦

还可以查看Linux内核源代码的内部

还可以阅读泛读。也许读一些关于处理器架构和操作系统的书,学习更简单的架构(比如or)


请看它的特别之处。

我会忽略维基百科文章中的模型。无效页面错误根本不是页面错误,而是逻辑内存转换失败

主要和次要页面错误的概念,IMHO是令人困惑的。事实上,维基百科的文章将两件不同的事情描述为一个次要的页面错误。我甚至想知道是否有什么不同于文本的阅读方式

我会重新思考如下:

  • 进程访问内存地址
  • 内存管理单元尝试使用页表将引用的逻辑页转换为物理页框架。 如果无法进行此类转换(没有相应的表条目,页面表条目被标记为无效),则会生成某种访问冲突错误异常(Wiki文章中的无效页面错误)
  • 如果逻辑页面和物理页面框架之间已经存在直接映射,那么我们都完成了
  • 如果页表指示此时没有与逻辑页对应的物理页帧,CPU将触发页错误异常
  • 执行页面错误处理程序
  • 页面错误处理程序必须找到逻辑(现在是虚拟)页面的存储位置
  • 在此过程中,页面错误处理程序可能会发现页面已经位于物理内存中。有许多方法可以实现这一点。在这种情况下,页面错误处理程序所要做的就是更新页面表以引用物理页面框架并重新启动指令(这是wiki文章称为“次要页面错误”的情况之一)。都做完了
  • 另一种选择是,虚拟页面以页面文件、可执行文件或共享文件的形式存储在磁盘上。在这种情况下,处理程序需要分配一个物理页面框架,将虚拟页面从磁盘读入页面框架,更新页面表,然后重新启动指令(wiki称之为“主要页面错误”)。由于磁盘读取,“主要”故障比“次要”故障处理时间长得多
  • 操作系统的功能之一是跟踪所有虚拟页面的存储位置。特定机制