啟動(dòng)操作系統(tǒng)的方法與裝置制造方法
【專利摘要】本發(fā)明實(shí)施例涉及一種操作系統(tǒng)啟動(dòng)的方法與裝置。所述方法包括:獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件;當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。本發(fā)明實(shí)施例實(shí)現(xiàn)了在操作系統(tǒng)啟動(dòng)時(shí),降低操作系統(tǒng)的啟動(dòng)時(shí)間,提高系統(tǒng)的啟動(dòng)速度。
【專利說明】啟動(dòng)操作系統(tǒng)的方法與裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,尤其涉及一種啟動(dòng)操作系統(tǒng)的方法與裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的發(fā)展,操作系統(tǒng)的啟動(dòng)速度一直是計(jì)算機(jī)技術(shù)發(fā)展的重點(diǎn),通過提升操作系統(tǒng)的啟動(dòng)速度可以使操作系統(tǒng)的運(yùn)行速度縮短,減少用戶的等待時(shí)間,也提高了操作系統(tǒng)的運(yùn)行效率。
[0003]操作系統(tǒng)的啟動(dòng)速度是由系統(tǒng)加載進(jìn)程決定的,進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程既是基本的分配單元,也是基本的執(zhí)行單元。進(jìn)程是一個(gè)實(shí)體,每一個(gè)進(jìn)程都有它自己的地址空間,包括文本區(qū)域、數(shù)據(jù)區(qū)域和堆棧。文本區(qū)域存儲(chǔ)系統(tǒng)內(nèi)核執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲(chǔ)進(jìn)程執(zhí)行期間使用的動(dòng)態(tài)分配的內(nèi)存;堆棧區(qū)域存儲(chǔ)進(jìn)程調(diào)用的指令和本地變量。
[0004]在現(xiàn)有技術(shù)的安卓(Android)系統(tǒng)的啟動(dòng)過程中,所有應(yīng)用程序進(jìn)程都是由一個(gè)父進(jìn)程(Zygote)調(diào)用創(chuàng)建函數(shù)(fork)指令而復(fù)制產(chǎn)生的。而在Android系統(tǒng)的啟動(dòng)階段,Zygote會(huì)加載大量的Java類和資源文件到Zygote進(jìn)程的內(nèi)存中,以便于新進(jìn)程共享這些數(shù)據(jù),從而加快新進(jìn)程的啟動(dòng)速度與運(yùn)行速度。但是,如此做法也存在以下的缺陷,I)在啟動(dòng)的時(shí)候加載全部的預(yù)加載(preload)列表,會(huì)大大延長Android的啟動(dòng)時(shí)間,降低系統(tǒng)的啟動(dòng)速度;2)Zyg0te加載的大量的java類與資源文件是以一個(gè)固定列表的形式寫在preload文件中,但該文件是不會(huì)被更新的,因此,當(dāng)用戶的使用習(xí)慣發(fā)生改變時(shí),新進(jìn)程的啟動(dòng)效率低。
【發(fā)明內(nèi)容】
`
[0005]本發(fā)明實(shí)施例提供了一種操作系統(tǒng)啟動(dòng)的方法和裝置,以降低系統(tǒng)的啟動(dòng)時(shí)間,提高系統(tǒng)的啟動(dòng)速度;并進(jìn)一步提高在用戶的使用習(xí)慣發(fā)生改變時(shí)新進(jìn)程的啟動(dòng)效率,加速系統(tǒng)的啟動(dòng)速度。
[0006]在第一方面,本發(fā)明提實(shí)施例供了一種啟動(dòng)操作系統(tǒng)的方法,所述方法包括:
[0007]獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件;
[0008]當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建進(jìn)子程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述?呆作系統(tǒng)的啟動(dòng)。
[0009]在第二方面,本發(fā)明提實(shí)施例供了一種啟動(dòng)操作系統(tǒng)的裝置,所述裝置包括:
[0010]獲取單元,用于獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件;
[0011]第一執(zhí)行單元,用于當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。
[0012]本發(fā)明實(shí)施例提供的啟動(dòng)操作系統(tǒng)的方法與裝置,父進(jìn)程獲取共用程序文件列表preload, boot,當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程時(shí),將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成子進(jìn)程,不用重復(fù)加載多個(gè)Java類與資源文件,當(dāng)操作系統(tǒng)啟動(dòng)完成后,記錄用戶常用的應(yīng)用進(jìn)程名稱,加載該用戶常用的應(yīng)用進(jìn)程,可以解決現(xiàn)有技術(shù)在操作系統(tǒng)啟動(dòng)的時(shí)候需要加載全部的preload列表而不得不延長操作系統(tǒng)的啟動(dòng)時(shí)間的問題;還可以解決當(dāng)用戶的使用習(xí)慣發(fā)生改變時(shí),父進(jìn)程生成進(jìn)程的啟動(dòng)效率低的問題。
【專利附圖】
【附圖說明】
[0013]圖1為本發(fā)明實(shí)施例一提供的啟動(dòng)操作系統(tǒng)的方法流程圖;
[0014]圖2為本發(fā)明實(shí)施例提供的操作系統(tǒng)內(nèi)核示意圖;
[0015]圖3為本發(fā)明實(shí)施例二提供的啟動(dòng)操作系統(tǒng)的方法具體流程圖;
[0016]圖4為本發(fā)明實(shí)施例三提供的生成預(yù)加載文件流程圖;
[0017]圖5為本發(fā)明實(shí)施例四提供的生成用戶預(yù)加載文件流程圖;
[0018]圖6為本發(fā)明實(shí)施例五提供的啟動(dòng)操作系統(tǒng)的裝置圖。
【具體實(shí)施方式】
[0019]下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0020]圖1為本發(fā)明實(shí)施例一提供的啟動(dòng)操作系統(tǒng)的方法流程圖。如圖1所示,該實(shí)施例包括以下步驟:
[0021]步驟110、獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件。
[0022]具體地,用戶點(diǎn)擊終端設(shè)備的啟動(dòng)按鈕。終端設(shè)備為具有操作系統(tǒng)的終端設(shè)備,例如,臺(tái)式電腦、手機(jī)等。操作系統(tǒng)可以是安卓(Android)系統(tǒng)、Linux系統(tǒng)等。在本發(fā)明各實(shí)施例中,將以臺(tái)式電腦及其具有的安卓系統(tǒng)為例進(jìn)行說明。
[0023]在用戶點(diǎn)擊啟動(dòng)按鈕后,開始啟動(dòng)操作系統(tǒng)。首先,觸發(fā)啟動(dòng)操作系統(tǒng)內(nèi)核;操作系統(tǒng)內(nèi)核啟動(dòng)解析程序init.rc定義的啟動(dòng)配置項(xiàng),啟動(dòng)服務(wù)管理器(Service Manager),啟動(dòng)虛擬機(jī)Dalvik,啟動(dòng)操作系統(tǒng)進(jìn)程的父進(jìn)程Zygote,并注冊(cè)父進(jìn)程套接字,操作系統(tǒng)內(nèi)核為父進(jìn)程分配內(nèi)存,父進(jìn)程用于創(chuàng)建子進(jìn)程。
[0024]操作系統(tǒng)內(nèi)核啟動(dòng)父進(jìn)程后,父進(jìn)程從操作系統(tǒng)內(nèi)存中獲取共用程序文件列表(preload, boot)。在共用程序文件列表中存儲(chǔ)了多個(gè)預(yù)加載文件,預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件,在本發(fā)明實(shí)施例中以Java類與資源文件為例說明,所述多個(gè)Java類與資源文件為開機(jī)自啟動(dòng)的程序共用的Java類與資源文件,例如,開機(jī)自啟動(dòng)的程序中包括瀏覽器程序、輸入法程序等,則多個(gè)Java類與資源文件為啟動(dòng)瀏覽器程序、輸入法程序共用的Java類與資源文件,而且,該預(yù)加載文件所存儲(chǔ)的文件還可以因用戶的使用習(xí)慣的不同而不同。換言之,可以根據(jù)用戶的使用習(xí)慣,修改該預(yù)加載文件中的內(nèi)容。
[0025]父進(jìn)程從操作系統(tǒng)內(nèi)存中獲取共用程序文件列表后,對(duì)共用程序文件列表中的多個(gè)Java類與資源文件進(jìn)行加載,將已加載的Java類與資源文件存儲(chǔ)在自身的內(nèi)存中。
[0026]步驟120、當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)Java類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。
[0027]具體地,當(dāng)父進(jìn)程將已加載的Java類與資源文件存儲(chǔ)在自身的內(nèi)存后,父進(jìn)程自行通過操作系統(tǒng)的fork指令,調(diào)用已加載的多個(gè)Java類與資源文件,將已加載的Java類與資源文件的內(nèi)容植入創(chuàng)建的子進(jìn)程中,生成子進(jìn)程,該子進(jìn)程為和用戶在開機(jī)時(shí)自動(dòng)啟動(dòng)的程序有關(guān)的進(jìn)程,或啟動(dòng)操作系統(tǒng)所需的進(jìn)程,其中,Java類與資源文件中包含的內(nèi)容為二進(jìn)制代碼、程序等,父進(jìn)程在創(chuàng)建子進(jìn)程時(shí),調(diào)用已加載的多個(gè)Java類與資源文件的內(nèi)容,將Java類與資源文件中包含的內(nèi)容植入創(chuàng)建的子進(jìn)程中,進(jìn)而生成子進(jìn)程。
[0028]由于父進(jìn)程已經(jīng)在先加載的多個(gè)Java類與資源文件為開機(jī)自啟動(dòng)的程序共用的Java類與資源文件,因此,在生成的子進(jìn)程中,父進(jìn)程可不必重復(fù)加載多個(gè)Java類與資源文件,為操作系統(tǒng)的啟動(dòng)節(jié)約啟動(dòng)時(shí)間,提高操作系統(tǒng)的啟動(dòng)速度。
[0029]在一個(gè)例子中,父進(jìn)程利用fork指令,生成系統(tǒng)服務(wù)(System Server)進(jìn)程、發(fā)射(Launcher)進(jìn)程,則父進(jìn)程將已加載的文件內(nèi)容植入創(chuàng)建的系統(tǒng)服務(wù)進(jìn)程、發(fā)射進(jìn)程中,生成系統(tǒng)服務(wù)進(jìn)程、發(fā)射進(jìn)程。所述系統(tǒng)服務(wù)進(jìn)程、發(fā)射進(jìn)程為啟動(dòng)操作系統(tǒng)的必要進(jìn)程。
[0030]在另一個(gè)例子中,如果在共用程序文件列表中的預(yù)加載文件中包括啟動(dòng)瀏覽器的文件,則說明用戶開機(jī)自啟動(dòng)的程序中包括瀏覽器程序,父進(jìn)程加載和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,創(chuàng)建啟動(dòng)瀏覽器程序的子進(jìn)程,父進(jìn)程調(diào)用已加載的多個(gè)Java類與資源文件,將已加載的文件植入創(chuàng)建的瀏覽器程序的子進(jìn)程中,生成瀏覽器程序的子進(jìn)程。
[0031]上述步驟110與步驟120為順序執(zhí)行步驟,在步驟110與步驟120中描述的啟動(dòng)步驟為啟動(dòng)操作系統(tǒng)的順序步驟,即在用戶點(diǎn)擊啟動(dòng)按鈕,觸發(fā)啟動(dòng)操作系統(tǒng)內(nèi)核后,在操作系統(tǒng)內(nèi)核中已經(jīng)存在后續(xù)啟動(dòng)各配置項(xiàng)的時(shí)間順序,也就是說,在操作系統(tǒng)內(nèi)核啟動(dòng)后,系統(tǒng)內(nèi)核啟動(dòng)配置項(xiàng)和父進(jìn)程,當(dāng)父進(jìn)程啟動(dòng)完成后,父進(jìn)程獲取共用程序文件列表,并自行根據(jù)共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,父進(jìn)程加載完成后,開始創(chuàng)建子進(jìn)程,生成子進(jìn)程,以完成操作系統(tǒng)的啟動(dòng)。
[0032]因此,通過上述步驟110、120父進(jìn)程加載共用程序文件列表preload, boot中的內(nèi)容,將已加載的內(nèi)容存儲(chǔ)在自身的內(nèi)存中。在生成子進(jìn)程時(shí),則直接從自身的內(nèi)存中調(diào)用已加載的內(nèi)容,將已加載的內(nèi)容植入創(chuàng)建的子進(jìn)程中,生成子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。由于父進(jìn)程在先已經(jīng)加載了共用程序文件列表preload, boot中的內(nèi)容,在父進(jìn)程生成新進(jìn)程時(shí),可以不用重復(fù)加載多個(gè)Java類與資源文件,進(jìn)而降低系統(tǒng)的啟動(dòng)時(shí)間,提高系統(tǒng)的啟動(dòng)速度。
[0033]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的操作系統(tǒng)的啟動(dòng)方法,可以解決現(xiàn)有技術(shù)在操作系統(tǒng)啟動(dòng)的時(shí)候需要加載全部的preload列表從而導(dǎo)致操作系統(tǒng)的啟動(dòng)時(shí)間過長,操作系統(tǒng)的啟動(dòng)速度降低的問題。
[0034]上述實(shí)施例中操作系統(tǒng)可以采用如圖2所示的操作系統(tǒng)內(nèi)核加以實(shí)現(xiàn)。操作系統(tǒng)內(nèi)核包括進(jìn)程管理模塊、存儲(chǔ)管理模塊、文件管理模塊、網(wǎng)絡(luò)管理模塊及進(jìn)程間通信模塊。進(jìn)程管理模塊用于啟動(dòng)相關(guān)項(xiàng)及父進(jìn)程;存儲(chǔ)管理模塊用于多個(gè)進(jìn)程安全地共享操作系統(tǒng)內(nèi)存區(qū)域;文件管理模塊用于隱藏各種不同硬件的具體細(xì)節(jié),為所有設(shè)備提供統(tǒng)一的接口 ;網(wǎng)絡(luò)管理模塊提供對(duì)各種網(wǎng)絡(luò)標(biāo)準(zhǔn)協(xié)議的存取和各種網(wǎng)絡(luò)硬件的支持,進(jìn)程間通信模塊用于支持進(jìn)程間各種通信機(jī)制。
[0035]上述實(shí)施例簡要描述了操作系統(tǒng)啟動(dòng)的方法,下面的實(shí)施例結(jié)合圖2將給出操作系統(tǒng)啟動(dòng)的具體方法流程。
[0036]圖3為本發(fā)明實(shí)施例二提供的啟動(dòng)操作系統(tǒng)的方法具體流程圖。如圖3所示,本實(shí)施例包括以下步驟:
[0037]步驟301、啟動(dòng)操作系統(tǒng)內(nèi)核及父進(jìn)程;
[0038]具體地,用戶點(diǎn)擊終端設(shè)備的啟動(dòng)按鈕。終端設(shè)備為具有操作系統(tǒng)的終端設(shè)備,例如,臺(tái)式電腦、手機(jī)等。操作系統(tǒng)可以是安卓(Android)系統(tǒng)、Linux系統(tǒng)等。在本發(fā)明實(shí)施例中,以臺(tái)式電腦及其具有的安卓系統(tǒng)為例進(jìn)行說明。
[0039]在用戶點(diǎn)擊啟動(dòng)按鈕后,開始啟動(dòng)操作系統(tǒng)。首先,觸發(fā)啟動(dòng)操作系統(tǒng)內(nèi)核;操作系統(tǒng)內(nèi)核啟動(dòng)解析程序init.rc定義的啟動(dòng)配置項(xiàng),啟動(dòng)服務(wù)管理器(Service Manager),啟動(dòng)虛擬機(jī)Dalvik,啟動(dòng)操作系統(tǒng)進(jìn)程的父進(jìn)程Zygote,并注冊(cè)父進(jìn)程套接字,操作系統(tǒng)內(nèi)核為父進(jìn)程分配內(nèi)存。父進(jìn)程用于產(chǎn)生啟動(dòng)操作系統(tǒng)所需的子進(jìn)程。
[0040]步驟302、獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件。
[0041]具體地,操作系統(tǒng)內(nèi)核啟動(dòng)父進(jìn)程后,父進(jìn)程利用進(jìn)程間通信模塊與存儲(chǔ)管理模塊進(jìn)行通信,從系統(tǒng)內(nèi)存中獲取共用程序文件列表,在共用程序文件列表中存儲(chǔ)了多個(gè)預(yù)加載文件,預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件,在本發(fā)明實(shí)施例中以Java類與資源文件為例說明,所述多個(gè)Java類與資源文件為開機(jī)自啟動(dòng)的程序共用的Java類與資源文件,例如,開機(jī)自啟動(dòng)的程序中包括瀏覽器程序、輸入法程序等,則多個(gè)Java類與資源文件為啟動(dòng)瀏覽器程序、輸入法程序共用的Java類與資源文件,而且,該預(yù)加載文件所存儲(chǔ)的文件還可以因用戶的使用習(xí)慣的不同而不同。換言之,可以根據(jù)用戶的使用習(xí)慣,修改該預(yù)加載文件中的內(nèi)容。
[0042]父進(jìn)程獲取共用程序文件列表后,對(duì)共用程序文件列表中預(yù)加載文件進(jìn)行加載,將已加載的Java類與資源文件存儲(chǔ)在操作系統(tǒng)為父進(jìn)程分配的內(nèi)存空間中。
[0043]步驟303、當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。
[0044]具體地,當(dāng)父進(jìn)程加載和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成,并將已加載的Java類與資源文件存儲(chǔ)在自身的內(nèi)存后,父進(jìn)程自行通過操作系統(tǒng)的fork指令,調(diào)用已加載的多個(gè)Java類與資源文件,將已加載的Java類與資源文件的內(nèi)容植入創(chuàng)建的子進(jìn)程中,生成子進(jìn)程,該子進(jìn)程為和用戶在開機(jī)時(shí)自動(dòng)啟動(dòng)的程序有關(guān)的進(jìn)程,或啟動(dòng)操作系統(tǒng)所需的進(jìn)程,其中,Java類與資源文件中包含的內(nèi)容為二進(jìn)制代碼、程序等,父進(jìn)程在創(chuàng)建子進(jìn)程時(shí),調(diào)用已加載的多個(gè)Java類與資源文件的內(nèi)容,將Java類與資源文件中包含的內(nèi)容植入創(chuàng)建的子進(jìn)程中,進(jìn)而生成子進(jìn)程。
[0045]由于父進(jìn)程已經(jīng)在先加載的多個(gè)Java類與資源文件為開機(jī)自啟動(dòng)的程序共用的Java類與資源文件,因此,在生成的子進(jìn)程中,父進(jìn)程可不必重復(fù)加載多個(gè)Java類與資源文件,為操作系統(tǒng)的啟動(dòng)節(jié)約啟動(dòng)時(shí)間,提高操作系統(tǒng)的啟動(dòng)速度。
[0046]在一個(gè)例子中,父進(jìn)程利用fork指令,生成系統(tǒng)服務(wù)(System Server)進(jìn)程、發(fā)射(Launcher)進(jìn)程,則父進(jìn)程將已加載的文件植入創(chuàng)建的系統(tǒng)服務(wù)進(jìn)程、發(fā)射進(jìn)程中,生成系統(tǒng)服務(wù)進(jìn)程、發(fā)射進(jìn)程,所述系統(tǒng)服務(wù)進(jìn)程、發(fā)射進(jìn)程為啟動(dòng)操作系統(tǒng)的必要進(jìn)程。
[0047]在另一個(gè)例子中,如果在共用程序文件列表中的預(yù)加載文件中包括啟動(dòng)瀏覽器的文件,則說明用戶開機(jī)自啟動(dòng)的程序中包括瀏覽器程序,父進(jìn)程加載和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,創(chuàng)建啟動(dòng)瀏覽器程序的子進(jìn)程,父進(jìn)程調(diào)用已加載的多個(gè)Java類與資源文件,將已加載的文件植入創(chuàng)建的瀏覽器程序的子進(jìn)程中,生成瀏覽器程序的子進(jìn)程。
[0048]父進(jìn)程在生成系統(tǒng)服務(wù)進(jìn)程及發(fā)射進(jìn)程后,由系統(tǒng)服務(wù)進(jìn)程啟動(dòng)操作系統(tǒng),系統(tǒng)服務(wù)進(jìn)程啟動(dòng)操作系統(tǒng)后,向發(fā)射進(jìn)程發(fā)送系統(tǒng)準(zhǔn)備信息,發(fā)射進(jìn)程根據(jù)系統(tǒng)準(zhǔn)備信息啟動(dòng)桌面程序,將桌面程序展示給用戶。當(dāng)用戶可以看到桌面程序時(shí),則操作系統(tǒng)已經(jīng)基本啟動(dòng)完成。
[0049]父進(jìn)程在生成系統(tǒng)服務(wù)進(jìn)程及發(fā)射進(jìn)程后,還注冊(cè)套接字監(jiān)聽器,注冊(cè)套接字監(jiān)聽器用于后續(xù)與發(fā)射進(jìn)程的通信。
[0050]步驟304、啟動(dòng)掃描進(jìn)程,對(duì)磁盤中存儲(chǔ)的用戶應(yīng)用程序列表進(jìn)行掃描,獲得用戶常用的應(yīng)用程序列表。
[0051]具體地,當(dāng)發(fā)射進(jìn)程在啟動(dòng)桌面程序完成后,進(jìn)程管理模塊中的通知模塊向父進(jìn)程發(fā)送套接字的通知信息,在通知信息中攜帶操作系統(tǒng)啟動(dòng)完成信息、告知父進(jìn)程啟動(dòng)掃描進(jìn)程的信息和告知父進(jìn)程加載用戶常用的應(yīng)用程序;
[0052]在步驟303中已說明,父進(jìn)程已經(jīng)注冊(cè)套接字監(jiān)聽器,套接字監(jiān)聽器接收發(fā)射進(jìn)程發(fā)送的通知信息,并且解析通知信息攜帶的信息。然后,父進(jìn)程通過進(jìn)程管理模塊中的啟動(dòng)模塊啟動(dòng)掃描進(jìn)程,并利用進(jìn)程間通信模塊與存儲(chǔ)管理模塊進(jìn)行通信,從磁盤中多個(gè)獲取用戶應(yīng)用程序列表applist。該掃描進(jìn)程對(duì)磁盤中存儲(chǔ)的多個(gè)用戶應(yīng)用程序列表進(jìn)行掃描,掃描用戶常用的應(yīng)用程序的Java類名與資源文件。
[0053]在一個(gè)例子中,掃描進(jìn)程對(duì)K個(gè)用戶應(yīng)用程序列表進(jìn)行掃描,獲取每個(gè)列表中用戶使用的應(yīng)用程序名稱。當(dāng)用戶使用的應(yīng)用程序名稱在K個(gè)用戶應(yīng)用程序列表中重復(fù)出現(xiàn)J(J > 1,J e Z)次時(shí),則確認(rèn)該應(yīng)用程序名稱為用戶常用的應(yīng)用程序。
[0054]在用戶常用的應(yīng)用程序中,可能存在多個(gè)應(yīng)用程序具有相同的Java類與資源文件。因此,篩除具有相同Java類與資源文件的應(yīng)用程序,將篩除后的用戶常用的應(yīng)用程序的Java類與資源文件存儲(chǔ)在用戶常用的應(yīng)用程序列表preload, user中,用戶常用的應(yīng)用程序列表存儲(chǔ)在存儲(chǔ)管理模塊。
[0055]步驟305、對(duì)所述用戶常用的應(yīng)用程序列表中存儲(chǔ)的與用戶常用的應(yīng)用程序有關(guān)的類與資源文件進(jìn)行加載,以便在所述用戶需要運(yùn)行該應(yīng)用程序時(shí),調(diào)用已加載的所述應(yīng)用程序。
[0056]具體地,父進(jìn)程利用進(jìn)程間通信模塊與存儲(chǔ)管理模塊進(jìn)行通信,從系統(tǒng)內(nèi)存中獲取用戶常用的應(yīng)用程序列表。
[0057]在獲取到用戶常用的應(yīng)用程序列表后,對(duì)用戶常用的應(yīng)用程序列表中存儲(chǔ)的應(yīng)用程序的Java類與資源文件進(jìn)行加載,將已加載的應(yīng)用程序的Java類與資源文件存儲(chǔ)在自身的內(nèi)存中。從而,在用戶需要該應(yīng)用程序時(shí),父進(jìn)程可以直接調(diào)用已加載的應(yīng)用程序,使得應(yīng)用程序的運(yùn)行速度縮短,提高系統(tǒng)的運(yùn)行速度。
[0058]需要說明的是,步驟304和步驟305為可選步驟,當(dāng)操作系統(tǒng)啟動(dòng)完成后,用戶沒有后續(xù)操作,則執(zhí)行步驟304和步驟305,當(dāng)操作系統(tǒng)啟動(dòng)完成后,用戶開始后續(xù)操作,則可不執(zhí)行步驟304和步驟305。
[0059]因此,通過上述步驟,父進(jìn)程加載共用程序文件列表preload, boot中的內(nèi)容,將已加載的內(nèi)容存儲(chǔ)在自身的內(nèi)存中。在生成子進(jìn)程時(shí),則直接從自身的內(nèi)存中調(diào)用已加載的內(nèi)容,將已加載的內(nèi)容植入創(chuàng)建的子進(jìn)程中,生成子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。由于父進(jìn)程在先已經(jīng)加載了共用程序文件列表中的內(nèi)容,在父進(jìn)程生成子進(jìn)程時(shí),可以不用重復(fù)加載多個(gè)Java類與資源文件,當(dāng)操作系統(tǒng)啟動(dòng)完成后,根據(jù)用戶使用習(xí)慣的改變,隨時(shí)記錄用戶常用的應(yīng)用進(jìn)程名稱,加載該用戶常用的應(yīng)用進(jìn)程,可以解決現(xiàn)有技術(shù)在操作系統(tǒng)啟動(dòng)的時(shí)候需要加載全部的Pre1ad列表而不得不延長操作系統(tǒng)的啟動(dòng)時(shí)間的問題;還可以解決當(dāng)用戶的使用習(xí)慣發(fā)生改變時(shí),父進(jìn)程生成進(jìn)程的啟動(dòng)效率低的問題。
[0060]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的操作系統(tǒng)的啟動(dòng)方法,可以解決現(xiàn)有技術(shù)在操作系統(tǒng)啟動(dòng)的時(shí)候需要加載全部的preload列表從而導(dǎo)致操作系統(tǒng)的啟動(dòng)時(shí)間過長,操作系統(tǒng)的啟動(dòng)速度降低的問題;還可以解決當(dāng)用戶的使用習(xí)慣發(fā)生改變時(shí),父進(jìn)程生成進(jìn)程的啟動(dòng)效率低的問題。
[0061]在上述實(shí)施例二中,父進(jìn)程利用進(jìn)程間通信模塊與存儲(chǔ)管理模塊進(jìn)行通信,從系統(tǒng)內(nèi)存中獲取共用程序文件列表preload, boot。下面實(shí)施例三和圖4為例說明生成共用程序文件列表的具體過程。本實(shí)施例包括以下步驟:
[0062]步驟401、在第一時(shí)間閾值內(nèi),獲取超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值,并將所述超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的類與資源文件列表中。
[0063]具體地,在進(jìn)程管理模塊中包括加載Java類與資源文件模塊,且在加載Java類與資源文件模塊中可以包括輸出模塊。在操作系統(tǒng)啟動(dòng)的過程中,在第一時(shí)間閾值M內(nèi),輸出模塊獲取超過加載耗時(shí)閾值P的多個(gè)Java類與資源文件的加載耗時(shí)值,將任一 Java類與資源文件的加載耗時(shí)值與第二時(shí)間閾值P進(jìn)行比較,獲取超過第二時(shí)間閾值P的任一 Java類與資源文件的加載耗時(shí)值,并將超過第二時(shí)間閾值P的任一 Java類與資源文件的加載耗時(shí)值存儲(chǔ)在操作系統(tǒng)內(nèi)存的類與資源文件列表1adlist中,所述類與資源文件列表存儲(chǔ)在存儲(chǔ)管理模塊中,如表I所示:
[0064]表I類與資源文件列表
[0065]
【權(quán)利要求】
1.一種啟動(dòng)操作系統(tǒng)的方法,其特征在于,所述方法包括: 獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件; 當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。
2.根據(jù)權(quán)利要求1所述的啟動(dòng)操作系統(tǒng)的方法,其特征在于,所述獲取共用程序文件列表具體包括: 在第一時(shí)間閾值內(nèi),獲取超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值,并將所述超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的類與資源文件列表中; 對(duì)所述超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值進(jìn)行排序,獲取加載耗時(shí)排序表; 累加所述加載耗時(shí)排序表中多個(gè)類與資源文件的加載耗時(shí)值,以使累加值不超過且接近第三時(shí)間閾值; 將所述累加值不超過且接近第三時(shí)間閾值的所述多個(gè)類與資源文件存儲(chǔ)到所述操作系統(tǒng)內(nèi)存的共用程序文件列表; 獲取所述共用程序文件列表。
3.根據(jù)權(quán)利要求1所述的啟動(dòng)操作系統(tǒng)的方法,其特征在于,所述以完成所述操作系統(tǒng)的啟動(dòng)之后還包括: 啟動(dòng)掃描進(jìn)程,對(duì)磁盤中存儲(chǔ)的用戶應(yīng)用程序列表進(jìn)行掃描,獲得用戶常用的應(yīng)用程序列表; 對(duì)所述用戶常用的應(yīng)用程序列表中存儲(chǔ)的與用戶常用的應(yīng)用程序有關(guān)的類與資源文件進(jìn)行加載,以便在所述用戶需要運(yùn)行該應(yīng)用程序時(shí),調(diào)用已加載的所述應(yīng)用程序。
4.根據(jù)權(quán)利要求3所述的啟動(dòng)操作系統(tǒng)的方法,其特征在于,所述啟動(dòng)掃描進(jìn)程之前還包括: 在所述操作系統(tǒng)啟動(dòng)完成且超過所述第一時(shí)間閾值時(shí),記錄用戶使用的應(yīng)用程序,將所述用戶使用的應(yīng)用程序的名稱存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的用戶應(yīng)用程序列表中; 當(dāng)所述用戶應(yīng)用程序列表內(nèi)容變化時(shí),將變化的所述用戶應(yīng)用程序列表從所述操作系統(tǒng)內(nèi)存轉(zhuǎn)存至磁盤,在所述磁盤中,存儲(chǔ)了多個(gè)所述用戶應(yīng)用程序列表。
5.根據(jù)權(quán)利要求3所述的啟動(dòng)操作系統(tǒng)的方法,其特征在于,所述對(duì)磁盤中存儲(chǔ)的用戶應(yīng)用程序列表進(jìn)行掃描,獲得用戶常用的應(yīng)用程序列表,具體包括: 當(dāng)某個(gè)所述應(yīng)用程序的名稱在K個(gè)用戶應(yīng)用程序列表中出現(xiàn)了不小于J次,則確認(rèn)所述應(yīng)用程序是用戶常用的應(yīng)用程序; 其中,所述K > l,Ke Z,所述J> I, J e Z ; 篩除具有相同類與資源文件的所述用戶常用的應(yīng)用程序; 將篩除后的所述用戶常用的應(yīng)用程序的類與資源文件存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的用戶常用的應(yīng)用程序列表;獲取存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的用戶常用的應(yīng)用程序列表。
6.一種啟動(dòng)操作系統(tǒng)的裝置,其特征在于,所述裝置包括: 獲取模塊,用于獲取共用程序文件列表,并根據(jù)該共用程序文件列表加載所述共用程序文件列表對(duì)應(yīng)的預(yù)加載文件,所述預(yù)加載文件包括和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件; 第一執(zhí)行模塊,用于當(dāng)所述和用戶在開機(jī)時(shí)自啟動(dòng)的程序有關(guān)的多個(gè)類與資源文件加載完成后,利用父進(jìn)程創(chuàng)建子進(jìn)程,將已加載的文件植入所述父進(jìn)程創(chuàng)建的子進(jìn)程中,生成所述子進(jìn)程,以完成所述操作系統(tǒng)的啟動(dòng)。
7.根據(jù)權(quán)利要求6所述的啟動(dòng)操作系統(tǒng)的裝置,其特征在于,所述獲取模塊具體用于: 在第一時(shí)間閾值內(nèi),獲取超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值,并將所述超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的類與資源文件列表中; 對(duì)所述超過第二時(shí)間閾值的類與資源文件的加載耗時(shí)值進(jìn)行排序,獲取加載耗時(shí)排序表; 累加所述加載耗時(shí)排序表中多個(gè)類與資源文件的加載耗時(shí)值,以使累加值不超過且接近第三時(shí)間閾值; 將所述累加值不超過且接近第三時(shí)間閾值的所述多個(gè)類與資源文件存儲(chǔ)到所述操作系統(tǒng)內(nèi)存的共用程序文件列表; 獲取所述共用程 序文件列表。
8.根據(jù)權(quán)利要求6所述的啟動(dòng)操作系統(tǒng)的裝置,其特征在于,所述裝置還包括: 啟動(dòng)模塊,用于啟動(dòng)掃描進(jìn)程,對(duì)磁盤中存儲(chǔ)的用戶應(yīng)用程序列表進(jìn)行掃描,獲得用戶常用的應(yīng)用程序列表; 第二執(zhí)行模塊,用于對(duì)所述用戶常用的應(yīng)用程序列表中存儲(chǔ)的與用戶常用的應(yīng)用程序有關(guān)的類與資源文件進(jìn)行加載,以便在所述用戶需要運(yùn)行該應(yīng)用程序時(shí),調(diào)用已加載的所述應(yīng)用程序。
9.根據(jù)權(quán)利要求8所述的啟動(dòng)操作系統(tǒng)的裝置,其特征在于,所述裝置還包括: 記錄模塊,用于在所述操作系統(tǒng)啟動(dòng)完成且超過所述第一時(shí)間閾值時(shí),記錄用戶使用的應(yīng)用程序,將所述用戶使用的應(yīng)用程序的名稱存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的用戶應(yīng)用程序列表中; 轉(zhuǎn)存模塊,用于當(dāng)所述用戶應(yīng)用程序列表內(nèi)容變化時(shí),將變化的所述用戶應(yīng)用程序列表從所述操作系統(tǒng)內(nèi)存轉(zhuǎn)存至磁盤,在所述磁盤中,存儲(chǔ)了多個(gè)所述用戶應(yīng)用程序列表。
10.根據(jù)權(quán)利要求8所述的啟動(dòng)操作系統(tǒng)的裝置,其特征在于,所述啟動(dòng)模塊具體用于: 當(dāng)某個(gè)所述應(yīng)用程序的名稱在K個(gè)用戶應(yīng)用程序列表中出現(xiàn)了不小于J次,則確認(rèn)所述應(yīng)用程序是用戶常用的應(yīng)用程序; 其中,所述K > l,Ke Z,所述J> I, J e Z ; 篩除具有相同類與資源文件的所述用戶常用的應(yīng)用程序; 將篩除后的所述用戶常用的應(yīng)用程序的類與資源文件存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的用戶常用的應(yīng)用程序列表;獲取存儲(chǔ)在所述操作系統(tǒng)內(nèi)存的用 戶常用的應(yīng)用程序列表。
【文檔編號(hào)】G06F9/445GK103631612SQ201210302657
【公開日】2014年3月12日 申請(qǐng)日期:2012年8月23日 優(yōu)先權(quán)日:2012年8月23日
【發(fā)明者】丁尋 申請(qǐng)人:騰訊科技(深圳)有限公司