Linux:User space 與 Kernel space

學習 Linux 時,常常能夠看到兩個詞:User space(用戶空間)和 Kernel space(內核空間)。安全

簡單說,Kernel space 是 Linux 內核的運行空間,User space 是用戶程序的運行空間。爲了安全,它們是隔離的,即便用戶的程序崩潰了,內核也不受影響。學習

Kernel space 能夠執行任意命令,調用系統的一切資源;User space 只能執行簡單的運算,不能直接調用系統資源,必須經過系統接口(又稱 system call),才能向內核發出指令。spa

str = "my string" // 用戶空間
x = x + 2 // 用戶空間
file.write(str) // 切換到內核空間
y = x + 4 // 切換回用戶空間

上面代碼中,第一行和第二行都是簡單的賦值運算,在 User space 執行。第三行須要寫入文件,就要切換到 Kernel space,由於用戶不能直接寫文件,必須經過內核安排。第四行又是賦值運算,就切換回 User space。code

查看 CPU 時間在 User space 與 Kernel Space 之間的分配狀況,可使用top
命令。它的第三行輸出就是 CPU 時間分配統計。blog

這一行有 8 項統計指標。接口

其中,第一項24.8 us(user 的縮寫)就是 CPU 消耗在 User space 的時間百分比,第二項0.5 sy(system 的縮寫)是消耗在 Kernel space 的時間百分比。進程

隨便也說一下其餘 6 個指標的含義。資源

  • ni:niceness 的縮寫,CPU 消耗在 nice 進程(低優先級)的時間百分比
  • id:idle 的縮寫,CPU 消耗在閒置進程的時間百分比,這個值越低,表示 CPU 越忙
  • wa:wait 的縮寫,CPU 等待外部 I/O 的時間百分比,這段時間 CPU 不能幹其餘事,可是也沒有執行運算,這個值過高就說明外部設備有問題
  • hi:hardware interrupt 的縮寫,CPU 響應硬件中斷請求的時間百分比
  • si:software interrupt 的縮寫,CPU 響應軟件中斷請求的時間百分比
  • st:stole time 的縮寫,該項指標只對虛擬機有效,表示分配給當前虛擬機的 CPU 時間之中,被同一臺物理機上的其餘虛擬機偷走的時間百分比

若是想查看單個程序的耗時,通常使用time命令。虛擬機

 

程序名以前加上time命令,會在程序執行完畢之後,默認顯示三行統計。string

  • real:程序從開始運行到結束的所有時間,這是用戶能感知到的時間,包括CPU切換去執行其餘任務的時間。
  • user:程序在 User space 執行的時間
  • sys:程序在 Kernel space 執行的時間

user和sys之和,通常狀況下,應該小於real。但若是是多核 CPU,這兩個指標反映的是全部 CPU 的總耗時,因此它們之和可能大於real。

User space vs kernel space

相關文章
相關標籤/搜索