概述
- 操作系统负责什么时候切换到另一个任务,以及切换到哪一个任务执行;
- 处理器只负责具体的切换过程,包括保护前一个任务的现场。操作系统只执行了一个call/jmp/iret的指令,但是处理就完成了任务的切换。
- 协同式任务切换方式
从一个任务切换到另一个任务,需要当前任务主动地请求暂时放弃执行权,或者在通过调用门请求操作系统服务时,由操作系统“乘机”将控制转移到另一个任务。 - 抢占式任务切换方式
在这种方式下,可以安装一个定时器中断,并在中断服务程序中实施任务切换。硬件中断信号总会定时出现,不管处理器当时在做什么,中断都会适时发生,而任务切换也就能够顺利进行。
15.1 本章代码清单
15.2 任务切换前的设置
- 创建和执行操作系统的0特权级任务,任务管理器
要执行任务切换,系统中必须至少有两个任务,而且已经有一个正在执行中。- 创建TSS内存区域:没有LDT,不需要创建额外的栈
- 创建TSS描述符,并加载到GDT中
- 将TSS选择子传送到任务寄存器TR中(处理器会将TSS描述符中的B置1)
15.3 任务切换的方法
- 中断,这是现代抢占式多任务的基础。
-
保护模式下,中断向量表不再使用,取而代之的是中断描述符表,保存的是门描述符。
-
任务门描述符