作業系統介面

核心作為資源管理者(the kernel as a resource manager)

想像繁忙機場裡的航管員。許多飛機都想用同一批跑道、同一片空域、同一些登機門——它們不能就這樣自己佔用,否則會相撞。一個受信任的權威看見全局、決定誰何時走、並讓所有人安全地保持距離。核心對電腦的共用資源扮演的正是這個角色:它是唯一擁有全部資源並把它們分配出去的一方。

具體來說,電腦有一堆固定的共用資源,每個執行中的程式都想分一杯羹:CPU 的時間、實體記憶體的每個位元組、對磁碟與檔案系統的存取、網路、以及各種裝置。核心是唯一擁有並配置這一切的、受信任的程式。它是管理者:它決定下一個在 CPU 上執行的程式是誰(排程)、它分配並回收記憶體、它授予對檔案與裝置的存取。它也是仲裁者:當兩個程式都想要同一項資源時,核心公平地居中協調並讓它們彼此隔離,這樣一個行程就不能讀另一個的記憶體、也不能把 CPU 餓死其他所有人。程式從不直接奪取這些資源——它們透過系統呼叫請求,由核心決定是否以及如何核准每一個請求。

為何重要:這一個概念把整個作業系統介面串了起來。系統呼叫之所以存在,正是因為它所碰的資源是共用的、必須被仲裁;特權之牆之所以存在,正是為了逼每個程式都得經過管理者、而不能直接奪取資源。把核心看成「所有共用硬體的管理者兼裁判」,就能解釋它為什麼必須擁有特權、為什麼必須驗證每一個請求、以及為什麼它坐落在每個程式與機器之間。沒有一個單一的仲裁者,多工的電腦就會是一場混戰,任何程式都能踐踏任何其他程式。

兩個程式都呼叫 malloc() 各要一 GiB。兩者都沒有直接奪取記憶體;每個都(在底下)向核心請求,由核心決定每個實際拿到多少實體記憶體、讓它們的記憶體區域彼此分離、甚至可能配出尚未有實體支撐的記憶體。整段過程中,核心都是那個仲裁者。

共用資源是被請求的、絕非被奪取的——核心負責授予與隔離。

把核心稱作「管理者」是一種角色描述,並非說它一直很忙。多數時候它是閒置的、在等待;只有當程式發出請求、或某個裝置需要關注時,它才動起來。重點是它對共用資源是唯一的權威,而不是它一直在工作。

又稱
resource arbiterthe kernel's job資源管理者資源仲裁者