作業系統設計/儲存的演變:機制
作業系統設計經常反映了它們時代的儲存能力。雖然最早的儲存機制是在作業系統出現之前就存在的,但為了完整起見,這裡也包含了它們。
第一個已知的人工儲存技術可能是液壓的。很少有人意識到,過去的藝術噴泉實際上是試圖開發記憶體系統。
到了巴貝奇的時代,機械裝置開始具備儲存資訊的能力。他的差分機雖然沒有達到他預期的效果,但也能夠儲存數字並進行加減等運算。我父親時代的機械計算器,演變成了我童年的電子計算器。
最初,儲存資料的電氣裝置本質上是模擬的。但是,模擬元件往往存在很大差異,除非它們經過精心製造,所以模擬計算機從未實現大規模生產。
使數字儲存成為可能的的發明是高電壓與低電壓檢測的約定。儘管模擬元件的值範圍很大,但可以標準化電路,以檢測大約 5 伏的電壓差。從這個標準開始,可以定義一個穩定的 5 伏訊號為 1,任何低於大約 2 伏的電壓為 0。開發了一系列儲存電路,每個電路具有獨特的特性,但可以在數字儲存所需的特定電壓範圍內工作。
數字儲存發明後,有人必須發明方法來編碼資訊,另一個人必須提出如何儲存事物的理論。最終,一種被稱為資訊理論的理論揭示瞭如何儲存幾乎所有可以用數字、字母或圖片表示的事物。
一旦有了關於如何儲存幾乎所有可以用數字表示的事物的理論,下一個問題就是標準儲存大小應該是什麼。數字可以儲存在 4 位中,整個英文字母表可以儲存在 8 位中,世界上幾乎所有的字母表都可以儲存在 32 位中。
從 1950 年代到 1980 年代初,許多計算機使用 36 位資料匯流排。[1]
第一個微處理器(從 1971 年開始)擁有 4 位資料匯流排。雖然像 Altair 這樣的早期微型計算機有 4 位資料匯流排,但微型計算機直到架構擴充套件到 8 位才開始流行起來。今天,微型計算機架構使用大約 32 到 64 位的字來透過每個提取週期移動更多字元來加速吞吐量。許多作業系統的有一個問題是,它們將字長設定為資料路徑寬度,而最終市場會超越該資料路徑寬度。
在 Windows 的生命週期中,計算機的資料路徑寬度已經翻了 3 倍。[2] (雖然 8088 基於 16 位晶片,但它實際上具有 8 位的有效資料路徑寬度。還要注意具有隔離地址匯流排的晶片,不要將資料匯流排與地址匯流排混淆)每次翻倍時,都會編寫一個新的 Windows 版本,利用更大的資料路徑寬度,並使之前的版本過時,迫使人們升級。問題的一部分在於,我們用其編寫作業系統的語言限制了資料字的大小,使其不超過該 cpu 架構中可用的最大值。當為 cpu 建立一個新的資料路徑寬度時,語言需要一段時間才能升級以處理更大的資料路徑。幸運的是,只需用零填充即可在更大的資料路徑中模擬較小的字。但是,透過使用兩個單獨的字並將它們邏輯地組合起來,模擬更大的資料路徑寬度也同樣容易。這樣做不常見的原因僅僅是營銷。每次資料路徑寬度增加時,每個人都可以出售其軟體的新版本,使以前的版本看起來過時。
對特定元素進行編碼的方式決定了儲存它需要多少記憶體。更高效的編碼技術儲存在更少的空間中,效率較低的儲存技術儲存在更多的空間中。雖然儲存的最初概念是它很昂貴,因此應該儘量減少對任何元素的儲存,但隨著我們發現冗餘儲存技術的新的應用,這種觀點已經越來越受到重新考慮。另一方面,數字儲存只儲存我們要儲存的事物的符號。經驗告訴我們,該符號的大小部分取決於我們對該符號瞭解的資訊量。鑑於我們只需要發出一個資訊,並且資訊的內容是已知的,那麼一個位元就足夠了。但是,儲存技術越通用,對每個訊號的瞭解越少,符號集就必須更大才能涵蓋所有訊號,因此程式碼就必須更大。
在某些情況下,將資料儲存得儘可能高效並不合理,僅僅因為我們無法以其最有效的形式在一個數據路徑寬度為任何大小的 CPU 中獲取它。這方面的一個例子,將是一個小整數或真假邏輯符號。由於我們通常希望以單個數據字的獲取週期移動資料,為了將該字的大小減少到一個小整數或邏輯符號的大小,我們將不得不進行更多必要的處理,如果我們只是使用更大的儲存大小來象徵該元素。另一方面,如果我們希望將盡可能多的儲存空間壓縮到儘可能小的區域,我們希望獲得最緊湊的儲存方案,並且我們可能希望使用某種壓縮機制來減少儲存冗餘,使記錄更小。
一旦我們確定了資料的符號格式,這並不像看起來那麼微不足道,因為計算機傾向於有位元組序,以及負整數和浮點數的不同表示形式,下一個問題出現是因為儲存本身取決於儲存器的技術。不同型別的儲存器以不同的電路儲存資料,這些電路的特性也不同。
對儲存器型別的興趣主要在於 RAM 和 Rom 之間的區別。本質上,ram 可以很容易地寫入,並且必須透過電池備份,或者必須不斷重新整理,這取決於它是靜態 RAM 還是動態 RAM。當計算機關閉時,動態 RAM 在幾秒鐘內就會清空並丟失。帶有電池的靜態 RAM 會保留一段時間,但往往更復雜,因此也更昂貴。另一方面,Rom 在沒有電力的情況下會保留一段時間,但並不容易寫入。
因此,計算機的初始化通常依賴於 ROM,而日常使用則基於 RAM。
雖然早期的 ROM 晶片必須在工廠製造,但一種新型的 ROM 被開發出來,稱為 PROM,其中熔絲可以在晶片離開工廠後燒燬以對晶片進行程式設計。後來,這些晶片被 Eproms 替代,Eproms 是具有可擦除熔絲的晶片,以後可以重新程式設計。雖然這些在一段時間內被 EEproms 或電氣可擦除 Eproms 替代,但 Flash Rom 的出現使這些笨重的晶片過時,因為 Flash Eproms 可以線上路中寫入。如今,Flash Rom 晶片非常便宜,使用 Flash 技術的多吉位元組儲存單元可以放在鑰匙鏈上。這樣就消除了對小型引導扇區來載入作業系統的需求,因為作業系統可以輕鬆地放入一小塊 Flash Rom 晶片中。
作業系統也可以根據它們對輔助儲存的依賴程度來進行分類。例如,第一代作業系統沒有很大的儲存能力,因此它們傾向於在執行之間將儲存解除安裝到一些輔助介質上。
最早的輔助儲存形式是穿孔卡片。本質上,霍勒瑞斯穿孔卡片是雅卡爾提花機的改編,雅卡爾提花機透過將帶有孔的卡片穿過一個特殊的讀頭,機械地檢測卡片上的孔,並設定大型提花機上的綜線來匹配卡片上的圖案,提升或落下線,使經線位於緯線的前面或後面,從而自動化了布料中的圖案。
霍勒瑞斯的發明是對這一概念的電氣化,這樣當卡片穿過讀取器時,當孔透過兩個觸點之間並充當絕緣體或允許接觸時,就會啟用不同的電氣觸點,從而啟用電路。
下一種輔助儲存型別是磁帶。這通常用於儲存批處理資料和程式,以便可以多次執行它們。這種儲存型別的一個必要條件是能夠在磁帶的開頭附近快速確定要走多遠才能找到特定的程式。為了做到這一點,磁帶作業系統會在磁帶上寫入一組特殊的記錄,稱為目錄,並在磁帶上寫入計時標記以對其進行格式化,以便能夠找到磁帶的正確部分。
這兩種形式之間的一種中間形式是紙帶,它被特別用於電傳打字機。本質上,可以建立長的紙帶,使用與霍勒瑞斯卡片上打孔相似的打孔。
磁帶上的一個有趣的變體是所謂的鼓或圓柱體儲存器,它使用多個讀寫頭在本質上是一個磁鼓上儲存資料。
更有趣的是硬碟,其中磁性介質的磁碟堆疊在一起形成簇,每個簇在磁碟的頂部和底部都有一個讀頭。隨著這些磁碟越來越小,單個磁碟中可以儲存的儲存量越來越大,直到今天,單個 3.5 英寸格式裝置中可以儲存數百吉位元組。
在軟盤中也可以找到類似的儲存能力,其中一層略厚的磁性材料被用作臨時儲存,以及在計算機之間移動資料。雖然 3.5 英寸軟盤幾乎已經過時,但至今仍在某些計算機上提供。早期版本為 8 英寸和 5 1/4 英寸軟盤。8 英寸軟盤的儲存密度較低,5 1/4 英寸軟盤的儲存密度有所提高,但 3.5 英寸軟盤的儲存密度最大約為 1.4 兆位元組。軟盤價格便宜,可以丟棄。
光碟的想法是,透過雷射束之類的光學裝置寫入和讀取的資料,如果雷射束的頻率足夠高,其波長可以聚焦在比磁性磁碟上的最小磁疇更小的區域,則可以儲存在更小的區域中。
12 英寸雷射唱片的發明是為了讓人們能夠像購買唱片一樣購買電影。然而,這項技術的時機不對,因為人們正從唱片中轉移到其他儲存介質。由於行業在 VHS 錄影帶的分配上實現了標準化,雷射唱片的創造者最終得到了一種新奇的產品。
索尼作為雷射唱片的開發者之一,決定製作一種更小的雷射唱片格式,稱為“光碟”,因為它採用 5 1/4 英寸的格式。他們的想法是將這種光碟推廣為音樂發行的一種媒介。
然後,利用批次生產帶來的成本節約,他們建立了一種名為 CD-ROM 的計算機儲存裝置,用於應用程式的分發。計算機版本儲存 625 兆位元組的資料,並且生產成本越來越低,以至於現在可燒錄版本的空白盤價格不到一美元一張。
透過降低 CD 燒錄機的生產成本,從而降低在 CD 上儲存各種格式資料的成本,CD 製造商創造了一個用於計算機備份儲存和程式分發的市場。
一種不同的磁碟格式被設計為具有更好的儲存特性,使其可以用於儲存電影。這種名為 DVD 的光碟可以在單條軌道上儲存 4.7 吉位元組的資料,並且提供雙軌道配置,如果對第二條軌道進行程式設計,光碟可以儲存 7 吉位元組的資料。
就像以前一樣,DVD 製造商設計了一種計算機儲存裝置,並利用電影發行格式的批次生產帶來的成本節約來降低裝置價格,使其成為將 DVD-RAM 光碟作為計算機標準配置的經濟選擇。
坦率地說,對於作業系統來說,儲存技術的實現方式並不重要,除了實現裝置控制機制的驅動程式之外。從作業系統的角度來看,有趣的是它如何使用儲存。
使用非易失性儲存器的原因之一是它不會改變。無論惡意軟體駭客嘗試做什麼,通常非易失性儲存器都不會受到影響。駭客必須實際更換晶片才能影響計算機的執行。當然,與 ROM 相比,這種保證對於快閃記憶體來說並不那麼有效,但光碟等非易失性輔助儲存器使得在不擔心病毒破壞的情況下儲存程式成為可能。
事實上,在 Windows 98 時代,從大多數病毒中恢復,無論它們有多麼致命,都和從光碟重新載入所有軟體一樣容易。當然,您會丟失任何未備份的資料,但這就是備份存在的意義。
另一方面,易失性儲存器價格便宜,而且越來越便宜。每一代主機板都可以比上一代在動態 RAM 中儲存更多資料。當然,如果電源中斷,您會丟失這些記憶體,但有了大型硬碟,程式和資料通常可以透過很少的努力恢復。
因此,原始儲存很容易。但是,除了儲存資料的程式之外,以可使用的方式檢索資料可能很麻煩。這就是建立一種稱為資料庫的特殊資料儲存和檢索引擎的原因。其想法是程式可以以比通常的儲存功能允許的更多方式儲存和檢索資料。資料庫已經存在足夠長的時間,以至於程式現在開始呼叫它們進行儲存,或者在程式中使用自己的專有資料庫來加快儲存訪問速度。
問題是,資料庫系統依賴於人員以某種形式向它們提供資料,或者依賴於程式向它們提供預先格式化的記錄。沒有資料庫設計經驗的人員不願意嘗試理解它們,因為他們可以在效率較低的儲存機制中儲存記憶體並以這種方式使用它。一個很好的例子是 Microsoft Office 資料庫引擎 Access。人們總是試圖在 Excel 電子表格中儲存資料庫,而不是使用 Access。
現代儲存裝置的一個問題是,它們很少被設定為最佳的歸檔或備份操作。當您完成某些資料但不想丟棄它們時會發生什麼?它們是否以允許您在一年或兩年甚至十年後檢索的方式儲存?
當能夠恢復舊檔案很重要時,您需要一種特殊的儲存能力,一種相對便宜的儲存能力,並且可以自動或至少定期用於建立資料的映像,以便以後可以檢索它們。
這就是歸檔和備份工具的作用。將大量資料儲存在壓縮格式中,以降低儲存成本,但保留多年未使用的完整資料,以便以後即使遇到電源中斷、惡意軟體攻擊、系統升級或其他導致記憶體軌跡失真的更改也能恢復。
在這種情況下,實現這種資料永續性保證的一種方法是在您的作業系統中實現透明永續性。透明永續性不會強制操作員經常寫入磁碟來儲存資料,而是像文字處理器在工作正在進行中並且發生電源中斷時儲存大部分工作那樣。類似的過程可能例如在維基百科上儲存本文,而無需作者告訴維基百科儲存它。最近,作業系統一直在推出帶有日誌儲存功能的作業系統,其中對檔案的更新會暫時儲存到日誌中,以便即使在電源中斷時也能恢復。這意味著,即使最新的更改可能尚未記錄,大部分工作都儲存在日誌中,並且可以在重新啟動程式時作為一部分恢復。
在 Linux 中,作業系統的儲存日誌化意味著掛載自上次超級塊更新以來已發生更改的卷不需要長時間的恢復過程,因為更改會輸入日誌並可以相當快地更新。由於操作員沒有明確告訴計算機儲存資料,透明永續性被視為隱式記憶體的早期模型。
如果透明持久化被視為一種隱式記憶的形式,那麼被稱為工作區的概念就不足為奇了。工作區是一個常用的術語,指的是用作工作記憶的黑板系統,它可能代表一種中間短期記憶,可以被多個程式同時使用。
道格拉斯·霍夫斯泰德設計了一個名為 Copycat 的程式,它展示瞭如何使用一個簡單的聯想記憶(稱為滑網)來定位資訊,在不同資訊片段之間建立關係,從而找到資訊中的歸納模式。當然,他的工作是為了找到簡單文字字串的等效字謎,但後來斯坦·弗蘭克林展示瞭如何擴充套件這樣一個程式,使其成為一個名為 IDA 的認知架構的一部分。它依靠工作區來實現聯想記憶。
可以透過以下方式將該想法與透明持久化結合起來:首先將要持久化的內容放入工作區,然後讓滑網為其構建聯想模式,最後進行永久儲存。這樣,原始資料加上關聯內容就會同時儲存在持久化記憶體中。
- ↑ 36bit.org
- ↑ Barry B. Brey The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro processor, Pentium II, Pentium III, and Pentium 4: Architecture Programming and Interfacing, 第 6 版,Pearson Education Ltd.(2003) ISBN 0-13-060714-2 第 310 頁