Linux的硬體實時性

2021-09-25 03:30:24 字數 1343 閱讀 7306

linux核心(linux-2.6以前) 是不可搶占的,但支援使用者搶占它的排程方法是:乙個程序可以通過schedule()函式自願地啟動一次排程。非自願的強制性排程只能發生在每次從系統呼叫返回的前夕以及每次從中斷或異常處理返回到使用者空間的前夕(這種強制性排程又叫使用者搶占)。但是,如果在系統空間發生中斷或異常是不會引起排程的。這種方式使核心實現得以簡化。

linux核心(linux-2.6) 加入了核心搶占(preempt)機制。核心搶占指使用者程式在執行系統呼叫期間可以被搶占,該程序暫時掛起,使新喚醒的高優先順序程序能夠執行。這種搶占並非可以在核心中任意位置都能安全進行,比如在臨界區中的**就不能發生搶占。臨界區是指同一時間內不可以有超過乙個程序在其中執行的指令序列。在linux核心中這些部分需要用自旋鎖保護。舊的spin_lock變為可搶占,新核心需要使用raw_spin_lock才可保護臨界區。

修改搶占模式:

kernel features

-> preemption model

no forced preemption(server):非強迫式搶占。

這是傳統的linux搶占式模型,針對於高吞吐量設計。它同樣在很多時候會提供很好的響應,但是也可能會有較長

的延遲。如果是要建立伺服器或者用於科**算,或者要最大化核心的運算能力而不理會排程上的延遲,則選這項。

voluntary kernel preemption(desktop):自動式核心搶占。

這個選項通過向核心新增更多的「清晰搶占點」來減少核心延遲。這些新的搶占點以降低吞吐量為代價,來降低內

核的最大延遲,提供更快的應用程式響應。這通過允許低優先順序的程序自動搶占來響應事件,即使程序在核心中

進行系統呼叫。這使得應用程式執行得更「流暢」,即使系統已經是高負荷運轉。嵌入式系統裡面通常選擇n。

preemptible kernel(low-latency desktop):可搶占式核心(低延遲桌面)。

這個選項通過使所有核心**(非致命部分)編譯為「可搶占」來降低核心延遲。通過允許低優先順序程序進行強制搶占來響應事件,即使這些程序正在進行系統呼叫或者未達到正常的「搶占點」。這使得應用程式執行得更加「流暢」,即使系統已經是高負荷運轉。代價是吞吐量降低,核心執行開銷增大。嵌入式系統編譯核心通常選擇y,這樣只有很少的延遲。

linux 2.6新增搶占功能後,實時性大幅提高,但是由於不支援中斷巢狀,以及系統中使用大量的自旋鎖保護臨界區,導致高優先順序硬體中斷不能被及時響應。

linux 非實時性

linux是非實時作業系統,雖然支援rt排程策略,但是並非是硬實時系統。linux非實時性主要表現在下面幾個方面 1.虛擬記憶體管理,導致實際物理記憶體分配的滯後性 2.排程策略問題,實時排程策略不能立即搶占,一般要在中斷返回,系統呼叫返回使用者空間時 通過檢查need resched標記,進行重新...

linux和vxworks的實時性

硬實時與軟實時之間最關鍵的差別在於,軟實時只能提供統計意義上的實時。sys clk rate是1000,那麼就是1ms。如果是60那麼就大約是16.67ms。我們的裝置就是60 通常來講,vxworks手冊建議不要將時鐘率設得太高,否則它就由硬實時變得趨向於軟實時了。因為過高的時鐘率使得核心排程頻繁...

實時性之硬實時與軟實時

什麼是實時性?實時性指時鐘訊號能夠準確的定時,各處的時鐘能夠達到一致。什麼是硬實時?硬實時系統有乙個剛性的 不可改變的時間限制,它不允許任何超出時限的錯誤。超時錯誤會帶來損害甚至導致系統失敗 或者導致系統不能實現它的預期目標。什麼是軟實時?軟實時系統是乙個柔性靈活的,它可以容忍偶然的超時錯誤。失敗造...