<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設計應用 > 詳細講解MMU:為什么嵌入式linux沒他不行?

          詳細講解MMU:為什么嵌入式linux沒他不行?

          作者:時間:2023-06-01來源:收藏

          01

          本文引用地址:http://www.ex-cimer.com/article/202306/447225.htm

          內存管理

          (Memory Management Unit,內存管理單元)是一種硬件模塊,用于在CPU和內存之間實現虛擬內存管理。

          截屏2023-08-15 22.29.37.png

          其主要功能是將虛擬地址轉換為物理地址,同時提供訪問權限的控制和緩存管理等功能。是現代計算機操作系統中重要的組成部分,可以提高系統的穩定性和安全性。

          在內存管理方面,MMU可以通過頁面表(Page Table)實現虛擬內存管理。頁面表是一種數據結構,記錄了每個虛擬頁面和其對應的物理頁面之間的映射關系。

          當CPU發出一個虛擬地址時,MMU會通過頁面表查找并將其轉換為對應的物理地址。

          此外,MMU還可以通過頁面表實現內存保護和共享等功能,從而提高系統的安全性和效率。

          總之,MMU是內存管理中一個重要的硬件組件,可以實現虛擬內存管理、內存保護、共享和緩存等功能,為現代計算機操作系統的穩定性和安全性提供支持。

          · 舉個例子

          假設我們有一個程序,它需要訪問兩個內存區域:一個是只讀的代碼區域,一個是可讀寫的數據區域。

          我們現在想要在一個沒有 MMU 的系統上運行這個程序。如果沒有 MMU,代碼區域和數據區域就只能被映射到兩個固定的物理地址上。這就意味著,如果程序嘗試訪問一個不正確的地址,可能會導致系統崩潰。

          現在,如果我們在一個具有 MMU 的系統上運行這個程序,情況會有所不同。MMU 可以將程序嘗試訪問的地址映射到不同的物理地址,這樣可以使得代碼區域和數據區域在物理內存中不再是固定的位置。

          這意味著,如果程序嘗試訪問不正確的地址,MMU 可以通過重新映射來保護系統不崩潰。

          MMU 還可以將多個虛擬地址映射到同一個物理地址上,這就是所謂的頁共享(page sharing),可以減少物理內存的使用。

          如果沒有MMU,程序訪問內存時只能使用物理地址,而物理地址是直接映射到內存芯片上的地址,程序可以隨意訪問任何一個物理地址。

          這種情況下,程序如果訪問了錯誤的地址或試圖訪問未被授權的地址,就會產生訪問錯誤或非法訪問,可能導致系統崩潰、數據丟失等問題。

          而有了MMU,程序訪問的是虛擬地址,由MMU負責將虛擬地址映射到物理地址上,這樣程序就無法直接訪問物理地址。

          同時,MMU可以根據內存訪問權限來限制程序對內存的訪問,確保系統的安全性和穩定性。

          因此,沒有MMU時,程序可能會訪問到其他地址,而有了MMU,程序只能訪問被允許訪問的地址,可以有效地避免非法訪問的問題。

          截屏2023-08-15 22.30.49.png

          · 為什么相同的虛擬地址空間在物理地址不會發生沖突呢?

          相同的虛擬地址空間在不同的進程中可能會映射到不同的物理地址,這個映射的過程是由MMU完成的。在操作系統中,每個進程都有獨立的虛擬地址空間,且這些虛擬地址空間互不干擾。

          MMU會將每個進程的虛擬地址映射到對應的物理地址上,使得不同進程間的內存訪問不會相互干擾。同時,MMU也會提供一些安全機制,如頁面保護等,來防止進程越界訪問內存或訪問其他進程的內存。

          因此,MMU起到了保護進程間內存互不干擾的作用,也是現代操作系統的重要組成部分。

          02

          頁表是什么?

          頁表是一種用于存儲虛擬內存地址與物理內存地址映射關系的數據結構。在使用虛擬內存的系統中,每個進程都有自己的虛擬地址空間,而這些虛擬地址空間被分割成許多頁(通常大小為4KB或更大),而不是一整塊連續的內存。

          因此,當進程需要訪問某個虛擬地址時,需要將其翻譯成對應的物理地址。這個翻譯過程就是通過頁表來完成的。

          頁表的基本原理是將虛擬地址劃分成一個頁號和一個偏移量。

          頁號用于在頁表中查找對應的物理頁幀號,而偏移量則用于計算該虛擬地址在物理頁幀中的偏移量。通過這種方式,就可以將虛擬地址映射到物理地址,使得進程可以訪問對應的內存區域。

          頁表一般由操作系統來維護,因為操作系統需要掌握虛擬地址和物理地址之間的映射關系。

          在使用MMU(Memory Management Unit)的硬件支持的系統中,當進程訪問虛擬地址時,MMU會通過頁表將虛擬地址轉換為物理地址,并將訪問指向正確的物理地址。這樣,進程就可以在不知道自己真實物理地址的情況下訪問內存。

          · 為什么沒有MMU就無法運行Linux系統?

          這是因為 Linux 內核將虛擬地址空間分為多個頁面,并將這些頁面映射到物理地址空間上,以實現內存隔離、保護和虛擬內存等功能。

          沒有 MMU,就無法實現這種映射,從而無法運行 Linux 系統。

          · 為什么有些較為簡單的SOC可能沒有MMU,但仍然可以運行一些操作系統或者裸機程序?

          RTOS可以運行在沒有MMU的系統上,因為RTOS通常不需要進行內存保護和虛擬地址映射等高級特性。

          相反,RTOS的設計側重于實時性和低延遲,因此通常只需要簡單的內存管理和任務調度即可。

          這使得RTOS可以運行在許多系統上,包括一些沒有MMU的系統。

          版權聲明:本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯系我進行刪除。



          關鍵詞: MMU 嵌入式 linux

          評論


          相關推薦

          技術專區

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();