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