嵌入式Linux實(shí)時(shí)化技術(shù)
Linux實(shí)時(shí)化技術(shù)及評(píng)價(jià)
本文引用地址:http://butianyuan.cn/article/106458.htm2.6版本Linux內(nèi)核實(shí)時(shí)性能有一定增強(qiáng),雙內(nèi)核方式的Linux實(shí)時(shí)化技術(shù)也在不斷發(fā)展中。原來(lái)由FSMLab維護(hù)的RTLinux,其版權(quán)在2007年2月被Wind River購(gòu)買,RTAI支持x386等體系結(jié)構(gòu),但由于其代碼較難維護(hù)、bug較難調(diào)試等原因,許多開發(fā)者加入了Xenomai項(xiàng)目。Xenomai支持最新2.6版 Linux,相比之下代碼相對(duì)穩(wěn)定和可維護(hù),開發(fā)模式較活躍。
內(nèi)核補(bǔ)丁方式的Linux實(shí)時(shí)化技術(shù)在2.6版內(nèi)核基礎(chǔ)上做了大量改進(jìn),使得內(nèi)核中除了中斷關(guān)閉和IRQ線程分派、調(diào)度和上下文切換之外的絕大部分代碼都可以被搶占,不可搶占的自旋鎖保護(hù)臨界區(qū)從一千多個(gè)減少到幾十個(gè),使得內(nèi)核實(shí)時(shí)性得到極大的提高,獲得社區(qū)廣泛支持并逐漸成為L(zhǎng)inux實(shí)時(shí)化主流技術(shù)。
Linux內(nèi)核實(shí)時(shí)化改進(jìn)
實(shí)時(shí)搶占內(nèi)核補(bǔ)丁針對(duì)Linux各種延遲進(jìn)行了實(shí)時(shí)化改進(jìn),主要包括了幾個(gè)方面的技術(shù)。
● 實(shí)時(shí)搶占內(nèi)核
為了實(shí)現(xiàn)內(nèi)核完全可搶占,實(shí)時(shí)內(nèi)核臨界區(qū)用高性能優(yōu)先級(jí)繼承mutex替換原來(lái)自旋鎖(spin-lock)來(lái)進(jìn)行保護(hù),使得在臨界區(qū)內(nèi)的執(zhí)行也可被搶占。只有當(dāng)線程想訪問(wèn)一個(gè)其他線程正在訪問(wèn)的臨界區(qū)時(shí),才被調(diào)度至睡眠,直到所保護(hù)的臨界區(qū)被釋放時(shí)被喚醒。
在實(shí)時(shí)搶占內(nèi)核中通過(guò)優(yōu)先級(jí)繼承機(jī)制(PI)在線程被一個(gè)低優(yōu)先級(jí)線程所持有的資源阻塞時(shí),低優(yōu)先級(jí)線程通過(guò)繼承被阻塞線程優(yōu)先級(jí),盡快執(zhí)行并釋放所持資源而不被其他線程所搶占。
● 新型鎖機(jī)制帶來(lái)內(nèi)核性能提升
實(shí)時(shí)搶占補(bǔ)丁替換了大內(nèi)核鎖(BKL),將BKL從spin lock改成是mutex,持有BKL的線程也可以被搶占,減少了內(nèi)核調(diào)度延遲。此外,實(shí)時(shí)搶占補(bǔ)丁通過(guò)mutex替代semaphore,避免了不必要的時(shí)間負(fù)載。實(shí)時(shí)搶占補(bǔ)丁實(shí)現(xiàn)了可搶占的RCU(Read- Copy Update)鎖和串行化讀寫鎖,保證了執(zhí)行可預(yù)測(cè)性,提高了性能。
● 中斷線程化
實(shí)時(shí)搶占補(bǔ)丁通過(guò)內(nèi)核線程來(lái)實(shí)現(xiàn)一些硬件中斷和軟件中斷的服務(wù)程序。體系結(jié)構(gòu)相關(guān)處理代碼設(shè)置IRQ狀態(tài)、檢查線程化的中斷是否使能,并喚醒相關(guān)線程。在中斷線程被調(diào)度執(zhí)行后,進(jìn)行中斷服務(wù)處理。在實(shí)時(shí)搶占內(nèi)核中,用戶線程優(yōu)先級(jí)可以高于設(shè)備中斷服務(wù)線程。實(shí)時(shí)任務(wù)無(wú)需等待設(shè)備驅(qū)動(dòng)處理程序執(zhí)行,減小了實(shí)時(shí)搶占延遲。
● 時(shí)鐘系統(tǒng)改進(jìn)
實(shí)時(shí)搶占內(nèi)核的時(shí)鐘系統(tǒng)重新進(jìn)行了設(shè)計(jì),實(shí)現(xiàn)了高精度定時(shí)器。時(shí)鐘精度不再依賴jiffies,使POSIX定時(shí)器和nanosleep精度由具體硬件所能提供的精度決定,使得gettimeofday能夠提供實(shí)時(shí)系統(tǒng)所需的精確時(shí)間值。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論