第一章 操作系統概述
1.1操作系統的基本概念
1.1.1 操作系統的概念
系統調用:允許應用程序使用內核功能的接口,只能通過用戶程序間接使用
1.1.3 OS的目標和功能
2.OS作為用戶 和 硬件之間的接口
接口分為兩種:
(1)命令接口:通過命令來組合控制作業的進行
- 聯機命令接口
- 又稱交互式命令接口
- 適用於分時或實時操作系統
- cmd中的各種命令就是聯機命令接口
- 類比於”解釋“型編程語言的概念
- 用戶說一句,OS做一句
- 脫機命令接口
- 又稱批處理命令接口
- 適用於批處理系統
- 你寫好了一個.bat文件再在cmd中執行它就是脫機命令接口
- 類比於編程語言類型中的”編譯“
- 用戶說一堆之后,OS再做一堆
(2)程序接口:碼農用它們來請求OS服務
由一組系統調用命令組成(簡稱系統調用,又稱廣義指令)
用戶->程序->程序接口->OS->硬件
命令接口,誰都可以使用(打開cmd),而程序接口,只有碼農寫好了程序,一般的計算機用戶,通過這個程序才能調用程序接口。
最典型的就是windows的GUI,只有微軟的大佬們寫好了windows GUI,我們才能通過鼠標和鍵盤,在看不到的情況下,調用程序接口。
1.1.4 錯題及解析
16.OS與用戶通信的接口通常不包括緩存管理指令
緩存管理指令由OS之間操作,對用戶透明,也就是OS不提供管理緩存的接口,用戶無法管理緩存。
而shell、命令解釋器屬於第一類接口,即命令接口;而廣義指令則是第二類接口
17.順序性是單道程序而不是多道程序的基本特征
多道程序共享也爭用有限的資源,所以存在共享性和制約性,而為了競爭的公平起見,多道程序共同執行時也需要有程序不時地中斷,所以存在間斷性
19.系統開機后,操作系統最終被加載到RAM中的系統區。
有段時間不看計組了,忘了、、、、
二、庫函數與系統調用的區別和聯系
庫函數是編程語言內部的事情,而系統調用是編程語言外部的事情——通過編程語言來進行系統調用。
但是如果在編程語言中,進行系統調用,往往需要導入庫函數;同時,許多庫函數也會使用系統調用來實現功能。
庫函數運行在用戶空間,系統調用運行在內核空間。
使用系統調用的庫函數要慢,因為要進行上下文的切換、用戶態和核心態的轉換。
1.2 OS的發展和分類
1.2.2 批處理階段(OS開始出現)
解決的主要問題:人機矛盾及CPU和I/O設備之間速度不匹配的矛盾
1.單道批處理系統
用戶輸入一批程序之后,交給計算機執行,但是在計算機中,程序是一道道執行的
特點:
- 自動性:用戶將程序交給計算機之后就再也不需要也不能干預了
- 順序性:”先來先服務“
- 單道性
2.多道批處理系統
解決的主要問題:單道批處理系統中,每道程序的運行期間包括了I/O時間,此時CPU被浪費
特點:
- 多道:計算機中同時存放多道獨立的程序
- 宏觀上並行:多道程序都處於運行狀態
- 微觀上並行:對於各個資源,尤其是CPU,還是需要交替執行的
需要解決的問題:
- 分配問題
- 處理器
- 內存
- I/O
- 安全性
- 大量的程序和數據
- 如何保證不會相互影響
1.2.3 分時操作系統
解決的主要問題:批處理操作系統人機交互能力差,程序一旦執行,用戶既無法了解也無法控制程序
批處理OS是用戶和計算機之間是一對一,基於將計算機資源切成一片片的;
而分時OS是用戶和計算機之間是多對一,基於將時間切成一片片的。
由於計算機速度快,時間片輪轉得也快,所以給用戶的感覺就像自己獨占一台計算機。
分時操作系統的主要特征:
- 同時性
- 又稱多路性
- 多個終端用戶共同使用一台計算機
- 用戶們同時或基本同時使用一台計算機
- 交互性:相較於批處理系統,人機交互性更好
- 獨立性:用戶好像在獨占這台計算機
- 及時性:用戶的請求能在很短的時間內獲得響應
1.2.4 實時操作系統
解決的主要矛盾:分時操作系統應急性差,遇到某些突發情況無法緊急響應
- 硬實時系統
- 某個動作必須在規定時刻完成
- 比如飛行器的飛行控制系統
- 軟實時系統
- 偶爾違反情況也可以接受
- 比如飛機訂票系統
主要特點:可靠性和及時性
1.2.5 網絡操作系統和分布式操作系統
分時和實時操作系統,只有一台計算機,而網絡和分布式操作系統則是有許多主機。
網絡OS主要特點:
- 資源共享
- 各個計算機之間通信
分布式OS:
- 任意兩台計算機通過通信方式交換信息
- 地位平等
- 所有資源為用戶共享
- 若干計算機都可以構成子系統並支持重構
- 任何工作都可以分布在幾台計算機上,由它們並行、協同完成
分布式OS與網絡OS本質上的不同在於:在分布式操作系統中,若干計算機協同完成同一任務
1.2.7 習題及解析
7.實時操作系統必須在被控制對象規定的時間處理來自外部的時間
二、綜合應用題
3.甘特圖如下:
1.3操作系統的運行環境
1.3.1 操作系統的運行機制
OS中,CPU需要執行兩種不同的程序:內核程序和應用程序。
前者是后者的管理者,所以需要執行一些后者所不能執行的”特權指令“:
- I/O指令
- 置中斷指令
- 存取用於內存保護的寄存器
- 送程序狀態字到程序狀態字寄存器
具體實現:划分了管態(核心態)和目態(用戶態)來實現
操作系統的內核:
- OS的最底層
- 與硬件關聯較緊密的模塊
- 時鍾管理
- 中斷處理
- 設備驅動
- 與硬件關聯較緊密的模塊
- 再上一層
- 運行頻率較高的程序
- 進程管理
- 存儲器管理
- 設備管理
- 運行頻率較高的程序
內核的基本內容:
1.時鍾管理
計算機中最重要的設備:時鍾
時鍾的功能:
- 計時
- 提供標准的系統時間
- 時鍾中斷
- 實現進程切換
- 分時OS:時間片輪轉調度
- 實時OS:按截止時間控制運行
- 批處理:用時鍾管理衡量一個進程執行的程度
- 實現進程切換
2.中斷機制
現代OS是靠中斷驅動的OS
中斷是OS各項操作的基礎
- 鍵盤或鼠標的輸入
- 進程的管理和調用
- 系統功能的調用
- 設備驅動
- 文件訪問
中斷機制中,只有一小部分屬於內核,負責保護和恢復中斷現場的信息
3.原語
不可再分的操作
特點:
- 處於OS的最底層,最接近硬件
- 只能一氣呵成
- 時間短,調用頻繁
定義原語最直接的方式是關閉中斷
舉個栗子
- 設備驅動
- CPU切換
- 進程通信
4.系統控制的數據結構及處理
用來登記狀態信息的數據結構:
- 作業控制塊
- 進程控制塊PCB
- 設備控制塊
- 各類鏈表
- 消息隊列
- 緩沖區
- 空閑區登記表
- 內存分配表
- 等等
常見操作:
- 進程管理:進程狀態管理、進程調度和分派、創建和撤銷PCB
- 存儲器管理:存儲器的空間分配和回收、內存信息保護程序、代碼對換程序
- 設備管理:緩沖區管理、設備分配和回收
核心態指令包括系統調用類指令,對時鍾、中斷和原語的操作指令
1.3.2 中斷和異常的概念
系統不允許用戶程序實現核心態的功能,而它們又必須實現這些功能。
而從用戶態進入核心態的”門“就是中斷,是通過硬件實現的。
中斷是現代操作系統中非常重要的概念:因為OS的發展方向就是不斷提高資源利用率的過程,最直接的手段就是在程序並未使用某種資源時,將它對這種資源的控制權釋放,這是通過中斷實現的。
中斷:
- Interruption
- 來自CPU指令指令以外的事情發生
- 舉個栗子
- 設備發出的I/O結束中斷
- 時鍾中斷:時間片已到,讓處理機處理計時、啟動定時運行的任務
異常:
- Exception
- 又稱內中斷、例外或陷入(Trap)
- 源自CPU執行的指令內部的事件
- 舉個栗子
- 非法操作碼
- 地址越界
- 算術溢出
- 虛存系統的內存缺頁
- 專門的陷入指令
事實上,中斷分為廣義中斷和狹義中斷:
中斷:
- 外中斷(中斷)
- 外設請求
- 人為干預
- 內中斷(異常)
- 自願中斷——指令中斷
- 強迫中斷
- 硬件中斷
- 軟件中斷
1.3.3 系統調用
凡是與資源有關的操作,都必須通過系統調用,由OS代為完成
系統調用的分類:
- 設備管理
- 文件管理
- 進程管理
- 進程控制
- 內存管理
OS的運行環境可以這樣理解:
用戶運行上層程序,需要OS支持時,通過硬件實現的中斷進入內核態,也可能通過異常進入核心態。
當管理程序運行結束時,用戶程序需要繼續執行,則通過保存的程序現場退出中斷處理或異常處理返回斷點處
在操作系統中,我們關心的的是用戶態和內核態的軟件實現和切換,而非硬件。
由用戶態轉向核心態的例子
- 系統調用
- 發生一次中斷
- 用戶程序產生錯誤
- 用戶企圖執行特權指令
- 從核心態向用戶態由一條指令實現,這也是特權指令,一般是中斷返回指令
由用戶態進入核心態,不只是狀態需要切換,所使用的堆棧也可能需要由用戶堆棧轉為系統堆棧。
由用戶態進入核心態時,需要用到訪管程序,是在用戶態使用的,所以不可能是特權指令。
1.3.4 習題&解析
3.系統調用需要觸發Trap指令,如基於x86的linux,該指令為int 0x80或sysenter
???系統調用不是一種很正常的,程序對OS的調用嘛,不是很異常的情況啊,為什么要調用trap?
5.用戶程序在用戶態下要使用特權指令引起的中斷屬於訪管中斷而非外部中斷。
用戶態到核心態的確需要訪管指令,所以是訪管中斷。而這中斷來自於執行的指令內部,所以不屬於外部中斷。
7.進程調度不需要硬件支持,由操作系統實現。地址映射中的重定位需要硬件支持。
15.廣義指令而非寄存器清零只能在核心態下執行。
注意區分”調用“和”執行“。廣義指令即為系統調用,調用系統調用的可能是在用戶態,但是系統調用指令執行時一定是在核心態。
20.中斷處理和子程序調用都需要壓棧保護現場,中斷處理一定會而子程序調用不需要保存的內容是程序狀態字寄存器。子程序只需要保存程序斷點,即該指令的下一條指令的地址;中斷處理不僅需要保存斷點(PC內容),還需要保存程序狀態字的內容PSW(中斷處理中,最重要的就是PC&PSW)
24.外部中斷發生時,PC值由中斷隱指令自動保存,而OS負責保存通用寄存器
MOV R0,addr
可能出現缺頁異常的情況
26.系統調用的過程:正在執行的進程先傳遞系統調用的參數,然后執行trap指令負責將用戶態轉化為核心態,並將返回地址壓棧以備后用
27.多道程序並發執行是指,有程序正在CPU上執行,而另一些程序正在I/O設備上進行傳輸
通道是一種控制一台或多台外部設備的硬件,他一旦被啟動就獨立於CPU執行。
因此做到了CPU和I/O並行執行。
1.4 微內核與大內核
大內核就是將OS的主要功能模塊都作為一個緊密聯系的整體運行在核心態,擁有無與倫比的性能優勢。
但是,隨着需求的不斷增長,需要OS提供的服務也越來越多,使操作系統也面臨“軟件危機”的困境。
為了解決操作系統核心代碼維護難得問題,有人提出了微內核。
將基本功能保留在內核,其他的遷移到用戶態。它們獨立執行,借助微內核,進程間通信的機制進行通信。
缺點是降低了性能,但是因為功能少了,所以更加穩定。