1.å¦ä½è·å¾ä¼å
级å¨Linuxç¯å¢ç¼ç¨ä¸ï¼
å¦ä½è·å¾ä¼å 级å¨Linuxç¯å¢ç¼ç¨ä¸ï¼
ä»ä¹æ¯å®æ¶ç³»ç»ï¼POSIX .bä½äºè¿æ ·çå®ä¹ï¼æç³»ç»è½å¤å¨éå®çååºæ¶é´å æä¾æéæ°´å¹³çæå¡ãèä¸ä¸ªç±Donald Gilliesæåºçæ´å 为大家æ¥åçå®ä¹æ¯ï¼ä¸ä¸ªå®æ¶ç³»ç»æ¯æ计ç®çæ£ç¡®æ§ä¸ä» åå³äºç¨åºçé»è¾æ£ç¡®æ§ï¼ä¹åå³äºç»æ产ççæ¶é´ï¼å¦æç³»ç»çæ¶é´çº¦ææ¡ä»¶å¾ä¸å°æ»¡è¶³ï¼å°ä¼åçç³»ç»åºéã
å®æ¶ç³»ç»æ ¹æ®å ¶å¯¹äºå®æ¶æ§è¦æ±çä¸åï¼å¯ä»¥å为软å®æ¶å硬å®æ¶ä¸¤ç§ç±»åã硬å®æ¶ç³»ç»æç³»ç»è¦æç¡®ä¿çæåæ åµä¸çæå¡æ¶é´ï¼å³å¯¹äºäºä»¶çååºæ¶é´çæªæ¢æéæ¯æ 论å¦ä½é½å¿ é¡»å¾å°æ»¡è¶³ãæ¯å¦èªå¤©ä¸çå®å®é£è¹çæ§å¶çå°±æ¯ç°å®ä¸è¿æ ·çç³»ç»ãå ¶ä»çæææå®æ¶ç¹æ§çç³»ç»é½å¯ä»¥ç§°ä¹ä¸ºè½¯å®æ¶ç³»ç»ãå¦ææç¡®å°æ¥è¯´ï¼è½¯å®æ¶ç³»ç»å°±æ¯é£äºä»ç»è®¡çè§åº¦æ¥è¯´ï¼ä¸ä¸ªä»»å¡ï¼å¨ä¸é¢ç论述ä¸ï¼æ们å°å¯¹ä»»å¡åè¿ç¨ä¸ä½åºåï¼è½å¤å¾å°æç¡®ä¿çå¤çæ¶é´ï¼å°è¾¾ç³»ç»çäºä»¶ä¹è½å¤å¨æªæ¢æéå°æ¥ä¹åå¾å°å¤çï¼ä½è¿åæªæ¢æé并ä¸ä¼å¸¦æ¥è´å½çé误ï¼åå®æ¶å¤åªä½ç³»ç»å°±æ¯ä¸ç§è½¯å®æ¶ç³»ç»ã
ä¸ä¸ªè®¡ç®æºç³»ç»ä¸ºäºæä¾å¯¹äºå®æ¶æ§çæ¯æï¼å®çæä½ç³»ç»å¿ 须对äºCPUåå ¶ä»èµæºè¿è¡ææçè°åº¦å管çãå¨å¤ä»»å¡å®æ¶ç³»ç»ä¸ï¼èµæºçè°åº¦å管çæ´å å¤æãæ¬æä¸é¢å°å ä»åç±»çè§åº¦å¯¹åç§å®æ¶ä»»å¡è°åº¦ç®æ³è¿è¡è®¨è®ºï¼ç¶åç 究æ®éç Linuxæä½ç³»ç»çè¿ç¨è°åº¦ä»¥ååç§å®æ¶Linuxç³»ç»ä¸ºäºæ¯æå®æ¶ç¹æ§å¯¹æ®éLinuxç³»ç»æåçæ¹è¿ãæååæäºå°Linuxæä½ç³»ç»åºç¨äºå®æ¶é¢åä¸æ¶æåºç°çä¸äºé®é¢ï¼å¹¶æ»ç»äºåç§å®æ¶Linuxæ¯å¦ä½è§£å³è¿äºé®é¢çã
1. å®æ¶CPUè°åº¦ç®æ³åç±»
åç§å®æ¶æä½ç³»ç»çå®æ¶è°åº¦ç®æ³å¯ä»¥å为å¦ä¸ä¸ç§ç±»å«[Wang][Gopalan]ï¼åºäºä¼å 级çè°åº¦ç®æ³ï¼Priority-driven scheduling-PDï¼ãåºäºCPU使ç¨æ¯ä¾çå ±äº«å¼çè°åº¦ç®æ³ï¼Share-driven scheduling-SDï¼ã以ååºäºæ¶é´çè¿ç¨è°åº¦ç®æ³ï¼Time-driven scheduling-TDï¼ï¼ä¸é¢å¯¹è¿ä¸ç§è°åº¦ç®æ³éä¸è¿è¡ä»ç»ã
1.1. åºäºä¼å 级çè°åº¦ç®æ³
åºäºä¼å 级çè°åº¦ç®æ³ç»æ¯ä¸ªè¿ç¨åé ä¸ä¸ªä¼å 级ï¼å¨æ¯æ¬¡è¿ç¨è°åº¦æ¶ï¼è°åº¦å¨æ»æ¯è°åº¦é£ä¸ªå ·ææé«ä¼å 级çä»»å¡æ¥æ§è¡ãæ ¹æ®ä¸åçä¼å 级åé æ¹æ³ï¼åºäºä¼å 级çè°åº¦ç®æ³å¯ä»¥å为å¦ä¸ä¸¤ç§ç±»å[Krishna][Wang]ï¼
éæä¼å 级è°åº¦ç®æ³ï¼
è¿ç§è°åº¦ç®æ³ç»é£äºç³»ç»ä¸å¾å°è¿è¡çææè¿ç¨é½éæå°åé ä¸ä¸ªä¼å 级ãéæä¼å 级çåé å¯ä»¥æ ¹æ®åºç¨çå±æ§æ¥è¿è¡ï¼æ¯å¦ä»»å¡çå¨æï¼ç¨æ·ä¼å 级ï¼æè å ¶å®çé¢å ç¡®å®ççç¥ãRMï¼Rate-Monotonicï¼è°åº¦ç®æ³æ¯ä¸ç§å ¸åçéæä¼å 级è°åº¦ç®æ³ï¼å®æ ¹æ®ä»»å¡çæ§è¡å¨æçé¿çæ¥å³å®è°åº¦ä¼å 级ï¼é£äºå ·æå°çæ§è¡å¨æçä»»å¡å ·æè¾é«çä¼å 级ã
å¨æä¼å 级è°åº¦ç®æ³ï¼
è¿ç§è°åº¦ç®æ³æ ¹æ®ä»»å¡çèµæºéæ±æ¥å¨æå°åé ä»»å¡çä¼å 级ï¼å ¶ç®çå°±æ¯å¨èµæºåé åè°åº¦æ¶ææ´å¤§ççµæ´»æ§ãéå®æ¶ç³»ç»ä¸å°±æå¾å¤è¿ç§è°åº¦ç®æ³ï¼æ¯å¦çä½ä¸ä¼å çè°åº¦ç®æ³ãå¨å®æ¶è°åº¦ç®æ³ä¸ï¼ EDFç®æ³æ¯ä½¿ç¨æå¤çä¸ç§å¨æä¼å 级è°åº¦ç®æ³ï¼è¯¥ç®æ³ç»å°±ç»ªéåä¸çå个任å¡æ ¹æ®å®ä»¬çæªæ¢æéï¼Deadlineï¼æ¥åé ä¼å 级ï¼å ·ææè¿çæªæ¢æéçä»»å¡å ·ææé«çä¼å 级ã
1.2. åºäºæ¯ä¾å ±äº«è°åº¦ç®æ³
è½ç¶åºäºä¼å 级çè°åº¦ç®æ³ç®åèææï¼ä½è¿ç§è°åº¦ç®æ³æä¾çæ¯ä¸ç§ç¡¬å®æ¶çè°åº¦ï¼å¨å¾å¤æ åµä¸å¹¶ä¸éå使ç¨è¿ç§è°åº¦ç®æ³ï¼æ¯å¦è±¡å®æ¶å¤åªä½ä¼è®®ç³»ç»è¿æ ·ç软å®æ¶åºç¨ã对äºè¿ç§è½¯å®æ¶åºç¨ï¼ä½¿ç¨ä¸ç§æ¯ä¾å ±äº«å¼çèµæºè°åº¦ç®æ³ï¼SDç®æ³ï¼æ´ä¸ºéåã
æ¯ä¾å ±äº«è°åº¦ç®æ³æåºäºCPU使ç¨æ¯ä¾çå ±äº«å¼çè°åº¦ç®æ³ï¼å ¶åºæ¬ææ³å°±æ¯æç §ä¸å®çæéï¼æ¯ä¾ï¼å¯¹ä¸ç»éè¦è°åº¦çä»»å¡è¿è¡è°åº¦ï¼è®©å®ä»¬çæ§è¡æ¶é´ä¸å®ä»¬çæéå®å ¨ææ£æ¯ã
æ们å¯ä»¥éè¿ä¸¤ç§æ¹æ³æ¥å®ç°æ¯ä¾å ±äº«è°åº¦ç®æ³[Nieh]ï¼ç¬¬ä¸ç§æ¹æ³æ¯è°èå个就绪è¿ç¨åºç°å¨è°åº¦éåéé¦çé¢çï¼å¹¶è°åº¦éé¦çè¿ç¨æ§è¡ï¼ç¬¬äºç§åæ³å°±æ¯é次è°åº¦å°±ç»ªéåä¸çå个è¿ç¨æå ¥è¿è¡ï¼ä½æ ¹æ®åé çæéè°èåé 个æ¯ä¸ªè¿ç¨çè¿è¡æ¶é´çã
æ¯ä¾å ±äº«è°åº¦ç®æ³å¯ä»¥å为以ä¸å 个类å«ï¼è½®è½¬æ³ãå ¬å¹³å ±äº«ãå ¬å¹³éåã彩票è°åº¦æ³ï¼Lotteryï¼çã
æ¯ä¾å ±äº«è°åº¦ç®æ³çä¸ä¸ªé®é¢å°±æ¯å®æ²¡æå®ä¹ä»»ä½ä¼å 级çæ¦å¿µï¼ææçä»»å¡é½æ ¹æ®å®ä»¬ç³è¯·çæ¯ä¾å ±äº«CPUèµæºï¼å½ç³»ç»å¤äºè¿è½½ç¶ææ¶ï¼ææçä»»å¡çæ§è¡é½ä¼ææ¯ä¾å°åæ ¢ãæ以为äºä¿è¯ç³»ç»ä¸å®æ¶è¿ç¨è½å¤è·å¾ä¸å®çCPUå¤çæ¶é´ï¼ä¸è¬éç¨ä¸ç§å¨æè°èè¿ç¨æéçæ¹æ³ã
1.3. åºäºæ¶é´çè¿ç¨è°åº¦ç®æ³
对äºé£äºå ·æ稳å®ãå·²ç¥è¾å ¥çç®åç³»ç»ï¼å¯ä»¥ä½¿ç¨æ¶é´é©±å¨ï¼Time-driven:TDï¼çè°åº¦ç®æ³ï¼å®è½å¤ä¸ºæ°æ®å¤çæä¾å¾å¥½çé¢æµæ§ãè¿ç§è°åº¦ç®æ³æ¬è´¨ä¸æ¯ä¸ç§è®¾è®¡æ¶å°±ç¡®å®ä¸æ¥ç离线çéæè°åº¦æ¹æ³ãå¨ç³»ç»ç设计é¶æ®µï¼å¨æ确系ç»ä¸ææçå¤çæ åµä¸ï¼å¯¹äºå个任å¡çå¼å§ãåæ¢ã以åç»ææ¶é´çå°±äºå ååºæç¡®çå®æå设计ãè¿ç§è°åº¦ç®æ³éåäºé£äºå¾å°çåµå ¥å¼ç³»ç»ãèªæ§ç³»ç»ãä¼ æå¨çåºç¨ç¯å¢ã
è¿ç§è°åº¦ç®æ³çä¼ç¹æ¯ä»»å¡çæ§è¡æå¾å¥½çå¯é¢æµæ§ï¼ä½æ大ç缺ç¹æ¯ç¼ºä¹çµæ´»æ§ï¼å¹¶ä¸ä¼åºç°æä»»å¡éè¦è¢«æ§è¡èCPUå´ä¿æ空é²çæ åµã
2. éç¨Linuxç³»ç»ä¸çCPUè°åº¦
éç¨Linuxç³»ç»æ¯æå®æ¶åéå®æ¶ä¸¤ç§è¿ç¨ï¼å®æ¶è¿ç¨ç¸å¯¹äºæ®éè¿ç¨å ·æç»å¯¹çä¼å 级ã对åºå°ï¼å®æ¶è¿ç¨éç¨SCHED_FIFOæè SCHED_RRè°åº¦çç¥ï¼æ®éçè¿ç¨éç¨SCHED_OTHERè°åº¦çç¥ã
å¨è°åº¦ç®æ³çå®ç°ä¸ï¼Linuxä¸çæ¯ä¸ªä»»å¡æå个ä¸è°åº¦ç¸å ³çåæ°ï¼å®ä»¬æ¯rt_priorityãpolicyãpriorityï¼niceï¼ãcounterãè°åº¦ç¨åºæ ¹æ®è¿å个åæ°è¿è¡è¿ç¨è°åº¦ã
å¨SCHED_OTHER è°åº¦çç¥ä¸ï¼è°åº¦å¨æ»æ¯éæ©é£ä¸ªpriority+counterå¼æ大çè¿ç¨æ¥è°åº¦æ§è¡ãä»é»è¾ä¸åæï¼SCHED_OTHERè°åº¦çç¥åå¨çè°åº¦å¨æï¼epochï¼ï¼å¨æ¯ä¸ä¸ªè°åº¦å¨æä¸ï¼ä¸ä¸ªè¿ç¨çpriorityåcounterå¼ç大å°å½±åäºå½åæ¶å»åºè¯¥è°åº¦åªä¸ä¸ªè¿ç¨æ¥æ§è¡ï¼å ¶ä¸ priorityæ¯ä¸ä¸ªåºå®ä¸åçå¼ï¼å¨è¿ç¨å建æ¶å°±å·²ç»ç¡®å®ï¼å®ä»£è¡¨äºè¯¥è¿ç¨çä¼å 级ï¼ä¹ä»£è¡¨è¿è¯¥è¿ç¨å¨æ¯ä¸ä¸ªè°åº¦å¨æä¸è½å¤å¾å°çæ¶é´ççå¤å°ï¼ counteræ¯ä¸ä¸ªå¨æååçå¼ï¼å®åæ äºä¸ä¸ªè¿ç¨å¨å½åçè°åº¦å¨æä¸è¿å©ä¸çæ¶é´çãå¨æ¯ä¸ä¸ªè°åº¦å¨æçå¼å§ï¼priorityçå¼è¢«èµç» counterï¼ç¶åæ¯æ¬¡è¯¥è¿ç¨è¢«è°åº¦æ§è¡æ¶ï¼counterå¼é½åå°ãå½counterå¼ä¸ºé¶æ¶ï¼è¯¥è¿ç¨ç¨å®èªå·±å¨æ¬è°åº¦å¨æä¸çæ¶é´çï¼ä¸ååä¸æ¬è°åº¦å¨æçè¿ç¨è°åº¦ãå½ææè¿ç¨çæ¶é´çé½ç¨å®æ¶ï¼ä¸ä¸ªè°åº¦å¨æç»æï¼ç¶åå¨èå¤å§ãå¦å¤å¯ä»¥çåºLinuxç³»ç»ä¸çè°åº¦å¨æä¸æ¯éæçï¼å®æ¯ä¸ä¸ªå¨æååçéï¼æ¯å¦å¤äºå¯è¿è¡ç¶æçè¿ç¨çå¤å°åå®ä»¬priorityå¼é½å¯ä»¥å½±åä¸ä¸ªepochçé¿çãå¼å¾æ³¨æçä¸ç¹æ¯ï¼å¨2.4以ä¸çå æ ¸ä¸ï¼ priority被niceæå代ï¼ä½äºè ä½ç¨ç±»ä¼¼ã
å¯è§SCHED_OTHERè°åº¦çç¥æ¬è´¨ä¸æ¯ä¸ç§æ¯ä¾å ±äº«çè°åº¦çç¥ï¼å®çè¿ç§è®¾è®¡æ¹æ³è½å¤ä¿è¯è¿ç¨è°åº¦æ¶çå ¬å¹³æ§--ä¸ä¸ªä½ä¼å 级çè¿ç¨å¨æ¯ä¸ä¸ªepochä¸ä¹ä¼å¾å°èªå·±åºå¾çé£äºCPUæ§è¡æ¶é´ï¼å¦å¤å®ä¹æä¾äºä¸åè¿ç¨çä¼å 级åºåï¼å ·æé«priorityå¼çè¿ç¨è½å¤è·å¾æ´å¤çæ§è¡æ¶é´ã
对äºå®æ¶è¿ç¨æ¥è¯´ï¼å®ä»¬ä½¿ç¨çæ¯åºäºå®æ¶ä¼å 级rt_priorityçä¼å 级è°åº¦çç¥ï¼ä½æ ¹æ®ä¸åçè°åº¦çç¥ï¼åä¸å®æ¶ä¼å 级çè¿ç¨ä¹é´çè°åº¦æ¹æ³ææä¸åï¼
SCHED_FIFOï¼ä¸åçè¿ç¨æ ¹æ®éæä¼å 级è¿è¡æéï¼ç¶åå¨åä¸ä¼å 级çéåä¸ï¼è°å åå¤å¥½è¿è¡å°±å è°åº¦è°ï¼å¹¶ä¸æ£å¨è¿è¡çè¿ç¨ä¸ä¼è¢«ç»æ¢ç´å°ä»¥ä¸æ åµåçï¼1.被ææ´é«ä¼å 级çè¿ç¨æ强å CPUï¼2.èªå·±å 为èµæºè¯·æ±èé»å¡ï¼3.èªå·±ä¸»å¨æ¾å¼CPUï¼è°ç¨sched_yieldï¼ï¼
SCHED_RRï¼è¿ç§è°åº¦çç¥è·ä¸é¢çSCHED_FIFOä¸æ¨¡ä¸æ ·ï¼é¤äºå®ç»æ¯ä¸ªè¿ç¨åé ä¸ä¸ªæ¶é´çï¼æ¶é´çå°äºæ£å¨æ§è¡çè¿ç¨å°±æ¾å¼æ§è¡ï¼æ¶é´ççé¿åº¦å¯ä»¥éè¿sched_rr_get_intervalè°ç¨å¾å°ï¼
ç±äºLinuxç³»ç»æ¬èº«æ¯ä¸ä¸ªé¢åæ¡é¢çç³»ç»ï¼æ以å°å®åºç¨äºå®æ¶åºç¨ä¸æ¶åå¨å¦ä¸çä¸äºé®é¢ï¼
Linuxç³»ç»ä¸çè°åº¦åä½ä¸ºmsï¼æ以å®ä¸è½å¤æä¾ç²¾ç¡®çå®æ¶ï¼
å½ä¸ä¸ªè¿ç¨è°ç¨ç³»ç»è°ç¨è¿å ¥å æ ¸æè¿è¡æ¶ï¼å®æ¯ä¸å¯è¢«æ¢å çï¼
Linuxå æ ¸å®ç°ä¸ä½¿ç¨äºå¤§éçå°ä¸ææä½ä¼é æä¸æç丢失ï¼
ç±äºä½¿ç¨èæå åææ¯ï¼å½åç页åºéæ¶ï¼éè¦ä»ç¡¬çä¸è¯»å交æ¢æ°æ®ï¼ä½ç¡¬ç读åç±äºåå¨ä½ç½®çéæºæ§ä¼å¯¼è´éæºç读åæ¶é´ï¼è¿å¨æäºæ åµä¸ä¼å½±åä¸äºå®æ¶ä»»å¡çæªæ¢æéï¼
è½ç¶Linuxè¿ç¨è°åº¦ä¹æ¯æå®æ¶ä¼å 级ï¼ä½ç¼ºä¹ææçå®æ¶ä»»å¡çè°åº¦æºå¶åè°åº¦ç®æ³ï¼å®çç½ç»åç³»ç»çåè®®å¤çåå ¶å®è®¾å¤çä¸æå¤çé½æ²¡æä¸å®å¯¹åºçè¿ç¨çè°åº¦å ³èèµ·æ¥ï¼å¹¶ä¸å®ä»¬èªèº«ä¹æ²¡ææç¡®çè°åº¦æºå¶ï¼
3. åç§å®æ¶Linuxç³»ç»
3.1. RT-LinuxåRTAI
RT -Linuxæ¯æ°å¢¨è¥¿å¥ç§æ大å¦ï¼New Mexico Institute of Technologyï¼çç 究ææ[RTLinuxWeb][Barabanov]ãå®çåºæ¬ææ³æ¯ï¼ä¸ºäºå¨Linuxç³»ç»ä¸æä¾å¯¹äºç¡¬å®æ¶çæ¯æï¼å®å®ç°äºä¸ä¸ªå¾®å æ ¸çå°çå®æ¶æä½ç³»ç»ï¼æ们ä¹ç§°ä¹ä¸ºRT-Linuxçå®æ¶åç³»ç»ï¼ï¼èå°æ®éLinuxç³»ç»ä½ä¸ºä¸ä¸ªè¯¥æä½ç³»ç»ä¸çä¸ä¸ªä½ä¼å 级çä»»å¡æ¥è¿è¡ãå¦å¤æ®éLinuxç³»ç»ä¸çä»»å¡å¯ä»¥éè¿FIFOåå®æ¶ä»»å¡è¿è¡éä¿¡ãRT-Linuxçæ¡æ¶å¦å¾ 1æ示ï¼
å¾ 1 RT-Linuxç»æ
RT -Linuxçå ³é®ææ¯æ¯éè¿è½¯ä»¶æ¥æ¨¡æ硬件çä¸ææ§å¶å¨ãå½Linuxç³»ç»è¦å°éCPUçä¸ææ¶æ¶ï¼RT-Linuxä¸çå®æ¶åç³»ç»ä¼æªåå°è¿ä¸ªè¯·æ±ï¼æå®è®°å½ä¸æ¥ï¼èå®é ä¸å¹¶ä¸çæ£å°é硬件ä¸æï¼è¿æ ·å°±é¿å äºç±äºå°ä¸ææé æçç³»ç»å¨ä¸æ®µæ¶é´æ²¡æååºçæ åµï¼ä»èæé«äºå®æ¶æ§ãå½æ硬件ä¸æå°æ¥æ¶ï¼ RT-Linuxæªå该ä¸æï¼å¹¶å¤ææ¯å¦æå®æ¶åç³»ç»ä¸çä¸æä¾ç¨æ¥å¤çè¿æ¯ä¼ éç»æ®éçLinuxå æ ¸è¿è¡å¤çãå¦å¤ï¼æ®éLinuxç³»ç»ä¸çæå°å®æ¶ç²¾åº¦ç±ç³»ç»ä¸çå®æ¶æ¶éçé¢çå³å®ï¼ä¸è¬Linuxç³»ç»å°è¯¥æ¶é设置为æ¯ç§æ¥ä¸ªæ¶éä¸æï¼æ以Linuxç³»ç»ä¸ä¸è¬çå®æ¶ç²¾åº¦ä¸º msï¼å³æ¶éå¨ææ¯msï¼èRT-Linuxéè¿å°ç³»ç»çå®æ¶æ¶é设置为å次触åç¶æï¼å¯ä»¥æä¾åå 个微ç§çº§çè°åº¦ç²åº¦ã
RT-Linuxå®æ¶åç³»ç»ä¸çä»»å¡è°åº¦å¯ä»¥éç¨RMãEDFçä¼å 级驱å¨çç®æ³ï¼ä¹å¯ä»¥éç¨å ¶ä»è°åº¦ç®æ³ã
RT -Linux对äºé£äºå¨éè´è·ä¸å·¥ä½çä¸æç³»ç»æ¥è¯´ï¼ç¡®å®æ¯ä¸ä¸ªä¸éçéæ©ï¼ä½ä»ä» ä» æä¾äºå¯¹äºCPUèµæºçè°åº¦ï¼å¹¶ä¸å®æ¶ç³»ç»åæ®éLinuxç³»ç»å ³ç³»ä¸æ¯ååå¯åï¼è¿æ ·çè¯ï¼å¼å人åä¸è½å åå©ç¨Linuxç³»ç»ä¸å·²ç»å®ç°çåè½ï¼å¦åè®®æ çãæ以RT-Linuxéåä¸å·¥ä¸æ§å¶çå®æ¶ä»»å¡åè½ç®åï¼å¹¶ä¸æ硬å®æ¶è¦æ±çç¯å¢ä¸ï¼ä½å¦æè¦åºç¨ä¸å¤åªä½å¤çä¸è¿éè¦å大éçå·¥ä½ã
æ大å©çRTAI( Real-Time Application Interface )æºäºRT-Linuxï¼å®å¨è®¾è®¡ææ³ä¸åRT-Linuxå®å ¨ç¸åãå®å½å设计ç®çæ¯ä¸ºäºè§£å³RT-Linuxé¾äºå¨ä¸åLinuxçæ¬ä¹é´é¾äºç§»æ¤çé®é¢ï¼ä¸ºæ¤ï¼RTAIå¨ Linux ä¸å®ä¹äºä¸ä¸ªå®æ¶ç¡¬ä»¶æ½è±¡å±ï¼å®æ¶ä»»å¡éè¿è¿ä¸ªæ½è±¡å±æä¾çæ¥å£åLinuxç³»ç»è¿è¡äº¤äºï¼è¿æ ·å¨ç»Linuxå æ ¸ä¸å¢å å®æ¶æ¯ææ¶å¯ä»¥å°½å¯è½å°å°ä¿®æ¹ Linuxçå æ ¸æºä»£ç ã
3.2. Kurt-Linux
Kurt -Linuxç±Kansas大å¦å¼åï¼å®å¯ä»¥æä¾å¾®ç§çº§çå®æ¶ç²¾åº¦[KurtWeb] [Srinivasan]ãä¸åäºRT-Linuxåç¬å®ç°ä¸ä¸ªå®æ¶å æ ¸çåæ³ï¼Kurt -Linuxæ¯å¨éç¨Linuxç³»ç»çåºç¡ä¸å®ç°çï¼å®ä¹æ¯ç¬¬ä¸ä¸ªå¯ä»¥ä½¿ç¨æ®éLinuxç³»ç»è°ç¨çåºäºLinuxçå®æ¶ç³»ç»ã
Kurt-Linuxå°ç³»ç»å为ä¸ç§ç¶æï¼æ£å¸¸æãå®æ¶æåæ··åæï¼å¨æ£å¸¸ææ¶å®éç¨æ®éçLinuxçè°åº¦çç¥ï¼å¨å®æ¶æåªè¿è¡å®æ¶ä»»å¡ï¼å¨æ··åæå®æ¶åéå®æ¶ä»»å¡é½å¯ä»¥æ§è¡ï¼å®æ¶æå¯ä»¥ç¨äºå¯¹äºå®æ¶æ§è¦æ±æ¯è¾ä¸¥æ ¼çæ åµã
为äºæé«Linuxç³»ç»çå®æ¶ç¹æ§ï¼å¿ é¡»æé«ç³»ç»ææ¯æçæ¶é精度ãä½å¦æä» ä» ç®åå°æé«æ¶éé¢çï¼ä¼å¼èµ·è°åº¦è´è½½çå¢å ï¼ä»è严ééä½ç³»ç»çæ§è½ã为äºè§£å³è¿ä¸ªçç¾ï¼ Kurt-Linuxéç¨UTIMEæ使ç¨çæé«Linuxç³»ç»ä¸çæ¶é精度çæ¹æ³[UTIMEWeb]ï¼å®å°æ¶éè¯ç设置为å次触åç¶æï¼One shot modeï¼ï¼å³æ¯æ¬¡ç»æ¶éè¯ç设置ä¸ä¸ªè¶ æ¶æ¶é´ï¼ç¶åå°è¯¥è¶ æ¶äºä»¶åçæ¶å¨æ¶éä¸æå¤çç¨åºä¸åæ¬¡æ ¹æ®éè¦ç»æ¶éè¯ç设置ä¸ä¸ªè¶ æ¶æ¶é´ãå®çåºæ¬ææ³æ¯ä¸ä¸ªç²¾ç¡®çå®æ¶æå³çæ们éè¦æ¶éä¸æå¨æ们éè¦çä¸ä¸ªæ¯è¾ç²¾ç¡®çæ¶é´åçï¼ä½å¹¶éä¸å®éè¦ç³»ç»æ¶éé¢çè¾¾å°æ¤ç²¾åº¦ãå®å©ç¨CPUçæ¶é计æ°å¨TSC (Time Stamp Counter)æ¥æä¾ç²¾åº¦å¯è¾¾CPU主é¢çæ¶é´ç²¾åº¦ã
对äºå®æ¶ä»»å¡çè°åº¦ï¼Kurt-Linuxéç¨åºäºæ¶é´ï¼TDï¼çéæçå®æ¶CPUè°åº¦ç®æ³ãå®æ¶ä»»å¡å¨è®¾è®¡é¶æ®µå°±éè¦æç¡®å°è¯´æå®ä»¬å®æ¶äºä»¶è¦åççæ¶é´ãè¿ç§è°åº¦ç®æ³å¯¹äºé£äºå¾ªç¯æ§è¡çä»»å¡è½å¤åå¾è¾å¥½çè°åº¦ææã
Kurt -Linuxç¸å¯¹äºRT-Linuxçä¸ä¸ªä¼ç¹å°±æ¯å¯ä»¥ä½¿ç¨Linuxç³»ç»èªèº«çç³»ç»è°ç¨ï¼å®æ¬æ¥è¢«è®¾è®¡ç¨äºæä¾å¯¹ç¡¬å®æ¶çæ¯æï¼ä½ç±äºå®å¨å®ç°ä¸åªæ¯ç®åçå°Linuxè°åº¦å¨ç¨ä¸ä¸ªç®åçæ¶é´é©±å¨çè°åº¦å¨æå代ï¼æ以å®çå®æ¶è¿ç¨çè°åº¦å¾å®¹æåå°å ¶å®éå®æ¶ä»»å¡çå½±åï¼ä»èå¨æçæ åµä¸ä¼åçå®æ¶ä»»å¡çæªæ¢æéä¸è½æ»¡è¶³çæ åµï¼æ以ä¹è¢«ç§°ä½ä¸¥æ ¼å®æ¶ç³»ç»ï¼Firm Real-timeï¼ãç®ååºäºKurt-Linuxçåºç¨æï¼ARTSï¼ATM Reference Traffic Systemï¼ãå¤åªä½ææ¾è½¯ä»¶çãå¦å¤Kurt-Linuxæéç¨çè¿ç§æ¹æ³éè¦é¢ç¹å°å¯¹æ¶éè¯çè¿è¡ç¼ç¨è®¾ç½®ã
3.3. RED-Linux
RED -Linuxæ¯å å·å¤§å¦Irvineåæ ¡å¼åçå®æ¶Linuxç³»ç»[REDWeb][ Wang]ï¼å®å°å¯¹å®æ¶è°åº¦çæ¯æåLinuxå¾å¥½å°å®ç°å¨åä¸ä¸ªæä½ç³»ç»å æ ¸ä¸ãå®åæ¶æ¯æä¸ç§ç±»åçè°åº¦ç®æ³ï¼å³ï¼Time-Drivenã Priority-DirvenãShare-Drivenã
为äºæé«ç³»ç»çè°åº¦ç²åº¦ï¼RED-Linuxä»RT-Linuxé£å¿åé´äºè½¯ä»¶æ¨¡æä¸æ管çå¨çæºå¶ï¼å¹¶ä¸æé«äºæ¶éä¸æé¢çãå½æ硬件ä¸æå°æ¥æ¶ï¼RED-Linuxçä¸æ模æç¨åºä» ä» æ¯ç®åå°å°å°æ¥çä¸ææ¾å°ä¸ä¸ªéåä¸è¿è¡æéï¼å¹¶ä¸æ§è¡çæ£çä¸æå¤çç¨åºã
å¦å¤ä¸ºäºè§£å³Linuxè¿ç¨å¨å æ ¸æä¸è½è¢«æ¢å çé®é¢ï¼ RED-Linuxå¨Linuxå æ ¸çå¾å¤å½æ°ä¸æå ¥äºæ¢å ç¹åè¯ï¼ä½¿å¾è¿ç¨å¨å æ ¸ææ¶ï¼ä¹å¯ä»¥å¨ä¸å®ç¨åº¦ä¸è¢«æ¢å ãéè¿è¿ç§æ¹æ³æé«äºå æ ¸çå®æ¶ç¹æ§ã
RED-Linuxç设计ç®æ å°±æ¯æä¾ä¸ä¸ªå¯ä»¥æ¯æåç§è°åº¦ç®æ³çéç¨çè°åº¦æ¡æ¶ï¼è¯¥ç³»ç»ç»æ¯ä¸ªä»»å¡å¢å äºå¦ä¸å 项å±æ§ï¼å¹¶å°å®ä»¬ä½ä¸ºè¿ç¨è°åº¦çä¾æ®ï¼
Priorityï¼ä½ä¸çä¼å 级ï¼
Start-Timeï¼ä½ä¸çå¼å§æ¶é´ï¼
Finish-Timeï¼ä½ä¸çç»ææ¶é´ï¼
Budgetï¼ä½ä¸å¨è¿è¡æé´æè¦ä½¿ç¨çèµæºçå¤å°ï¼
éè¿è°æ´è¿äºå±æ§çåå¼åè°åº¦ç¨åºæç §ä»ä¹æ ·çä¼å 顺åºæ¥ä½¿ç¨è¿äºå±æ§å¼ï¼å ä¹å¯ä»¥å®ç°ææçè°åº¦ç®æ³ãè¿æ ·çè¯ï¼å¯ä»¥å°ä¸ç§ä¸åçè°åº¦ç®æ³æ ç¼ãç»ä¸å°ç»åå°äºä¸èµ·ã
å¦å¤,码系天健HIS源码å¢IDCç½ä¸æ许å¤äº§åå¢è´,便å®æå£ç¢