国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種多任務(wù)RTOS看門狗框架的設(shè)計(jì)①

2023-11-05 11:51:20昀,
關(guān)鍵詞:看門狗多任務(wù)管理器

董 昀, 李 穗

(安徽文達(dá)信息工程學(xué)院電子電氣工程學(xué)院,安徽 合肥 230039)

0 引 言

嵌入式多任務(wù)實(shí)時(shí)操作系統(tǒng)如今廣泛的應(yīng)用在各個(gè)領(lǐng)域,系統(tǒng)的穩(wěn)定性和可靠性始終是最為重要的問題之一,特別在一些條件比較惡劣,電磁干擾嚴(yán)重的場合,常會(huì)出現(xiàn)系統(tǒng)死機(jī)或程序跑飛現(xiàn)象。多年來,圍繞著提高嵌入式系統(tǒng)的抗干擾能力,以及系統(tǒng)受到干擾后如何恢復(fù),在硬件和軟件方面都提出了很多有效的方法,其中比較常用就是看門狗技術(shù)[1]。看門狗分為硬件看門狗和軟件看門狗:硬件看門狗通常指的是集成在處理器內(nèi)部的看門狗定時(shí)器或外置的專用看門狗芯片或電路;軟件看門狗和硬件看門狗類似,不過它采用處理器內(nèi)部的定時(shí)器,無需額外的硬件電路。典型的看門狗應(yīng)用就是將看門狗芯片的復(fù)位信號輸出引腳接到處理器的復(fù)位引腳,當(dāng)處理器正常運(yùn)行時(shí)系統(tǒng)會(huì)周期性地執(zhí)行“喂狗”操作,將看門狗計(jì)數(shù)器定期清零,一旦系統(tǒng)出現(xiàn)故障,程序跑飛,“喂狗”操作長時(shí)間未得到執(zhí)行,看門狗計(jì)數(shù)器將會(huì)溢出,導(dǎo)致系統(tǒng)重啟[2]。這種方法每次只能監(jiān)測到系統(tǒng)的一部分,即主進(jìn)程,因此在單任務(wù)系統(tǒng)中得到了廣泛應(yīng)用[3]。然而現(xiàn)在的嵌入式系統(tǒng)功能越來越復(fù)雜,往往需要采用多任務(wù)的嵌入式操作系統(tǒng)進(jìn)行開發(fā)。這種情況下,僅對主進(jìn)程進(jìn)行監(jiān)控對提高嵌入式產(chǎn)品的穩(wěn)定性來說收效甚微。文中提出了一種基于多任務(wù)實(shí)時(shí)操作系統(tǒng)的看門狗框架,可以根據(jù)用戶的實(shí)際情況,對系統(tǒng)中任意任務(wù)進(jìn)行靈活的監(jiān)控,保障了系統(tǒng)運(yùn)行的穩(wěn)定可靠。

1 相關(guān)研究

多任務(wù)環(huán)境下的看門狗監(jiān)測問題葉幫利在Windows系統(tǒng)中已經(jīng)進(jìn)行了探索和嘗試[4],初步提出了多進(jìn)程軟件看門狗的設(shè)計(jì)思路。戴積發(fā)、胡玉霞等人在嵌入式系統(tǒng)中也提出了類似的解決方案[5],他們設(shè)計(jì)的看門狗主要實(shí)現(xiàn)以下功能:(1)當(dāng)某個(gè)任務(wù)出現(xiàn)異常時(shí)重啟該任務(wù);(2)多次重啟某一個(gè)任務(wù)失敗或者所有的任務(wù)均出現(xiàn)異常時(shí),重啟系統(tǒng);(3)當(dāng)操作系統(tǒng)本身或硬件電路出現(xiàn)異常時(shí),由軟件看門狗或硬件看門狗重啟處理器[4-5]。Abaffy等人針對Linux操作系統(tǒng)提出了一種多硬件看門狗的框架[6]。包明磊、姚艷松在FPGA平臺(tái)上也提出了多任務(wù)硬件看門狗的容錯(cuò)技術(shù)[7]。上述工作在一定程度上為多任務(wù)環(huán)境下的看門狗應(yīng)用提供了方案。但在實(shí)際應(yīng)用中,系統(tǒng)中運(yùn)行的各個(gè)任務(wù)重要性未必相同,某些任務(wù)出現(xiàn)異常后可能經(jīng)過適當(dāng)?shù)募m錯(cuò)處理重新恢復(fù)運(yùn)行,或者即使無法正常運(yùn)行,對整個(gè)系統(tǒng)也不會(huì)帶來不可接受的后果;這樣的情況就無需重啟系統(tǒng)。此外,某些系統(tǒng)可能有更復(fù)雜的應(yīng)用場景,比如要求只有在任務(wù)1和任務(wù)2都發(fā)生異常時(shí)才必須重啟,或者任務(wù)喂狗過于頻繁也意味著某種異常。

文中針對上述問題提出了一種新的多任務(wù)環(huán)境下看門狗框架,即用戶可以根據(jù)需求自定義異常處理函數(shù)和關(guān)聯(lián)規(guī)則來決定系統(tǒng)在任務(wù)發(fā)生異常時(shí)如何處理異常,并決定在什么情況下需要重新啟動(dòng)系統(tǒng)。

2 多任務(wù)環(huán)境看門狗框架

文中結(jié)合了軟件看門狗和硬件看門狗技術(shù)的優(yōu)勢[8],針對多任務(wù)操作系統(tǒng)環(huán)境下的看門狗應(yīng)用提出了一種靈活的框架。其中利用軟件看門狗對系統(tǒng)中運(yùn)行的任務(wù)進(jìn)行監(jiān)控,而硬件看門狗則用于對軟件看門狗本身進(jìn)行監(jiān)控,有效的保障了系統(tǒng)的可靠性。

用戶可以為想要監(jiān)控的每一個(gè)任務(wù)(進(jìn)程)創(chuàng)建一個(gè)軟件看門狗,指定超期時(shí)間和最小喂狗間隔,以及關(guān)聯(lián)規(guī)則,同時(shí)用戶可以自定義任務(wù)異常處理例程。所有的軟件看門狗通過適當(dāng)?shù)姆绞竭M(jìn)行管理,如鏈表或者隊(duì)列。此外,系統(tǒng)在啟動(dòng)階段創(chuàng)建一個(gè)優(yōu)先級最高的任務(wù)作為軟件看門狗管理器。每個(gè)被監(jiān)測的任務(wù)在設(shè)定的超期時(shí)間和最小喂狗時(shí)間間隔范圍內(nèi)對其相應(yīng)的軟件看門狗清零,即“喂軟件狗”。

系統(tǒng)節(jié)拍定時(shí)器中斷處理函數(shù)周期性的檢查每個(gè)軟件看門狗是否超時(shí)[9],以及是否喂狗過于頻繁。如果任務(wù)由于異常導(dǎo)致未能正常喂軟件狗,系統(tǒng)節(jié)拍定時(shí)器中斷處理函數(shù)將調(diào)用對應(yīng)的異常處理例程進(jìn)行處理,如果異常成功的得到處理,則跳過該軟件看門狗,如果異常沒有得到解決,中斷處理函數(shù)記錄下該軟件看門狗監(jiān)控的任務(wù)發(fā)生了不可修復(fù)的異常。在檢查完所有的軟件看門狗的狀態(tài)后,如果有不可修復(fù)的異常,中斷處理函數(shù)喚醒軟件看門狗管理器任務(wù)。

正常情況下,軟件看門狗管理器周期性的對硬件看門狗進(jìn)行喂狗,即“喂硬件狗”,防止硬件看門狗超時(shí)導(dǎo)致系統(tǒng)復(fù)位。但是如果被監(jiān)控的任務(wù)發(fā)生不可修復(fù)的異常,系統(tǒng)節(jié)拍定時(shí)器中斷服務(wù)程序?qū)?huì)喚醒軟件看門狗管理器檢查異常任務(wù)的軟件看門狗關(guān)聯(lián)規(guī)則,如果滿足關(guān)聯(lián)規(guī)則,則停止喂硬件狗,重啟系統(tǒng)。另外當(dāng)管理器任務(wù)本身出現(xiàn)錯(cuò)誤時(shí),也不能及時(shí)“喂硬件狗”,系統(tǒng)也將重啟。具體的監(jiān)控原理框圖如圖1所示:

3 多任務(wù)軟件看門狗管理器的實(shí)現(xiàn)

為驗(yàn)證設(shè)計(jì)的框架,作者以RT-Thread操作系統(tǒng)和STM32F103開發(fā)板為平臺(tái)實(shí)現(xiàn)了一個(gè)原型系統(tǒng)。在實(shí)現(xiàn)中軟件看門狗定義如下:

struct {

int due_time; //看門狗到期時(shí)間

int last_feed, current_feed; //上次和本次喂狗時(shí)間

int (*Handle)(void *arg); //任務(wù)異常處理函數(shù)

void *data;//傳遞給異常處理函數(shù)的參數(shù)

list_head list; //用于將所有軟件看門狗連 接為一個(gè)雙向循環(huán)鏈表

int min_interval;//看門狗最小喂狗間隔

int mask;//關(guān)聯(lián)規(guī)則

int watchdog_id; //軟件看門狗編號

}soft_watchdog;

int map;//全局標(biāo)志位

圖1 監(jiān)控原理框圖

其中map是一個(gè)全局變量標(biāo)示所有軟件看門狗的狀態(tài),它的每一個(gè)位對應(yīng)一個(gè)軟件看門狗的狀態(tài),若該軟件看門狗監(jiān)控的任務(wù)發(fā)生不可修復(fù)的異常,則將其對應(yīng)位標(biāo)識(shí)為1,否則標(biāo)識(shí)為0。mask是一個(gè)由用戶自定義的關(guān)聯(lián)規(guī)則,比如mask=5,其二進(jìn)制數(shù)第1位和第3位為1,其他位為0,這表示軟件看門狗1和軟件看門狗3是關(guān)聯(lián)的,即都處于觸發(fā)狀態(tài),也就是說任務(wù)1和任務(wù)3均出現(xiàn)不可修復(fù)異常時(shí),軟件看門狗管理器將重啟系統(tǒng)。due_time與min_interval是到期時(shí)間和最小喂狗間隔,如果min_interval為0則表示對喂狗頻率沒有限制。handle即為自定義的異常處理例程,用戶可以根據(jù)實(shí)際情況進(jìn)行可能的異常檢測、處理、修復(fù)等操作,如果成功處理異常,該函數(shù)返回0,否則返回-1。所有這些軟件看門狗通過類型為list_head的成員變量list連接成雙向循環(huán)鏈表,如圖2所示。list_head的定義如下:

struct list_head {

struct list_head *next, *prev;

} ;

軟件看門狗管理器由watchdog_daemon()實(shí)現(xiàn),該任務(wù)周期性的休眠指定的時(shí)間間隔timeout,該時(shí)間應(yīng)小于硬件看門狗溢出間隔。當(dāng)管理器被喚醒運(yùn)行時(shí)首先檢查喚醒原因:如果是因?yàn)閠imeout時(shí)間超時(shí),則喂硬件狗,再次休眠等待下一次喚醒;如果喚醒的原因是系統(tǒng)節(jié)拍定時(shí)器中斷處理函數(shù)檢測到有軟件看門狗被觸發(fā),則進(jìn)行異常處理。

軟件看門狗管理器檢查map標(biāo)志的每一位,如果該位為1,則表示對應(yīng)的軟件看門狗被觸發(fā)。管理器獲取被觸發(fā)軟件看門狗的mask關(guān)聯(lián)規(guī)則,與map進(jìn)行比較。如果規(guī)則指定的關(guān)聯(lián)軟件看門狗均被觸發(fā),那么我們稱關(guān)聯(lián)規(guī)則被觸發(fā),此時(shí),管理器不再喂硬件狗,觸發(fā)系統(tǒng)復(fù)位。管理器的執(zhí)行流程如圖3所示。

圖2 軟件看門狗鏈表結(jié)構(gòu)

圖3 管理器執(zhí)行流程圖

每個(gè)被監(jiān)控任務(wù)需要周期性的喂軟件狗,其喂狗間隔必須小于到期時(shí)間due_time,且大于最小喂狗間隔min_interval,軟件看門狗數(shù)據(jù)結(jié)構(gòu)中的current_feed和last_feed分別記錄本次和上次喂狗的時(shí)間。系統(tǒng)節(jié)拍定時(shí)器中斷處理函數(shù)依次檢查每個(gè)軟件看門狗監(jiān)控的任務(wù)是否異常。方法是:如果當(dāng)前時(shí)間與current_feed的差大于due_time,則軟件看門狗溢出;同樣,如果current_feed與last_feed的差小于min_interval則說明喂狗過于頻繁。這兩種情況下,中斷處理函數(shù)均調(diào)用對應(yīng)的異常處理例程handler。該例程是用戶自定義的,用于對發(fā)生異常的任務(wù)進(jìn)行處理,包括檢查具體異常原因,生成異常日志,嘗試修復(fù)異常,或者重啟任務(wù)等。如果handler成功解決了異常,則返回0,否則返回-1。在返回-1的情況下,系統(tǒng)認(rèn)為該任務(wù)發(fā)生了不可修復(fù)的錯(cuò)誤,設(shè)置map標(biāo)志對應(yīng)位為1,稱之為觸發(fā)軟件看門狗。中斷處理函數(shù)在檢查完所有的軟件看門狗后,如果有任何看門狗被觸發(fā),則喚醒軟件看門狗管理器任務(wù)。系統(tǒng)節(jié)拍中斷處理函數(shù)的執(zhí)行流程如圖4所示。

圖4 系統(tǒng)節(jié)拍中斷服務(wù)程序流程圖

4 結(jié) 論

提出了一種新的多任務(wù)RTOS環(huán)境下軟硬件看門狗框架,論述了工作原理,并在RT-Thread實(shí)時(shí)操作系統(tǒng)上實(shí)現(xiàn)了該框架。該框架提供了一種靈活的高度可定制的多任務(wù)管理的軟硬件看門狗結(jié)合方案,與傳統(tǒng)的硬件看門狗和多任務(wù)看門狗技術(shù)相比具有如下優(yōu)勢:

1)利用軟件看門狗可監(jiān)控系統(tǒng)任意任務(wù)(一個(gè),多個(gè)或全部),實(shí)現(xiàn)成本低;

2)監(jiān)控方案配置靈活,可方便添加待監(jiān)控的任務(wù),理論上該任務(wù)數(shù)量沒有上限,管理器可對出現(xiàn)異常的任務(wù)調(diào)用自定義的處理例程進(jìn)行處理,這樣可以對某些不嚴(yán)重問題進(jìn)行修復(fù),而無需重啟任務(wù)或系統(tǒng)。

3)用戶可以自定義關(guān)聯(lián)規(guī)則,管理器分析當(dāng)前異常情況,在滿足用戶設(shè)定的關(guān)聯(lián)規(guī)則時(shí)才重啟系統(tǒng)。

猜你喜歡
看門狗多任務(wù)管理器
應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
把他叫醒
基于中心化自動(dòng)加權(quán)多任務(wù)學(xué)習(xí)的早期輕度認(rèn)知障礙診斷
Windows文件緩沖處理技術(shù)概述
基于判別性局部聯(lián)合稀疏模型的多任務(wù)跟蹤
電測與儀表(2016年5期)2016-04-22 01:13:46
一種采用FPGA實(shí)現(xiàn)的通用看門狗電路
大眾科技(2015年11期)2015-11-24 01:57:16
把它叫醒
高集成度2.5A備份電源管理器簡化鋰離子電池備份系統(tǒng)
把它叫醒
禄劝| 资中县| 昌都县| 浏阳市| 彭水| 池州市| 蒲城县| 连云港市| 孙吴县| 玉林市| 芷江| 长丰县| 广元市| 安西县| 罗城| 疏勒县| 正蓝旗| 定州市| 黄陵县| 额敏县| 攀枝花市| 普格县| 临武县| 瑞昌市| 乡宁县| 金堂县| 云霄县| 西盟| 济源市| 延庆县| 南召县| 石泉县| 新河县| 开封县| 古浪县| 扎鲁特旗| 泰兴市| 南江县| 保靖县| 万年县| 克什克腾旗|