久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1568|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107189 發(fā)表于 2016-3-5 18:00 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
   內(nèi)核態(tài)與用戶態(tài)是操作系統(tǒng)的兩種運(yùn)行級別,intel cpu提供Ring0-Ring3三種級別的運(yùn)行模式。Ring0級別最高,Ring3最低。其中特權(quán)級0(Ring0)是留給操作系統(tǒng)代碼,設(shè)備驅(qū)動程序代碼使用的,它們工作于系統(tǒng)核心態(tài);而特權(quán)極3(Ring3)則給普通的用戶程序使用,它們工作在用戶態(tài)。運(yùn)行于處理器核心態(tài)的代碼不受任何的限制,可以自由地訪問任何有效地址,進(jìn)行直接端口訪問。而運(yùn)行于用戶態(tài)的代碼則要受到處理器的諸多檢查,它們只能訪問映射其地址空間的頁表項(xiàng)中規(guī)定的在用戶態(tài)下可訪問頁面的虛擬地址,且只能對任務(wù)狀態(tài)段(TSS)中I/O許可位圖(I/O Permission Bitmap)中規(guī)定的可訪問端口進(jìn)行直接訪問(此時(shí)處理器狀態(tài)和控制標(biāo)志寄存器EFLAGS中的IOPL通常為0,指明當(dāng)前可以進(jìn)行直接I/O的最低特權(quán)級別是Ring0)。以上的討論只限于保護(hù)模式操作系統(tǒng),象DOS這種模式操作系統(tǒng)則沒有這些概念,其中的所有代碼都可被看作運(yùn)行在核心態(tài)。
  當(dāng)一個(gè)任務(wù)(進(jìn)程)執(zhí)行系統(tǒng)調(diào)用而陷入內(nèi)核代碼中執(zhí)行時(shí),我們就稱進(jìn)程處于內(nèi)核運(yùn)行態(tài)(或簡稱為內(nèi)核態(tài))。此時(shí)處理器處于特權(quán)級最高的(0級) 內(nèi)核代碼中執(zhí)行。當(dāng)進(jìn)程處于內(nèi)核態(tài)時(shí),執(zhí)行的內(nèi)核代碼會使用當(dāng)前進(jìn)程的內(nèi)核棧。每個(gè)進(jìn)程都有自己的內(nèi)核棧。當(dāng)進(jìn)程在執(zhí)行用戶自己的代碼時(shí),則稱其處于用戶運(yùn)行態(tài)(用戶態(tài))。即此時(shí)處理器在特權(quán)級最低的(3級)用戶代碼中運(yùn)行。
  在內(nèi)核態(tài)下CPU可執(zhí)行任何指令,在用戶態(tài)下CPU只能執(zhí)行非特權(quán)指令。當(dāng)CPU處于內(nèi)核態(tài),可以隨意進(jìn)入用戶態(tài);而當(dāng)CPU處于用戶態(tài)時(shí),用戶從用戶態(tài)切換到內(nèi)核態(tài)只有在系統(tǒng)調(diào)用和中斷兩種情況下發(fā)生,一般程序一開始都是運(yùn)行于用戶態(tài),當(dāng)程序需要使用系統(tǒng)資源時(shí),就必須通過調(diào)用軟中斷進(jìn)入內(nèi)核態(tài)。
  Linux使用了Ring3級別運(yùn)行用戶態(tài),Ring0作為內(nèi)核態(tài),沒有使用Ring1和Ring2。Ring3狀態(tài)不能訪問Ring0的地址空間,包括代碼和數(shù)據(jù)。Linux進(jìn)程的4GB地址空間,3G-4G部分大家是共享的,是內(nèi)核態(tài)的地址空間,這里存放在整個(gè)內(nèi)核的代碼和所有的內(nèi)核模塊,以及內(nèi)核所維護(hù)的數(shù)據(jù)。用戶運(yùn)行一個(gè)程序,該程序所創(chuàng)建的進(jìn)程開始是運(yùn)行在用戶態(tài)的,如果要執(zhí)行文件操作,網(wǎng)絡(luò)數(shù)據(jù)發(fā)送等操作,必須通過 write,send等系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用會調(diào)用內(nèi)核中的代碼來完成操作,這時(shí),必須切換到Ring0,然后進(jìn)入3GB-4GB中的內(nèi)核地址空間去執(zhí)行這些代碼完成操作,完成后,切換回Ring3,回到用戶態(tài)。這樣,用戶態(tài)的程序就不能隨意操作內(nèi)核地址空間,具有一定的安全保護(hù)作用。
處理器模式從Ring3向Ring0的切換發(fā)生在控制權(quán)轉(zhuǎn)移時(shí),有以下兩種情況:訪問調(diào)用門的長轉(zhuǎn)移指令CALL,訪問中斷門或陷阱門的INT指令。具體的轉(zhuǎn)移細(xì)節(jié)由于涉及復(fù)雜的保護(hù)檢查和堆棧切換,不再贅述,請參閱相關(guān)資料。現(xiàn)代的操作系統(tǒng)通常使用中斷門來提供系統(tǒng)服務(wù),通過執(zhí)行一條陷入指令來完成模式切換,在INTEL X86上這條指令是INT,如在WIN9X下是INT30(保護(hù)模式回調(diào)),在LINUX下是INT80,在WINNT/2000下是INT2E。用戶模式的服務(wù)程序(如系統(tǒng)DLL)通過執(zhí)行一個(gè)INTXX來請求系統(tǒng)服務(wù),然后處理器模式將切換到核心態(tài),工作于核心態(tài)的相應(yīng)的系統(tǒng)代碼將服務(wù)于此次請求并將結(jié)果傳給用戶程序。

一,中斷處理過程
硬件中斷:來自時(shí)鐘,外設(shè)
可編程中斷:programmed interrupt,執(zhí)行引起軟件中斷的指令。
例外中斷:如頁面錯(cuò)。
都由系統(tǒng)負(fù)責(zé)處理。當(dāng)發(fā)生一個(gè)中斷時(shí),如果CPU正在比該中斷級低的處理機(jī)運(yùn)行級上運(yùn)行,它就在解碼下條指令之前,接受該中斷,并提高處理機(jī)運(yùn)行級。內(nèi)核處理中斷的操作順序如下:
1,對于正在進(jìn)行的進(jìn)程,保存其當(dāng)前寄存器上下文,并創(chuàng)建壓入一個(gè)新的上下文層。
2,確定中斷源,識別中斷類型。如是時(shí)鐘或磁盤的。
3,查找中斷向量。當(dāng)系統(tǒng)接受一個(gè)中斷時(shí),它從機(jī)器中得到一個(gè)數(shù),系統(tǒng)把這個(gè)作為查表的偏移量。這個(gè)表通常成為中斷向量(interrupt vector)。中斷向量的內(nèi)容包括各種中斷源的中斷處理程序的地址,以及中斷處理程序取得參數(shù)的方式。
4,內(nèi)核調(diào)用中斷處理程序。
5,中斷處理程序執(zhí)行那個(gè)返回,恢復(fù)(彈出)前一上下文層。
二,軟中斷
軟中斷通知進(jìn)程發(fā)生了異步事件。
系統(tǒng)有個(gè)進(jìn)程表,每個(gè)進(jìn)程在進(jìn)程表中有有個(gè)進(jìn)程表項(xiàng),每個(gè)進(jìn)程表項(xiàng)有個(gè)軟中斷信號字段,紀(jì)錄發(fā)向一個(gè)進(jìn)程的所有未處理的軟中斷信號。
當(dāng)一個(gè)進(jìn)程即將從核心態(tài)返回到用戶態(tài)時(shí),或它要進(jìn)入或離開一個(gè)適當(dāng)?shù)牡驼{(diào)度優(yōu)先級時(shí),內(nèi)核要檢查它是否收到了一個(gè)軟中斷信號。
內(nèi)核僅當(dāng)一個(gè)進(jìn)程從核心態(tài)返回到用戶態(tài)時(shí)才處理軟中斷信號。
三,系統(tǒng)調(diào)用
我們在C程序中調(diào)用系統(tǒng)調(diào)用好像是個(gè)一般的函數(shù)調(diào)用,當(dāng)實(shí)際上調(diào)用系統(tǒng)調(diào)用會引起用戶態(tài)到核心態(tài)的狀態(tài)變化,這是怎么做到的呢?
原來,C編譯程序采用一個(gè)預(yù)定義的函數(shù)庫(C之程序庫),其中的函數(shù)具有系統(tǒng)調(diào)用的名字,從而解決了在用戶程序中請求系統(tǒng)調(diào)用的問題。這些庫函數(shù)一般都執(zhí)行一條指令,該指令將進(jìn)程的運(yùn)行方式變?yōu)楹诵膽B(tài),然后,使內(nèi)核開始為系統(tǒng)調(diào)用執(zhí)行代碼。我們稱這個(gè)指令為操作系統(tǒng)陷入(operating system trap)。
系統(tǒng)調(diào)用的接口是一個(gè)中斷處理程序的特例。
在處理操作系統(tǒng)陷入時(shí),
1,內(nèi)核根據(jù)系統(tǒng)調(diào)用號查系統(tǒng)調(diào)用入口表,找到相應(yīng)的內(nèi)核子程序的地址。
2,內(nèi)核還要確定該系統(tǒng)調(diào)用所要求的參數(shù)個(gè)數(shù)。
3,從用戶地址空間拷貝參數(shù)到U區(qū)(Unix V)。
4,保存當(dāng)前上下文,執(zhí)行系統(tǒng)調(diào)用代碼。
核心態(tài):當(dāng)CPU正在運(yùn)行內(nèi)核代碼時(shí)(內(nèi)核代碼是共享的)。
用戶態(tài):當(dāng)CPU正在運(yùn)行用戶代碼時(shí)。
用戶模式:不可以訪問內(nèi)核空間(>=0x80000000)
內(nèi)核模式:可以訪問任何有效虛擬地址,包括內(nèi)核空間。一個(gè)線程可以訪問其他任何線程地址空間。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 激情久久网 | 日日干日日操 | 久草视频在线播放 | 日韩午夜激情 | 亚洲精品免费在线观看 | 日韩精品网 | 国产精品成人一区二区三区 | 伊人黄色 | 在线小视频 | 久久精品福利视频 | 国产精品久久久久久久午夜 | 国产欧美日本 | 婷婷av在线 | 四虎精品在线 | 日韩中文字幕视频 | 日本一级大毛片a一 | 高清一级片| 日韩黄色免费视频 | 蜜桃视频一区 | 日本丰满少妇做爰爽爽 | 免费视频一区二区 | 国产理论在线观看 | 天天躁日日躁狠狠躁伊人 | 久久精品视频免费 | 伊人免费 | 婷婷一区二区三区 | 亚洲香蕉视频 | 欧洲色综合| 久久er99热精品一区二区 | 欧美激情视频一区二区三区 | 日本国产在线 | 国产免费一级片 | 国产区一区 | 国产精品久久久久久久久久辛辛 | 91福利区| 五月婷婷激情网 | 国产精品欧美精品 | 免费一级黄色录像 | 午夜爱| 国产综合自拍 | 国产丝袜av |