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