专栏中心

EEPW首页 > 专栏 > 关于Linux内存管理的认识

关于Linux内存管理的认识

发布人:hikesoso2010 时间:2011-05-07 来源:工程师 发布文章

  我们都知道,内核把线性地址(大多数情况也叫虚拟地址)分为三个部分:物理内存映射区,VMALLOC映射区以及固定映射地址区。这里主要讨论前两种。

  所谓的物理内存映射区是指与物理内存一一映射的区域。举个例子来说,如果系统有物理内存512M,那么从0xc0000000至0xc00000000+512M的线性地址就属于物理内存映射区。这块线性地址在系统初始化时就与物理内存建立起一一对应的关系。这里的一一映射是指物理地址和线性地址就差一个偏移量0xc0000000,函数__pa()就是直接把线性地址减去0xc0000000得到物理地址。所以该函数应用范围也就局限于物理地址映射区。对另两个地址区进行__pa()是错误的。道理很简单,物理地址都没那么大。

  VMALLOC映射区的特点是连续的线性地址,其物理地址不一定连续。这种映射特点和用户地址空间的映射方式是一样的。而前面讲的物理内存映射区,线性地址和物理地址显然都是连续的。当然了,最后的映射肯定是指线性地址和物理地址之间的映射。所以这部分的线性地址最终也需映射到物理内存中。这就会和物理内存映射区产生冲突:因为所有的物理内存在物理内存映射区已经有了一个线性地址了。但是我们知道,物理内存并不是每时每刻都在使用的,也就是说虽然它已经映射了,但是还没有人使用它。那么我们可以在VMALLOC映射区中先映射到那些没使用的内存并锁住。这样这些内存就不会再被分配作为其他用途。所以虽然映射有冲突,但是没有两个线性地址在同时使用。

  因为VMALLOC映射区的线性地址和物理地址没有固定的映射关系,我们只能通过查找页表来找到对应的物理页框。值得一提的是,物理页框(struct page结构体)的vitual字段仍然存放的是物理内存映射区的线性地址,也就是说如果对该物理地址进行__page_to_vir()运算后,所得的线性地址不是VMALLOC映射区的线性地址。

     Linux好学堂www.linuxhao.com,提供Linux视频教程,Linux培训教程,Linux技术资料免费下载与资源共享等服务。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

Protel 99 SE 视频教程 —— 第六节 绘制PCB印制电路板(1)

视频 2010-01-19

Protel 99 SE 视频教程 —— 第七节 绘制PCB印制电路板(2)

视频 2010-01-19

东风汽车集团、兵装集团同日宣布筹划重组

使用 OpenVINO™ 条件编译功能,压缩 Windows 应用体积

电池程序

资源下载 2007-04-19

求救

liyunfeng0 2004-10-29

了解环形调制器如何产生AM信号

基于 LabVIEW 和 YOLOv8-Pose 的跳绳计数装置

利用低损耗LED驱动器,提高电源系统的“绿色”进程

模拟电子技术 第二讲

视频 2010-01-20

电池C程序

资源下载 2007-04-19

模拟电子技术 第一讲

视频 2010-01-20

总投资15亿元!浙江湖州吴兴零跑新能源汽车电池包项目开工

传导致英伟达股价暴跌的DeepSeek拥有5万颗GPU

智能计算 2025-02-10

春晚科技 「秧」 光:人形机器人未来已来

电容式阵列传感器实现触觉的测量

带限流保护的可调稳压电源

英特尔开发板试用:图像检测算法在RFID生产中产品缺陷检测的应用

深度剖析新能源汽车主流 AI 芯片选型

模拟电子技术 第三讲

视频 2010-01-20
更多 培训课堂
更多 焦点
更多 视频

技术专区