對Linux核心程序上下文和中斷上下文的理解

2021-06-20 04:18:03 字數 1621 閱讀 8582

**:

1、核心空間和使用者空間是作業系統重要的理論知識,使用者程式執行在使用者空間,核心功能模組執行在核心空間,二者是空間是不能互相訪問的。使用者態的程式要想訪問核心空間,須使用系統呼叫。當使用者空間的應用程式通過系統呼叫進入核心空間時,就會涉及到上下文的切換。使用者空間和核心空間具有不同的位址對映、通用暫存器和專用暫存器組,而且使用者空間的程序要傳遞很多變數、引數給核心,核心也要儲存使用者程序的一些暫存器、變數等,以便系統呼叫結束後回到使用者空間繼續執行。

2、所謂的程序上下文,就是乙個程序傳遞給核心的那些引數和cpu的所有暫存器的值、程序的狀態以及堆疊中的內容,也就程序在進入核心態之前的執行環境。所以在切換到核心態時需要儲存當前程序的所有狀態,即儲存當前程序的上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。

同理,硬體通過觸發訊號,導致核心呼叫中斷處理程式,進入核心空間。這個過程中,硬體的一些變數和引數也要傳遞給核心,核心通過這些引數進行中斷處理,中斷上下文就可以理解為硬體傳遞過來的這些引數和核心需要儲存的一些環境(主要是被中斷的程序的環境)。

3、  當乙個程序在執行時,cpu的所有暫存器中的值、程序的狀態以及堆疊中的內容被稱為該程序的上下文。當核心需要切換到另乙個程序時,它需要儲存當前程序的所有狀態,即儲存當前程序的上下文,以便在再次執行該程序時,能夠必得到切換時的狀態執行下去。在linux中,當前程序上下文均儲存在程序的任務資料結構中。在發生中斷時,核心就在被中斷程序的上下文中,在核心態下執行中斷服務例程。但同時會保留所有需要用到的資源,以便中繼服務結束時能恢復被中斷程序的執行。

4、上下文簡單說來就是乙個環境,相對於程序而言,就是程序執行時的環境。相對於中斷而言就是中斷執行時的環境。  

5、乙個程序的上下文可以分為三個部分:使用者級上下文、暫存器上下文以及系統級上下文。

(1)使用者級上下文: 正文、資料、使用者堆疊以及共享儲存區;

(2)暫存器上下文: 通用暫存器、程式暫存器(ip)、處理器狀態暫存器(eflags)、棧指標(esp);

(3)系統級上下文: 程序控制塊task_struct、記憶體管理資訊(mm_struct、vm_area_struct、pgd、pte)、核心棧。

當發生程序排程時,進行程序切換就是上下文切換(context switch).作業系統必須對上面提到的全部資訊進行切換,新排程的程序才能執行。而系統呼叫進行的模式切換(mode switch)與程序切換比較起來,容易很多,而且節省時間,因為模式切換最主要的任務只是切換程序暫存器上下文的切換。

6、執行在程序上下文的核心**是可以被搶占的(linux2.6支援搶占)。但是乙個中斷上下文,通常都會始終占有cpu(當然中斷可以巢狀,但我們一般不這樣做),不可以被打斷。正因為如此,執行在中斷上下文的**就要受一些限制,不能做下面的事情:

(1)睡眠或者放棄cpu。

這樣做的後果是災難性的,因為核心在進入中斷之前會關閉程序排程,一旦睡眠或者放棄cpu,這時核心無法排程別的程序來執行,系統就會死掉

(2)嘗試獲得訊號量

如果獲得不到訊號量,**就會睡眠,會產生和上面相同的情況

(3)執行耗時的任務

中斷處理應該盡可能快,因為核心要響應大量服務和請求,中斷上下文占用cpu時間太長會嚴重影響系統功能。

(4)訪問使用者空間的虛擬位址

因為中斷上下文是和特定程序無關的,它是核心代表硬體執行在核心空間,所以在中斷上下文無法訪問使用者空間的虛擬位址

對Linux核心中程序上下文和中斷上下文的理解

核心空間和使用者空間是 作業系統 理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的cpu都具有不同的操作模式,代表不同的級別,不同的級別具有不同的功能,在較低的級別中將禁止某些操作。linux系統設計時利用了這種硬體特性,使用了兩個級別,最高端別和最低級別,核心執行在...

對Linux核心中程序上下文和中斷上下文的理解

核心空間和使用者空間是作業系統理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的cpu都具有不同的操作模式,代表不同的級別,不同的級別具有不同的功能,在較低的級別中將禁止某些操作。linux系統設計時利用了這種硬體特性,使用了兩個級別,最高端別和最低級別,核心執行在最高...

對Linux核心中程序上下文和中斷上下文的理解

核心空間和使用者空間是作業系統理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的cpu都具有不同的操作模式,代表不同的 級別,不同的級別具有不同的功能,在較低的級別中將禁止某些操作。linux系統設計時利用了這種硬體特性,使用了兩個級別,最高端別和最低級別,核心運 行在...