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

一種多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法

文檔序號:10724664閱讀:273來源:國知局
一種多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法
【專利摘要】本發(fā)明基于Linux內(nèi)核容器技術(shù)和顯示設(shè)備復(fù)用技術(shù),具體涉及一種系統(tǒng)級容器技術(shù)的多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法。本發(fā)明在Linux內(nèi)核中自動創(chuàng)建容器,啟動容器中的系統(tǒng),確保每個容器獨(dú)立運(yùn)行一個Android系統(tǒng)。實(shí)現(xiàn)容器管理主進(jìn)程和容器管理從進(jìn)程的通信,在此基礎(chǔ)上,實(shí)現(xiàn)容器管理主進(jìn)程向容器管理從進(jìn)程發(fā)送創(chuàng)建和啟動消息,容器管理從進(jìn)程接收并處理消息來完成的。本發(fā)明提供的多Android系統(tǒng)的創(chuàng)建及其啟動方法,實(shí)現(xiàn)了自行地在Linux內(nèi)核中創(chuàng)建,和啟動容器;再次啟動設(shè)備,容器管理模塊根據(jù)系統(tǒng)中所創(chuàng)建的容器,啟動容器。
【專利說明】
一種多And ro i d系統(tǒng)的容器自動創(chuàng)建及其啟動方法
技術(shù)領(lǐng)域
[0001]本發(fā)明基于Linux內(nèi)核容器技術(shù)和顯示設(shè)備復(fù)用技術(shù),具體涉及一種系統(tǒng)級容器技術(shù)的多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法?!颈尘凹夹g(shù)】
[0002]目前,攜帶自己的設(shè)備辦公BY0D(Bring Your Own Device)已成為潮流,但存在的最大問題是安全問題。于是,為了滿足用戶的需求,實(shí)現(xiàn)多個OS(OperatingSystem)同時運(yùn)行在一個設(shè)備中成為熱點(diǎn)研究。
[0003]虛擬化技術(shù)旨在一個單一的設(shè)備上同時運(yùn)行兩個或多個0S系統(tǒng),從而解決BY0D帶來的安全問題。虛擬化技術(shù)分為傳統(tǒng)的虛擬化技術(shù)和容器技術(shù),由于傳統(tǒng)的虛擬化技術(shù)都基于虛擬化硬件仿真機(jī)制,對系統(tǒng)要求很高。
[0004]容器是一種輕量級的虛擬化技術(shù),Linux容器在v2.6.29版本之后就加入到了內(nèi)核之中。它可以提供資源的隔離,分為應(yīng)用級和系統(tǒng)級安全容器。應(yīng)用級的容器技術(shù)在容器與容器之間提供了共享機(jī)制,容器并沒有完全隔離,依然存在著很大的安全隱患。相比應(yīng)用級容器技術(shù),系統(tǒng)級容器技術(shù)更加安全,它基于Linux內(nèi)核的Cgroup和Namespace機(jī)制實(shí)現(xiàn)容器技術(shù),使多個Android系統(tǒng)可以同時在相同的Linux內(nèi)核之上隔離運(yùn)行,以此提高系統(tǒng)安全性,并滿足多樣化的需求。但是,需要建立一套機(jī)制對這些容器進(jìn)行自動的創(chuàng)建、啟動和管理,才能夠?yàn)槎郃ndroid的運(yùn)行提供支持。
【發(fā)明內(nèi)容】

[0005]針對上述存在問題或不足,本發(fā)明提供了一種多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法。其基于Linux內(nèi)核容器技術(shù)和顯示設(shè)備復(fù)用技術(shù)實(shí)現(xiàn)多Android系統(tǒng)的管理。
[0006]本發(fā)明主要包括容器的創(chuàng)建和啟動,其過程如下:
[0007]步驟1、啟動Android設(shè)備,待Linux內(nèi)核啟動完成后;init進(jìn)程運(yùn)行,解析腳本文件啟動系統(tǒng)進(jìn)程,容器管理主進(jìn)程和容器管理從進(jìn)程此時啟動,統(tǒng)稱為容器管理模塊,為后續(xù)系統(tǒng)啟動作好準(zhǔn)備;啟動系統(tǒng)進(jìn)程時主進(jìn)程阻塞等待從進(jìn)程準(zhǔn)備就緒,當(dāng)從進(jìn)程完成初始化后喚醒主進(jìn)程;
[0008]步驟2、主進(jìn)程喚醒后讀取容器系統(tǒng)配置文件,根據(jù)配置文件判斷容器是否存在, 如果容器不存在,則主進(jìn)程向從進(jìn)程發(fā)送容器創(chuàng)建消息,從進(jìn)程在Linux內(nèi)核中創(chuàng)建容器;
[0009]否則主進(jìn)程向從進(jìn)程發(fā)送容器啟動消息,從進(jìn)程根據(jù)發(fā)送過來的消息更新配置文件;然后準(zhǔn)備init進(jìn)程運(yùn)行環(huán)境并創(chuàng)建容器init進(jìn)程,再結(jié)合Linux內(nèi)核資源隔離機(jī)制和空間命名機(jī)制將init進(jìn)程移入命名空間中運(yùn)行,init進(jìn)程解析啟動腳本,逐步完成容器啟動;
[0010]步驟3:待步驟2完成后,根據(jù)配置文件信息啟動一個容器在前臺,其余容器運(yùn)行在后臺;
[0011]前臺容器獲取顯示設(shè)備,初始化系統(tǒng)桌面;后臺容器獲取虛擬的顯示設(shè)備,完成后臺容器啟動;至此,多個容器創(chuàng)建并啟動完成,處于前臺的Android系統(tǒng)進(jìn)入運(yùn)行狀態(tài)。
[0012]所述步驟2中配置文件為容器啟動參數(shù),由主進(jìn)程將啟動信息包裝到命令中發(fā)送給從進(jìn)程,再由從進(jìn)程寫入到文件中來完成。
[0013]本發(fā)明在Linux內(nèi)核中自動創(chuàng)建容器,啟動容器中的系統(tǒng),確保每個容器獨(dú)立運(yùn)行一個Android系統(tǒng)。每個容器獨(dú)立運(yùn)行一個Android系統(tǒng)。在設(shè)備首次啟動時,容器管理模塊創(chuàng)建并啟動多個容器中的系統(tǒng);待關(guān)機(jī)后再次啟動設(shè)備時,容器管理模塊根據(jù)系統(tǒng)中所創(chuàng)建的容器,啟動容器中的系統(tǒng)。[〇〇14]通過容器管理模塊的容器管理主進(jìn)程aut〇Start_pr〇檢測容器是否存在,若不存在向容器管理從進(jìn)程container_pro發(fā)送創(chuàng)建消息,從進(jìn)程執(zhí)行容器創(chuàng)建;否則,向其發(fā)送容器啟動消息,執(zhí)行容器啟動。[〇〇15] 具體是在容器管理主進(jìn)程和容器管理從進(jìn)程通信的基礎(chǔ)上,通過容器管理主進(jìn)程向容器管理從進(jìn)程發(fā)送創(chuàng)建和啟動消息,容器管理從進(jìn)程接收并處理消息來完成的。[0〇16]綜上所述,本發(fā)明提供的多Android系統(tǒng)的創(chuàng)建及其啟動方法,自行地在Linux內(nèi)核中創(chuàng)建,和啟動容器;再次啟動設(shè)備,容器管理模塊根據(jù)系統(tǒng)中所創(chuàng)建的容器,啟動容器。【附圖說明】[〇〇17]圖1為本發(fā)明提供的多Android系統(tǒng)容器管理模塊交互圖;[〇〇18]圖2為本發(fā)明提供的多Android系統(tǒng)啟動詳細(xì)流程圖;[〇〇19]圖3為本發(fā)明提供的多Android系統(tǒng)前后臺啟動判斷流程圖?!揪唧w實(shí)施方式】
[0020]下面結(jié)合附圖和具體的實(shí)施例對本發(fā)明做進(jìn)一步的說明。
[0021]本發(fā)明基于Linux內(nèi)核容器技術(shù)和顯示設(shè)備復(fù)用技術(shù),實(shí)現(xiàn)多Android系統(tǒng)的創(chuàng)建,和啟動。容器的創(chuàng)建和啟動由容器管理模塊完成,容器管理主進(jìn)程和容器管理從進(jìn)程。 容器管理主進(jìn)程向容器管理從進(jìn)程發(fā)送消息,從進(jìn)程根據(jù)接收的消息,完成創(chuàng)建和啟動過程。具體包括如下步驟:[〇〇22]步驟1、啟動容器管理模塊,如圖1所示。用進(jìn)程間通信機(jī)制控制主、從進(jìn)程之間通信。當(dāng)主進(jìn)程完成初始化后,主動地阻塞其,等待從進(jìn)程喚醒;在從進(jìn)程初始化后,向主進(jìn)程發(fā)送消息,喚醒主進(jìn)程。[〇〇23]步驟1-1、啟動Android設(shè)備,進(jìn)入引導(dǎo)程序,由引導(dǎo)程序裝載Linux內(nèi)核,內(nèi)核啟動完成后,根命名空間的init進(jìn)程開始解析init.rc和其他啟動腳本,啟動系統(tǒng)服務(wù)進(jìn)程; [0〇24] 步驟1-2、修改init.rc啟動腳本,使得主進(jìn)程autostart_pro以守護(hù)進(jìn)程的形式運(yùn)行在根命名空間;[0〇25] 步驟1-3、再次修改init.rc啟動腳本,使得從進(jìn)程container_pro以守護(hù)進(jìn)程的形式運(yùn)行在根命名空間;
[0026] 步驟1-4、當(dāng)從進(jìn)程初始化完成之后,向主進(jìn)程發(fā)送消息,表示準(zhǔn)備就緒,喚醒主進(jìn)程。[〇〇27] 步驟2、創(chuàng)建及啟動容器,如圖2所示。
[0028]步驟2-1、主進(jìn)程喚醒后讀取容器系統(tǒng)配置文件,根據(jù)配置文件判斷容器是否存在,并向從進(jìn)程發(fā)送創(chuàng)建或啟動消息;
[0029]若不存在,表明容器并未創(chuàng)建,主進(jìn)程將創(chuàng)建消息中發(fā)送給從進(jìn)程,從進(jìn)程接受消息并解其,得到創(chuàng)建容器消息實(shí)體,進(jìn)行創(chuàng)建容器:
[0030]a調(diào)用系統(tǒng)函數(shù)創(chuàng)建容器根目錄;
[0031]b創(chuàng)建容器所必須的配置文件,并初始化配置文件;
[0032]否則,主進(jìn)程將包裝的啟動消息發(fā)送給從進(jìn)程,從進(jìn)程解包發(fā)送過來的消息,得到啟動容器消息實(shí)體,開始啟動容器;
[0033]步驟2-2、解析啟動消息,設(shè)置容器的內(nèi)核資源隔離參數(shù),更新配置文件,確保每個容器在完全獨(dú)立的平臺上執(zhí)行;倉ll建newcgroup,在所創(chuàng)建的newcgroup中初始化容器:
[0034]a.設(shè)置容器的內(nèi)核資源隔離參數(shù),更新配置文件;[〇〇35] b為容器掛載文件系統(tǒng),首先在容器根目錄下掛載tmpfs用于容器的運(yùn)行;然后對 data目錄進(jìn)行綁定映射;接著映射疊加system目錄,最后為容器掛載sd卡;
[0036]c將由內(nèi)核生成的/root和/sbin目錄從根域中拷貝到容器中;
[0037]d將配置文件讀取到內(nèi)存中,根據(jù)配置文件開啟資源隔離機(jī)制,設(shè)置父子進(jìn)程隔離屬性;[〇〇38] e將容器啟動腳本拷貝到容器中;
[0039]f?創(chuàng)建容器子進(jìn)程,容器子進(jìn)程進(jìn)一步設(shè)置容器init進(jìn)程環(huán)境,改變?nèi)萜鞲夸浐凸ぷ髀窂剑瑢nit進(jìn)程實(shí)體加載到子進(jìn)程中,運(yùn)行init進(jìn)程;
[0040]g創(chuàng)建newcgroup,將init進(jìn)程移入其中,進(jìn)一步設(shè)置init進(jìn)程執(zhí)行環(huán)境,使作為容器的首進(jìn)程執(zhí)行,保證容器所有進(jìn)程都完全在所屬的newcgroup中運(yùn)行。[〇〇41]通過步驟2-2d開啟的內(nèi)核資源隔離機(jī)制實(shí)現(xiàn)了步驟2-2g的技術(shù)效果;[〇〇42]通過步驟2_2e實(shí)現(xiàn)了容器在啟動過程中根據(jù)定制的啟動腳本啟動系統(tǒng)服務(wù);
[0043]步驟3:根據(jù)配置文件判斷所要啟動的容器處于前臺還是后臺,如圖3所示;
[0044]若為前臺容器,則進(jìn)入:將所創(chuàng)建容器子進(jìn)程進(jìn)程號寫入表示設(shè)備命名空間的文件中,觸發(fā)容器獲取顯存設(shè)備;開始執(zhí)行容器內(nèi)init進(jìn)程,init進(jìn)程解析步驟2中的啟動腳本,啟動系統(tǒng)服務(wù)進(jìn)程以及zygote進(jìn)程,zygote進(jìn)程啟動Android Frame work層 systemserver系統(tǒng)服務(wù)進(jìn)程,再由systemserver系統(tǒng)服務(wù)進(jìn)程啟動各個Android服務(wù),最后獲取顯示設(shè)備,啟動桌面;Launcher完成后通知從進(jìn)程,表明前臺容器啟動完成;
[0045]否則:執(zhí)行容器內(nèi)init進(jìn)程,init進(jìn)程解析啟動腳本,啟動系統(tǒng)服務(wù)進(jìn)程以及 zygote進(jìn)程,zygote進(jìn)程啟動AndroidFramework層systemserver系統(tǒng)服務(wù)進(jìn)程,再由 systemserver系統(tǒng)服務(wù)進(jìn)程啟動各個Android服務(wù),最后獲取虛擬的顯示設(shè)備,完成后臺容器啟動。
[0046]至此,多容器啟動完成。[0〇47] 綜上所述,本發(fā)明提出了一種基于Linux內(nèi)核容器技術(shù)和framebuffer設(shè)備復(fù)用技術(shù)的多Android系統(tǒng)之間的創(chuàng)建,啟動方法。通過此方法,在手機(jī)首次啟動時,容器管理模塊創(chuàng)建并啟動多個容器中的系統(tǒng);待關(guān)機(jī)后再次啟動手機(jī),容器管理模塊根據(jù)系統(tǒng)中所創(chuàng)建的容器,啟動容器中的系統(tǒng)。
【主權(quán)項(xiàng)】
1.一種多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法,其過程如下:步驟1、啟動Android設(shè)備,待Linux內(nèi)核啟動完成后;init進(jìn)程運(yùn)行,解析腳本文件啟動 系統(tǒng)進(jìn)程,容器管理主進(jìn)程和容器管理從進(jìn)程此時啟動,統(tǒng)稱為容器管理模塊,為后續(xù)系統(tǒng) 啟動作好準(zhǔn)備;啟動系統(tǒng)進(jìn)程時主進(jìn)程阻塞等待從進(jìn)程準(zhǔn)備就緒,當(dāng)從進(jìn)程完成初始化后 喚醒主進(jìn)程;步驟2、主進(jìn)程喚醒后讀取容器系統(tǒng)配置文件,根據(jù)配置文件判斷容器是否存在,如果 容器不存在,則主進(jìn)程向從進(jìn)程發(fā)送容器創(chuàng)建消息,從進(jìn)程在Linux內(nèi)核中創(chuàng)建容器;否則主進(jìn)程向從進(jìn)程發(fā)送容器啟動消息,從進(jìn)程根據(jù)發(fā)送過來的消息更新配置文件; 然后準(zhǔn)備init進(jìn)程運(yùn)行環(huán)境并創(chuàng)建容器init進(jìn)程,再結(jié)合Linux內(nèi)核資源隔離機(jī)制和空間 命名機(jī)制將init進(jìn)程移入命名空間中運(yùn)行,init進(jìn)程解析啟動腳本,逐步完成容器啟動; 步驟3:待步驟2完成后,根據(jù)配置文件信息啟動一個容器在前臺,其余容器運(yùn)行在后 臺;前臺容器獲取顯示設(shè)備,初始化系統(tǒng)桌面;后臺容器獲取虛擬的顯示設(shè)備,完成后臺容 器啟動;至此,多個容器創(chuàng)建并啟動完成,處于前臺的Android系統(tǒng)進(jìn)入運(yùn)行狀態(tài)。2.如權(quán)利要求1所述多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法,所述步驟1具體如 下:步驟1-1、啟動Android設(shè)備,進(jìn)入引導(dǎo)程序,由引導(dǎo)程序裝載Linux內(nèi)核,內(nèi)核啟動完成 后,根命名空間的init進(jìn)程開始解析init.rc和其他啟動腳本,啟動系統(tǒng)服務(wù)進(jìn)程;步驟1-2、修改init.rc啟動腳本,使得主進(jìn)程autostart_pro以守護(hù)進(jìn)程的形式運(yùn)行在 根命名空間;步驟1-3、再次修改init.rc啟動腳本,使得從進(jìn)程container_pro以守護(hù)進(jìn)程的形式運(yùn) 行在根命名空間;步驟1-4、當(dāng)從進(jìn)程初始化完成之后,向主進(jìn)程發(fā)送消息,表示準(zhǔn)備就緒,喚醒主進(jìn)程。3.如權(quán)利要求1所述多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法,所述步驟2具體如 下:步驟2-1、主進(jìn)程喚醒后讀取容器系統(tǒng)配置文件,根據(jù)配置文件判斷容器是否存在,并 向從進(jìn)程發(fā)送創(chuàng)建或啟動消息;若不存在,表明容器并未創(chuàng)建,主進(jìn)程將創(chuàng)建消息中發(fā)送給從進(jìn)程,從進(jìn)程接受消息并 解其,得到創(chuàng)建容器消息實(shí)體,進(jìn)行創(chuàng)建容器: a調(diào)用系統(tǒng)函數(shù)創(chuàng)建容器根目錄; b創(chuàng)建容器所必須的配置文件,并初始化配置文件;否則,主進(jìn)程將包裝的啟動消息發(fā)送給從進(jìn)程,從進(jìn)程解包發(fā)送過來的消息,得到啟動 容器消息實(shí)體,開始啟動容器;步驟2-2、解析啟動消息,設(shè)置容器的內(nèi)核資源隔離參數(shù),更新配置文件,確保每個容器 在完全獨(dú)立的平臺上執(zhí)行;倉ll建newcgroup,在所創(chuàng)建的newcgroup中初始化容器:a為容器掛載文件系統(tǒng),首先在容器根目錄下掛載tmpfs用于容器的運(yùn)行;然后對data 目錄進(jìn)行綁定映射;接著映射疊加system目錄,最后為容器掛載sd卡; b將由內(nèi)核生成的/proc和/sbin目錄從根域中拷貝到容器中;c將配置文件讀取到內(nèi)存中,根據(jù)配置文件開啟資源隔離機(jī)制,設(shè)置父子進(jìn)程隔離屬 性;d將容器啟動腳本拷貝到容器中;e創(chuàng)建容器子進(jìn)程,容器子進(jìn)程進(jìn)一步設(shè)置容器ini t進(jìn)程環(huán)境,改變?nèi)萜鞲夸浐凸ぷ?路徑,將init進(jìn)程實(shí)體加載到子進(jìn)程中,運(yùn)行init進(jìn)程;f?創(chuàng)建newcgroup,將init進(jìn)程移入其中,作為容器的首進(jìn)程,保證容器所有進(jìn)程都完全 在所屬的newcgroup中運(yùn)行。4.如權(quán)利要求1所述多Android系統(tǒng)的容器自動創(chuàng)建及其啟動方法,所述步驟3具體如 下:根據(jù)配置文件判斷所要啟動的容器處于前臺還是后臺;若為前臺容器,則進(jìn)入:將所創(chuàng)建容器子進(jìn)程進(jìn)程號寫入表示設(shè)備命名空間的文件中, 觸發(fā)容器獲取顯存設(shè)備;開始執(zhí)行容器內(nèi)init進(jìn)程,init進(jìn)程解析步驟2中的啟動腳本,啟 動系統(tǒng)服務(wù)進(jìn)程以及zygote進(jìn)程,zygote進(jìn)程啟動Android Framework層systemserver系 統(tǒng)服務(wù)進(jìn)程,再由systemserver系統(tǒng)服務(wù)進(jìn)程啟動各個Android服務(wù),最后獲取顯示設(shè)備啟 動桌面;Launcher完成后通知從進(jìn)程,表明前臺容器啟動完成;否則:執(zhí)行容器內(nèi)init進(jìn)程,init進(jìn)程解析啟動腳本,啟動系統(tǒng)服務(wù)進(jìn)程以及zygote進(jìn) 程,zygote 進(jìn)程啟動 AndroidFramework 層 systemserver 系統(tǒng)服務(wù)進(jìn)程,再由 systemserver 系統(tǒng)服務(wù)進(jìn)程啟動各個Android服務(wù),最后獲取虛擬現(xiàn)實(shí)設(shè)備,完成后臺容器啟動。
【文檔編號】G06F9/455GK106095530SQ201610405249
【公開日】2016年11月9日
【申請日】2016年6月8日
【發(fā)明人】楊霞, 郭文生, 武瓊, 劉維飛, 汪勇, 張少鑫, 袁藝, 楊姍, 包靈, 劉小平, 廖士鈔, 鐘鑫, 呂清林, 高正宏, 丘雙華, 楊拯, 簡鯤鵬
【申請人】電子科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
潞城市| 孟州市| 郴州市| 漾濞| 江门市| 合肥市| 铁岭县| 翁源县| 建水县| 长宁区| 枝江市| 海宁市| 寿宁县| 达拉特旗| 泽州县| 双江| 绥江县| 丹东市| 遵义市| 铜山县| 濮阳市| 尼玛县| 庆安县| 隆子县| 开封县| 色达县| 霍林郭勒市| 桓台县| 滨州市| 正阳县| 图木舒克市| 青冈县| 民县| 鄂州市| 永昌县| 柘荣县| 灯塔市| 曲松县| 三明市| 西青区| 龙胜|