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