mips基本位址空間

2021-10-01 08:14:17 字數 1688 閱讀 5097

mips cpu可以執行在兩種特權級別上 : 使用者態和核心態。也就是使用者模式和核心模式。

從核心態切換到使用者態,mips cpu做的工作並沒有不同,只是有時是非法的。在使用者態,任何乙個位址的首位址是非法的,就會引起陷阱異常。另外,在使用者態下,一些指令也會引起異常。在核心模式下,cpu可以做任何事情。在使用者模式下,程式位址超過2gb之上是非法的產生乙個陷阱。

mips的核心模式和使用者模式可以通過cp0暫存器進行配置,具體配置方法參考下圖:

kuseg: 0x00000000~0x7fffffff(2g),這一段空間,為user space,可以在user mode下訪問,當然,在kernel mode下也是可以訪問的。程式在訪問user space的記憶體時,會通過mmu的tlb,對映到實際的實體地址上。也就是說,這一段邏輯位址空間和實體地址空間的對應關係,是由mmu中的tlb表項 決定的。核心空間的copy_to_user和cppy_from_user會訪問到這個空間。

kseg0: 0x80000000~0x9fffffff(512mb), 這段空間虛擬位址轉實體地址的方法是把最高位清零。虛擬位址連續對映到物理記憶體的低512mb。訪問這段物理空間不需要tlb轉換,會經過cache。通常bootloader和kernel會使用這塊空間。

kseg1: 0xa0000000~0xbfffffff(512mb), 這段空間虛擬位址轉實體地址的方法是把高三位清零。虛擬位址連續對映到物理記憶體的低512mb。訪問這段物理空間不需要tlb轉換,不會經過cache。由於使用前不需要初始化tlb和cache,所以這塊空間在系統啟動時可以直接使用,mips啟動入口就設在了kseg1的0x1fc00000。通常i/o空間也設在kseg1。

kseg2和kseg3: 0xc0000000~0xffffffff(1gb),訪問這段物理空間需要tlb轉換,會經過cache。通過vmalloc申請的記憶體位址在這段空間,連續的虛擬位址對映到非連續的實體地址。

kseg0和kseg1都直接對映到實體地址的低512mb。在這段空間,實體地址和虛擬位址都是連續的。

useg和kseg2 kseg3的實體地址需要通過tlb轉換得到。在這些空間,虛擬位址是連續的,實體地址是非連續的。

實體地址0x00000000~0x10000000 和 0x20000000~0x30000000對應ddr的低256m。

實體地址的0x10000000~0x20000000(256m)通常給i/o控制器使用。

如果想使用ddr大於256m的空間,需要使能kernel的高階記憶體,並且使用vmalloc申請空間。(如果沒使能高階記憶體,vmalloc申請到的空間仍然是低256mb)。

核心api的virt_to_phys和phys_to_virt只能用於直接對映的位址空間,也就是虛擬位址0x80000000~0xbfffffff。

個人認為上圖中的實體地址叫做匯流排位址或者邏輯位址更合適一些。我習慣於只把ddr的位址稱作實體地址。

體系架構番外篇 MIPS基本位址空間

from ongoingcre kuseg 低2g位址,所謂的使用者態位址,有mmu被轉化,沒有則不建議使用!kseg0 512m位址,高位清零即可變為實體地址 virt to phys就是高位清零 一般存放作業系統核心!kseg1 512m位址,通過高三位清零來對映到實體地址,kseg1 是唯一的...

基本位址變換機構

重點理解 記憶基本位址變換機構 用於實現邏輯位址到實體地址轉換的一組硬體機構 的原理和流程。1.存放頁表起始位置 2.存放頁表長度 基本位址變換機構可以借助程序的頁表將邏輯位址轉換為實體地址 通常會在系統中設定乙個頁表暫存器 ptr 存放頁表在記憶體中的起始位址f和頁表長度m。程序未執行時,頁表的起...

基本位址變換機構

基本位址變換機構可以借助程序的頁表將邏輯位址轉換為實體地址。通常會在系統中設定乙個頁表暫存器 ptr 存放頁表在記憶體中的起始位址f和頁表長度m。程序未執行時,頁表的始址和頁表長度放在程序控制塊 pcb 中,當程序被排程時,作業系統核心會把它們放到頁表暫存器中。注意 頁面大小是2的整數冪,設頁面大小...