可以使用queue的概念來解釋。想像一個排隊的場景,不同的process就像是排隊等待服務的人,而CPU則是提供服務的服務窗口
* Multiprogramming:CPU 始終運行process以最大化 CPU 利用率
* Time sharing:頻繁切換CPU,以便用戶可以在每個程序運行時與其進行交互
* process必須等到 CPU 空閒並且可以重新調度

## Process Scheduling Queues
* Job queue(新狀態)-系統中所有process的集合
* Ready queue(就緒狀態) - 駐留在主內存中的所有process的集合,準備好並等待執行
* Device queue(等待狀態)- 等待 I/O 設備的process集

## Schedulers
* Short-term scheduler(CPU scheduler)-選擇應執行哪個process並分配CPU(Ready state → Run state)
* Long-term scheduler(job scheduler)——選擇哪些process應加載到memory中並放入就緒queue(New state→ Ready state)
* Medium-term scheduler - 選擇哪些process應換入/換出memory(Ready state→→ Wait state)

## process 樹
* process樹的形狀和結構取決於process的創建和終止操作。
* 作業系統通常提供相關的系統調用和命令來查看和管理process樹的結構。
* 每個process都由唯一的處理器標識符(pid) 標識
root process: process樹的root節點是操作系統創建的首個 process,稱為root process。root process是所有其他 process的祖先。
父子關係:在 process樹中,每個 process可以擁有一個父 process和多個子 process。父 process創建子 process,子 process是父 process的衍生。子 process可以再創建自己的子 process,形成多個層次的層次結構。
階層關係: process樹展現了 process之間的階層關係。每個 process(除了根 process)都有唯一的父 process,並且可以有多個子 process。這種結構使得 process之間可以形成層次結構,方便管理和組織。
狀態傳遞:在 process樹中, process的狀態可以在父子 process之間傳遞。例如,當父 process終止時,它的子 process也會被系統接管或終止

UNIX:“ps -ael”將列出所有活動process的完整信息
## Long-term scheduler
* 多道程序控製程度
* 執行頻率較低(例如,僅在process離開系統時調用或幾分鐘調用一次)
* 選擇CPU密集型和I/O密集型process的良好組合以提高系統整體性能
* UNIX/NT:沒有Long-term scheduler
* 創建的process放置在Memory中供Short-term scheduler程序使用
* 多道程序設計程度受到硬體限制(例如終端數量)或用戶自我調整性質的限制
## Short-term scheduler
非常頻繁地執行(例如每 100 毫秒執行一次)
必須高效:
* 如果選擇一個工作需要 10 毫秒,那麼這樣的選擇需要 100 毫秒,
* → 管理費用 = 10/110 = 9%

## Medium-Term Scheduler
換出:從memory中刪除process以減少多道程序設計的程度
換入:將換出process重新引入memory
目的:改善process組合,釋放memory

## Process Creation
* 資源共享
* 父子process共享所有資源
* 子process共享父process的資源子集
* 父母和孩子不共享資源
* 執行的兩種可能性
* 父級和子級同時執行
* 父process等待子process終止
* 地址空間的兩種可能性
* 父級的子級副本,通過共享變量進行通信
* 子process中加載了一個程序,通過消息傳遞進行通信
## UNIX/Linux process創建
* fork系統調用
* 創建一個新的(子)流程
* 新process複製其父process的地址空間
* 子process和父process在 fork 後同時執行
* Child:fork的返回值為0
* Parent:fork的返回值為子process的PID
* execlp 系統調用
* 將新的二進製文件加載到內存中 - 銷毀舊代碼
* 等待系統調用
* 父process等待其子process之一完成

![Uploading file..._ii20x7ef7]()