| 維度 | 程序 | 進程 |
|---|---|---|
| 本質 | 靜態指令集合 | 動態執行過程 |
| 生命週期 | 永久存儲 | 臨時:創建→執行→消亡 |
| 組成 | 指令序列 | 程序+數據+PCB |
| 對應關係 | 1:N 或 N:M | 一程序可對應多進程 |
| 調度單位 | 不可獨立調度 | 獨立調度/並發單位 |
形象比喻:程序 = 菜譜,進程 = 烹饪過程,數據 = 食材。
進程切換開銷大(上下文切換、地址空間切換),線程共享進程資源,僅保留私有棧/寄存器/TCB,切換極快。
| 特性 | 進程 | 線程 |
|---|---|---|
| 資源擁有者 | 是 | 否(僅私有少量資源) |
| 調度單位 | 否(傳統OS) | 是 |
| 通信方式 | IPC(管道、Socket等) | 共享內存直接讀寫 |
| 同步機制 | 信號量、管程 | 互斥鎖、條件變量、讀寫鎖 |
| 安全性 | 隔離性好 | 共享數據易衝突,需同步 |
| 切換開銷 | 大 | 小 |
包含:線程 ID、狀態/優先級、寄存器上下文、私有棧指針、指向所屬 PCB 的指針。TCB ≪ PCB。
// 互斥信號量 mutex 初值 = 1 (資源數)
P(mutex); // 申請資源,若不可用則阻塞
// 臨界區
V(mutex); // 釋放資源,喚醒等待隊列
// 同步信號量 sync 初值 = 0
// 進程 A: 生產數據 -> V(sync)
// 進程 B: P(sync) -> 消費數據
關鍵規則:互斥 P/V 成對同進程,同步 P/V 成對跨進程且初值通常為 0。
將共享數據及操作封裝為模塊,編譯器/運行時保證互斥入口,提供 wait/signal 條件變量,簡化應用層同步編程(Java synchronized、C# lock、Python threading.Condition 均為管程思想實現)。
| 系統類型 | 算法 |
|---|---|
| 批處理 | FCFS、SJF、SRTN、HRRN |
| 交互式 | RR、優先級、多級反饋隊列、彩票、公平調度 |
本文轉載自 “李海川” 博客,原文地址:https://lihaichuan.blog.51cto.com/498079/1304092