意義
這些代碼從執行檔載入到進程的地址空間執行。一般程式在用戶空間執行當一個程式調用了系統調用或者觸發了某個異常,它就陷入了核心空間。此時,我們稱核心“代表進程執行”並處於進程上下文。在此上下文中current宏是有效的。除非在此間隙有更高優先權的進程需要執行並由調度器做出了相應調整,否則在核心退出的時候,程式恢復在用戶空間繼續執行。
系統調用和異常處理程式是對核心明確定義的接口。進程只有通過這些接口才能陷入核心執行——對核心的所有訪問都必須通過這些接口。
進程上下文實際上是進程執行活動全過程的靜態描述。我們把已執行過的進程指令和數據在相關暫存器與堆疊中的內容稱為上文,把正在執行的指令和數據在暫存器和堆疊中的內容稱為正文,把待執行的指令和數據在暫存器與堆疊中的內容稱為下文。具體的說,進程上下文包括計算機系統中與執行該進程有關的各種暫存器(例如通用暫存器,程式計數器PC,程式狀態字暫存器PS等)的值,程式段在經過編譯過後形成的機器指令代碼集,數據集及各種堆疊值PCB結構。這裡,有關暫存器和棧區的內容是重要的,例如沒有程式計數器PC和程式 狀態暫存器PS,CPU將無法知道下一條待執行指令的地址和控制有關操作。
進程上下文是可以按照層次規則組合起來的。例如在UNIX System V中,進程上下文由用戶級上下文,暫存器上下文以及系統級上下文組成。
用戶級上下文由進程的用戶程式段部分編譯而成的用戶正文段,用戶數據,用戶棧組成。
暫存器上下文則有程式暫存器PC,處理機狀態暫存器PS,棧指針和通用暫存器的值組成,其中PC給出了CPU將要執行的下一條指令的虛地址;PS給出了機器與該進程相關聯的硬體狀態;棧指針指向下一項的當前地址,而通用暫存器則用於不同執行模式間的參數傳遞。
進程的系統級上下文分為靜態和動態部分。這裡的動態指進程在進入和退出不同的上下文層次時,系統為各層上下文中相關聯的暫存器所保存和恢復的記錄。靜態部分為PCB結構,將進程虛地址空間映射到物理空間以得到核心棧。這個核心棧主要是用來裝載進程中所使用系統調用的調用序列。
系統級上下文的動態部分是與暫存器上下文相關聯的。進程上下文的層次概念也主要體現在動態部分,及系統級上下文的動態部分可看成是一些數量變化的層次組成。其變化規則滿足先進後出的堆疊方式,每個上下文層次在棧中各占一項。
包含
每個進程執行過的、執行時的以及待執行的指令和數據;在指令暫存器、堆疊、狀態字暫存器等中的內容。此外, 還包括進程打開的檔案描述符等.