內(nèi)核態(tài)和用戶態(tài)

linux用戶態(tài)和內(nèi)核態(tài)的轉(zhuǎn)換

當一個進程執(zhí)行系統(tǒng)調(diào)用而執(zhí)行內(nèi)核代碼時皆怕,稱進程處于內(nèi)核 內(nèi)核態(tài)毅舆,此時處理器處于特權(quán)級最高的(0級)內(nèi)核代碼中執(zhí)行,當進程處于內(nèi)核態(tài)時愈腾,執(zhí)行的內(nèi)核代碼會使用當前進程的內(nèi)核棧,每個進程都有自己的內(nèi)核棧憋活。

當進程執(zhí)行用戶代碼時,稱其處于 用戶態(tài)虱黄,此時處理器在特權(quán)級最低的(3級)用戶代碼中運行悦即。

當正在執(zhí)行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象征性地稱為處于進程的內(nèi)核態(tài),因為中斷處理程序?qū)⑹褂卯斍斑M程的內(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)核地址空間钞啸,具有一定的安全保護作用几蜻。
保護模式,通過內(nèi)存頁表操作等機制体斩,保證進程間的地址空間不會互相沖突梭稚,一個進程的操作不會修改另一個進程的地址空間中的數(shù)據(jù)。在內(nèi)核態(tài)下絮吵,CPU可執(zhí)行任何指令弧烤,在用戶態(tài)下CPU只能執(zhí)行非特權(quán)指令。當CPU處于內(nèi)核態(tài)蹬敲,可以隨意進入用戶態(tài)暇昂;而當CPU處于用戶態(tài),只能通過中斷的方式進入內(nèi)核態(tài)伴嗡。一般程序一開始都是運行于用戶態(tài)急波,當程序需要使用系統(tǒng)資源時,就必須通過調(diào)用軟中斷進入內(nèi)核態(tài).
使用nm查看用戶態(tài)程序的符號表內(nèi)容
使用System.map(內(nèi)核符號表)查看內(nèi)核符號表內(nèi)容

  1. 測試程序中打印用戶態(tài)函數(shù)地址瘪校,并調(diào)用系統(tǒng)調(diào)用(在內(nèi)核中打印系統(tǒng)調(diào)用函數(shù)地址)澄暮,用"用戶態(tài)符號表"和"內(nèi)核態(tài)符號表"示例說明內(nèi)核態(tài)和用戶態(tài)地址空間的差異
  2. 說明內(nèi)核態(tài)地址映射ioremap();用戶態(tài)地址映射mmap()

用戶態(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)提供的服務程序完成工作泣懊,比如前例中fork()實際上就是執(zhí)行了一個創(chuàng)建新進程的系統(tǒng)調(diào)用。而系統(tǒng)調(diào)用的機制其核心還是使用了操作系統(tǒng)為用戶特別開放的一個中斷來實現(xiàn)麻惶,例如Linux的INT 80H中斷馍刮。
系統(tǒng)調(diào)用實質(zhì)上是一個中斷,而匯編指令int 就可以實現(xiàn)用戶態(tài)向內(nèi)核態(tài)切換窃蹋,iret實現(xiàn)內(nèi)核態(tài)向用戶態(tài)切換

異常

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

外圍設(shè)備的中斷

當外圍設(shè)備完成用戶請求的操作后,會向CPU發(fā)出相應的中斷信號梅誓,這時CPU會暫停執(zhí)行下一條即將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行與中斷信號對應的處理程序恰梢,如果先前執(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)用可以認為是用戶進程主動發(fā)起的摧茴,異常外圍設(shè)備中斷則是被動的。

具體的切換操作

從觸發(fā)方式上看埂陆,可以認為存在前述3種不同的類型苛白,但是從最終實際完成由用戶態(tài)到內(nèi)核態(tài)的切換操作上來說,涉及的關(guān)鍵步驟是完全一致的焚虱,沒有任何區(qū)別购裙,都相當于執(zhí)行了一個中斷響應的過程,因為系統(tǒng)調(diào)用實際上最終是中斷機制實現(xiàn)的鹃栽,而異常和中斷的處理機制基本上也是一致的躏率,關(guān)于它們的具體區(qū)別這里不再贅述。關(guān)于中斷處理機制的細節(jié)和步驟這里也不做過多分析民鼓,涉及到由用戶態(tài)切換到內(nèi)核態(tài)的步驟主要包括:

[1] 從當前進程的描述符中提取其內(nèi)核棧的ss0及esp0信息薇芝。

[2] 使用ss0和esp0指向的內(nèi)核棧將當前進程的cs,eip,eflags,ss,esp信息保存起來,這個過程也完成了由用戶棧到內(nèi)核棧的切換過程丰嘉,同時保存了被暫停執(zhí)行的程序的下一條指令夯到。

[3] 將先前由中斷向量檢索得到的中斷處理程序的cs,eip信息裝入相應的寄存器,開始執(zhí)行中斷處理程序饮亏,這時就轉(zhuǎn)到了內(nèi)核態(tài)的程序執(zhí)行了耍贾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市克滴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌优床,老刑警劉巖劝赔,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胆敞,居然都是意外死亡着帽,警方通過查閱死者的電腦和手機杂伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仍翰,“玉大人赫粥,你說我怎么就攤上這事∮杞瑁” “怎么了越平?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灵迫。 經(jīng)常有香客問我秦叛,道長,這世上最難降的妖魔是什么瀑粥? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任挣跋,我火速辦了婚禮,結(jié)果婚禮上狞换,老公的妹妹穿的比我還像新娘避咆。我一直安慰自己,他們只是感情好修噪,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布查库。 她就那樣靜靜地躺著,像睡著了一般割按。 火紅的嫁衣襯著肌膚如雪膨报。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天适荣,我揣著相機與錄音现柠,去河邊找鬼。 笑死弛矛,一個胖子當著我的面吹牛够吩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丈氓,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼周循,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了万俗?” 一聲冷哼從身側(cè)響起湾笛,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闰歪,沒想到半個月后嚎研,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡库倘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年临扮,在試婚紗的時候發(fā)現(xiàn)自己被綠了论矾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡杆勇,死狀恐怖贪壳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚜退,我是刑警寧澤闰靴,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站关霸,受9級特大地震影響传黄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜队寇,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一膘掰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳遣,春花似錦识埋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诵盼,卻和暖如春惠豺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背风宁。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工洁墙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戒财。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓热监,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饮寞。 傳聞我的和親對象是個殘疾皇子孝扛,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • CPU的兩種工作狀態(tài):內(nèi)核態(tài)和用戶態(tài)(或者稱管態(tài)和目態(tài)) 內(nèi)核態(tài) 系統(tǒng)中既有操作系統(tǒng)的程序,也由普通用戶的程序幽崩。為...
    望月成三人閱讀 9,629評論 0 14
  • 又來到了一個老生常談的問題苦始,應用層軟件開發(fā)的程序員要不要了解和深入學習操作系統(tǒng)呢? 今天就這個問題開始慌申,來談談操...
    tangsl閱讀 4,124評論 0 23
  • 3.1進程 3.1.1 在進程執(zhí)行時陌选,任意給定一個時間,進程都包含如下信息: 標識符進程id,用于區(qū)別其他進程 狀...
    Myth52125閱讀 652評論 0 1
  • 離開的不會再回來柠贤,回來的不再完美。沒有誰對不起誰类缤,只有誰不懂得珍惜臼勉。多年以后,回想起來才明白餐弱,人們害怕的并...
    小打小鬧小幸福閱讀 321評論 0 1
  • 作為一個沒有任何經(jīng)驗的小學生的副班主任宴霸,我非常惶恐膏蚓。擔心自己做不好,時常會努力回想自己小學一年級時候究竟天天在想什...
    英樂匯閱讀 965評論 2 0