關於內存管理(虛擬內存的分段與分頁實現),Intel Pentium完成哪些功能,Windows/Unix OS完成哪些功能?


考慮兩個程序,甲裡面有這個:

mov [1234h], eax

乙裡面有這個:

mov ecx, [1234h]

兩個程序同時運行的時候,如果內存地址不用分頁來轉換,那麼兩個程序就會寫入同一片物理內存,造成錯誤。然而,如果我們能讓 cpu 不直接讀寫物理內存,而是經過一次翻譯,能在甲程序運行時,把邏輯地址(x86 上為線性地址)1234h 翻譯到物理地址 11234h,乙程序運行的時候則翻譯成其他的,比如 21234h,這樣兩者就能夠互不干擾了。

現代 CPU 里實現它的方式就是內存分頁。具體的做法是在內存中開闢一小部分存儲頁表,cpu 遇到內存讀寫的操作時根據頁表翻譯到物理地址。而頁表怎麼寫、進程切換的時候怎樣維持頁表就是操作系統的工作了。


os在物理內存中隨便找個地方按照cpu指定的規則填寫頁表頁目錄,然後通過cr3告訴cpu這個位置在哪裡,cpu讀取內容,分頁機制開始運轉。分段機制的工作原理差不多,os在物理內存中找個地方填寫全局描述浮表gdt,然後lgdt告訴cpu這個位置,cpu讀取信息,分段機制開始工作。不過現代os基本都是使用平坦定址方式,分段機制除了管理特權級,沒啥用可以忽略。


頁表機制是Intel的CPU實現的,如何填充頁表是Windows實現的,分界線就在這裡。


實際應該這樣來看,其中CPU做的事情之前都是操作系統做的,CPU的做的事情是通過硬體保存一部分信息加快(比如通過一個特殊的Cache,TLB)之前操作系統做的工作。當然,這樣做的前提是大家都商量好比如我們要用頁式管理虛擬內存。

如果CPU內部的儲存空間足夠(足以儲存完整分頁數據和相關的操作代碼)的話,CPU可以完全接管操作系統的內存管理部分;現在沒有這麼做的主要原因是CPU內部儲存還不足(或者說要做到完全接管的硬體代價太大)。同時,保持借口的簡潔,操作系統實現的部分也可以有很大的靈活性。


推薦閱讀:

如何看待微軟向沒有預約過的 Windows 7/8 用戶推送、後台自動安裝 Windows 10?
離線的Windows平台下,有什麼軟體可以集成「待辦」、「日程」以及「筆記」?
如何評價 2015 年 3 月 18 日 WinHEC 發布會的內容?
為什麼 Windows 沒有形成成熟的軟體包和升級體系?
Windows 有哪些 OS X 沒有的優點?

TAG:MicrosoftWindows | 操作系統 | 內存管理 | 處理器 | 虛擬內存 |