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

Linux内存管理之slab分配器分析(续五)

 九:几点补充:
1: Slab中使用的页面都会加上“PG_slab”标志,以跟一般的页面区别。另外,在释放内存的时候,经常需要用到从页面到slab的对应转换关系。那是怎样标识的呢?
关于标志:
注意有以下代码:
static void *kmem_getpages(kmem_cache_t *cachep, int flags, int nodeid)
{
     ……
     while (i--) {
         //为分得的每一个页面设置PG_slab标志
         SetPageSlab(page);
         page++;
     }
……
}
关于从页面到slab的转换:
  向伙伴系统请求内存
static int cache_grow (kmem_cache_t * cachep, int flags)
{
     ……
     //请求内存过后,设置内存属性
set_slab_attr(cachep, slabp, objp);
……
}
static void set_slab_attr(kmem_cache_t *cachep, struct slab *slabp, void *objp)
{
     int i;
     struct page *page;
     //计算页面总数
     i = 1 << cachep->gfporder;
     //虚拟地址转换成相应页面
     page = virt_to_page(objp);
     do {
         // #define    SET_PAGE_CACHE(pg,x)  ((pg)->lru.next = (struct list_head *)(x))
         SET_PAGE_CACHE(page, cachep);
         #define  SET_PAGE_SLAB(pg,x)   ((pg)->lru.prev = (struct list_head *)(x))
         SET_PAGE_SLAB(page, slabp);
         page++;
     } while (--i);
}
从上面的函


相关文档:

实战Linux Bluetooth编程(六) 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 ......

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

Linux系统程序启动引导过程详细剖析

 Linux的一个吸引人的特性就是用户可以自行定制整个系统,你可是运行一个只有1M的“迷你”Linux,也可以运行一个几G的强大Linux。而无论你运行怎样的Linux,你都是先从引导程序开始运行的。对于普通用户,大多都是在个人电脑上运行Linux的。
  个人电脑,又叫PC机,是我们常见的使用Intel或AMD的芯片的电 ......

在Linux下用buildroot搭建mips/arm的交叉编译平台

 在Linux下用buildroot搭建mips/arm的交叉编译平台
这个编译环境是不能编译for开源无线路由器的程序的,因为内核是2.6的
建议参考这篇: http://www.felix021.com/blog/read.php?1467
前两天买了NetGear WRT614 V9,搭载的是Broadcom的200MHz MIPS处理器。
由于使用的是开源操作系统Linux,所以可以刷网上一些NB的 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号