欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法

文檔序號:6522144閱讀:207來源:國知局
使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法
【專利摘要】本發(fā)明涉及嵌入式軟件【技術(shù)領(lǐng)域】,尤其涉及一種使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法。本發(fā)明通過在靜態(tài)內(nèi)存區(qū)劃出一塊區(qū)域作為動態(tài)分配內(nèi)存,并修改程序中的動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)至定制版本,使得動態(tài)分配和釋放內(nèi)存動作在該區(qū)域中進行,程序啟動時產(chǎn)生的動態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)都會存到靜態(tài)內(nèi)存區(qū),然后將啟動完成時靜態(tài)內(nèi)存中的數(shù)據(jù)都以狀態(tài)文件形式存到外部存儲器中,在程序再啟動時可直接調(diào)用狀態(tài)文件,恢復(fù)到靜態(tài)內(nèi)存區(qū),一步完成啟動。通過這種方法,可大大提高程序啟動速度。
【專利說明】使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式軟件【技術(shù)領(lǐng)域】,尤其涉及一種使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法。
【背景技術(shù)】
[0002]在某些場合下,對于嵌入式設(shè)備的啟動時間有很高的要求。這里所說的啟動時間,是指從裝置上電到功能可以正常工作的狀態(tài)所需要的時間。例如,用于監(jiān)控、保護的設(shè)備在因故障重啟后,要求盡快進入工作狀態(tài)。
[0003]嵌入式設(shè)備的啟動過程大致可分為硬件初始化、操作系統(tǒng)啟動和業(yè)務(wù)軟件啟動三個步驟。一般來說,硬件初始化和操作系統(tǒng)啟動耗費時間很短(一般在I秒內(nèi)),業(yè)務(wù)軟件啟動的時間很大程度上決定了整個嵌入式系統(tǒng)的啟動時間。
[0004]目前,加快嵌入式軟件啟動的手段主要有:
I)改進硬件性能
通過使用性能更好的硬件來提高整體的速度,軟件啟動的時間也會相應(yīng)縮短。例如:使用更快的處理器,存取更快的存儲芯片或者更大的RAM等。這種方式一般都能奏效,但是會顯著增加嵌入式設(shè)備的硬件成本,而且硬件性能的提升和最終啟動時間的縮短是線性關(guān)系的,很難實現(xiàn)大幅度的提升。
[0005]2)裁剪軟件功能
根據(jù)具體使用的情況對嵌入式軟件進行裁剪,只保留必要的部分。在嵌入式軟件功能比較復(fù)雜,而在各種應(yīng)用場合下都只是使用其中一個部分的情況下,通過量身定制的裁剪,可以節(jié)省掉未使用功能的啟動時間而提升軟件啟動的速度。這種方法的局限在于,如果軟件的大部分功能都是不可裁剪的則不使用。另一方面,大量量身定制的裁剪會給軟件或配置文件版本維護帶來很大的困難。
[0006]3)保存中間數(shù)據(jù)
有些嵌入式軟件在啟動過程中,需要讀取比較復(fù)雜的配置文件,并根據(jù)配置文件生成相應(yīng)的內(nèi)存結(jié)構(gòu)供后續(xù)功能使用。一般配置文件都是文本格式的,比較典型的是XML文件。由于文本文件的格式比較復(fù)雜,解析時需要進行大量的錯誤判斷,因此解析過程相當慢。為了提高解析的速度,可以把解析生成的內(nèi)存結(jié)構(gòu)以二進制文件的形式保存起來。在程序啟動時,先檢查一下當前的二進制文件版本和配置文件版本是否一致,不一致則重新解析并保存,一致的話,就直接解析二進制文件。因為二進制文件與內(nèi)存數(shù)據(jù)結(jié)構(gòu)是一致的,解析時間相對于直接解析文本的配置文件會大大縮短。這種方式目前應(yīng)用比較廣泛。
[0007]4)內(nèi)存完整轉(zhuǎn)儲
這種方式是在裝置斷電前,將整個內(nèi)存的數(shù)據(jù)以及CPU等硬件狀態(tài)全部轉(zhuǎn)儲到永久存儲的設(shè)備上,下次裝置上電直接將內(nèi)存數(shù)據(jù)恢復(fù),然后設(shè)置CPU及硬件狀態(tài)讓裝置繼續(xù)從斷電時的狀態(tài)運行的一種方法。這種方法的特點是不需要軟件程序做任何修改,但是需要保存整個內(nèi)存的完整鏡像,在內(nèi)存容量比較大的情況下,需要占用外部存儲設(shè)備的空間比較大,保存和讀取的時間也比較長。一般在規(guī)模比較大的操作系統(tǒng)上提供這些功能,例如嵌入式Windows、嵌入式Linux等。
[0008]上述幾種手段基本都存在一定問題,無法在成本較低的情況下快速提高軟件啟動速度。

【發(fā)明內(nèi)容】

[0009]針對上述問題,本發(fā)明通過將動態(tài)內(nèi)存靜態(tài)化,提供一種使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法。
[0010]一個程序所使用的內(nèi)存區(qū)域,大致可分為四個部分:靜態(tài)區(qū)、常量區(qū)、堆區(qū)、棧區(qū),其中靜態(tài)區(qū)用于存放程序的全局變量和靜態(tài)變量,常量區(qū)存放程序中定義的常量數(shù)據(jù),堆區(qū)用于運行時動態(tài)從中分配內(nèi)存,棧區(qū)則保存函數(shù)調(diào)用的參數(shù)和返回值以及局部變量等。在程序開始啟動到啟動完成這兩個狀態(tài),發(fā)生變化的數(shù)據(jù)都在靜態(tài)區(qū)、堆區(qū)、棧區(qū)幾個區(qū)域。靜態(tài)區(qū)中的變量每次程序啟動都會放在相同的位置,只有值會變化;堆區(qū)中分配的動態(tài)內(nèi)存,每次運行都會有新的情況,因此其位置和數(shù)據(jù)都可能發(fā)生變化;棧區(qū)中的數(shù)據(jù)其實體現(xiàn)的是函數(shù)的調(diào)用關(guān)系和內(nèi)部狀態(tài),與程序的整體運行狀態(tài)沒有太大關(guān)系。因此,影響程序啟動速度的關(guān)鍵在于靜態(tài)區(qū)中的靜態(tài)內(nèi)存和堆區(qū)中的動態(tài)內(nèi)存。
[0011]對于靜態(tài)內(nèi)存,從程序啟動開始到啟動完成的狀態(tài)之間,發(fā)生變化的只有內(nèi)存中的全局或靜態(tài)數(shù)據(jù)值及程序的執(zhí)行位置。因此,只要將啟動完成時的全局或靜態(tài)數(shù)據(jù)保存到外部存儲器,在程序每次啟動時,直接從外部存儲器讀入內(nèi)存中的靜態(tài)內(nèi)存區(qū)并保存在原來的位置,并將程序跳至上次啟動完成的位置執(zhí)行,就可以一步完成啟動。其啟動所需的時間僅僅是從外部存儲將其全局與靜態(tài)變量區(qū)域讀取到內(nèi)存中所需的時間。由于程序使用的全局與靜態(tài)變量數(shù)量有限,整個啟動過程需要的時間很短。
[0012]對于動態(tài)分配的內(nèi)存,即使動態(tài)分配的內(nèi)存在內(nèi)存中的地址每次運行都會有變化,但是它總會被程序靜態(tài)內(nèi)存區(qū)中的某個指針直接或間接使用,當我們使用上一步所描述的保存方案來存儲和恢復(fù)啟動完成的狀態(tài)時,這個指針同樣也會被保存下來,但是其指向的動態(tài)內(nèi)存卻很難保存,上述保存靜態(tài)數(shù)據(jù)的方法在此不能直接使用。因此,本發(fā)明考慮到將動態(tài)內(nèi)存靜態(tài)化的方法,借鑒C語言標準庫中的分配算法,將動態(tài)分配轉(zhuǎn)為靜態(tài)分配,將所有動態(tài)分配的內(nèi)存塊都轉(zhuǎn)移到靜態(tài)內(nèi)存區(qū)中,進行狀態(tài)保存時,可將動態(tài)數(shù)據(jù)與靜態(tài)數(shù)據(jù)一起存到靜態(tài)內(nèi)存區(qū),這樣,指向動態(tài)內(nèi)存的指針,恢復(fù)后也恰好指向靜態(tài)內(nèi)存區(qū)中的“動態(tài)”數(shù)據(jù)(實際已變?yōu)殪o態(tài)數(shù)據(jù)),從而在程序啟動時直接調(diào)用該狀態(tài),提高程序啟動速度。
[0013]本發(fā)明采用如下步驟實現(xiàn)上述設(shè)想:
一種使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,包括如下步驟:
步驟1、確定軟件程序的啟動完成點;該啟動完成點就是程序運行到某一時刻,之后程序功能可以正常使用的執(zhí)行點。根據(jù)應(yīng)用軟件的不同,啟動完成點略有不同,程序員可根據(jù)經(jīng)驗判斷具體程序的啟動完成點。
[0014]步驟2、判斷外部存儲器是否存在狀態(tài)文件,若不存在,則按步驟3進行,否則,按步驟4進行;判斷時可使用程序嘗試打開狀態(tài)文件,根據(jù)打開是否成功判斷狀態(tài)文件是否存在。[0015]步驟3、進行軟件啟動過程并將啟動完成時內(nèi)存中的數(shù)據(jù)保存到外部存儲器: (3-1)在靜態(tài)內(nèi)存區(qū)劃出一塊用于作為動態(tài)分配內(nèi)存的區(qū)域,修改程序中的動態(tài)分配
函數(shù)和釋放內(nèi)存函數(shù)至定制版本,使得動態(tài)分配和釋放內(nèi)存動作在該區(qū)域中進行;
(3-2)進行程序啟動過程,直到程序執(zhí)行到啟動完成點;
(3-3)在外部存儲器中創(chuàng)建狀態(tài)文件,將到啟動完成點時靜態(tài)內(nèi)存區(qū)中存儲的數(shù)據(jù)存到狀態(tài)文件中;由于(3-1)中已修改了動態(tài)分配函數(shù),在程序啟動過程中,在靜態(tài)內(nèi)存區(qū)為動態(tài)分配指定內(nèi)存區(qū)域,存儲動態(tài)數(shù)據(jù),因此,此時靜態(tài)內(nèi)存區(qū)中存儲的數(shù)據(jù)既有原動態(tài)數(shù)據(jù),也有原靜態(tài)數(shù)據(jù),在此統(tǒng)稱為靜態(tài)數(shù)據(jù),不再區(qū)分,都統(tǒng)一存到狀態(tài)文件中。
[0016](3-4)恢復(fù)動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)的原有行為;由于啟動已經(jīng)完成,后續(xù)功能中沒必要再將動態(tài)內(nèi)存分配至靜態(tài)內(nèi)存區(qū)域,所以恢復(fù)原有的動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)。
[0017](3-5)跳至啟動完成點繼續(xù)執(zhí)彳丁程序后續(xù)功能;保存完狀態(tài)文件后,繼續(xù)從啟動完成點開始執(zhí)行程序。
[0018]步驟4、從狀態(tài)文件中讀取數(shù)據(jù)至靜態(tài)內(nèi)存區(qū),然后跳至啟動完成點,繼續(xù)執(zhí)行程序后續(xù)功能;如果外部存儲器中存在狀態(tài)文件,則可直接調(diào)用,無需做任何調(diào)整即可達到啟動完成的狀態(tài)。
[0019]進一步,步驟(3-1)中,修改函數(shù)時通過編譯時使用宏替換實現(xiàn),也可通過運行時動態(tài)修改函數(shù)機器代碼進行跳轉(zhuǎn)的方式實現(xiàn)。根據(jù)上述方法,將動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)修改至定制版本,該定制版本的特點是所有分配和釋放動作都不在堆區(qū)進行,而是在預(yù)先劃分好的一塊靜態(tài)內(nèi)存區(qū)(通常稱為“內(nèi)存池”)中進行。
[0020]其中,步驟(3-1)中通過定義一個大的靜態(tài)數(shù)組的形式預(yù)留空間作為內(nèi)存池。
[0021 ] 上述內(nèi)容所述的狀態(tài)文件包括至少一個靜態(tài)內(nèi)存數(shù)據(jù)塊,保存內(nèi)容包括靜態(tài)數(shù)據(jù)塊的地址、靜態(tài)數(shù)據(jù)塊的大小、靜態(tài)數(shù)據(jù)塊的內(nèi)容。
[0022]本發(fā)明與目前已有的提高嵌入式軟件啟動速度的方法相比,具有如下優(yōu)點:
I)對硬件性能依賴小
即使在硬件不做任何改動的情況下,也可以取得顯著的啟動速度提升。
[0023]2)無需裁剪軟件功能
在使用本發(fā)明的方案的情況下,軟件功能裁剪與否對效果影響很小。
[0024]3)性能提升顯著
由于將復(fù)雜的初始化過程簡化為內(nèi)存塊的讀取和存儲,而且內(nèi)存塊在存取時可以只操作用到的區(qū)域部分,而且其間沒有任何解析動作,因此可以得到顯著提升。
[0025]4)軟件開發(fā)工作量小
使用宏替換或者動態(tài)修改機器代碼跳轉(zhuǎn)的方式,對原有代碼幾乎無需修改。
【專利附圖】

【附圖說明】
[0026]圖1是本發(fā)明的流程圖。
【具體實施方式】
[0027]—種使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,包括如下步驟: 步驟1、確定軟件程序的啟動完成點。
[0028]步驟2、使用程序嘗試打開狀態(tài)文件,根據(jù)打開是否成功判斷外部存儲器是否存在狀態(tài)文件,若不存在,則按步驟3進行,否則,按步驟4進行。
[0029]步驟3、進行軟件啟動過程并將啟動完成時內(nèi)存中的數(shù)據(jù)保存到外部存儲器: (3-1)在靜態(tài)內(nèi)存區(qū)劃出一塊用于作為動態(tài)分配內(nèi)存的區(qū)域,修改程序中的動態(tài)分配
函數(shù)和釋放內(nèi)存函數(shù)至定制版本,使得動態(tài)分配和釋放內(nèi)存動作在該區(qū)域中進行;在劃分動態(tài)內(nèi)存區(qū)域時,通過定義一個大的靜態(tài)數(shù)組的形式預(yù)留空間作為內(nèi)存池存儲動態(tài)數(shù)據(jù)。修改函數(shù)時通過編譯時使用宏替換實現(xiàn),也可通過運行時動態(tài)修改函數(shù)機器代碼進行跳轉(zhuǎn)的方式實現(xiàn)。
[0030](3-2)進行程序啟動過程,直到程序執(zhí)行到啟動完成點。
[0031](3-3)在外部存儲器中創(chuàng)建狀態(tài)文件,將到啟動完成點時靜態(tài)內(nèi)存區(qū)中存儲的數(shù)據(jù)存到狀態(tài)文件中。所述的狀態(tài)文件包括至少一個靜態(tài)內(nèi)存數(shù)據(jù)塊,保存內(nèi)容包括靜態(tài)數(shù)據(jù)塊的地址、靜態(tài)數(shù)據(jù)塊的大小、靜態(tài)數(shù)據(jù)塊的內(nèi)容。
[0032](3-4)恢復(fù)動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)的原有行為。
[0033](3-5)跳至啟動完成點繼續(xù)執(zhí)行程序后續(xù)功能。
[0034]步驟4、從狀態(tài)文件中讀取數(shù)據(jù)至靜態(tài)內(nèi)存區(qū),然后跳至啟動完成點,繼續(xù)執(zhí)行程序后續(xù)功能。
[0035]本方法在程序啟動過程中需要進行較為復(fù)雜的操作,尤其是大量數(shù)據(jù)解析的情況下,效果最為明顯,而這種情況正是導(dǎo)致啟動過程緩慢的最為常見的原因。因此,通過這種方法可大大提升程序啟動速度。
【權(quán)利要求】
1.一種使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,其特征在于包括如下步驟: 步驟1、確定軟件程序的啟動完成點; 步驟2、判斷外部存儲器是否存在狀態(tài)文件,若不存在,則按步驟3進行,否則,按步驟4進行; 步驟3、進行軟件啟動過程并將啟動完成時內(nèi)存中的數(shù)據(jù)保存到外部存儲器: (3-1)在靜態(tài)內(nèi)存區(qū)劃出一塊用于作為動態(tài)分配內(nèi)存的區(qū)域,修改程序中的動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)至定制版本,使得動態(tài)分配和釋放內(nèi)存動作在該區(qū)域中進行; (3-2)進行程序啟動過程,直到程序執(zhí)行到啟動完成點; (3-3)在外部存儲器中創(chuàng)建狀態(tài)文件,將到啟動完成點時靜態(tài)內(nèi)存區(qū)中存儲的數(shù)據(jù)存到狀態(tài)文件中; (3-4)恢復(fù)動態(tài)分配函數(shù)和釋放內(nèi)存函數(shù)的原有行為; (3-5)跳至啟動完成點繼續(xù)執(zhí)行程序后續(xù)功能; 步驟4、從狀態(tài)文件中讀取數(shù)據(jù)至靜態(tài)內(nèi)存區(qū),然后跳至啟動完成點,繼續(xù)執(zhí)行程序后續(xù)功能。
2.根據(jù)權(quán)利要求1所述的使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,其特征在于:步驟(3-1)中,修改函數(shù)時通過編譯時使用宏替換實現(xiàn)。
3.根據(jù)權(quán)利要求1所述的使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,其特征在于:步驟(3-1)中,修改函數(shù)是通過運行時動態(tài)修改函數(shù)機器代碼進行跳轉(zhuǎn)的方式實現(xiàn)。
4.根據(jù)權(quán)利要求1或2或3所述的使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,其特征在于:步驟(3-1)中通過定義一個大的靜態(tài)數(shù)組的形式預(yù)留空間作為內(nèi)存池。
5.根據(jù)權(quán)利要求4所述的使用超級狀態(tài)存儲加快嵌入式軟件啟動過程的方法,其特征在于:狀態(tài)文件包括至少一個靜態(tài)內(nèi)存數(shù)據(jù)塊,保存內(nèi)容包括靜態(tài)數(shù)據(jù)塊的地址、靜態(tài)數(shù)據(jù)塊的大小、靜態(tài)數(shù)據(jù)塊的內(nèi)容。
【文檔編號】G06F9/445GK103617060SQ201310643663
【公開日】2014年3月5日 申請日期:2013年12月5日 優(yōu)先權(quán)日:2013年12月5日
【發(fā)明者】周文俊, 劉國華, 叢春濤, 楊冰, 孫發(fā)恩, 賀強, 孟慶媛, 朱曉磊, 宋先慧, 袁文廣 申請人:積成電子股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
辽阳县| 莫力| 丹凤县| 商丘市| 宝清县| 三明市| 石嘴山市| 盐城市| 虹口区| 宁武县| 洛宁县| 昭平县| 台前县| 普陀区| 南阳市| 邯郸县| 仁怀市| 措勤县| 边坝县| 通河县| 和静县| 阜南县| 台东县| 平安县| 平遥县| 顺义区| 香港| 鸡西市| 平凉市| 贵阳市| 枣强县| 长岭县| 黑龙江省| 巫溪县| 阳城县| 东山县| 中阳县| 台湾省| 庆云县| 栾城县| 莎车县|