易截截图软件、单文件、免安装、纯绿色、仅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服务器用lighttpd+mysql5+php5+SupeSite/X

一、安装系统环境
1、系统:centos5
2、测试在vm5.5
准备软件
lighttpd-1.4.18
下载地址
mysql-5.0.41
part1下载地址
part2下载地址
part3下载地址
php-5.2.3
下载地址
SupeSite/X-Space
part1下载地址
part2下载地址
part3下载地址
discuz
下载地址
二、搭建web服务器安装过程
1、mysql5安装
$ tar zx ......

linux获取文件的路径名及其文件名的方法

1、简单测试实例
 for i in `find . -type f -name "*.c"`
do
  echo $i
  basename $i    获取*.c文件名
  dirname $i        获取*.c对应的目录名
done
2、实际应用
diff Linux源码,并将有不一样的源码整理在一起,要求:文件 ......

如何成为一个Linux系统内核开发者

  你想成知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动。“这篇文档的目的,就是通过描述你需要经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所需要知道的所有知识。本文也尝试解释社区为什么这样工作的一些原因。
  内核几乎全是用C写成的,有 ......

回顾:东京Linux内核大会合影,No女性

 这是出席在2009年10月20日在东京举行的Linux内核大会合影照。全分辨率照片。一个女性都没有。你认识其中的几位呢?
以下是出席会议的名单,有兴趣的朋友可以对一对:
Al Viro
Alan Cox
Andi Kleen
Andrew Morton
Andy Whitcroft
Arjan van de Ven
Arnd Bergmann
Avi Kivity
Benjamin Herrenschmidt
Brian ......

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

 五:kmem_cache_create()分析
我们以一个例子来跟踪分析一下slab的机制:
下面是一个测试模块的代码:
#include <linux/config.h>
#include <linux/module.h>
#include <linux/slab.h>
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ericxiao <xgr178@163.com>");
MODULE_DESCRI ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号