操作系統(tǒng)簡介

Hardware Features for OS

  • 安全性(用戶態(tài)和內(nèi)核態(tài))
  • 對指令的保護(hù)
  • 對內(nèi)存的保護(hù)
  • 錯(cuò)誤
  • 系統(tǒng)調(diào)用
  • 中斷(時(shí)鐘中斷,I/O中斷,等等)
  • 同步

操作系統(tǒng)是事件驅(qū)動(dòng)的(event-driven)


OS Control Flow
操作系統(tǒng)啟動(dòng)之后,所有只有通過event才能進(jìn)入內(nèi)核態(tài)

  • event直接停止當(dāng)前在執(zhí)行的操作
  • 將系統(tǒng)的狀態(tài)切換到內(nèi)核態(tài),然后調(diào)用與event相關(guān)的處理函數(shù)

內(nèi)核對每一種事件類型準(zhǔn)備了處理函數(shù)

當(dāng)處理器遇到一種給定的事件類型,會(huì)

  • 先將控制權(quán)轉(zhuǎn)移給OS里面的處理函數(shù)
  • 處理函數(shù)先保存程序的運(yùn)行狀態(tài)(PC,寄存器,等等)
  • 處理函數(shù)的具體功能被調(diào)用
  • 處理函數(shù)恢復(fù)系統(tǒng)狀態(tài),返回原來的程序

Events



EVENT

分類

  • 中斷 (由外部事件引起的,unexpected)(異步的)
  • 異常(由正在執(zhí)行的指令引起的,CPU解決一個(gè)fault或者trap需要軟件的介入,deliberate)(同步的)
    • 缺頁
    • 除零

相應(yīng)的處理函數(shù)

  • 對用戶態(tài)的fault

當(dāng)用戶進(jìn)程出現(xiàn)不可恢復(fù)的錯(cuò)誤的時(shí)候,操作系統(tǒng)通過殺死當(dāng)前線程來解決

  • 如沒有相應(yīng)的Handler時(shí)
  • 先halt這個(gè)進(jìn)程,然后將進(jìn)程的狀態(tài)寫到文件中,接著殺死這個(gè)進(jìn)程
  • 在Unix中,這個(gè)是很多信號(hào)的默認(rèn)的處理函數(shù)
  • 對系統(tǒng)態(tài)的fault
  • 遇到的類型可能是:對NULL的訪問,除零,沒有定義的指令
  • 這些是致命的使系統(tǒng)崩潰的錯(cuò)誤。
  • Windows會(huì)出現(xiàn)藍(lán)屏(內(nèi)核halt,狀態(tài)寫入core file,機(jī)器被鎖住)
  • 更進(jìn)一步的fault的解決
  • 有一些錯(cuò)誤可以修復(fù)(比如缺頁),這種時(shí)候我們會(huì)返回導(dǎo)致錯(cuò)誤的上下文
  • 有一些錯(cuò)誤可以通知進(jìn)程
    • 內(nèi)核態(tài)的處理函數(shù)會(huì)修改PC的值,使得從處理函數(shù)返回時(shí),會(huì)跳轉(zhuǎn)到用戶程序自己寫的處理函數(shù)
    • 用戶的處理函數(shù)也是要登記的
    • 可以使用signal和APC實(shí)現(xiàn)

系統(tǒng)調(diào)用



只有操作系統(tǒng)可以直接使用物理設(shè)備,那用戶態(tài)的程序該如何使用呢?
—— OS需要提供給用戶程序有限的、使用硬件設(shè)備的間接的接口。

當(dāng)一個(gè)用戶程序想做一些超出自己權(quán)限的事情的時(shí)候,必須通過系統(tǒng)調(diào)用。

系統(tǒng)調(diào)用的過程是這樣:

  • 傳遞一個(gè)參數(shù),表示自己要調(diào)用什么
  • 保存調(diào)用者的狀態(tài),從而能返回
  • 引起一個(gè)異常
  • 從系統(tǒng)調(diào)用回來,恢復(fù)用戶程序的狀態(tài)

這樣的流程需要:

  • 確定輸入的參數(shù)(放在buffer固定的位置)
  • 恢復(fù)保存的狀態(tài),恢復(fù)到用戶態(tài),重新開始執(zhí)行

系統(tǒng)調(diào)用的函數(shù)

  • 與進(jìn)程控制有關(guān)的:
  • create process, allocate memory
  • 文件管理
  • create, read, delete file
  • 設(shè)備管理
  • open device, read/write device, mount device
  • 信息維護(hù)
  • get time, get system data/parameters
  • 交互
  • create/delete channel, send/receive message

程序員一般是不會(huì)直接寫系統(tǒng)調(diào)用的,而是使用一些庫函數(shù)(如C,java的庫)。
—— 因?yàn)橄到y(tǒng)調(diào)用的具體實(shí)現(xiàn)與硬件的架構(gòu)相關(guān),而使用這些庫函數(shù)的時(shí)候程序員就不需要知道在具體的架構(gòu)上的系統(tǒng)調(diào)用的指令是什么了。只需要直接使用這個(gè)同一的接口。


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

系統(tǒng)調(diào)用是通過int 80H的指令進(jìn)行陷入的,而函數(shù)調(diào)用則是直接call即可。系統(tǒng)調(diào)用會(huì)發(fā)生上下文切換,函數(shù)調(diào)用則不會(huì)、


中斷



中斷是異步的,有

  • 來自I/O等設(shè)備的硬件中斷
  • 軟件和硬件的計(jì)時(shí)器

兩種風(fēng)格的中斷:

  • 明確的:只會(huì)在一條指令執(zhí)行之后發(fā)生(更受OS設(shè)計(jì)者喜歡,因?yàn)檫@樣他們編程的不確定性就少很多?)
  • 不明確的:可以在指令執(zhí)行的期間發(fā)生。(CPU設(shè)計(jì)者喜歡,因?yàn)檫@樣中斷設(shè)計(jì)更及時(shí)?)

Timer & I/O

timer對操作系統(tǒng)而言很重要,每個(gè)一段時(shí)間發(fā)送一個(gè)中斷,timer中斷的處理函數(shù)在內(nèi)核態(tài)。

I/O是硬件和進(jìn)程間的同步。設(shè)備與機(jī)器獨(dú)立運(yùn)行,在完成任務(wù)時(shí),發(fā)送中斷給CPU,OS的處理函數(shù)來處理這個(gè)中斷。


Interrupt Questions

  1. 中斷中止了程序繼續(xù)運(yùn)行,并將控制權(quán)交給了操作系統(tǒng)。
    那么操作系統(tǒng)可以被打斷么?

  2. 還有什么方法可以代替中斷,這些方法又有什么劣勢?


軟件中斷(略)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 又來到了一個(gè)老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問題開始,來談?wù)劜?..
    tangsl閱讀 4,164評論 0 23
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,867評論 0 27
  • 1. 操作系統(tǒng)的資源管理技術(shù) 資源管理解決物理資源數(shù)量不足和合理分配資源這兩個(gè)問題。 操作系統(tǒng)虛擬機(jī)為用戶提供了一...
    joyeyoung閱讀 10,812評論 1 5
  • public classAppStatusTrackerimplementsApplication.Activit...
    ee31684af67c閱讀 980評論 0 0
  • 高中畢業(yè)以后,我沒有選擇去讀大學(xué)。因?yàn)樵谖艺J(rèn)為讀一個(gè)不怎么樣的大學(xué)還不如早點(diǎn)踏入社會(huì),積累一點(diǎn)工作經(jīng)驗(yàn)比什么都強(qiáng)。...
    莫信狗閱讀 133評論 0 0