久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

操作系統(tǒng)為什么要分用戶態(tài)和內(nèi)核態(tài)

 小區(qū)木大爺 2019-05-13

在CPU的所有指令中,,有一些指令是非常危險的,如果錯用,,將導(dǎo)致整個系統(tǒng)崩潰,。比如:清內(nèi)存、設(shè)置時鐘等,。如果所有的程序都能使用這些指令,,那么你的系統(tǒng)一天死機n回就不足為奇了。所以,,CPU將指令分為特權(quán)指令和非特權(quán)指令,,對于那些危險的指令,只允許操作系統(tǒng)及其相關(guān)模塊使用,,普通的應(yīng)用程序只能使用那些不會造成災(zāi)難的指令,。Intel的CPU將特權(quán)級別分為4個級別:RING0,RING1,RING2,RING3。

linux的內(nèi)核是一個有機的整體,。每一個用戶進程運行時都好像有一份內(nèi)核的拷貝,,每當(dāng)用戶進程使用系統(tǒng)調(diào)用時,,都自動地將運行模式從用戶級轉(zhuǎn)為內(nèi)核級,此時進程在內(nèi)核的地址空間中運行,。

當(dāng)一個任務(wù)(進程)執(zhí)行系統(tǒng)調(diào)用而陷入內(nèi)核代碼中執(zhí)行時,,我們就稱進程處于內(nèi)核運行態(tài)(或簡稱為內(nèi)核態(tài))。此時處理器處于特權(quán)級最高的(0級)內(nèi)核代碼中執(zhí)行,。當(dāng)進程處于內(nèi)核態(tài)時,,執(zhí)行的內(nèi)核代碼會使用當(dāng)前進程的內(nèi)核棧。每個進程都有自己的內(nèi)核棧,。當(dāng)進程在執(zhí)行用戶自己的代碼時,,則稱其處于用戶運行態(tài)(用戶態(tài))。即此時處理器在特權(quán)級最低的(3級)用戶代碼中運行,。當(dāng)正在執(zhí)行用戶程序而突然被中斷程序中斷時,,此時用戶程序也可以象征性地稱為處于進程的內(nèi)核態(tài)。因為中斷處理程序?qū)⑹褂卯?dāng)前進程的內(nèi)核棧,。這與處于內(nèi)核態(tài)的進程的狀態(tài)有些類似,。

內(nèi)核態(tài)與用戶態(tài)是操作系統(tǒng)的兩種運行級別,跟intel cpu沒有必然的聯(lián)系, 如上所提到的intel cpu提供Ring0-Ring3四種級別的運行模式,Ring0級別最高,,Ring3最低,。Linux使用了Ring3級別運行用戶態(tài),Ring0作為 內(nèi)核態(tài),,沒有使用Ring1和Ring2,。Ring3狀態(tài)不能訪問Ring0的地址空間,包括代碼和數(shù)據(jù),。Linux進程的4GB地址空間,3G-4G部 分大家是共享的,,是內(nèi)核態(tài)的地址空間,,這里存放在整個內(nèi)核的代碼和所有的內(nèi)核模塊,以及內(nèi)核所維護的數(shù)據(jù),。用戶運行一個程序,,該程序所創(chuàng)建的進程開始是運 行在用戶態(tài)的,如果要執(zhí)行文件操作,,網(wǎng)絡(luò)數(shù)據(jù)發(fā)送等操作,,必須通過write,send等系統(tǒng)調(diào)用,,這些系統(tǒng)調(diào)用會調(diào)用內(nèi)核中的代碼來完成操作,,這時,必 須切換到Ring0,,然后進入3GB-4GB中的內(nèi)核地址空間去執(zhí)行這些代碼完成操作,,完成后,切換回Ring3,回到用戶態(tài),。這樣,,用戶態(tài)的程序就不能 隨意操作內(nèi)核地址空間,具有一定的安全保護作用,。

用戶態(tài)切換到內(nèi)核態(tài)的3種方式

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

    這是用戶態(tài)進程主動要求切換到內(nèi)核態(tài)的一種方式,,用戶態(tài)進程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作,比如fork()實際上就是執(zhí)行了一個創(chuàng)建新進程的系統(tǒng)調(diào)用,。而系統(tǒng)調(diào)用的機制其核心還是使用了操作系統(tǒng)為用戶特別開放的一個中斷來實現(xiàn),,例如Linux的int 80h中斷。

  • 中斷

    當(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ù)操作等,。

  • 異常

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

為什么要有用戶態(tài)和內(nèi)核態(tài),?

由于需要限制不同的程序之間的訪問能力, 防止他們獲取別的程序的內(nèi)存數(shù)據(jù), 或者獲取外圍設(shè)備的數(shù)據(jù), 并發(fā)送到網(wǎng)絡(luò), CPU劃分出兩個權(quán)限等級 – 用戶態(tài)和內(nèi)核態(tài),。

參考資料

https://blog.csdn.net/youngyoungla/article/details/53106671

https://blog.csdn.net/liuyueyue0921/article/details/48225533

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多