Memory management 现代操作系统内核(UNIX、Windows)如何区分页面错误?
我试图理解操作系统内核是如何处理页面错误的。维基百科上的文章区分了小错误、大错误和无效页面错误 一个主要的页面错误是,主内存中还没有虚拟->真实地址映射,但磁盘上存在真实地址,对于此页面错误异常,异常处理程序搜索磁盘并将页面帧带到主内存,并进行虚拟->真实地址映射 无效页面错误是指应用程序试图访问未映射的地址,例如恶意指针。引发相同的页面错误异常,但异常处理程序现在决定终止程序,主要是Seg错误(内核转储)错误 我的问题是,内核如何区分这两种类型的页面错误?我希望这个问题的答案能更深入一些,如果可能的话,希望能把我和更详细的文章联系起来。请问我任何澄清Memory management 现代操作系统内核(UNIX、Windows)如何区分页面错误?,memory-management,operating-system,kernel,Memory Management,Operating System,Kernel,我试图理解操作系统内核是如何处理页面错误的。维基百科上的文章区分了小错误、大错误和无效页面错误 一个主要的页面错误是,主内存中还没有虚拟->真实地址映射,但磁盘上存在真实地址,对于此页面错误异常,异常处理程序搜索磁盘并将页面帧带到主内存,并进行虚拟->真实地址映射 无效页面错误是指应用程序试图访问未映射的地址,例如恶意指针。引发相同的页面错误异常,但异常处理程序现在决定终止程序,主要是Seg错误(内核转储)错误 我的问题是,内核如何区分这两种类型的页面错误?我希望这个问题的答案能更深入一些,如果
谢谢。大体上说,内核在某种程度上代表了(当前)进程的功能。它知道每个页面段如何处理页面错误。它在物理地址中工作(因此其地址空间不是用户模式的地址空间),但维护一些复杂的数据结构,以有效地表示虚拟地址和物理地址(如果有)之间的映射,并根据这些映射配置MMU 例如,参见戈尔曼的书(一些细节可能已经过时) 还可以阅读GNU机制 A给出了故障时的相关(物理和/或虚拟)地址(例如通过硬件)。请参阅,并阅读。内核处理所有页面错误(它为每个页面错误都提供相同的硬件,数据描述错误-包括错误虚拟地址),并确定错误类型 在Linux上,您甚至可以(以不可移植、ABI和特定于处理器的方式)处理。(因此,内核已经收集了它能够提供给
SIGSEGV
处理程序的所有信息。但是请仔细阅读)。但这通常是不值得的痛苦
还可以查看Linux内核源代码的内部
还可以阅读泛读。也许读一些关于处理器架构和操作系统的书,学习更简单的架构(比如or)
请参见其。从总体上讲,内核具有(当前)进程的某些表示形式。它知道每个页面段如何处理页面错误。它在物理地址中工作(因此其地址空间不是用户模式的地址空间),但维护一些复杂的数据结构,以有效地表示虚拟地址和物理地址(如果有)之间的映射,并根据这些映射配置MMU 例如,参见戈尔曼的书(一些细节可能已经过时) 还可以阅读GNU机制 A给出了故障时的相关(物理和/或虚拟)地址(例如通过硬件)。请参阅,并阅读。内核处理所有页面错误(它为每个页面错误都提供相同的硬件,数据描述错误-包括错误虚拟地址),并确定错误类型 在Linux上,您甚至可以(以不可移植、ABI和特定于处理器的方式)处理。(因此,内核已经收集了它能够提供给
SIGSEGV
处理程序的所有信息。但是请仔细阅读)。但这通常是不值得的痛苦
还可以查看Linux内核源代码的内部
还可以阅读泛读。也许读一些关于处理器架构和操作系统的书,学习更简单的架构(比如or)
请看它的特别之处。我会忽略维基百科文章中的模型。无效页面错误根本不是页面错误,而是逻辑内存转换失败 主要和次要页面错误的概念,IMHO是令人困惑的。事实上,维基百科的文章将两件不同的事情描述为一个次要的页面错误。我甚至想知道是否有什么不同于文本的阅读方式 我会重新思考如下: