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中的内存映射相关推荐
- C++中运行一个程序的内存分配情况及qt中的内存管理机制
一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一 ...
- Linux驱动学习--android中的内存管理机制ION(二)--ION的使用
目录 一.引言 二.ION框架 ------> heap类型 ------> ion特性 三.ion的使用 ------> 基本数据结构 ------> 具体的使用 四.ion ...
- linux java 进程内存_linux – 在java进程中消耗内存的是什么?
我们正在尝试在中等负载下研究 java进程的内存使用情况. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12663 test 20 0 ...
- 从内存溢出看Java 环境中的内存结构
作为有个java程序员,我想大家对下面出现的这几个场景并不陌生,倍感亲切,深恶痛绝,抓心挠肝,一定会回过头来问为什么为什么为什么会这样,嘿嘿,让我们看一下我们日常在开发过程中接触内存溢出的异常: Ex ...
- new arraylist内存_如何避免内部类中的内存泄漏
我先假设读者已经熟悉在Java代码中使用嵌套类的基础知识.在本文里,我将展示嵌套类的陷阱,内部类在JVM中引起内存泄漏和内存不足错误的地方.之所以会发生这种类型的内存泄漏,是因为内部类必须始终能够访问 ...
- java 内存堆和栈_java中堆内存与栈内存的知识点总结
一.概述 在Java中,内存分为两种,一种是栈内存,另一种就是堆内存. 二.堆内存 1.什么是堆内存? 堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者 ...
- Linux驱动学习--android中的内存管理机制ION(一)--简单介绍
目录 一.引言 二.ION的介绍及使用 ------> ION介绍 ------> ION的使用 ------> HEAP种类 三.接口分析 ------> 主要数据结构 -- ...
- Linux 在 TOP 命令中切换内存的显示单位
2019独角兽企业重金招聘Python工程师标准>>> 顶部的内存信息可以在top运行时按E切换,每次切换转换率为1000,只是没有单位,切换的单位为 k,m,g,t,p: 底下的进 ...
- 获取计算机内存镜像文件,计算机取证中的内存镜像获取的研究与实现
摘要: 随着计算机科学技术的迅猛发展和网络普及,以计算机信息系统为工具和j巳罪对象的各式新型j巳罪案件频繁发生,造成的巨大危害也越来越大.怎么可以最大程度地获取计算机j巳罪相关的计算机证据,将犯罪人员 ...
- 程序的内存分配----变量在可执行文件中的内存区分配
一. 预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分: 程序代码区(.text) - 存放函数体的二进制代码 文字常量区(.rodata) - 常量字符串就是 ...
最新文章
- WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现...
- android cpp做成so库,Android增量更新(二)—制作合成文件so库
- JSTL 格式化 BigDecimal对象
- Arduino的光敏传感器和超声波测距传感器测试代码
- 周永亮 《我是职业人》
- Python list,tuple,dict,set高级变量常用方法
- 斐讯k1潘多拉专版固件_斐讯K1刷专版潘多拉固件以及教程(使用感受)
- rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令
- Java Web学习总结(44)—— RESTful 架构和 RESTful API 设计总结
- JAVA 面向对象的一些基础理解
- UVA10602 Editor Nottoobad【贪心】
- 【基础教程】关于matlab GUI重命名的问题【739期】
- 拆机清灰重装系统数据恢复——心得汇总
- selenium+crop+chaojiying 之模拟登录超级鹰
- 【matlab 图像处理】图像锐化
- 一起学习Spring boot 2.1.X | 第十五篇:登陆拦截器
- python 打印乘法表各种形式_Python使用while循环花式打印乘法表
- AD生成BOM表_材料清单 (Bill of Material)
- 安诺伦代理iduron品牌——为学术研究和制药行业提供独特的糖胺聚糖产品系列
- 办公软件excel表格_推荐这个免费的Excel共享编辑办公软件,操作很灵活、功能很全...