linuxÈíÖжϻúÖÆ
linuxÈíÖжϻúÖÆ
ÖжϷþÎñ³ÌÐòÍùÍù¶¼ÊÇÔÚCPU¹ØÖжϵÄÌõ¼þÏÂÖ´Ðеģ¬ÒÔ±ÜÃâÖжÏǶÌ×¶øÊ¹¿ØÖƸ´ÔÓ»¯¡£µ«ÊÇCPU¹ØÖжϵÄʱ¼ä²»ÄÜÌ«³¤£¬·ñÔòÈÝÒ×¶ªÊ§ÖжÏÐźš£Îª´Ë£¬ Linux½«ÖжϷþÎñ³ÌÐòÒ»·ÖΪ¶þ£¬¸÷³Æ×÷“Top Half”ºÍ“Bottom Half”¡£Ç°Õßͨ³£¶Ôʱ¼äÒªÇó½ÏΪÑϸñ£¬±ØÐëÔÚÖжÏÇëÇó·¢ÉúºóÁ¢¼´»òÖÁÉÙÔÚÒ»¶¨µÄʱ¼äÏÞÖÆÄÚÍê³É¡£Òò´ËΪÁ˱£Ö¤ÕâÖÖ´¦ÀíÄÜÔ×ÓµØÍê³É£¬Top Halfͨ³£ÊÇÔÚCPU¹ØÖжϵÄÌõ¼þÏÂÖ´Ðеġ£¾ßÌåµØËµ£¬Top HalfµÄ·¶Î§°üÀ¨£º´ÓÔÚIDTÖеǼǵÄÖжÏÈë¿Úº¯ÊýÒ»Ö±µ½Çý¶¯³ÌÐò×¢²áÔÚÖжϷþÎñ¶ÓÁÐÖеÄISR¡£¶øBottom HalfÔòÊÇTop Half¸ù¾ÝÐèÒªÀ´µ÷¶ÈÖ´Ðеģ¬ÕâЩ²Ù×÷ÔÊÐíÑÓ³Ùµ½ÉÔºóÖ´ÐУ¬ËüµÄʱ¼äÒªÇó²¢²»Ñϸñ£¬Òò´ËËüͨ³£ÊÇÔÚCPU¿ªÖжϵÄÌõ¼þÏÂÖ´Ðеġ£
µ«ÊÇ£¬ LinuxµÄÕâÖÖBottom Half£¨ÒÔϼò³ÆBH£©»úÖÆÓÐÁ½¸öȱµã£¬Ò²¼´£º£¨1£©ÔÚÈÎÒâһʱ¿Ì£¬ÏµÍ³Ö»ÄÜÓÐÒ»¸öCPU¿ÉÒÔÖ´ÐÐBottom Half´úÂ룬ÒÔ·ÀÖ¹Á½¸ö»ò¶à¸öCPUͬʱÀ´Ö´ÐÐBottom Halfº¯Êý¶øÏ໥¸ÉÈÅ¡£Òò´ËBH´úÂëµÄÖ´ÐÐÊÇÑϸñ“´®Ðл¯”µÄ¡££¨2£©BHº¯Êý²»ÔÊÐíǶÌס£
ÕâÁ½¸öȱµãÔÚµ¥CPUϵͳÖÐÊÇÎ޹ؽôÒªµÄ£¬µ«ÔÚSMPϵͳÖÐÈ´ÊǷdz£ÖÂÃüµÄ¡£ÒòΪBH»úÖÆµÄÑϸñ´®Ðл¯Ö´ÐÐÏÔȻûÓгä·ÖÀûÓÃSMPϵͳµÄ¶àCPUÌØµã¡£Îª´Ë£¬Linux2.4ÄÚºËÔÚBH»úÖÆµÄ»ù´¡ÉϽøÐÐÁËÀ©Õ¹£¬Õâ¾ÍÊÇËùνµÄ“ÈíÖжÏÇëÇ󔣨softirq£©»úÖÆ¡£
Linux µÄsoftirq»úÖÆÊÇÓëSMP½ôÃܲ»¿É·ÖµÄ¡£Îª´Ë£¬Õû¸ösoftirq»úÖÆµÄÉè¼ÆÓëʵÏÖÖÐ×Ôʼ×ÔÖÕ¶¼¹á³¹ÁËÒ»¸ö˼Ï룺“Ë´¥·¢£¬ËÖ´ÐД£¨Who marks£¬Who runs£©£¬Ò²¼´´¥·¢ÈíÖжϵÄÄǸöCPU¸ºÔðÖ´ÐÐËüËù´¥·¢µÄÈíÖжϣ¬¶øÇÒÿ¸öCPU¶¼ÓÉËü×Ô¼ºµÄÈíÖжϴ¥·¢Óë¿ØÖÆ»úÖÆ¡£Õâ¸öÉè¼ÆË¼ÏëҲʹµÃsoftirq »úÖÆ³ä·ÖÀûÓÃÁËSMPϵͳµÄÐÔÄܺÍÌØµã¡£
LinuxÔÚinclude/linux/interrupt.hÍ·ÎļþÖж¨ÒåÁËÊý¾Ý½á¹¹softirq_action£¬À´ÃèÊöÒ»¸öÈíÖжÏÇëÇó£¬ÈçÏÂËùʾ£º
/* softirq mask and active fields moved to irq_cpustat_t in
* asm/hardirq.h to get better cache usage. KAO
*/
struct softirq_action
{
void (*action)(struct softirq_action *);
void *data;
}
ÆäÖУ¬º¯ÊýÖ¸ÕëactionÖ¸ÏòÈíÖжÏÇëÇóµÄ·þÎñº¯Êý£¬¶øÖ¸ÕëdataÔòÖ¸ÏòÓÉ·þÎñº¯Êý×ÔÐнâÊ͵ÄÊý¾Ý¡£
»ùÓÚÉÏÊöÈíÖжÏÃèÊö·û£¬LinuxÔÚkernel/softirq.cÎļþÖж¨ÒåÁËÒ»¸öÈ«¾ÖµÄsoftirq_vec[32]Êý×飺
static struct softirq_action softirq_vec[32] __cachel
Ïà¹ØÎĵµ£º
ÏàÐÅÊìϤwindows±à³ÌµÄ¸ßÊÖÃǶ¼ÖªµÀ£¬windowsΪÎÒÃÇÌṩһЩapi£¬ÕâЩapiÓÃÓÚhook ¼üÅÌ£¬Êó±ê£¬ÏûÏ¢µÈʼþ¡£windowsµÄÔËÐÐÊÇÀ´Ô´ÓÚÕâЩʼþÇý¶¯µÄ£¬ËùÒÔÒ»µ©ÎÒÃǽػñÁËÕâЩʼþ£¬¾Í¿ÉÒԴ۸ijÌÐò±¾À´µÄ¹¦ÄÜÁË¡£
µ«ÊÇÔÚLinuxÖУ¬²¢²»´æÔÚÕâÑùµÄapi¡£Òª×¥»ñÄÚºËÖеÄinputʼþ£¬¾Í±ØÐëÁíÍâ±à¼Çý¶¯½øÐжîÍâµÄ´¦Àí¡£
ÕâÊÇÒÔǰΠ......
×î½üÒ»Ö±ÔÚ×ölinuxºǫ́ϵͳµÄ²âÊÔ£¬ÐèÒª²é¿´ÏµÍ³ÐÔÄÜÇé¿ö£¬Ê¹Óùýtop£¬vmstat£¬iostat£¬sar£¬memstat£¬pmap£¬Ö÷Òª¸Ð¾õ¾ÍÊDz»Ö±¹Û£¬×îÏëÓиöÏñwindows×ÊÔ´¹ÜÀíÆ÷ÄÇÑùµÄͼ±í¹¤¾ß£¬½ñÌì·¢ÏÖÁËÒ»¸ö±È½ÏºÃµÄ¹¤¾ß£¬ibmµÄÃâ·Ñ¹¤¾ßnmon£¬¿ÉÒÔÔÚlinuxÉÏÏÔʾºÜ¶àÐÔÄÜÖ¸±ê£¬Ò²¿ÉÒԲɼ¯Êý¾ÝÉú³ÉÎļþ£¬È» ......
1# ·¢±íÓÚ 2005-11-15 17:34 Ö»¿´¸Ã×÷Õß
http://www.chinaunix.net ×÷Õß:bierdaci ·¢±íÓÚ£º2004-05-25 18:59:33
²»ÖªµÀ¸Ã²»¸Ã·¢ÕâÀÊÇÎÒ´Óproc¸ÄÀ´µÄ,¶®ÄÚºËÔ´ÂëµÄ½»Á÷½»Á÷
hello.c
[code:1:3adb123188]
#include "hello.h"
struct inode * hello_get_inode(struct s ......
Linux select()Ïê½â
selectϵͳµ÷ÓÃÊÇÓÃÀ´ÈÃÎÒÃǵijÌÐò¼àÊÓ¶à¸öÎļþ¾ä±ú(file descriptor)µÄ״̬±ä»¯µÄ¡£³ÌÐò»áÍ£ÔÚselectÕâÀïµÈ´ý£¬Ö±µ½±»¼àÊÓµÄÎļþ¾ä±úÓÐijһ¸ö»ò¶à¸ö·¢ÉúÁË״̬¸Ä±ä¡£
ÎļþÔÚ¾ä±úÔÚLinuxÀïºÜ¶à£¬Èç¹ûÄãmanij¸öº¯Êý£¬ÔÚº¯Êý·µ»ØÖµ²¿·Ö˵µ½³É¹¦ºóÓÐÒ»¸öÎļþ¾ä±ú±»´´½¨µÄ¶¼ÊÇ ......