MIPS 在linux中的内存映射
来源:互联网 发布:开淘宝店铺步骤 编辑:程序博客网 时间:2024/04/27 19:33
如图:
一些说明:
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 二 MIPS的内存映射
- 深入浅出MIPS 二 MIPS的内存映射
- 深入浅出MIPS 二 MIPS的内存映射
- 深入浅出MIPS 二 MIPS的内存映射
- 深入浅出MIPS MIPS的内存映射
- 深入浅出MIPS 二 MIPS的内存映射 .
- mips 的内存映射问题
- Cavium MIPS的内存布局和映射
- windows中的内存映射
- uboot中的内存映射
- Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
- Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
- Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
- Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
- linux中的 IO端口映射和IO内存映射
- linux中的 IO端口映射和IO内存映射
- linux中的 IO端口映射和IO内存映射【转】
- The BASEDIR environment variable is not defined correctly This environment variable is needed to run
- 高质量程序设计指南:C++/C语言
- C#应用01-access登陆界面
- 设计和输出一个钻石图形
- 表连接-sql1999标准
- MIPS 在linux中的内存映射
- android 裁剪图片
- 我的第十八个C++上机报告(编程序,输出1/3-3/5+5/7-7/9…+19/21的结果)
- mountvol命令修改磁盘分区/光驱的盘符
- 第十周上机项目一:利用循环求和
- InvocationHandler的一个例子
- 花生哥的伤感爱情日志:伤害我,你会心痛吗?
- Extjs4.0学习指南
- 谈数据库索引和Sqlite中索引的使用