操作系統(tǒng)運(yùn)行環(huán)境
- CPU狀態(tài)
- 中斷/異常機(jī)制
操作系統(tǒng)運(yùn)行機(jī)制
- 系統(tǒng)調(diào)用
處理器狀態(tài)(模式)
中央處理器(CPU)
處理器由運(yùn)算器、控制器、一系列的寄存器以及高速緩存構(gòu)成。
有兩類寄存器:
- 用戶可見寄存器:高級(jí)語言編譯器通過優(yōu)化算法分配并使用之,以減少程序訪問內(nèi)存次數(shù)。
-
控制和狀態(tài)寄存器:用于控制處理器的操作,通常由操作系統(tǒng)代碼使用。
控制和狀態(tài)寄存器
處理器的狀態(tài)(模式MODE)
現(xiàn)代處理器通常將CPU狀態(tài)設(shè)計(jì)劃分為兩種、三種或四種。
在程序狀態(tài)字寄存器PSW中專門設(shè)置一位,根據(jù)運(yùn)行程序?qū)Y源和指令的使用權(quán)限而設(shè)置不同的CPU狀態(tài)。
特權(quán)指令和非特權(quán)指令
操作系統(tǒng)需要兩種CPU狀態(tài):
- 內(nèi)核態(tài)Kernel Mode:運(yùn)行操作系統(tǒng)程序
- 用戶態(tài)User Mode:運(yùn)行用戶程序
特權(quán)privilege指令:只能由操作系統(tǒng)使用、用戶程序不能使用的指令
非特權(quán)指令:用戶程序可以使用的指令

化對(duì)號(hào)的都是特權(quán)指令
CPU狀態(tài)之間的轉(zhuǎn)換
- 用戶態(tài) ---> 內(nèi)核態(tài)
中斷/異常/陷入機(jī)制 - 內(nèi)核態(tài) ---> 用戶態(tài)
設(shè)置程序狀態(tài)字PSW
陷入指令
又稱訪管指令,提供給用戶程序的接口,用戶調(diào)用操作系統(tǒng)的功能(服務(wù))。
中斷/異常機(jī)制
中斷/異常機(jī)制其實(shí)是CPU對(duì)系統(tǒng)發(fā)生的某個(gè)事件作出的一種反應(yīng)。
CPU暫停正在執(zhí)行的程序,保留現(xiàn)場(chǎng)后自動(dòng)轉(zhuǎn)去執(zhí)行相應(yīng)事件的處理程序,處理完成后返回?cái)帱c(diǎn)繼續(xù)執(zhí)行被打斷的程序。
對(duì)于操作系統(tǒng)的作用相當(dāng)于汽車的發(fā)動(dòng)機(jī),飛機(jī)的引擎。
作用:
- 及時(shí)處理設(shè)備發(fā)出的中斷請(qǐng)求
- 可使OS捕獲用戶程序提出的服務(wù)請(qǐng)求
- 防止用戶程序執(zhí)行過程中的破壞性活動(dòng)
為什么引入中斷與異常
- 中斷的引入:為了支持CPU和設(shè)備之間的并行操作
當(dāng)CPU啟動(dòng)設(shè)備進(jìn)行輸入/輸出后,設(shè)備便可以獨(dú)立工作,CPU轉(zhuǎn)去處理與此次輸入/輸出不相關(guān)的事情;當(dāng)設(shè)備完成輸入/輸出后,通過向CPU發(fā)中斷報(bào)告此次輸入/輸出的結(jié)果,讓CPU決定如何處理以后的事情。 - 異常的引入:表示CPU執(zhí)行指令時(shí)本身出現(xiàn)的問題
如算術(shù)溢出、除零、取數(shù)時(shí)的奇偶錯(cuò),訪存地址時(shí)越界或執(zhí)行了“陷入指令”等,這時(shí)硬件改變了CPU當(dāng)前的執(zhí)行流程,轉(zhuǎn)到相應(yīng)的錯(cuò)誤處理程序或異常處理程序或執(zhí)行系統(tǒng)調(diào)用。
事件

事件
中斷:外部事件,正在運(yùn)行的程序所不期望的。
異常:由正在執(zhí)行的指令引發(fā)

中斷與異常的小結(jié)
系統(tǒng)調(diào)用system call
系統(tǒng)調(diào)用是用戶在編程時(shí)可以調(diào)用的操作系統(tǒng)功能。
- 系統(tǒng)調(diào)用的作用
- 系統(tǒng)調(diào)用是操作系統(tǒng)提供給編程人員的唯一接口
- 使CPU狀態(tài)從用戶態(tài)陷入內(nèi)核態(tài)
- 系統(tǒng)調(diào)用的舉例
每個(gè)操作系統(tǒng)都提供幾百種系統(tǒng)調(diào)用(進(jìn)程控制、進(jìn)程通信、文件使用、目錄操作、設(shè)備管理、信息維護(hù)等)

關(guān)系
怎樣實(shí)現(xiàn)用戶程序的參數(shù)傳遞給內(nèi)核?
常用的3種實(shí)現(xiàn)方法:
- 由陷入指令自帶參數(shù)
陷入指令的長(zhǎng)度有限,且還要攜帶系統(tǒng)調(diào)用功能號(hào),只能自帶有限的參數(shù)。 - 通過通用寄存器傳遞參數(shù)
這些寄存器是操作系統(tǒng)和用戶程序都能訪問的,但寄存器的個(gè)數(shù)會(huì)限制傳遞參數(shù)的數(shù)量 - 在內(nèi)存中開辟專用堆棧區(qū)來傳遞參數(shù)
