零:32位作業系統只有4g的虛擬位址空間,linux將最上的1g用於核心虛擬位址。
一:linux將物理記憶體完全一一對映到核心空間,這樣很方便管理記憶體,任何頁面的虛擬位址減去乙個0xc0000000的偏移就可以得到實體地址。
二:核心還需要動態管理一些記憶體用於vmalloc或者裝置臨時對映等,因此不能將1g的虛擬空間完全一一對映物理記憶體,因此權衡了乙個896m的大小,0xc0000000到0xc0000000+896m的虛擬位址空間一一對映物理記憶體,從0xc0000000+896m到0xffffffff的位址空間作為動態對映的需要。
三:因此早期的linux核心為了簡單起見認為只有一種方式管理物理記憶體,那就是一一對映,因此大於896m的物理記憶體將不可用。然而...
四:雖然核心無法直接一一對映896m以上的物理記憶體,然而核心可以動態對映它們到vmalloc空間,另外也可以將這些大於896m的記憶體頁面分配給使用者態,然後將之對映到使用者程序位址空間的0xc0000000以下。
五:增加了high-memory的概念,使得linux可以使用896之上的物理記憶體。所有大於896m的物理記憶體成為高階記憶體。
六:增加了high-memory支援的核心可以使用4g的物理記憶體
七:大於4g的物理記憶體還是無法使用,因為cpu的位址匯流排只有32位,位址匯流排直接作用於物理記憶體。
八:intel的機器增加了pae,位址匯流排可以增加到36位,可以定址64g。
九:然而必須編譯帶有highmem64g的核心。
十:直接換64位機器和作業系統吧。
Linux記憶體對映
使用記憶體對映處理大檔案很方便,在windows系統中,實現了這樣的藉口。在linux中我們也可以通過mmap函式來實現。以下內容完全參考自 如有冒犯,請諒解 mmap函式實現把乙個檔案對映到乙個記憶體區域,從而我們可以像讀寫記憶體一樣讀寫檔案,他比單純呼叫read write也要快上許多。在某些時...
Linux記憶體對映
本文討論的linux版本是linux 2.6.26.5,體系結構是smdk2410,採用arm s3c2410。在該版本中虛擬位址是32位位址,採用四級頁表結構,依次是 pgd pud pmd pte offset page shift pmd shift pud shift pgdir shift...
linux記憶體對映
記憶體管理分為對連續物理記憶體區管理和非連續記憶體區管理,本文主要講解連續的物理記憶體區管理的技術中所涉及到的核心線性位址空間對映的相關知識。涉及到的東西有 頁框,管理區 高階記憶體,低端記憶體 高階記憶體對映等,這些知識是掌握夥伴系統演算法和slab分配器的基礎。一 頁框 頁框為物理記憶體分配的基...