欢迎使用CSDN-markdown编辑器

在head.s中,首先在用户态执行任务0,在第一次进入发生定时中断时,通过中断门执行中断处理程序,这时中断允许标志IF被自动置为0,即在任务0的内核态中断。当执行中断处理程序中的ljmp TSS1SEL, 0时,进行任务切换,而tss1如下,
tss1: .long 0 /* back link */
.long krn_stk1, 0x10 /* esp0, ss0 */
.long 0, 0, 0, 0, 0 /* esp1, ss1, esp2, ss2, cr3 */
.long task1, 0x200 /* eip, eflags */
.long 0, 0, 0, 0 /* eax, ecx, edx, ebx */
.long usr_stk1, 0, 0, 0 /* esp, ebp, esi, edi */
.long 0x17,0x0f,0x17,0x17,0x17,0x17 /* es, cs, ss, ds, fs, gs */
.long LDT1_SEL, 0x8000000 /* ldt, trace bitmap */
可知eflags=0x200,IF=1,允许中断,完成任务切换后,执行任务1,此时CPU中的eflag=0x200是允许中断的,在任务1执行期间发生定时中断,禁止任务1内核态中断,执行切换到任务0的ljmp TSS1SEL, 0指令,则返回原来任务0的中断处理程序继续执行,在中断返回时,eflags出栈,允许在任务0的用户态发生中断。如此,实现了任务0和任务1的切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值