1. 程式人生 > >分頁記憶體和非分頁記憶體

分頁記憶體和非分頁記憶體

程序上下文,就是表示程序資訊的一系列東西,包括各種變數、暫存器以及程序的執行的環境。這樣,當程序被切換後,下次再切換回來繼續執行,能夠知道原來的狀態。
中斷上下文,就是中斷髮生時,原來的程序執行被打斷,那麼就要把原來的那些變數儲存下來,以便中斷完成後再恢復。

Windows NT和Windows 98都是執行在支援虛擬地址空間的計算機上,虛擬地址空間或者對映到一段真實的實體記憶體,或者對映到交換檔案中的頁幀。

每一個程序有4G的虛擬地址空間空間(因為一般機器是32位),這4G的空間被分為使用者模式地址空間以及使用者模式地址空間。無論何時我們需要訪問計算機記憶體,都要使用核心模式的虛擬地址。每一個使用者模式程序都有自己的地址上下文,記錄了

程序資訊的一系列東西。當Windows NT排程器把控制從一個程序的當前執行緒切換到另一個程序的某個執行緒時,與程序相對應的虛擬地址空間也被更換(執行到別的程序了,也就是跑到另外的一個4G的地址)。執行緒切換的一個步驟就是改變處理器當前使用的頁表,以便它能引用新執行緒的程序上下文。

虛擬記憶體系統的特徵就是能使軟體有一個比實體記憶體大得多的虛擬記憶體空間。為了做到這一點,記憶體管理器需要在實體記憶體和磁碟檔案間交換頁幀。但作業系統的某些部分是不能被分頁的,這些記憶體用來支援記憶體管理器本身。最明顯的例子就是,用於處理頁故障的程式碼和資料結構必須常駐記憶體。

Windows NT把核心模式地址空間分成分頁記憶體池和非分頁記憶體池。(使用者模式地址空間總是分頁的) 必須駐留的程式碼和資料放在非分頁池;不必常駐的程式碼和資料放在分頁池中。Windows NT為決定程式碼和資料是否需要駐留非分頁池提供了一個簡單規則

非分頁內容的空間是很小的,所以一般的東西都會放入分頁記憶體中。

執行在高於或等於DISPATCH_LEVEL級上的程式碼必須存在於非分頁記憶體中。