在《一个操作系统的实现》第六章中,有一个重大的问题:
在 restart() 函数运行之前,系统一直是运行在内核态的。第一次执行 restart() 之后,TestA() 进程开始运行,系统处在 ring1 。之后,中断发生,由于是 ring1 -> ring0 ,所以存在栈的切换。所以,问题就来了,因为此时 tss.esp0 还没有初始化,所以 此时 tss.esp0 的值是垃圾值,tss.esp0 被赋值是在 hwint00 执行之后才有的。那么,既然是这样,为什么会没有事?
求解!
在 restart() 函数运行之前,系统一直是运行在内核态的。第一次执行 restart() 之后,TestA() 进程开始运行,系统处在 ring1 。之后,中断发生,由于是 ring1 -> ring0 ,所以存在栈的切换。所以,问题就来了,因为此时 tss.esp0 还没有初始化,所以 此时 tss.esp0 的值是垃圾值,tss.esp0 被赋值是在 hwint00 执行之后才有的。那么,既然是这样,为什么会没有事?
求解!










