基礎:作業系統是什麼

多元程式規劃

多元程式規劃(multiprogramming)的根本想法,是同時把好幾個程式載入記憶體,好讓 CPU 永遠有事可做。它要解決的問題是浪費。單一程式生命中花在等待上的時間多得驚人——等磁碟送來資料、等網路、等使用者按鍵。如果電腦一次從頭到尾只跑一個程式,昂貴的 CPU 在每一次這樣的等待中都會閒置。想像一位廚師:當一道菜在燉煮時,他開始為下一道切菜,而不是站著看鍋。多元程式規劃讓廚房保持忙碌。

用平白的步驟說明機制:好幾個程式(工作)一起被留在記憶體裡。CPU 執行其中一個。一旦那個程式必須等待某件慢的事——比方說它發出一次磁碟讀取——作業系統不會讓 CPU 閒著;它把 CPU 切換到另一個已就緒、可執行的程式,並讓磁碟在背景抓取。當第一個程式的資料終於抵達,它便再次就緒,稍後會重新取得 CPU。藉由永遠有一個就緒的程式可供切換,作業系統幾乎一直讓 CPU 維持生產力,大幅提高機器的整體產出率。

多元程式規劃是讓電腦變得有效率的歷史性飛躍,也是其後一切的母觀念:因為多個程式共享記憶體與 CPU,作業系統突然就需要排程(下一個誰跑)、記憶體管理(把程式彼此分開)與保護(一個程式不能毀損另一個)。值得及早釐清的誠實區別是:多元程式規劃關乎使用率(絕不讓 CPU 在有工作等待時閒置),它本身並不保證任何單一程式會迅速回應你。讓系統對互動式使用者感覺靈敏,是更進一步的步驟——分時系統——建立在多元程式規劃之上。

程式 A 要求讀一個檔案,必須等磁碟大約 8 毫秒。作業系統不在那 8 毫秒裡閒置,而是去執行已就緒的程式 B。當 A 的資料抵達,A 便重新加入就緒集合。CPU 全程保持忙碌,而非空等慢速硬體。

當一個程式在等待慢速輸入輸出時,另一個使用 CPU——沒有閒置時間。

多元程式規劃讓 CPU 使用率最大化;它本身並不保證對任何單一使用者的快速回應。快速、互動式的輪流,是建立在它之上的分時系統所追加的目標。

又稱
multiprogrammed batch system多工程式設計