給定乙個線性位址,mmu 通過頁目錄表、頁表的轉換,找到對應的實體地址。在這個過程中,如果因某種原因導致無法訪問到最終的物理記憶體單元,cpu 會產生一次缺頁異常,從而進入缺頁異常處理程式
。總結一下,缺頁異常的原因有以下幾種:
1、導致缺頁異常的線性位址根本不在程序的「虛存區間」中,段錯誤。(棧擴充套件是一種例外情況)
2、位址在「虛存區間」中,但「虛存區間」的訪問許可權不夠;例如「區間」是唯讀的,而你想寫,段錯誤
3、許可權也夠了,但是對映關係沒建立;先建立對映關係再說
4、對映關係也建立了,但是頁面不在記憶體中。肯定是換出到交換分割槽中了,換進來再說
5、頁面也在記憶體中。但頁面的訪問許可權不夠。例如頁面是唯讀的,而你想寫。這通常就是
「寫時拷貝cow」
的情況。
6、缺頁異常發生在「核心動態對映空間」。這是由於程序進入核心後,訪問乙個通過 vmalloc() 獲得線性位址而引起的異常。對這種情況,需要將核心頁目錄表、頁表中對應的對映關係拷貝到程序的頁目錄表和頁表中。
本文**:
從第4條原因可以看出「虛擬記憶體」即:指計算機呈現出要比實際擁有的記憶體大得多的記憶體量。使得應用程式認為自己有足夠可用的連續記憶體空間,而實際上,它不僅通常被分割為多個物理記憶體碎片,而且還有部分存在於磁碟上,每次缺頁中斷時才調入記憶體。
linux缺頁異常處理 核心空間
缺頁異常被觸發通常有兩種情況 程式設計的不當導致訪問了非法的位址 訪問的位址是合法的,但是該位址還未分配物理頁框.下面解釋一下第二種情況,這是虛擬記憶體管理的乙個特性。儘管每個程序獨立擁有3gb的可訪問位址空間,但是這些資源都是核心開出的空頭支票,也就是說程序手握著和自己相關的乙個個虛擬記憶體區域 ...
linux的記憶體管理
linux的記憶體管理 linux的記憶體分為 物理記憶體和虛擬記憶體。物理記憶體就是系統硬體提供的記憶體大小,是真正的記憶體。虛擬記憶體 虛擬記憶體就是為了滿足物理記憶體的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯記憶體,用作虛擬記憶體的磁碟空間被稱為交換空間 swap space 使用場...
Linux記憶體 記憶體管理的實質
1.核心初始化 核心建立好核心頁目錄頁表資料庫,假設物理記憶體大小為len,則建立了 3g 3g len 0 len 這樣的虛位址vaddr和實體地址paddr的線性對應關係 核心建立乙個page陣列,page陣列和物理頁面系列完全是線性對應,page用來管理該物理頁面狀態,每個物理頁面的虛位址儲存...