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