免费注册 查看新帖 |

Chinaunix

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

Linux 2.6内核内存初始化问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-30 21:49 |只看该作者 |倒序浏览
在阅读Linux 2.6.12内核内存页表初始化函数kernel_physical_mapping_init中one_page_table_init函数代码如下:
  1. void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal)
  2. {
  3.         pg_data_t *pgdat = pgdat_list;
  4.         void *ptr;

  5.         for_each_pgdat(pgdat)
  6.                 if ((ptr = __alloc_bootmem_core(pgdat->bdata, size,
  7.                                                 align, goal)))
  8.                         return(ptr);

  9.         /*
  10.          * Whoops, we cannot satisfy the allocation request.
  11.          */
  12.         printk(KERN_ALERT "bootmem alloc of %lu bytes failed!\n", size);
  13.         panic("Out of memory");
  14.         return NULL;
  15. }
复制代码
这段代码我怎么读也读不懂!请大家指导我一下,不胜感激,谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2010-07-01 00:38 |只看该作者
具体啥地方不懂?这个函数本身就是在启动时保留一部分内存,不行就PANIC.

论坛徽章:
0
3 [报告]
发表于 2010-07-01 10:16 |只看该作者
这是在bitmap阶段进行的内存分配~  每个bit对应一页内存~
for_each_pgdat(pgdat) 就是历遍bitmap
__alloc_bootmem_core就是从bitmap中分配内存~

论坛徽章:
0
4 [报告]
发表于 2010-07-01 13:28 |只看该作者
one_page_table_init函数的功能是为系统全局目录中的当前页目录申请空间,设置页目录项。可是这段代码怎么实现的申请空间啊?

论坛徽章:
0
5 [报告]
发表于 2010-07-01 22:59 |只看该作者
then you should read : __alloc_bootmem_core()

论坛徽章:
0
6 [报告]
发表于 2010-07-02 08:49 |只看该作者
回复 5# accessory


    我正在阅读这个函数__alloc_bootmem_core(),可感觉太难了,读不懂啊!问一下读这个函数之前是不是必须把setup_arch()中的setup_memory()函数看懂才可阅读__alloc_bootmem_core()函数啊?

论坛徽章:
0
7 [报告]
发表于 2010-07-03 02:07 |只看该作者
google this book:

understanding the Linux virtual memory manager

论坛徽章:
0
8 [报告]
发表于 2010-07-03 09:04 |只看该作者
回复 7# accessory


    OK!下载到了!谢谢!谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP