频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

详解Linux 2.6内核新变化

来源:IBM 作者:Anand K Santhanam 出处:巧巧读书 2005-12-07 进入讨论组
上一页 1 2 3 4 5 6 7 8 9 下一页 
内存管理的变化

  在2.5的开发过程中,加入了内存池,以满足无间断地进行内存分配。其思想是预分配一个内存池,并保留到真正需要的时候。一个内存池由 mempool_create() 调用来创建(应该包含头文件 linux/mempool.h)。

  mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
  mempool_free_t *free_fn, void *pool_data);

  在这里 min_nr 是需要预分配对象的数目,alloc_fn 和 free_fn 是指向内存池机制提供的标准对象分配和回收例程的指针。他们的类型是:

  typedef void *(mempool_alloc_t)(int gfp_mask, void *pool_data);
  typedef void (mempool_free_t)(void *element, void *pool_data);
  pool_data 是分配和回收函数用到的指针,gfp_mask 是分配标记。只有当 __GFP_WAIT 标记被指定时,分配函数才会休眠。

  在池中分配和回收对象是由以下程序完成的:

  void *mempool_alloc(mempool_t *pool, int gfp_mask);
  void mempool_free(void *element, mempool_t *pool);
  mempool_alloc() 用来分配对象;如果内存池分配器无法提供内存,那么就可以用预分配的池。

  系统使用 mempool_destroy() 来回收内存池。

  除了为内存分配引入了内存池之外,2.5内核还引入了三个用于常规内存分配的新的GFP标记,它们是:

  __GFP_REPEAT -- 告诉页分配器尽力去分配内存。如果内存分配失败过多,应该减少这个标记的使用。

  __GFP_NOFAIL -- 不能出现内存分配失败。这样,由于调用者被转入休眠状态,可能需要一段比较长的时间才能完成分配,调用者的需求才能得到满足。

  __GFP_NORETRY -- 保证分配失败后不再重试,而向调用者报告失败状态。

  除了内存分配的变化以外,remap_page_range()调用——用来映射页到用户空间——也经过了少量修改。相对于2.4来说,现在它多了一个参数。虚拟内存区域(VMA)指针要作为第一个参数,然后是四个常用的参数(start,end,size 和 protection 标记)。打开: http://www.qqread.com/linux/z421145206.html 更多文章 更多内容请看Linux集群技术体验Linux的音影世界Linux驱动大全专题,或进入讨论组讨论。

上一页 1 2 3 4 5 6 7 8 9 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章