使用者態和核心態的區別
使用者態和核心態的區別
你是世界的一杆稱,一頭重一頭輕。 –RuiDer
--大侄子的紀念日2018-8-27
before
本篇文章是我在學習Java的
synchornized
鎖底層原理時碰到的一個知識點,瞭解過synchornized
底層原理的都會知道重量級鎖中執行緒的阻塞和喚醒操作,這兩種操作涉及到系統的呼叫,執行緒從使用者態和核心態的切換,其開銷非常大。
使用者態和核心態的區別(轉載)
核心態與使用者態是作業系統的兩種執行級別,當程式執行在3級特權級上時,
就可以稱之為執行在使用者態,因為這是最低特權級,是普通的使用者程式運
行的特權級,大部分使用者直接面對的程式都是執行在使用者態;反之,當程
序執行在0級特權級上時,就可以稱之為執行在核心態。執行在使用者態下
的程式不能直接訪問作業系統核心資料結構和程式。當我們在系統中執行
一個程式時,大部分時間是執行在使用者態下的,在其需要作業系統幫助完
成某些它沒有權力和能力完成的工作時就會切換到核心態。
這兩種狀態的主要差別是: 處於使用者態執行時,程式所能訪問的記憶體空間
和物件受到限制,其所處於佔有的處理機是可被搶佔的 ; 而處於核心態
執行中的程式,則能訪問所有的記憶體空間和物件,且所佔有的處理機是不
允許被搶佔的。
通常來說,以下三種情況會導致使用者態到核心態的切換:
1)系統呼叫
這是使用者態程式主動要求切換到核心態的一種方式,使用者態程式通過系統
呼叫申請使用作業系統提供的服務程式完成工作,比如前例中fork()實
際上就是執行了一個建立新程式的系統呼叫。而系統呼叫的機制其核心還
是使用了作業系統為使用者特別開放的一箇中斷來實現,例如
Linux的int 80h中斷。
2)異常
當CPU在執行執行在使用者態下的程式時,發生了某些事先不可知的異常,這時
會觸發由當前執行程式切換到處理此異常的核心相關程式中,也就轉到了核心
態,比如缺頁異常。
3)外圍裝置的中斷
當外圍裝置完成使用者請求的操作後,會向CPU發出相應的中斷訊號,
這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信
號對應的處理程式,如果先前執行的指令是使用者態下的程式,那麼
這個轉換的過程自然也就發生了由使用者態到核心態的切換。比如硬
盤讀寫操作完成,系統會切換到硬碟讀寫的中斷處理程式中執行後
續操作等。
這3種方式是系統在執行時由使用者態轉到核心態的最主要方式,其中
系統呼叫可以認為是使用者程式主動發起的,異常和外圍裝置中斷則
是被動的。
相關文章
- 使用者態和核心態的區別是啥
- 偽靜態、靜態和動態的區別
- 靜態SDRAM和動態SDRAM的區別
- 作業系統中使用者態和核心態(系統態)是什麼?使用者態如何變成核心態?作業系統
- 動態圖和靜態圖的程式碼區別
- Linux核心態是什麼?使用者態如何切換到核心態?Linux
- 【知識分享】動態ip和靜態ip的區別
- 動態代理jdk和cglib的區別JDKCGLib
- Linux中核心態指什麼?使用者態切換到核心態的方式有哪些?Linux
- 伺服器動態ip和靜態ip的區別和特點伺服器
- 動態IP和靜態IP有什麼區別?
- cglib動態代理和jdk動態代理的區別與應用CGLibJDK
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- 【普】靜態IP和動態IP有什麼區別?
- 【科普】靜態IP和動態IP有什麼區別?
- Android核心和Linux核心的區別AndroidLinux
- 動態IP與靜態IP的主要區別
- 【知識分享】伺服器動態ip和靜態ip的區別和特點伺服器
- JDK 和 CGLib 實現動態代理和區別JDKCGLib
- 靜態網頁與動態網頁的區別網頁
- 動態分佈與靜態分佈的區別
- linux下靜態連結庫和動態連結庫的區別有哪些Linux
- 思科-Seven【NAT應用篇】!動態與靜態路由的區別和特點~~~路由
- c#物件導向- 靜態成員和非靜態成員的區別C#物件
- 靜態IP是什麼意思?和動態IP 有什麼區別
- Java中靜態跟非靜態的區別總結Java
- 靜態網格體和骨架網格體的區別
- 非同步API中事件、命令和狀態區別非同步API事件
- C和C++的動態記憶體管理的區別C++記憶體
- 固態u盤和普通u盤哪個好 固態u盤和普通u盤的區別
- Spring生態系統中的Reactor、WebFlux和RSocket區別? - FranciscoSpringReactWebUX
- 物件和函式的區別就是物件可以儲存狀態物件函式
- Linux 核心和 Windows 核心有什麼區別?LinuxWindows
- 動態代理的兩種方式以及區別
- 靜態方法和例項方法的區別以及如何恰當使用
- 靜態住宅IP與動態住宅IP有什麼區別?
- 談談撥號動態VPS和vps伺服器區別伺服器
- java執行原理、靜態代理和動態代理區分Java