由 synchronized鎖優化聯想到用戶態與內核態區別

我們知道synchronized的鎖優化過程,從無狀態-偏向鎖-輕量級鎖-重量級鎖。優化點就是在多線程鎖競爭時候避免線程過早地由用戶態到內核態的轉換,避免線程間頻繁低在用戶態和內核態間的切換,減少因CPU切換而中斷耗費的時間。那爲什麼重量級鎖競爭線程需要從用戶態到內核態轉變呢。這就需要知道用戶態和內核態區別。

一、用戶態和內核態的概念

(1)用戶態(也稱爲目態),應用程序只能在用戶態運行——運行用戶程序, 用戶可以操作和訪問的空間,這個空間通常存放我們用戶自己寫的程序、數據等

(2)內核態(也稱爲管態或系統態),操作系統在系統態運行——運行操作系統程序, 是系統內核來操作的一塊空間,這塊空間裏面存放系統內核的函數、接口等

二、二者的區別

(1)處於用戶態執行時,進程所能訪問的內存空間和對象受到限制,其所佔有的處理機是可被搶佔的。就是用戶態的權限是自己分配空間使用內的有限權限,只能訪問用戶程序自己的存儲空間 。

(2)而處於內核態執行中的進程,則能訪問所有的內存空間、硬件資源以及對象,且所佔用的處理機是不允許被搶佔的。就是內核態可以使用操作系統的指令,可以使用所有的硬件資源,如中斷、清理內存、設置時鐘等。

由上可知,synchronized在升級到重量級別鎖後,用戶態切換到內核態主要原因:

  • 爲了防止得不到資源的線程空轉消耗CPU等資源,需要阻塞或喚醒競爭的線程,只有從用戶態切換到內核態才能執行阻塞和喚醒線程操作。

三、用戶態和內核態的轉換

用戶態切換到內核態的主要有3種方式:其中系統調用可以認爲是用戶進程主動發起的,異常和外圍設備中斷則是被動的

(1)系統調用

這是用戶進程主動要求切換到內核態的一種方式,用戶進程通過系統調用申請操作系統提供的服務程序完成工作。 synchronized的重量級鎖就是此種方式從用戶態切換到內核態的一種系統調用

(2)異常

當CPU在執行運行在用戶態的程序時,發現了某些事件不可知的異常,這時便會觸發由當前進程切換到處理此 異常的內核相關程序中,即內核態,比如缺頁異常、除零異常等都會觸發用戶態到內核態的切換

(3)外圍設備的中斷

當外圍設備完成用戶請求的操作後,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令而轉到與中斷信號對應的處理程序去執行,如果前面執行的指令時用戶態下的程序,那麼轉換的過程自然就會是 由用戶態到內核態的切換。如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行後邊的操作等。

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