日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内核态与用户态的区别

發(fā)布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核态与用户态的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接:https://www.cnblogs.com/gizing/p/10925286.html

1.操作系統(tǒng)需要兩種CPU狀態(tài)

內(nèi)核態(tài)(Kernel Mode):運行操作系統(tǒng)程序,操作硬件

用戶態(tài)(User Mode):運行用戶程序

2.指令劃分

特權(quán)指令:只能由操作系統(tǒng)使用、用戶程序不能使用的指令。 舉例:啟動I/O 內(nèi)存清零 修改程序狀態(tài)字 設(shè)置時鐘 允許/禁止終端 停機(jī)

非特權(quán)指令:用戶程序可以使用的指令。 舉例:控制轉(zhuǎn)移 算數(shù)運算 取數(shù)指令?訪管指令(使用戶程序從用戶態(tài)陷入內(nèi)核態(tài))

3.特權(quán)級別

特權(quán)環(huán):R0、R1、R2和R3

R0相當(dāng)于內(nèi)核態(tài),R3相當(dāng)于用戶態(tài);

不同級別能夠運行不同的指令集合;

4.CPU狀態(tài)之間的轉(zhuǎn)換

用戶態(tài)--->內(nèi)核態(tài):唯一途徑是通過中斷、異常、陷入機(jī)制(訪管指令)

內(nèi)核態(tài)--->用戶態(tài):設(shè)置程序狀態(tài)字PSW

5.內(nèi)核態(tài)與用戶態(tài)的區(qū)別

  • 內(nèi)核態(tài)與用戶態(tài)是操作系統(tǒng)的兩種運行級別,當(dāng)程序運行在3級特權(quán)級上時,就可以稱之為運行在用戶態(tài)。因為這是最低特權(quán)級,是普通的用戶進(jìn)程運行的特權(quán)級,大部分用戶直接面對的程序都是運行在用戶態(tài);

  • 當(dāng)程序運行在0級特權(quán)級上時,就可以稱之為運行在內(nèi)核態(tài)。

  • 運行在用戶態(tài)下的程序不能直接訪問操作系統(tǒng)內(nèi)核數(shù)據(jù)結(jié)構(gòu)和程序。當(dāng)我們在系統(tǒng)中執(zhí)行一個程序時,大部分時間是運行在用戶態(tài)下的,在其需要操作系統(tǒng)幫助完成某些它沒有權(quán)力和能力完成的工作時就會切換到內(nèi)核態(tài)(比如操作硬件)。

  • 這兩種狀態(tài)的主要差別是

    • 處于用戶態(tài)執(zhí)行時,進(jìn)程所能訪問的內(nèi)存空間和對象受到限制,其所處于占有的處理器是可被搶占的
    • 處于內(nèi)核態(tài)執(zhí)行時,則能訪問所有的內(nèi)存空間和對象,且所占有的處理器是不允許被搶占的。

6. 通常來說,以下三種情況會導(dǎo)致用戶態(tài)到內(nèi)核態(tài)的切換

  • 系統(tǒng)調(diào)用

這是用戶態(tài)進(jìn)程主動要求切換到內(nèi)核態(tài)的一種方式用戶態(tài)進(jìn)程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作。比如前例中fork()實際上就是執(zhí)行了一個創(chuàng)建新進(jìn)程的系統(tǒng)調(diào)用。

而系統(tǒng)調(diào)用的機(jī)制其核心還是使用了操作系統(tǒng)為用戶特別開放的一個中斷來實現(xiàn),例如Linux的int 80h中斷。

用戶程序通常調(diào)用庫函數(shù),由庫函數(shù)再調(diào)用系統(tǒng)調(diào)用,因此有的庫函數(shù)會使用戶程序進(jìn)入內(nèi)核態(tài)(只要庫函數(shù)中某處調(diào)用了系統(tǒng)調(diào)用),有的則不會。

  • 異常

當(dāng)CPU在執(zhí)行運行在用戶態(tài)下的程序時,發(fā)生了某些事先不可知的異常,這時會觸發(fā)由當(dāng)前運行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就轉(zhuǎn)到了內(nèi)核態(tài),比如缺頁異常。

  • 外圍設(shè)備的中斷

當(dāng)外圍設(shè)備完成用戶請求的操作后,會向CPU發(fā)出相應(yīng)的中斷信號,這時CPU會暫停執(zhí)行下一條即將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行與中斷信號對應(yīng)的處理程序,

如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個轉(zhuǎn)換的過程自然也就發(fā)生了由用戶態(tài)到內(nèi)核態(tài)的切換。比如硬盤讀寫操作完成,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。

這3種方式是系統(tǒng)在運行時由用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)的最主要方式,其中系統(tǒng)調(diào)用可以認(rèn)為是用戶進(jìn)程主動發(fā)起的,異常和外圍設(shè)備中斷則是被動的。

總結(jié)

以上是生活随笔為你收集整理的内核态与用户态的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。