Assembly 在x86软件中断期间,什么时候进行上下文切换?
我问这个问题是因为我试图在我的玩具内核中实现中断。因此,我知道当中断发生时,CPU会将不同的信息位推送到堆栈上。然而,我在网上搜索的每一个地方都显示出不同的信息以不同的顺序被推送。我还知道,如果中断发生在用户模式(环3)中,CPU必须切换到内核模式(环0),然后才能执行ISR。我认为这与Assembly 在x86软件中断期间,什么时候进行上下文切换?,assembly,x86,stack,cpu,interrupt,Assembly,X86,Stack,Cpu,Interrupt,我问这个问题是因为我试图在我的玩具内核中实现中断。因此,我知道当中断发生时,CPU会将不同的信息位推送到堆栈上。然而,我在网上搜索的每一个地方都显示出不同的信息以不同的顺序被推送。我还知道,如果中断发生在用户模式(环3)中,CPU必须切换到内核模式(环0),然后才能执行ISR。我认为这与TSS和ss和esp有关,但我不确定。我在互联网上读过各种不同的解释,但还没有发现任何一种解释是一致的 所以我的问题是,在中断期间,(x86)CPU以什么确切的顺序将数据推送到堆栈上,什么时候这样做,在什么时间点
TSS
和ss
和esp
有关,但我不确定。我在互联网上读过各种不同的解释,但还没有发现任何一种解释是一致的
所以我的问题是,在中断期间,(x86)CPU以什么确切的顺序将数据推送到堆栈上,什么时候这样做,在什么时间点通过TSS进行上下文切换,如果有,这会如何影响推送到堆栈上的数据
到目前为止,我从研究中学到了什么(如果有错,请纠正我):我非常确定处理器会在中断期间将eflags
、cs
和eip
以及错误代码
推送到堆栈上。然而,这是推动的全部吗?我在别处读到过ss
和esp
被推送的消息,但我不知道这是否一直发生,或者为什么被推送
此外,我相信CPU会在TSS
中查找铃声0ss
和esp
和的某个点加载它们,但我不确定何时加载。也许它会在中断发生后立即执行此操作?另外,在所有这些过程中,cs
和ds
是如何处理的?CPU是否从IDT
中的条目加载cs
?那ds呢?我必须手动加载吗
对不起,如果你问错地方了,我不知道我还应该去哪里。拿着这本书读一下:
- 第6章中断和异常处理
- 第5.8.5节堆栈切换
- 5.8.6从调用的过程返回
这是在中断时推送的内容
请记住,中断是通过任务门、陷阱门和中断门来处理的,每一个都有不同的语义,最后两个非常接近调用门。不要相信互联网上的随机事物。使用官方手册:英特尔64和IA-32体系结构软件开发人员手册第3A卷:系统编程指南,第1部分,第6章中断和异常HANDLING@Jester:我们是否应该信任随机发布非官方评论的人,将他们引向官方信息?;)