嵌入式開發(fā):實(shí)時(shí)系統(tǒng)中的嵌入式數(shù)據(jù)庫
“實(shí)時(shí)”這個(gè)術(shù)語是數(shù)據(jù)庫系統(tǒng)供應(yīng)商隨便說說的,但是實(shí)時(shí)在嵌入式系統(tǒng)中一直有特定的含義?!皩?shí)時(shí)系統(tǒng)意味著系統(tǒng)是實(shí)時(shí)的,換句話說,響應(yīng)應(yīng)該在指定的時(shí)間限制內(nèi)得到保證,或者系統(tǒng)應(yīng)該滿足指定的期限。例如,飛行控制系統(tǒng)、實(shí)時(shí)監(jiān)視器等?!睋Q言之,在嵌入式開發(fā)中,實(shí)時(shí)并不意味著真正的快速。在實(shí)時(shí)系統(tǒng)中,速度不是衡量成功的標(biāo)準(zhǔn);決定論是衡量成功的主要標(biāo)準(zhǔn)。
實(shí)時(shí)系統(tǒng)正以令人難以置信的速度發(fā)展。實(shí)時(shí)系統(tǒng)曾經(jīng)相對(duì)簡(jiǎn)單,比如飛機(jī)上的防抱死制動(dòng)系統(tǒng),以及后來的汽車。今天,實(shí)時(shí)系統(tǒng)更加復(fù)雜。高級(jí)駕駛輔助系統(tǒng)(ADAS)是典型代表。它們是現(xiàn)代實(shí)時(shí)系統(tǒng)復(fù)雜性的一個(gè)很好的例子。ADAS必須接收來自多個(gè)不同來源的數(shù)據(jù),例如激光雷達(dá)、聲納、雷達(dá)、光學(xué)相機(jī)、GPS和地圖等,這就產(chǎn)生了一個(gè)重大的傳感器數(shù)據(jù)融合問題。有必要將所有數(shù)據(jù)放在一個(gè)中心位置(一個(gè)數(shù)據(jù)庫!)以便可以關(guān)聯(lián)、分析和采取行動(dòng)(啟動(dòng)、停止、轉(zhuǎn)向等),所有這些都在嚴(yán)格的實(shí)時(shí)期限內(nèi)完成。
但問題是:直到最近,還沒有商用現(xiàn)貨(COTS)嵌入式數(shù)據(jù)庫可以用于實(shí)時(shí)系統(tǒng),因?yàn)樗挟a(chǎn)品都不知道最后期限。為了說明這一點(diǎn),嵌入式開發(fā)人員考慮一個(gè)必須在50毫秒內(nèi)做出反應(yīng)的實(shí)時(shí)系統(tǒng)。如所示圖1,實(shí)時(shí)任務(wù)分別在5毫秒和10毫秒標(biāo)記處完成前兩步。然后,該任務(wù)調(diào)用數(shù)據(jù)庫運(yùn)行時(shí)。然而,數(shù)據(jù)庫運(yùn)行時(shí)不知道截止日期,直到截止日期到期時(shí)才把控制權(quán)交還給任務(wù)。這個(gè)系統(tǒng)失敗了。

三個(gè)目標(biāo)
為了適用于實(shí)時(shí)系統(tǒng),嵌入式數(shù)據(jù)庫運(yùn)行時(shí)系統(tǒng)必須達(dá)到三個(gè)目標(biāo)。第一,必須讓它知道最后期限,并根據(jù)給它的最后期限記錄已經(jīng)過去的時(shí)間。第二,它不能有任何不具有時(shí)間認(rèn)知的外部依賴。例如,數(shù)據(jù)庫運(yùn)行時(shí)不應(yīng)調(diào)用malloc()(用于動(dòng)態(tài)分配內(nèi)存的C運(yùn)行時(shí)函數(shù))。第三個(gè)目標(biāo)是它必須能夠以適合實(shí)時(shí)系統(tǒng)的方式調(diào)度數(shù)據(jù)庫事務(wù)。
1.最后期限—如果嵌入式數(shù)據(jù)庫系統(tǒng)必須管理截止日期,那么嵌入式數(shù)據(jù)庫運(yùn)行時(shí)必須能夠知道截止日期。只要數(shù)據(jù)庫中的工作單元是一個(gè)事務(wù),開始一個(gè)事務(wù)的數(shù)據(jù)庫API就是將截止日期傳遞到數(shù)據(jù)庫運(yùn)行時(shí)的邏輯位置。隨著事務(wù)的進(jìn)行,數(shù)據(jù)庫運(yùn)行時(shí)需要根據(jù)截止日期頻繁地檢查進(jìn)度,并且如果必要的話,中止事務(wù)以滿足截止日期。在實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)中,事務(wù)可以滿足(成功提交)或錯(cuò)過(成功中止)它們的截止日期,但絕不會(huì)遲到(超過它們的截止日期)。實(shí)現(xiàn)這一點(diǎn)并不像你想象的那么簡(jiǎn)單,除非你只針對(duì)一個(gè)實(shí)時(shí)操作系統(tǒng)(RTOS),因?yàn)椴煌腞TOS有不同的管理時(shí)鐘和定時(shí)器的方式。圖2說明了事務(wù)的時(shí)間線。嵌入式開發(fā)人員感興趣的是截止時(shí)間驗(yàn)證控制點(diǎn)和截止時(shí)間控制點(diǎn)。

2.外部依賴性—大多數(shù)嵌入式和實(shí)時(shí)系統(tǒng)都是用C/C++編寫的。程序員傾向于自由地使用C運(yùn)行時(shí)(CRT)庫中的函數(shù)。在許多情況下,這是無害的,但是應(yīng)該避免調(diào)用像malloc這樣的CRT函數(shù),或者執(zhí)行輸入/輸出。它們具有與圖1所示相同的風(fēng)險(xiǎn):調(diào)用任務(wù)和(在本例中是數(shù)據(jù)庫運(yùn)行時(shí))可能會(huì)在沒有時(shí)間認(rèn)知的CRT函數(shù)中消失,并且直到超過截止日期才返回,從而導(dǎo)致系統(tǒng)失敗的風(fēng)險(xiǎn)。
3.行程安排—數(shù)據(jù)庫通常由多個(gè)任務(wù)/線程/進(jìn)程使用。數(shù)據(jù)庫運(yùn)行時(shí)必須協(xié)調(diào)任務(wù)對(duì)數(shù)據(jù)庫的訪問,以避免沖突。在行業(yè)術(shù)語中,這被稱為并發(fā)控制,分為兩大類:樂觀和悲觀并發(fā)控制。嵌入式開發(fā)人員使用悲觀并發(fā)控制,一個(gè)任務(wù)請(qǐng)求訪問一個(gè)資源,該資源可以是整個(gè)數(shù)據(jù)庫、一個(gè)數(shù)據(jù)庫表或一組表、一個(gè)數(shù)據(jù)庫頁或表中的一行。不管這些請(qǐng)求的粒度如何,數(shù)據(jù)庫運(yùn)行時(shí)的一個(gè)組件(通常稱為鎖仲裁器或鎖管理器)需要協(xié)調(diào)這些請(qǐng)求。
通常,這是按照先進(jìn)先出的順序進(jìn)行的。但是這對(duì)于實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)來說是不夠的。實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)必須首先根據(jù)開發(fā)人員指定的優(yōu)先級(jí)來調(diào)度事務(wù),然后在相同的優(yōu)先級(jí)內(nèi),首先根據(jù)最早的截止日期來調(diào)度事務(wù)?;蛘?,實(shí)時(shí)數(shù)據(jù)庫運(yùn)行時(shí)必須利用優(yōu)先級(jí)繼承,以便已經(jīng)運(yùn)行的低優(yōu)先級(jí)任務(wù)的事務(wù)可以提升到與新調(diào)度的具有更高優(yōu)先級(jí)的事務(wù)相同的優(yōu)先級(jí)。
重新想象的數(shù)據(jù)庫
今天的實(shí)時(shí)系統(tǒng)正在經(jīng)歷增長,就像90年代末和21世紀(jì)初的嵌入式系統(tǒng)一樣,當(dāng)時(shí)嵌入式數(shù)據(jù)庫成為一種必需品,因?yàn)榍度胧较到y(tǒng)被賦予了更多的任務(wù)。業(yè)務(wù)線/部門計(jì)算嵌入式數(shù)據(jù)庫需要重新設(shè)計(jì),以便在嵌入式系統(tǒng)的資源限制內(nèi)運(yùn)行。這就是McObject的eXtremeDB開發(fā)的驅(qū)動(dòng)力。現(xiàn)在,隨著硬實(shí)時(shí)系統(tǒng)中數(shù)據(jù)管理需求的不斷增長,嵌入式開發(fā)人員重新設(shè)想和設(shè)計(jì)了eXtremeDB,以創(chuàng)建eXtremeDB/rt,這是第一個(gè)在任務(wù)和安全關(guān)鍵實(shí)時(shí)系統(tǒng)的約束下運(yùn)行的COTS確定性數(shù)據(jù)庫管理系統(tǒng)。