我有一个带有时钟中断的简单工作(32 位保护模式)内核。我可以看到这个中断正在工作,因为它多次打印 \xc2\xab\xc2\xa0clock\xc2\xa0\xc2\xbb 。我还可以看到这个中断将控制权交还给内核,因为它在几次时钟中断后在屏幕上打印 \xc2\xab\xc2\xa0Kernel has stop\xc2\xa0\xc2\xbb ,就像它应该的那样。中断与内核位于同一代码段中。
\n我没有设置任何 TSS,但它正在工作。我可以在这篇文章( https://web.archive.org/web/20160326062442/http://jamesmolloy.co.uk/tutorial_html/10.-User%20Mode.html )上读到,当发生中断时,CPU将查看选定的 TSS 段以更新寄存器。
\n如果我没有\xe2\x80\x99t 有这个 TSS ,它如何工作?是因为当中断发生时CPU仍然会自动推送EIP、CS、EFLAGS、EPS、SS并在iret上恢复它们吗?
\n如果我加载单个 TSS,该中断如何知道它应该使用该 TSS?使用ltr指令将在GDT内获取相应的tss段?
\n并不是真正相关,但是当使用硬件上下文切换并跳转到一个 TSS 时,它会在返回时自动跳转到上一个(没有下一个字段,所以 I\xe2\x80\x99m 有点丢失)tss 段吗?
\n这些问题我无法从我的学校课程、osdev 或这个论坛中真正得到明确的答案。
\n