開源和商業(yè)數(shù)據(jù)庫管理系統(tǒng) (DBMS) 已在嵌入式系統(tǒng)中使用了 20 多年。在大多數(shù)情況下,開發(fā)人員甚至不會爭論是否為嵌入式系統(tǒng)購買或構(gòu)建自己的 DBMS。該組件幾乎總是被購買。
然而,嵌入式系統(tǒng)空間的一個子集仍然禁止商業(yè)供應(yīng)商使用,包括某些醫(yī)療系統(tǒng)、輻射監(jiān)測、飛機(jī)導(dǎo)航、航空電子設(shè)備、飛行員輔助,以及最近的自動駕駛。總而言之,它們可以被稱為具有硬實(shí)時約束的任務(wù)關(guān)鍵型或安全關(guān)鍵型系統(tǒng),其中系統(tǒng)故障可能會造成傷害。
許多任務(wù)關(guān)鍵型軟件團(tuán)隊(duì)正在尋找商業(yè)現(xiàn)貨 (COTS) 軟件以加快開發(fā)速度。嵌入式 DBMS 可以提供幫助,但前提是它具有確定性、可預(yù)測性和可控性。用于關(guān)鍵任務(wù)系統(tǒng)的確定性 DBMS 架構(gòu)應(yīng)提供具有時間有效性的 ACID(原子性、一致性、隔離性、持久性)合規(guī)性。
不是每個 DBMS 都強(qiáng)制執(zhí)行 ACID 屬性嗎?符合 ACID 的數(shù)據(jù)庫很常見,但其架構(gòu)是針對事務(wù)吞吐量而非確定性的。一致性是最重要的屬性;事務(wù)應(yīng)該只將數(shù)據(jù)庫從一種有效狀態(tài)更改為另一種有效狀態(tài)。在實(shí)時系統(tǒng)中,事務(wù)中的一組原子語句應(yīng)該成功提交,或者應(yīng)該全部中止,但不應(yīng)在截止日期之后進(jìn)行。“遲到”會帶來不一致的狀態(tài),帶來暫時無效的數(shù)據(jù)和可能的可怕后果。
一致性的關(guān)鍵時間斷言
確保所有條件下的內(nèi)部數(shù)據(jù)庫一致性對于時間有效性至關(guān)重要。嵌入式數(shù)據(jù)庫在執(zhí)行效率方面提供了一些改進(jìn),但確定性 DBMS 需要更多的架構(gòu)步驟才能保持準(zhǔn)時。
首先,應(yīng)該使用悲觀并發(fā)控制。它在授予一項(xiàng)任務(wù)訪問權(quán)限之前鎖定全部或部分?jǐn)?shù)據(jù)庫,從而減少了樂觀模型中復(fù)制的不確定開銷。只讀 (RO) 事務(wù)可以并行發(fā)生,而讀寫 (RW) 事務(wù)具有獨(dú)占訪問權(quán)限,從而減少了用于鎖仲裁和死鎖預(yù)防的資源。
接下來,一個關(guān)鍵的時間斷言說明了工作量和在截止日期前回滾:
無論事務(wù)復(fù)雜性如何,將任何修改撤銷到事務(wù)中的任何點(diǎn)的時間都不能超過應(yīng)用這些修改的時間。
RO事務(wù)有索引查找和游標(biāo)移動操作;回滾以相等的間隔撤消內(nèi)部計(jì)數(shù)器的任何遞增或遞減。
更簡單的 RW 事務(wù)很容易回滾。創(chuàng)建對象會根據(jù)對象大小從空閑內(nèi)存池中分配頁面;反轉(zhuǎn)只是將這些頁面返回到池中。其他交易根本不需要沖銷。刪除一個對象會將其標(biāo)記為在原子操作中將其刪除,因此如果事務(wù)中止,則不會發(fā)生提交時的刪除。在索引中添加或刪除對象具有樹重新平衡或哈希重新分配,它們僅在提交時生效并且不需要反轉(zhuǎn)。
更新對象看起來更復(fù)雜,但結(jié)果證明是一種有效的操作。事務(wù)第一次更新對象時,分配一個臨時對象,然后將原始對象復(fù)制到臨時對象。使用已經(jīng)創(chuàng)建的副本,后續(xù)更新會更快。回滾以相反的順序從副本中重新創(chuàng)建原始對象,然后釋放分配的內(nèi)存頁,對象的回滾時間與對該對象的更新次數(shù)無關(guān)。
根據(jù)實(shí)時截止日期驗(yàn)證交易
確保每個事務(wù)都安全地提交或中止后,接下來要安排事務(wù)流。回憶悲觀并發(fā);RW 事務(wù)必須按順序執(zhí)行,而 RO 事務(wù)可以并行執(zhí)行。例如,McObject 的 eXtremeDB/rt 中的動態(tài)、時間感知的最早期限優(yōu)先 (EDF) 調(diào)度根據(jù)絕對期限為事務(wù)分配優(yōu)先級。
事務(wù)管理器代碼中的驗(yàn)證點(diǎn)指示事務(wù)語句的進(jìn)展程度。如果事務(wù)在提交之前到達(dá)控制點(diǎn)(不再保證數(shù)據(jù)庫回滾的時間),那么“事務(wù)中斷”錯誤狀態(tài)將返回給應(yīng)用程序。事務(wù)管理器將數(shù)據(jù)庫恢復(fù)到事務(wù)開始之前存在的一致狀態(tài)。
在 eXtremeDB/rt 中,應(yīng)用程序可以使用兩種驗(yàn)證方法:傳遞給數(shù)據(jù)庫運(yùn)行時的應(yīng)用程序回調(diào),或異步事件處理程序。以下示例將控制點(diǎn)設(shè)置為截止時間間隔的一半,可以調(diào)整。
回調(diào)方法偽代碼
如果系統(tǒng)定時器或硬件看門狗定時器等異步原語不可用,則可以使用回調(diào)方法。操作系統(tǒng)在獲取系統(tǒng)時間方面存在細(xì)微差別,但代碼流程如以下偽代碼。首先注冊一個回調(diào)函數(shù):
接下來,創(chuàng)建回調(diào),輪詢返回“OK”或“interrupted”狀態(tài)。
然后,啟動實(shí)時事務(wù),數(shù)據(jù)庫運(yùn)行時在原子操作中定期驗(yàn)證“中斷”標(biāo)志。
C 中的計(jì)時器方法代碼片段
大多數(shù)關(guān)鍵任務(wù)系統(tǒng)都有硬件計(jì)時器;使用它們可以提供更高的精度。C 語言中的三個常用代碼片段設(shè)置了計(jì)時器變量、實(shí)時事務(wù)和初始化例程。一、定時器變量:
接下來是實(shí)時交易:
還有一個簡單的初始化程序:
硬件計(jì)時器設(shè)施因操作系統(tǒng)而異。例如,在 VxWorks 中,任何任務(wù)都可以創(chuàng)建一個看門狗定時器,并在指定的延遲后使用它在系統(tǒng)時鐘 ISR 的上下文中運(yùn)行指定的例程。
展望更多可控性
替代傳統(tǒng)的并發(fā)控制和調(diào)度方法有助于 eXtremeDB/rt 實(shí)現(xiàn)關(guān)鍵任務(wù)系統(tǒng)所需的確定性、可預(yù)測的行為。未來的研究旨在提高 EDF 調(diào)度程序的可控性。例如,事務(wù)上的顯式優(yōu)先級參數(shù)將有助于排序和搶占。單個事務(wù)也可以帶有回滾時間參數(shù),而不是默認(rèn)的deadline/2。
實(shí)現(xiàn)從嵌入式數(shù)據(jù)庫到確定性 DBMS 的飛躍,確保數(shù)據(jù)在時間上有效,從而擴(kuò)展了潛在的用例。掌握這種新的 COTS 確定性 DBMS 技術(shù)的任務(wù)關(guān)鍵型軟件團(tuán)隊(duì)可以在開發(fā)計(jì)劃、風(fēng)險降低和應(yīng)用程序靈活性方面獲得優(yōu)勢。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5092文章
19177瀏覽量
307688 -
定時器
+關(guān)注
關(guān)注
23文章
3255瀏覽量
115372 -
計(jì)時器
+關(guān)注
關(guān)注
1文章
426瀏覽量
32861
發(fā)布評論請先 登錄
相關(guān)推薦
評論