Linux 核心排程器經歷 O(1) → CFS (Completely Fair Scheduler) 演進。本文系統梳理經典排程算法 (FCFS、RR、預測式、優先權、多級回饋)、實時排程 (FIFO/RR/Deadline)、CFS 紅黑樹虛擬運行時間機制、CGroup 頻寬控制,並對比 Windows 排程差異。

| 算法 | 原理 | 優點 | 缺點 | 改良 |
|---|---|---|---|---|
| FCFS (先來先服務) | FIFO 佇列 | 實現簡單 | 短作業等待久、I/O 密集型饑餓 | — |
| RR (時間片輪轉) | 固定時間片,用完入隊尾 | 回應時間公平 | 時間片過長退化 FCFS,過短切換開銷大 | 雙佇列:I/O 阻塞進程優先 |
| 預測式 | 假知下一段 CPU 突發長度 | 理想最短平均等待 | 現實無法精確預測 | SJF/指數平均預測 |
| 優先權 | 靜態/動態優先權 | 重要任務優先 | 低優先權餓死 | 老化機制提升等待久進程優先權 |
| 多級回饋佇列 (MLFQ) | 多佇列 + 不同時間片 + 升降級 | 兼顧回應與吞吐 | 參數調校複雜 | Unix SVR4/BSD 採用 |
SCHED_FIFO 先入先出,同優先權無時間片,搶佔低優先權
SCHED_RR 輪轉,同優先權有時間片
SCHED_DEADLINE EDF (Earliest Deadline First),保證截止時間
# 需 CAP_SYS_NICE 權限
chrt -f 99 ./realtime_app
vruntime (虛擬運行時間) 為鍵,最左節點 = 最值得運行的進程。vruntime += 实际运行时间 * 1024 / 权重,權重由 nice 值決定。sched_latency / 進程數,最小 sched_min_granularity。load_avg 平衡。
# 限制容器 CPU 配額 (quota/period)
echo 50000 > /sys/fs/cgroup/container/cpu.max # 50% CPU (period=100000)
從 FCFS 到 CFS,Linux 排程器始終在「公平性、回應性、吞吐量」三角中尋找最佳平衡點。
Linux 禁止特定 IP 存取:hosts.allow / hosts.deny 與 tcpd 實戰配置
Linux 前景/背景程序切換實戰:&、jobs、fg、bg、nohup 與 disown 完整指南
Linux 設定 PostgreSQL 允許遠端連線:pg_hba.conf 與 postgresql.conf 雙檔修改
grep 文字搜尋神器:正規表示式、參數全表、前後文脈、計數/行號/檔名輸出、遞迴/二進位處理、腳本回傳碼應用
Ubuntu 14.04 Unity Dash 新增關機/重啟/登出快捷選單:Power Commands 安裝指南
CrunchBang Linux 恢復 Openbox 預設選單配置:一鍵修復 menu.xml