這讓比爾?蓋茨感到緊張。NT最少需要一個帶有8兆記憶體的電腦,這是當時一臺新電腦標準配置的8倍以上。蓋茨擔心消費者會不用NT,因為它意味著消費者需要為它再花幾百美元購買額外的記憶體。雖然記憶體晶片的價格可能會大幅度下降,但NT的記憶體要求仍然是非常不確定的。
這個任務落到了皮亞佐利頭上,他來負責設計和編寫NT中管理記憶體的程式碼(他在卡特勒的實驗室裡曾寫過類似的記憶體管理程式)。記憶體管理要確保作業系統的每個部分和每個執行的應用程式在它們需要時都能有足夠的記憶體空間,所以它自己要一直保持執行狀態。這是個複雜的任務,因為,當一個應用程式需要記憶體而當時沒有時,就需要記憶體管理程式來精確地搜尋出可用的記憶體空間。而且“每個人都需要記憶體,而且想馬上得到”,使這項任務顯得更加艱鉅。
為了更好地理解記憶體管理程式的作用,我們來想象五個飯店,它們共用一個停車場,但是車位有限,假設只有100個車位。想在這五個飯店的任何一家吃飯,在這個停車場裡停車是唯一可行之路。一個孤單的車僕負責車進車出,和代泊每一輛車。飯店象徵應用程式,停車場象徵電腦的記憶體,車僕則代表作業系統裡的記憶體管理程式。早上,只有一家飯店營業,所以有足夠的閒置車位,車僕的管理工作也很輕鬆。午飯時間則顯得壓力重重,因為五個飯店都在營業,對車位的要求很緊張。
車僕於是開始筋疲力盡。他不僅需要留意每一個車位的狀態,而且必須迅速無誤地代泊每一輛車,並在客人離開的時候,準確地找到它們。既然停車位佔用的是物理空間,那它肯定能擴張:增加車位成本很高,但是它能緩解停車場的阻塞。而更好的解決辦法是,車僕必須更聰明更敏捷地工作。當車位已滿,車僕必須在入口等待車位空出來。優秀的車僕能夠指揮這些車輛,所以當停車場暫時不能運作的時候,沒有人會引起爭吵。而無能的車僕卻常常不能很好地管理未停放的車輛,所以場地充滿著混亂。然後,每個客人都得離開他或她的飯局,找到他或她的車,重新再停一次車。
車僕的工作形象地顯示,稍不注意,局面就失去把握。皮亞佐利想創造出一個聰明絕頂的車僕,但他堅持用陳舊的方式。
對可靠性的要求極大地影響了作業系統的整體設計。什麼是隔離應用程式的最佳方式呢?這樣當應用程式出現故障時會不會使NT也失敗?卡特勒的解決方案是把作業系統分成兩個主要的部分。其中一個是“核心”,它不直接和應用程式關聯,所以不會被它們影響。另一個是作業系統的圖形化的、可視的部分。
我們回到樓上—樓下的比喻來領悟一個系統核心的要領。想象一下家政服務團的管家,他是多麼地勤勞:他24小時不分晝夜地為樓上的家庭服務,隨叫隨到,處理各種要求。如果需要做頓飯,他就去做;如果需要洗衣服,他就去洗。如果他不在,他也會安排好一個候補。他把房子裡的一切維持得井然有序。樓上成員的任何意外的行為都不會使樓下的生活休止——從不。書 包 網 txt小說上傳分享
第3章 部落(9)
這就是卡特勒想要的作業系統的大致情形。就像樓上的家庭,應用程式可能會有意外的或不合理的行為。在程式的範疇裡,當所有其他程式都執行失敗的時候,唯一能保持執行的就是系統核心。它透過給應用程式強加一定的限制來保護它自己,最重要的是,只有它,而不可能是應用程式,來操控硬體。
系統核心本身的結構就很複雜,包括很多元件,元件之間互相呼叫,或者直接呼叫硬體關聯。系統核心的元件常常呼叫底層程式碼——“微核”,它是NT裡的終極統領。卡特勒曾在DEC寫過一個微核,打算也為NT寫一個。這看起來極像他在團隊中的地位,微核在作業系統裡也頗具權威。
核心設計有兩個主要的優點。第一,當一個程式突然停止的時候,核心允許使用者保持其他的應用程式的正常執行;還可以啟動新的應用程式;從而保證了系統的可靠性。第二,核心可以使作業系統顯示出多樣的個性。每個作業系統的個性都透過呼叫核心來向計算機發出命令。OS/2將會是這些個性之一,這是蓋茨的要求。但是NT也要能支援其他個性,成為一個潛在的通用的軟體平臺。
卡特勒核心設計的令人眩目的優點——可靠性和多樣的個性——可這是有代價的:速度,或者說缺乏速度。這裡有嚴格的邏輯性。把一種個性加入模組裡,意味著系統發出的呼叫命令的數量起碼翻了一倍。比如說,一個應用程式必