ARM·MMU
MMU的主要功能:1)設(shè)置權(quán)限 2)地址映射
(這里我們主要講的是地址映射)
【虛擬地址到物理地址的映射】
問題一:為什么要虛擬地址?
原因1:我們先來看一個(gè)問題,A程序需要10MB的內(nèi)存,B程序需要110MB的內(nèi)存,A和B同時(shí)運(yùn)行就需要20M的內(nèi)存,這時(shí)如果只剩下10M的內(nèi)存,如果C程序需要20M的內(nèi)存又該如何呢?所以這樣對(duì)我們的物理內(nèi)存的容量要求就十分的大。
原因2:如果這時(shí)候因?yàn)槟承┏绦虻耐顺?,有?0M的內(nèi)存,但這些內(nèi)存不是連續(xù)的,是隨機(jī)分配的,但是總共加起來有20M,可以讓c程序運(yùn)行,可是c程序沒有確定的運(yùn)行地址;
原因3:
這里使用物理地址的內(nèi)存分配,試想一下如果B程序出錯(cuò)了,訪問到了A程序的地址,修改了A程序的內(nèi)存,那么A程序也就出錯(cuò)了。也就是說一個(gè)程序的崩潰引發(fā)多個(gè)程序的崩潰,這樣導(dǎo)致系統(tǒng)十分不穩(wěn)定。結(jié)合上面2個(gè)原因,我們就可以看出來,虛擬地址的發(fā)明的必要性。
【虛擬地址的改進(jìn)】
(1)
分段方式映射內(nèi)存
這樣雖然解決了問題2,問題3,但是物理地址和虛擬地址是一一對(duì)應(yīng)的關(guān)系,物理地址并沒有得到擴(kuò)大,容量依然十分小
(2)分頁的方法(ARM中頁的大小1MB)
分段的方法中,每次程序運(yùn)行總是把程序全部裝入內(nèi)存;分頁則是程序運(yùn)行到哪頁就為哪頁分配內(nèi)存
我們用一個(gè)例子來說明一下:
假設(shè)一個(gè)A文件在內(nèi)存中被執(zhí)行的時(shí)候,操作系統(tǒng)會(huì)先為改程序創(chuàng)建一個(gè)4GB的進(jìn)程虛擬地址空間(并不是真實(shí)的空間,只是一種數(shù)據(jù)結(jié)構(gòu),就是頁目和頁表)
分頁方法的核心思想就是當(dāng)可執(zhí)行文件執(zhí)行到第x頁時(shí),就為第x頁分配一個(gè)內(nèi)存頁y,然后再講這個(gè)內(nèi)存頁添加到進(jìn)程虛擬地址空間的映射表中,這個(gè)映射表就相當(dāng)于一個(gè)y=f(x)的函數(shù)
評(píng)論