2013-04-29 29 views
0

§5.1.2.3.5中斷對上下文的干擾如何?如何恢復它?

5當抽象機的處理是由 接收的信號的中斷,對象的值既不是無鎖 原子對象也不類型的未指定揮發性sig_atomic_t被, 如是浮點環境的狀態。當處理程序退出時,處理程序修改的任何 對象的值不是無鎖定原子對象,也不是volatile volatile sig_atomic_t 變得不確定,如同浮點環境的狀態爲 該處理程序並未恢復到其原始的 狀態。

(重點煤礦)

我認爲這意味着,在硬件/軟件中斷的情況下,如果中斷處理程序執行任何浮點運算(它例如是局部堆棧變量)時,被中斷的進程處於不一致的狀態,並且必須重新啓動正在進行的任何浮點計算。 就是這樣,它有什麼含義?如何「恢復上下文」?

+0

你會詳細說明你的問題! – akp 2013-04-29 06:58:54

回答

1

「浮點環境」是指浮點異常和舍入模式的設置,如fesetround()等函數所修改。

您可以使用fegetenv()保存當前的浮點環境,然後使用fesetenv()將其恢復。如果你安裝了一個執行浮點運算的信號處理程序,那麼它應該這樣做(這可以確保它不會例如爲它所中斷的代碼更改當前浮點異常的集合)。

0

我想我們可以在side kernel中執行浮點運算。但是如果這個(你的代碼)被kernel_fpu_begin()/ kernel_fpu_end()所包圍,內核通過調用某些特定函數來支持它。這些函數處理保存和恢復fpu上下文。此外,他們稱之爲preempt_disable()/ preempt_enable(),這意味着沒有睡覺,頁面錯誤等

當過任何中斷則發生在當前正在運行的進程的控制寄存器

其他&信息被保存。 &內核中斷的作用與當前運行進程的狀態無關,因爲只有在完成當前指令週期後纔會中斷進程。然後保存所有信息&發生上下文切換

在還原上下文過程中存儲的中斷進程的控制信息在堆棧中恢復&下一個指令執行!!!