Linux É豸Çý¶¯ Edition 3) workqueue
7.5. Tasklets »úÖÆ
ÉÏÒ»Ò³
µÚ 7 Õ ʱ¼ä, ÑÓʱ, ºÍÑÓºó¹¤×÷
ÏÂÒ»Ò³
http://lsec.cc.ac.cn/~tengfei/doc/ldd3/index.html
Linux É豸Çý¶¯ Edition 3
7.5. Tasklets »úÖÆ
ÁíÒ»¸öÓйØÓÚ¶¨Ê±ÎÊÌâµÄÄÚºËÉèÊ©ÊÇ tasklet »úÖÆ. Ëü´ó²¿·ÖÓÃÔÚÖжϹÜÀí(ÎÒÃǽ«ÔÚµÚ 10 ÕÂÔٴμûµ½).
tasklet ÀàËÆÄں˶¨Ê±Æ÷ÔÚijЩ·½Ãæ. ËüÃÇÒ»Ö±ÔÚÖжÏʱ¼äÔËÐÐ, ËüÃÇÒ»Ö±ÔËÐÐÔÚµ÷¶ÈËüÃǵÄͬһ¸ö CPU ÉÏ, ²¢ÇÒËüÃǽÓÊÕÒ»¸ö
unsigned long ²ÎÊý. ²»ÏóÄں˶¨Ê±Æ÷, µ«ÊÇ, ÄãÎÞ·¨ÇëÇóÔÚÒ»¸öÖ¸¶¨µÄʱ¼äÖ´Ðк¯Êý. ͨ¹ýµ÷¶ÈÒ»¸ö tasklet,
Äã¼òµ¥µØÇëÇóËüÔÚÒÔºóµÄÒ»¸öÓÉÄÚºËÑ¡ÔñµÄʱ¼äÖ´ÐÐ. Õâ¸öÐÐΪ¶ÔÓÚÖжϴ¦ÀíÌØ±ðÓÐÓÃ, ÄÇÀïÓ²¼þÖжϱØÐë±»¾¡¿ì´¦Àí,
µ«ÊǴ󲿷ֵÄʱ¼ä¹ÜÀí¿ÉÒÔ°²È«µØÑÓºóµ½ÒÔºóµÄʱ¼ä. ʵ¼ÊÉÏ, Ò»¸ö tasket, ¾ÍÏóÒ»¸öÄں˶¨Ê±Æ÷,
ÔÚÒ»¸ö"ÈíÖжÏ"µÄÉÏÏÂÎÄÖÐÖ´ÐÐ(ÒÔÔ×Óģʽ), ÔÚʹÄÜÓ²¼þÖжÏʱִÐÐÒì²½ÈÎÎñµÄÒ»¸öÄں˻úÖÆ.
Ò»¸ö tasklet ´æÔÚΪһ¸öʱ¼ä½á¹¹, Ëü±ØÐëÔÚʹÓÃǰ±»³õʼ»¯. ³õʼ»¯Äܹ»Í¨¹ýµ÷ÓÃÒ»¸öÌØ¶¨º¯Êý»òÕßͨ¹ýʹÓÃijЩºê¶¨ÒåÉùÃ÷½á¹¹:
#include <linux/interrupt.h>
struct tasklet_struct {
/* ... */
void (*func)(unsigned long);
unsigned long data;
};
void tasklet_init(struct tasklet_struct *t,
void (*func)(unsigned long), unsigned long data);
DECLARE_TASKLET(name, func, data);
DECLARE_TASKLET_DISABLED(name, func, data);
tasklet ÌṩÁËÐí¶àÓÐȤµÄÌØÉ«:
Ò»¸ö tasklet Äܹ»±»½ûÖ¹²¢ÇÒÖ®ºó±»ÖØÐÂʹÄÜ; Ëü²»»áÖ´ÐÐÖ±µ½Ëü±»Ê¹ÄÜÓë±»½ûÖ¹ÏàͬµÄµÄ´ÎÊý.
Èçͬ¶¨Ê±Æ÷, Ò»¸ö tasklet ¿ÉÒÔ×¢²áËü×Ô¼º.
Ò»¸ö tasklet Äܱ»µ÷¶ÈÀ´Ö´ÐÐÒÔÕý³£µÄÓÅÏȼ¶»òÕ߸ßÓÅÏȼ¶. ºóÒ»×éÒ»Ö±ÊÇÊ×ÏÈÖ´ÐÐ.
taslet ¿ÉÄÜÁ¢¿ÌÔËÐÐ, Èç¹ûϵͳ²»ÔÚÖØÔØÏÂ, µ«ÊÇ´Ó²»»áÍíÓÚÏÂÒ»¸öʱÖÓàÖßÕ.
Ò»¸ö tasklet ¿ÉÄÜºÍÆäËû tasklet ²¢·¢, µ«ÊǶÔËü×Ô¼ºÊÇÑϸñµØ´®ÐÐµÄ -- ͬÑùµÄ tasklet ´Ó²»Í¬Ê±ÔËÐÐÔÚ³¬¹ýÒ»¸ö´¦ÀíÆ÷ÉÏ. ͬÑù, ÈçÒѾÌáµ½µÄ, Ò»¸ö tasklet ³£³£ÔÚµ÷¶ÈËüµÄͬһ¸ö CPU ÉÏÔËÐÐ.
jit Ä£¿é°üÀ¨ 2 ¸öÎļþ, /proc/jitasklet ºÍ /proc/jitasklethi,
Ëü·µ»ØºÍÔÚ"Äں˶¨Ê±Æ÷"Ò»½ÚÖнéÉܹýµÄ /proc/jitimer ͬÑùµÄÊý¾Ý. µ±Äã¶ÁÆäÖÐÒ»¸öÎļþʱ, ÄãÈ¡»ØÒ»¸ö header ºÍ
sixdata ÐÐ. µÚÒ»¸öÊý¾ÝÐÐÃèÊöÁ˵÷Óýø³ÌµÄÉÏÏÂÎÄ, ²¢ÇÒÆäËûµÄÐÐÃèÊöÁËÒ»¸ö tasklet ¹ý³ÌÁ¬ÐøÔ
Ïà¹ØÎĵµ£º
ÔÚVFSµÄÖ§³ÖÏ£¬Óû§Ì¬½ø³Ì¶ÁдÈκÎÀàÐ͵ÄÎļþϵͳ¶¼¿ÉÒÔʹÓÃreadºÍwrite×ÅÁ½¸öϵͳµ÷Ó㬵«ÊÇÔÚlinuxÄÚºËÖÐûÓÐÕâÑùµÄϵͳµ÷ÓÃÎÒÃÇÈçºÎ²Ù×÷ÎļþÄØ£¿ÎÒÃÇÖªµÀreadºÍwriteÔÚ½øÈëÄÚºË̬֮ºó£¬Êµ¼ÊÖ´ÐеÄÊÇsys_readºÍsys_write£¬µ«ÊDz鿴ÄÚºËÔ´´úÂ룬·¢ÏÖÕâЩ²Ù×÷ÎļþµÄº¯Êý¶¼Ã»Óе¼³ö(ʹÓÃEXPORT_SYMBOLµ¼³ö)£¬Ò²¾ÍÊÇ˵ÔÚÄÚºË ......
errno±äÁ¿(Ðèinclude errno.h)»á±»¸³Ò»¸öÕûÊýÖµ,²»Í¬µÄÖµ±íʾ²»Í¬µÄº¬Òå,
¿ÉÒÔͨ¹ý²é¿´¸ÃÖµÍÆ²â³ö´íµÄÔÒò¡£µ«ÊÇerrnoÊÇÒ»¸öÊý×Ö£¬´ú±íµÄ¾ßÌ庬Òå
»¹Òªµ½errno.hÖÐÈ¥ÔĶÁºê¶¨Òå¡£ÓÐÏÂÃæ¼¸ÖÖ·½·¨¿ÉÒÔ·½±ãµÄµÃµ½´íÎóÐÅÏ¢
(Ò»)
#include <stdio.h>
void perror(const char *s)
perror()ÓÃÀ´½«ÉÏÒ»¸öº¯Êý·¢Éú´íÎóµÄ ......
Linux»·¾³ÏµÄÈí¼þ°²×°£¬²¢²»ÊÇÒ»¼þÈÝÒ×µÄÊÂÇ飻Èç¹ûͨ¹ýÔ´´úÂë±àÒëºóÔÚ°²×°£¬µ±È»ÊÂÇé¾Í¸üΪ¸´ÔÓһЩ£»ÏÖÔÚ°²×°¸÷ÖÖÈí¼þµÄ½Ì³Ì¶¼·Ç³£ÆÕ±é£»µ«Íò±ä²»ÀëÆäÖУ¬¶Ô»ù´¡ÖªÊ¶µÄÔúÊµÕÆÎÕ£¬°²×°¸÷ÖÖÈí¼þµÄÎÊÌâ¾ÍÓÈжø½âÁË¡£Configure½Å±¾ÅäÖù¤¾ß¾ÍÊÇ»ù´¡Ö®Ò»£¬ËüÊÇautoconfµÄ¹¤¾ßµÄ»ù±¾Ó¦Óá£
ÓëһЩ¼¼ÇÉÏà±È£¬ConfigureÏԵûù´ ......
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Èí¼þ°ü£¬²»ÖªµÀΪʲôÎÒµÄûÓУ¬»¹ºÃû¹ØÏµ£ ......