我目前正在学习操作系统课程中的页表,并且遇到了只读位。我理解将页表的状态设置为只读或读写的用途,但在讲座中,他们还提到您也可以设置为只写状态。为什么一个进程不能从它可以写入的页面中读取,这对我来说没有意义。我试图在网上查找它,但找不到关于这种只写状态的任何信息。
因此,我的问题是,为什么程序员需要一个页面是只写的?这种情况的例子是什么?
我目前正在学习操作系统课程中的页表,并且遇到了只读位。我理解将页表的状态设置为只读或读写的用途,但在讲座中,他们还提到您也可以设置为只写状态。为什么一个进程不能从它可以写入的页面中读取,这对我来说没有意义。我试图在网上查找它,但找不到关于这种只写状态的任何信息。
因此,我的问题是,为什么程序员需要一个页面是只写的?这种情况的例子是什么?
虽然理论上只写页面是可能的,但我想不出任何真正支持它的处理器。
这是英特尔手册的链接。
https://software.intel.com/sites/default/files/managed/7c/f1/253668-sdm-vol-3a.pdf
参见第 5-12 节。您只能禁用页面上的写入和执行。只能通过访问模式禁用读取。
程序不想要限制。“他”认为它没有错误。
保护主要是操作系统的东西(捕捉错误,阻止非善意的程序)。
从操作系统的角度来看:CPU 缓存可以使用只写页面进行不同的优化(从用户空间首选项,或仅通过启发式,操作系统将使用该标志来检查启发式假设是否正确)。但是分页算法也可以以不同的方式完成。
在用户空间:对于多进程通信,进程可以使用只写页面。库可以使用只写来更早地捕获一些错误(并且不会太晚,因为缓冲区损坏,因此很难调试)。
还有一个编码器程序(读取一个大文件并保存一个编码文件):这将通知操作系统页面可以写入磁盘并从内存中丢弃。
但也是为了安全:你在只写页面上写了一个密码,所以你不应该再关心恶意插件试图读取密码(其他进程能够读取它),所以仍然是一个多进程通信案例。
但如您所知,页面保护标志并不能反映程序想要什么。它们只是操作系统的内部检查,它们可能会改变。操作系统可以设置更多限制标志,并在第一次保护命中时放松它们(在采取行动之后)(例如 COW [这也需要写保护])