如何准确识别/解决较小的页面错误?

问题描述 投票:0回答:1

我对分段错误和主要页面错误会发生什么非常清楚,但是我对次要页面错误的细微之处感到好奇,也许动态链接库就是一个例子。 Wikipedia说,例如:

如果页面在生成故障时被加载到内存中,但是在内存管理单元中未标记为正在加载到内存中,则称为次要页面错误或软页面错误。操作系统中的页面错误处理程序仅需要使内存管理单元中该页面的条目指向内存中的页面,并指示该页面已加载到内存中;它不需要将页面读入内存。如果内存由其他程序共享,并且该页面已被其他程序带入内存,则可能会发生这种情况。

这行,“操作系统中的页面错误处理程序只需要使内存管理单元中该页面的条目指向内存中的页面,这会使我感到困惑。每个进程都有自己的页表。因此,如果我尝试映射libc,内核要弄清楚它已经被映射的过程是什么?它怎么知道另一个进程正在使用它,或者已经有一个与之关联的框架?页面缓存会发生这种情况吗?我正在阅读有关它的内容here,但我认为对内核中识别和解决较小的页面错误的步骤进行一些澄清可能会有所帮助。

编辑:looks像是基数树一样用于跟踪吗?尽管我不确定我是否正确理解了这一点。

linux-kernel shared-memory
1个回答
0
投票

起初,内核不知道该页面是否在内存中。大概该进程确实有一个向文件打开的句柄,因此内核通过内核侧文件描述符条目执行操作。这涉及到调用文件系统,该文件系统当然知道文件的哪些页面驻留在内存中,因为需要使用加载页面的代码。

© www.soinside.com 2019 - 2024. All rights reserved.