2010-01-18 83 views
0

我已經被賦予了修復用C/C++編寫的嵌入式操作系統的任務。當前正在使用的線程調度程序與Round Robin Scheduling非常相似,只是它缺少一個非常重要的功能,即中斷線程並返回執行的能力,從而創建可執行時間的「切片」。實時嵌入式操作系統的線程調度程序

我的問題是,一個人如何去中斷運行的代碼,執行另一個任務,然後優雅地恢復執行?我相信這種行爲需要特定於架構的彙編器。這是操作系統將運行的芯片:http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPC860

在附註中,這是航空電子軟件,因此它必須是「確定性」。除此之外,沒有堆用法,所有內存都必須有界。

目前的系統是「週期性的過程」中的下一個任務必須等待第一個完成。這很簡單可怕,如果操作系統的某個部分崩潰了,讓我們說ATN堆棧,那麼整個操作系統就會陷入困境。 (插入失事飛機在這裏......雖然這是B類的軟件,這意味着如果系統的飛機將不會崩潰。)

+7

把時間從航空公司拉出來。我想認爲編寫航空電子軟件的人知道這些答案! – 2010-01-18 17:42:18

+1

不幸的是,'導航危害'不是一個有效的密切原因。 – bmargulies 2010-01-18 17:49:37

+5

廢話,不要試圖自己在(大概)安全關鍵軟件中做到這一點。航空電子不適用於業餘愛好者。目前已有數百萬種商業實現需求,其中許多已經在飛行認證應用中使用。去買那些。 – Novelocrat 2010-01-18 17:58:36

回答

7

免責聲明:請不要使用我的建議。找一個專家,如果人們的幸福取決於一個系統,那麼不要把它留給偶然/黑客/ SO建議!

Plane oops http://xs.to/thumb-AF83_4B54A285.jpg

你應該能夠寫入其以公知的時間間隔通過中斷進入了新的方法,使用現有的調度功能保存線程狀態和改變線程上下文。此外,確保您的鎖定原語與新的調度一起工作,並且您不會混淆基於非原子/非指令的鎖定或任何其他事物。

This website提供了有關線程切換,保存狀態等有用信息。最終中斷是特定於您的CPU /硬件的。保存線程狀態的方式也取決於系統的約束和您正在使用的線程結構。

Modern Operating Systems 3rd Edition包含理論上的一些很好的塊,但實現取決於現有代碼和最佳實踐,以及內核中處理中斷,信號等的其他代碼。

而且「實時系統設計與分析菲利普。Laplante提供」可以用於適配現有的調度新的要求一個很好的資源。Another interesting bit of text

4

如果這是一個操作系統,一個真正的操作系統,當然它的交談,硬件。它必須有中斷處理才能處理I/O設備。

有時定時器中斷將來自CPU本身,但在其它的系統體系結構它將來自IO控制器或一些其它裝置。

一個通用的設計替代方案是隻在小量子塊中提供CPU時間,以便調度程序可以更頻繁地重新考慮,但是從這裏沒有人能夠告訴您這個問題是否會讓您的問題更好或更糟。

所以這是實在沒辦法的人是要能夠在這裏給你一個詳細的藥方。

除,當然,你的僱主報告給FAA。

+0

我認爲你錯了。 – rook 2010-01-18 18:09:35

+1

好吧,顯然,因爲你低估了我。小心解釋*爲什麼*?或者細節*在哪些方面*?我在1982年編程這種事情。 – bmargulies 2010-01-18 18:12:13

+0

很好的答案。 +1 – 2010-01-18 18:17:56

1

如果我正確地閱讀了你的問題,我想你想給你的調度器添加線程優先級。調度相同優先級循環的所有線程,但允許更高優先級搶佔較低優先級的線程。

您必須已經有設施來保存和恢復線程的上下文才能進行循環時間分片。

+0

不是,它是一個週期性的過程,下一個任務必須等待第一個完成。 – rook 2010-01-18 18:10:08

+2

哇。我很驚訝,我不是從你清晰簡明的問題描述中理解的。祝你好運。 – 2010-01-18 18:13:02

+0

對我有+1 ...噶和所有:) – 2010-01-18 18:14:09

相關問題