linux 在启动时获得专用的缓冲

linux 在启动时获得专用的缓冲,第1张

概述如果你真的需要一个大的物理上连续的缓冲, 最好的方法是在启动时请求内存来分配它. 在启动时分配是获得连续内存页而避开 get_free_pages 施加的对缓冲大小限制的唯一 方法, 不但最大允许大小还有限制的大小选择. 在启动时分配内存是一个"脏"技术, 因为 它绕开了所有的内存管理策略通过保留一个私有的内存池. 这个技术是不优雅和不灵活的, 但是它也是最不易失败的. 不必说, 一个模块无法在启

如果你真的需要一个大的物理上连续的缓冲,最好的方法是在启动时请求内存来分配它. 在启动时分配是获得连续内存页而避开 get_free_pages 施加的对缓冲大小限制的唯一 方法,不但最大允许大小还有限制的大小选择. 在启动时分配内存是一个"脏"技术,因为 它绕开了所有的内存管理策略通过保留一个私有的内存池. 这个技术是不优雅和不灵活的,但是它也是最不易失败的. 不必说,一个模块无法在启动时分配内存; 只有直接连接到内 核的驱动可以这样做.

 

启动时分配的一个明显问题是对通常的用户它不是一个灵活的选择,因为这个机制只对连 接到内核映象中的代码可用. 一个设备驱动使用这种分配方法可以被安装或者替换只能通 过重新建立内核并且重启计算机.

 

当内核被启动,它赢得对系统种所有可用物理内存的存取. 它接着初始化每个子系统通过 调用子系统的初始化函数,允许初始化代码通过减少留给正常系统 *** 作使用的 RAM 数量,来分配一个内存缓冲给自己用.

 

启动时内存分配通过调用下面一个函数进行:

 

#include <linux/bootmem.h>

voID *alloc_bootmem(unsigned long size); voID *alloc_bootmem_low(unsigned long size);

voID *alloc_bootmem_pages(unsigned long size); voID *alloc_bootmem_low_pages(unsigned long size);

 

这些函数分配或者整个页(如果它们以 _pages 结尾)或者非页对齐的内存区. 分配的内存 可能是高端内存除非使用一个 _low 版本. 如果你在为一个设备驱动分配这个缓冲,你可 能想用它做 DMA *** 作,并且这对于高端内存不是一直可能的; 因此,你可能想使用一个

_low 变体.

 

很少在启动时释放分配的内存; 你会几乎肯定不能之后取回它,如果你需要它. 但是,有 一个接口释放这个内存:

 

voID free_bootmem(unsigned long addr,unsigned long size);

 

注意以这个方式释放的部分页不返回给系统 -- 但是,如果你在使用这个技术,你已可能 分配了不少数量的整页来用.

 

如果你必须使用启动时分配,你需要直接连接你的驱动到内核. 应当如何完成的更多信息 看在内核源码中 documentation/kbuild 下的文件.

总结

以上是内存溢出为你收集整理的linux 在启动时获得专用的缓冲全部内容,希望文章能够帮你解决linux 在启动时获得专用的缓冲所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1019056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存