LinuxÄں˴úÂë·ÖÎö slab.c by Áõ¿º
LinuxÄں˴úÂë·ÖÎö slab.c by Áõ¿º liukang@bjut.edu.cn
slab.cÀ´×ÔlinuxÄÚºË2.4.22°æ£¬±¾Îļþ°´ÕÕGNUÐÒé·¢²¼¡£
Ò»¡¢×¼±¸ÖªÊ¶£º
slabµÄ¸ÅÄ
Ìá³öµÄÔÒò£ºÓÉÓÚ²Ù×÷ϵͳÔÚÔËÐÐÖл᲻¶Ï²úÉú¡¢Ê¹Óá¢ÊÍ·Å´óÁ¿Öظ´µÄ¶ÔÏó£¬
ËùÒÔ¶ÔÕâÑùµÄÖØ¸´¶ÔÏóµÄÉú³É½øÐиĽø¿ÉÒÔ´ó´óÌá¸ßЧÂÊ
×îÔçÓÉsunµÄ¹¤³ÌʦÌá³ö(1994Äê)²¢Ê×ÏÈÔÚsunos5.4ÉÏÓ¦Óá£
slabËã·¨µÄ»ù±¾Ë¼Â·£º
·ÖÅ䣺
if(¶ÔÏà¶ÔÓ¦µÄ»º´æÇøÓпÕÏÐλÖÃ)
ʹÓÃÕâ¸öλÖ㬲»±ØÔÙ³õʼ»¯£»
else{
·ÖÅäÄڴ棻
³õʼ»¯¶ÔÏó£»
}
ÊÍ·Å£º
ÔÚ»º´æÖбê¼Ç¿ÕÏУ¬²»×öÎö¹¹£»
×ÊÔ´²»×㣺
ѰÕÒδʹÓõĶÔÏó¿Õ¼ä£»
°´ÕÕÒªÇó¶Ô²¿·Ö¶ÔÏó×öÎö¹¹£»
ÊͷŶÔÏóÕ¼ÓõĿռ䣻
»º´æÇø£ºÃ¿Ò»¸ö¶ÔÏó·ÅÔÚÒ»¸ö»º´æÇø
slab£ºÃ¿¸öslab¿é¶¼ÊÇÒ³Ãæ´óСµÄÕûÊý±¶£¨ÓÐÉÏÏÞ£©
×ÅÉ«£º×Ö½ÚÊý°´ÕÕÓ²¼þµÄÒªÇó¶ÔÆë£¬¿ÉÒÔ´ó´óÌá¸ßÓ²¼þ»º´æµÄÀûÓÃÂʺÍЧÂÊ¡£
slab¿éµÄÁ½ÖÖ¹ÜÀíģʽ£º
on-slab ÊÊÓÃÓÚС¶ÔÏó£¨Ð¡ÓÚ1/8Ò³£©£¬slab¹ÜÀí½á¹¹´æ·ÅÔÚslab¿éÖС£
off-slabÊÊÓÃÓÚ´ó¶ÔÏó£¬(´óÓÚµÈÓÚ1/8Ò³),¶ÔÏóºÍslab¿éµÄ¹ÜÀí½á¹¹¶¼ÓÉcache_slabpÖзÖÅä¡£
¸ù¾ÝslabÌá³öÕßµÄÂÛÎÄ,slab²»ÊʺÏÓÃÔÚ´ó¶ÔÏóÉÏ¡£
slabÉæ¼°µÄÖØÒª²Ù×÷£º
»º´æÇø´´½¨kmem_cache_createÓëÏú»Ùkmem_cache_destory
»º´æÇøÊÕËõkmem_cache_shrinkÓëÀ©ÕÅkmem_cache_grow
¶ÔÏó·ÖÅäkmem_cache_allocÓëÊÍ·Åkmem_cache_free
ÄÚºË̬ÄÚ´æµÄÉêÇëkmallocÓëÊÍ·Åkfree
¶þ¡¢Éæ¼°µÄÖØÒªÊý¾Ý½á¹¹£º
typedef unsigned int kmem_bufctl_t£ºslab¿éÖеĹÜÀí½á¹¹
cache_size±í£º±£´æÁ˲»Í¬´óС(2^n)Ò³ÃæÖ¸Ïòcache_cacheµÄÁ½ÖÖÖ¸Õë(dmaºÍ·Çdma)¡£
Á´±í£º×îÖØÒªµÄÊÇÔÚ¹ÜÀíslab½á¹¹ÖгöÏÖµÄ3¸öÁ´±í£¬·Ö±ðΪÍêȫʹÓõ쬲¿·ÖʹÓõĺÍÍêȫûÓùýµÄslab¡£
½á¹¹Ì壺¼ûÏÂÃæµÄ´úÂë·ÖÎö¡£
Èý¡¢´úÂë·ÖÎö£º
ÿ¸öÑÕÉ«´ú±íµÄº¬Ò壺
ºìÉ«£º´úÂë×¢ÊÍ£»
źºÉÉ«£º±àÒëÔ¤´¦ÀíÐèÒª´¦ÀíµÄÄÚÈÝ£»
À¶É«£ºCÓïÑԹؼü×Ö¡¢º¯Êý¶¨Ò壻
ÂÌÉ«£ººê¶¨Ò壻
ºÚÉ«£º´úÂ룻
»ÒÉ«£ºÊä³öÐÅÏ¢£»
ÉîÀ¶É«£ºÎÒ¸ø³öµÄ×¢½â¡£
/*
* linux/mm/slab.c
* Written by Mark Hemment, 1996/97.
* (markhe@nextd.demon.co.uk)
*
* kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli
*
* Major cleanup, different bufctl logic, per-cpu arrays
* (c) 2000 Manfred Spraul
*ÒÔÉÏΪ°æÈ¨ÐÅÏ¢
* An implementation of the Slab Allocator as described in outline in;
* UNIX Internals: The N
Ïà¹ØÎĵµ£º
http://hi.baidu.com/j_fo/blog/item/a43fa60fa6e2f4eaab6457d5.html
Linux2.6ÄÚºËepoll½éÉÜ
2008-11-05 16:35
http://blog.csdn.net/rstevens/archive/2007/10/30/1858067.aspx
http://hi.baidu.com/jmlover/blog/item/24c28b131e6b48d7f7039ee6.html
http://hi.baidu.com/jmlover/blog/item/e64df724f12926348744f9 ......
http://hi.baidu.com/j_fo/blog/item/55f4014f1a226937aec3ab01.html
Linux Kernel Thread µÄÌÖÂÛ
2007-05-14 11:45
kernel thread
Gearheads Written by Sreekrishnan Venkateswaran
Thursday, 15 September 2005
Threads are programming abstractions used in concurrent processing. A ke ......
1¡¢¼ì²â
°²×°Ö®Ç°Ïȼì²âÊÇ·ñÕâЩÈí¼þ°üÒѰ²×°£¬·½·¨ÈçÏ£º[root@localhost
root]#rpm -q telnet»ò[root@localhost root]#rpm -q telnet-client
[root@localhost root]#rpm -q
telnet-server
Èç¹ûûÓмì²âµ½Èí¼þ°ü£¬ÐèÒª½øÐа²×°£¬¾Ý˵red hat Linux
9ĬÈÏÒѰ²×°ÁËtelnetÈí¼þ°ü£¬²»ÖªµÀΪʲôÎÒµÄûÓУ¬»¹ºÃû¹ØÏµ£ ......
7.5. Tasklets »úÖÆ
ÉÏÒ»Ò³
µÚ 7 Õ ʱ¼ä, ÑÓʱ, ºÍÑÓºó¹¤×÷
ÏÂÒ»Ò³
http://lsec.cc.ac.cn/~tengfei/doc/ldd3/index.html
Linux É豸Çý¶¯ Edition 3
7.5. Tasklets »úÖÆ
ÁíÒ»¸öÓйØÓÚ¶¨Ê±ÎÊÌâµÄÄÚºËÉèÊ©ÊÇ tasklet »úÖÆ. Ëü´ó²¿·ÖÓÃÔÚÖжϹÜÀí(ÎÒÃǽ«ÔÚµÚ 10 ÕÂÔٴμûµ½). ......
½ñÌì×Ô¼ºÑ§Ï° LinuxÉ豸Çý¶¯³ÌÐò µÚÈý°æ µÚ15Õ ÄÚ´æÓ³ÉäºÍDMA. ¸Ð¾õÓеã³ÔÁ¦¡£Ö÷ÒªÊǶÔÄÚ´æÓ³ÉäºÜ¶àÊõÓïºÍ¸ÅÄî²»ÊǺÜÇå³þ£¬Àí½âÆðÀ´Óеã·Ñ¾¢¡£
ºóÀ´½áºÏÓ¢ÎÄ԰棬¾²ÏÂÐÄÀ´×Ðϸѧϰ£¬²ÅËãÊÇÓÐÁËÒ»µã½øÕ¹¡£
ÏÖÔÚÔÚÕâÀï×öÒ»¸ö±Ê¼Ç£¬ÒÔ±¸ÒÔºó¸´Ï°Óá£
µÍ¶ËÄÚ´æºÍ¸ß¶ËÄÚ´æ
ÊéÖеÄͼ15-1ÓеãÎóµ¼ÈË¡£Í¼Öн« ÄÚºËÐéÄâµØÖ· ºÍ ......