免费注册 查看新帖 |

Chinaunix

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

[内存管理] 确定内核占用的物理页 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-13 14:42 |只看该作者 |倒序浏览
      小弟有个问题一直想不明白,物理内存是以页为单元的,那么当linux运行起来,由mem_map数组的pfn得到page结构,既一个物理页后,有什么方法能够确定这个物理页是内核占用的还是用户进程占用的呢?
      其实也不知道这个问题是否问的正确,还请大侠指点。

论坛徽章:
0
2 [报告]
发表于 2012-07-14 21:24 |只看该作者
这个问题问的有点让我晕。
page这个数据结构本身是可以知道这个物理的页如何被用。
但是,一个物理页是可以被多个任务,以及内核引用的。
例如共享内存就是这样的。

所以你到底要问什么呢?

论坛徽章:
0
3 [报告]
发表于 2012-07-14 21:30 |只看该作者
回复 1# zhuwentao0612


    应该是地址的访问权限吧。如果大于3G,肯定是内核的进程了。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
4 [报告]
发表于 2012-07-14 22:55 |只看该作者
回复 1# zhuwentao0612
如果内核配置时选上WANT_PAGE_VIRTUAL
每个已经map的物理页面都有对应的virtual address, struct page 里有这一项virtual。 找到了物理page指针p, 查看p->virtual就知道这页被用户还是内核使用了。

   

论坛徽章:
0
5 [报告]
发表于 2012-07-15 13:42 |只看该作者
我的意思是,这个页已经被占用了,怎么确定这个页是用户空间某个进程正在使用这个页呢?还是内核自身在使用这个页呢?回复 2# hanhai118


   

论坛徽章:
0
6 [报告]
发表于 2012-07-15 13:44 |只看该作者
差不多是这个意思吧,想确定这个页是内核在使用还是用户进程在使用。回复 3# 怪怪虎


   

论坛徽章:
0
7
发表于 2012-07-15 13:46
嗯,这个方法不错,如果虚拟地址在3G-4G之间的话肯定这个页是被内核使用的?是这个意思?回复 4# linuxfellow


   

论坛徽章:
0
8 [报告]
发表于 2012-07-15 15:14 |只看该作者
大于3G的,肯定是内核的code在使用,
但是这块code可以属于用户进程,像如果应用程序中有open这个系统调用,最终肯定是用内核的代码。
我也想找个能看出这样布局的例子,可是还没找到。

论坛徽章:
0
9 [报告]
发表于 2012-07-15 15:44 |只看该作者
open这个例子,应该可以这样理解吧?应用程序调用open函数,此时占用的物理页都属于用户空间占用,而当执行到系统调用,陷入内核态后,使用的页面则属于内核自己占用的?当返回到用户态后,使用的又是用户空间占用的页面?回复 8# 怪怪虎


   

论坛徽章:
0
10 [报告]
发表于 2012-07-15 17:25 |只看该作者
一个c程序,程序员看到的是虚拟地址,上边的理解对虚拟地址肯定是这样的。
虚拟地址经过MMU(页式转换)的转换后,变成物理内存地址。 其中权限的限制应该在MMU转换的部分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP