專利名稱:實時中斷與多個進程狀態(tài)同步的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機操作系統(tǒng)中實時中斷與多個進程狀態(tài)同步的方法。
背景技術(shù):
資源共享和狀態(tài)同步是計算機操作系統(tǒng)的重要研究課題。各個進程之間共享的各種資源 和狀態(tài),必須保持同步,以保證數(shù)據(jù)的完整性。操作系統(tǒng)通過必要的手段為各個進程提供一 致和可靠的狀態(tài)。進程的并發(fā)產(chǎn)生競態(tài),使各個進程可見的資源狀態(tài)可能由于執(zhí)行順序不同
而有所不同。未能對競態(tài)進行正確的處理將導(dǎo)致系統(tǒng)狀態(tài)錯亂。 一些進程間通信(IPC)機制
被引入操作系統(tǒng),以解決并發(fā)請求所引起的競態(tài)所產(chǎn)生的編程問題,如信號量、互斥、管道、 鎖機制等。
在驅(qū)動程序的設(shè)計中,可能有多個進程共享同一硬件資源,即各進程需根據(jù)硬件的某個 特定狀態(tài)對這些共享的硬件資源進行適當(dāng)?shù)呐渲?。將在共享的硬件資源上進行的一組操作定
義為一個工作單元(Unit)。這些并發(fā)的工作單元必須保證其設(shè)置與硬件狀態(tài)所規(guī)定的工作狀 態(tài)一致。各個進程之間可以用傳統(tǒng)IPC機制進行處理。
中斷的產(chǎn)生使競態(tài)的處理更為復(fù)雜。如果中斷的產(chǎn)生正好代表著工作單元所依據(jù)的硬件 狀態(tài)發(fā)生了變化,對于一個沒有執(zhí)行完畢的工作單元,當(dāng)程序從中斷返回時,工作單元就會 依據(jù)已經(jīng)過時的狀態(tài)繼續(xù)操作,顯然,如果不對這種情況進行處理,系統(tǒng)就會工作在錯誤的 狀態(tài)。
由于中斷處理程序的特殊性,中斷處理程序有一些特別的限制。首先,中斷必須盡快得 到響應(yīng),;其次中斷處理程序必須盡可能短;最后,中斷不能阻塞,不可在中斷處理程序中 睡眠,中斷中也不能發(fā)生調(diào)度。普通的IPC機制一般以睡眠的方式等待所需的資源。由于中 斷處理程序的限制,普通的IPC機制大多不適于中斷處理程序和進程之間的同步。中斷和進 程之間一般通過事件通知模型來進行通信。進程在某一個信號量或者等待隊列中睡眠,直到 中斷將這一資源可用的消息通知給進程。事件通知模型適于基于狀態(tài)的變化而不是狀態(tài)本身 進行工作的進程和中斷處理程序之間的通信和同步,在后一種情況下,進程可在任何狀態(tài)下
工作,所以不會等待某個狀態(tài)發(fā)生變化。還有一種可選的方式是在工作單元執(zhí)行前后關(guān)閉
和打開中斷,并用定時器査詢的方式獲得與硬件狀態(tài)的同步的方式。但是較低的系統(tǒng)執(zhí)行效 率和較高的開銷也使這種模型不太適合。目前,使用事件通知模型進行資源共享和同步的技 術(shù)已經(jīng)得到廣泛的運用,但是對基于硬件狀態(tài)而不是狀態(tài)變化的進程和中斷處理程序之間的 同步還沒有有效的模式,急需發(fā)展新的模型來解決。
發(fā)明內(nèi)容
為克服現(xiàn)有技術(shù)中的缺陷和不足,本發(fā)明的目的在于提供一種實時中斷與多個進程狀態(tài) 同步的方法。
為達到上述目的,本發(fā)明采用以下技術(shù)方案
實時中斷與多個進程狀態(tài)同步的方法,包括
(1) 設(shè)置進程中任務(wù)的啟動和終止函數(shù)、啟動標志,并定義中斷計數(shù)變量;
(2) 進入中斷處理程序,將中斷計數(shù)變量值加l,獲得需要處理的任務(wù)的啟動標志,并 對已啟動的任務(wù)進行狀態(tài)切換操作,完成對己啟動任務(wù)的設(shè)置;
(3) 執(zhí)行任務(wù)啟動函數(shù),獲得當(dāng)前的中斷計數(shù)變量值、任務(wù)寫鎖,啟動任務(wù)后,再次獲 得中斷的計數(shù)變量值;比較前后兩次獲得的計數(shù)變量值的奇偶性是否相同,若相同,則任務(wù) 啟動完成,進入步驟(4);若不同,則對該任務(wù)進行狀態(tài)切換操作,重復(fù)步驟(3);
(4) 由任務(wù)終止函數(shù)完成任務(wù)的終止,釋放設(shè)備資源。 其中,步驟(2)中的切換操作包括
(A) 關(guān)閉在前一狀態(tài)下打開的設(shè)備,釋放相關(guān)的設(shè)備資源;
(B) 為新的狀態(tài)設(shè)置打開新的設(shè)備,獲得相關(guān)資源,完成設(shè)備設(shè)置。 其中,步驟(3)具體為
(31) 獲得當(dāng)前的中斷計數(shù)變量值并保存,并根據(jù)獲得的當(dāng)前任務(wù)寫鎖,執(zhí)行任務(wù)的工 作單元;
(32) 重新獲得中斷計數(shù)變量值,比較前后兩次獲得中斷計數(shù)變量值的奇偶性是否相同, 若相同,設(shè)置任務(wù)啟動完成標志后釋放任務(wù)寫鎖;若不相同,則對該任務(wù)進行狀態(tài)切換操作, 調(diào)整設(shè)備設(shè)置后釋放任務(wù)寫鎖。 其中,步驟(3)具體為
(311) 獲得當(dāng)前的中斷計數(shù)變量值并保存,并根據(jù)獲得的當(dāng)前任務(wù)寫鎖,執(zhí)行任務(wù)的工 作單元;
(312) 重新獲得中斷計數(shù)變量值;
(313) 比較前后兩次獲得中斷計數(shù)變量值的奇偶性是否相同,若相同,設(shè)置任務(wù)啟動完 成標志后釋放任務(wù)寫鎖;若不相同,則將重新獲得的中斷計數(shù)變量值設(shè)置為當(dāng)前的中斷計數(shù) 變量值后對該任務(wù)進行狀態(tài)切換操作,返回步驟(312)。
與現(xiàn)有技術(shù)相比,本發(fā)明充分利用了操作系統(tǒng)提供的IPC機制,不需要自定義附加的數(shù) 據(jù)結(jié)構(gòu),算法簡單;使用前后兩次中斷計數(shù)值的奇偶性作為工作單元執(zhí)行結(jié)果有效性的判據(jù), 代價低。任務(wù)啟動標志使中斷處理程序不需做多余的切換操作,啟動函數(shù)工作單元執(zhí)行之后 的善后處理保證了軟件設(shè)置與硬件狀態(tài)一致。
圖l是硬件的狀態(tài)變遷圖2是引起狀態(tài)變化的中斷對處理線程(或進程)的正確性的影響; 圖3是中斷處理流程圖4是最多需要一次調(diào)整設(shè)備設(shè)置時的任務(wù)啟動函數(shù)流程圖; 圖5是需要多次調(diào)整設(shè)備設(shè)置的情況下任務(wù)啟動函數(shù)的流程圖; 圖6是任務(wù)終止函數(shù)流程圖; 圖7是應(yīng)用了本發(fā)明之后任務(wù)的工作狀態(tài)圖。
具體實施例方式
下面結(jié)合附圖和具體實施方式
對本發(fā)明做進一步的說明。
圖1說明了硬件的兩種狀態(tài),進程在狀態(tài)0和狀態(tài)1之間進行切換。 圖2描述了在單處理器,多任務(wù)操作系統(tǒng)中,與圖1中所定義的硬件狀態(tài)存在著關(guān)聯(lián)的
處理進程和中斷處理程序的一種可能的調(diào)度時序。
線程P1、 P2和P3先后進入系統(tǒng),系統(tǒng)按照設(shè)定的調(diào)度策略對其進行調(diào)度。進程間的資 源共享和狀態(tài)同步采用傳統(tǒng)的IPC機制,硬件中斷可終止正在運行的工作單元。
圖2說明了在未采用本發(fā)明所述的算法的情況下可能產(chǎn)生的三種情況。進程Pl開始和終 止于兩次中斷之間,正常結(jié)束。進程P3的工作單元開始和結(jié)束于不同的硬件狀態(tài),最終的設(shè) 置與當(dāng)前的硬件狀態(tài)相反。進程P2雖然也被中斷,但是由于其經(jīng)歷了兩次中斷,所以最終的 設(shè)置與當(dāng)前的硬件狀態(tài)相符。
本發(fā)明的思路如下
(1) 設(shè)置進程中任務(wù)的啟動和終止函數(shù)、啟動標志,并定義中斷計數(shù)變量。每個進程完 成不同的任務(wù),因此每個任務(wù)都有其啟動函數(shù)和終止函數(shù)。任務(wù)中有若干需要嚴格互斥和保
持與硬件的狀態(tài)一致的工作單元,該硬件狀態(tài)可以有N個狀態(tài)值。
(2) 進入中斷處理程序,將中斷計數(shù)變量值加l,獲得需要處理的任務(wù)的啟動標志,并 對已啟動的任務(wù)進行狀態(tài)切換操作,完成對已啟動任務(wù)的設(shè)置。
中斷處理程序檢査任務(wù)啟動的狀態(tài),只有在任務(wù)啟動完成之后,任務(wù)停止之前才需要觸 發(fā)相應(yīng)的與硬件狀態(tài)重新同步的操作。
(3) 執(zhí)行任務(wù)啟動函數(shù),獲得當(dāng)前的中斷計數(shù)變量值、任務(wù)寫鎖,啟動任務(wù)后,再次獲 得中斷的計數(shù)變量值;比較前后兩次獲得的計數(shù)變量值的奇偶性是否相同,若相同,則任務(wù) 啟動完成,進入步驟(4);若不同,則對該任務(wù)進行狀態(tài)切換操作,重復(fù)步驟(3)。
啟動函數(shù)的執(zhí)行流程如下-
(a) 首先獲得當(dāng)前的中斷次數(shù)并保存,目的是與當(dāng)前的中斷計數(shù)值取得同步。
通過獲得的硬件狀態(tài)完成相關(guān)設(shè)置。即執(zhí)行任務(wù)相關(guān)的工作單元。在工作單元執(zhí)行之前, 獲得當(dāng)前任務(wù)的寫鎖,表示將要改變?nèi)蝿?wù)的啟動狀態(tài),并作相應(yīng)的設(shè)置。
(b) 由于設(shè)置過程有可能被中斷,剛才所作的設(shè)置可能無效。所以執(zhí)行完一遍所需的操 作之后,并不立即修改任務(wù)啟動標志和釋放寫鎖,在程序結(jié)束之前需要做以下善后處理。
(c) 重新獲得當(dāng)前的中斷計數(shù)。如果前后兩次的計數(shù)值的奇偶性相同,則說明在處理過
程中沒有發(fā)生中斷(計數(shù)值相等的情況),或者雖然發(fā)生了中斷,但是硬件經(jīng)過若干次中斷處 理,其最終狀態(tài)與軟件設(shè)置相同的狀態(tài)下,這兩者情況下,已有的設(shè)置都是有效的。
如果兩次計數(shù)值的奇偶性不同,則說明在軟件設(shè)置所依據(jù)的硬件狀態(tài)已經(jīng)發(fā)生變化,已 有的設(shè)置不再有效了,需要對其做出調(diào)整。所需的調(diào)整與中斷處理程序時所作的操作一致。
特別的,對于某一個時段中斷頻率特別高如發(fā)生了抖動,調(diào)整之后還需要比較前后兩次 中斷計數(shù)值的奇偶性。但實際上,由于中斷發(fā)生的時刻是隨機的,所以,在初次設(shè)置時被中 斷的概率比較大,但是兩次中斷發(fā)生的最小時間間隔是有限制的,相對于處理器的運行速度 來說, 一次任務(wù)啟動操作被多次中斷的可能性極小。所以, 一般只需要進行一次調(diào)整就可以 達到與硬件狀態(tài)的一致。
本發(fā)明引入了任務(wù)啟動標志,該標志由各個任務(wù)維護。中斷處理程序不能改變?nèi)蝿?wù)的啟 動狀態(tài),任務(wù)啟動標志代表任務(wù)是否處于啟動狀態(tài),任務(wù)啟動和終止過程的狀態(tài)一致性由本 發(fā)明所述方法保證與硬件狀態(tài)的一致性,因此,中斷可以直接獲得任務(wù)啟動標志而不需要附 加的同步措施,并根據(jù)任務(wù)啟動的狀態(tài)決定是否觸發(fā)相應(yīng)的切換操作。由于程序的運行場景 可能比較復(fù)雜,通過共享硬件資源聯(lián)系起來的任務(wù)需要知道其他任務(wù)的啟動狀態(tài),所以各個 任務(wù)的啟動標志也需要保護,本發(fā)明采用讀寫鎖,當(dāng)某個任務(wù)正在修改其啟動標志時,其它 任務(wù)必須等待,多個任務(wù)可以同時讀這個標志。
圖4和圖5分別為最多需要一次調(diào)整設(shè)備設(shè)置時和需要多次調(diào)整設(shè)備設(shè)置的流程圖。對 于圖4所示的情況,其處理過程為-
(41) 獲得當(dāng)前的中斷計數(shù)變量值并保存,并根據(jù)獲得的當(dāng)前任務(wù)寫鎖,執(zhí)行任務(wù)的工 作單元;
(42) 重新獲得中斷計數(shù)變量值,比較前后兩次獲得中斷計數(shù)變量值的奇偶性是否相同, 若相同,設(shè)置任務(wù)啟動完成標志后釋放任務(wù)寫鎖;若不相同,則對該任務(wù)進行狀態(tài)切換操作, 調(diào)整設(shè)備設(shè)置后釋放任務(wù)寫鎖。
對于圖5所示的情況,其處理過程為-
(511)獲得當(dāng)前的中斷計數(shù)變量值并保存,并根據(jù)獲得的當(dāng)前任務(wù)寫鎖,執(zhí)行任務(wù)的工 作單元;
(512) 重新獲得中斷計數(shù)變量值;
(513) 比較前后兩次獲得中斷計數(shù)變量值的奇偶性是否相同,若相同,設(shè)置任務(wù)啟動完 成標志后釋放任務(wù)寫鎖;若不相同,則將重新獲得的中斷計數(shù)變量值設(shè)置為當(dāng)前的中斷計數(shù) 變量值后對該任務(wù)進行狀態(tài)切換操作,返回步驟(512)。
完成上述操作之后,軟件的設(shè)置與硬件的狀態(tài)完全一致,最后,設(shè)置任務(wù)啟動完成標志, 釋放寫鎖后返回。
(4)由任務(wù)終止函數(shù)完成任務(wù)的終止,釋放設(shè)備資源。
圖6是任務(wù)的終止函數(shù)流程。處理線程在寫鎖的保護下設(shè)置任務(wù)停止標志,并完成相應(yīng) 的設(shè)備關(guān)閉和其他需要互斥的操作。
在終止函數(shù)中,不再需要獲得中斷計數(shù)值來完成與硬件狀態(tài)的同步,因為在任務(wù)終止函 數(shù)一開始就設(shè)置任務(wù)終止標志阻止了中斷處理程序進行切換操作,即使處理線程從中斷返回 到一個不同的硬件狀態(tài),也可正確釋放任務(wù)己獲取的資源。
圖7描述了應(yīng)用了本發(fā)明所述的方法之后的程序運行狀態(tài),從圖中可以看出線程P3通過 調(diào)整保證了其最終的設(shè)置與當(dāng)前的硬件狀態(tài)一致。
本發(fā)明可以擴展到多處理器,也就是共享資源的進程可以分布在不同的處理器上,進程 內(nèi)部的處理仍然可以按照上述模式進行處理即工作單元執(zhí)行前后中斷計數(shù)的奇偶性相反的 線程進行調(diào)整,但是需要對IPC機制采用多處理器版本??傊?,本發(fā)明的所述方法具有適用 范圍廣、可靠性高和實現(xiàn)簡單的特點,可廣泛應(yīng)用于驅(qū)動程序開發(fā)。
權(quán)利要求
1、實時中斷與多個進程狀態(tài)同步的方法,其特征在于包括(1)設(shè)置進程中任務(wù)的啟動和終止函數(shù)、啟動標志,并定義中斷計數(shù)變量;(2)進入中斷處理程序,將中斷計數(shù)變量值加1,獲得需要處理的任務(wù)的啟動標志,并對已啟動的任務(wù)進行狀態(tài)切換操作,完成對已啟動任務(wù)的設(shè)置;(3)執(zhí)行任務(wù)啟動函數(shù),獲得當(dāng)前的中斷計數(shù)變量值、任務(wù)寫鎖,啟動任務(wù)后,再次獲得中斷的計數(shù)變量值;比較前后兩次獲得的計數(shù)變量值的奇偶性是否相同,若相同,則任務(wù)啟動完成,進入步驟(4);若不同,則對該任務(wù)進行狀態(tài)切換操作,重復(fù)步驟(3);(4)由任務(wù)終止函數(shù)完成任務(wù)的終止,釋放設(shè)備資源。
2、 根據(jù)權(quán)利要求l所述的實時中斷與多個進程狀態(tài)同步的方法,其特征在于步驟(2) 中的切換操作包括(A) 關(guān)閉在前一狀態(tài)下打開的設(shè)備,釋放相關(guān)的設(shè)備資源;(B) 為新的狀態(tài)設(shè)置打開新的設(shè)備,獲得相關(guān)資源,完成設(shè)備設(shè)置。
3、 根據(jù)權(quán)利要求l所述的實時中斷與多個進程狀態(tài)同步的方法,其特征在于步驟(3) 具體為(31) 獲得當(dāng)前的中斷計數(shù)變量值并保存,并根據(jù)獲得的當(dāng)前任務(wù)寫鎖,執(zhí)行任務(wù)的工 作單元;(32) 重新獲得中斷計數(shù)變量值,比較前后兩次獲得中斷計數(shù)變量值的奇偶性是否相同, 若相同,設(shè)置任務(wù)啟動完成標志后釋放任務(wù)寫鎖;若不相同,則對該任務(wù)進行狀態(tài)切換操作, 調(diào)整設(shè)備設(shè)置后釋放任務(wù)寫鎖。
4、 根據(jù)權(quán)利要求1所述的實時中斷與多個進程狀態(tài)同步的方法,其特征在于步驟(3) 具體為(311) 獲得當(dāng)前的中斷計數(shù)變量值并保存,并根據(jù)獲得的當(dāng)前任務(wù)寫鎖,執(zhí)行任務(wù)的工 作單元;(312) 重新獲得中斷計數(shù)變量值; (313)比較前后兩次獲得中斷計數(shù)變量值的奇偶性是否相同,若相同,設(shè)置任務(wù)啟動完 成標志后釋放任務(wù)寫鎖;若不相同,則將重新獲得的中斷計數(shù)變量值設(shè)置為當(dāng)前的中斷計數(shù) 變量值后對該任務(wù)進行狀態(tài)切換操作,返回步驟(312)。
全文摘要
本發(fā)明公開了一種實時中斷與多個進程狀態(tài)同步的方法,為實現(xiàn)實時中斷與多個進程狀態(tài)同步而發(fā)明。包括(1)設(shè)置任務(wù)的啟動和終止函數(shù)、啟動標志,定義中斷計數(shù)變量;(2)中斷計數(shù)變量值加1,獲得需要處理的任務(wù)的啟動標志,并對已啟動的任務(wù)進行狀態(tài)切換操作,完成任務(wù)設(shè)置;(3)獲得當(dāng)前的中斷計數(shù)變量值、任務(wù)寫鎖,啟動任務(wù)后,再次獲得中斷的計數(shù)變量值;比較前后兩次獲得的計數(shù)變量值的奇偶性是否相同,若相同,則進入步驟(4);若不同,則對該任務(wù)進行狀態(tài)切換操作,重復(fù)步驟(3);(4)完成任務(wù)終止,釋放設(shè)備資源。本發(fā)明使用前后兩次中斷計數(shù)值的奇偶性作為工作單元執(zhí)行結(jié)果有效性的判據(jù),保證了軟件設(shè)置與硬件狀態(tài)一致。
文檔編號G06F9/48GK101183317SQ20061013873
公開日2008年5月21日 申請日期2006年11月14日 優(yōu)先權(quán)日2006年11月14日
發(fā)明者瀛 肖, 蔣鯤鵬 申請人:中興通訊股份有限公司