缺頁中斷

什麼是缺頁中斷:算法

       在計算機系統中,爲了提升主存利用率,每每把輔助存儲器(如磁盤)做爲主存儲器的擴充,使多道運行的做業的所有邏輯地址空間總和能夠超出主存的絕對地址空間。用這種辦法擴充的主存儲器稱爲虛擬存儲器。數組

       模擬分頁式存儲管理中硬件的地址轉換和產生缺頁中斷。分頁式虛擬存儲系統是把做業信息的副本存放在磁盤上,看成業
被選中時,可把做業的開始幾頁先裝入主存且啓動執行。爲此,在爲做業創建頁表時,應說明哪些頁已在主存,哪些頁還沒有裝入主存。       操作系統

       做業執行時,指令中的邏輯地址指出了參加運算的操做存放的頁號和單元號,硬件的地址轉換機構按頁號查頁表,若該頁對應標誌爲「1」,則表示該頁已在主存,這時根據關係式「絕對地址=塊號×塊長+單元號」計算出欲訪問的主存單元地址。若是塊長爲2 的冪次,則可把塊號做爲高地址部分,把單元號做爲低地址部分,二者拼接而成絕對地址。若訪問的頁對應標誌爲「0」,則表示該頁不在主存,這時硬件發「缺頁中斷」信號,有操做系統按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存後再從新執行這條指令。設計一個「地址轉換」程序來模擬硬件的地址轉換工做。當訪問的頁在主存時,則造成絕對地址,但不去模擬指令的執行,而用輸出轉換後的地址來代替一條指令的執行。當訪問的頁不在主存時,則輸出「* 該頁頁號」,表示產生了一次缺頁中斷。
       進程線性地址空間裏的頁面沒必要常駐內存,在執行一條指令時,若是發現他要訪問的頁沒有在內存中(存在位爲0),那麼中止該指令的執行,併產生一個頁不存在異常,對應的故障處理程序可經過從外存加載加載該頁到內存的方法來排除故障,以後,原先引發的異常的指令就能夠繼續執行,而再也不產生異常。設計

頁面調度算法:進程

       頁式虛擬存儲器實現的一個難點是設計頁面調度(置換)算法,即將新頁面調入內存時,若是內存中全部的物理頁都已經分配出去,就要按某種策略來廢棄某個頁面,將其所佔據的物理頁釋放出來,好的算法,讓缺頁率下降。常見的有先進先出調度算法(FIFO),最近最少調度算法,最近最不經常使用調度算法。內存

缺頁中斷的計算:效率

         程序編制的方法不一樣,對缺頁中斷的次數有很大影響。硬件

例如:有一個程序要將128×128的數組置初值「0」。現假定分給這個程序的主存塊數只有一塊,頁面的尺寸爲每頁128個字,數組中的元素每一行存放在一頁中,開始時第一頁在主存。若程序以下編制:分頁

    Var A: array[1..128] of array [1..128] of integer;            程序

                for j := 1 to 128

                    do for i := 1 to128

                         do A[i][j]:=0

則每執行一次A[i][j] :=0就要產生一次缺頁中斷,因而總共要產生(128×128-1)次缺頁中斷。

若是從新編制這個程序以下:

    Var A: array[1..128] of array[1..128] of integer;

                    for i := 1 to128

                            do for j := 1 to128

                                do A[i][j] := 0

那麼總共只產生(128-1)次缺頁中斷。

顯然,虛擬存儲器的效率與程序的局部化程度密切相關。程序的局部化有兩種:時間局部化和空間局部化。

相關文章
相關標籤/搜索