2012-04-15 44 views
0

免責聲明:此問題與我的操作系統類有關。但是,這不是針對任何特定的作業問題。我只是想明白。需求分頁交換框架

以下是我所瞭解的有關按需分頁的內容。每個進程都有自己的分頁表。該表包含邏輯地址的索引,其對應的物理地址以及指示頁面當前是否加載到主存儲器中的有效/無效位。

訪問頁面時,如果有效/無效位設置爲有效,則通過表中的邏輯地址條目在主存儲器中訪問該頁面。如果頁面未包含在物理內存中,則會生成頁面錯誤。這會導致程序嘗試將頁面加載到內存中。

系統首先檢查請求的地址是否有效。如果不是,則該過程終止。如果地址有效,則系統檢查空閒幀。如果找到空閒幀,系統會從磁盤加載所請求的數據並將其放入空閒幀中。有效/無效位在分頁表中設置爲有效,邏輯地址設置爲先前的空閒幀,程序可以繼續執行。

如果不存在空閒幀,則系統必須換出當前使用的幀並將請求的數據放入幀中。系統使用諸如LRU,MRU等的算法來確定將哪個頁面交換出去。系統將舊頁面交換出來,加載到新頁面中,然後將控制權返回給進程。

這是我的問題:當全幀換出時,訪問此幀的分頁表的有效/無效位如何設置?也就是說,系統如何知道進程的分頁表訪問正在被交換的幀?

下面是一個例子。假設有兩個過程中,每個大小爲2和大小2的物理存儲器的分頁表讓被處理的分頁表如下:

方法A虛擬存儲器:

Address Contents 
0  'A' 
1  'B' 

方法B虛擬存儲器:

Address Contents 
0  'C' 
1  'D' 

方法A分頁表:

Logical Physical Valid/Invalid 
0  0   Valid 
1  0   Invalid 

種方法B分頁表:

Logical Physical Valid/Invalid 
0  1   Valid 
1  0   Invalid 

主存儲器:

Address Contents 
0  'A' 
1  'C' 

現在假定進程A試圖訪問B的其邏輯地址的系統,交換出的主存儲器地址1和互換的在內容'd'。在進程的B分頁表中,系統如何知道將有效/無效位設置爲無效,邏輯地址爲0?

回答

1

有多個控制字段或者在頁表本身或者在OS內核別處到具有完全沒有映射(從未被分配的/映射或已被釋放/未映射)的存儲器範圍和存儲器之間進行區分範圍指向已被換出的內存位置。在這兩種情況下,範圍不能被訪問,並在頁面錯誤的訪問結果,但操作系統在這些情況下,不同的方式處理該頁面錯誤。在前者中,它終止了這個過程。在後者中,它試圖將數據返回到內存並將映射恢復到可以訪問數據的狀態。

操作系統知道使用物理內存的頁面。它要麼掃描頁表來查找或查閱它自己維護的數據結構。如果操作系統需要從進程中竊取一個頁面,並保存該頁面(如果它已被修改),則它會改變映射,以便進程不能在沒有操作系統干預的情況下直接訪問該頁面,然後在其他地方重新使用該頁面。在不同的流程中填入正確的數據並進行適當的映射,以便流程可以訪問數據。

+0

太棒了。這就是我需要知道的。謝謝您的幫助。 – LandonSchropp 2012-04-22 20:39:50