(三)操作系統(tǒng)運(yùn)行環(huán)境

操作系統(tǒng)運(yùn)行環(huán)境

  1. CPU狀態(tài)
  2. 中斷/異常機(jī)制

操作系統(tǒng)運(yùn)行機(jī)制

  1. 系統(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)

為什么引入中斷與異常

  1. 中斷的引入:為了支持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決定如何處理以后的事情。
  2. 異常的引入:表示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)功能。

  1. 系統(tǒng)調(diào)用的作用
  • 系統(tǒng)調(diào)用是操作系統(tǒng)提供給編程人員的唯一接口
  • 使CPU狀態(tài)從用戶態(tài)陷入內(nèi)核態(tài)
  1. 系統(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)方法:

  1. 由陷入指令自帶參數(shù)
    陷入指令的長(zhǎng)度有限,且還要攜帶系統(tǒng)調(diào)用功能號(hào),只能自帶有限的參數(shù)。
  2. 通過通用寄存器傳遞參數(shù)
    這些寄存器是操作系統(tǒng)和用戶程序都能訪問的,但寄存器的個(gè)數(shù)會(huì)限制傳遞參數(shù)的數(shù)量
  3. 在內(nèi)存中開辟專用堆棧區(qū)來傳遞參數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容