linux進程管理基礎

一、概念引入

  • 線性內存----應用程序員看到的內存空間定義爲線性空間,應用程序員提供的線性空間卻是固定的,不會隨物理內存的變化而變化,這樣才能保證應用程序的可移植性。
  • 物理內存----主板上所用的內存大小。
  • CPU執行級別----CPU將特權級別分爲4個級別:RING0(特權級),RING1,RING2,RING3。其中RING0和RING3在用,與RING0交互的只是內核,與RING3可以是用戶程序。
  • Task structure----內核數據結構,用於進程記錄管理。
  • MMU----內存管理單元,它是中央處理器(CPU)中用來管理虛擬存儲器、物理存儲器的控制線路,同時也負責虛擬地址映射爲物理地址,以及提供硬件機制的內存訪問授權,多用戶多進程操作系統。
  • TLB(Translation Lookaside Buffer)轉換檢測緩衝區----是一個內存管理單元,用於改進虛擬地址到物理地址轉換速度的緩存。
  • 進程狀態:R (TASK_RUNNING),可執行狀態、S (TASK_INTERRUPTIBLE),可中斷的睡眠狀態、D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態、T (TASK_STOPPED or TASK_TRACED),暫停狀態或跟蹤狀態、Z (TASK_DEAD - EXIT_ZOMBIE),退出狀態,進程成爲殭屍進程。
  • 內核空間和用戶空間是現代操作系統的兩種工作模式,內核模塊運行在內核空間,而用戶態應用程序運行在用戶空間。它們代表不同的級別,而對系統資源具有不同的訪問權限。內核模塊運行在最高級別(內核態),這個級下所有的操作都受系統信任,而應用程序運行在較低級別(用戶態)。在這個級別,處理器控制着對硬件的直接訪問以及對內存的非授權訪問。內核態和用戶態有自己的內存映射,即自己的地址空間。
  • 進程上下文----就是一個進程在執行的時候,CPU的所有寄存器中的值、進程的狀態以及堆棧上的內容,當內核需要切換到另一個進程時,它需要保存當前進程的所有狀態,即保存當前進程的進程上下文,以便再次執行該進程時,能夠恢復切換時的狀態,繼續執行。

從上圖可以看出,當一個用戶發起一個命令或者啓動一個程序時,會建立一個進程,剛開始以用戶方式啓動,這時處於用戶態,將其用戶空間要執行的內容載入內存,並交由CPU執行相關指命,執行完成,內存釋放空間,結束進程;或者,處於用戶態時,需要進行系統調用,這時由用戶態轉化爲內核態,將其內核空間要執行的內容載入內存,並交由CPU執行相關指命,執行完成,內存釋放空間,結束進程。

上圖反映瞭如下信息:

1、  進程的4G 線性空間被劃分成三個部分:進程空間(0-3G)、內核直接映射空間(3G – high_memory)、內核動態映射空間(VMALLOC_START  -  VMALLOC_END)

2、  三個空間使用同一張頁目錄表,通過 CR3 可找到此頁目錄表。但不同的空間在頁目錄表中頁對應不同的項,因此互相不衝突

3、  內核初始化以後,根據實際物理內存的大小,計算出 high_memory、VMALLOC_START、VMALLOC_END 的值。併爲“內核直接映射”空間建立好映射關係,所有的物理內存都可以通過此空間進行訪問。

4、  “進程空間”和“內核動態映射空間”的映射關係是動態建立的(通過缺頁異常)

假設在有三個線性地址 addr1, addr2, addr3 ,分別屬於三個線性空間,但是最終都映射到物理頁面1:

1、 三個地址對應不同的頁表和頁表項

2、但是頁表項的高 20bit 肯定是1,表示物理頁面的索引號是1

3、同時,根據高 20 bit,可以從 mem_map[] 中找到對應的 struct page 結構,struct page 用於管理實際的物理頁面(紅線)

4、從線性地址,根據頁目錄表,頁表,可以找到物理地址

5、Struct page 和物理地址之間很容易互相轉換

6、從物理地址,可以很容易的反推出在內核直接映射空間的線性地址(藍線)。要想得到在進程空間或者內核動態映射空間的對應的線性地址,則需要遍歷相應的“虛存區間”鏈表。

關於頁目錄表:

1、每個進程有一個屬於自己的頁目錄表,可通過 CR3 寄存器找到

2、而內核也有一個獨立於其它進程的頁目錄表,保存在 swapper_pg_dir[] 數組中

3、當進程切換的時候,只需要將新進程的頁目錄把地址加載到 CR3 寄存器中即可

4、創建一個新進程的時候,需要爲它分配一個 page,作爲頁目錄表,並將 swapper_pg_dir[] 的高 256 項拷貝過來,低 768 項則清

 

 

參考原文:https://blog.csdn.net/rstevens/article/details/1760907

https://www.cnblogs.com/zqz365001/p/4544741.html

http://www.linfo.org/context_switch.html

https://blog.csdn.net/qq_34228570/article/details/72995997

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