《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式Linux下的實(shí)時(shí)性增強(qiáng)方案
嵌入式Linux下的實(shí)時(shí)性增強(qiáng)方案
來(lái)源:電子技術(shù)應(yīng)用2010年第7期
單承剛
棗莊學(xué)院 計(jì)算機(jī)科學(xué)系, 山東 棗莊 277160
摘要: 分析了嵌入式Linux在實(shí)時(shí)性方面的不足,針對(duì)Linux2.6內(nèi)核的中斷運(yùn)行機(jī)制、內(nèi)核不可搶占性、自旋鎖及大內(nèi)核鎖等問(wèn)題進(jìn)行研究,提出相應(yīng)的實(shí)時(shí)性改進(jìn)方法。測(cè)試表明,改進(jìn)后的嵌入式Linux實(shí)時(shí)性效果較好。
中圖分類號(hào): TP316.8
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2010)07-0137-03
Methods of enhancing real-time performance of embedded Linux
SHAN Cheng Gang
Computer and Science Department, Zaozhuang University, Zaozhuang 277160, China
Abstract: This paper describes the limination of real-time performance of embedded Linux,and puts forward corresponding improved methods of Linux 2.6 kernel.These methods focus on interrupt running mechanism,kernel preemption, spinlock mechanism and big kernel lock..According to these tests, the real-time performance of improved embedded Linux is effective.
Key words : embeded Linux; real-time; interrupt; preemption; spinlock

    Linux以其功能強(qiáng)大、源代碼開放、支持多種硬件平臺(tái)、模塊化設(shè)計(jì)方案以及豐富的開發(fā)工具支持等特點(diǎn)廣泛應(yīng)用在嵌入式系統(tǒng)領(lǐng)域。作為嵌入式產(chǎn)品的操作系統(tǒng)平臺(tái),具有較好的實(shí)時(shí)性、系統(tǒng)可靠性、任務(wù)處理隨機(jī)性是系統(tǒng)追求的目標(biāo),目前商業(yè)嵌入式操作系統(tǒng)實(shí)時(shí)性能可以滿足嵌入式領(lǐng)域的需求,但由于其價(jià)格昂貴,應(yīng)用受到了限制[1]。而嵌入式Linux以其非常低廉的價(jià)格,可以大大地降低成本,逐漸成為嵌入式操作系統(tǒng)的首選。但由于其在實(shí)時(shí)應(yīng)用領(lǐng)域的技術(shù)障礙,要應(yīng)用在嵌入式領(lǐng)域,還必須對(duì)Linux內(nèi)核作必要的改進(jìn)。本文以S3C2410+Linux作為移動(dòng)機(jī)器人操作平臺(tái),為了提高機(jī)器人任務(wù)處理的實(shí)時(shí)性,針對(duì)影響Linux OS實(shí)時(shí)性能的若干方面進(jìn)行研究,并利用相應(yīng)的解決方法基于標(biāo)準(zhǔn)Linux2.6內(nèi)核加以實(shí)現(xiàn),最后通過(guò)測(cè)試,驗(yàn)證了此改進(jìn)方法的效果。
1 Linux內(nèi)核實(shí)時(shí)性分析
1.1 Linux內(nèi)核制約實(shí)時(shí)性的因素

    衡量操作系統(tǒng)實(shí)時(shí)性的指標(biāo)主要有中斷延遲和搶占延遲。嵌入式系統(tǒng)中很多實(shí)時(shí)任務(wù)是靠中斷驅(qū)動(dòng)的,中斷事件必須在限定的時(shí)限內(nèi)處理,否則將產(chǎn)生災(zāi)難性的后果。大多數(shù)實(shí)時(shí)系統(tǒng)都是處理一些周期性的或非周期性的重復(fù)事件,事件產(chǎn)生的頻度就確定了任務(wù)的執(zhí)行時(shí)限,因此每次事件發(fā)生時(shí),相應(yīng)的處理任務(wù)必須及時(shí)響應(yīng)處理,否則將無(wú)法滿足時(shí)限[2]。搶占延遲就反映了系統(tǒng)的響應(yīng)及時(shí)程度。針對(duì)Linux內(nèi)核,中斷關(guān)閉及中斷優(yōu)先級(jí)執(zhí)行機(jī)制、內(nèi)核不可搶占性、自旋鎖(spinlock)及大內(nèi)核鎖及一些O(n)的任務(wù)調(diào)度算法影響了系統(tǒng)的實(shí)時(shí)性能。
1.2 現(xiàn)存增強(qiáng)Linux內(nèi)核實(shí)時(shí)性的技術(shù)
    多年來(lái),Linux實(shí)時(shí)性改進(jìn)技術(shù)的發(fā)展主要有兩種技術(shù)方案:(1)直接修改Linux內(nèi)核。針對(duì)內(nèi)核數(shù)據(jù)結(jié)構(gòu)、調(diào)度函數(shù)、中斷方式進(jìn)行改動(dòng),重新設(shè)計(jì)一個(gè)由優(yōu)先級(jí)驅(qū)動(dòng)的實(shí)時(shí)調(diào)度器,替換原有Linux內(nèi)核中的進(jìn)程調(diào)度器sched.c。這一方案主要是針對(duì)中斷機(jī)制、任務(wù)調(diào)度算法進(jìn)行改進(jìn)的,較為成功的案例為Kansas大學(xué)開發(fā)的Kurt-Linux。Kurt提高了Linux系統(tǒng)中的實(shí)時(shí)精度,將時(shí)鐘芯片設(shè)置為單觸發(fā)狀態(tài)。對(duì)于實(shí)時(shí)任務(wù)的調(diào)度,Kurt-Linux采用基于時(shí)間的靜態(tài)實(shí)時(shí)CPU調(diào)度算法。實(shí)時(shí)任務(wù)在設(shè)計(jì)階段就需要明確地說(shuō)明其實(shí)時(shí)事件要發(fā)生的時(shí)間。這種調(diào)度算法對(duì)于那些循環(huán)執(zhí)行的任務(wù)能夠取得較好的調(diào)度效果;(2)在Linux內(nèi)核之外進(jìn)行實(shí)時(shí)性擴(kuò)展,添加一個(gè)實(shí)時(shí)內(nèi)核。實(shí)時(shí)內(nèi)核接管硬件所有中斷,并依據(jù)是否為實(shí)時(shí)任務(wù)給予響應(yīng)。Fsm Labs公司開發(fā)的RTLinux就是依據(jù)這種策略開發(fā)設(shè)計(jì)的[3]。以上論述的兩種技術(shù)方案有其可借鑒之處,但如果綜合考慮任務(wù)響應(yīng)、內(nèi)核可搶占性、實(shí)時(shí)調(diào)度策略等都將影響操作系統(tǒng)的實(shí)時(shí)性能,因此,這兩種技術(shù)還不能很好地滿足實(shí)時(shí)性要求。為了增強(qiáng)嵌入式Linux實(shí)時(shí)性能,下面將介紹中斷機(jī)制、內(nèi)核的搶占性以及大內(nèi)核鎖等相關(guān)問(wèn)題。
2 Linux實(shí)時(shí)性改進(jìn)方法
 Linux2.4及以前版本內(nèi)核是不可搶占的,在Linux2.6中,內(nèi)核已經(jīng)可以搶占,實(shí)時(shí)性有所增強(qiáng)。但是內(nèi)核中仍然有不可搶占的區(qū)域,如自旋鎖spinlock保護(hù)的臨界區(qū)等。另外,影響內(nèi)核實(shí)時(shí)性能的因素還有中斷運(yùn)行機(jī)制、大內(nèi)核鎖機(jī)制以及調(diào)度算法等。
2.1 中斷運(yùn)行機(jī)制改進(jìn)
 在Linux標(biāo)準(zhǔn)內(nèi)核中,中斷是最高優(yōu)先級(jí)的執(zhí)行單元,硬件架構(gòu)決定了硬件中斷到來(lái)的時(shí)候在該中斷沒(méi)有被屏蔽的條件下必須處理。不管內(nèi)核當(dāng)時(shí)處理什么,即便是Linux中最高優(yōu)先級(jí)的實(shí)時(shí)進(jìn)程,只要有中斷發(fā)生,系統(tǒng)將立即響應(yīng)該事件并執(zhí)行相應(yīng)的中斷處理程序,這就大大削弱了Linux的實(shí)時(shí)性能。特別是系統(tǒng)有嚴(yán)重的網(wǎng)絡(luò)或I/O負(fù)載時(shí),中斷將非常頻繁,實(shí)時(shí)任務(wù)將很難有機(jī)會(huì)運(yùn)行,這對(duì)于Linux的實(shí)時(shí)應(yīng)用來(lái)說(shuō)是不可接受的。Linux采用的關(guān)中斷技術(shù)在關(guān)中斷區(qū)域使相應(yīng)實(shí)時(shí)任務(wù)得不到響應(yīng),增加了實(shí)時(shí)任務(wù)的中斷延遲。Linux實(shí)時(shí)化后自旋鎖變?yōu)榛コ怄i的技術(shù),但由于自旋鎖的中斷處理不能及時(shí)響應(yīng),降低了系統(tǒng)的實(shí)時(shí)性能。因此,借鑒Ingo Molnar實(shí)時(shí)補(bǔ)丁的實(shí)時(shí)化方法,采用中斷線程化技術(shù)改進(jìn)中斷運(yùn)行機(jī)制,中斷將作為內(nèi)核線程運(yùn)行而且賦予不同的實(shí)時(shí)優(yōu)先級(jí),實(shí)時(shí)任務(wù)可以有比中斷線程更高的優(yōu)先級(jí),這樣,實(shí)時(shí)任務(wù)就可以作為最高優(yōu)先級(jí)的執(zhí)行單元來(lái)運(yùn)行了,即使在嚴(yán)重負(fù)載下仍有實(shí)時(shí)性保證。另一方面,中斷處理線程也可以因?yàn)樵趦?nèi)核同步中得不到鎖而掛載到鎖的等待隊(duì)列中,很多關(guān)中斷就不必真正的禁止硬件中斷了,而是禁止內(nèi)核進(jìn)程搶占,從而減小了中斷延遲[4]。
 在初始化階段,常規(guī)中斷初始化和中斷線程化的初始化在start_kernel( )函數(shù)中都調(diào)用trap_init( )和init_IRQ( )兩個(gè)函數(shù)來(lái)初始化irq_desc_t結(jié)構(gòu)體,區(qū)別主要體現(xiàn)在內(nèi)核初始化創(chuàng)建init線程時(shí),中斷線程化的中斷在init( )函數(shù)中還將調(diào)用init_hardirqs(kernel/irq/manage.c)來(lái)為每一個(gè)IRQ創(chuàng)建一個(gè)內(nèi)核線程,最高實(shí)時(shí)優(yōu)先級(jí)為50,依次類推直到25。因此,任何IRQ線程的最低實(shí)時(shí)優(yōu)先級(jí)為25,具體實(shí)現(xiàn)是通過(guò)kthread_create函數(shù)創(chuàng)建的。功能實(shí)現(xiàn)等同于如下代碼:
   void __init init_hardirqs(void)
   {   ……
        for (i = 0; i < NR_IRQS; i++) {  
                          //對(duì)于每一個(gè)中斷建立一個(gè)中斷線程
        irq_desc_t *desc = irq_desc + i;
            if(desc->action && !(desc->status & IRQ_NODELAY))
              //有IRQ_NODELAY標(biāo)志的中斷不允許線程化
                desc->thread = kthread_create(do_irqd,
                    desc, "IRQ %d", irq);     //建立線程
            &hellip;&hellip;
        }
    }
    static int do_irqd(void * __desc)
                          //分配中斷線程優(yōu)先級(jí)50~25
    {  &hellip;&hellip;
        /*Scale irq thread priorities from prio 50 to prio 25 */
        param.sched_priority = curr_irq_prio;
        if (param.sched_priority > 25)
        curr_irq_prio = param.sched_priority - 1;
       &hellip;&hellip;
    }
 在中斷處理階段當(dāng)中斷發(fā)生時(shí),CPU調(diào)用do_IRQ( )函數(shù)來(lái)處理中斷,do_IRQ( )在做了必要的相關(guān)處理之后調(diào)用_do_IRQ( )。_do_IRQ( )主要功能為判斷該中斷是否已經(jīng)被線程化(核對(duì)終端描述符的狀態(tài)字段是否包含IRQ_NODELAY標(biāo)志),對(duì)于沒(méi)有線程化的中斷,將直接調(diào)用handle_IRQ_event( )函數(shù)來(lái)處理。功能實(shí)現(xiàn)等同于如下代碼:
   fastcall notrace unsigned int __do_IRQ(unsigned int irq,
        struct pt_regs *regs)
   {  &hellip;&hellip;
        if (redirect_hardirq(desc))
                //檢測(cè)是否為線程化中斷,若是則喚醒中斷線程
                goto out_no_end;
    &hellip;&hellip;
    action_ret = handle_IRQ_event(irq, regs, action);
                                  //處理非線程化中斷
           &hellip;&hellip;
   }
   int redirect_hardirq(struct irq_desc *desc)
                 //檢測(cè)irq_desc結(jié)構(gòu)體,判斷是否線程化
   {  &hellip;&hellip;
        if (!hardirq_preemption || (desc->status & IRQ_
                    NODELAY) || !desc->thread)
            return 0;
       &hellip;&hellip;
        if (desc->thread && desc->thread->state != TASK_
                RUNNING)
            wake_up_process(desc->thread);
        &hellip;&hellip;
   }
 針對(duì)已線程化的情況,調(diào)用wake_up_process( )函數(shù)喚醒中斷處理線程執(zhí)行,內(nèi)核線程將調(diào)用do_hardirq( )來(lái)處理相應(yīng)的中斷。具體實(shí)現(xiàn)是通過(guò)handle_IRQ_event( )函數(shù)直接調(diào)用相應(yīng)的中斷處理函數(shù)完成的。對(duì)于緊急的中斷(如時(shí)鐘中斷),內(nèi)核保持原來(lái)的中斷處理方式,而不為其創(chuàng)建中斷線程,這樣就保證了緊急中斷的快速響應(yīng)。
2.2 內(nèi)核可搶占性設(shè)計(jì)
 在Linux標(biāo)準(zhǔn)內(nèi)核中,因不具有可搶占性和導(dǎo)致較大的延遲,增加內(nèi)核的可搶占性能,可提高系統(tǒng)的實(shí)時(shí)任務(wù)處理能力。當(dāng)前修改Linux內(nèi)核提高實(shí)時(shí)性的方法主要有增加搶占點(diǎn)和改造成搶占式內(nèi)核兩種方法。增加搶占點(diǎn)方法是在內(nèi)核中插入搶占點(diǎn),通過(guò)檢測(cè)搶占點(diǎn)調(diào)度標(biāo)志來(lái)決定是否進(jìn)行實(shí)時(shí)任務(wù)的調(diào)度。采用這種方法,在檢測(cè)搶占點(diǎn)標(biāo)志時(shí)大大增加了系統(tǒng)開銷,因此本方案采用直接改造Linux內(nèi)核的方法,通過(guò)修改自旋鎖為互斥鎖來(lái)提高內(nèi)核的可搶占性[5]。即借鑒Ingo Molnar的實(shí)時(shí)補(bǔ)丁的實(shí)時(shí)化方法,使用mutex互斥鎖來(lái)替換spinlock自旋鎖。使用mutex替換spinlock,可以讓spinlock可搶占。起初spinlock不可搶占性設(shè)計(jì)目的是避免死鎖,可搶占性設(shè)計(jì)可能導(dǎo)致競(jìng)爭(zhēng)者與保持者的死鎖局面。中斷處理函數(shù)中也可以使用spinlock,如果spinlock已經(jīng)被某一進(jìn)程保持,則中斷處理函數(shù)無(wú)法進(jìn)行,從而形成死鎖。中斷線程化以后,中斷線程將掛在等待隊(duì)列上并放棄CPU讓別的線程或進(jìn)程來(lái)運(yùn)行,讓每個(gè)spinlock都有一個(gè)等待隊(duì)列,該等待隊(duì)列按進(jìn)程或線程優(yōu)先級(jí)排隊(duì),如果一個(gè)進(jìn)程或線程競(jìng)爭(zhēng)的spinlock已經(jīng)被另一個(gè)線程保持,它將把自己掛在該spinlock的優(yōu)先級(jí)化的等待隊(duì)列上,然后發(fā)生調(diào)度把CPU讓給別的進(jìn)程或線程。mutex替換spinlock后,spinlock結(jié)構(gòu)定義如下代碼:
    typedef struct {
        struct rt_mutex lock;            //新的實(shí)時(shí)互斥鎖
        unsigned int break_lock;
    } spinlock_t;
    其中struct rt_mutex結(jié)構(gòu)如下:
    struct rt_mutex {
        raw_spinlock_t wait_lock;
        struct plist wait_list;                  //優(yōu)先級(jí)等待隊(duì)列
        struct task_struct *owner;     //擁有該鎖進(jìn)程的信息
        int owner_prio;
        &hellip; &hellip;
    };
  在如上代碼中,類型raw_spinlock_t就是原來(lái)的spinlock_t。即代碼中的spinlock_t就是新設(shè)計(jì)的自旋鎖。rt_mutex結(jié)構(gòu)中,wait_list字段為優(yōu)先級(jí)等待隊(duì)列。在mutex使用中,當(dāng)遇到鎖住的臨界資源時(shí),任務(wù)被掛起到wait_list中,臨界資源解鎖時(shí)等待任務(wù)被激活。臨界資源被保護(hù)的同時(shí)可以搶占。
    由于Linux內(nèi)核底層的臨界資源是不可搶占的,使用mutex替換spinlock的過(guò)程中,這部分可以保留,仍由不可搶占的spinlock保護(hù),如:保護(hù)硬件寄存器的鎖、調(diào)度器的運(yùn)行隊(duì)列鎖等。不可搶占的spinlock被重新命名為raw_spinlock_t。spin_lock被宏定義為:
 #define spin_lock(lock)  PICK_OP(raw_spinlock_t,spin,_lock,lock)
 函數(shù)PICK_OP支持兩種鎖共存機(jī)制,PICK_OP在編譯階段將鎖操作轉(zhuǎn)化為mutex或者spinlock:
   #define PICK_OP(type, optype, op, lock) \
          do { \
          if (TYPE_EQUAL((lock), type)) \
          _raw_##optype##op((type *)(lock)); \
          else if (TYPE_EQUAL(lock, spinlock_t)) \
          //調(diào)用gcc的內(nèi)嵌函數(shù)__builtin_types_compatible_p()
      _spin##op((spinlock_t *)(lock)); \
          else __bad_spinlock_type(); \
          } while (0)
         #define TYPE_EQUAL(lock, type) \
    __builtin_types_compatible_p(typeof(lock), type *)
  gcc的內(nèi)嵌函數(shù)__builtin_types_compatible_p用于判斷一個(gè)變量的類型是否為某指定的類型,如果類型為spinlock_t,將運(yùn)行函數(shù)_spin_lock;類型為raw_spinlock_t,將運(yùn)行函數(shù)_raw_spin_lock。
   實(shí)時(shí)rt_mutex在具體應(yīng)用中,一個(gè)高優(yōu)先級(jí)任務(wù)搶占該鎖的同時(shí),把先前的鎖擁有者添加到互斥鎖等待隊(duì)列中,并在當(dāng)前擁有該鎖的任務(wù)task_struct中標(biāo)記等待該鎖的所有任務(wù);反之,不能得到該鎖就把當(dāng)前任務(wù)添加到鎖的優(yōu)先級(jí)等待隊(duì)列中,直到喚醒執(zhí)行。為了防止優(yōu)先級(jí)逆轉(zhuǎn),可以改變鎖的當(dāng)前擁有者的優(yōu)先級(jí)為鎖的等待隊(duì)列中任務(wù)的最高優(yōu)先級(jí)。
 rt_mutex可以使高優(yōu)先級(jí)任務(wù)利用搶占鎖進(jìn)入臨界區(qū),這樣內(nèi)核不可搶占區(qū)的數(shù)量和范圍大大縮小,內(nèi)核可搶占性有了很大的提高,且降低了實(shí)時(shí)高優(yōu)先級(jí)任務(wù)的搶占延遲,改善了系統(tǒng)的實(shí)時(shí)性能。
2.3 可搶占大內(nèi)核鎖設(shè)計(jì)
 大內(nèi)核鎖BKL(Big Kernel Lock)實(shí)質(zhì)上也是spinlock,它用于保護(hù)整個(gè)內(nèi)核,該鎖保持時(shí)間較長(zhǎng),對(duì)系統(tǒng)的實(shí)時(shí)性能影響很大[6]。采用Ingo Molnar的實(shí)時(shí)化方法,BKL使用semaphore實(shí)現(xiàn),結(jié)構(gòu)定義如下代碼:
         struct semaphore {
         atomic_t count;
         struct rt_mutex lock;              //實(shí)時(shí)互斥鎖的使用
        };
   由結(jié)構(gòu)體發(fā)現(xiàn),在BKL實(shí)現(xiàn)中利用了實(shí)時(shí)互斥鎖rt_mutex,在改進(jìn)后的spinlock結(jié)構(gòu)體spinlock_t中也利用了實(shí)時(shí)互斥鎖rt_mutex,因此可搶占大內(nèi)核鎖和新的spinlock共用了低層的處理代碼。使用semaphore之后,大內(nèi)核鎖就可搶占了。
3 內(nèi)核實(shí)時(shí)性測(cè)試
   針對(duì)Linux2.6內(nèi)核,本文并沒(méi)有作出對(duì)內(nèi)核調(diào)度算法的修正,只是探討了中斷運(yùn)行機(jī)制、自旋鎖及大內(nèi)核鎖技術(shù)在系統(tǒng)實(shí)時(shí)性能上的局限性,所以實(shí)驗(yàn)測(cè)試主要測(cè)試中斷延遲時(shí)間和任務(wù)響應(yīng)時(shí)間。實(shí)驗(yàn)環(huán)境: Intel 2 GHz CPU,256 DDR內(nèi)存,Kernel 2.6.22版本。測(cè)試結(jié)果如表1所示。

    由表可知,在中斷服務(wù)程序中寫入標(biāo)記,測(cè)試中斷觸發(fā)至中斷服務(wù)程序執(zhí)行平均響應(yīng)時(shí)間,標(biāo)準(zhǔn)Linux2.6內(nèi)核平均中斷響應(yīng)時(shí)間為182 &mu;s,改進(jìn)后Linux2.6內(nèi)核為14 &mu;s。采用開源軟件LMbench3.0 測(cè)試系統(tǒng)任務(wù)調(diào)度延遲時(shí)間,標(biāo)準(zhǔn)Linux2.6內(nèi)核平均任務(wù)響應(yīng)時(shí)間為1 260 &mu;s,改進(jìn)后Linux2.6內(nèi)核為162&mu;s。由此可見,改進(jìn)策略在一定程度上大大減小了中斷延遲和任務(wù)調(diào)度時(shí)間,有利于改善移動(dòng)機(jī)器人任務(wù)處理的實(shí)時(shí)性能。
 本文基于Linux2.6內(nèi)核的關(guān)中斷、中斷優(yōu)先級(jí)、內(nèi)核的不可搶占性以及大內(nèi)核鎖保持時(shí)間過(guò)長(zhǎng)等問(wèn)題進(jìn)行了實(shí)時(shí)性分析,提出了相應(yīng)的改進(jìn)方法。利用中斷線程化、互斥鎖的應(yīng)用及大內(nèi)核鎖的改進(jìn)等技術(shù)提高了系統(tǒng)的實(shí)時(shí)性能,降低了內(nèi)核中斷延遲和調(diào)度延遲。改進(jìn)后的內(nèi)核在移動(dòng)機(jī)器人控制器平臺(tái)中有很好的應(yīng)用價(jià)值,提高了機(jī)器人控制的實(shí)時(shí)性能。
參考文獻(xiàn)
[1]  吳軍,周轉(zhuǎn)運(yùn). 嵌入式Linux系統(tǒng)應(yīng)用基礎(chǔ)與開發(fā)范例[M].北京:人民郵電出版社,2007.
[2]  LOV R.Linux kernel development[M].陳莉君,等譯.北京: 機(jī)械工業(yè)出版社,2005.
[3]  鄒勇,王青,李明樹.Linux內(nèi)核的實(shí)時(shí)支持的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2002,39(4):466-472.
[4]  張玉芳,熊忠陽(yáng),王銀輝,等.Linux實(shí)時(shí)化設(shè)計(jì)方法研究[J].小型微型計(jì)算機(jī)系統(tǒng),2009,30(3):421-424.
[5]  吳嬌梅,李紅艷,吳保榮,等.改善嵌入式Linux 實(shí)時(shí)性能的方法研究[J].微計(jì)算機(jī)信息,2006(1-2):46-47.
[6]  厲海燕,李新明.Linux搶占式內(nèi)核的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(9):2395-2399.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。