Overview
程式 (Program): 儲存在硬碟內的file,靜態。
行程 (Process): 載入記憶體內正在動態執行的程式就是行程。
執行緒 (Thread): 行程可以再把工作分配給多個執行緒完成。
Process in Memory
Text section: 包含程式碼、Program counter、Register。
Data section: 存放全域變數。
堆積 (Heap): 行程執行時配置的動態記憶體空間。
堆疊 (Stack): 存放暫時性資料、區域變數。
Process State
New: 行程正在產生中。
Ready: 行程已載入記憶體中且具備執行所需資源,正在CPU排程中。
Run: 行程在CPU執行中。
Wait: 行程在CPU執行時,因各種原因 (ex.逾時、I/O) 而退出的狀態,再獲得所需資源後可回到Ready。
Terminated: 行程執行完畢,釋放所有佔有的資源。
*任一時刻,CPU中只會有一個行程在 Run,大部分的行程都是在Ready/Wait。
本文切換 (Context switch)
本文 (Context) 就是程式碼,本文切換則是指不同行程在CPU控制權裡切換的過程,這是為了實現多工的機制,但卻是Overhead的動作。
行程控制表 (PCB, Process Control Block)
OS用PCB來記錄每個行程的資訊,隨著行程建立時同時產生,通常包含:- Process ID: 行程的識別碼。
- Process state
- Program Counter: 指向下個要執行的指令。
- CPU registers: 中斷發生時暫存用。
- CPU scheduling information: 記載該行程的priority。
- Memory-management information: base/limit register, page table.....
- I/O status information: 配置該行程會使用到的I/O。
- Accounting information: CPU的使用情況,ex.使用時間。
Process Scheduling
一個行程在它的生命周期中會在各個佇列間移動,而OS會透過排班程式從這些佇列中依序選取行程。
佇列 (Queue)
- Job Queue: 系統內所有行程組成的佇列。
- Ready Queue: 位於主記憶體中已就緒等待執行的行程佇列。
- Device Queue: 裝置本身的佇列,由等待該裝置工作的行程組成。
佇列 (Queue)
- Job Queue: 系統內所有行程組成的佇列。
- Ready Queue: 位於主記憶體中已就緒等待執行的行程佇列。
- Device Queue: 裝置本身的佇列,由等待該裝置工作的行程組成。
排班程式 (Scheduler)
- Long term Scheduler/ Job Scheduler (New state → Ready state): 由硬碟中的行
程池選出行程,載入記憶體內以便執行,執行次數少間隔長 。
- Short term Scheduler/ CPU Scheduler (Ready state → Run state): 由記憶體中的Ready Queue選出一個Ready的行程,並交由CPU,執行次數多間隔短。
- Medium term Scheduler (Ready state → Wait state): 對行程進行記憶體置換 (Swap),以改善多工的程度。
Inter-Process Communication (IPC)
行程可分為獨立或合作執行兩類,後者必須透過行程間通訊來溝通:
- Message Passing: Indirect communication (Mailbox) VS Direct communication
- Memory Shared
- Socket
- Remote Procedure Calls (RPC): 遠端call別台主機的system call。
Other Issues:
CPU-Bound Process vs I/O-Bound Process
Indirect communication vs Direct communication
- Socket
- Remote Procedure Calls (RPC): 遠端call別台主機的system call。
Other Issues:
CPU-Bound Process vs I/O-Bound Process
Indirect communication vs Direct communication
沒有留言:
張貼留言