为什么保护模式跳回实模式要选择一个NormalSelector
2007-04-10 11:28
288 查看
转自:http://www.hackhome.com/2005/1-14/18234569320.shtml
在切换到实模式之前,把一个指向似乎没有用的数据段的描述符Normal的选择子装载到DS和ES。这是为什么呢?
在分段管理机制一文中已介绍过,每个段寄存器都配有段描述符高速缓冲寄存器,这些高速缓冲寄存器在实方式下仍发挥作用,只是内容上与保护模式下有所不同。如上表所示,其中“Y”表示“是”; “N”表示“否”;“B”表示字节;“U”表示向上扩展,“W”表示以字方式操作堆栈。段基地址仍是 32位,其值是相应段寄存器值(段值)乘以16,在把段值装载到段寄存器时刷新。由于其值是16位段值乘上16,所以在实模式下基地址实际上有效位只有20位。每个段的32位段界限都固定为0FFFFH,段属性的许多位也是固定的。所谓固定是指在实方式下不可设置这些属性值,只能继续沿用保护方式下所设置的值。因此,在准备结束保护模式回到实模式之前,要通过加载一个合适的描述符选择子到有关段寄存器,以使得对应段描述符高速缓冲寄存器中含有合适的段界限和属性。本实例GDT中的描述符Normal就是这样一个描述符,在返回实模式之前把对应选择子Normal_Sel加载到DS和ES就是此目的。
在切换到实模式之前,把一个指向似乎没有用的数据段的描述符Normal的选择子装载到DS和ES。这是为什么呢?
实模 式下 段描 述符 高速 缓冲 寄存 器的 内容 | 段寄存器 | 段基地址 | 段界限(固定) | 段属性(固定) | ||||||||
存在性 | 特权级 | 已存取 | 粒度 | 扩展方向 | 可读性 | 可写性 | 可执行 | 堆栈大小 | 一致特权 | |||
CS | 当前CS*16 | 0000FFFFH | Y | 0 | Y | B | U | Y | Y | Y | - | N |
SS | 当前SS*16 | 0000FFFFH | Y | 0 | Y | B | U | Y | Y | N | W | - |
DS | 当前DS*16 | 0000FFFFH | Y | 0 | Y | B | U | Y | Y | N | - | - |
ES | 当前ES*16 | 0000FFFFH | Y | 0 | Y | B | U | Y | Y | N | - | - |
FS | 当前FS*16 | 0000FFFFH | Y | 0 | Y | B | U | Y | Y | N | - | - |
GS | 当前GS*16 | 0000FFFFH | Y | 0 | Y | B | U | Y | Y | N | - | - |
相关文章推荐
- 为什么保护模式跳回实模式要选择一个NormalSelector
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-理论)
- 《Orange’s 一个操作系统的实现》3.保护模式8-页式存储
- 学习笔记:一个操作系统的实现--认识保护模式
- 《Orange’s 一个操作系统的实现》3.保护模式2----认识保护模式A
- 新手理解:为什么bio模式的server端每个client都需要对应一个线程
- 学习x86时,自己写的一个引导,从实时模式到保护模式
- 为什么选择一个好的域名,能够帮助网站更加的容易被人记住
- 保护模式跳回实模式的normal descriptor(续)
- 一个应用策略模式(Strategy)的小实例----对TreeView功能菜单的功能选择模块进行解耦重构
- 《Orange’s 一个操作系统的实现》3.保护模式6-特权级转移(门描述符概述)
- 我们为什么选择一个产品
- 一个操作系统的实现:第三章 保护模式 调试问题
- 保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式
- 《Orange's 一个操作系统的实现》读书手记3(4)--- [ 保护模式(Protect Mode)]
- C#(模板模式)将父窗体继承之后重写一个按钮的事件,为什么每次都要运行两次才结束?
- 学习笔记:一个操作系统的实现--保护模式之基础知识
- 《Orange’s 一个操作系统的实现》3.保护模式5----特权级概述(转)
- 一个操作系统的实现-6_保护模式5
- 《Orange's 一个操作系统的实现》读书手记3(3)--- [ 保护模式(Protect Mode)]