由於第四章線程的介紹沒有上傳視頻,故之后看書來補。
最近開始學習操作系統原理這門課程,特將學習筆記整理成技術博客的形式發表,希望能給大家的操作系統學習帶來幫助。同時盼望大家能對文章評論,大家一起多多交流,共同進步!
本篇文章大致內容為:
- 基本概念(Basic Concept)
- 調度准則(Scheduling Criteria)
- 調度算法(Scheduling Algorithm)
- 實時調度(Real-Time Scheduling)
- 算法評價(Algorithm Evaluation)
基本概念(Basic Concept)
通過多道程序設計可以盡可能高的提高CPU利用率,但道數不可能無限增加。
同時: 宏觀-程序進入內存,被操作系統調度; 微觀-進程正在CPU上運行(Running)
調度:切換的過程中,切換越多,系統消耗越多,故道數不可能無限增加(另外還有內存方面的考慮)
CPU-I/O Burst Cycle CPU-I/O執行期
- 進程執行包括一系列的CPU執行期和輸入輸出等待期
CPU執行期分布:為指數型或多階指數型
CPU型程序:大部分時間用在CPU上的程序
I/O型程序:大部分時間用在I/O上的程序
CPU調度(進程調度,低級調度,短程調度) CPU Scheduler
選擇內存上的處於就緒狀態的進程,並分配CPU給它們使用(依照算法)。
什么時候進行CPU調度?或CPU調度的時機:
- Switches from running to waiting state
- Switches from running to ready state
- Switches from waiting to ready state:就緒隊列來了新進程。
- Switched from waiting to ready state
注:1和4為非剝奪式/非搶占式(nonpreemptive)的,2和3為剝奪式/搶占式(preemptive)的。
調度程序(Dispatcher)
調度程序將CPU的控制權交給就緒隊列中選中的進程,包括:
- switching context 上下文切換(中斷現場的保存與恢復)
- switching to user mode 切換到用戶態(PSW最高位),用戶態:非特權指令;系統態:非特權指令+特權指令
- jumping to the proper location in the user program to restart that program 跳轉到程序上一次中斷前執行的語句的上一行
調度延時(Dispatch latency)
換下一個進程並換上另一個新進程所需的時間,也叫系統消耗(overload)
調度准則(Scheduling Criteria)
- CPU利用率(CPU utilization)
- 吞吐量(Throughout):單位時間內執行作業的數量。
- 周轉時間(Turnaround time):提交完畢->執行結束所需時間。
- 等待時間(Waiting time):在就緒隊列內等待的時間,多次等待時間做和。
- 響應時間(Response time):提交完成->首次給出相應所需時間。
周轉時間的組成:后備等待+就緒隊列等待時間之和+運行時間之和+阻塞隊列等待時間之和
優化准則(Optimization Criteria):對於相同作業而言,
- Max CPU utilization CPU利用率最大化
- Max Throughput 單位時間最大吞吐量
- Min turnaround time 最小化周轉時間
- Min waiting time 最小化等待時間
- Min response time 最小化響應時間
調度算法(Scheduling Algorithms)
- First-Come,First-Served(FCFS):先來先服務的調度原則
- Shortest-Job-First(SJF) Scheduling:短作業優先調度原則
- Priority Scheduling:優先級調度原則
- Round-Robin Scheduling:時間塊調度原則
- Multilevel Queue Scheduling:多級隊列調度原則
- Multilevel Feedback Queue:多級反饋隊列調度原則
FCFS Scheduling
Gantt Chart:甘特圖
SJF Scheduling:選擇下一次CPU執行期最短的進程執行,分為兩種,nonpreemptive 非搶占式的 和 preemptive 搶占式的。
搶占式-Shortest-Remainging-Time-First(SRTF) 最短剩余時間優先
SJF可以獲得最小的平均等待時間。
Example of Non-Preemptive SJF:
Example of Preeptive SJF:
確定下一次CPU執行期的長短(Determining Length of Next CPU Burst)
只能估計時間,可以使用指數平均法:
兩種極端:
通常情況:
優先級調度(Priority Scheduling)
- 每一個進程都有一個優先級
- CPU調度給優先級最高的進程
- 優先級調度可以分為
- 可搶占式的(Preemptive)
- 不可搶占式的(Nonpreemptive)
SJF也是一類優先級算法。
存在問題:Infinite blocking(Starvation) 飢餓:優先級低的進程會被無限推遲。
解決方法:Aging(熬),可變優先級,動態優先級
時間片輪轉(Round Robin, RR)
time slice - 時間片
- 每個進程都會得到一個CPU時間段(通常10~100milliseconds)
- 時間片到后,進程被搶占並被放入就緒隊列的末尾
- 若有n個進程且時間片長度為q,則每個進程都會獲1/n的CPU時間,並且每次執行不超過q,則沒有進程會等待超過(n-1)q個時間片
性能:若q比較大,則等待時間長;若q比較小,則每個進程等待時間短,但上下文切換所需的系統消耗會變大,q必須大於上下文切換的中斷時間否則系統不能正常運行。
多級隊列排隊 Multilevel Queue
就緒隊列被分成兩個隊列,前台隊列用於交互式進程,使用RR調度,后台隊列用於批處理進程,使用fcfs調度,后台隊列保證前台有比較快的響應。
多級反饋隊列 Multilevel Feedback Queue
- 有多個隊列,每個隊列有不同的優先級
- 所有新進程都入最高優先級隊列
- 按照Round Robin情況調度最高優先級隊列一次,若進程完成則釋放內存結束進程,否則將該進程降入次高級進程
- 當最高優先級隊列為空時,用RR調度次高優先級隊列
- 當調度優先級為最高級的隊列內加入新進程時,若系統為搶占式調度,則當前進程進入中斷,並回到當前隊列的隊尾。
多級反饋隊列為一種綜合性調度:多級+RR+優先級+SJF+FCFS
算法評價 Algorithm Evaluation
- 確定模型 Determining modeling
- 隊列模型 Queueing modeling
- 使用仿真的方式評價(最常用):在公共的平台基於同樣的一組公共數據對算法進行評價。