操作系統引論 | 操作系統的結構和硬體支持
來自專欄 操作系統筆記
- 操作系統的結構模型
- 單體結構
- 模塊化結構
- 微內核結構
- 層次結構
單體結構模型
操作系統是一組過程的集合,每個過程有介面定義,包括入口參數和返回值,過程間可任意調用。
也是由於過程之間可以任意的調用,所以操作系統的運行效率較高,但是也是由於這個自由度過高的問題,會導致缺乏清晰的程序結構、錯誤多、難以維護的缺點。
實例:AT&T SystemV,BSD UNIX
模塊化結構模型
操作系統按功能劃分模塊和設計,模塊需要封裝,相關模塊間具有良好定義的介面,模塊間可任意調用。
對於該模塊,在其內部有很多的過程可以完成相應的功能,比如文件檢索功能,文件打開功能,文件存儲功能,文件讀寫功能,等等。為了方便其他模塊調用文件管理的功能,會對外提供一組介面,像打開文件介面、讀文件介面等。
優點:有利於系統設計和擴展。
缺點: 模塊間存在著複雜的依賴關係,使OS結構不清。如下圖所示,當模塊二進程管理模塊想要調用模塊一的數據時,必須通過模塊一提供的介面來進行調動,而不能直接調用文件管理模塊中的某一個過程來實現他想要的功能。
實例:Choices系統,實驗性質
層次結構模型
把 OS 的功能模塊劃分為若干層,每層之間的模塊只能單向調用。
例如,我們可以將內核模塊依據他們的依賴關係分為3個層次。最底層是第三層,最上層是第一層。層次間只能單向調用,即上層只能調用下層功能來實現。也就是一層模塊只能調用2層或3層的模塊來實現,2層只能調用3層模塊的功能來實現。
層次結構劃分示意圖如下:
層次之間只能單向調用,且是外層調用內層,而統一進程之間可以相互調用。
優點:易保證系統的正確性,易擴充和易維護性。
缺點:由於層次之間只能單向調用,所以系統效率降低。
實例:Dijkstra的THE系統
微內核結構模型
在微內核結構中,我們將系統核心分為兩部分,基礎核心功能和其他核心功能。
- 特點:
- 採用面向對象技術
- 基於客戶/伺服器模式
- 運行在核心態的內核
- 運行在用戶態的並以客戶/伺服器方式活動的進程層
- 應用「機制與策略分離」
- 機制:決定如何做
- 策略:定義做什麼
如上,微內核結構的示意圖。在這其中客戶進程和操作系統的其他進程都包含在操作系統的用戶態下面。當客戶進程需要調用操作系統的某項服務功能的時候,比如需要訪問文件進程的時候,操作系統需要將對文件進程的請求發送給微內核,微內核進過檢測後再把這個請求發送給文件伺服器進程。文件伺服器進程再通過微內核傳遞給客戶進程。這樣就存在一個比較嚴重的問題,就是當客戶進程比較多的時候,會造成微內核的繁忙。所以在該微內核結構中微內核可能會成為整個系統的瓶頸。因此,我們一般會仔細考慮進程的存放位置,是運行在微內核中還是在用戶態中,已達到節約對微內核的請求訪問的目的。
- 微內核結構模型的優點:
- 提高系統的可擴展性(要增加一個進程,只需要在用戶態下面增加一個伺服器就可以)
- 增強系統的可靠性、可移植性(當某個伺服器出故障的時候,由於其運行在用戶態下面,不會影響核心態下面的微內核的運行。)
- 提供了對分散式系統的支持
- 融入了面向對象技術
- 實例:
- Mach系統
- Tru64 UNIX系統
- Win NT
實例操作系統的結構
- UNIX操作系統的結構:單體式
- UNIX核心層
- 處理機管理
- 存儲管理
- 設備管理
- 文件系統
- UNIX實用層
- 實用程序 —— 編輯程序、調試程序、系統狀態監控、文件管理等實用程序
- 存儲管理軟體工具 ——源代碼控制程序SCCS、文檔準備程序包等
- Linux系統的核心結構:單體式
- 其中整個內核是由相應的過程來完成的。
- Windows操作系統的結構:微內核
- 其中應用程序的運行,是由運行在用戶態下面的虛擬機來完成的,而微內核中提供了虛擬機的管理模塊。
處理機的特權級
計算機系統中運行的程序大體上可以分為管理程序和用戶程序兩大類。
操作系統負責管理系統中的所有的資源,並控制其他程序的運行。而用戶程序是在操作系統的控制和管理下來使用計算機的資源。
- 處理機的狀態分類
- 為了保護操作系統,我們一般將處理機的狀態分類管態和目態:
- 管態 (Supervisor mode):系統態
- 操作系統的管理程序執行時機器所處的狀態,又稱處理機的特權級。在此狀態下處理機可使用全部指令(包括一組特權指令);使用全部系統資源(包括整個存儲區域)。
- 目態(User mode):用戶態
- 用戶程序執行時機器所處的狀態。在此狀態下禁止使用特權指令,不能直接取用資源與改變機器狀態,並且只允許用戶程序訪問自己的存儲區域。
- 處理機狀態的特權指令集
- 涉及外部設備的輸入/輸出指令(任何用戶程序都不能直接啟動IO設備完成IO操作,只能通過少請求操作系統來代替它完成。)
- 修改特殊寄存器的指令:CPU狀態寄存器PS、段地址寄存器、時鐘寄存器、I/O設備控制寄存器等
- 改變機器狀態的指令:停機指令、中斷返回指令、禁止中斷指令等
- 實例操作系統處理機的狀態
- DOS 系統
- 不分態
- Windows 系統
- 3環 用戶態
- 0環 系統態
- 還有1、2環預留
- UNIX / Linux 系統
- 00 管態
- 11 用戶態
中斷及其處理
- 中斷的概念
- 是指CPU暫停執行當前的指令流程,去處理外部設備或硬體的中斷信號的過程 。
- 中斷類型
- 按中斷功能分類
- 輸入輸出中斷: I/O傳輸結束或出錯中斷
- 外中斷: 時鐘中斷、操作員控制台中斷、通信中斷等
- 機器故障中斷: 電源故障、主存取指令錯等
- 程序性中斷(CPU執行指令的過程中出現的中斷): 定點溢出、用戶態下用核態指令、非法操作
- 訪管中斷(為了方便應用程序調用操作系統的內核功能而提供的一種中斷): 對操作系統提出某種需求時所發出的中斷
- 按中斷來源分類:
- 中斷: 由處理機外部事件引起的中斷
- 俘獲: 由處理機內部事件引起的中斷,x86中稱異常
- 中斷屏蔽(針對可屏蔽中斷而言,如所有 I/O 中斷)
- 暫時地禁止中斷
- 中斷信號丟失
- 由特權指令設置中斷屏蔽寄存器
- 在系統中,與中斷有關的寄存器有如下三種:
- 中斷寄存器用來保存各個終端到達的信號。每當有一個終端到達,就會把中斷寄存器相應的位置設為1
- 屏蔽寄存器用來實現中斷屏蔽,當其中有一位為1,表示該類中斷不被屏蔽,系統可以響應。為0,則屏蔽不響應。
- CPU標誌寄存器,表示CPU能否響應可屏蔽中斷,如果相應標誌為的值為1,則表示對於所有的可屏蔽中斷CPU都可以響應。如果為0,則不管屏蔽寄存器的值為多少,CPU都不響應。
- 所以只有當屏蔽寄存器和CPU標誌寄存器相應的位置上的值都為1的時候,CPU才會響應中斷。
- 中斷優先順序
- 規定對同時達到中斷的處理順序
- 優先處理高優先順序中斷
- 同級中斷根據任意的順序
- 當多個中斷同時到達是首先處理高優先順序的中斷再處理低優先順序的中斷。
- 中斷嵌套處理
- 在處理低優先順序中斷時允許高優先順序中斷髮生
- 保證高優先順序中斷被及時處理
- 中斷向量表
- 中斷/異常處理的重要數據結構
- 引導CPU轉向相應的中斷或異常處理程序
- 每個表項稱為一個中斷向量
- 中斷ID作為中斷向量表項的索引
如上圖所示,就是中斷處理的數據結構表示,其中 PC1 記錄的就是中斷處理程序的入口地址。PSW中預先設置好了中斷/異常處理程序需要的處理機執行狀態。
- 中斷響應(中斷進入)
- 中斷響應是當CPU發現已有中斷請求時,暫停現行程序執行,並自動引出中斷處理程序的過程。
- 保護現場和恢復現場
- 現場: 在中斷的那一時刻能確保程序繼續運行的有關信息
- 下一條指令的地址(PC 寄存器的值)
- 程序運行所處的狀態(PSW 的值)
- 指令執行情況
- 程序執行的中間結果等
- 保護現場:響應中斷時,必須立即把現場信息保存在主存中
- 硬體:PS(其中存放PSW)和PC
- 中斷/異常處理程序(軟體)
- 所有通用寄存器
- 需要的其他信息:中斷/異常ID、錯誤碼等
- 恢復現場:
- 被中斷程序重新運行之前,把之前保留的該程序現場信息從主存中送至相應的寄存器中。
- 中斷/異常處理程序:通用寄存器
- iret指令:PS和PC
- 中斷/異常響應過程:
- 硬體:在每條指令執行結束時,檢測是否有中斷/異常的發生。如果有,就完成下面的中斷/異常響應過程:
- 將當前PS和PC存入臨時寄存器中;
- 根據中斷ID找到相應的中斷向量單元:
- PSW -> PS (完成從用戶態到核心態的轉變)
- 處理程序入口 -> PC (完成從用戶棧道核心棧的切換)
- 切換到核心棧
- 臨時寄存器中的PS和PC存入核心棧。
- 開始執行中斷/異常處理程序。
- 軟體:當硬體完成了中斷進入過程後,由相應的中斷處理程序得到控制權,進入了軟體的中斷處理過程。
軟體繼續保留被中斷進程的現場信息,因為 CPU 還有除了 PS 和 PC 的一組通用寄存器需要進行保存。之後執行相應的中斷服務常式。執行完成後恢復被中斷進程的現場信息(保存在核心棧和進程式控制制塊內的現場信息)。再由中斷返回指令,將 CPU 的 PS 和 PC 寄存器的值寫入 CPU 的兩個寄存器,讓 CPU 繼續運行之前被中斷的進程。
推薦閱讀:
※筆記本電腦cpu溫度正常範圍是多少呢?
※喜歡用 OS X 的人覺得它比 Windows 好在哪裡?
※CS140e: (3) 文件系統
※CSAPP Lab -- Cache Lab
※第二章:操作系統概述 ||《操作系統:精髓與設計原理》
TAG:操作系統 |