免费注册 查看新帖 |

Chinaunix

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

[内存管理] 请教个内核内存管理的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-26 19:31 |只看该作者 |倒序浏览
我看到书上说:
内核用数据结构page描述一个页框的状态信息,所有的页描述符存放在全局mem_map数组中,其数组的下标为页框号(pfn)。
因为每个描述符长度为32字节,那么一个页描述符怎样与一个占据4k的页框相联系(映射)呢?有了mem_map数组,
这个问题就很简单了。因为如果知道了page数据的地址pd,用pd去减去mem_map就得到了pd的页框号pfn。

可是我对这个有疑问:
比如我的内存是1M,那么1M的内存可以分为1M/4k=256个页面,也就是说mem_map的最大下标是255,
每个页面需要32个字节的描述符,那么256个页面需要32*256个字节,也就是需要32*256/4k=2个页面,
即前面8k的内存是描述符,也就是存放mem_map的内容,即mem_map的地址是0,那么从第三个页面
可是存放数据,那么第三个页面的地址-mem_map的地址应该是8*1024,这个怎么可能是mem_map
的下标呢?
请问我这样理解有什么问题吗?

论坛徽章:
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 [报告]
发表于 2013-10-28 10:41 |只看该作者
回复 1# netdoger

You should know this:

struct a{
   int a1;
};


struct a[10], *p1, *p2;

p1 = a[0];  // assume p1 address  0x100

p2 = a[2]; // p2 address 0x108


"p1 - p2" is eques 2 not 8(0x108-0x100)  

   

论坛徽章:
0
3 [报告]
发表于 2013-10-29 14:33 |只看该作者
非常感谢!

论坛徽章:
1
白羊座
日期:2014-01-05 12:42:56
4 [报告]
发表于 2014-01-05 11:49 |只看该作者
内存地址段位16进制显示 0x2000
页面的地址0000:1000
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP