vmalloc内核函数分析。

来源:互联网 发布:js cookie 代码 编辑:程序博客网 时间:2024/05/21 03:26
http://www.makelinux.net/books/lkd2/ch11lev1sec5

vmalloc 函数常常和kmalloc作为内核申请内存的主要函数,vmalloc申请的内存是内存的虚拟地址是连续的,而kmalloc申请的内存的物理地址是连续的。而内核大多采用kmalloc,主要的原因是由于kmalloc申请的内存是物理上连续的,效率高,而vmalloc申请的内存虚拟地址连续,但是使用的时候需要经过一个页表转换,有开销,效率低。而且某些硬件设备是不经过内存管理单元的。

vmalloc的使用场合是内核模块动态的加载进内核的时候,使用vmalloc,而不是使用kmalloc,或者是需要申请大量的内存区域的时候,使用vmalloc更加合适。
而在内核中使用malloc函数更合适。

vmalloc申请的内存需要使用vfree释放才可以。

点击(此处)折叠或打开

  1. if (kmem_virt(bio_ptr))
  2.             page = vmalloc_to_page(bio_ptr);
  3.         else
  4.             page = virt_to_page(bio_ptr);
这个page是一个内存页面的数据结构,bio_ptr指向的是给定数据(比如dbuf中的数据)。这样通过virt_to_page将这个内核内存虚地址转换到一个页面当中去,然后加入到bio的bio_vec当中,然后通过submit_bio就可以将请求往下送了。
其中bio当中已经包含了block device。所以会自动的进入到该block device的队列当中。

阅读(245) | 评论(0) | 转发(0) |
0

上一篇:apt-get update 更新源Ubuntu 10.10

下一篇:zfs的zio代码部分学习

相关热门文章
  • 每个男人都可以通过展现智慧幽...
  • Flash文件系统TFFS简介
  • 二手惠普HP54600B/HP54600B/HP...
  • 为什么需求分析一定要用工程语...
  • 清单工作法
  • linux 常见服务端口
  • 什么是shell
  • 【ROOTFS搭建】busybox的httpd...
  • linux socket的bug??
  • linux的线程是否受到了保护?...
  • 这样配置的服务器能够承受8k并...
  • vm里的系统能够ping到nfs,但...
  • bind是否随机从两台master中读...
  • 在win7下用cygwin搭建hadoop,...
  • Mysql的binglog日志能否分库备...
给主人留下些什么吧!~~
原创粉丝点击