<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Linux在嵌入式系統(tǒng)中有關(guān)進程調(diào)度算法的實時性改進

          Linux在嵌入式系統(tǒng)中有關(guān)進程調(diào)度算法的實時性改進

          作者: 時間:2012-04-06 來源:網(wǎng)絡(luò) 收藏


          從上面的goodness() 函數(shù)可以看出普通 內(nèi)核的算法只是軟實時的,并不是硬實時的。 尤其不能作為硬實時應(yīng)用,主要有以下幾個原因:

          (1) L INUX 內(nèi)核的實時進程的調(diào)度算法當(dāng)中,SCHED RR 和SCHED RR 調(diào)度策略的主要不同點在于,SCHED RR 進程在一個時間片運行完以后被放到運行隊列的最后。 L INUX的每一個進程都有一個調(diào)度策略,在進程描述結(jié)構(gòu)task struct 中規(guī)定policy 屬性。 所有的進程不管采用哪一種調(diào)度策略,都放在同一個運行隊列中。這樣做,就對實時進程的響應(yīng)產(chǎn)生了影響。

          (2) 的內(nèi)核是非搶占式的( non-preemptive) 。

          (3) 策略不是完全搶占式的。

          (4) Linux 的虛擬內(nèi)存技術(shù)(virtual memory)增加了系統(tǒng)的不確定性。

          (5) Linux 采用的時鐘中斷的精度不高。

          (6) Linux 系統(tǒng)的一些額外操作會延遲實時進程的執(zhí)行。

          綜上所述,不經(jīng)處理的Linux 是不適合做實時的,即便是軟實時,在系統(tǒng)負(fù)荷重的情況下也不能保證其。 但通過對Linux 內(nèi)核的改造完全可以提高Linux 的,甚至可以滿足實時的要求。

          LINUX 改造的實現(xiàn)方法

          實現(xiàn)LINUX 的實時性一般有兩種方法: 一種是對普通的LINUX 的內(nèi)核的數(shù)據(jù)結(jié)構(gòu)、調(diào)度函數(shù)、中斷方式等進行修改使其能夠處理實時進程。另一種是在LINUX 內(nèi)核之外,進行實時性擴展。 也就是在普通LINUX 的基礎(chǔ)之上再設(shè)計一個用于專門處理實時進程的內(nèi)核。 為了提高LINUX 的實時性,并且使之能夠在嵌入式系統(tǒng)中更好地滿足硬實時系統(tǒng)的要求,采用上述兩種方法結(jié)合的兩種方式來提高系統(tǒng)的實時性。

          外部實時性擴展

          對LINUX 做外部實時性擴展最主要的思想是在硬件中斷與原來的LINUX 內(nèi)核之間增加一個實時內(nèi)核。 在原來的LINUX 內(nèi)核的基礎(chǔ)上,增加一個實時內(nèi)核可以解決LINUX 原有內(nèi)核的關(guān)中斷的問題。

          對于實時內(nèi)核來說,它始終不關(guān)閉硬件中斷,可以接受所有的中斷信號。 當(dāng)中斷信號需要實時進程來處理時,實時進程將搶占LINUX 內(nèi)核,在RTLINUX中把原來的LINUX 內(nèi)核作為一個普通進程來對待,并且它的優(yōu)先級是最低的。 如果中斷信號需要原來的LINUX 內(nèi)核來處理,則由實時內(nèi)核信號傳遞給LINUX 內(nèi)核。 同時內(nèi)核中提供一個標(biāo)志位用來模擬原來的LINUX 內(nèi)核的關(guān)中斷情況。這個標(biāo)志字在LINUX 打開中斷的時候置1 ,關(guān)中斷的時候置0。 實時內(nèi)核在中斷到來的時候檢查這個標(biāo)志位,如果是置1 的,那立刻將中斷傳給LINUX 內(nèi)核,否則的話,將所有待處理的中斷放入一個隊列中,一直到LINUX 打開中斷時才將它們一起傳給內(nèi)核。

          內(nèi)部實時性改造

          對Linux 內(nèi)部實時性改造有兩個方面的工作: (1) 對時鐘機制的改造。 (2) 在內(nèi)核方面的搶占性改造。 改造的目的是為了縮短Linux 內(nèi)核的響應(yīng)延時。

          (1) 在時鐘機制的改造方面,可以通過提高系統(tǒng)時鐘的精度來增強系統(tǒng)的實時性,特別是對外部中斷的響應(yīng)。因為精確的時鐘是進行準(zhǔn)確的調(diào)度工作的必不可少的條件。 執(zhí)行調(diào)度就要求在特定的時間進行任務(wù)切換。不精確的時鐘會導(dǎo)致調(diào)度偏差,從而導(dǎo)致無法預(yù)計的結(jié)果。所以提高時鐘精度,減少調(diào)度偏差是非常重要的。在中,時鐘精度不高的原因之一是因為:周期性時鐘中斷的使用。操作系統(tǒng)不得不將大量的時間開銷用于處理時鐘中斷。 Linux。 操作系統(tǒng)也是如此。 在Linux 中,它的中斷頻率被設(shè)為100Hz。即大約每10ms 產(chǎn)生一次定時中斷。

          (2) 在內(nèi)核搶占性方面的改造有兩種方法:一種是搶占點的方法。另一種是搶占式內(nèi)核的設(shè)計。所謂搶占就是內(nèi)核在某個合適的地方調(diào)用schedule() 函數(shù)來檢查是否有高優(yōu)先級的任務(wù)已經(jīng)處于ready 狀態(tài)并讓這個高優(yōu)先級任務(wù)運行。為了提高系統(tǒng)的實時性,搶占的選擇要合理,既不能時間間隔太短,也不能太長,因此,在設(shè)置搶占點的時候要測試內(nèi)核中的運行路徑,在較長的運行路徑中插入schedule() 。 進行調(diào)度,這個地方就是搶占點。

          另一種是搶占式內(nèi)核的設(shè)計,即允許處于系統(tǒng)調(diào)用狀態(tài)的用戶進程被剛剛喚醒的高優(yōu)先級進程所搶占。 但是這種搶占方式并不是在內(nèi)核代碼的所有地方都是安全的,如在臨界區(qū)就不能搶占。

          結(jié)論

          綜上所述,不經(jīng)改進的Linux 操作系統(tǒng)是不適合做實時操作系統(tǒng)的,即便是軟實時,在系統(tǒng)負(fù)荷重的情況下也不能保證其實時性。 但通過對Linux 的改造可以完全提高Linux 的實時性,甚至可以滿足硬實時的要求。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();