Content #
首先,描述符的类别字段必须是有效的值,0000 是无效值的一个例子。
然后,检查描述符的类别是否和段寄存器的用途匹配。其规则如下表所示。
只有可以写入的数据段才能加载到SS 的选择器,CS 寄存器只允许加载代码段描述符。另外,对于DS、ES、FS 和GS 的选择器,可以向其加载数值为0 的选择子,即尽管在加载的时候不会有任何问题,但在,真正要用来访问内存时,就会导致一个异常中断。这是一个特殊的设计,处理器用它来保证系统安全。不过,对于CS 和SS的选择器来说,不允许向其传送值为0 的选择子。
最后,除了按表进行段的类别检查外,还要检查描述符中的P 位。如果P=0,表明虽然描述符已被定义,但该段实际上并不存在于物理内存中。此时,处理器中止处理,引发异常中断11。一般来说,应当定义一个中断处理程序,把该描述符所对应的段从硬盘等外部存储器调入内存,然后置P 位。中断返回时,处理器将再次尝试刚才的操作。如果P=1,则处理器将描述符加载到段寄存器的描述符高速缓存器,同时置A 位(仅限于当前讨论的存储器的段描述符)。
注意,如表中所指示的那样,可读的代码段类似于ROM。可以用段超越前缀“cs:”来读其中的内容,也可以将它的描述符选择子加载到DS、ES、FS、GS 来做为数据段访问。代码段在任何时候都是不可写的。
一旦上述规则全部验证通过,处理器就将选择子加载到段寄存器的选择器。* From