第一章:內存管理機制
第一節:機制與策略
內存的訪問和操作涉及了大量分門別類的內容。必須施以措施保證訪問有效內存,并對應正確的實際物理存儲器。如果在內存保護模式下,處理器還應當負責確保執行中的任務不去訪問禁止訪問的內存。多任務操作系統就是基于內存保護服務構建的系統。如果使用了虛擬內存,系統會維護一個重要的內存信息記錄,用以追蹤記錄任務所屬的硬盤扇區(譯注:即是虛擬內存)它比你想象的要復雜得多,并且每個環節都要求萬無一失。
注解:在 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 眷顧更快的芯片,即使它們不是那么穩定。
速度原則:
追求速度的趨勢結果使得現有的商業操作系統都具備自己的內存管理服務并深深植根于硬件所規定的數據結構和協議標準。處理器提供基本的內存管理功能集。這些功能保證功能機制設置的平衡。它取決于操作系統是否決定使用處理的內存管理機制。如果是,則使用處理器的內存管理。操作系統創建這樣的策略來權衡和控制內存管理機制。
下一章節,我會從硬件的角度來解釋,硬件如何提供內存訪問和控制的機制。

Memory Management:Alogorithms and Implementation in C/C++
by Bill Blunden
Wordware Publishing © 2003 (360 pages)
This book presents several concrete implementations
of garbage collection and explicit memory management algorithms.
原書下載 地址