天天看點

ARM:MPU & MMU & SMMU

1、MPU (Memory Protection Unit);

2、MMU(Memory Management Unit)。

MMU是比MPU提供了功能更強大的記憶體保護機制,MPU隻提供了記憶體區域保護,而MMU是在此基礎上提供了虛拟位址映射技術,而且在操作上,MMU要比MPU負責。

3、SMMU本質上就是一個MMU裝置,它的記憶體轉換邏輯與CPU的MMU采用相同的邏輯,都允許将實體上非連續的頁虛拟為連續的記憶體頁。SMMU和IOMMU可以交替使用。

----------------------------------------------------------------------------------------------------------------------------------------------

MPU 

保護域(ProtectionRegions)

ARM處理器中的MPU使用“域(regions)”來對記憶體單元進行管理。域是與存儲空間相關聯的屬性,處理器核将這些資料儲存在協處理器CP15的一些寄存器中。

  • 通常域的個數為8個,編号為從0~7。
  • 域的大小和起始位址儲存在CP15的寄存器c6中。大小可以是4KB~4GB的任何2的乘幂。
  • 域的起始位址必須是其大小的倍數。比如,一個定義為4KB的域其起始位址可以是0x12345000,而一個大小定義為8KB的域起始位址隻能是0x2000的倍數。
  • 另外,作業系統可以為這些域配置設定更多的屬性:通路權限、cache和寫緩存。存儲器基于當時的處理器模式(管理模式或使用者模式)可以設定這些區域的通路權限為讀/寫、隻讀和不可通路。

        當處理器通路主存的一個域時,MPU比較該域的通路權限屬性和當時的處理器模式。如果請求符合域的通路标準,則MPU允許核心讀/寫主存;如果存儲器請求不符号域的通路标準,将産生一個異常信号。 

        異常信号被送到處理器核。處理器核執行一個異常向量,然後跳轉到異常處理程式,異常處理程式判斷異常類型為預取指或資料中止,然後根據異常類型,跳轉到相應的服務例程。

對于ARM處理器,存儲空間的某一部分可以被配置設定給一個以上的區域。也就是說域可以重疊。在重疊的域内,可以設定域的優先級。在配置設定通路權限時重疊域比非重疊域有更大的靈活性。

記憶體通路順序

當ARM處理器産生一個記憶體通路信号時,記憶體保護機關MPU将負責檢查要通路的位址是否在被定義的域中。

  1. 如果位址不在任何域中,存儲器産生異常。如果核心預取指令則MPU産生預取中止異常;如果是存儲器資料請求,則産生資料中止異常。
  2. 如果位址在多個域内,由MPU判斷域的有效級來決定存儲區域的通路屬性。通路屬性可以在CP15的寄存器中設定,可設定的位為C(Cache)、B(Buffer)、AP(AccessPermission)。這些屬性的具體定義為:

      C和B可以控制Cache和寫緩存屬性的Cache政策。例如,可以設定一個域使用回寫(write-back)政策通路存儲器,而另一個域則以無Cache和無寫緩存方式通路;

      AP(accesspermission)決定域是否可以被通路。如果在目前處理器模式下,該域不能被通路,MPU将産生一個存儲器通路異常。

使能MPU

    通過對協處理器CP15的寄存器c1中的bit[0]置1,可以使能存儲器保護單元MPU。在系統上電時,預設狀态是該位清零,所有保護域無效。

在使能MPU之前,至少一個域要被設定,而且該域的屬性和通路權限要預先設定好。

重疊域

域的定義在MPU的作用下可以重疊。當重疊的域被通路時,MPU會判斷域的優先權,決定使用那個域的屬性來操作重疊域。

域屬性優先級的排列順序為:域7的有效級最高,其次為域6,域0的優先級最低。

舉個栗子:

        假設将一個從0x3000起始的4KB位址空間定義為域2,其通路屬性AP定義為0b10(AP=0b10,特權模式讀/寫通路,使用者模式隻讀)。

        将起始位址為0x0的16KB位址空間定義為域1,其通路屬性AP定義為0b01(AP=0b01,特權模式隻讀)。

     這樣,當處理器在使用者模式下執行Load指令,從0x3010位址取資料時,0x3010位址既在域1中也在域2中,因為域2的屬性優先級高于域1,所有MPU執行域2的通路屬性從0x3010位址取資料。域2是使用者模式可讀,是以不會發生資料異常。

在配置設定通路權限時重疊區域比非重疊區域有更大的靈活性,它可以使記憶體的某個特定聯系記憶體機關在程式中擔任背景的作用,用來給一塊大存儲空間配置設定相同的屬性的低優先級域。其他具有較高優先級域的區域與該背景域某些部分重疊,用來改變已定義的背景域的較小子集的屬性。這樣,具有較高優先級的域可以改變背景域屬性的子集。背景域可以用來保護一些睡眠狀态的存儲空間,使其不受非法通路,而此時由另一個不同域控制下的背景域的其他部分可以處于活躍狀态。

----------------------------------------------------------------------------------------------------------------------------------------------

MMU(Memory Management Unit)主要用來管理虛拟存儲器、實體存儲器的控制線路,同時也負責 虛拟位址映射為實體位址 ,以及提供硬體機制的記憶體通路授權、多任務多程序作業系統。 MMU 進行虛拟位址轉換成為實體位址的過程是 MMU 工作的核心。   位址範圍:  指處理器能夠産生的位址集合,如一個32bit的處理器ARM9,其能産生的位址集合是0x0000 0000 ~ 0xffff ffff(4G),這個位址範圍也稱為虛拟位址空間,其中對應的位址為虛拟位址。 虛拟位址與實體位址:  與虛拟位址空間和虛拟位址相對應的是實體位址空間和實體位址;實體位址空間隻是虛拟位址空間的一個子集。如一台記憶體為256MB的32bit X86主機,其虛拟位址空間是0 ~ 0xffffffff(4GB),實體位址空間範圍是0 ~ 0x0fff ffff(256M)。 分頁機制: 如果處理器沒有MMU,或者有MMU但沒有啟用,CPU執行單元發出的記憶體位址将直接傳到晶片引腳上,被記憶體晶片(以下稱為實體記憶體,以便與虛拟記憶體區分)接收,這稱為實體位址(Physical Address)。       大多數使用虛拟存儲器的系統都使用分頁機制(paging)。虛拟位址空間劃分成稱為頁(page)的機關,而相應的實體位址空間也被進行劃分,機關是頁框(frame).頁和頁框的大小必須相同。接下來配合圖檔我以一個例子說明頁與頁框之間在MMU的排程下是如何進行映射的:

ARM:MPU & MMU & SMMU

記憶體管理的目的是為了更好的使用記憶體。 記憶體是現代作業系統運作的中心。作業系統中任何一個程序的運作都需要記憶體,但是,作業系統中的記憶體是有限的;另一方面,從安全的角度出發,程序都需要有自 己的記憶體空間,其他的程序都不能通路這個私有的空間;同時,記憶體的配置設定會導緻記憶體碎片問題,嚴重影響計算機的性能。以上這三個問題就是一般記憶體管理算法所 需要處理的目标: 交換、記憶體保護、 碎片問題。