[040][x86汇编语言]第十五章 任务切换 B位 、NT位、
2018-06-28 本文已影响19人
AkuRinbu
学习笔记
《x86汇编语言:从实模式到保护模式》
https://www.jianshu.com/p/d481cb547e9f
EFLGAS标志寄存器的格式
EFLAGS标志寄存器的格式.png不同任务切换对B位(TSS描述符)、NT位(EFLAGS寄存器)和任务链接域(TSS内容)的影响
不同任务切换对B位(TSS描述符)、NT位(EFLAGS寄存器)和任务链接域(TSS内容)的影响- 由
call指令
发起的切换是嵌套的,通过iret指令
返回到前一个任务
假设任务1是整个系统的第一个任务
当任务1开始执行时,
其TSS描述的B位是1,
EFLAGS寄存器的NT位是0,表示不嵌套于其他任务。
使用call指令,从 任务1 切换到 [新]任务2 时,
任务1,仍旧为“忙”,B位=1,NT位不变;
[新]任务2,也变成“忙”,B位=1,NT位=1(表示嵌套与任务1中),
并且 任务2 的TSS指针域(任务域链接)指向任务1。
通过 iret指令 返回到 任务1
[新]任务2,B位=0 ,NT位=0,TSS指针域不变;
- 使用
jmp指令
,不会形成任务的嵌套
使用jmp指令,从任务1 切换到 [新]任务2
任务1,B位=0(表示不忙),NT位(不变);
[新]任务2,B位=1(忙),NT位(从新任务的TSS中加载);
任务嵌套 (CALL指令)
任务相关参考图
TSS(Task State Segment)任务状态段的结构
与任务相关的各部分逻辑示意图
https://www.jianshu.com/p/adb70daa6d2c
任务嵌套中TSS的作用
- TSS用于保存旧任务的各种状态数据(如TSS格式图所示);
- TSS描述符已经加载至GDT;
- TSS本身已加载至内存;