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