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

歡迎訪問 生活随笔!

生活随笔

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

综合教程

用户态和内核态的简单理解「建议收藏」

發(fā)布時間:2023/12/24 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 用户态和内核态的简单理解「建议收藏」 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

linux基礎(chǔ)

linux的kernel內(nèi)核外是系統(tǒng)調(diào)用,系統(tǒng)調(diào)用外是shell、庫函數(shù),而應(yīng)用程序則在最外層

系統(tǒng)調(diào)用和庫函數(shù)的區(qū)別

  • 內(nèi)核:屏蔽了調(diào)用各硬件資源的細節(jié)
  • 系統(tǒng)調(diào)用:內(nèi)核提供給用戶調(diào)用的接口,但系統(tǒng)調(diào)用的可移植性差
    移植性差的原因:windows、linux內(nèi)核的系統(tǒng)調(diào)用是不同的,比如:同一個功能提供給用戶的函數(shù)名、參數(shù)都不相同,會出現(xiàn)從一個系統(tǒng)移植到另一個系統(tǒng)無法正常運行。
  • 庫函數(shù):為了解決系統(tǒng)調(diào)用移植新差的問題,同時封裝windows和linux系統(tǒng)調(diào)用,對用戶提供一個的函數(shù)(接口)。
  • 系統(tǒng)調(diào)用在內(nèi)核地址空間執(zhí)行,而庫函數(shù)是在用戶地址空間調(diào)用。

為什么要區(qū)分用戶態(tài)和內(nèi)核態(tài)?

在CPU指令中,有些指令是非常危險的,如果錯用將導(dǎo)致系統(tǒng)崩潰,比如清內(nèi)存、設(shè)置時鐘等,所以CPU將指令分為特權(quán)指令和非特權(quán)指令。對于危險指令,只允許操作系統(tǒng)及其相關(guān)模塊使用,普通應(yīng)用程序只能使用不危險的指令。

  • Intel的CPU將特權(quán)等級分為4個級別:Ring0~Ring3,而Linux使用Ring3級別運行用戶態(tài),Ring0作為內(nèi)核態(tài)。
  • 操作系統(tǒng)啟動時對內(nèi)存進行了劃分,操作系統(tǒng)的數(shù)據(jù)都是存放于內(nèi)核空間的,用戶進程的數(shù)據(jù)是存放于用戶空間的。處于用戶態(tài)級別的程序只能訪問用戶空間,而處于內(nèi)核態(tài)級別的程序可以訪問用戶空間和內(nèi)核空間。
  • 當(dāng)一個進程執(zhí)行系統(tǒng)調(diào)用而陷入內(nèi)核代碼中執(zhí)行時,我們就稱進程處于內(nèi)核態(tài)

用戶態(tài)和內(nèi)核態(tài)的切換耗費時間的原因

內(nèi)核為上層應(yīng)用使用CPU、存儲、IO等硬件資源提供了接口,即系統(tǒng)調(diào)用,如果一個應(yīng)用程序需要用到內(nèi)核資源,就需執(zhí)行系統(tǒng)調(diào)用的相關(guān)語句。
(1)當(dāng)執(zhí)行系統(tǒng)調(diào)用時,首先會保存現(xiàn)場,然后通過系統(tǒng)調(diào)用到內(nèi)核態(tài)執(zhí)行,最后內(nèi)核態(tài)變?yōu)橛脩魬B(tài)執(zhí)行用戶程序時,需要恢復(fù)用戶態(tài)的現(xiàn)場。
在進入內(nèi)核的時候需要保存用戶態(tài)的寄存器,在內(nèi)核態(tài)返回用戶態(tài)的時候會恢復(fù)這些寄存器的內(nèi)容。

(2)每個線程都有兩個棧:用戶棧和內(nèi)核棧,當(dāng)執(zhí)行系統(tǒng)調(diào)用時,線程就會由用戶棧切換到內(nèi)核棧,而內(nèi)核代碼對用戶不信任,需要進行額外的檢查。
Linux | 為什么用戶態(tài)和內(nèi)核態(tài)的切換耗費時間?

哪些情況會出出現(xiàn)用戶態(tài)和內(nèi)核態(tài)的切換

  • 線程間的切換(上下文):線程上下文切換時,前一個線程的線程線程(切換前最后時刻的數(shù)據(jù)和指令)會被保存到內(nèi)核中,而切換回來時需要從內(nèi)核空間中讀取數(shù)據(jù)恢復(fù)現(xiàn)場。
  • Syncronized鎖的獲取和釋放:使用內(nèi)核中monitor對象

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

  • 當(dāng)程序在用戶態(tài)需要申請外部資源(如聲卡、網(wǎng)卡、U盤、磁盤)時,需要從用戶態(tài)切換到內(nèi)核態(tài),主要有3種情況需要申請外部資源:
    (1)系統(tǒng)調(diào)用
    舉例: 創(chuàng)建線程時,需要通過pthread函數(shù)庫調(diào)用內(nèi)核來創(chuàng)建
    (2)中斷
    舉例: 當(dāng)外圍設(shè)備完成用戶請求的操作后,會想CPU發(fā)送中斷信號。這時CPU會暫停執(zhí)行下一條指令(用戶態(tài))轉(zhuǎn)而執(zhí)行與該中斷信號對應(yīng)的中斷處理程序
    (3)異常:某些異常如缺頁異常只能由內(nèi)核進行處理

總結(jié)

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

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