色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 解析S3C2410 MMU(存儲器管理單元)

          解析S3C2410 MMU(存儲器管理單元)

          作者: 時間:2018-09-14 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://cafeforensic.com/article/201809/389171.htm

          descriptor_index+=1;section _base +=0x100000)

          {

          *(mmu_tlb_base + (descriptor_index)) = (section _base>>20) | _OTHER_SECDESC;

          }

          }

          上面的這段段代碼把虛擬空間0x3000 0000~0x33FF FFFF映射到物理空間0x3000 0000~0x33FF FFFF,由于虛擬空間與物理空間空間相吻合,所以虛擬地址與他們各自對應的物理地址在值上是一致的。當初始完Translation Table之后,記得要把Translation Table的首地址(第0號描述符的地址)加載進協(xié)處理器CP15的Control Register2(2號控制寄存器)中,該控制寄存器的名稱叫做Translation table base (TTB) register。

          以上討論的是descriptor中的Section Base Address以及虛擬地址和物理地址的映射關(guān)系,然而還有一個重要的功能,那就是訪問控制機制(Access Permission )。

          簡單說訪問控制機制就是CPU通過某種方法判斷當前程序?qū)?nèi)存的訪問是否合法(是否有權(quán)限對該內(nèi)存進行訪問),如果當前的程序并沒有權(quán)限對即將訪問的內(nèi)存區(qū)域進行操作,則CPU將引發(fā)一個異常,s3c2410稱該異常為Permission fault,x86架構(gòu)則把這種異常稱之為通用保護異常(General Protection),什么情況會引起Permission fault呢?比如處于User級別的程序要對一個System級別的內(nèi)存區(qū)域進行寫操作,這種操作是越權(quán)的,應該引起一個Permission fault,搞過x86架構(gòu)的朋友應該聽過保護模式(Protection Mode),保護模式就是基于這種思想進行工作的,于是我們也可以這么說:s3c2410的訪問控制機制其實就是一種保護機制。那s3c2410的訪問控制機制到底是由什么元素去參與完成的呢?它們間是怎么協(xié)調(diào)工作的呢?這些元素總共有:

          1.協(xié)處理器CP15中Control Register3:DOMAIN ACCESS CONTROL REGISTER

          2.段描述符中的AP位和Domain位

          3.協(xié)處理器CP15中Control Register1(控制寄存器1)中的S bit和R bit

          4.協(xié)處理器CP15中Control Register5(控制寄存器5)

          5.協(xié)處理器CP15中Control Register6(控制寄存器6)

          DOMAIN ACCESS CONTROL REGISTER 是訪問控制寄存器,該寄存器有效位為32,被分成16個區(qū)域,每個區(qū)域由兩個位組成,他們說明了當前內(nèi)存的訪問權(quán)限檢查的級別,如下圖所示:

          每區(qū)域可以填寫的值有4個,分別為00,01,10,11(二進制),他們的意義如下所示:

          00:當前級別下,該內(nèi)存區(qū)域不允許被訪問,任何的訪問都會引起一個domain fault

          01:當前級別下,該內(nèi)存區(qū)域的訪問必須配合該內(nèi)存區(qū)域的段描述符中AP位進行權(quán)檢查

          10:保留狀態(tài)(我們最好不要填寫該值,以免引起不能確定的問題)

          11:當前級別下,對該內(nèi)存區(qū)域的訪問都不進行權(quán)限檢查。

          我們再來看看discriptor中的Domain區(qū)域,該區(qū)域總共有4個bit,里面的值是對DOMAIN ACCESS CONTROL REGISTER中16個區(qū)域的索引.而AP位配合S bit和A bit對當前描述符描述的內(nèi)存區(qū)域被訪問權(quán)限的說明,他們的配合關(guān)系如下圖所示:

          AP位也是有四個值,我結(jié)合實例對其進行說明.

          在下面的例子中,我們的DOMAIN ACCESS CONTROL REGISTER都被初始化成0xFFFF BDCF,如下圖所示:


          例1:

          Discriptor 中的domain=4,AP=10(這種情況下S bit ,A bit 被忽略)

          假設(shè)現(xiàn)在我要對該描述符描述的內(nèi)存區(qū)域進行訪問:

          由于domain=4,而DOMAIN ACCESS CONTROL REGISTER中field 4的值是01,系統(tǒng)會對該訪問進行訪問權(quán)限的檢查。

          假設(shè)當前CPU處于Supervisor模式下,則程序可以對該描述符描述的內(nèi)存區(qū)域進行讀寫操作。

          假設(shè)當前CPU處于User模式下,則程序可以對該描述符描述的內(nèi)存進行讀訪問,若對其進行寫操作則引起一個permission fault.

          例2:

          Discriptor 中的domain=0,AP=10(這種情況下S bit ,A bit 被忽略)

          domain=0,而DOMAIN ACCESS CONTROL REGISTER中field 0的值是11,系統(tǒng)對任何內(nèi)存區(qū)域的訪問都不進行訪問權(quán)限的檢查。

          由于統(tǒng)對任何內(nèi)存區(qū)域的訪問都不進行訪問權(quán)限的檢查,所以無論CPU處于合種模式下(Supervisor模式或是User模式),程序?qū)υ撁枋龇枋龅膬?nèi)存都可以順利地進行讀寫操作

          例3:Discriptor 中的domain=4,AP=11(這種情況下S bit ,A bit 被忽略)

          由于domain=4,而DOMAIN ACCESS CONTROL REGISTER中field 4的值是01,系統(tǒng)會對該訪問進行訪問權(quán)限的檢查。

          由于AP=11,所以無論CPU處于合種模式下(Supervisor模式或是User模式),程序?qū)υ撁枋龇枋龅膬?nèi)存都可以順利地進行讀寫操作

          例4:

          Discriptor 中的domain=4,AP=00, S bit=0,A bit=0

          由于domain=4,而DOMAIN ACCESS CONTROL REGISTER中field 4的值是01,系統(tǒng)會對該訪問進行訪問權(quán)限的檢查。

          由于AP=00,S bit=0,A bit=0,所以無論CPU處于合種模式下(Supervisor模式或是User模式),程序?qū)υ撁枋龇枋龅膬?nèi)存都只能進行讀操作,否則引起permission fault.

          通過以上4個例子我們得出兩個結(jié)論:

          1.對某個內(nèi)存區(qū)域的訪問是否需要進行權(quán)限檢查是由該內(nèi)存區(qū)域的描述符中的Domain域決定的。

          2.某個內(nèi)存區(qū)域的訪問權(quán)限是由該內(nèi)存區(qū)域的描述符中的AP位和協(xié)處理器CP15中Control Register1(控制寄存器1)中的S bit和R bit所決定的。

          關(guān)于訪問控制機制我們就講到這里.



          關(guān)鍵詞: S3C2410 MMU 存儲器管理單元

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉