System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本專利技術(shù)涉及嵌入式實(shí)時(shí)操作系統(tǒng),尤其涉及一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法。
技術(shù)介紹
1、進(jìn)程是嵌入式實(shí)時(shí)操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單元,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立運(yùn)行的實(shí)體,是應(yīng)用程序運(yùn)行的載體。每個(gè)進(jìn)程都有自己的獨(dú)立地址空間,包括代碼段、數(shù)據(jù)段、堆棧等,以及運(yùn)行時(shí)所需的系統(tǒng)資源(如文件描述符、信號(hào)處理器等)。
2、在用戶指定了信號(hào)處理函數(shù)后,由于若信號(hào)處理函數(shù)處于內(nèi)核態(tài)時(shí),程序便擁有過高的控制權(quán)限,容易導(dǎo)致系統(tǒng)資源和硬件設(shè)備遭到破壞。因此,進(jìn)程在執(zhí)行信號(hào)處理函數(shù)過程需要從內(nèi)核態(tài)返回用戶空間(用戶態(tài))時(shí)執(zhí)行。
3、目前,現(xiàn)有技術(shù)中,進(jìn)程信號(hào)處理過程為:第一步,進(jìn)程經(jīng)過內(nèi)核提供的接口第一次進(jìn)入內(nèi)核態(tài),并將用戶現(xiàn)場數(shù)據(jù)保存至內(nèi)核態(tài)線程棧終;第二步,內(nèi)核將當(dāng)前內(nèi)核態(tài)線程棧的數(shù)據(jù)拷貝到用戶棧上,并修改指令寄存器地址使其指向信號(hào)處理函數(shù),用以進(jìn)程在返回用戶態(tài)時(shí)對(duì)選擇的未決信號(hào)執(zhí)行信號(hào)處理函數(shù);第三步,信號(hào)處理函數(shù)執(zhí)行完成后,進(jìn)程第二次進(jìn)入內(nèi)核態(tài),檢查是否還有其他未決信號(hào)未處理;第四步,如果所有信號(hào)都處理完成,則恢復(fù)內(nèi)核棧和恢復(fù)指令寄存器將其指向中斷前的運(yùn)行位置,使進(jìn)程返回用戶態(tài)繼續(xù)執(zhí)行。
4、基于上述現(xiàn)有技術(shù)中的進(jìn)程信號(hào)處理過程,存在以下技術(shù)缺陷:第一,由于進(jìn)程信號(hào)處理過程涉及至少兩次返回用戶態(tài)和進(jìn)入內(nèi)核態(tài),其頻繁的狀態(tài)切換會(huì)消耗大量的cpu資源。第二,由于進(jìn)程信號(hào)處理過程中需要對(duì)用戶現(xiàn)場數(shù)據(jù)通過頻繁的壓棧和出棧來進(jìn)行保護(hù),導(dǎo)致消耗大量內(nèi)存。第三,由于內(nèi)核態(tài)需要感知信號(hào)處
技術(shù)實(shí)現(xiàn)思路
1、(一)要解決的技術(shù)問題
2、鑒于現(xiàn)有技術(shù)的上述缺點(diǎn)、不足,本專利技術(shù)提供一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法,其解決了進(jìn)程在執(zhí)行信號(hào)處理過程中時(shí)存在的cpu資源和內(nèi)存消耗高以及信號(hào)處理函數(shù)與內(nèi)核態(tài)的耦合性高的技術(shù)問題。
3、(二)技術(shù)方案
4、為了達(dá)到上述目的,本專利技術(shù)采用的主要技術(shù)方案包括:
5、第一方面,本專利技術(shù)實(shí)施例提供一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法,其包括:
6、將用戶態(tài)的信號(hào)處理函數(shù)記錄在嵌入式實(shí)時(shí)操作系統(tǒng)的用戶系統(tǒng)調(diào)用庫中,并在啟動(dòng)之前,執(zhí)行用戶系統(tǒng)調(diào)用庫初始化,將用戶態(tài)未決信號(hào)集全局變量地址傳遞到進(jìn)程控制塊結(jié)構(gòu)體中,獲得內(nèi)核態(tài)未決信號(hào)集全局變量地址;
7、若存在進(jìn)程的觸發(fā)信號(hào),則將觸發(fā)信號(hào)記錄在內(nèi)核態(tài)未決信號(hào)集全局變量地址中,用戶系統(tǒng)調(diào)用庫調(diào)用進(jìn)程陷入內(nèi)核態(tài)時(shí),將用戶現(xiàn)場數(shù)據(jù)保存在內(nèi)核態(tài)線程棧中,和在內(nèi)核態(tài)中對(duì)觸發(fā)信號(hào)進(jìn)行內(nèi)核處理,將得到的未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址;以及,根據(jù)內(nèi)核態(tài)線程棧中的用戶現(xiàn)場數(shù)據(jù)進(jìn)行恢復(fù)以使進(jìn)程返回用戶態(tài),并根據(jù)信號(hào)處理函數(shù)對(duì)未決信號(hào)集依次執(zhí)行信號(hào)處理。
8、可選地,嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法還包括:
9、在未決信號(hào)集處理完成之后,根據(jù)恢復(fù)內(nèi)核態(tài)線程棧中的用戶現(xiàn)場數(shù)據(jù)所獲得的指令地址,控制進(jìn)程返回該指令地址繼續(xù)執(zhí)行。
10、可選地,將用戶態(tài)的信號(hào)處理函數(shù)記錄在嵌入式實(shí)時(shí)操作系統(tǒng)的用戶系統(tǒng)調(diào)用庫中,并在啟動(dòng)之前,執(zhí)行用戶系統(tǒng)調(diào)用庫初始化,將用戶態(tài)未決信號(hào)集全局變量地址傳遞到進(jìn)程控制塊結(jié)構(gòu)體中,獲得內(nèi)核態(tài)未決信號(hào)集全局變量地址包括:
11、基于嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)類別信息,注冊(cè)該進(jìn)程的信號(hào)處理函數(shù),并將信號(hào)處理函數(shù)記錄在用戶系統(tǒng)調(diào)用庫中;
12、在嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程用戶main函數(shù)啟動(dòng)前,執(zhí)行用戶系統(tǒng)調(diào)用庫初始化,將用戶態(tài)未決信號(hào)集全局變量地址傳遞到進(jìn)程控制塊結(jié)構(gòu)體中,獲得內(nèi)核態(tài)未決信號(hào)集全局變量地址。
13、可選地,若存在進(jìn)程的觸發(fā)信號(hào),則將觸發(fā)信號(hào)記錄在內(nèi)核態(tài)未決信號(hào)集全局變量地址中包括:
14、獲取嵌入式實(shí)時(shí)操作系統(tǒng)接收到外部信號(hào),并判斷外部信號(hào)中是否存在進(jìn)程的觸發(fā)信號(hào);
15、若外部信號(hào)中存在進(jìn)程的觸發(fā)信號(hào),則將該觸發(fā)信號(hào)記錄在內(nèi)核態(tài)未決信號(hào)集全局變量地址;
16、若外部信號(hào)中不存在進(jìn)程的觸發(fā)信號(hào),則保持進(jìn)程的執(zhí)行狀態(tài),并實(shí)時(shí)更新保存在嵌入式實(shí)時(shí)操作系統(tǒng)的物理寄存器中的包含指令地址的用戶現(xiàn)場數(shù)據(jù)。
17、可選地,用戶系統(tǒng)調(diào)用庫調(diào)用進(jìn)程陷入內(nèi)核態(tài)時(shí),將用戶現(xiàn)場數(shù)據(jù)保存在內(nèi)核態(tài)線程棧中,和在內(nèi)核態(tài)中對(duì)觸發(fā)信號(hào)進(jìn)行內(nèi)核處理,將得到的未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址包括:
18、用戶系統(tǒng)調(diào)用庫調(diào)用進(jìn)程陷入內(nèi)核態(tài)時(shí),將用戶現(xiàn)場數(shù)據(jù)保存在內(nèi)核態(tài)線程棧中;
19、基于進(jìn)程的信號(hào)屏蔽集,對(duì)觸發(fā)信號(hào)中與信號(hào)屏蔽集對(duì)應(yīng)的子信號(hào)的進(jìn)行屏蔽處理,得到初始未決信號(hào)集;
20、在進(jìn)程陷入內(nèi)核態(tài)的情況下,對(duì)初始未決信號(hào)集進(jìn)行內(nèi)核處理,并將得到未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址中。
21、可選地,在進(jìn)程陷入內(nèi)核態(tài)的情況下,對(duì)初始未決信號(hào)集進(jìn)行內(nèi)核處理,并將得到未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址中之后,還包括:
22、判斷內(nèi)核態(tài)未決信號(hào)集全局變量地址中是否存在初始未決信號(hào)集;
23、若內(nèi)核態(tài)未決信號(hào)集全局變量地址中存在初始未決信號(hào)集時(shí),則修改內(nèi)核態(tài)線程棧中用戶現(xiàn)場數(shù)據(jù)的指令地址為預(yù)先設(shè)置的信號(hào)分發(fā)函數(shù)的入口地址,并將信號(hào)分發(fā)函數(shù)的返回地址設(shè)置為進(jìn)程陷入內(nèi)核態(tài)前一時(shí)刻的指令地址;
24、若內(nèi)核態(tài)未決信號(hào)集全局變量地址中不存在初始未決信號(hào)集時(shí),則保持進(jìn)程的返回地址為進(jìn)程陷入內(nèi)核態(tài)時(shí)的指令地址。
25、可選地,根據(jù)內(nèi)核態(tài)線程棧中的用戶現(xiàn)場數(shù)據(jù)進(jìn)行恢復(fù)以使進(jìn)程返回用戶態(tài),并根據(jù)信號(hào)處理函數(shù)對(duì)未決信號(hào)集依次執(zhí)行信號(hào)處理包括:
26、將內(nèi)核態(tài)線程棧中的用戶現(xiàn)場數(shù)據(jù)恢復(fù)到物理寄存器中,以使進(jìn)程返回用戶態(tài);
27、根據(jù)信號(hào)分發(fā)函數(shù),分配對(duì)應(yīng)的信號(hào)處理函數(shù)依次處理未決信號(hào)集中的未決信號(hào),得到經(jīng)信號(hào)處理后的進(jìn)程。
28、第二方面,本專利技術(shù)實(shí)施例提供一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理系統(tǒng),其包括:
29、嵌入式實(shí)時(shí)操作系統(tǒng)的初始化模塊,用于將用戶態(tài)的信號(hào)處理函數(shù)記錄在嵌入式實(shí)時(shí)操作系統(tǒng)的用戶系統(tǒng)調(diào)用庫中,并在啟動(dòng)之前,執(zhí)行用戶系統(tǒng)調(diào)用庫初始化,將用戶態(tài)未決信號(hào)集全局變量地址傳遞到進(jìn)程控制塊結(jié)構(gòu)體中,獲得內(nèi)核態(tài)未決信號(hào)集全局變量地址;
30、信號(hào)處理模塊,用于若存在進(jìn)程的觸發(fā)信號(hào),則將觸發(fā)信號(hào)記錄在內(nèi)核態(tài)未決信號(hào)集全局變量地址中,用戶系統(tǒng)調(diào)用庫調(diào)用進(jìn)程陷入內(nèi)核態(tài)時(shí),將用戶現(xiàn)場數(shù)據(jù)保存在內(nèi)核態(tài)線程棧中,和在內(nèi)核態(tài)中對(duì)觸發(fā)信號(hào)進(jìn)行內(nèi)核處理,將得到的未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址;以及,根據(jù)內(nèi)核態(tài)線程棧中的用戶現(xiàn)場數(shù)據(jù)進(jìn)行恢復(fù)以使進(jìn)程返回用戶態(tài),并根據(jù)信號(hào)處理函數(shù)對(duì)未決信號(hào)集依次執(zhí)行信號(hào)處理。
31、第三方面,本專利技術(shù)實(shí)施例提供一種電子設(shè)備,其包括:
32、至少一個(gè)數(shù)據(jù)庫;以及<本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法,其特征在于,包括:
2.如權(quán)利要求1所述的方法,其特征在于,還包括:
3.如權(quán)利要求1所述的方法,其特征在于,將用戶態(tài)的信號(hào)處理函數(shù)記錄在嵌入式實(shí)時(shí)操作系統(tǒng)的用戶系統(tǒng)調(diào)用庫中,并在啟動(dòng)之前,執(zhí)行用戶系統(tǒng)調(diào)用庫初始化,將用戶態(tài)未決信號(hào)集全局變量地址傳遞到進(jìn)程控制塊結(jié)構(gòu)體中,獲得內(nèi)核態(tài)未決信號(hào)集全局變量地址包括:
4.如權(quán)利要求1所述的方法,其特征在于,若存在進(jìn)程的觸發(fā)信號(hào),則將觸發(fā)信號(hào)記錄在內(nèi)核態(tài)未決信號(hào)集全局變量地址中包括:
5.如權(quán)利要求4所述的方法,其特征在于,用戶系統(tǒng)調(diào)用庫調(diào)用進(jìn)程陷入內(nèi)核態(tài)時(shí),將用戶現(xiàn)場數(shù)據(jù)保存在內(nèi)核態(tài)線程棧中,和在內(nèi)核態(tài)中對(duì)觸發(fā)信號(hào)進(jìn)行內(nèi)核處理,將得到的未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址包括:
6.如權(quán)利要求5所述的方法,其特征在于,在進(jìn)程陷入內(nèi)核態(tài)的情況下,對(duì)初始未決信號(hào)集進(jìn)行內(nèi)核處理,并將得到未決信號(hào)集記錄在用戶態(tài)未決信號(hào)集全局變量地址中之后,還包括:
7.如權(quán)利要求6所述的方法,其特征在于,根據(jù)內(nèi)核態(tài)線程棧中的用戶現(xiàn)場數(shù)
8.一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理系統(tǒng),其特征在于,包括:
9.一種電子設(shè)備,其特征在于,包括:
10.一種計(jì)算機(jī)可讀介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,其特征在于,所述可執(zhí)行指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)如權(quán)利要求1-7任一項(xiàng)所述的嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法步驟。
...【技術(shù)特征摘要】
1.一種嵌入式實(shí)時(shí)操作系統(tǒng)中進(jìn)程的信號(hào)處理方法,其特征在于,包括:
2.如權(quán)利要求1所述的方法,其特征在于,還包括:
3.如權(quán)利要求1所述的方法,其特征在于,將用戶態(tài)的信號(hào)處理函數(shù)記錄在嵌入式實(shí)時(shí)操作系統(tǒng)的用戶系統(tǒng)調(diào)用庫中,并在啟動(dòng)之前,執(zhí)行用戶系統(tǒng)調(diào)用庫初始化,將用戶態(tài)未決信號(hào)集全局變量地址傳遞到進(jìn)程控制塊結(jié)構(gòu)體中,獲得內(nèi)核態(tài)未決信號(hào)集全局變量地址包括:
4.如權(quán)利要求1所述的方法,其特征在于,若存在進(jìn)程的觸發(fā)信號(hào),則將觸發(fā)信號(hào)記錄在內(nèi)核態(tài)未決信號(hào)集全局變量地址中包括:
5.如權(quán)利要求4所述的方法,其特征在于,用戶系統(tǒng)調(diào)用庫調(diào)用進(jìn)程陷入內(nèi)核態(tài)時(shí),將用戶現(xiàn)場數(shù)據(jù)保存在內(nèi)核態(tài)線程棧中,和在內(nèi)核態(tài)中對(duì)觸發(fā)信號(hào)進(jìn)行內(nèi)核處理,將得到的未決信號(hào)集記錄...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:陳銀桃,王森,董乾欽,章維,劉志勇,王浩,張菊,
申請(qǐng)(專利權(quán))人:中控技術(shù)股份有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。