每个任务有EFLAGS寄存器的副本,其内容在任务创建的时候由内核或操作系统初始化.在多任务系统中,每次当任务恢复运行时,就由处理器固件自动从TSS中恢复.
EFLAGS寄存器的IOPL位决定了当前任务的I/O特权级别.如当前特权级高于或等于IOPL的特权级,所有IO操作都是允许的.
如当前特权级低于IOPL的特权级,需进一步结合任务TSS的I/O许可位串.
处理器检查I/O许可位的方法是先计算它在I/O许可位映射区的字节编号,并读取该字节,然后测试.
IO端口读出,写入操作单位是字节.
CALL FAR
JMP FAR
栈切换过程:
1.使用目标代码段的DPL到当前任务的TSS中选择一个栈,包括栈段选择子,栈指针
2.从TSS读取选择的段选择子,栈指针,并用该选择子读取栈段描述符.
3.检查栈段描述符的特权级,类型.
4.临时保存当前栈段寄存器SS和栈指针ESP内容
5.把新的栈段选择子,栈指针代入SS和ESP寄存器,切换到新栈
6.将刚才临时保存的SS和ESP内容压栈.
7.依据调用门描述符"参数个数"指示,从旧栈将所有参数复制到新栈.
8.将当前寄存器CS和指令指针寄存器EIP压入新栈.
9.从调用门描述符将目标代码段选择子和段内偏移传送到CS和EIP寄存器,开始执行被调用过程.
控制返回:
1.检查栈中保存的CS寄存器的内容,根据其RPL决定返回时是否需改变特权级别
2.从当前栈读取CS和EIP寄存器的内容,针对代码段描述符,代码段选择子的RPL字段实施特权级检查.
3.如远返回带参数,将参数和ESP寄存器当前值相加,以跳过栈中参数部分.
4.如返回时,需改变特权级,从栈中将SS和ESP压栈值代入段寄存器SS和ESP.切换到调用者的栈.
5.如远返回指令带参数,将参数和ESP当前值相加
6.如返回时需改变特权级,检查DS,ES,FS,GS内容.
实模式下,内存最低地址段1KB是中断向量表.
保护模式下,中断向量表不再使用,取而代之是,中断描述符表.它保存的是门描述符,包括中断门,陷阱门,任务门.
调用门,从任务的局部空间转移到更高特权级的全局空间去执行.
中断门,陷阱门允许在任务内实施中断处理,转移到全局空间去执行一些系统级的管理工作.

当中断发生时,处理器用中断号乘以8作为索引访问中断描述符表.当它发现这是一个任务门描述符时,就知道应发起任务切换.于是,它取出任务门描述符;从任务门描述符取出新任务的TSS选择子;再用TSS选择子访问GDT,取出新任务的TSS描述符.
转到新任务执行前,处理器先把当前任务的状态保存起来.
处理器访问新任务的TSS,从中恢复各个寄存器的内容,包括通用寄存器,标志寄存器,段寄存器,指令指针寄存器,栈指针寄存器,局部描述符表寄存器等.
最终,任务寄存器TR指向新任务的TSS,而处理器旋即开始执行新的任务.一旦新任务开始执行,处理器固件会自动将其TSS描述符的B位置"1",表示该任务的状态为忙.
中断发生时,可执行常规的中断处理过程,也可进行任务切换.它们都使用iret指令返回.一个是返回一个任务内的不同代码段,一个是返回到被中断的任务.
32位处理器的EFLAGS有NT位,意思是嵌套任务标志.
每个任务的TSS都有一个任务链接域,可以填写为前一任务的TSS描述符选择子.如当前任务EFLAGS寄存器的NT位是"1",则表示当前正执行的任务嵌套于其他任务内,且能通过TSS任务链接域的指针返回到前一个任务.