:操作系統的“心臟起搏器”——深度拆解 sched.c 的調度、睡眠與喚醒魔法)
免責聲明本文內容僅限技術學習與交流使用。文中涉及的代碼、算法及數據結構基于 1991 年的 Linux 0.11 內核源代碼。當前主流 Linux 內核(如 2.6.x 及以上)的調度器(如 CFS 完全公平調度器)與 0.11 基于時間片輪轉的調度算法已完全不同,若嘗試將文中所述邏輯直接遷移至現代項目,請務必自行驗證。因使用不當造成的任何系統異常或數據丟失,責任由使用者自行承擔。引子:如何讓一顆“單核”的 CPU,同時服侍數百個任務?想象一下,你是一個大飯店里唯一的一位廚師(單核 CPU)。但是,餐桌上坐著幾十位客人(進程),他們都等著你炒菜。你不可能一次炒幾十個菜,你只有一個灶臺。你必須炒一下 A 客人的番茄炒蛋,裝盤一半,立刻換到 B 客人的清蒸魚,蒸一半,再去切 C 客人的回鍋肉,然后回頭繼續炒 A 的番茄炒蛋。每一道菜你只處理極小的一段時間,然后立刻換人。為什么要這樣?因為如果你一直只炒一道菜(比如 A 的番茄炒蛋),可能這道菜需要慢燉半小時,其他客人都會餓死。所以,你必須有一套極其嚴密的“換菜譜邏輯”: