中断中断

中断中断

我知道中断处理是如何工作的(切换模式、保存寄存器、更改堆栈......)。但是,我很好奇,如果在我们仍处于内核模式而不是用户模式时发生中断怎么办?

答案1

一模一样。然而,如果我们正在处理一个中断,那么可能什么也没有,或者直到我们完成之前什么也没有。

我们在所有情况下都会做什么:

  • 无条件保存模式,并将模式设置为管理模式(由硬件完成。由中断触发)
  • 无条件保存状态并切换堆栈
  • 运行中断代码
  • 无条件切换堆栈、恢复状态和恢复模式

短语“将模式设置为管理员模式”可以解读为以下任意一种:

  • 确保模式是主管模式。
  • 将 1 写入状态寄存器的 S 位

中断中断

可能有多个(但有限)中断优先级。每个级别都会有一个堆栈。一个中断只能被更高优先级的中断打断。较低优先级的中断可以被较高优先级的中断阻止。这解决了大部分问题,而不是堆栈不能被损坏。

然而,较低优先级的中断可以被阻止(包括用户进程。这些是最低优先级的中断)。因此,确保中断快速(代码不多)非常重要,特别是对于较高优先级的中断:完成工作并退出,让较低优先级的中断(例如用户进程)执行需要时间的操作。

堆栈

当进程调用内核时,内核可以使用与进程相同的堆栈(同步调用:在程序代码中使用系统调用)。

内核还将为每个中断优先级提供一个堆栈。请参阅有关中断中断的部分。

相关内容