系統棧、用戶棧以及棧的內部實現

系統棧(也叫核心棧、內核棧)是內存中屬於操作系統空間的一塊區域,其主要用途爲:
(1)保存中斷現場,對於嵌套中斷,被中斷程序的現場信息依次壓入系統棧,中斷返回時逆序彈出;
(2)保存操作系統子程序間相互調用的參數、返回值、返回點以及子程序(函數)的局部變量。
用戶棧是用戶進程空間中的一塊區域,用於保存用戶進程的子程序間相互調用的參數、返回值、返回點以及子程序(函數)的局部變量。

那麼爲什麼不直接用一個棧,何必浪費那麼多的空間呢??原因有二:

(1)如果只用系統棧。系統棧一般大小有限,如果中斷有16個優先級,那麼系統棧一般大小爲15(只需保存15個低優先級的中斷,另一個高優先級中斷處理程序處於運行),但用戶程序子程序調用次數可能很多,那樣15次子程序調用以後的子程序調用的參數、返回值、返回點以及子程序(函數)的局部變量就不能被保存,用戶程序也就無法正常運行了。。

(2)如果只用用戶棧。我們知道系統程序需要在某種保護下運行,而用戶棧在用戶空間(即cpu處於用戶態,而cpu處於核心態時是受保護的),不能提供相應的保護措施(或相當困難)。

我們知道現在的操作系統大部分都是將內核程序(如:中斷處理程序)掛到正在運行的用戶程序上的如下圖:


核心程序的工作棧就是當前運行的用戶進程的系統棧。每個進程都有自己的用戶棧和系統棧。而且系統棧的大小是確定的(取決於系統允許的中斷嵌套數量,即中斷優先級個數)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章