回覆列表
  • 1 # 使用者3173472523364

    使用者態和核心態 核心棧:Linux中每個程序有兩個棧,分別用於使用者態和核心態的程序執行,其中的核心棧就是用於核心態的堆疊,它和程序的task_struct結構,更具體的是thread_info結構一起放在兩個連續的頁框大小的空間內。 現在我們從特權級的排程來理解使用者態和核心態就比較好理解了,當程式執行在3級特權級上時,就可以稱之為執行在使用者態,因為這是最低特權級,是普通的使用者程序執行的特權級,大部分使用者直接面對的程式都是執行在使用者態;反之,當程式執行在0級特權級上時,就可以稱之為執行在核心態。 雖然使用者態下和核心態下工作的程式有很多差別,但最重要的差別就在於特權級的不同,即權力的不同。執行在使用者態的程式不能訪問作業系統核心資料結構合程式。 當我們在系統中執行一個程式時,大部分時間是執行在使用者態下的。在其需要作業系統幫助完成某些它沒有權力和能力完成的工作時就會切換到核心態。 Linux程序的4GB地址空間,3G-4G部分大家是共享的,是核心態的地址空間,這裡存放在整個核心的程式碼和所有的核心模組,以及核心所維護的資料。使用者執行一個程式,該程式所建立的程序開始是執行在使用者態的,如果要執行檔案操作,網路資料傳送等操作,必須透過write,send等系統呼叫,這些系統呼叫會呼叫核心中的程式碼來完成操作,這時,必須切換到Ring0,然後進入3GB-4GB中的核心地址空間去執行這些程式碼完成操作,完成後,切換回Ring3,回到使用者態。這樣,使用者態的程式就不能隨意操作核心地址空間,具有一定的安全保護作用。 保護模式,透過記憶體頁表操作等機制,保證程序間的地址空間不會互相沖突,一個程序的操作不會修改另一個程序的地址空間中的資料。在核心態下,CPU可執行任何指令,在使用者態下CPU只能執行非特權指令。當CPU處於核心態,可以隨意進入使用者態;而當CPU處於使用者態,只能透過中斷的方式進入核心態。一般程式一開始都是運行於使用者態,當程式需要使用系統資源時,就必須透過呼叫軟中斷進入核心態.

  • 中秋節和大豐收的關聯?
  • 都說愛能穿越四季原唱?