第一章:內存管理機制

內存的訪問和操作涉及了大量分門別類的內容。必須施以措施保證訪問有效內 存,並對應正確的實際物理存儲器。如果在內存保護模式下,處理器還應當負責確保執行中的任務不去訪問禁止訪問的內存。多任務操作系統就是基於內存保護服務 構建的系統。如果使用了虛擬內存,系統會維護一個重要的內存信息記錄,用以追蹤記錄任務所屬的硬盤扇區(譯註:即是虛擬內存)它比你想象的要複雜得多,並 且每個環節都要求萬無一失。

    註解在 Intel平臺上,如果內存子系統設置了錯誤的數據結構,處理器將其作爲所謂的(triple fault)三次錯誤來處理。所謂Intel平臺上的(double fault)二次錯誤是指當處理器去處理已發生的異常錯誤時再次發生了異常錯誤。當(double fault)二級錯誤處理失敗,三級錯誤產生,系統置入停機過程狀態。一般說來,Intel系統如果發生這種類型的錯誤,會重啓系統。

    爲了保證執行速度,處理器廠商在芯片內部賦予了高級內存管理的能力。這使操作系統商得以將大量,單調乏味,冗餘的內存管理工作交由處理器去完成,處理器內部可以以更快的速度處理各種錯誤校驗。但是這同樣也產生了操作系統商在一定程度上限定於特定的硬件平臺的副作用。

    爲提升了性能,儘管失去了移植性,但是仍然是很值得的。如果操作系統完全去擔當實現了比如分頁,分段處理功能的責任,很明顯那會比得益於從處理器內建(內存管理)功能的那種方案要慢得多。想象如果真要在那種有操作系統實現的內存保護模式的操作系統上,玩類似Quake3那樣密集圖形的實時遊戲,遊戲根本沒法玩。

     註解: 你或許會問,我是否能提供一個測定的數值說明操作系統到底會變得多慢。我承認我給出了一些揮舞胳膊(arm-waving)的結論。根據1993年 Wahbe.Lucoo.et al(請參見“引用”章節)的一篇論文指出。他們使用了一種稱爲“沙盒”(sandboxing)的技術,將應用程序中的代碼模塊分離隔離起來。使用該技 術以後,帶來了4%的執行速度的提升。你能夠想象要添加虛擬內存技術以及權限訪問方案的這樣一個龐大的結構,將會給你帶來什麼。

題外話

揮舞胳膊(arm-waving)的結論,是一種沒有經過嚴謹數學表達方式 求證過的一般建議。數學表達方式的好處是可以對完全含糊不清的事物做出定論:結論只有是或者否。對於揮舞胳膊(arm-waving)的結論來說趨向於避 開十分嚴格的邏輯推理更偏向於藉助直覺作爲判別依據。這樣推理是最值得懷疑的,不僅因爲直覺常常是錯誤的,同樣也因爲依據直覺的判別是模棱兩可的。例如, 爭論世界是否是平的人趨向於依賴揮舞胳膊(arm-waving)方式的結論。


      
註解: 當初Dave Cutle在創造Windows NT時,大部分的注意力都集中在操作系統的硬件抽象層(HAL)上。該想法指操作系統儘可能的和硬件分離,該獨立的代碼層位於底層硬件。通過這樣的設計有 助於解決我在幾分鐘前提到的硬件依賴的問題。NT平臺真的可以運行在兩類面向UNIX的硬件平臺之上了,Dave也因此功成名就。這其中包括 Digital的 Alpha處理器和MPS RISC的處理器。問題是微軟公司無法在硬件平臺上施展他們的一些高層的技術,如DCOM技術不能在Intel以外的硬件平臺上運行,對於基於二進制標準 的對象技術來說這樣的情況更加頻繁出現。

 

 勝利總是屬於偏好運行速度的解決方案。一位前任Control Data工程師告訴我,當Seymour Cray 在研發6600時,他碰巧得到一塊比他當時使用的更快的一種芯片。可是該芯片總是出現意想不到的運算錯誤。Seymour 爲該芯片搭建了一系列精巧的運行環境。公司執行高管們沒有反對Seymour的做法,不想打擾這位作爲大概是數據控制中心最有價值的技術非凡的工程師。不幸的是,他們的倉庫裏堆積了滿滿的最初的那種老芯片。不能夠丟棄掉那些老芯片,必須設法都用上他們,於是誕生了CDC300,一個比6600運行速度慢並且廉價的產品。
我的觀點:Seymour 眷顧更快的芯片,即使它們不是那麼穩定。
速度原則:
    追求速度的趨勢結果使得現有的商業操作系統都具備自己的內存管理服務並深深植根於硬件所規定的數據結構和協議標準。處理器提供基本的內存管理功能集。這些 功能保證功能機制設置的平衡。它取決於操作系統是否決定使用處理的內存管理機制。如果是,則使用處理器的內存管理。操作系統創建這樣的策略來權衡和控制內 存管理機制。

下一章節,我會從硬件的角度來解釋,硬件如何提供內存訪問和控制的機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章