自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux操作系統(tǒng)的靈魂,深度解析MMU內(nèi)存管理

系統(tǒng) Windows
在 Windows 操作系統(tǒng)中,MMU 為系統(tǒng)的穩(wěn)定運(yùn)行和多任務(wù)處理提供了堅(jiān)實(shí)保障。當(dāng)我們打開多個辦公軟件、瀏覽器窗口以及各類后臺程序時,MMU 發(fā)揮著關(guān)鍵作用。它巧妙地將每個進(jìn)程的虛擬地址空間轉(zhuǎn)換為物理地址,確保進(jìn)程間的內(nèi)存互不干擾。

在計(jì)算機(jī)的奇妙世界里,我們每天使用的操作系統(tǒng)看似流暢自如地運(yùn)行著各類程序,背后實(shí)則有著一位默默耕耘的 “幕后英雄”—— 內(nèi)存管理單元(MMU)。它雖不常被大眾所熟知,卻掌控著計(jì)算機(jī)內(nèi)存的關(guān)鍵命脈,是保障系統(tǒng)穩(wěn)定、高效運(yùn)行的核心力量,宛如一場精彩演出背后的總導(dǎo)演,掌控著舞臺上的每一個細(xì)節(jié)。

當(dāng)我們打開電腦,同時運(yùn)行多個程序時,有沒有想過它們是如何在有限的內(nèi)存空間里 “和平共處” 的?又或者,當(dāng)程序所需內(nèi)存遠(yuǎn)超實(shí)際物理內(nèi)存時,為何系統(tǒng)依然能有條不紊地運(yùn)行?這一切,都離不開 MMU 的神奇魔法。接下來,就讓我們一起揭開 MMU 的神秘面紗,探尋它在操作系統(tǒng)中的精彩故事。

一、引言

虛擬內(nèi)存是現(xiàn)代操作系統(tǒng)中最偉大的發(fā)明之一。它為每個進(jìn)程提供了一個一致的、私有的地址空間,讓每個進(jìn)程產(chǎn)生了一種自己在獨(dú)享主存的錯覺。

為了講清楚MMU是如何一步一步完成地址翻譯,取出數(shù)據(jù)的,本篇文章在前部分中講解了虛擬內(nèi)存中一些重要的概念,比如,虛擬內(nèi)存的作用,頁命中,缺頁異常處理,為什么需要TLB等等。最后,通過兩個地址翻譯的例子,詳細(xì)解釋了MMU地址翻譯的過程。

⑴什么是虛擬內(nèi)存?

  • 虛擬內(nèi)存能夠創(chuàng)建一個連續(xù)的更大的空間給進(jìn)程使用,出現(xiàn)的原因是由于主存的空間是有限。
  • 當(dāng)運(yùn)行多個進(jìn)程或者一個進(jìn)程需要更大的空間進(jìn)行存儲運(yùn)行,主存顯然是不夠的,這個時候就需要更大更便宜的磁盤進(jìn)行保存一部分?jǐn)?shù)據(jù)。
  • 對于進(jìn)程來說,虛擬內(nèi)存就是一張連續(xù)的內(nèi)存空間,這個空間有些在主存中,有些在磁盤中。

⑵虛擬內(nèi)存的作用

  • 虛擬內(nèi)存將主存看成是一個存儲在磁盤上的地址空間的高速緩存,在主存中只保存活動區(qū)域,并根據(jù)需要在磁盤和主存之間來回傳送數(shù)據(jù),通過這種方式,可以高效地使用主存。
  • 虛擬內(nèi)存為每個進(jìn)程提供了一致的地址空間,簡化了內(nèi)存管理。
  • 虛擬內(nèi)存保護(hù)了每個進(jìn)程的地址空間不被其他進(jìn)程破壞。

⑶虛擬內(nèi)存與物理內(nèi)存

圖片圖片

我們先來看下,CPU是如何根據(jù)地址取得數(shù)據(jù)的。CPU 在這里生成的物理地址為 4,把地址發(fā)送給內(nèi)存,然后內(nèi)存從該地址獲取其中保存的字,最后將其發(fā)送回 CPU;MMU(Memory Management Unit)叫做內(nèi)存管理單元,主要用來管理虛擬內(nèi)存與物理內(nèi)存的映射,由硬件自動完成。

⑷頁命中/缺頁

圖片圖片

  • 處理器產(chǎn)生一個虛擬地址。
  • MMU生成PTE地址,并從高速緩存/主存請求得到它。
  • 高速緩存/主存向MMU返回PTE。
  • MMU構(gòu)造物理地址,并把它傳送給高速緩存/主存。
  • 高速緩存/主存返回所請求的數(shù)據(jù)字給處理器。

圖片圖片

  • 處理器產(chǎn)生一個虛擬地址。
  • MMU生成PTE地址,并從高速緩存/主存請求得到它。
  • 高速緩存/主存向MMU返回PTE。
  • PTE中的有效位是零,所以MMU觸發(fā)了一次異常,傳遞CPU中的控制到操作系統(tǒng)內(nèi)核中的缺頁異常處理程序。
  • 缺頁處理程序確定出物理內(nèi)存中的犧牲頁,如果這個頁面已經(jīng)被修改了,則把它換出到磁盤。
  • 缺頁處理程序頁面調(diào)入新的頁面,并更新內(nèi)存中的PTE。
  • 缺頁處理程序返回到原來的進(jìn)程,再次執(zhí)行導(dǎo)致缺頁的指令。CPU將引起缺頁的虛擬地址重新發(fā)送給MMU。因?yàn)樘摂M頁面現(xiàn)在緩存在物理內(nèi)存中,所以就會命中,主存就會將所請求字返回給處理器。

⑸為什么有了高速緩存,還需要TLB呢?

局部性原則保證了在任意時刻, 程序?qū)⑼谝粋€較小的活動頁面集合上工作,這個集合叫做工作集或者常駐集。換句話說, 局部性原則揭示了一個現(xiàn)象:在一段時間內(nèi),我們會反復(fù)調(diào)入或調(diào)出同一個或幾個虛擬頁頁面。而且,每次CPU產(chǎn)生一個VA時, MMU就必須查閱PTE,以便將VA翻譯為PA, 注意是每次,所以開銷很大。

解決方法: 為了消除這樣的開銷,在MMU中包括了一個關(guān)于PTE的小緩存,稱為翻譯后備緩沖器,TLB(Translation Lookaside Buffer)。

關(guān)鍵點(diǎn): 所有的地址翻譯步驟都是在芯片上的MMU中執(zhí)行的, 因此執(zhí)行速度非??臁?/p>

二、主角登場:MMU是何方神圣

MMU是Memory Management Unit的縮寫,中文名是內(nèi)存管理單元,有時稱作分頁內(nèi)存管理單元(英語:paged memory management unit,縮寫為PMMU)。它是一種負(fù)責(zé)處理中央處理器(CPU)的內(nèi)存訪問請求的計(jì)算機(jī)硬件。它的功能包括虛擬地址到物理地址的轉(zhuǎn)換(即虛擬內(nèi)存管理)、內(nèi)存保護(hù)、中央處理器高速緩存的控制,在較為簡單的計(jì)算機(jī)體系結(jié)構(gòu)中,負(fù)責(zé)總線的仲裁以及存儲體切換(bank switching,尤其是在8位的系統(tǒng)上)。

內(nèi)存管理單元(MMU)的一個重要功能是使系統(tǒng)能夠運(yùn)行多個任務(wù),作為獨(dú)立程序在自己的私有虛擬內(nèi)存空間中運(yùn)行。它們不需要了解系統(tǒng)的物理內(nèi)存映射,即硬件實(shí)際使用的地址,也不需要了解可能同時執(zhí)行的其他程序。

具體而言,MMU 肩負(fù)著兩大關(guān)鍵職責(zé)。其一,負(fù)責(zé)虛擬地址與物理地址的映射,這意味著它能將程序使用的虛擬地址巧妙地轉(zhuǎn)換為實(shí)際的物理內(nèi)存地址,讓每個進(jìn)程都仿佛擁有了屬于自己的獨(dú)立內(nèi)存空間,彼此互不干擾;其二,它還提供硬件機(jī)制的內(nèi)存訪問授權(quán),嚴(yán)格把關(guān)每一次內(nèi)存訪問,確保進(jìn)程只能在允許的范圍內(nèi)讀寫內(nèi)存,有效防止非法訪問,維護(hù)系統(tǒng)的穩(wěn)定性與安全性。

圖片圖片

2.1MMU的由來

⑴Swap模式時代

早期計(jì)算機(jī)在執(zhí)行程序時,將程序從磁盤加載到內(nèi)存執(zhí)行中執(zhí)行,在多用戶系統(tǒng)中,當(dāng)新的用戶程序被執(zhí)行前,需要先將當(dāng)前用戶的程序從內(nèi)存swap到磁盤,然后從磁盤加載新的程序執(zhí)行,當(dāng)前用戶退出后,在將前一用戶程序從磁盤中加載到內(nèi)存繼續(xù)執(zhí)行,每次用戶切換伴隨程序的swap,消耗較大。

⑵Page模式時代

后來人們將內(nèi)存劃分為固定大小的Page,一般為4K或者更小,這樣用戶程序按需以Page的方式加載到內(nèi)存,不需要將整個程序加載到內(nèi)存,這樣內(nèi)存可同時容納更多程序,而無需按照用戶切換進(jìn)行swap,提升了內(nèi)存利用率和加載時間(PageFault是Page時代的產(chǎn)物,而非MMU時代獨(dú)有)。

⑶動態(tài)地址轉(zhuǎn)換(DAT - Dynamic Address Translation)

最早可以追溯到1966年IBM研發(fā)的System/360-Model67,在該計(jì)算機(jī)的設(shè)計(jì)中首先引入了動態(tài)的地址轉(zhuǎn)換機(jī)制,在Page模式基礎(chǔ)上,為用戶程序分配虛地址(VA),通過DAT轉(zhuǎn)換為物理地址(PA)進(jìn)行訪問。通過好處是用戶可以使用連續(xù)的地址,而不再受制于物理內(nèi)存大小和Page碎片化的限制,原則上用戶的程序只受磁盤大小限制,代價是增加虛實(shí)地址轉(zhuǎn)換機(jī)制。

①實(shí)現(xiàn)方式

采用segment、page、offset模式,將24-bit虛擬地址分為3段,0-7bit保留,8-11bit索引segment,一共16個segment,12-19bit索引page,每個segment最多256個page,20-31bit為page offset,每個用戶有一個虛實(shí)地址映射表,分為2級,即segment表和page表,每個segment指向一個page表。

②轉(zhuǎn)換過程

當(dāng)CPU訪問一個虛地址時,先通過VA的8-11bit查找segment表得到page表,再根據(jù)12-19bit在page表中找到PA的page起始地址,加上20-31bit的page offset就得到實(shí)際的PA了。

這就是MMU最早的雛形了。

2.2現(xiàn)代MMU

實(shí)地址模式:即CPU狀態(tài)位中MMU使能位清零,MMU處于關(guān)閉狀態(tài),此時CPU操作的地址不經(jīng)過轉(zhuǎn)換(VA=PA),直接作為物理地址進(jìn)行訪問,CPU上電時或者在異常入口時處于該狀態(tài),在該狀態(tài)下可以訪問任意物理內(nèi)存,非常危險(xiǎn),一般操作系統(tǒng)在CPU上電后做完必要初始化以后便使能MMU,或者在異常處理的入口保存好必要信息后使能MMU。

塊地址轉(zhuǎn)換:或者成為固定的地址轉(zhuǎn)換或靜態(tài)配置的地址轉(zhuǎn)換表,這種模式支持配置一些固定的內(nèi)存地址映射(VPN->RPN),比如Linux Kernel加載的地址,以PowerPC604為例,0xC0000000這段地址開始的256M內(nèi)存映射使用了該模式的轉(zhuǎn)換,好處是這種配置轉(zhuǎn)換速度快,一般在特定的寄存器中配置,沒有頁表查找過程,缺點(diǎn)是缺乏靈活性,一次配置永久使用。

頁地址轉(zhuǎn)換:類似于早期的動態(tài)地址轉(zhuǎn)換DAT,即將VA的一部分bit用于索引segment,另外一部分bit用于索引PTE表,最終得到物理地址的Page起始地址,再加上最后12bit(4K)的Page offset得到真正的物理地址。

相比早期的DAT,有以下優(yōu)化:

增加了PTE表的緩存TLB(Translation lookaside Buffer),有些處理器將ITLB(指令)和DTLB(數(shù)據(jù))分開,以減少指令和數(shù)據(jù)之間的緩存沖突。

支持更大的物理地址(36bit以上)或邏輯地址,如在PowerPC中,用以應(yīng)對現(xiàn)代操作系統(tǒng)的多進(jìn)程管理將32bit通過segment寄存器擴(kuò)展為52bit的邏輯地址,然后通過hash函數(shù)得到key用來查找PTE,并最終轉(zhuǎn)換為36bit物理地址,邏輯地址的擴(kuò)展用于減少多進(jìn)程之間的PTE沖突。

支持多種PTE查找方式,如硬件查找和軟件查找。現(xiàn)在CPU的MMU地址轉(zhuǎn)換流程如下:

圖片圖片

主要分為幾個階段:

  • 用戶進(jìn)程訪問虛存地址。
  • 觸發(fā)TLB查找過程,該部分通過硬件完成(灰色背景),沒有軟件參與。
  • TLB miss場景下,查找PTE(粉色背景),該部分在不同CPU上實(shí)現(xiàn)不同,像X86都是硬件查找,PowerPC有些處理器使用軟件查找,即在內(nèi)核實(shí)現(xiàn)一個TLB miss的異常處理,可以靈活做到TLB查找。

Do Page Fault,分為幾種情況:

  • 新申請內(nèi)存第一次讀寫,觸發(fā)物理內(nèi)存分配
  • 進(jìn)程fork后子進(jìn)程寫內(nèi)存觸發(fā)Copy-On-Write。
  • 非法內(nèi)存讀寫,錯誤處理。

MMU在CPU的配合下(通過頁異常觸發(fā)),實(shí)現(xiàn)了線性地址到物理地址的動態(tài)映射,為正在CPU上運(yùn)行的應(yīng)用程序(進(jìn)程)提供了一個獨(dú)立的連續(xù)內(nèi)存空間(線性地址空間,或稱虛擬內(nèi)存空間,其中放置了代碼段、數(shù)據(jù)段和堆棧段),屏蔽了地址分配、內(nèi)存分配和內(nèi)存回收等一系列復(fù)雜的系統(tǒng)行為。

MMU的線性地址轉(zhuǎn)換是通過頁表進(jìn)行的,具體過程如下圖所示:

圖片圖片

其實(shí)最簡單明了的方法是通過一個一維數(shù)組來記錄映射關(guān)系:下標(biāo)代表線性地址,數(shù)組元素內(nèi)容代表物理地址。可是如此一來,用來表示映射關(guān)系的內(nèi)存空間比被表示的物理空間還要大,顯然這不是一個可行的方案。

工程師們采用了分段分級的思路來表示這種映射關(guān)系:先把線性空間以4K大小為單位進(jìn)行劃分(頁),然后再以大段連續(xù)空間進(jìn)行轉(zhuǎn)換,在每個大段空間內(nèi)部再次劃分成小段進(jìn)行轉(zhuǎn)換,直到段大小變?yōu)?K頁大小。用以表示和段空間映射關(guān)系的結(jié)構(gòu)稱為頁表,其大小也是一個頁面。由于采用了分段的方法,頁表空間大大減??;同時未映射的空間不必分配頁表,這也進(jìn)一步降低了頁表占用空間。

x86_64架構(gòu)下Linux用了四級頁表來表示一個映射關(guān)系,依次為PGD、PUD、PMD、PT。每級頁表4K大小,內(nèi)部元素大小為8字節(jié),高位指向了下一級頁表的物理地址,低位表示頁表屬性(是否存在、讀寫權(quán)限、是否臟等等)。頂層頁表PGD的物理地址存放在CPU的CR3寄存器中,供MMU訪問。48位線性地址也相應(yīng)地分成了五段:前四段,每段長9位,用來索引對應(yīng)頁表的元素;最后一段長12位,用來在頁面中索引物理地址。

三、MMU的工作原理

3.1虛擬地址到物理地址的奇幻之旅

在計(jì)算機(jī)的世界里,每個程序都像是一個擁有獨(dú)立王國的小世界,它們運(yùn)行在自己的虛擬地址空間中。這個虛擬地址空間的大小,取決于計(jì)算機(jī) CPU 的位數(shù)。例如,對于常見的 32 位 CPU,其虛擬地址空間范圍是 0 到 2^32 - 1,也就是 4GB;而 64 位 CPU 的虛擬地址空間更是高達(dá) 2^64 - 1,這是一個極其龐大的數(shù)字,理論上能提供 16EB(1EB = 1024PB,1PB = 1024TB)的尋址能力。

然而,現(xiàn)實(shí)中的物理內(nèi)存可沒有這么夸張。一臺普通的家用電腦,物理內(nèi)存可能只有 8GB、16GB 甚至更小。這就好比,虛擬地址空間是一片廣闊無垠的虛擬大陸,而物理內(nèi)存只是這片大陸上實(shí)實(shí)在在存在的一小片陸地。那么,如何讓程序在這片虛擬大陸上暢行無阻,又能精準(zhǔn)地找到物理內(nèi)存中的對應(yīng)位置呢?這就輪到 MMU 大展身手了。

當(dāng)程序運(yùn)行并試圖訪問內(nèi)存時,它使用的是虛擬地址。這個虛擬地址就像是一張神秘的地圖,指引著程序前往它想去的地方。MMU 拿到這個虛擬地址后,會依據(jù)預(yù)先設(shè)置好的頁表,進(jìn)行一場精妙絕倫的 “翻譯” 工作,將虛擬地址轉(zhuǎn)換為物理地址。

這里就涉及到分頁機(jī)制這個關(guān)鍵概念。分頁,簡單來說,就是把虛擬地址空間和物理地址空間都劃分成一個個大小相等的小塊,虛擬空間中的叫頁(Page),物理空間中的叫頁幀(Page Frame),頁和頁幀就如同拼圖中的小塊,大小必須完美匹配。比如說,在某個系統(tǒng)中,頁和頁幀的大小被設(shè)定為 4KB。當(dāng)程序給出一個虛擬地址,比如 0x12345678,MMU 會迅速將這個虛擬地址拆分成兩部分:虛擬頁面號(VPN)和虛擬地址偏移(VA offset)。同樣,物理地址也由對應(yīng)的物理頁幀號(PFN)和物理地址偏移(PA offset)組成。

MMU 轉(zhuǎn)換地址的核心秘訣就在于找到 VPN 與 PFN 之間的對應(yīng)關(guān)系,而這個關(guān)系,正靜靜地躺在頁表之中。頁表就像是一本神秘的魔法詞典,存儲著虛擬地址到物理地址的映射關(guān)系。MMU 根據(jù) VPN,在頁表中快速查找,找到對應(yīng)的 PFN,再把 PFN 和 VA offset 相加,剎那間,物理地址就誕生了,程序也順利找到了它夢寐以求的數(shù)據(jù)。舉個例子,假設(shè)程序中的一個變量存儲在虛擬地址 0x00401000,通過 MMU 的轉(zhuǎn)換,發(fā)現(xiàn)它對應(yīng)的物理頁幀號是 0x0020,偏移量不變,最終得到物理地址 0x00201000,數(shù)據(jù)就這樣被精準(zhǔn)定位。

值得注意的是,頁表本身通常存儲在物理內(nèi)存中,這就好像把尋寶的線索藏在了寶藏庫里,每次 MMU 轉(zhuǎn)換地址都得去物理內(nèi)存里查找頁表,會不會很慢呢?別擔(dān)心,工程師們早就想到了辦法 —— 引入了快表(TLB,Translation Lookaside Buffer)。TLB 就像是 MMU 的 “私人小助手”,它是一個高速緩存,專門用來存儲最近使用過的頁表項(xiàng)。MMU 查找地址時,會先在 TLB 中快速搜索,如果找到了,就能瞬間完成地址轉(zhuǎn)換,大大提高了效率;要是 TLB 中沒找到,才會去物理內(nèi)存中查找頁表,雖然慢點(diǎn),但也能確保準(zhǔn)確無誤地找到目標(biāo)。

3.2內(nèi)存保護(hù)的安全護(hù)盾

在如今的多用戶多進(jìn)程操作系統(tǒng)環(huán)境下,計(jì)算機(jī)就像一個熱鬧非凡的大集市,眾多進(jìn)程熙熙攘攘地同時運(yùn)行著。每個進(jìn)程都懷揣著自己的 “小心思”,處理著不同的數(shù)據(jù),執(zhí)行著各異的任務(wù)。要是沒有嚴(yán)格的規(guī)則約束,它們在內(nèi)存這個 “公共資源區(qū)” 里橫沖直撞,必然會亂成一鍋粥,數(shù)據(jù)混淆、程序崩潰等問題將接踵而至。

而 MMU,就是這個大集市的公正 “管理員”,為每個進(jìn)程精心打造了獨(dú)立的地址空間,讓它們 “井水不犯河水”。比如說,進(jìn)程 A 和進(jìn)程 B 都在運(yùn)行,它們可能都用到了虛擬地址 0x1000,但在 MMU 的巧妙管理下,這兩個虛擬地址會被分別映射到不同的物理內(nèi)存區(qū)域,進(jìn)程 A 訪問 0x1000 時,得到的是自己的數(shù)據(jù),進(jìn)程 B 訪問時,同樣如此,彼此互不干擾,仿佛每個進(jìn)程都獨(dú)占了一片內(nèi)存天地。

不僅如此,MMU 還是一位嚴(yán)謹(jǐn)?shù)?“安全衛(wèi)士”,為內(nèi)存的每一頁都設(shè)置了精細(xì)的訪問權(quán)限。這些權(quán)限就像是一道道堅(jiān)固的門禁,嚴(yán)格限制著進(jìn)程對內(nèi)存的訪問行為。頁表項(xiàng)中的權(quán)限位詳細(xì)規(guī)定了每頁的訪問規(guī)則,常見的權(quán)限有可讀(Read)、可寫(Write)、可執(zhí)行(Execute)等。對于操作系統(tǒng)內(nèi)核所在的內(nèi)存頁,為了防止用戶進(jìn)程誤操作或惡意篡改,通常只設(shè)置為可讀和可執(zhí)行,禁止寫入;而對于普通數(shù)據(jù)存儲的內(nèi)存頁,可能允許進(jìn)程讀寫,但禁止執(zhí)行,避免代碼注入攻擊。

當(dāng)進(jìn)程試圖訪問某一內(nèi)存頁時,MMU 會第一時間檢查該進(jìn)程是否具備相應(yīng)的權(quán)限。如果進(jìn)程違反了權(quán)限規(guī)則,比如試圖寫入只讀內(nèi)存頁,MMU 會立刻發(fā)出警報(bào),拋出異常,并通知操作系統(tǒng)前來處理。操作系統(tǒng)就會像一位嚴(yán)厲的裁判,根據(jù)具體情況,可能采取終止違規(guī)進(jìn)程、記錄錯誤信息等措施,確保系統(tǒng)的整體穩(wěn)定與安全。在一些復(fù)雜的服務(wù)器系統(tǒng)中,這種內(nèi)存保護(hù)機(jī)制尤為重要,它保障著多個用戶的任務(wù)能夠安全、穩(wěn)定地并行運(yùn)行,互不干擾,為整個計(jì)算機(jī)系統(tǒng)的平穩(wěn)運(yùn)行保駕護(hù)航。

四、MMU與不同內(nèi)存管理方式

在現(xiàn)代操作系統(tǒng)中,內(nèi)存管理方式多種多樣,而 MMU 在其中扮演的角色也因管理方式的不同而各具特色。

頁式管理,是當(dāng)下最為常見的內(nèi)存管理方式之一。它把進(jìn)程的虛擬地址空間等分成固定大小的頁,物理內(nèi)存也同樣劃分成與頁大小一致的頁幀。MMU 在此過程中,就像是一位精準(zhǔn)的導(dǎo)航員,依據(jù)頁表這一 “航海圖”,引導(dǎo)虛擬地址找到對應(yīng)的物理頁幀。頁表記錄著每頁的映射關(guān)系,MMU 通過查找頁表,迅速完成虛擬地址到物理地址的轉(zhuǎn)換。

這種方式的優(yōu)勢顯而易見,它極大地提高了內(nèi)存的利用率,有效減少了外部碎片的產(chǎn)生,使得內(nèi)存空間的分配更加規(guī)整、高效。例如,在一些大型數(shù)據(jù)庫系統(tǒng)中,需要頻繁地加載和卸載大量數(shù)據(jù),頁式管理能夠確保數(shù)據(jù)在內(nèi)存中的快速存儲與讀取,保障系統(tǒng)的高效運(yùn)行。

段式管理,則側(cè)重于按照程序的邏輯結(jié)構(gòu)進(jìn)行分段,每個段都有明確的意義,如代碼段、數(shù)據(jù)段、堆棧段等。MMU 在段式管理里,負(fù)責(zé)將段式虛擬地址轉(zhuǎn)換為物理地址。它借助段表來查找段的基地址,再結(jié)合段內(nèi)偏移量,就能精準(zhǔn)定位到物理內(nèi)存位置。這種管理方式對于程序員而言更加友好,因?yàn)樗N合了程序的邏輯結(jié)構(gòu),方便程序的編寫、編譯與調(diào)試。以一個復(fù)雜的圖形處理軟件為例,不同功能模塊的代碼和數(shù)據(jù)可以分別存放在不同的段中,程序員能夠清晰地管理各個模塊,若某個模塊出現(xiàn)問題,也能迅速定位排查,提高開發(fā)效率。

段頁式管理,顧名思義,是將段式和頁式管理的優(yōu)點(diǎn)巧妙融合。它先把程序按邏輯分段,然后每段再進(jìn)一步分頁。在這種模式下,MMU 的工作變得更為復(fù)雜卻也更加精細(xì)。系統(tǒng)需要為每個進(jìn)程建立段表,段表項(xiàng)指向?qū)?yīng)的頁表,頁表再負(fù)責(zé)具體的頁到頁幀的映射。當(dāng)進(jìn)程訪問內(nèi)存時,MMU 先根據(jù)段號在段表中找到頁表的起始地址,再依據(jù)頁號在頁表中查找物理頁幀號,最終確定物理地址。雖說段頁式管理在地址轉(zhuǎn)換時,可能需要多次訪問內(nèi)存,導(dǎo)致一定的性能開銷,但它既具備段式管理的邏輯清晰、便于共享與保護(hù)的優(yōu)點(diǎn),又擁有頁式管理內(nèi)存利用率高的長處,適用于那些對內(nèi)存管理要求極高、既需邏輯結(jié)構(gòu)嚴(yán)謹(jǐn)又要高效利用內(nèi)存的復(fù)雜系統(tǒng),如大型服務(wù)器操作系統(tǒng)、高端工業(yè)控制系統(tǒng)等。

五、MMU在常見操作系統(tǒng)中的表現(xiàn)

在 Windows 操作系統(tǒng)中,MMU 為系統(tǒng)的穩(wěn)定運(yùn)行和多任務(wù)處理提供了堅(jiān)實(shí)保障。當(dāng)我們打開多個辦公軟件、瀏覽器窗口以及各類后臺程序時,MMU 發(fā)揮著關(guān)鍵作用。它巧妙地將每個進(jìn)程的虛擬地址空間轉(zhuǎn)換為物理地址,確保進(jìn)程間的內(nèi)存互不干擾。例如,在 32 位的 Windows 系統(tǒng)中,每個進(jìn)程都擁有獨(dú)立的 4GB 虛擬地址空間,MMU 通過精細(xì)的頁表管理,讓這些進(jìn)程能夠在物理內(nèi)存中和諧共存。同時,Windows 系統(tǒng)借助 MMU 的內(nèi)存保護(hù)功能,嚴(yán)格限制進(jìn)程對系統(tǒng)關(guān)鍵內(nèi)存區(qū)域的訪問,有效防止惡意軟件或錯誤程序?qū)ο到y(tǒng)造成破壞,保障了系統(tǒng)的安全性與穩(wěn)定性,為用戶提供流暢、可靠的使用體驗(yàn)。

Linux 作為一款廣泛應(yīng)用于服務(wù)器、嵌入式設(shè)備等多種領(lǐng)域的開源操作系統(tǒng),MMU 的作用同樣舉足輕重。在服務(wù)器環(huán)境中,面對眾多用戶同時發(fā)起的復(fù)雜任務(wù)請求,Linux 依靠 MMU 實(shí)現(xiàn)高效的內(nèi)存管理。它采用靈活的內(nèi)存管理策略,如按需分頁,結(jié)合 MMU 的地址轉(zhuǎn)換機(jī)制,確保只有當(dāng)前正在使用的內(nèi)存頁面被加載到物理內(nèi)存中,大大提高了內(nèi)存利用率。同時,對于實(shí)時性要求較高的嵌入式 Linux 系統(tǒng),MMU 能夠精準(zhǔn)地為各個任務(wù)分配內(nèi)存資源,保障任務(wù)的及時響應(yīng)與執(zhí)行,滿足不同場景下的應(yīng)用需求,充分展現(xiàn)了其強(qiáng)大的適應(yīng)性與可靠性。

蘋果公司的 macOS 操作系統(tǒng),憑借其簡潔易用的界面和出色的性能深受用戶喜愛,而這背后離不開 MMU 的默默支持。macOS 在圖形處理、多媒體編輯等高強(qiáng)度任務(wù)方面表現(xiàn)卓越,MMU 在其中功不可沒。當(dāng)運(yùn)行大型圖形設(shè)計(jì)軟件或視頻編輯工具時,這些應(yīng)用程序需要大量的內(nèi)存空間來存儲圖像、視頻數(shù)據(jù)以及中間處理結(jié)果。MMU 高效地管理內(nèi)存,快速進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換,確保數(shù)據(jù)的快速讀寫,讓軟件運(yùn)行流暢,避免卡頓現(xiàn)象,為創(chuàng)意工作者提供了穩(wěn)定且高效的創(chuàng)作環(huán)境,助力他們盡情發(fā)揮才華。

責(zé)任編輯:武曉燕 來源: 深度Linux
相關(guān)推薦

2009-08-17 08:32:56

Linux操作系統(tǒng)內(nèi)存管理Linux

2010-04-14 15:32:18

Unix操作系統(tǒng)

2022-11-28 07:21:53

操作系統(tǒng)內(nèi)存管理

2024-08-28 17:45:00

內(nèi)存Linux

2012-09-24 15:41:22

2021-03-28 13:54:31

操作系統(tǒng)內(nèi)存管理

2022-02-17 08:16:23

MMU內(nèi)存管理

2024-08-05 11:20:41

2010-01-22 10:54:45

Linux操作系統(tǒng)PS命令

2012-05-04 09:24:02

Linuxps命令

2009-12-25 17:05:50

Linux操作系統(tǒng)

2012-09-24 09:59:24

Linux操作系統(tǒng)

2013-11-15 17:23:50

Linux技巧文件管理

2010-03-16 14:25:48

Linux操作系統(tǒng)

2009-02-17 16:07:29

Linux操作系統(tǒng)內(nèi)核啟動參數(shù)

2009-12-09 17:25:19

Linux操作系統(tǒng)

2021-06-11 07:26:16

操作系統(tǒng)內(nèi)存管理Cpu

2010-01-12 14:20:10

Linux安裝

2020-05-12 09:31:59

網(wǎng)絡(luò)管理Linux操作系統(tǒng)

2009-12-22 13:44:33

Linux操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號