易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux页框级内存管理处理细节

弄清楚伙伴系统算法的原理以后,我们就可以开开心心地处理页框了。
我们可以通过6个稍有差别的函数和宏请求页框。一般情况下,他们都返回第一个所分配页的线性地址,或者分配失败则返回NULL。
alloc_pages(gfp_mask, order):用这个函数请求2order 个连续的页框。他返回第一个所分配页框描述符的地址,或者如果失败,则返回NULL。
alloc_page(gfp_mask):用于获得一个单独页框的宏,它其实只是alloc_pages(gfp_mask, 0)。它返回所分配页框描述符的地址,或者如果分配失败,则返回NULL。
_ _get_free_pages(gfp_mask, order):该函数类似于alloc_pages( ),只不过它返回第一个所分配页对应的内存线性地址。
_ _get_free_page(gfp_mask):用于获得一个单独页框的宏,它也只是__get_free_pages(gfp_mask, 0)
get_zeroed_page(gfp_mask):函数用来获取满是0的页面,它调用alloc_pages(gfp_mask | __GFP_ZERO, 0),然后返回所获取页框的线性地址。
_ _get_dma_pages(gfp_mask, order):该宏获取用于DMA的页框,它扩展调用__get_free_pages(gfp_mask | _ _GFP_DMA, order)。
参数gfp_mask是一组标志,它指明了如何寻找空闲的页框:
 
标志
说明
_ _GFP_DMA
所请求的页框必须处于ZONE_DMA 管理区。
_ _GFP_HIGHMEM
所请求的页框处于ZONE_HIGHMEM 管理区
_ _GFP_WAIT
允许内核对等待空闲页框的当前进程进行阻塞
_ _GFP_HIGH
允许内核访问保留的页框池
_ _GFP_IO
允许内核在低端内存页上执行I/O 传输以释放页框
_ _GFP_FS
如果清0,则不允许内核执行依赖于文件系统的操作
_ _GFP_COLD
所请求的页框可能为“冷的”
_ _GFP_NOWARN
一次内存分配失败将不会产生警告信息
_ _GFP_REPEAT
内核重试内存分配直到成功
_ _GFP_NOFAIL
与__GFP_REPEAT 相同
_ _GFP_NORETRY
一次内存分配失败后不再重试
_ _GFP_NO_GROW
slab 分配器不允许增大slab 高速缓存
_ _GFP_COMP
属于扩展页的页框
_ _GFP_ZERO
任何返回的页框必须被填满0
下面4个函数和宏中的任意一个都可以释放页框:
_ _free_pages(page, order):该函数首先查找page指向的页描述符;如果该页框未被保留(PG_reserved标志为0),就把描述符count字段减1。如果count字段变为0,就假定从page对应页框开始的2order个连续页框不再被使用,在这种情况下,该函数释放页框。
free_pages(addr, order):这个函数类似于 _ _free_pages( ),只不过它接收的参数为要


相关文档:

在linux下 获取本机MAC地址的函数

//获取本机MAC地址函数QString GetLocalMac()
{
int sock_mac;

struct ifreq ifr_mac;
char mac_addr[30];

sock_mac = socket( AF_INET, SOCK_STREAM, 0 );
if( sock_mac == -1)
{
perror("create socket falise...mac\n");
return "";
}

memset(&ifr_mac,0,sizeof(ifr_mac));
......

写得蛮好的linux学习笔记

写得蛮好的linux学习笔记
linux目录架构
/   根目录
/bin    常用的命令 binary file 的目錄
/boot   存放系统启动时必须读取的档案,包括核心 (kernel) 在内
     /boot/grub/menu.lst   GRUB设置
     /boot/vmlinuz& ......

Linux里设置环境变量的方法

在Linux里设置环境变量的方法(export PATH)一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量:
1、直接用export命令:
#expor ......

Linux Shell笔记 (一)

1、变量和运算  (注:从上往下一步一步执行)
   1.本地变量在用户现在的shell生命期的脚本中使用
   variable-name=value 例如:test="test"
 
   2.set显示本地所有的变量
   3.设成只读变量:readonly variable-name 例如:test="cynric" 会 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号