c-中断上下文的干扰程度如何?如何恢复



§5.1.2.3.5

5当抽象机的处理被接收到一个信号,即既没有锁定的对象的值没有指定volatile sig_ atomic_,浮点环境的状态也是如此。任何由既不是无锁原子的处理程序修改的对象volatile sig_atomic_t类型的对象nor在处理程序退出,浮点环境的状态也退出如果它被处理程序修改而没有恢复到原始状态州

(重点矿井(

我认为这意味着,在硬件/软件中断的情况下,如果中断处理程序执行任何浮点计算(例如对其本地堆栈变量(,则中断的进程将处于不一致的状态,必须重新启动正在进行的任何浮点计算就是这样吗?这意味着什么?一个";恢复上下文">

"浮点环境"是指浮点异常和舍入模式的设置,由fesetround()等函数进行修改。

您可以使用fegetenv()保存当前浮点环境,并使用fesetenv()恢复它。如果您安装了一个执行浮点操作的信号处理程序,那么它应该这样做(例如,这可以确保它不会为中断的代码更改当前引发的浮点异常集(。

我认为我们可以在侧内核中执行浮点运算。但是内核通过调用一些特定的函数来支持它,如果它(您的代码(被kernel_fpu_begin((/kernel_fpu_end((包围。这些函数处理保存和恢复fpu上下文。此外,他们还调用preempt_disable((/preempt_enable((,这意味着没有睡眠、页面故障等。

当任何中断发生时,当前运行的进程的控制寄存器&保存其他信息&内核中断工作——当前运行的进程处于哪种状态并不重要,因为只有在完成当前指令周期后,进程才会被中断。然后保存所有信息&上下文切换发生

在恢复上下文期间,被中断进程的存储控制信息被恢复在堆栈&执行下一个指令!!!

最新更新