過程的上下文
過程的上下文由其(用戶)的內容組成地址空間以及與該過程相關的硬件寄存器和內核數據結構的內容。正式地,一個過程的上下文是其用戶級上下文,注冊上下文和係統級上下文的結合。1用戶級上下文由過程文本,數據,用戶堆棧和共享內存組成,這些內存占據了虛擬的地址過程的空間。由於交換或分頁而定期不存在的過程的虛擬地址空間的一部分仍然構成用戶級上下文的一部分。
寄存器上下文由以下組件組成。
- 該程序計數器指定CPU將執行下一個指令的地址;該地址是內核或用戶存儲空間中的虛擬地址。
- 處理器狀態寄存器(PS)指定與該過程相關的計算機的硬件狀態。例如,PS通常包含子字段,以表明最近計算的結果導致零,正或負麵結果,或者設置了寄存器溢出和隨身攜帶位,依此類推。引起PS設置的操作是針對特定過程完成的,因此PS包含與該過程相關的機器的硬件狀態。PS中通常發現的其他重要子字段是指示當前處理器執行級別(中斷)以及當前和最新執行模式(例如內核,用戶)的那些。顯示當前執行模式的子字段確定過程是否可以執行特權指令以及是否可以訪問內核地址空間。
- 堆棧指針包含由執行方式確定的內核或用戶堆棧中下一個條目的當前地址。機器體係結構決定堆棧指針是指堆棧上的下一個免費條目還是最後使用的條目。同樣,機器決定了堆棧增長方向朝著數值更高或更低的地址,但就本討論而言,此類問題並不重要。
- 通用寄存器包含該過程在執行過程中生成的數據,以簡化以下討論,讓我們區分兩個通用寄存器,即注冊0和寄存器1,以便在過程和內核之間提供信息。
過程的係統級上下文具有“靜態部分”(以下列表的前三個項目)和“動態部分” OAST兩個項目)。一個過程在整個生命周期中都具有係統級上下文的一個靜態部分,但是它可以具有可變數量的動態零件。係統級上下文的動態部分應被視為內核推動和彈出各種事件時的上下文層堆棧。係統級上下文由以下組件組成。
- 過程表的進程輸入定義了一個過程的狀態,如第6.1節所述,並包含始終可供內核訪問的控製信息。
- 過程的U區域包含僅在過程中需要訪問的過程控製信息。一般控製參數(例如流程優先級)存儲在過程表中,因為必須在ProcCSS上下文之外訪問它們。
- 預先條目,區域表和頁麵表定義了從虛擬地址到物理地址的映射,因此定義了過程的文本,數據,堆棧和其他區域。如果幾個過程共享共同的區域,則將區域視為每個過程上下文的一部分,因為每個過程都獨立操縱區域。內存管理任務的一部分是指出過程的虛擬地址空間的哪些部分不是內存居民。
- 內核堆棧包含內核過程的堆棧框架,因為過程在內核模式下執行。盡管所有進程都執行相同的內核代碼,但它們具有內核堆棧的私有副本,該副本指定了其特定的內核函數調用。例如,一個過程可以調用創建係統調用,然後去睡覺等待內核分配新的inode,而另一個過程可以調用讀取係統調用並進入睡眠,等待數據從磁盤轉移到內存。這兩個進程都執行內核功能,但是它們具有包含其私有功能調用序列的單獨堆棧。內核必須能夠恢複內核堆棧的內容以及在內核模式下恢複過程的堆棧指針的位置。係統實現經常將內核堆棧放置在Proccss U區域,但在邏輯上是獨立的,可以存在於獨立分配的內存區域中。當過程以用戶模式執行時,內核堆棧為空。
- 過程級別上下文的動態部分由一組圖層組成,可視化為最後一台堆棧。每個係統級上下文層都包含必要的信息,以恢複上一層,包括上一個級別的寄存器上下文。
當中斷,進程進行係統調用或過程進行上下文開關時,內核會推動上下文層。當內核從處理中斷,當內核完成係統調用執行或進程執行上下文切換後,過程返回用戶模式時,它會彈出上下文層。因此,上下文開關需要一個係統級上下文層的推動和流行音樂:內核按下舊過程的上下文層,並彈出新過程的上下文層。過程表條目存儲必要的信息以恢複當前上下文層。
級別上下文,包含過程文本(指令),數據,堆棧和共享內存(如果該過程具有任何)以及係統級上下文的靜態部分,包含過程表條目,U區域和預先設備條目(用戶級上下文的虛擬地址映射信息)。圖的右側顯示了上下文的動態部分。它由幾個堆棧框架組成,其中每個幀包含上一層的保存寄存器上下文,而隨著內核在該層執行時,內核鬆弛。係統上下文第0層是代表用戶級上下文的虛擬層。這裏的堆棧的增長是在用戶地址空間中,內核堆棧為null。箭頭指向係統級上下文的靜態部分到上下文動態部分的頂層表示存儲在過程表條目中的邏輯信息,以使內核能夠恢複過程的當前上下文層。
一個過程在其上下文中或更確切地說是在其當前上下文層中運行。上下文層的數量受機器支持的中斷級別的數量界定。例如,如果機器支持軟件中斷,終端,磁盤,所有其他外圍設備和時鍾的不同中斷級別,則
支持5個中斷級別,因此,一個過程最多可以包含7個上下文層:1對於每個中斷級別,係統調用1,用戶級別為1。即使在“最壞”可能的序列中發生中斷,這7層也足以容納所有上下文層,因為在內核處理該級別或更高級別時,給定級別的中斷被阻止(即CPU辯護)。
盡管內核始終在某些過程的上下文中執行,但執行的邏輯函數並不一定與該過程有關。例如,如果磁盤驅動器因為返回數據而中斷了機器,則它會中斷運行過程,並且內核在執行過程的新係統級上下文層中執行中斷處理程序,即使數據屬於另一個過程。中斷處理程序通常不訪問或修改過程上下文,因為這些部分與中斷無關。
繼續在這裏閱讀:64保存過程的上下文
本文是否有幫助?
讀者的問題
-
麥克風3天前
- 回複
-
磁帶1個月前
- 回複
-
詹斯4個月前
- 回複
-
梅利莎4個月前
- 回複
-
納丁4個月前
- 回複
-
凱蘭·米切爾(Caelan Mitchell)4個月前
- 回複
-
Reiss4個月前
- 回複
-
Priamus5個月前
- 回複
-
約翰娜5個月前
- 回複
-
貝拉多娜·穆格沃特(Belladonna Mugwort)5個月前
- 回複
-
艾拉5個月前
- 回複
-
唐納德1年以前
- 回複
-
Efrem1年以前
- 回複