2016-11-18 84 views
0

將視覺和物理內存分成頁面。要檢查頁面是否有效,頁表項中有一個有效位。但是在一個頁面中,MMU如何知道地址是否有效?例如,屬於堆的一部分的頁面。並非該頁面的所有地址都是有效的,那麼MMU如何檢查addr以查看它是否有效?如何知道地址是否在頁面內有效

回答

0

頁面是MMU存儲有關信息的最小內存單位;這基本上是'頁面'的定義。因此,頁面內的所有地址都是同等有效的。如果頁面的一部分是你不打算訪問的東西(可能不在任何分配的對象之外),那不是MMU可以檢測到的東西。

0

邏輯內存分爲PAGES。物理內存分爲PAGE FRAMES。頁表:

  1. 識別哪些邏輯頁是進程的地址空間
  2. 在虛擬存儲器的情況下爲頁面
  3. 的映射以從物理頁的保護(或沒有映射的一部分的是被分頁出去)。

內存訪問的有效性取決於訪問類型,當前處理器模式和頁表狀態。

在邏輯上,當存儲器訪問發生的處理器:

  1. 符的地址轉換成邏輯頁和偏移到邏輯頁面(即取決於頁面大小)。
  2. 查找邏輯頁面的頁表條目。有可能沒有頁表項存在。在線性頁面表中,表格的大小可能受到限制。在多級頁面表中,頁面可能沒有嵌套表格。如果有相應的條目=>訪問衝突。

  3. 檢查頁表項是否指示有效頁面。這通常用一個有效的位來完成,但還有其他的方法。如果頁面無效=>訪問衝突。

  4. 檢查在當前處理器模式下頁面是否允許訪問類型(讀/寫/執行)。如果不是=>訪問衝突

  5. 檢查邏輯頁面是否映射到物理頁面框架(這通常是作爲步驟#3的一部分完成的)。如果不是=>頁面錯誤

「堆」只是內存。一個進程可以同時有多個堆。堆管理器將頁面映射到邏輯地址空間,然後管理這些頁面。堆甚至不需要駐留在連續的內存中。

儘管高級內存圖通常顯示「一堆」,但這些都是粗略的簡化。

相關問題