Linux内存管理 内存分配函数的选择
内存分配函数的选择
如果你需要连续的物理页,就可以使用某个低级页分配器或者kmalloc()。这是内核中内存分配的常用方式,也是大多数情况下你自己应该使用的内存分配方式。传递给这些函数最常用的两个标志是GFP_AUTOMIC和GFP_KERNEL。GFP_AUTOMIC表示进行不睡眠的高优先级分配。这是中断程序和其他不能睡眠的代码段的需要。对于可以睡眠的代码,比如没有持自旋锁的进程上下文代码,则应该使用GFP_KERNEL获取所需内存。这个标志表示,如果有必要,分配时可以睡眠。
如果想从高端内存进行分配,就使用alloc_pages()。alloc_pages()函数返回一个指向struct page结构的指针,而不是指向某个逻辑地址的指针。因为高端内存很有可能并没有被映射,因此访问它的唯一方式是通过相应的struct page结构。为了获得真正的指针,应噶调用kmap(),把高端内存映射到内核的逻辑地址空间。
如果你不需要物理上连续的页,而仅仅需要虚拟地址上连续的页, 那么就使用vmalloc()(不过要记住vmalloc()相对kmalloc()有一定的性能损失)。vmalloc()分配的内存虚拟地址式是连续的,但它本身并不能保证物理上的连续。这与用户空间的分配非常类似,它也是把物理内存块映射到连续的逻辑地址空间上。
如果你要创建和销毁很多较大的数据结构,那么应该考虑建立slab高速缓存。Slab层会给每个处理器维持一个对象高速缓存(空闲链表),这种高速缓存会极大的提高对象分配和回收的性能。Slab层不是频繁地分配和释放内存,而是为你把事先分配好的对象存放到高速缓存中,当你需要一块新的内存来存放数据结构时,slab层一般无需另外去分配内存,而只需从高速缓存中得到一个对象就可以了。
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
十年以来,全球
Linux
界有哪些重要进展,人们应该知道?对此,人们可以有不同的看法,但是,大家总得有个大致相同的认识。实际情况怎样呢?
......
不同的国家和地区因文化的差异,在日期、时间以及货币符号等表示方式上都不完全相同,最为明显的就是语言。有时在编写软件给用户使用时,开发者、维
护者以及最终用户可能分别来自不同的区域,而要求他们均使用同一种语言显然是不明知的,因此当一个程序或者软件编写给全世界人使用时,通常分为两个部分:
国际化 (intern ......
在Linux操作系统下修改IP、DNS和路由配置
ifconfig eth0 新ip
然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip
一、修改IP地址
[aeolus@db1 network-scripts]$ vi ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=219.136.241.211
NETMASK=255 ......