0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么沒有MMU就無法運行Linux系統(tǒng)

Linux愛好者 ? 來源:Linux愛好者 ? 2023-04-23 10:48 ? 次閱讀

5d294436-e016-11ed-bfe3-dac502259ad0.jpg

MMU內(nèi)存管理

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

其主要功能是將虛擬地址轉(zhuǎn)換為物理地址,同時提供訪問權(quán)限的控制和緩存管理等功能。MMU是現(xiàn)代計算機操作系統(tǒng)中重要的組成部分,可以提高系統(tǒng)的穩(wěn)定性和安全性。

在內(nèi)存管理方面,MMU可以通過頁面表(Page Table)實現(xiàn)虛擬內(nèi)存管理。頁面表是一種數(shù)據(jù)結(jié)構(gòu),記錄了每個虛擬頁面和其對應(yīng)的物理頁面之間的映射關(guān)系。

當(dāng)CPU發(fā)出一個虛擬地址時,MMU會通過頁面表查找并將其轉(zhuǎn)換為對應(yīng)的物理地址。

此外,MMU還可以通過頁面表實現(xiàn)內(nèi)存保護和共享等功能,從而提高系統(tǒng)的安全性和效率。

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

舉個例子

假設(shè)我們有一個程序,它需要訪問兩個內(nèi)存區(qū)域:一個是只讀的代碼區(qū)域,一個是可讀寫的數(shù)據(jù)區(qū)域。

我們現(xiàn)在想要在一個沒有 MMU 的系統(tǒng)上運行這個程序。如果沒有 MMU,代碼區(qū)域和數(shù)據(jù)區(qū)域就只能被映射到兩個固定的物理地址上。這就意味著,如果程序嘗試訪問一個不正確的地址,可能會導(dǎo)致系統(tǒng)崩潰。

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

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

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

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

這種情況下,程序如果訪問了錯誤的地址或試圖訪問未被授權(quán)的地址,就會產(chǎn)生訪問錯誤或非法訪問,可能導(dǎo)致系統(tǒng)崩潰、數(shù)據(jù)丟失等問題。

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

同時,MMU可以根據(jù)內(nèi)存訪問權(quán)限來限制程序?qū)?nèi)存的訪問,確保系統(tǒng)的安全性和穩(wěn)定性。

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

5d3cb908-e016-11ed-bfe3-dac502259ad0.png

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

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

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

因此,MMU起到了保護進程間內(nèi)存互不干擾的作用,也是現(xiàn)代操作系統(tǒng)的重要組成部分。

頁表是什么?

頁表是一種用于存儲虛擬內(nèi)存地址與物理內(nèi)存地址映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)。在使用虛擬內(nèi)存的系統(tǒng)中,每個進程都有自己的虛擬地址空間,而這些虛擬地址空間被分割成許多頁(通常大小為4KB或更大),而不是一整塊連續(xù)的內(nèi)存。

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

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

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

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

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

為什么沒有MMU就無法運行Linux系統(tǒng)?

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

沒有 MMU,就無法實現(xiàn)這種映射,從而無法運行 Linux 系統(tǒng)。

為什么有些較為簡單的SOC可能沒有MMU,但仍然可以運行一些嵌入式操作系統(tǒng)或者裸機程序?

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

相反,RTOS的設(shè)計側(cè)重于實時性和低延遲,因此通常只需要簡單的內(nèi)存管理和任務(wù)調(diào)度即可。

這使得RTOS可以運行在許多嵌入式系統(tǒng)上,包括一些沒有MMU的系統(tǒng)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5054

    文章

    18924

    瀏覽量

    301086
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4070

    瀏覽量

    217606
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6626

    瀏覽量

    123059
  • 內(nèi)存管理
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    14108
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    18240

原文標(biāo)題:為什么有些較為簡單的SOC可能沒有MMU,但仍然可以運行一些嵌入式操作系統(tǒng)或者裸機程序?

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux中如何查看系統(tǒng)運行信息

    Linux系統(tǒng)中,查看系統(tǒng)運行狀態(tài)(或者故障排除),比如內(nèi)存或者CPU使用率的時候,可以使用top命令,它提供了系統(tǒng)
    發(fā)表于 11-25 16:37 ?3966次閱讀
    <b class='flag-5'>Linux</b>中如何查看<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>運行</b>信息

    為什么沒有MMU無法運行Linux系統(tǒng)呢?

    MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實現(xiàn)虛擬內(nèi)存管理。
    發(fā)表于 08-03 10:05 ?882次閱讀
    為什么<b class='flag-5'>沒有</b><b class='flag-5'>MMU</b>就<b class='flag-5'>無法</b><b class='flag-5'>運行</b><b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>呢?

    mini2440燒寫運行mmu裸機程序led不亮

    我使用的開發(fā)板是mini2440,交叉編譯器版本為友善官方提供的arm-linux-gcc-4.4.3,主機環(huán)境是物理機上的ubuntu12.04,使用jlink-V8和SEGGER官網(wǎng)提供
    發(fā)表于 06-28 05:45

    stm32用ucos還是linux

    ,不帶MMU控制器,不可能運行Linux,Clinux不算Linux的。 基于STM平臺且滿足實時控制要求操作系統(tǒng),有以下5種可供移植選擇。
    發(fā)表于 10-10 14:51 ?1.4w次閱讀

    ARM存儲管理單元MMU詳解

    15.5 存儲管理單元MMU 在創(chuàng)建多任務(wù)嵌入式系統(tǒng)時,最好有一個簡單的方式來編寫、裝載及運行各自獨立的任務(wù)。目前大多數(shù)的嵌入式系統(tǒng)不再使用自己定制的控制
    發(fā)表于 10-17 16:24 ?4次下載

    uClinux和Linux的具體異同

    uCLinux是針對控制領(lǐng)域的嵌入式linux操作系統(tǒng),它從Linux 2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性。適合不具備內(nèi)存管理單元(
    發(fā)表于 11-04 10:42 ?2次下載

    linux內(nèi)核無法啟動

     Linux在啟動過程中會出現(xiàn)一些故障,導(dǎo)致系統(tǒng)無法正常啟動,本文列舉了幾個應(yīng)用單用戶模式、GRUB命令操作、Linux救援模式的典型故障修復(fù)案例幫助讀者了解此類問題的解決。
    發(fā)表于 11-14 17:26 ?2896次閱讀
    <b class='flag-5'>linux</b>內(nèi)核<b class='flag-5'>無法</b>啟動

    Linux為什么無法取代Windows

    Linux系統(tǒng)誕生二十多年了,全球幾百萬開發(fā)者維護并使用Linux,堪稱全人類智慧的結(jié)晶。為什么卻始終無法取代Windows,統(tǒng)一操作系統(tǒng)
    的頭像 發(fā)表于 04-18 11:46 ?3997次閱讀

    linux無法聯(lián)網(wǎng)怎么解決

    linux無法聯(lián)網(wǎng)的解決方法如下
    發(fā)表于 05-13 09:11 ?1.6w次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>無法</b>聯(lián)網(wǎng)怎么解決

    linux無法解析域名怎么辦

    由于linux沒有DNS導(dǎo)致無法解析域名。
    發(fā)表于 05-21 09:23 ?2306次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>無法</b>解析域名怎么辦

    linux下如何安裝虛擬機

    如今,越來越多的人正在使用Linux系統(tǒng),現(xiàn)在許多國家的操作系統(tǒng)都基于Linux內(nèi)核。 盡管有很多軟件可以在Linux
    發(fā)表于 09-18 16:54 ?1784次閱讀

    MMU的工作原理梳理

    本文從內(nèi)存管理的發(fā)展歷程角度層層遞進,介紹 MMU 的誕生背景,工作機制。而忽略了具體處理器的具體實現(xiàn)細節(jié),將 MMU 的工作原理從概念上比較清晰的梳理了一遍。 MMU 誕生之前:在傳統(tǒng)的批處理
    的頭像 發(fā)表于 12-17 16:13 ?1.3w次閱讀
    <b class='flag-5'>MMU</b>的工作原理梳理

    修復(fù)win10、Linux系統(tǒng)無法啟動的故障

    修復(fù)win10、Linux系統(tǒng)無法啟動的故障的方法步驟。
    發(fā)表于 05-10 17:55 ?0次下載

    什么是MMUlinux為什么需要MMU?

    在內(nèi)存管理方面,MMU可以通過頁面表(Page Table)實現(xiàn)虛擬內(nèi)存管理。頁面表是一種數(shù)據(jù)結(jié)構(gòu),記錄了每個虛擬頁面和其對應(yīng)的物理頁面之間的映射關(guān)系。
    發(fā)表于 10-09 11:27 ?1231次閱讀
    什么是<b class='flag-5'>MMU</b>?<b class='flag-5'>linux</b>為什么需要<b class='flag-5'>MMU</b>?

    嵌入式Linux運行一定需要MMU嗎?為什么需要MMU

    嵌入式Linux運行一定需要MMU嗎?為什么需要MMU?? 嵌入式Linux運行需要
    的頭像 發(fā)表于 10-29 16:28 ?714次閱讀