MMU記憶體管理單元

2021-08-10 17:47:42 字數 2548 閱讀 8250

mmu記憶體管理單元主要負責虛擬位址到實體地址的對映。在沒有使用虛擬儲存器的機器上,虛擬位址被直接送到記憶體匯流排上,使具有相同位址的物理儲存器被讀寫。而在使用了虛擬儲存器的情況下,虛擬位址不是被直接送到記憶體位址匯流排上,而是送到記憶體管理單元—mmu,再由mmu對映到物理記憶體中。

如上圖所示,使用了mmu的叫做虛擬位址,沒有使用的就是實體地址。

虛擬位址與實體地址之間是如何轉換的了?下面這一篇個人覺得講的挺透徹的

對於arm架構,常用的為**-頁表,常用的有段對映,乙個**大小為1m,

大多數使用虛擬儲存器的系統都使用一種稱為分頁(paging)。虛擬位址空間劃分成稱為頁(page)的單位,而相應的實體地址空間也被進行劃分,單位是頁框(frame).頁和頁框的大小必須相同。

二.程式

1.makefile

objs := head.o init.o leds.o

mmu.bin : $(objs)

arm-linux-ld -tmmu.lds -o mmu_elf $^

arm-linux-objcopy -o binary -s mmu_elf $@

arm-linux-objdump -d -m arm mmu_elf > mmu.dis

%.o:%.c

arm-linux-gcc -wall -o2 -c -o $@ $<

%.o:%.s

arm-linux-gcc -wall -o2 -c -o $@ $<

clean:

rm -f mmu.bin mmu_elf mmu.dis *.o

2.mmu.lds

sections

second    0xb0004000 : at(2048)

}3.head.s

.text

.global _start

_start:

ldr sp, =4096                       @ 設定棧指標,以下都是c函式,呼叫前需要設好棧

bl  disable_watch_dog               @ 關閉watchdog,否則cpu會不斷重啟

bl  memsetup                        @ 設定儲存控制器以使用sdram

bl  copy_2th_to_sdram               @ 將第二部分**複製到sdram

bl  create_page_table               @ 設定頁表

bl  mmu_init                        @ 啟動mmu

ldr sp, =0xb4000000                 @ 重設棧指標,指向sdram頂端(使用虛擬位址)

ldr pc, =0xb0004000                 @ 跳到sdram中繼續執行第二部分**

@ ldr pc, =main

halt_loop:

b   halt_loop

4.init.c

/** init.c: 進行一些初始化,在steppingstone中執行

* 它和head.s同屬第一部分程式,此時mmu未開啟,使用實體地址

*/ /* watchdog暫存器 */

#define wtcon           (*(volatile unsigned long *)0x53000000)

/* 儲存控制器的暫存器起始位址 */

#define mem_ctl_base    0x48000000

/** 關閉watchdog,否則cpu會不斷重啟

*/void disable_watch_dog(void)

/** 設定儲存控制器以使用sdram

*/void memsetup(void)

;int     i = 0;

volatile unsigned long *p = (volatile unsigned long *)mem_ctl_base;

for(; i < 13; i++)

p[i] = mem_cfg_val[i];}/*

* 將第二部分**複製到sdram

*/void copy_2th_to_sdram(void)}/*

*設定頁表

*/void create_page_table(void)

}/** 啟動mmu

*/void mmu_init(void)

4.main.c

與第一張所用的led.c一樣

本次程式在前面的基礎上實現了兩個功能

1.使虛擬位址0xa0000000對映為0x56000000(暫存器位址)

2.0xb0000000對映為0x30000000

MMU記憶體管理單元介紹

本篇文章簡要闡述mmu的概念,以及以段位址的轉換過程為例,簡單說明mmu將虛擬位址轉換成實體地址的過程。更多詳細內容請檢視 arm mmu 中文手冊 pdf mmu的實現過程,實際上就是乙個查表對映的過程。建立頁表 translate table 是實現mmu功能不可缺少的一步。頁表是位於系統的記憶...

記憶體管理單元MMU實驗

mmu介紹 許可權管理 當我們使用windows時,有時候會彈出位址訪問錯誤,但這不影響整個作業系統的執行。假設a b程式的時序圖如下 因為a b程式的位址空間各不相同。許可權管理就使得a程式無法訪問b程式的位址。如果a程式寫的非常糟糕,a程式並不能破壞核心。假如有兩個hello.c檔案,如圖 這兩...

MMU記憶體管理單元簡介

mmu 全稱叫做 memory manage unit,也就是記憶體管理單元。在老版本的 linux 中要求處理器必須有 mmu,但是現在 linux 核心已經支援無 mmu 的處理器了。mmu 主要完成的功能如下 虛擬位址 va,virtual address 實體地址 pa,physcicala...