時間:2019-01-17 10:24:26來æºï¼šMCUé–‹ç™¼åŠ æ²¹ç«™
å¾žæœ¬è³ªä¸Šä¾†è¬›ï¼Œä¸æ–·æ˜¯ä¸€ç¨®é›»ä¿¡è™Ÿï¼Œç•¶è¨å‚™æœ‰æŸç¨®äº‹ä»¶ç™¼ç”Ÿæ™‚ï¼Œå®ƒå°±æœƒç”¢ç”Ÿä¸æ–·ï¼Œé€šéŽç¸½ç·šæŠŠé›»ä¿¡è™Ÿç™¼é€çµ¦ä¸æ–·æŽ§åˆ¶å™¨ã€‚
å¦‚æžœä¸æ–·çš„ç·šæ˜¯æ¿€æ´»çš„ï¼Œä¸æ–·æŽ§åˆ¶å™¨å°±æŠŠé›»ä¿¡è™Ÿç™¼é€çµ¦è™•ç†å™¨çš„æŸå€‹ç‰¹å®šå¼•è…³ã€‚è™•ç†å™¨äºŽæ˜¯ç«‹å³åœæ¢è‡ªå·±æ£åœ¨åšçš„äº‹ï¼Œè·³åˆ°ä¸æ–·è™•ç†ç¨‹åºçš„å…¥å£é»žï¼Œé€²è¡Œä¸æ–·è™•ç†ã€‚
ç¡¬ä¸æ–·
由與系統相連的外è¨(比如網å¡ã€ç¡¬ç›¤)è‡ªå‹•ç”¢ç”Ÿçš„ã€‚ä¸»è¦æ˜¯ç”¨ä¾†é€šçŸ¥æ“作系統系統外è¨ç‹€æ…‹çš„è®ŠåŒ–ã€‚æ¯”å¦‚ç•¶ç¶²å¡æ”¶åˆ°æ•¸æ“šåŒ…çš„æ™‚å€™ï¼Œå°±æœƒç™¼å‡ºä¸€å€‹ä¸æ–·ã€‚æˆ‘å€‘é€šå¸¸æ‰€èªªçš„ä¸æ–·æŒ‡çš„æ˜¯ç¡¬ä¸æ–·(hardirq)。
ç¡¬ä¸æ–·æ˜¯ç”±ç¡¬ä»¶ç”¢ç”Ÿçš„,比如,åƒç£ç›¤ï¼Œç¶²å¡ï¼Œéµç›¤ï¼Œæ™‚é˜ç‰ã€‚æ¯å€‹è¨å‚™æˆ–è¨å‚™é›†éƒ½æœ‰å®ƒè‡ªå·±çš„IRQï¼ˆä¸æ–·è«‹æ±‚)。基于IRQ,CPUå¯ä»¥å°‡ç›¸æ‡‰çš„è«‹æ±‚åˆ†ç™¼åˆ°å°æ‡‰çš„ç¡¬ä»¶é©…å‹•ä¸Šï¼ˆæ³¨ï¼šç¡¬ä»¶é©…å‹•é€šå¸¸æ˜¯å…§æ ¸ä¸çš„一個å程åºï¼Œè€Œä¸æ˜¯ä¸€å€‹ç¨ç«‹çš„進程)。
處ç†ä¸æ–·çš„驅動是需è¦é‹è¡Œåœ¨CPUä¸Šçš„ï¼Œå› æ¤ï¼Œç•¶ä¸æ–·ç”¢ç”Ÿçš„æ™‚候,CPUæœƒä¸æ–·ç•¶å‰æ£åœ¨é‹è¡Œçš„任務,來處ç†ä¸æ–·ã€‚åœ¨æœ‰å¤šæ ¸å¿ƒçš„ç³»çµ±ä¸Šï¼Œä¸€å€‹ä¸æ–·é€šå¸¸åªèƒ½ä¸æ–·ä¸€é¡†CPU(也有一種特殊的情æ³ï¼Œå°±æ˜¯åœ¨å¤§åž‹ä¸»æ©Ÿä¸Šæ˜¯æœ‰ç¡¬ä»¶é€šé“的,它å¯ä»¥åœ¨æ²’有主CPU的支æŒä¸‹ï¼Œå¯ä»¥åŒæ™‚處ç†å¤šå€‹ä¸æ–·ã€‚)。
ç¡¬ä¸æ–·å¯ä»¥ç›´æŽ¥ä¸æ–·CPUã€‚å®ƒæœƒå¼•èµ·å…§æ ¸ä¸ç›¸é—œçš„代碼被觸發。å°äºŽé‚£äº›éœ€è¦èŠ±è²»ä¸€äº›æ™‚é–“åŽ»è™•ç†çš„é€²ç¨‹ï¼Œä¸æ–·ä»£ç¢¼æœ¬èº«ä¹Ÿå¯ä»¥è¢«å…¶ä»–çš„ç¡¬ä¸æ–·ä¸æ–·ã€‚
å°äºŽæ™‚é˜ä¸æ–·ï¼Œå…§æ ¸èª¿åº¦ä»£ç¢¼æœƒå°‡ç•¶å‰æ£åœ¨é‹è¡Œçš„進程掛起,從而讓其他的進程來é‹è¡Œã€‚它的å˜åœ¨æ˜¯ç‚ºäº†è®“調度代碼(或稱為調度器)å¯ä»¥èª¿åº¦å¤šä»»å‹™ã€‚
è»Ÿä¸æ–·
ç‚ºäº†æ»¿è¶³å¯¦æ™‚ç³»çµ±çš„è¦æ±‚ï¼Œä¸æ–·è™•ç†æ‡‰è©²æ˜¯è¶Šå¿«è¶Šå¥½ã€‚linux為了實ç¾é€™å€‹ç‰¹é»žï¼Œç•¶ä¸æ–·ç™¼ç”Ÿçš„æ™‚å€™ï¼Œç¡¬ä¸æ–·è™•ç†é‚£äº›çŸæ™‚é–“å°±å¯ä»¥å®Œæˆçš„工作,而將那些處ç†äº‹ä»¶æ¯”è¼ƒé•·çš„å·¥ä½œï¼Œæ”¾åˆ°ä¸æ–·ä¹‹åŽä¾†å®Œæˆï¼Œä¹Ÿå°±æ˜¯è»Ÿä¸æ–·(softirq)來完æˆã€‚
è»Ÿä¸æ–·çš„處ç†éžå¸¸åƒç¡¬ä¸æ–·ã€‚ç„¶è€Œï¼Œå®ƒå€‘åƒ…åƒ…æ˜¯ç”±ç•¶å‰æ£åœ¨é‹è¡Œçš„進程所產生的。
é€šå¸¸ï¼Œè»Ÿä¸æ–·æ˜¯ä¸€äº›å°I/Oçš„è«‹æ±‚ã€‚é€™äº›è«‹æ±‚æœƒèª¿ç”¨å…§æ ¸ä¸å¯ä»¥èª¿åº¦I/O發生的程åºã€‚å°äºŽæŸäº›è¨å‚™ï¼ŒI/O請求需è¦è¢«ç«‹å³è™•ç†ï¼Œè€Œç£ç›¤I/O請求通常å¯ä»¥æŽ’隊并且å¯ä»¥ç¨åŽè™•ç†ã€‚æ ¹æ“šI/O模型的ä¸åŒï¼Œé€²ç¨‹æˆ–許會被掛起直到I/O完æˆï¼Œæ¤æ™‚å…§æ ¸èª¿åº¦å™¨å°±æœƒé¸æ“‡å¦ä¸€å€‹é€²ç¨‹åŽ»é‹è¡Œã€‚I/Oå¯ä»¥åœ¨é€²ç¨‹ä¹‹é–“產生并且調度éŽç¨‹é€šå¸¸å’Œç£ç›¤I/Oçš„æ–¹å¼æ˜¯ç›¸åŒã€‚
è»Ÿä¸æ–·åƒ…èˆ‡å…§æ ¸ç›¸è¯ç³»ã€‚è€Œå…§æ ¸ä¸»è¦è² 責å°éœ€è¦é‹è¡Œçš„ä»»ä½•å…¶ä»–çš„é€²ç¨‹é€²è¡Œèª¿åº¦ã€‚ä¸€äº›å…§æ ¸å…許è¨å‚™é©…動的一些部分å˜åœ¨äºŽç”¨æˆ¶ç©ºé–“,并且當需è¦çš„æ™‚å€™å…§æ ¸ä¹Ÿæœƒèª¿åº¦é€™å€‹é€²ç¨‹åŽ»é‹è¡Œã€‚
è»Ÿä¸æ–·å¹¶ä¸æœƒç›´æŽ¥ä¸æ–·CPUã€‚ä¹Ÿåªæœ‰ç•¶å‰æ£åœ¨é‹è¡Œçš„ä»£ç¢¼ï¼ˆæˆ–é€²ç¨‹ï¼‰æ‰æœƒç”¢ç”Ÿè»Ÿä¸æ–·ã€‚é€™ç¨®ä¸æ–·æ˜¯ä¸€ç¨®éœ€è¦å…§æ ¸ç‚ºæ£åœ¨é‹è¡Œçš„進程去åšä¸€äº›äº‹æƒ…(通常為I/Oï¼‰çš„è«‹æ±‚ã€‚æœ‰ä¸€å€‹ç‰¹æ®Šçš„è»Ÿä¸æ–·æ˜¯Yieldèª¿ç”¨ï¼Œå®ƒçš„ä½œç”¨æ˜¯è«‹æ±‚å…§æ ¸èª¿åº¦å™¨åŽ»æŸ¥çœ‹æ˜¯å¦æœ‰ä¸€äº›å…¶ä»–的進程å¯ä»¥é‹è¡Œã€‚
䏿–·åµŒå¥—
Linuxä¸‹ç¡¬ä¸æ–·æ˜¯å¯ä»¥åµŒå¥—çš„ï¼Œä½†æ˜¯æ²’æœ‰å„ªå…ˆç´šçš„æ¦‚å¿µï¼Œä¹Ÿå°±æ˜¯èªªä»»ä½•ä¸€å€‹æ–°çš„ä¸æ–·éƒ½å¯ä»¥æ‰“æ–·æ£åœ¨åŸ·è¡Œçš„䏿–·ï¼Œä½†åŒç¨®ä¸æ–·é™¤å¤–ã€‚è»Ÿä¸æ–·ä¸èƒ½åµŒå¥—,但相åŒé¡žåž‹çš„è»Ÿä¸æ–·å¯ä»¥åœ¨ä¸åŒCPU上并行執行。
è»Ÿä¸æ–·æŒ‡ä»¤
intæ˜¯è»Ÿä¸æ–·æŒ‡ä»¤ã€‚
䏿–·å‘é‡è¡¨æ˜¯ä¸æ–·è™Ÿå’Œä¸æ–·è™•ç†å‡½æ•¸åœ°å€çš„å°æ‡‰è¡¨ã€‚
intn-è§¸ç™¼è»Ÿä¸æ–·nã€‚ç›¸æ‡‰çš„ä¸æ–·è™•ç†å‡½æ•¸çš„地å€ç‚ºï¼šä¸æ–·å‘é‡è¡¨åœ°å€+4*n。
ç¡¬ä¸æ–·å’Œè»Ÿä¸æ–·çš„å€åˆ¥
è»Ÿä¸æ–·æ˜¯åŸ·è¡Œä¸æ–·æŒ‡ä»¤ç”¢ç”Ÿçš„ï¼Œè€Œç¡¬ä¸æ–·æ˜¯ç”±å¤–è¨å¼•發的。
ç¡¬ä¸æ–·çš„䏿–·è™Ÿæ˜¯ç”±ä¸æ–·æŽ§åˆ¶å™¨æä¾›çš„ï¼Œè»Ÿä¸æ–·çš„䏿–·è™Ÿç”±æŒ‡ä»¤ç›´æŽ¥æŒ‡å‡ºï¼Œç„¡éœ€ä½¿ç”¨ä¸æ–·æŽ§åˆ¶å™¨ã€‚
ç¡¬ä¸æ–·æ˜¯å¯å±è”½çš„ï¼Œè»Ÿä¸æ–·ä¸å¯å±è”½ã€‚
ç¡¬ä¸æ–·è™•ç†ç¨‹åºè¦ç¢ºä¿å®ƒèƒ½å¿«é€Ÿåœ°å®Œæˆä»»å‹™ï¼Œé€™æ¨£ç¨‹åºåŸ·è¡Œæ™‚æ‰ä¸æœƒç‰å¾…較長時間,稱為上åŠéƒ¨ã€‚
è»Ÿä¸æ–·è™•ç†ç¡¬ä¸æ–·æœªå®Œæˆçš„工作,是一種推åŽåŸ·è¡Œçš„æ©Ÿåˆ¶ï¼Œå±¬äºŽä¸‹åŠéƒ¨ã€‚
開關
(1)ç¡¬ä¸æ–·çš„é–‹é—œ
ç°¡å–®ç¦æ¢å’Œæ¿€æ´»ç•¶å‰è™•ç†å™¨ä¸Šçš„æœ¬åœ°ä¸æ–·ï¼šlocal_irq_disable();local_irq_enable();
ä¿å˜æœ¬åœ°ä¸æ–·ç³»çµ±ç‹€æ…‹ä¸‹çš„ç¦æ¢å’Œæ¿€æ´»ï¼šunsignedlongflags;local_irq_save(flags);local_irq_restore(flags);
(2)è»Ÿä¸æ–·çš„é–‹é—œ
ç¦æ¢ä¸‹åŠéƒ¨ï¼Œå¦‚softirqã€taskletå’Œworkqueueç‰ï¼šlocal_bh_disable();local_bh_enable();
éœ€è¦æ³¨æ„çš„æ˜¯ï¼Œç¦æ¢ä¸‹åŠéƒ¨æ™‚ä»ç„¶å¯ä»¥è¢«ç¡¬ä¸æ–·æ¶å 。
(3)åˆ¤æ–·ä¸æ–·ç‹€æ…‹
#definein_interrupt()(irq_count())//是å¦è™•äºŽä¸æ–·ç‹€æ…‹(ç¡¬ä¸æ–·æˆ–è»Ÿä¸æ–·)#definein_irq()(hardirq_count())//是å¦è™•äºŽç¡¬ä¸æ–·#definein_softirq()(softirq_count())//是å¦è™•äºŽè»Ÿä¸æ–·
è²æ˜Žï¼šæœ¬æ–‡ç‚ºè½‰è¼‰é¡žæ–‡ç« ,如涉åŠç‰ˆæ¬Šå•é¡Œï¼Œè«‹åŠæ™‚è¯ç³»æˆ‘們刪除(QQ:2737591964),ä¸ä¾¿ä¹‹è™•,敬請諒解ï¼
標簽:
上一篇:西克——整åˆç·¨ç¢¼å™¨çš„“OMNI...
下一篇:é德米勒Fieldpower助力DHL分...
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.hysjfh.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊