免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2122 | 回复: 9
打印 上一主题 下一主题

探究一下内存物理地址使用情况 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-25 20:25 |只看该作者 |倒序浏览
本人想在Linux2.6内核下做一个探究内存地址使用情况的小应用,能够实现查找占用给定物理地址区间的进程;
初步的想法是在内核态下记录各进程占用的逻辑地址,传递到用户态下,再将用户给定的物理区间转化成为逻辑地址进行查找;
但是……LZ才疏学浅,不知道该如何实现这一目标,也不知道从哪里下手……
请牛人指点……

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2012-03-26 08:30 |只看该作者
回复 1# six_fish
本人想在Linux2.6内核下做一个探究内存地址使用情况的小应用,能够实现查找占用给定物理地址区间的进程;
初步的想法是在内核态下记录各进程占用的逻辑地址,传递到用户态下,再将用户给定的物理区间转化成为逻辑地址进行查找;

思路是有问题的。不同的进程,有不同的虚拟地址,所以你无法将用户给定的物理区间转化为逻辑地址的,因为你根本就不知道这个物理地址到底属于哪个进程。
既然你想在内核态下记录进程的逻辑地址,为什么不直接记录进程分配的物理地址呢?

还有一种思路,可能会效率慢,但是比较简单,不需要修改内核,只需要写个内核模块,实现虚拟地址到物理地址的转换就可以了。

   

论坛徽章:
0
3 [报告]
发表于 2012-03-26 08:35 |只看该作者
回复 2# 瀚海书香


    额。。。我对这个了解的还真是不多,话说可以直接拿到进程的物理地址吗?
还有,你说的那个内核模块是怎么实现的呀?
求知识……

论坛徽章:
0
4 [报告]
发表于 2012-03-26 08:42 |只看该作者
不知道楼主的目标基于啥需求。
物理页面分配给用户进程,即使进程不退出,所对应的虚拟地址也有可能换进换出,对应的物理页面不同时刻也可以这个进程或那个进程或内核其他组件使用。
关键是用户进程基于虚拟地址工作,知道了瞬间对应的物理地址还能有什么作为?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
5 [报告]
发表于 2012-03-26 08:50 |只看该作者
回复 3# six_fish
额。。。我对这个了解的还真是不多,话说可以直接拿到进程的物理地址吗?
还有,你说的那个内核模块是怎么实现的呀?

在内核里没有干不了的事。
内核模块就是一个虚拟地址到物理地址的转换。看看这个博文吧http://blog.chinaunix.net/uid-20662820-id-142448.html
   

论坛徽章:
0
6 [报告]
发表于 2012-03-26 08:58 |只看该作者
回复 4# azfa123


     呵呵,只是兴趣所致而已,正在学习内核方面知识,想作为实践,练练手。
我想得到的最好的结果就是能够动态的反馈给用户,当前占用该段内存的进程信息,不知道能不能做到……

论坛徽章:
0
7 [报告]
发表于 2012-03-26 09:17 |只看该作者
回复 5# 瀚海书香


    恩,谢过斑竹

论坛徽章:
0
8 [报告]
发表于 2012-03-26 09:38 |只看该作者
回复 6# six_fish


    以我的理解能力,你看是不是可以这样,每个物理地址对应一个struct page 结构,要在这个结构里面加东西,肯定不是一个字段,因为一个物理地址可能对应很多进程,至少需要一个链表,再搞把锁?但是内存管理和内核其他各个模块都有瓜葛,最起码调度程序里需要修改代码(比如:fork多了个进程肯定往里面加个),文件系统、刚才说的换进挂出肯定也要操作。当然这些基础设施搭好了,写个模块导出就简单了。不过这个基础设施个人觉得用来做实验,是不是太大了点?

    版主的意思是,看单个进程的逻辑地址其对应的物理地址,这个不用改基础架构,这个实验简单点,可以先玩玩!

论坛徽章:
0
9 [报告]
发表于 2012-03-26 12:00 |只看该作者
按照我的理解,楼主的想法是不是和“反向映射”雷同啊?

论坛徽章:
0
10 [报告]
发表于 2012-03-26 12:46 |只看该作者
我的理解就是楼主想要知道一个进程对应的物理地址是什么。因为每一个user space的elf程序都是通过kernel下的load_elf_binary来进行加载的,然后把elf程序要运行所需要的一下参数通过寄存器(mips)或者是stack传递个glibc,所以这个user space所运行的物理地址,load_elf_binary这个函数中应该会分配(没有实际check过代码,但是做过glibc的loader部分,肯定这个信息会kernel会传递出来),所以楼主只要把这个地址记录下来,在配合/proc/pid/maps这个文件就可以计算出这个elf程序所对应的physical region了

只是我的一点思路,多指正~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP