2013-03-07 36 views
9

在x86 CPU中,存在控制寄存器编号0. 该寄存器的第16位指示“写保护”设置。 如果该位被清除,CPU可以覆盖只读数据。内存中的 (在页表项中配置)。如果该位置位,CPU不能覆盖存储器中的RO数据。什么是x86 cr0 WP位的目的?

我很好奇的是 “这个位的原始目的是什么??” “为什么x86 CPU需要这个?”

回答

13

Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A pg. 2-15报价(重点矿山):

WP写保护(CR0的位16) - 当设置,从写入只读页抑制主管级别的程序;如果清除,则允许管理员级别的过程写入只读页面(不管U/S位设置如何;请参见第4.1.3节和第4.6节)。 此标志有助于实现创建由UNIX等操作系统使用的新进程(分支)的写入时复制方法。

更新: 看着wikipedia on fork()

每当一个过程(父母或子女)修改一个页面,特定页面的单独副本单是该进程(父母或子女)制成进行了修改。

这是在写入时复制的核心,但呈现在修改内核做了一个问题(在实际写入时为系统调用的结果如 - 认为read())。

4.1.3

CR0.WP允许页面从主管模式来保护写道。如果CR0.WP = 0,则允许管理员模式写入 访问具有只读访问权限的线性地址;如果CR0.WP = 1,他们不是。 (用户模式 写访问决不允许线性地址与只读访问权,而不管 CR0.WP.的值)

通过设置CR0.WP = 1内核将被通知(用PAGE-故障),当它修改只读用户页面并且可以在继续页面修改之前执行写入时复制操作。

+0

谢谢!我已经检查了Intel手册。但我仍然不明白为什么WP位可以促进COW的实施...... – daehee 2013-03-08 09:00:35

+1

@daehee:我已经更新了答案。关键是没有'CR0.WP',内核无法知道是否需要修改需要复制的**用户**页面。 – user786653 2013-03-10 10:35:57

+0

谢谢!它帮助了很多 – daehee 2013-03-11 07:24:35