天天看點

從硬體出發,淺談作業系統的段機制與頁機制【轉】

閱讀目錄
  • 讓我們從硬體的發展史的角度來看段機制。
  • 我們還需要解決小記憶體運作大作業的問題——頁機制的引入
  • 最後

轉自:https://www.jianshu.com/p/f4a909f3fd2e

我們寫一個程式,經過編譯之後會變成一堆的指令。作業系統在執行這個程式的時候,也正是執行這堆指令。

指令可以是 取資料的指令 或 取下一條被執行指令 的指令。但無論是什麼指令,都會進行記憶體的通路和尋址。就像是我們必須找到東西放在哪裡,我們才能去使用它。

那作業系統怎樣幫我們去尋址呢?答案是 記憶體尋址涉及到記憶體的 段機制 和 頁機制。

回到頂部

讓我們從硬體的發展史的角度來看段機制。

1971年,Intel 釋出了第一款的微處理器4004。它是一個4位的微處理器。

1972年,Intel 釋出了第一款八位處理器8008。它是一個8位的微處理器,位址總線(address bus)是14位的,就是說可以通路到16K的記憶體空間。

1974年4月,Intel 釋出了第二款八位處理器8080。它是8008是增強版,增加了幾個累加器,使它可以通路16位(8+8)的記憶體位址,即64K 範圍内的位址空間。而且它也是公認的“第一款真正可用的微處理器”。8080的架構對8086産生了很大的影響,并且為 x86系列奠定了基礎。

至此,記憶體尋址通路仍是絕對位址。就是指令的位址即實體位址,中間沒有任何的轉換。

1976年開始設計,1978年中旬Intel 釋出了8086。标志了x86王朝的開始。它是一款16位的微處理器,卻被設計成可以通路1MB 的記憶體(即20位的位址空間)。問題就産生了,16位的 ALU怎麼去取20位的位址呢?是以,段的概念 在8086身上被引入了。

段的引入是解決“ 位址總線的寬度一般要大于寄存器的寬度 ”這個問題。

8086的分段尋址,是指一個實體位址由段位址(segment selector)與偏移量(offset)兩部分組成,長度各是16比特。其中段位址左移4位(即乘以16)與偏移量相加即為實體位址。例如,06EFh:1234h,表示段位址為06EFh,偏移量為1234h,實體位址為06EF0h + 1234h = 08124h。在計算實體位址時如果發生上溢出,8086處理器舍棄進位。例如,FFFFh:0010h所對應的實體位址為00000h.

這種分段尋址,即 段位址+偏移量 的做法,在以80286開始之後會被稱為 實模式。

1982年,Intel 的80286面世了。它是第一款采用 保護模式 的 x86微處理器。位址總線增加到24位使它可以通路到16M 的記憶體空間。即使是可訪的記憶體空間增加了,但它的分段大小依然是64K,程式的規模受限,注定286受不到更多的喜愛。

是以,286很快就被80386所替代了。

1985年,Intel 釋出了80386。一個擁有32位的微處理器。并且位址總數(address bus)也是32位的,尋址能力大幅提高到4G。同時,為了向前相容8086,386中既有保護模式,又有實模式。并且在保護模式下,分段的大小可以到達4G(2**32)。

現在有必要簡單交代一下,實模式 與 保護模式 分别是什麼了。

實模式: 是 段位址+偏移量 的方式,得到實體位址,進而尋址。

保護模式: 不允許通過段寄存器取值得到段的起始位址,而是把虛拟位址轉進一個 MMU 的硬體,經過額外的轉換和檢查,進而得到一個實體位址。(如下圖)。其中的額外檢查就可以起到例如保護某段資料的作用。

從硬體出發,淺談作業系統的段機制與頁機制【轉】

圖1:MMU 轉換虛拟位址為實體位址

是時候來一個簡單的總結了。

從4004到386,先是直接實體位址尋址,然後是 實模式 形式的尋址,最後變為 保護模式 形式尋址。

最重要的變化是從“實模式”向“保護模式”的轉變。這背後實際也是處理器的系統體系結構的變化。雖然386往後的CPU在各方面都有改進,但由于在本質上的結構沒有大變化,是以386往後的處理器都統稱80x86。

回到頂部

我們還需要解決小記憶體運作大作業的問題——頁機制的引入

段機制抛開了實際實體記憶體的大小,從抽象層面提供給開發人員更大的線性空間進行程式開發。但實體記憶體如果不足時的情況仍需解決。

分頁,這時就被提出了。分頁很好地解決了小記憶體的問題。

它通過将 實體記憶體空間 和 線性位址空間 分成若幹相等的頁。(一般都為4KB)。這樣整個程式就不需要連續存放在實體記憶體中,更可以按需把頁面調進記憶體,而不需要把整個線性位址空間加載到記憶體中。正如你将會看到的,這種機制十分巧妙又實用。

要實作分頁,需要讨論的問題比分段要多,這裡不過多累贅,有興趣可以移步到《作業系統學習筆記-儲存管理》這篇文章閱讀。

回到頂部

最後

本文隻是一種淺述,沒有對段機制和頁機制進行深入。隻是從曆史的角度出發,整理後扼要地介紹這兩個機制。

如果順着這個方向進一步找書和資料會發現 Intel 的設計是越來越細緻和周全的。而實際在各種不同處理器上開發作業系統又是有各種的考慮和取舍的。

例如 Linux,它就沒有用 Intel 的段機制,而是将其繞過。畢竟不是每個品牌的處理器都支援段的。

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/sky-heaven/p/8144550.html,如需轉載請自行聯系原作者

繼續閱讀