操作系统负责设置RPL字段

操作系统负责设置RPL字段

Content #

操作系统的编写者很清楚段选择子的来源,即,真正的请求者是谁。当它自己读写一个段时,这没有什么好说的;当它提供一个服务例程时,3 特权级别的用户程序给出的选择子在哪里,也是由它定的,它也知道。

在这种情况下,它所要做的,就是将该选择子的RPL 字段设置为请求者的特权级(可以使用arpl 指令)。剩下的工作就看处理器了。

每当处理器执行一个将段选择子传送到段寄存器(DS、ES、FS、GS)的指令,比如:mov ds, ax 时,会检查以下两个条件是否都能满足。

  1. 当前特权级CPL 高于或者和数据段描述符的DPL 相同。即,在数值上,CPL≤数据段描述符的DPL;
  2. 请求特权级RPL 高于或者和数据段描述符的DPL 相同。即,在数值上,RPL≤数据段描述符的DPL。

如果以上两个条件不能同时成立,处理器就会阻止这种操作,并引发异常中断。

按照Intel 公司的说法,引入RPL 的意图是“确保特权代码不会代替应用程序访问一个段,除非应用程序自己拥有访问那个段的权限”。多数读者都只在字面上理解这句话的意思,而没有意识到,这句话只是如实地描述了处理器自己的工作,并没有保证它可以鉴别RPL 的有效性。

From #