实模式基本问题

实模式基本问题前面介绍了保护模式的基本问题,也是核心问题,解决了上面的问题,程序就可以在保护模式下运行了

但众所周知80286以后在保护模式下实现了对多任务的硬件支持

我的第一反应是:为什么不在实模式下支持多任务,是不能还是不愿?思考之后,我的答案是:实模式下能实现多任务

因为多任务的关键是有了描述符,可以给出关于数据段的额外描述,如权限等,进而在这些附加信息的基础上进行相应的控制,而实模式下缺乏描述符,但假设我们规定各段的前2个字节或若干字节用于描述段的附加属性,我觉得和使用描述符这样的机制没有本质区别,如果再附加其他机制...基于上述考虑,我更倾向于认为任务是独立于保护模式之外的功能

下面我们来分析一下任务

任务的实质是什么呢?很简单,就是程序嘛!!所谓任务的切换其实就是程序的切换!!现在问题明朗了

实模式下程序一个接一个运行,因此程序运行的“环境”不必保存;保护模式下可能一个程序在运行过程中被暂停,转而执行下一个程序,我们要做什么?很容易想到保存程序运行的环境就行了(想想游戏程序的保存进度功能),比如各寄存器的值等

显然这些“环境”数据构成了一类新的数据段(即TSS)

延用前面的思路,给这类数据段设置描述符(TSS描述符),将该类描述符放在GDT中(不能放在LDT中,因为80x86不允许:)),最后再加一个TR寄存器用于查表

TR是一个起“选择子”作用的寄存器,16位

好了,任务切换的基本工作就是将原任务的“环境”存入TSS数据段,更新TR寄存器,系统将自动查GDT表获得并装载新任务的“环境”,然后转到新任务执行

以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。

相关