mips 内存 linux,MIPS 在linux中的内存映射
如圖:
一些說(shuō)明:
1.內(nèi)核從什么地方開(kāi)始運(yùn)行:MIPS Linux內(nèi)核的代碼構(gòu)建為在kseg0區(qū)運(yùn)行;虛擬地址從0x80000000向上。這個(gè)范圍的地址僅僅是一個(gè)到物理內(nèi)存低512MB的窗口,無(wú)需TLB管理。
2.異常入口點(diǎn):大多數(shù)MIPS CPU中,這都是由硬件布線固化到kseg0底部附近。最新的CPU可以提供EBase寄存器,對(duì)異常入口重新定位。主要是讓多個(gè)共享內(nèi)存的CPU能用不同的異常處理程序而不用費(fèi)力去作特殊的存儲(chǔ)器譯碼。在linux內(nèi)核中,就算有多個(gè)CPU也都運(yùn)行同一個(gè)異常處理代碼,所以這個(gè)特性在linux中不大可能用到。
3.用戶程序從什么地方開(kāi)始運(yùn)行:MIPS Linux應(yīng)用程序(運(yùn)行與低特權(quán)級(jí)的用戶態(tài))虛擬地址從0到0x7FFF FFFF。該區(qū)的地址在用戶態(tài)可以訪問(wèn),要經(jīng)過(guò)TLB地址轉(zhuǎn)換。
應(yīng)用程序的主程序構(gòu)建時(shí)自接近0的地址開(kāi)始運(yùn)行。不會(huì)真為零-----從虛擬0地址開(kāi)始的一兩頁(yè)不做地址映射,這樣企圖使用空指針就會(huì)被當(dāng)作內(nèi)存管理錯(cuò)誤捕獲。應(yīng)用程序的庫(kù)函數(shù)部分,在加載或者更晚的時(shí)候遞增加載到用戶空間。這樣做可以是因?yàn)閹?kù)函數(shù)構(gòu)建為位置無(wú)關(guān)類型,可以根據(jù)實(shí)際被加載的地址空間自動(dòng)調(diào)整。
4.用戶堆和棧:應(yīng)用程序的棧初始設(shè)置到用戶可以訪問(wèn)的空間(約2G虛擬空間)的頂部而且向下增長(zhǎng)。操作系統(tǒng)檢測(cè)到對(duì)已分配的最低棧空間附近未映射的存儲(chǔ)器訪問(wèn)時(shí),會(huì)自動(dòng)映射更多的頁(yè)已滿足棧的增長(zhǎng)。
同時(shí),新的共享庫(kù)或者直接用malloc()分配的用戶數(shù)據(jù)及其后代從用戶空間底部向上增長(zhǎng)。只要這些空間的總和不超過(guò)2GB,什么事都沒(méi)有:除了最大型的服務(wù)器以外,這個(gè)限制基本不成問(wèn)題。
5.512MB以內(nèi)的存儲(chǔ)器:可以通過(guò)kseg()經(jīng)過(guò)高速緩存訪問(wèn)或者通過(guò)kseg1不用高速緩存訪問(wèn)。歷史上,linux內(nèi)核假定自己可以直接訪問(wèn)機(jī)器的全部屋里內(nèi)存。對(duì)于用512MB或者更少物理內(nèi)存范圍的小MIPS系統(tǒng),這是對(duì)的;在這種情況下,全部?jī)?nèi)存都可以在kseg0(用高速緩存)和kseg1(不用高速緩存)區(qū)訪問(wèn)。
6.512MB以上的高位存儲(chǔ)器:現(xiàn)在512MB即使對(duì)于嵌入式系統(tǒng)也已經(jīng)不夠了,Linux有一個(gè)獨(dú)立于硬件體系結(jié)構(gòu)的高位存儲(chǔ)器概念----要用特殊的、依賴于硬件體系結(jié)構(gòu)的方式處理的物理存儲(chǔ)器,對(duì)于32位linux/mips系統(tǒng),512MB以上的屋里內(nèi)存就是高位存儲(chǔ)器。當(dāng)我們要訪問(wèn)時(shí),需要?jiǎng)?chuàng)建適當(dāng)?shù)牡刂忿D(zhuǎn)換數(shù)據(jù)項(xiàng)并且即使復(fù)制到TLB。
總結(jié)
以上是生活随笔為你收集整理的mips 内存 linux,MIPS 在linux中的内存映射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在linux中进程表示的是,Linux进
- 下一篇: linux 安装go编译器,CentOS