2012-04-05 30 views
1

Xenomai's API of Posix skin中,我找到以下內容:什麼樣的代碼不應該寫成實時代碼?

POSIX皮膚。
時鐘和定時器服務。
條件變量服務。
中斷管理服務。
消息隊列服務。
互斥服務。
信號量服務。
共享內存服務。
信號服務。
線程管理服務。
線程取消。
線程調度服務。
線程創建屬性。
線程特定的數據。

我什麼都看不到關於文件處理套接字編程,所以我猜測,也許是文件處理和插座不要在實時處理?猜測錯了嗎?

請指導。

回答

4

Xenomai及其來源RTAI都控制您的調度程序,將Linux內核本身作爲非實時線程來處理。

他們提供了許多服務,其中大部分服務與線程和同步化有關,不會調用Linux API(在內核空間中)或系統調用(在用戶空間中)。如你所知,實時是關於「保證最後期限」,並稱Linux違反了它(因爲Linux不保證任何內容)。

由於驅動程序也是實時系統重要的是,他們已經實現了實時驅動程序模型,或RTDM有助於在實時情況下都實現和使用的設備驅動程序。

在內核中的文件處理是強烈的不滿。如果您正在討論用戶空間實時應用程序,那麼您可以訪問在RTDM中實現的任何驅動程序。如果你沒有找到一個文件處理或套接字,那麼你不能使用它們。請注意,即使是printf也使用Linux系統調用並且被禁止。

請注意,如果您確實使用它們,則沒有任何問題,您只是失去了實時性!我個人確實使用文件進行日誌記錄,但是隻有在出現錯誤時纔打電話給他們,這意味着實時服務已經被破壞了。

我不知道Xenomai,但至少在RTAI中,如果您調用Linux系統調用,則會在內核日誌中收到類似「RTAI:LXRT changed mode:syscall ...」的警告。

+0

這非常有幫助。謝謝。除了Xenomai說什麼之外,你能指點我一個實時談論做什麼和不該做什麼的鏈接嗎? – 2012-04-05 09:31:07

+0

@AnishaKaul,讓我搜索。不幸的是,互聯網上沒有太多的實時應用程序/用戶可以獲得廣泛的信息。 – Shahbaz 2012-04-05 09:32:29

+0

是的,這是問題。請在這裏找到鏈接。謝謝。 – 2012-04-05 09:33:55

1

實時是整個系統的性能。要在系統中的所有組件(包括硬件,操作系統,驅動程序,庫和應用程序)的設計應考慮到適用於實時系統的要求實現的實時性。這些組件(如RTOS)可用於構建實時系統。但是它們的使用並不意味着最終系統將成爲實時系統。其實,如果你的系統的組件的至少一個不支持實時系統的要求,整個系統將無法實時!

實時系統通常具有顯着超過實時任務的平均需求的資源。未消耗的資源可用於執行有用但非關鍵的後臺任務,例如日誌記錄,系統狀態監視,統計信息收集和分析等。執行此任務的應用程序可以設計爲非實時組件,它們運行在頂層的實時組件。如果您確定參與實時任務的所有組件都支持實時要求,那麼此設計是安全的。由於這個直接回答你的問題:

它完全取決於應用程序。通常,所有未用於處理實時任務的代碼都可以寫成非實時代碼。用於處理實時任務的所有代碼必須寫爲實時。

Xenomai正在做什麼是隔離非實時Linux及其活動,用於處理特殊容器中的非實時任務,該特殊容器運行在RTOS內核之上並與RTOS並行運行基於實時的任務。要在Xenomai基礎上構建實時系統,您的應用程序應該只依賴Xenomai API以及其他已知且已被證明是實時的庫和API。所有可能有用的背景活動,但完全不加批判的都可以編寫成一個有序的Linux應用程序。

像存儲和網絡服務這樣的系統和服務通常不用於實時任務,因爲常用硬件非常不確定,因此不適合實時概念。很難說通過網絡發送五個數據包或將文件寫入HDD需要多少時間。由於這個原因,這種系統的接口並不常見。但是,應用程序再一次指出了它需要的實時服務。我可以想象實時任務,涉及存儲和網絡操作。在這種任務的情況下,設計者被迫尋找這樣的系統組件,其將提供實時存儲和網絡服務。正如你所看到的,Xenomai不是候選人。

相關問題