“實時”這個術(shù)語是數(shù)據(jù)庫系統(tǒng)供應(yīng)商隨便說說的,但是實時在嵌入式系統(tǒng)中一直有特定的含義。“實時系統(tǒng)意味著系統(tǒng)是實時的,換句話說,響應(yīng)應(yīng)該在指定的時間限制內(nèi)得到保證,或者系統(tǒng)應(yīng)該滿足指定的期限。例如,飛行控制系統(tǒng)、實時監(jiān)視器等。”換言之,在嵌入式開發(fā)中,實時并不意味著真正的快速。在實時系統(tǒng)中,速度不是衡量成功的標(biāo)準(zhǔn);決定論是衡量成功的主要標(biāo)準(zhǔn)。
實時系統(tǒng)正以令人難以置信的速度發(fā)展。實時系統(tǒng)曾經(jīng)相對簡單,比如飛機上的防抱死制動系統(tǒng),以及后來的汽車。今天,實時系統(tǒng)更加復(fù)雜。高級駕駛輔助系統(tǒng)(ADAS)是典型代表。它們是現(xiàn)代實時系統(tǒng)復(fù)雜性的一個很好的例子。ADAS必須接收來自多個不同來源的數(shù)據(jù),例如激光雷達(dá)、聲納、雷達(dá)、光學(xué)相機、GPS和地圖等,這就產(chǎn)生了一個重大的傳感器數(shù)據(jù)融合問題。有必要將所有數(shù)據(jù)放在一個中心位置(一個數(shù)據(jù)庫!)以便可以關(guān)聯(lián)、分析和采取行動(啟動、停止、轉(zhuǎn)向等),所有這些都在嚴(yán)格的實時期限內(nèi)完成。
但問題是:直到最近,還沒有商用現(xiàn)貨(COTS)嵌入式數(shù)據(jù)庫可以用于實時系統(tǒng),因為所有產(chǎn)品都不知道最后期限。為了說明這一點,嵌入式開發(fā)人員考慮一個必須在50毫秒內(nèi)做出反應(yīng)的實時系統(tǒng)。如所示圖1,實時任務(wù)分別在5毫秒和10毫秒標(biāo)記處完成前兩步。然后,該任務(wù)調(diào)用數(shù)據(jù)庫運行時。然而,數(shù)據(jù)庫運行時不知道截止日期,直到截止日期到期時才把控制權(quán)交還給任務(wù)。這個系統(tǒng)失敗了。
三個目標(biāo)
為了適用于實時系統(tǒng),嵌入式數(shù)據(jù)庫運行時系統(tǒng)必須達(dá)到三個目標(biāo)。第一,必須讓它知道最后期限,并根據(jù)給它的最后期限記錄已經(jīng)過去的時間。第二,它不能有任何不具有時間認(rèn)知的外部依賴。例如,數(shù)據(jù)庫運行時不應(yīng)調(diào)用malloc()(用于動態(tài)分配內(nèi)存的C運行時函數(shù))。第三個目標(biāo)是它必須能夠以適合實時系統(tǒng)的方式調(diào)度數(shù)據(jù)庫事務(wù)。
1.最后期限—如果嵌入式數(shù)據(jù)庫系統(tǒng)必須管理截止日期,那么嵌入式數(shù)據(jù)庫運行時必須能夠知道截止日期。只要數(shù)據(jù)庫中的工作單元是一個事務(wù),開始一個事務(wù)的數(shù)據(jù)庫API就是將截止日期傳遞到數(shù)據(jù)庫運行時的邏輯位置。隨著事務(wù)的進(jìn)行,數(shù)據(jù)庫運行時需要根據(jù)截止日期頻繁地檢查進(jìn)度,并且如果必要的話,中止事務(wù)以滿足截止日期。在實時數(shù)據(jù)庫系統(tǒng)中,事務(wù)可以滿足(成功提交)或錯過(成功中止)它們的截止日期,但絕不會遲到(超過它們的截止日期)。實現(xiàn)這一點并不像你想象的那么簡單,除非你只針對一個實時操作系統(tǒng)(RTOS),因為不同的RTOS有不同的管理時鐘和定時器的方式。圖2說明了事務(wù)的時間線。嵌入式開發(fā)人員感興趣的是截止時間驗證控制點和截止時間控制點。
2.外部依賴性—大多數(shù)嵌入式和實時系統(tǒng)都是用C/C++編寫的。程序員傾向于自由地使用C運行時(CRT)庫中的函數(shù)。在許多情況下,這是無害的,但是應(yīng)該避免調(diào)用像malloc這樣的CRT函數(shù),或者執(zhí)行輸入/輸出。它們具有與圖1所示相同的風(fēng)險:調(diào)用任務(wù)和(在本例中是數(shù)據(jù)庫運行時)可能會在沒有時間認(rèn)知的CRT函數(shù)中消失,并且直到超過截止日期才返回,從而導(dǎo)致系統(tǒng)失敗的風(fēng)險。
3.行程安排—數(shù)據(jù)庫通常由多個任務(wù)/線程/進(jìn)程使用。數(shù)據(jù)庫運行時必須協(xié)調(diào)任務(wù)對數(shù)據(jù)庫的訪問,以避免沖突。在行業(yè)術(shù)語中,這被稱為并發(fā)控制,分為兩大類:樂觀和悲觀并發(fā)控制。嵌入式開發(fā)人員使用悲觀并發(fā)控制,一個任務(wù)請求訪問一個資源,該資源可以是整個數(shù)據(jù)庫、一個數(shù)據(jù)庫表或一組表、一個數(shù)據(jù)庫頁或表中的一行。不管這些請求的粒度如何,數(shù)據(jù)庫運行時的一個組件(通常稱為鎖仲裁器或鎖管理器)需要協(xié)調(diào)這些請求。
通常,這是按照先進(jìn)先出的順序進(jìn)行的。但是這對于實時數(shù)據(jù)庫系統(tǒng)來說是不夠的。實時數(shù)據(jù)庫系統(tǒng)必須首先根據(jù)開發(fā)人員指定的優(yōu)先級來調(diào)度事務(wù),然后在相同的優(yōu)先級內(nèi),首先根據(jù)最早的截止日期來調(diào)度事務(wù)。或者,實時數(shù)據(jù)庫運行時必須利用優(yōu)先級繼承,以便已經(jīng)運行的低優(yōu)先級任務(wù)的事務(wù)可以提升到與新調(diào)度的具有更高優(yōu)先級的事務(wù)相同的優(yōu)先級。
重新想象的數(shù)據(jù)庫
今天的實時系統(tǒng)正在經(jīng)歷增長,就像90年代末和21世紀(jì)初的嵌入式系統(tǒng)一樣,當(dāng)時嵌入式數(shù)據(jù)庫成為一種必需品,因為嵌入式系統(tǒng)被賦予了更多的任務(wù)。業(yè)務(wù)線/部門計算嵌入式數(shù)據(jù)庫需要重新設(shè)計,以便在嵌入式系統(tǒng)的資源限制內(nèi)運行。這就是McObject的eXtremeDB開發(fā)的驅(qū)動力。現(xiàn)在,隨著硬實時系統(tǒng)中數(shù)據(jù)管理需求的不斷增長,嵌入式開發(fā)人員重新設(shè)想和設(shè)計了eXtremeDB,以創(chuàng)建eXtremeDB/rt,這是第一個在任務(wù)和安全關(guān)鍵實時系統(tǒng)的約束下運行的COTS確定性數(shù)據(jù)庫管理系統(tǒng)。