karism Asked: 2020-03-09 05:50:48 +0800 CST2020-03-09 05:50:48 +0800 CST 2020-03-09 05:50:48 +0800 CST 在内核上处理中断[关闭] 772 我知道中断处理是如何工作的(切换模式、保存寄存器、更改堆栈......)。但是,我很好奇,如果在我们仍处于内核模式而不是用户模式时发生中断怎么办? kernel interrupt 1 个回答 Voted Best Answer ctrl-alt-delor 2020-03-09T05:54:29+08:002020-03-09T05:54:29+08:00 完全相同的。但是,如果我们正在处理一个中断,那么可能什么都没有,或者在我们完成之前什么都没有。 我们在所有情况下所做的: 无条件保存模式,并将模式设置为主管模式(由硬件完成。由中断触发) 无条件保存状态并切换堆栈 运行中断代码 无条件切换堆栈,恢复状态和恢复模式 短语“将模式设置为主管模式”可以理解为以下任何一种: 确保该模式是主管模式。 将 1 写入状态寄存器的 S 位 中断中断 可能有多个(但有限的)中断优先级。每个级别都会有一个堆栈。一个中断只能被更高优先级的中断所中断。低优先级的中断,可以被高优先级阻塞。这解决了大部分问题,而不是堆栈不能被破坏。 但是,可以阻止较低优先级的中断(包括用户进程。这些是最低的中断优先级)。因此,确保中断快速(代码不多)很重要,尤其是对于较高优先级的中断:完成工作并退出,让较低优先级的中断(例如用户进程)执行需要时间的位。 堆栈 当进程调用内核时,内核可以使用与进程相同的堆栈(同步调用:在程序代码中使用系统调用)。 内核还将为每个中断优先级设置一个堆栈。请参阅中断中断部分。
完全相同的。但是,如果我们正在处理一个中断,那么可能什么都没有,或者在我们完成之前什么都没有。
我们在所有情况下所做的:
短语“将模式设置为主管模式”可以理解为以下任何一种:
中断中断
可能有多个(但有限的)中断优先级。每个级别都会有一个堆栈。一个中断只能被更高优先级的中断所中断。低优先级的中断,可以被高优先级阻塞。这解决了大部分问题,而不是堆栈不能被破坏。
但是,可以阻止较低优先级的中断(包括用户进程。这些是最低的中断优先级)。因此,确保中断快速(代码不多)很重要,尤其是对于较高优先级的中断:完成工作并退出,让较低优先级的中断(例如用户进程)执行需要时间的位。
堆栈
当进程调用内核时,内核可以使用与进程相同的堆栈(同步调用:在程序代码中使用系统调用)。
内核还将为每个中断优先级设置一个堆栈。请参阅中断中断部分。