簡單地說可訪問記憶體總數是由cpu/[北橋/記憶體控制器]/主機板佈線(如果js偷工減料的話)的位址匯流排寬度和作業系統來決定的。奔騰以後的cpu至少有36條位址匯流排,所以奔騰以上的32位cpu至少在64g是沒問題的(但由於暫存器是32位的,所以可線性訪問的只有4g,其他的需要通過頁面切換(pae)才能完成)。
pc機記憶體空間640k~1m(000a0000~000fffff)是bios,1g高階是acpi/pcicfg等的保留空間(3fe8ac00~3fffffff),對於連線到pci裝置:
i/o空間被對映到很大的實體地址區間。這種裝置的處理比較簡單。
在接近4g高階( e8000000~efffffff)是視訊記憶體頁面的對映(類似於dos的a0000~bffff)(其大小由bios setup裡面的agp size決定),很顯然這部分空間已經被用,所以即使有4g記憶體這部分記憶體空間也是無法被直接使用的(這和dos只有640k常規記憶體而不是1m是乙個道理)。
現代作業系統:
高階與低端記憶體
核心(在x86架構中)將4gb的虛擬位址空間分割為使用者空間和核心空間。
乙個典型的分割是將3gb分配給使用者空間,1gb分配給核心空間。
占用核心位址空間最大的部分是物理記憶體的虛擬對映,
核心無法直接操作沒有對映到核心位址空間的記憶體。
低端記憶體:
只有記憶體的低端部分擁有邏輯位址。核心的資料結構必須放置在低端記憶體中。
高階記憶體:
除去低端記憶體的剩餘部分沒有邏輯位址。它們處於核心虛擬位址之上。
低端記憶體(1gb的核心空間):
zone_dma 包括低於16m的空間(對映到高階記憶體第四個gb) ,dma使用isa或者pci系統匯流排傳輸資料(isa只能訪問低段有限記憶體,無法訪問高階記憶體,但是屬於淘汰產品,只是部分主機板還有介面)
解釋: 在實際操作中,一些裝置和一些系統中的高階記憶體不能用於dma,
這是因為外圍裝置不能使用高階記憶體的位址。
對於有限制的裝置,應使用gfp_dma標誌呼叫kmalloc或者get_free_pages從
dma區間分配記憶體。另外,還可以通過使用通用dma層來分配緩衝區。 (具體的檢視另一篇)
zone_normal 包括高於16m且低於896m的空間 (對映到高階記憶體第四個gb)
由zone_dma 和zone_normal構成核心執行的空間,裡面的具體分布,不同的系統不一樣。 使用者程序需要訪問系統空間的話,呼叫系統函式,取得核心位址空間。
zone_highmem 高於896m的空間且低於1gb的空間裡面,也就是最後的128m中一部分對映高階記憶體(他們通過三種方式:永久對映、臨時對映、非連續對映等,可以實現同時對高階記憶體的訪問),一部分對映i/o口、pci等其他裝置。
896這個數字來自與經驗,mips的就是512,根據實際改
作業系統之記憶體對映
記憶體管理的發展歷程 dos時代 同一時間只能有乙個程序在執行 也有一些特殊演算法可以支援多程序 windows9x 多個程序裝入記憶體,會產生兩個問題1 記憶體不夠用2 相互打擾 如下圖所示 1.分頁 記憶體不夠用 記憶體中分成固定大小的頁框 4k 把程式 硬碟上 分成4k大小的塊,用到哪一塊,載...
作業系統記憶體對映(隨筆錄)
作業系統 作業系統 operating system,簡稱os 是管理計算機 硬體與軟體資源的電腦程式。作業系統需要處理如管理與配置記憶體 決定系統資源供需的優先次序 控制輸入裝置與輸出裝置 操作網路與管理檔案系統等基本事務。作業系統也提供乙個讓使用者與系統互動的操作介面。歷史 原始系統我們直接操作...
作業系統記憶體管理
作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...