内存管理二之映射篇
来源:互联网 发布:淘宝同学官网 编辑:程序博客网 时间:2024/05/23 15:58
上篇提到了内存管理的一些基本概念,本片介绍内存管理的虚拟地址与物理地址之间的映射关系。
2.0 内核空间与物理地址之间的映射
内核空间地址为3G~4G。由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物理地址空间,就要将全部物理地址映射到1G的内核线性空间中,这显然不可能。于是,内核将0~896M的物理地址空间一一映射到自己的线性地址空间中,这样他便可以随时访问ZONE_DMA和ZONE_NORMAL里的物理页面;此时内核剩下的128M线性地址空间不足以完全映射所有的ZONE_HIGHMEM,linux采取了动态映射的方法,即按需的将ZONE_HIGHMEM里的物理页面映射到kernel space的最后128M线性地址空间里,使用完之后释放映射关系,以供其他物理页面映射。虽然这样存在效率的问题,但是内核毕竟可以正常的访问所有的物理地址空间了。
2.1 用户空间与物理地址之间的映射
关于内核空间和用户空间,说的是linux驱动程序一般工作在内核空间,但也可以工作在用户空间。
Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为"用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。
Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1GB字节虚拟内核空间则为所有进程以及内核所共享。
内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。
简单理解为:内核空间是内核使用,用户空间是应用程序使用;除非编译内核要考虑内核空间,其余情况都可以按照用户空间处理
- 内存管理二之映射篇
- 高端内存映射之kmap持久内核映射--Linux内存管理(二十)
- 高端内存映射之kmap_atomic固定映射--Linux内存管理(二十一)
- Linux内存管理之高端内存映射
- Linux内存管理之高端内存映射
- Linux内存管理之高端内存映射
- Linux内存管理之高端内存映射
- Windows编程那些事----内存管理方法之二【内存映射文件】
- 内存管理之二
- Linux kernel 分析之二十:内存管理-内核中的页表映射总结
- linux虚拟内存管理 之 内存映射
- mmap内存映射操作之二
- java内存管理之二
- Linux内存管理之高端内存映射(转贴)
- Linux内存管理(二)——地址映射
- linux高端内存管理之永久内核映射
- linux高端内存管理之临时内核映射
- linux高端内存管理之永久内核映射
- Android 代码混淆异常 transformClassesAndResourcesWithProguardForRelease FAILED
- 淘宝联盟分享赚怎么赚钱?
- 魅族和三星Galaxy 5.0webView 问题Android Crash Report - Native crash at /system/lib/libc.so caused by webvi
- 数据结构------绪论
- 拷贝构造函数和赋值操作符在继承中的应用
- 内存管理二之映射篇
- gitlab 添加key 报500错误
- Mobile phones(POJ_1195)
- mysql常用操作
- JSP :java.lang.ClassCastException:
- MFC多文档模式开发
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
- 用Javascript(js)进行HTML转义工具(处理特殊字符显示)
- 排序算法性能比较练习——《数据结构、算法与应用》