linux tasklet 2
http://hi.baidu.com/j_fo/blog/item/7412bb018deab109728da572.html
LinuxÄÚºË irq/soft irq/tasklet/ͬ²½
2009-10-08 21:22
1.Öжϴ¦Àí³ÌÐò½áÊø֮ǰ£¬²»ÔÊÐí²úÉúÏàͬµÄÖжÏʼþ£»£¨½ûÓÃPICÉϸÃÖжϣ¬µ«¿ÉÒÔ²úÉúÆäËûÖжϣ©
2.Öжϴ¦Àí³ÌÐò¡¢ÈíÖжϡ¢tasklet¼È²»¿É±»ÇÀÕ¼Ò²²»Äܱ»×èÈû£¬×î¶à·¢ÉúÖжÏǶÌ×£»
3.Ö´ÐÐÖжϴ¦ÀíµÄÄں˷¾¶²»Äܱ»Ö´ÐÐÑÓ³Ùº¯Êý»òϵͳµ÷Ó÷þÎñÀý³ÌµÄÄں˿ØÖÆ·¾¶Öжϡ£
ÓÚÊÇÓÐÈçϽáÂÛ£º
a.Öжϴ¦Àí³ÌÐòºÍtasklet²»±ØÊÇ¿ÉÖØÈëµÄ£»
b.½ö±»ÈíÖжϺÍtasklet·ÃÎʵÄÿCPU±äÁ¿²»ÐèҪͬ²½£»
c.½ö±»Ò»ÖÖtasklet·ÃÎʵÄÊý¾Ý²»ÐèҪͬ²½¡£
ÈíÖжϣ¨¼´±ãÊÇͬһÖÖÀàÐ͵ÄÈíÖжϣ©¿ÉÒÔ²¢·¢µØÔËÐÐÔÚ¶à¸öCPUÉÏ¡£
ͬÀàÐ͵Ätasklet×ÜÊDZ»´®Ðл¯Ö´ÐУ¬²»»áÔÚÁ½¸öCPUÉÏͬʱÔËÐÐÏàͬÀàÐ͵Ätasklet¡£
Ò»¸ötasklet¿ÉÒÔ±»µ÷¶È¶à´Î£¬µ«Êµ¼ÊÖ»»áÔËÐÐÒ»´Î¡£
static inline void tasklet_schedule(struct tasklet_struct *t)
{
if (!test_and_set_bit
(TASKLET_STATE_SCHED, &t->state))
__tasklet_schedule(t);
}
ÁíÍâ²Î¼ûdo_softirq > _do_softirq > tasklet_action
Ò»¸öÖжϴ¦Àí³ÌÐò¼È¿ÉÒÔÇÀÕ¼ÆäËûµÄÖжϴ¦Àí³ÌÐò£¬Ò²¿ÉÒÔÇÀÕ¼Òì³£´¦Àí³ÌÐò£»
Òì³£´¦Àí³ÌÐò´Ó²»ÇÀÕ¼Öжϴ¦Àí³ÌÐò£»
Öжϴ¦Àí³ÌÐò´Ó²»Ö´Ðпɵ¼ÖÂȱҳµÄ²Ù×÷£¨Òâζ׎ø³ÌÇл»£©£»
Öжϴ¦Àí³ÌÐò±ØÐëÓÀ²»×èÈû£¬¼´²»·¢Éú½ø³ÌÇл»£¡
Èç¹ûÒ»¸öÊý¾Ý½á¹¹½ö±»ÖжϳÌÐò“Éϰ벿·Ö”·ÃÎÊ£¬·ÃÎÊÊý¾Ý½á¹¹¾ÍÎÞÐèÈκÎͬ²½£¬ÒòΪÿ¸öÖжϴ¦Àí³ÌÐò¶¼Ïà¶ÔÓÚ×Ô¼º´®ÐеÄÖ´ÐС£
Èç¹û¶à¸öÖжϴ¦Àí³ÌÐò·ÃÎÊÒ»¸öÊý¾Ý½á¹¹£¬ÔÚµ¥´¦ÀíÆ÷ÉÏ£¬±ØÐëÔÚÖжϴ¦Àí³ÌÐòµÄËùÓÐÁÙ½çÇøÉϽûÖ¹ÖжÏÀ´±ÜÃ⾺Õù£»ÔڶദÀíÆ÷ÉÏ£¬±ØÐë½ûÖ¹±¾µØÖжϣ¬²¢»ñÈ¡±£»¤Êý¾Ý½á¹¹µÄ×ÔÐýËø»ò¶ÁдËø¡£
ÈíÖжÏÊÇ¿ÉÖØÈ뺯Êý£¬±ØÐëÃ÷ȷʹÓÃ×ÔÐýËø±£»¤½á¹¹Êý¾Ý£¨ÒòΪ¿ÉÄÜÔÚ¶à¸öCPUÉÏͬʱִÐУ©£»
Èç¹ûij¸öÖжϳÌÐò“Éϰ벿·Ö”Ò²»á·ÃÎʸÃÊý¾Ý½á¹¹£¬Ôò±ØÐëÔÚÓµÓÐ×ÔÐýËøµÄʱºò½ûÖ¹Öжϣ¬ÒÔÃâËÀËø£¡
½öÓÉÒ»ÖÖtasklet·ÃÎʵÄÊý¾Ý½á¹¹²»ÐèÒª±£»¤£¬ÒòΪͬÖÖtasklet²»Äܲ¢·¢ÔËÐС£
¹ØÓÚtaskletµÄÒ»µã˵Ã÷£º
1.Ç°ÊöµÄÒ»ÖÖ»òÒ»¸ötasklet£¬¶¼ÊÇÖ¸Ò»¸ö£¬ÒÔtasklet½á¹¹ÌåµÄÄÚ´æµØÖ·Çø·Ö£¬²»Í¬µØÖ·µÄtasklet¼´Îª²»Í¬µÄtasklet£¬¼´Ê¹Á½¸ö
tasklet½á¹¹ÌåµÄfuncÖ¸ÕëÖ¸Ïòͬһ¸öÖжÏÉ豸µÄͬһ¸öÑÓ³Ù´¦Àíº¯Êý£¬ÉõÖÁÄÚÈÝÍêÈ«ÏàµÈ£¬¶¼Ëã×÷²»Í¬£¨ÖÖÀࣩµÄtasklet£¬¾ÍÐèÒª´¦Àíͬʱִ
ÐÐʱµÄͬ²½²Ù×÷ÎÊÌ⣻£¨°üÀ¨¡¶
Ïà¹ØÎĵµ£º
ѧ¹ý²Ù×÷ϵͳµÄÈËÖªµÀÓÐÒ»¸ö·Ç³£ÖøÃûµÄÎÊÌ⣺¶ÁÕߣдÕßÎÊÌâ¡£¶ÁÕߣдÕßÎÊÌâÊÇָϵͳµ±ÖеĵÄ×ÊÔ´ÔÚijһʱ¼äÀï¿ÉÒÔͬʱÔÊÐí¶à¸ö½ø³Ì¶Á£¬µ«Ö»ÔÊÐíÒ»¸ö½ø³Ìд¡£Õâ¸ö½ø³Ìͬ²½ÎÊÌâµÄ½â·¨ÓÐÐí¶àÖÖ£¬ÔÚwindowϵͳÀïÓû¥³â±äÁ¿À´½øÐнø³ÌµÄͬ²½¡£ÔÚLinuxÀïÓÐÁíÒ»ÖÖ·½·¨£¬ÄǾÍÊÇÎļþËø£¬ÎļþËøÀïµÄÎļþ²»µ¥µ¥Ö»Ö¸Æ½Ê±Ëù˵µÄÎļþËüÓ ......
Ò»ÄêÒ»¶ÈµÄLinux¿ª·¢Õß´ó»áÉÏÖÜÔھɽðɽ¾ÙÐУ¬»áÉÏLinux»ù½ð»áÖ´ÐÐÀíÊÂJim Zemlin±íʾ£¬µÃÒæÓÚÔƼÆËãÒÔ¼°ÆäËü¿Æ¼¼³±Á÷µÄ³öÏÖ£¬LinuxµÄÊг¡µØλʮ·ÖÎȹ̣¬È»¶øһЩÖ÷ÒªµÄά»¤ÈËÔ±ÒѾÈÕ½¥²ÔÀÏ£¬ºó¼ÌÕßÈ´»¹Ã»ÓгÉÊì¡£
sysfsÄÚºË×Óϵͳά»¤ÕßGrey Kroah-HartmanÖ¸³ö£º“ÉϲãµÄÈËÔ±ÈÔȻà ......
1. gccµÄ__attribute__±àÒïÊôÐÔ
ÒªÁ˽âLinux Kernel´úÂëµÄ·Ö¶ÎÐÅÏ¢£¬ÐèÒªÁ˽âÒ»ÏÂgccµÄ__attribute__µÄ±àÒïÊôÐÔ£¬__attribute__Ö÷ÒªÓÃÓڸıäËùÉùÃ÷»ò¶¨ÒåµÄº¯Êý»òÊý¾ÝµÄÌØÐÔ£¬ËüÓкܶà×ÓÏÓÃÓڸıä×÷ÓöÔÏóµÄÌØÐÔ¡£±ÈÈç¶Ôº¯Êý£¬noline½«½ûÖ¹½øÐÐÄÚÁªÀ©Õ¹¡¢noreturn±íʾûÓзµ»ØÖµ¡¢pure±íÃ÷º¯Êý³ý·µ»ØÖµÍ⣬²»»áͨ¹ýÆäËü ......
errno±äÁ¿(Ðèinclude errno.h)»á±»¸³Ò»¸öÕûÊýÖµ,²»Í¬µÄÖµ±íʾ²»Í¬µÄº¬Òå,
¿ÉÒÔͨ¹ý²é¿´¸ÃÖµÍƲâ³ö´íµÄÔÒò¡£µ«ÊÇerrnoÊÇÒ»¸öÊý×Ö£¬´ú±íµÄ¾ßÌ庬Òå
»¹Òªµ½errno.hÖÐÈ¥ÔĶÁºê¶¨Òå¡£ÓÐÏÂÃ漸ÖÖ·½·¨¿ÉÒÔ·½±ãµÄµÃµ½´íÎóÐÅÏ¢
(Ò»)
#include <stdio.h>
void perror(const char *s)
perror()ÓÃÀ´½«ÉÏÒ»¸öº¯Êý·¢Éú´íÎóµÄ ......