簡體   English   中英

需求分頁交換幀

[英]Demand Paging Swapping Frames

免責聲明:此問題與我的操作系統類有關。 但是,這不是針對任何特定的家庭作業問題。 我只是想了解。

到目前為止,我認為這是我對需求分頁的了解。 每個進程都有自己的分頁表。 該表包含邏輯地址的索引,其對應的物理地址以及有效/無效位,該位指示當前是否將頁面加載到主存儲器中。

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

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

如果沒有可用的幀,則系統必須換出當前使用的幀並將請求的數據放入該幀中。 系統使用諸如LRU,MRU等之類的算法來確定要換出的頁面。 系統換出舊頁面,裝入新頁面,然后將控制權返回給流程。

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

這是一個例子。 假設有兩個進程,每個進程都有大小為2的分頁表和大小為2的物理內存。讓進程的分頁表如下所示:

進程A虛擬內存:

Address  Contents
0        'A'
1        'B'

進程B虛擬內存:

Address  Contents
0        'C'
1        'D'

進程分頁表:

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'。 系統如何知道將Process B頁表中邏輯地址0的有效/無效位設置為無效?

頁表本身或OS內核其他地方都有更多控制字段,以區分根本沒有映射(從未分配/映射或從未釋放/未映射)的內存范圍和指向的內存范圍換出的內存位置。 在這兩種情況下,都無法訪問范圍,並且訪問會導致頁面錯誤,但是在這種情況下,操作系統會以不同的方式處理此頁面錯誤。 在前者中,它終止該過程。 在后者中,它嘗試將數據帶回到內存中,並將映射恢復到可以訪問數據的狀態。

操作系統知道使用物理內存的頁面。 它要么掃描頁表以找出該表,要么查詢它自己維護的數據結構。 如果操作系統需要從進程中竊取頁面,則將其保存(如果已被修改),它將更改映射,以使進程無需操作系統干預即可不再直接訪問此頁面,然后在其他地方重用此頁面,例如通過向其填充正確的數據並對其進行適當的映射,使不同的過程可以訪問數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM