㈠ 了解linux中斷--進程上下文和中斷上下文
Linux中斷是指當硬體設備向系統發出信號,請求操作系統的關注和響應時所引發的情況。在這個過程中涉及的上下文可以分為兩種,即進程上下文和中斷上下文。下面我們將深入探討這兩種上下文的區別、原因及影響。
在中斷發生後,CPU跳轉到內核預先設置的中斷處理代碼中,這一過程形成的上下文即為中斷上下文。由於中斷上下文不是一個運行的進程,它不具備task_struct結構,因此無法被調度器管理或控制。這就解釋了為什麼某些可能導致睡眠(進程暫停執行)的函數在中斷上下文中不能被調用。
關於睡眠與運行,我們可以將這兩個狀態視為進程的狀態變化。睡眠狀態指進程被掛起,不被調度器選擇執行;運行狀態則是指進程正在被調度器執行。一個進程的上下文包含所有運行時的環境信息,例如所有寄存器中的值、進程的狀態、堆棧中的內容。在切換進程或處理系統調用時,操作系統需要保存當前進程的上下文,以便後續恢復其執行狀態。在Linux中,進程上下文通常存儲在任務數據結構中。
而中斷上下文,實際上是硬體觸發中斷事件時形成的一種特殊上下文。這包括硬體傳遞給內核的數據和參數,以及內核為了進行中斷處理而需要保留的其他環境信息(主要為被中斷進程的上下文)。簡單來說,中斷上下文就是硬體傳遞給內核的一組參數和當前被中斷進程的環境。
中斷與進程上下文之間存在本質差異。中斷上下文是為了處理特定的硬體事件,而進程上下文則是用於管理進程的執行狀態。中斷上下文與特定進程無關,而進程上下文直接關聯於進程本身。在執行模式上,系統調用引發模式切換(模式切換),主要用於切換到進程上下文進行系統調用服務或異常處理。而中斷處理則導致上下文切換(進程上下文切換),在內核空間下進行中斷服務程序的執行。
在Linux內核中,上下文管理和切換機制確保了系統在中斷處理與進程執行之間能夠順暢地切換。內核代碼代表應用程序執行系統調用時處於進程上下文;而中斷處理程序則運行在中斷上下文。通過上下文的精細管理,Linux在實時性與吞吐量之間取得了平衡,同時確保了各種硬體事件和進程操作能夠得到及時響應與處理。
㈡ linux內核在執行中斷處理時是關中斷的嗎
1、中斷處理程序與其他內核函數真正的區別在於,中斷處理程序是被內核調用來相應版中斷的,而它們運權行於中斷上下文(原子上下文)中,在該上下文中執行的代碼不可阻塞。中斷就是由硬體打斷操作系統。
2、異常與中斷不同,它在產生時必須考慮與處理器時鍾同步。異常被稱為同步中斷,例如:除0、缺頁異常、陷入內核(trap)引起系統調用處理程序異常。
3、不同的設備對應的中斷不同,而每個中斷都通過一個唯一的數字(中斷號)標識。
4、既想讓中斷處理程序運行得快,又想中斷處理程序完成的工作量多,為了在這兩個相悖的目標之間達到一種平衡,一般把中斷處理分為兩個部分。中斷處理程序是上半部(top half):接收到一個中斷,它就立刻開始執行,但只做有嚴格時限的工作,例如對接受的中斷進行應答或者復位硬體,這些工作都是在中斷被禁止的情況下完成的(上半部情況下,中斷被禁止);另一部分是下半部(bottom half):能夠被允許稍後完成的工作會推遲到下半部。