資料介紹
15.4 存儲保護單元MPU
一些嵌入式系統使用多任務的操作和控制。這些系統必須提供一種機制來保證正在運行的任務不破壞其他任務的操作。即要防止系統資源和其他一些任務不受非法訪問。要達到這一目的通常有軟件保護和硬件保護兩種途徑。這里軟件保護是指僅靠軟件來保護系統資源。系統中無保護硬件或硬件沒啟動。在多任務的系統中,通常要運行操作系統來達到任務間同步與通信。所以,這種軟件的資源保護通常由操作系統來完成。但這種通過軟件來協調任務運行,保護系統資源的做法有時會出現一些不可避免的問題。如當對一個通信用串口寄存器進行操作時,如果一個任務正在使用串口,則它沒有辦法來防止其他任務使用同一個串口。因此,若要成功使用該串口,則必須通過一個訪問該串口的系統調用來協調。使用這些調用任務的非授權訪問,很容易破壞經過該串口的通信。因此資源的不合理使用也許是不可避免的。
相反,受保護系統有專門的硬件來檢測和限制系統資源的訪問。它能保證資源的所有權,任務需要遵守一組由操作環境定義的、由硬件維護的規則,在硬件級上授予監視和控制資源程序的特殊權限。受保護系統主動防止一個任務使用其他任務的資源。因此使用硬件主動監視系統比協調加強的軟件歷程,提供了更好的保護。
ARM中配備的有效保護系統資源的硬件,有兩種:
· MPU(Memory Protection Unit);
· MMU(Memory Management Unit)。
MMU是比MPU提供了功能更強大的內存保護機制,MPU只提供了內存區域保護,而MMU是在此基礎上提供了虛擬地址映射技術,而且在操作上,MMU要比MPU負責。本節主要討論帶MPU的處理器內核,MMU將在下一節詳細介紹。
15.4.1 保護域(Protection Regions)
ARM處理器中的MPU使用“域(regions)”來對內存單元進行管理。域是與存儲空間相關聯的屬性,處理器核將這些數據保存在協處理器CP15的一些寄存器中。通常域的個數為8個,編號為從0~7。
域的大小和起始地址保存在CP15的寄存器c6中。大小可以是4KB~4GB的任何2的乘冪。域的起始地址必須是其大小的倍數。比如,一個定義為4KB的域其起始地址可以是0x12345000,而一個大小定義為8KB的域起始地址只能是0x2000的倍數。
另外,操作系統可以為這些域分配更多的屬性:訪問權限、cache和寫緩存。存儲器基于當時的處理器模式(管理模式或用戶模式)可以設定這些區域的訪問權限為讀/寫、只讀和不可訪問。
當處理器訪問主存的一個域時,MPU比較該域的訪問權限屬性和當時的處理器模式。如果請求符合域的訪問標準,則MPU允許內核讀/寫主存;如果存儲器請求不符號域的訪問標準,將產生一個異常信號。
異常信號被送到處理器核。處理器核執行一個異常向量,然后跳轉到異常處理程序,異常處理程序判斷異常類型為預取指或數據中止,然后根據異常類型,跳轉到相應的服務例程。
對于ARM處理器,存儲空間的某一部分可以被分配給一個以上的區域。也就是說域可以重疊。在重疊的域內,可以設置域的優先級。在分配訪問權限時重疊域比非重疊域有更大的靈活性。后面一節將會詳細介紹域的重疊。
15.4.2 內存訪問順序
當ARM處理器產生一個內存訪問信號時,內存保護單位MPU將負責檢查要訪問的地址是否在被定義的域中。
① 如果地址不在任何域中,存儲器產生異常。如果內核預取指令則MPU產生預取中止異常;如果是存儲器數據請求,則產生數據中止異常。
② 如果地址在多個域內,由MPU判斷域的有效級來決定存儲區域的訪問屬性。訪問屬性可以在CP15的寄存器中設定,可設定的位為C(Cache)、B(Buffer)、AP(Access Permission)。這些屬性的具體定義為:
· C和B可以控制Cache和寫緩存屬性的Cache策略。例如,可以設置一個域使用回寫(write-back)策略訪問存儲器,而另一個域則以無Cache和無寫緩存方式訪問;
· AP(access permission)決定域是否可以被訪問。如果在當前處理器模式下,該域不能被訪問,MPU將產生一個存儲器訪問異常。
圖15.16顯示了一個存儲器訪問過程。
圖15.16 存儲器訪問過程
15.4.3 使能MPU
通過對協處理器CP15的寄存器c1中的bit[0]置1,可以使能存儲器保護單元MPU。在系統上電時,默認狀態是該位清零,所有保護域無效。
在使能MPU之前,至少一個域要被設定,而且該域的屬性和訪問權限要預先設定好。
注意在數據和指令域分離的系統中,如ARM940T,在指令和數據域中都要有一個有效域被預先設定好。
另外,使能MPU的指令要設在有效的域中。如果在使能MPU之前,域的屬性和訪問權限沒有設定,那么系統的運行結果將不可預知。
當MPU無效(將協處理器CP15寄存器r1的bit[0]置0)時,整個內存區域都被處理器視為無Cache、無寫緩存、無存儲保護狀態。
15.4.4 重疊域
域的定義在MPU的作用下可以重疊。當重疊的域被訪問時,MPU會判斷域的優先權,決定使用那個域的屬性來操作重疊域。
域屬性優先級的排列順序為:域7的有效級最高,其次為域6,域0的優先級最低。
【例15.3】
假設將一個從0x3000起始的4KB地址空間定義為域2,其訪問屬性AP定義為0b10(AP=0b10,特權模式讀/寫訪問,用戶模式只讀)。
將起始地址為0x0的16KB地址空間定義為域1,其訪問屬性AP定義為0b01(AP=0b01,特權模式只讀)。
系統域劃分如圖15.17所示。
圖15.17 重疊域的訪問
當處理器在用戶模式下執行Load指令,從0x3010地址取數據時,0x3010地址既在域1中也在域2中,因為域2的屬性優先級高于域1,所有MPU執行域2的訪問屬性從0x3010地址取數據。域2是用戶模式可讀,所以不會發生數據異常。
在分配訪問權限時重疊區域比非重疊區域有更大的靈活性,它可以使內存的某個特定聯系內存單位在程序中擔任背景的作用,用來給一塊大存儲空間分配相同的屬性的低優先級域。其他具有較高優先級域的區域與該背景域某些部分重疊,用來改變已定義的背景域的較小子集的屬性。這樣,具有較高優先級的域可以改變背景域屬性的子集。背景域可以用來保護一些睡眠狀態的存儲空間,使其不受非法訪問,而此時由另一個不同域控制下的背景域的其他部分可以處于活躍狀態。
一些嵌入式系統使用多任務的操作和控制。這些系統必須提供一種機制來保證正在運行的任務不破壞其他任務的操作。即要防止系統資源和其他一些任務不受非法訪問。要達到這一目的通常有軟件保護和硬件保護兩種途徑。這里軟件保護是指僅靠軟件來保護系統資源。系統中無保護硬件或硬件沒啟動。在多任務的系統中,通常要運行操作系統來達到任務間同步與通信。所以,這種軟件的資源保護通常由操作系統來完成。但這種通過軟件來協調任務運行,保護系統資源的做法有時會出現一些不可避免的問題。如當對一個通信用串口寄存器進行操作時,如果一個任務正在使用串口,則它沒有辦法來防止其他任務使用同一個串口。因此,若要成功使用該串口,則必須通過一個訪問該串口的系統調用來協調。使用這些調用任務的非授權訪問,很容易破壞經過該串口的通信。因此資源的不合理使用也許是不可避免的。
相反,受保護系統有專門的硬件來檢測和限制系統資源的訪問。它能保證資源的所有權,任務需要遵守一組由操作環境定義的、由硬件維護的規則,在硬件級上授予監視和控制資源程序的特殊權限。受保護系統主動防止一個任務使用其他任務的資源。因此使用硬件主動監視系統比協調加強的軟件歷程,提供了更好的保護。
ARM中配備的有效保護系統資源的硬件,有兩種:
· MPU(Memory Protection Unit);
· MMU(Memory Management Unit)。
MMU是比MPU提供了功能更強大的內存保護機制,MPU只提供了內存區域保護,而MMU是在此基礎上提供了虛擬地址映射技術,而且在操作上,MMU要比MPU負責。本節主要討論帶MPU的處理器內核,MMU將在下一節詳細介紹。
15.4.1 保護域(Protection Regions)
ARM處理器中的MPU使用“域(regions)”來對內存單元進行管理。域是與存儲空間相關聯的屬性,處理器核將這些數據保存在協處理器CP15的一些寄存器中。通常域的個數為8個,編號為從0~7。
域的大小和起始地址保存在CP15的寄存器c6中。大小可以是4KB~4GB的任何2的乘冪。域的起始地址必須是其大小的倍數。比如,一個定義為4KB的域其起始地址可以是0x12345000,而一個大小定義為8KB的域起始地址只能是0x2000的倍數。
另外,操作系統可以為這些域分配更多的屬性:訪問權限、cache和寫緩存。存儲器基于當時的處理器模式(管理模式或用戶模式)可以設定這些區域的訪問權限為讀/寫、只讀和不可訪問。
當處理器訪問主存的一個域時,MPU比較該域的訪問權限屬性和當時的處理器模式。如果請求符合域的訪問標準,則MPU允許內核讀/寫主存;如果存儲器請求不符號域的訪問標準,將產生一個異常信號。
異常信號被送到處理器核。處理器核執行一個異常向量,然后跳轉到異常處理程序,異常處理程序判斷異常類型為預取指或數據中止,然后根據異常類型,跳轉到相應的服務例程。
對于ARM處理器,存儲空間的某一部分可以被分配給一個以上的區域。也就是說域可以重疊。在重疊的域內,可以設置域的優先級。在分配訪問權限時重疊域比非重疊域有更大的靈活性。后面一節將會詳細介紹域的重疊。
15.4.2 內存訪問順序
當ARM處理器產生一個內存訪問信號時,內存保護單位MPU將負責檢查要訪問的地址是否在被定義的域中。
① 如果地址不在任何域中,存儲器產生異常。如果內核預取指令則MPU產生預取中止異常;如果是存儲器數據請求,則產生數據中止異常。
② 如果地址在多個域內,由MPU判斷域的有效級來決定存儲區域的訪問屬性。訪問屬性可以在CP15的寄存器中設定,可設定的位為C(Cache)、B(Buffer)、AP(Access Permission)。這些屬性的具體定義為:
· C和B可以控制Cache和寫緩存屬性的Cache策略。例如,可以設置一個域使用回寫(write-back)策略訪問存儲器,而另一個域則以無Cache和無寫緩存方式訪問;
· AP(access permission)決定域是否可以被訪問。如果在當前處理器模式下,該域不能被訪問,MPU將產生一個存儲器訪問異常。
圖15.16顯示了一個存儲器訪問過程。
圖15.16 存儲器訪問過程
15.4.3 使能MPU
通過對協處理器CP15的寄存器c1中的bit[0]置1,可以使能存儲器保護單元MPU。在系統上電時,默認狀態是該位清零,所有保護域無效。
在使能MPU之前,至少一個域要被設定,而且該域的屬性和訪問權限要預先設定好。
注意在數據和指令域分離的系統中,如ARM940T,在指令和數據域中都要有一個有效域被預先設定好。
另外,使能MPU的指令要設在有效的域中。如果在使能MPU之前,域的屬性和訪問權限沒有設定,那么系統的運行結果將不可預知。
當MPU無效(將協處理器CP15寄存器r1的bit[0]置0)時,整個內存區域都被處理器視為無Cache、無寫緩存、無存儲保護狀態。
15.4.4 重疊域
域的定義在MPU的作用下可以重疊。當重疊的域被訪問時,MPU會判斷域的優先權,決定使用那個域的屬性來操作重疊域。
域屬性優先級的排列順序為:域7的有效級最高,其次為域6,域0的優先級最低。
【例15.3】
假設將一個從0x3000起始的4KB地址空間定義為域2,其訪問屬性AP定義為0b10(AP=0b10,特權模式讀/寫訪問,用戶模式只讀)。
將起始地址為0x0的16KB地址空間定義為域1,其訪問屬性AP定義為0b01(AP=0b01,特權模式只讀)。
系統域劃分如圖15.17所示。
圖15.17 重疊域的訪問
當處理器在用戶模式下執行Load指令,從0x3010地址取數據時,0x3010地址既在域1中也在域2中,因為域2的屬性優先級高于域1,所有MPU執行域2的訪問屬性從0x3010地址取數據。域2是用戶模式可讀,所以不會發生數據異常。
在分配訪問權限時重疊區域比非重疊區域有更大的靈活性,它可以使內存的某個特定聯系內存單位在程序中擔任背景的作用,用來給一塊大存儲空間分配相同的屬性的低優先級域。其他具有較高優先級域的區域與該背景域某些部分重疊,用來改變已定義的背景域的較小子集的屬性。這樣,具有較高優先級的域可以改變背景域屬性的子集。背景域可以用來保護一些睡眠狀態的存儲空間,使其不受非法訪問,而此時由另一個不同域控制下的背景域的其他部分可以處于活躍狀態。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 如何配置存儲器保護單元(MPU)
- 如何管理STM32產品中的內存保護單元(MPU)
- AN5261 STM32 MCU和MPU的ESD保護
- AN5612 STM32 MCU和MPU的ESD保護
- InvenSense慣性測量單元IMU_MPU6050中文數據手 2次下載
- MPU6050常見問題的分析與處理
- 什么是Cortex-M內核的MPU(內存保護單元)?
- Cortex-M內核的MPU內存保護單元
- MPU6050開發 -- 數據分析
- 繼電保護用開關電源的故障分析及措施綜述 14次下載
- 單元串聯高壓變頻系統的SPWM調制方法 11次下載
- 如何配置存儲器保護單元(MPU) 13次下載
- MPU-3050運動處理單元產品說明書 22次下載
- 基于OTP存儲器存儲單元讀取閥值 11次下載
- 目標數據存儲控制單元的ASIC化設計 22次下載
- AUTOSAR內存分區和MPU關系簡述 932次閱讀
- CKS32F4xx系列I2S功能介紹 888次閱讀
- CKS32F4xx系列DSP功能介紹 1356次閱讀
- mpu6500和mpu6000哪個好 3077次閱讀
- TC3xx芯片的MPU功能詳解 1783次閱讀
- 使用MPU監控創建安全可靠的嵌入式系統 使用MPU監控的原因和好處 702次閱讀
- 如何為HMI選擇正確的微處理單元 1539次閱讀
- MPU是什么Cortex-M內核的MPU內存保護單元詳細講解 1w次閱讀
- 一文看懂mpu9150和mpu6050區別 4.1w次閱讀
- 一文看懂mpu6500和mpu6050區別 9.3w次閱讀
- mpu6050和mpu3050有什么不同和相同(基礎介紹和區別分析) 3.6w次閱讀
- mpu6050姿態解算原理分析及程序設計 4.2w次閱讀
- mpu內存保護單元功能及工作原理 1.2w次閱讀
- E2PROM的存儲單元 1562次閱讀
- 熔絲型PROM的存儲單元 2314次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1490次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費
- 6基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
- 7藍牙設備在嵌入式領域的廣泛應用
- 0.63 MB | 3次下載 | 免費
- 89天練會電子電路識圖
- 5.91 MB | 3次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537791次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多