電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 25|回復(fù): 0
收起左側(cè)

MMU 對(duì)于 linux 的重要性

[復(fù)制鏈接]

332

主題

332

帖子

3064

積分

四級(jí)會(huì)員

Rank: 4

積分
3064
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-8 11:45:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容

素材來(lái)源 | 網(wǎng)絡(luò)

MMU:Memory Management Unit,內(nèi)存管理單元。搞嵌入式開(kāi)發(fā)的小伙伴都應(yīng)該了解并掌握的一項(xiàng)知識(shí)。
你肯定會(huì)好奇,為什么RTOS可以不用MMU,而linux沒(méi)它卻不行?
什么是MMU?
MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實(shí)現(xiàn)虛擬內(nèi)存管理。
其主要功能是將虛擬地址轉(zhuǎn)換為物理地址,同時(shí)提供訪問(wèn)權(quán)限的控制和緩存管理等功能。MMU是現(xiàn)代計(jì)算機(jī)操作系統(tǒng)中重要的組成部分,可以提高系統(tǒng)的穩(wěn)定性和安全性。
在內(nèi)存管理方面,MMU可以通過(guò)頁(yè)面表(Page Table)實(shí)現(xiàn)虛擬內(nèi)存管理。頁(yè)面表是一種數(shù)據(jù)結(jié)構(gòu),記錄了每個(gè)虛擬頁(yè)面和其對(duì)應(yīng)的物理頁(yè)面之間的映射關(guān)系。

當(dāng)CPU發(fā)出一個(gè)虛擬地址時(shí),MMU會(huì)通過(guò)頁(yè)面表查找并將其轉(zhuǎn)換為對(duì)應(yīng)的物理地址。此外,MMU還可以通過(guò)頁(yè)面表實(shí)現(xiàn)內(nèi)存保護(hù)和共享等功能,從而提高系統(tǒng)的安全性和效率?傊琈MU是內(nèi)存管理中一個(gè)重要的硬件組件,可以實(shí)現(xiàn)虛擬內(nèi)存管理、內(nèi)存保護(hù)、共享和緩存等功能,為現(xiàn)代計(jì)算機(jī)操作系統(tǒng)的穩(wěn)定性和安全性提供支持。舉個(gè)例子假設(shè)我們有一個(gè)程序,它需要訪問(wèn)兩個(gè)內(nèi)存區(qū)域:一個(gè)是只讀的代碼區(qū)域,一個(gè)是可讀寫(xiě)的數(shù)據(jù)區(qū)域。我們現(xiàn)在想要在一個(gè)沒(méi)有 MMU 的系統(tǒng)上運(yùn)行這個(gè)程序。如果沒(méi)有 MMU,代碼區(qū)域和數(shù)據(jù)區(qū)域就只能被映射到兩個(gè)固定的物理地址上。這就意味著,如果程序嘗試訪問(wèn)一個(gè)不正確的地址,可能會(huì)導(dǎo)致系統(tǒng)崩潰,F(xiàn)在,如果我們?cè)谝粋(gè)具有 MMU 的系統(tǒng)上運(yùn)行這個(gè)程序,情況會(huì)有所不同。MMU 可以將程序嘗試訪問(wèn)的地址映射到不同的物理地址,這樣可以使得代碼區(qū)域和數(shù)據(jù)區(qū)域在物理內(nèi)存中不再是固定的位置。這意味著,如果程序嘗試訪問(wèn)不正確的地址,MMU 可以通過(guò)重新映射來(lái)保護(hù)系統(tǒng)不崩潰。MMU 還可以將多個(gè)虛擬地址映射到同一個(gè)物理地址上,這就是所謂的頁(yè)共享(page sharing),可以減少物理內(nèi)存的使用。

如果沒(méi)有MMU,程序訪問(wèn)內(nèi)存時(shí)只能使用物理地址,而物理地址是直接映射到內(nèi)存芯片上的地址,程序可以隨意訪問(wèn)任何一個(gè)物理地址。這種情況下,程序如果訪問(wèn)了錯(cuò)誤的地址或試圖訪問(wèn)未被授權(quán)的地址,就會(huì)產(chǎn)生訪問(wèn)錯(cuò)誤或非法訪問(wèn),可能導(dǎo)致系統(tǒng)崩潰、數(shù)據(jù)丟失等問(wèn)題。而有了MMU,程序訪問(wèn)的是虛擬地址,由MMU負(fù)責(zé)將虛擬地址映射到物理地址上,這樣程序就無(wú)法直接訪問(wèn)物理地址。同時(shí),MMU可以根據(jù)內(nèi)存訪問(wèn)權(quán)限來(lái)限制程序?qū)?nèi)存的訪問(wèn),確保系統(tǒng)的安全性和穩(wěn)定性。因此,沒(méi)有MMU時(shí),程序可能會(huì)訪問(wèn)到其他地址,而有了MMU,程序只能訪問(wèn)被允許訪問(wèn)的地址,可以有效地避免非法訪問(wèn)的問(wèn)題。為什么相同的虛擬地址空間在物理地址不會(huì)發(fā)生沖突呢?
相同的虛擬地址空間在不同的進(jìn)程中可能會(huì)映射到不同的物理地址,這個(gè)映射的過(guò)程是由MMU完成的。在操作系統(tǒng)中,每個(gè)進(jìn)程都有獨(dú)立的虛擬地址空間,且這些虛擬地址空間互不干擾。MMU會(huì)將每個(gè)進(jìn)程的虛擬地址映射到對(duì)應(yīng)的物理地址上,使得不同進(jìn)程間的內(nèi)存訪問(wèn)不會(huì)相互干擾。同時(shí),MMU也會(huì)提供一些安全機(jī)制,如頁(yè)面保護(hù)等,來(lái)防止進(jìn)程越界訪問(wèn)內(nèi)存或訪問(wèn)其他進(jìn)程的內(nèi)存。因此,MMU起到了保護(hù)進(jìn)程間內(nèi)存互不干擾的作用,也是現(xiàn)代操作系統(tǒng)的重要組成部分。頁(yè)表是什么?頁(yè)表是一種用于存儲(chǔ)虛擬內(nèi)存地址與物理內(nèi)存地址映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)。在使用虛擬內(nèi)存的系統(tǒng)中,每個(gè)進(jìn)程都有自己的虛擬地址空間,而這些虛擬地址空間被分割成許多頁(yè)(通常大小為4KB或更大),而不是一整塊連續(xù)的內(nèi)存。因此,當(dāng)進(jìn)程需要訪問(wèn)某個(gè)虛擬地址時(shí),需要將其翻譯成對(duì)應(yīng)的物理地址。這個(gè)翻譯過(guò)程就是通過(guò)頁(yè)表來(lái)完成的。頁(yè)表的基本原理是將虛擬地址劃分成一個(gè)頁(yè)號(hào)和一個(gè)偏移量。頁(yè)號(hào)用于在頁(yè)表中查找對(duì)應(yīng)的物理頁(yè)幀號(hào),而偏移量則用于計(jì)算該虛擬地址在物理頁(yè)幀中的偏移量。通過(guò)這種方式,就可以將虛擬地址映射到物理地址,使得進(jìn)程可以訪問(wèn)對(duì)應(yīng)的內(nèi)存區(qū)域。頁(yè)表一般由操作系統(tǒng)來(lái)維護(hù),因?yàn)椴僮飨到y(tǒng)需要掌握虛擬地址和物理地址之間的映射關(guān)系。在使用MMU(Memory Management Unit)的硬件支持的系統(tǒng)中,當(dāng)進(jìn)程訪問(wèn)虛擬地址時(shí),MMU會(huì)通過(guò)頁(yè)表將虛擬地址轉(zhuǎn)換為物理地址,并將訪問(wèn)指向正確的物理地址。這樣,進(jìn)程就可以在不知道自己真實(shí)物理地址的情況下訪問(wèn)內(nèi)存。
為什么沒(méi)有MMU就無(wú)法運(yùn)行Linux系統(tǒng)?
這是因?yàn)?Linux 內(nèi)核將虛擬地址空間分為多個(gè)頁(yè)面,并將這些頁(yè)面映射到物理地址空間上,以實(shí)現(xiàn)內(nèi)存隔離、保護(hù)和虛擬內(nèi)存等功能。沒(méi)有 MMU,就無(wú)法實(shí)現(xiàn)這種映射,從而無(wú)法運(yùn)行 Linux 系統(tǒng)。為什么有些較為簡(jiǎn)單的SOC可能沒(méi)有MMU,但仍然可以運(yùn)行一些嵌入式操作系統(tǒng)或者裸機(jī)程序?RTOS可以運(yùn)行在沒(méi)有MMU的系統(tǒng)上,因?yàn)镽TOS通常不需要進(jìn)行內(nèi)存保護(hù)和虛擬地址映射等高級(jí)特性。相反,RTOS的設(shè)計(jì)側(cè)重于實(shí)時(shí)性和低延遲,因此通常只需要簡(jiǎn)單的內(nèi)存管理和任務(wù)調(diào)度即可。這使得RTOS可以運(yùn)行在許多嵌入式系統(tǒng)上,包括一些沒(méi)有MMU的系統(tǒng)。
聲明:本文素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。
------------ END ------------

●專(zhuān)欄《嵌入式工具●專(zhuān)欄《嵌入式開(kāi)發(fā)》●專(zhuān)欄《Keil教程》●嵌入式專(zhuān)欄精選教程
關(guān)注公眾號(hào)回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。


點(diǎn)擊“閱讀原文”查看更多分享。

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表