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

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

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

沒(méi)有MMU的處理器可否安裝操作系統(tǒng)呢?

Q4MP_gh_c472c21 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-04-21 10:45 ? 次閱讀

有些童鞋可能會(huì)有這樣的疑問(wèn),沒(méi)有MMU的處理器可否安裝操作系統(tǒng)呢?

事實(shí)上,我們知道處理器是計(jì)算機(jī)的核心運(yùn)算硬件,現(xiàn)在使用windows操作系統(tǒng)的用戶使用的機(jī)器之中的處理器多數(shù)都是X86內(nèi)核,而實(shí)際之上很多時(shí)候我們用戶都是會(huì)在心目之中把一個(gè)處理器和其運(yùn)行的特定操作系統(tǒng)掛鉤,之前說(shuō)的X86和windows操作系統(tǒng),而在Cortex-A系列硬件之上我們運(yùn)行的多數(shù)都是Android操作系統(tǒng),或者是linux操作系統(tǒng)。

這些操作系統(tǒng)雖然說(shuō)各自不同,但是都是有相同的部分,比如說(shuō)對(duì)于內(nèi)存的管理就是如此。一般我們把對(duì)于內(nèi)存的管理模塊都是稱之為MMU,但是實(shí)際之上在win7旗艦版操作系統(tǒng)之中并不是所有的內(nèi)存管理任務(wù)都是操作系統(tǒng)完成的,處理器也是提供了MMU硬件支持,一般我們都說(shuō)有MMU支持的處理器是可以安裝操作系統(tǒng)的。

沒(méi)有MMU的處理器無(wú)法安裝操作系統(tǒng)? 我們?cè)谏厦嬲f(shuō)了沒(méi)有MMU的處理器是不能安裝操作系統(tǒng)的,其實(shí)并不是這樣,現(xiàn)在很多的使用在嵌入式系統(tǒng)之中的MCU處理器都是不具備MMU,但是這種處理器可以與運(yùn)行一些最為簡(jiǎn)單的實(shí)時(shí)操作系統(tǒng)。這種操作系統(tǒng)甚至也是可以提供多任務(wù)功能。無(wú)MMU處理器到底是有什么限制 實(shí)際之上如果一個(gè)處理器沒(méi)有MMU的話,那么其就是不能支持和我們通用計(jì)算機(jī)一樣在外部存儲(chǔ)器之中部署程序,其只能是把應(yīng)用程序和操作系統(tǒng)混合在一起。這樣的程序處理方式其實(shí)和一般的無(wú)操作系統(tǒng)程序類似,所以說(shuō)很多人認(rèn)為這不能算是操作系統(tǒng)。

下面我們來(lái)詳細(xì)介紹一下MMU:

MMU即內(nèi)存管理單元(Memory Manage Unit),是一個(gè)與軟件密切相關(guān)的硬件部件,也是理解linux等操作系統(tǒng)內(nèi)核機(jī)制的最大障礙之一??梢哉f(shuō),不懂MMU使很多人一直停滯在單片機(jī)與無(wú)OS的時(shí)代。

一、虛擬地址/物理地址

如果處理器沒(méi)有MMU,CPU內(nèi)部執(zhí)行單元產(chǎn)生的內(nèi)存地址信號(hào)將直接通過(guò)地址總線發(fā)送到芯片引腳,被內(nèi)存芯片接收,這就是物理地址(physical address),簡(jiǎn)稱PA。英文physical代表物理的接觸,所以PA就是與內(nèi)存芯片physically connected的總線上的信號(hào)。

如果MMU存在且啟用,CPU執(zhí)行單元產(chǎn)生的地址信號(hào)在發(fā)送到內(nèi)存芯片之前將被MMU截獲,這個(gè)地址信號(hào)稱為虛擬地址(virtual address),簡(jiǎn)稱VA,MMU會(huì)負(fù)責(zé)把VA翻譯成另一個(gè)地址,然后發(fā)到內(nèi)存芯片地址引腳上,即VA映射成PA,如下圖:

所以物理地址①是通過(guò)CPU對(duì)外地址總線②傳給Memory Chip③使用的地址;而虛擬地址④是CPU內(nèi)部執(zhí)行單元⑤產(chǎn)生的,發(fā)送給MMU⑥的地址。硬件上MMU⑥一般封裝于CPU芯片⑦內(nèi)部,所以虛擬地址④一般只存在于CPU⑦內(nèi)部,到了CPU外部地址總線引腳上②的信號(hào)就是MMU轉(zhuǎn)換過(guò)的物理地址①。

軟件上MMU對(duì)用戶程序不可見(jiàn),在啟用MMU的平臺(tái)上(沒(méi)有MMU不必說(shuō),只有物理地址,不存在虛擬地址),用戶C程序中變量和函數(shù)背后的數(shù)據(jù)/指令地址等都是虛擬地址,這些虛擬內(nèi)存地址從CPU執(zhí)行單元⑤發(fā)出后,都會(huì)首先被MMU攔截并轉(zhuǎn)換成物理地址,然后再發(fā)送給內(nèi)存。也就是說(shuō)用戶程序運(yùn)行*pA =100;"這條賦值語(yǔ)句時(shí),假設(shè)debugger顯示指針pA的值為0x30004000(虛擬地址),但此時(shí)通過(guò)硬件工具(如邏輯分析儀)偵測(cè)到的CPU與外存芯片間總線信號(hào)很可能是另外一個(gè)值,如0x8000(物理地址)。當(dāng)然對(duì)一般程序員來(lái)說(shuō),只要上述語(yǔ)句運(yùn)行后debugger顯示0x30004000位置處的內(nèi)存值為100就行了,根本無(wú)需關(guān)心pA的物理地址是多少。但進(jìn)行OS移植或驅(qū)動(dòng)開(kāi)發(fā)的系統(tǒng)程序員不同,他們必須清楚軟件如何在幕后輔助硬件MMU完成地址轉(zhuǎn)換。

暫不探討這種復(fù)雜機(jī)制的歷史原因,很多人學(xué)習(xí)或闡述MMU時(shí),都迷失于對(duì)一些相關(guān)發(fā)散問(wèn)題的無(wú)休止探究,我們暫時(shí)抽身出來(lái),用一句話做階段性交待,"所有計(jì)算機(jī)科學(xué)中的問(wèn)題都能通過(guò)增加一個(gè)中間轉(zhuǎn)換層來(lái)解決"("All problems in computer science can be solved by another level of indirection")。某種程度上,這種被動(dòng)解決問(wèn)題的方式使計(jì)算機(jī)軟硬件的一系列發(fā)展只不過(guò)是慣性向前,看起來(lái)順理成章,然而幾乎所有從業(yè)者的智慧都浪費(fèi)在不斷學(xué)習(xí)和構(gòu)建新的中間層,身不由己的推動(dòng)這個(gè)龐然大物繼續(xù)膨脹。忽然感覺(jué)索然無(wú)味,很無(wú)聊啊。

二、頁(yè)/頁(yè)幀/頁(yè)表/頁(yè)表項(xiàng)(PTE)

這幾個(gè)頁(yè)概念也噎倒了不少人,這里澄清下。MMU是負(fù)責(zé)把虛擬地址映射為物理地址,但凡"映射"都要解決兩個(gè)問(wèn)題:映射的最小單位(粒度)和映射的規(guī)則。

MMU中VA到PA映射的最小單位稱為頁(yè)(Page),映射的最低粒度是單個(gè)虛擬頁(yè)到物理頁(yè),頁(yè)大小通常是4K,即一次最少要把4K大小的VA頁(yè)塊整體映射到4K的PA頁(yè)塊(從0開(kāi)始4K對(duì)齊劃分頁(yè)塊),頁(yè)內(nèi)偏移不變,如VA的一頁(yè)0x30004000~0x30004fff被映射到PA的一頁(yè) 0x00008000~0x00008fff,當(dāng)CPU執(zhí)行單元訪問(wèn)虛擬地址0x30004008,實(shí)際訪問(wèn)的物理地址是0x00008008(0x30004008和0x00008008分別位于虛實(shí)兩套地址空間,互不相干,不存在重疊和沖突)。以頁(yè)為最小單位,就是不能把VA中某一頁(yè)劃分成幾小塊分別映射到不同PA,也不能把VA中屬于不同頁(yè)的碎塊映射到PA某一頁(yè)的不同部分,必須頁(yè)對(duì)頁(yè)整體映射。

頁(yè)幀(Page Frame)是指物理內(nèi)存中的一頁(yè)內(nèi)存,MMU虛實(shí)地址映射就是尋找物理頁(yè)幀的過(guò)程,對(duì)這個(gè)概念了解就可以了。

MMU軟件配置的核心是頁(yè)表(Page Table),它描述MMU的映射規(guī)則,即虛擬內(nèi)存哪(幾)個(gè)頁(yè)映射到物理內(nèi)存哪(幾)個(gè)頁(yè)幀。頁(yè)表由一條條代表映射規(guī)則的記錄組成,每一條稱為一個(gè)頁(yè)表?xiàng)l目(Page Table Entry,即PTE),整個(gè)頁(yè)表保存在片外內(nèi)存,MMU通過(guò)查找頁(yè)表確定一個(gè)VA應(yīng)該映射到什么PA,以及是否有權(quán)限映射。

但如果MMU每次地址轉(zhuǎn)換都到位于外部?jī)?nèi)存的頁(yè)表上查找PTE,轉(zhuǎn)換速度就會(huì)大大降低,于是出現(xiàn)了

三、TLB

TLB (Translation Lookaside Buffers)即轉(zhuǎn)換快表,又簡(jiǎn)稱快表,可以理解為MMU內(nèi)部專用的存放頁(yè)表的cache,保存著最近使用的PTE乃至全部頁(yè)表。MMU接收到虛擬地址后,首先在TLB中查找,如果找到該VA對(duì)應(yīng)的PTE就直接轉(zhuǎn)換,找不到再去外存頁(yè)表查找,并置換進(jìn)TLB。TLB屬于片上SRAM,訪問(wèn)速度快,通過(guò)TLB緩存PTE可以節(jié)省MMU訪問(wèn)外存頁(yè)表的時(shí)間,從而加速虛實(shí)地址轉(zhuǎn)換。TLB和CPU cache的工作原理一樣,只是TLB專用于為MMU緩存頁(yè)表。

四、MMU的內(nèi)存保護(hù)功能

既然所有發(fā)往內(nèi)存的地址信號(hào)都要經(jīng)過(guò)MMU處理,那讓它只單單做地址轉(zhuǎn)換,豈不是浪費(fèi)了這個(gè)特意安插的轉(zhuǎn)換層?顯然它有能力對(duì)虛地址訪問(wèn)做更多的限定(就像路由器轉(zhuǎn)發(fā)網(wǎng)絡(luò)包的同時(shí)還能過(guò)濾各種非法訪問(wèn)),比如內(nèi)存保護(hù)。可以在PTE條目中預(yù)留出幾個(gè)比特,用于設(shè)置訪問(wèn)權(quán)限的屬性,如禁止訪問(wèn)、可讀、可寫和可執(zhí)行等。設(shè)好后,CPU訪問(wèn)一個(gè)VA時(shí),MMU找到頁(yè)表中對(duì)應(yīng)PTE,把指令的權(quán)限需求與該P(yáng)TE中的限定條件做比對(duì),若符合要求就把VA轉(zhuǎn)換成PA,否則不允許訪問(wèn),并產(chǎn)生異常。

五、多級(jí)頁(yè)表

虛擬地址由頁(yè)號(hào)和頁(yè)內(nèi)偏移組成。什么東東呢?

前面說(shuō)過(guò)MMU映射以頁(yè)為最小單位,假設(shè)頁(yè)大小為4K(212),那么無(wú)論頁(yè)表怎樣設(shè)置,虛擬地址后12比特與MMU映射后的物理地址后12比特總是相同,這不變的比特位就是頁(yè)內(nèi)偏移。為什么不變?拜托,把搭積木想象成一種映射,不管你怎么搭,你也改變不了每塊積木內(nèi)部的原子排列吧。所謂以頁(yè)為最小單位就是保持一部分不變作為最小粒度。

頁(yè)號(hào)就更有故事了,一個(gè)32bits虛擬地址,可以劃分為220個(gè)內(nèi)存頁(yè),如果都以頁(yè)為單位和物理頁(yè)幀隨意映射,頁(yè)表的空間占用就是220*sizeof(PTE)*進(jìn)程數(shù)(每個(gè)進(jìn)程都要有自己的頁(yè)表),PTE一般占4字節(jié),即每進(jìn)程4M,這對(duì)空間占用和MMU查詢速度都很不利。

問(wèn)題是實(shí)際應(yīng)用中不需要每次都按最小粒度的頁(yè)來(lái)映射,很多時(shí)候可以映射更大的內(nèi)存塊。因此最好采用變化的映射粒度,既靈活又可以減小頁(yè)表空間。具體說(shuō)可以把20bits的頁(yè)號(hào)再劃分為幾部分(如下圖linux的3級(jí)劃分),

PGD(16bits)

PMD(4bits)

PTE(4bits)

Offset(12bits)

簡(jiǎn)單說(shuō)每次MMU根據(jù)虛擬地址查詢頁(yè)表都是一級(jí)級(jí)進(jìn)行,先根據(jù)PGD的值查詢,如果查到PGD的匹配,但后續(xù)PMD和PTE沒(méi)有,就以2(offset+pte+pmd)=1M為粒度進(jìn)行映射,后20bits全部是塊內(nèi)偏移,與物理地址相同。

依次類推,具體可參考WolfGang Mauerer的professional linux kernel architecture的1.3.4節(jié),以及各CPU的Spec中MMU章節(jié),查看MMU組合出物理地址的詳細(xì)過(guò)程。

六、操作系統(tǒng)和MMU

實(shí)際上MMU是為滿足操作系統(tǒng)越來(lái)越復(fù)雜的內(nèi)存管理而產(chǎn)生的。OS和MMU的關(guān)系簡(jiǎn)單說(shuō):

a.系統(tǒng)初始化代碼會(huì)在內(nèi)存中生成頁(yè)表,然后把頁(yè)表地址設(shè)置給MMU對(duì)應(yīng)寄存器,使MMU知道頁(yè)表在物理內(nèi)存中的什么位置,以便在需要時(shí)進(jìn)行查找。之后通過(guò)專用指令啟動(dòng)MMU,以此為分界,之后程序中所有內(nèi)存地址都變成虛地址,MMU硬件開(kāi)始自動(dòng)完成查表和虛實(shí)地址轉(zhuǎn)換。

b.OS初始化后期,創(chuàng)建第一個(gè)用戶進(jìn)程,這個(gè)過(guò)程中也需要?jiǎng)?chuàng)建頁(yè)表,把其地址賦給進(jìn)程結(jié)構(gòu)體中某指針成員變量。即每個(gè)進(jìn)程都要有獨(dú)立的頁(yè)表。

c.用戶創(chuàng)建新進(jìn)程時(shí),子進(jìn)程拷貝一份父進(jìn)程的頁(yè)表,之后隨著程序運(yùn)行,頁(yè)表內(nèi)容逐漸更新變化。比較復(fù)雜了,幾句講不清楚,不多說(shuō)了哈,有時(shí)間講linux的話再說(shuō)吧

六、最后總結(jié)

相關(guān)概念講完,VA到PA的映射過(guò)程就一目了然:MMU得到VA后先在TLB內(nèi)查找,若沒(méi)找到匹配的PTE條目就到外部頁(yè)表查詢,并置換進(jìn)TLB;根據(jù)PTE條目中對(duì)訪問(wèn)權(quán)限的限定檢查該條VA指令是否符合,若不符合則不繼續(xù),并拋出exception異常;符合后根據(jù)VA的地址分段查詢頁(yè)表,保持offset(廣義)不變,組合出物理地址,發(fā)送出去。

在這個(gè)過(guò)程中,軟件的工作核心就是生成和配置頁(yè)表。

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

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227231
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

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

    關(guān)注

    0

    文章

    91

    瀏覽量

    18168

原文標(biāo)題:沒(méi)有MMU的處理器就無(wú)法上操作系統(tǒng)?高手帶你解讀MMU內(nèi)存管理單元

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    操作系統(tǒng) 處理器 嵌入式

    為什么有的處理器可以跑操作系統(tǒng),有的不能?(專業(yè)一點(diǎn)的回答)
    發(fā)表于 09-04 16:08

    MiCO 基于微處理器的物聯(lián)網(wǎng)操作系統(tǒng)

    `MiCO 基于微處理器的物聯(lián)網(wǎng)操作系統(tǒng)介紹 :`
    發(fā)表于 01-26 10:42

    μC/OS-II操作系統(tǒng)在各種處理器上的移植

    的工作就是操作系統(tǒng)的移植。本文選取使用較多的51單片機(jī)、LPC2210、NiosII三種處理器進(jìn)行介紹。 1 μC/OS-II操作系統(tǒng)移植條件μC/OS-II操作系統(tǒng)的大部分源代碼都是
    發(fā)表于 08-14 09:46

    匯聚式處理器Blackfin支持什么操作系統(tǒng)?

    當(dāng)今的嵌入式應(yīng)用已經(jīng)無(wú)處不在,全球每年生產(chǎn)數(shù)十億顆微處理器,其中大部分被廣泛應(yīng)用于各類嵌入式系統(tǒng),從消費(fèi)電子、通信終端及系統(tǒng)設(shè)備、工業(yè)控制、汽車電子系統(tǒng)到航空航天,無(wú)處不能看到嵌入式應(yīng)
    發(fā)表于 10-11 07:12

    MicroBlaze處理器的PetaLinux操作系統(tǒng)怎么移植?

    核,而如何針對(duì)特定的微處理器選擇合適的嵌入式操作系統(tǒng)是SOPC開(kāi)發(fā)的難點(diǎn)之一。本文針對(duì)Xilinx公司的MicroBlaze軟核,介紹了PetaLinux嵌入式操作系統(tǒng)及其移植方法,研究了PetaLinux的相關(guān)配置和啟動(dòng)方案。
    發(fā)表于 03-16 06:37

    VxWorks操作系統(tǒng)基于ARM處理器的中斷怎么處理?

    本文通過(guò)基于S3C44B0X處理器VxWorks嵌入式操作系統(tǒng)的BSP移植,詳細(xì)分析了VxWorks操作系統(tǒng)基于ARM處理器的中斷處理方法。
    發(fā)表于 04-27 06:28

    linux操作系統(tǒng)只能在以arm為處理器的pc上運(yùn)行嗎

    linux操作系統(tǒng)只能在以arm為處理器的pc上運(yùn)行嗎?可以在英特爾的各種處理器上運(yùn)行嗎?
    發(fā)表于 07-27 15:04

    UC/OS-Ⅱ操作系統(tǒng)在ARM處理器上的移植

    UC/OS-Ⅱ操作系統(tǒng)在ARM處理器上的移植
    發(fā)表于 03-28 09:51 ?27次下載

    嵌入式處理器和嵌入式操作系統(tǒng)

    嵌入式處理器和嵌入式操作系統(tǒng) 1.2.1 嵌入式微處理器    嵌入式微處理器有許多種流行的處理器核,芯片
    發(fā)表于 06-17 00:30 ?1967次閱讀

    μC/OS-II操作系統(tǒng)在各種處理器上的移植

    μC/OS-II操作系統(tǒng)在各種處理器上的移植  μC/OS-II操作系統(tǒng)是一種搶占式多任務(wù)、單內(nèi)存空間、微小內(nèi)核的嵌入式操作系統(tǒng),具有高效緊湊的特點(diǎn)。它執(zhí)行效率高,占
    發(fā)表于 01-07 11:11 ?694次閱讀
    μC/OS-II<b class='flag-5'>操作系統(tǒng)</b>在各種<b class='flag-5'>處理器</b>上的移植

    谷歌Pixel 2 XL問(wèn)題不斷,操作系統(tǒng)沒(méi)有安裝

    根據(jù)部分Reddit和Ars Technica論壇和Twitter用戶表示,自己收到的Pixel 2 XL根本就沒(méi)有安裝操作系統(tǒng)。我們都知道無(wú)論是智能手機(jī)還是電腦,沒(méi)有
    發(fā)表于 11-03 11:21 ?1578次閱讀

    基于SPEC 2000的桌面操作系統(tǒng)與處理器適配評(píng)測(cè)

    桌面操作系統(tǒng)與處理器的適配評(píng)測(cè)是提升國(guó)產(chǎn)計(jì)算機(jī)系統(tǒng)質(zhì)量的重要途徑,傳統(tǒng)桌面操作系統(tǒng)的評(píng)測(cè)側(cè)重于軟件本身的測(cè)試,不能夠全面反映其與處理器的適配性能?;赟PEC 2000基準(zhǔn)程序集,提出
    發(fā)表于 12-01 11:26 ?0次下載
    基于SPEC 2000的桌面<b class='flag-5'>操作系統(tǒng)與處理器</b>適配評(píng)測(cè)

    基于S3C4510B微處理器操作系統(tǒng)實(shí)現(xiàn)網(wǎng)絡(luò)通信工程的編寫設(shè)計(jì)

    Micro,是“小”的意思;C表示Control,是“控制”的意思,所以u(píng)CLinux就是Micro-Control-Linux,字面上的理解就是“針對(duì)微控制領(lǐng)域而設(shè)計(jì)的Linux系統(tǒng)”。它也是針對(duì)無(wú)MMU(內(nèi)存管理單元模塊)的微處理器
    的頭像 發(fā)表于 10-04 17:37 ?1877次閱讀
    基于S3C4510B微<b class='flag-5'>處理器</b>和<b class='flag-5'>操作系統(tǒng)</b>實(shí)現(xiàn)網(wǎng)絡(luò)通信工程的編寫設(shè)計(jì)

    MMU的工作原理梳理

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

    如何使用IPMI安裝操作系統(tǒng)?

    當(dāng)我們購(gòu)買了物理服務(wù),首先要做的事是必須在其上安裝所需的操作系統(tǒng)。但這可以通過(guò)服務(wù)控制臺(tái)、IPMI或KVM來(lái)完成,具體取決于我們要安裝
    的頭像 發(fā)表于 11-09 15:38 ?3601次閱讀