IA32处理器任务切换过程 学习总结

IA32处理器任务切换

以下4中情况会使处理器跳转到其它任务:
(1)当前的程序或任务执行JMP或CALL指令指向GDT中TSS描述符。
(2)当前的程序或任务执行JMP或CALL指令指向GDT或当前LDT中的任务门描述符。
(3)一个中断或异常指向IDT中的任务门描述符。
(4)当EFLAGS寄存器中NT标志置位时,当前任务执行IRET指令。

当切换到新任务时,处理器完成以下操作:
(1)从任务门或先前的任务链接字段中获得新任务的TSS段选择符作为指令JMP或CALL的操作数。
(2)检查当前任务是否允许切换到新任务。当前任务的CPL和针对新任务的选择符的RPL必须小于等于引用的TSS描述符或任务门的DPL。异常、中断和IRET指令允许不管目的任务门或TSS描述符的DPL,切换任务。如果INT n指令产生的中断,需要检查DPL。
(3)检查新任务TSS描述符标记为存在和有有效的界限。
(4)检查新任务是否可用(调用、跳转、异常或中断)或者忙(IRET返回)。
(5)检查当前的TSS,新TSS 和所有任务切换用到的段描述符是否在内存页表中。
(6)如果JMP和IRET指令发起的任务切换,处理器在当前任务TSS描述符中清除B忙位;如果CALL指令、异常或中断发起的,B位保留设置。
(7)如果IRET指令发起的任务切换,处理器暂时清除保存在EFLAGS寄存器的NT标志;如果CALL指令、异常或中断发起的,在保存的EFLAGS寄存器内容中,NT标志不变。
(8)在当前任务的TSS保存当前任务的状态信息。
(9)如果CALL指令、异常、中断发起的任务切换,处理器从新任务中加载EFLAGS并设置NT标志。如果IRET指令或JMP指令发起,从新任务中加载的EFLAGS寄存器中的NT标志反映NT的状态。
(10)如果CALL指令、JMP指令、异常或中断发起任务切换,处理器在新任务的TSS描述符中设置B忙位;如果IRET指令发起,B位保留。
(11)加载新任务的段选择符和TSS描述符。
(12)处理器加载TSS状态。包括LDTR,PDBR(CR3),EFLAGS,EIP,通用寄存器等。
(13)加载和段选择符相关的描述符并确认。
(14)开始执行新任务。

good luck!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值