操作系統(tǒng)_Android 基礎(chǔ)和運(yùn)行機(jī)制_課程論文_第1頁(yè)
操作系統(tǒng)_Android 基礎(chǔ)和運(yùn)行機(jī)制_課程論文_第2頁(yè)
操作系統(tǒng)_Android 基礎(chǔ)和運(yùn)行機(jī)制_課程論文_第3頁(yè)
操作系統(tǒng)_Android 基礎(chǔ)和運(yùn)行機(jī)制_課程論文_第4頁(yè)
操作系統(tǒng)_Android 基礎(chǔ)和運(yùn)行機(jī)制_課程論文_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、西南大學(xué)電子信息工程學(xué)院課程論文考試科目 操作系統(tǒng) 教 師 學(xué) 年 2014-2015 學(xué) 期 6 姓 名 學(xué) 號(hào) 類 別 專業(yè)選修 成 績(jī) 2015年 7月 1日電子信息工程學(xué)院制目錄第一章 概論11.1 Android系統(tǒng)簡(jiǎn)介11.2 Android系統(tǒng)的結(jié)構(gòu)11.3 Android系統(tǒng)的特點(diǎn)4第二章 Android系統(tǒng)架構(gòu)52.1應(yīng)用程序62.2應(yīng)用程序框架62.3系統(tǒng)運(yùn)行庫(kù)6第三章 進(jìn)程和線程的設(shè)計(jì)73.1進(jìn)程設(shè)計(jì)73.2線程設(shè)計(jì)73.3進(jìn)程的生命周期8第四章 調(diào)度算法104.1進(jìn)程調(diào)度的基礎(chǔ)知識(shí)104.2 Android平臺(tái)中的進(jìn)程調(diào)度接口114.3 設(shè)置調(diào)度優(yōu)先級(jí)114.4 設(shè)置調(diào)

2、度策略12第五章 總結(jié)13Android 基礎(chǔ)和運(yùn)行機(jī)制第一章 概論1.1 Android系統(tǒng)簡(jiǎn)介Android是Google于2007年11月05日宣布的基于Linux平臺(tái)的開源移動(dòng)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。它采用軟件堆層(Software Stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層以Linux內(nèi)核工作為基礎(chǔ),由C語(yǔ)言開發(fā),只提供基本功能;中間層包括函數(shù)庫(kù)Library和虛擬機(jī)Virtual Machine,由C+開發(fā)。最上層是各種應(yīng)用軟件,包括通話程序,短信程序等,應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。不存在任何以往

3、阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。 Google通過與軟、硬件開發(fā)商、設(shè)備制造商、電信運(yùn)營(yíng)商等其他有 關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化、開放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開放式的生態(tài)系統(tǒng)。 Android 作為Google企業(yè)戰(zhàn)略的重要組成部分,將進(jìn)一步推進(jìn)“隨時(shí)隨地為每個(gè)人提供信息”這一企業(yè)目標(biāo)的實(shí)現(xiàn)。全球?yàn)閿?shù)眾多的移動(dòng)電話用戶正在使用各種基于 Android 的電話。谷歌的目標(biāo)是讓(移動(dòng)通訊)不依賴于設(shè)備甚至平臺(tái)。出于這個(gè)目的,Android將補(bǔ)充,而不會(huì)替代谷歌長(zhǎng)期以來奉行的移動(dòng)發(fā)展戰(zhàn)略:通過與全球各地的手機(jī)制

4、造商和移動(dòng)運(yùn)營(yíng)商結(jié)成合作伙伴,開發(fā)既有用又有吸引力的移動(dòng)服務(wù),并推廣這些產(chǎn)品。1.2 Android系統(tǒng)的結(jié)構(gòu)1.2.1系統(tǒng)內(nèi)核Android 是運(yùn)行于Linux kernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 為了達(dá)到商業(yè)應(yīng)用,必須移除被GNU GPL授權(quán)證所約束的部份,例如Android將驅(qū)動(dòng)程

5、序移到 Userspace,使得Linux driver 與Linux kernel徹底分開。Bionic/Libc/Kernel/ 并非標(biāo)準(zhǔn)的Kernel header files。Android 的Kernel header 是利用工具由 Linux Kernel header 所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。Android 的 Linux kernel控制包括安全(Security),存儲(chǔ)器管理(MemoryManagement),程序管理(Process Management),網(wǎng)絡(luò)堆棧(Network Stack),驅(qū)動(dòng)程序模型(Driver Model)等。下載And

6、roid源碼之前,先要安裝其構(gòu)建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個(gè)工具。1.2.2后綴簡(jiǎn)介APK是安卓應(yīng)用的后綴,是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機(jī)中執(zhí)行即可安裝。apk文件和sis一樣,把a(bǔ)ndroid sdk編譯的工程打包成一個(gè)安裝程序文件,格式為apk。 APK文件其實(shí)是zip格式,但后綴名被修改為apk,通過UnZip解壓后,可以看到Dex文件,Dex是Dalvik VM execu

7、tes的全稱,即Android Dalvik執(zhí)行程序,并非Java ME的字節(jié)碼而是Dalvik字節(jié)碼。APK文件結(jié)構(gòu)一個(gè)APK文件結(jié)構(gòu)為:1. META-INF (注:Jar文件中??梢钥吹剑?. res (注:存放資源文件的目錄) ;3. AndroidManifest.xml (注:程序全局配置文件) ;4. classes.dex (注:Dalvik字節(jié)碼);5. resources.arsc (注:編譯后的二進(jìn)制資源文件)??偨Y(jié)下我們發(fā)現(xiàn)Android在運(yùn)行一個(gè)程序時(shí)首先需要UnZip,然后類似Symbian那樣直接執(zhí)行安裝,和Windows Mobile中的PE文件有區(qū)別,這樣做

8、對(duì)于程序的保密性和可靠性不是很高,通過dexdump命令可以反編譯,但這樣做符合發(fā)展規(guī)律,微軟的 Windows Gadgets或者說WPF也采用了這種構(gòu)架方式。在Android平臺(tái)中dalvik vm的執(zhí)行文件被打包為apk格式,最終運(yùn)行時(shí)加載器會(huì)解壓然后獲取編譯后androidmanifest.xml文件中的permission分支相關(guān)的安全訪問,但仍然存在很多安全限制,如果你將apk文件傳到/system/app文件夾下會(huì)發(fā)現(xiàn)執(zhí)行是不受限制的。最終我們平時(shí)安裝的文件可能不是這個(gè)文件夾,而在android rom中系統(tǒng)的apk文件默認(rèn)會(huì)放入這個(gè)文件夾,它們擁有著root權(quán)限。1.2.3硬件

9、抽像層Android 的HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅(qū)動(dòng)模塊。HAL 的目的是為了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴Linux kernel,以達(dá)成 Kernel independent 的概念,也讓 Android framework 的開發(fā)能在不考量驅(qū)動(dòng)程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展。HAL stub 是一種代理人(Proxy)的概念,Stub 是以 *.so 檔的形式存在。Stub 向HAL“提供”操作函數(shù)(Operations),并由 Android runtime 向 HAL 取得 Stub 的Op

10、erations,再 Callback 這些操作函數(shù)。HAL 里包含了許多的 Stub(代理人)。Runtime只要說明“類型”,即 Module ID,就可以取得操作函數(shù)。1.2.4中介軟件操作系統(tǒng)與應(yīng)用程序的溝通橋梁,應(yīng)用分為兩層:函數(shù)層(Library)和虛擬機(jī)(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時(shí)包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背后的引擎。Surface flinger 是就2D或3D的內(nèi)容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自制的B

11、ionic Libc。Android采用OpenCORE作為基礎(chǔ)多媒體框架。Open CORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當(dāng),但相較于Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購(gòu),2007年初,Skia GL源碼

12、被公開,Skia 也是Google Chrome 的圖形引擎。Android的多媒體數(shù)據(jù)庫(kù)采用SQLite數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)又分為共用數(shù)據(jù)庫(kù)及私用數(shù)據(jù)庫(kù)。用戶可通過ContentResolver類(Column)取得共用數(shù)據(jù)庫(kù)。Android的中間層多以Java 實(shí)現(xiàn),并且采用特殊的Dalvik 虛擬機(jī)(Dalvik Virtual Machine)。Dalvik虛擬機(jī)是一種“暫存器型態(tài)”(Register Based)的Java虛擬機(jī),變量皆存放于暫存器中,虛擬機(jī)的指令相對(duì)減少。Dalvik虛擬機(jī)可以有多個(gè)實(shí)例(Instance), 每個(gè)Android應(yīng)用程序都用一個(gè)自屬的Dalvik虛擬機(jī)

13、來運(yùn)行,讓系統(tǒng)在運(yùn)行程序時(shí)可達(dá)到優(yōu)化。Dalvik 虛擬機(jī)并非運(yùn)行Java字節(jié)碼(Bytecode),而是運(yùn)行一種稱為.dex格式的文件。1.2.5安全權(quán)限機(jī)制Android本身是一個(gè)權(quán)限分立的操作系統(tǒng)。在這類操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識(shí)別身份運(yùn)行(Linux用戶ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨(dú)立的識(shí)別方式。Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開。系統(tǒng)更多的安全功能通過權(quán)限機(jī)制提供。權(quán)限可以限制某個(gè)特定進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對(duì)特定數(shù)據(jù)段的訪問。Android安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒有權(quán)限對(duì)其他應(yīng)用、系統(tǒng)或用戶進(jìn)行

14、較大影響的操作。這其中包括讀寫用戶隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫其他應(yīng)用文件,訪問網(wǎng)絡(luò)或阻止設(shè)備待機(jī)等。安裝應(yīng)用時(shí),在檢查程序簽名提及的權(quán)限,且經(jīng)過用戶確認(rèn)后,軟件包安裝器會(huì)給予應(yīng)用權(quán)限。從用戶角度看,一款A(yù)ndroid應(yīng)用通常會(huì)要求如下的權(quán)限:撥打電話、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫入日程數(shù)據(jù)、讀取電話狀態(tài)或識(shí)別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。┑乩砦恢?、創(chuàng)建藍(lán)牙連接、對(duì)互聯(lián)網(wǎng)的完全訪問、查看網(wǎng)絡(luò)狀態(tài),查看WiFi狀態(tài)、避免手機(jī)待機(jī)、修改系統(tǒng)全局設(shè)置、讀取同步設(shè)定、開機(jī)自啟動(dòng)、重啟其他應(yīng)用、終止運(yùn)行中的應(yīng)用、設(shè)定偏好應(yīng)

15、用、震動(dòng)控制、拍攝圖片等。一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限。用戶也可以分析一款應(yīng)用所需權(quán)限,從而簡(jiǎn)單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機(jī)版,也沒有任何附加的內(nèi)容需要下載,那么它要求訪問網(wǎng)絡(luò)的權(quán)限就比較可疑。1.3 Android系統(tǒng)的特點(diǎn)Android系統(tǒng)最震撼人心之處在于其開放性和服務(wù)的免費(fèi)性方面。Anroid是一個(gè)對(duì)第三方軟件完全開放的平臺(tái),開發(fā)者在為其開發(fā)程序時(shí)擁有更大的自由度,突破了iPhone等只能添加為數(shù)不多的固定軟件的枷鎖;同時(shí)與Windows Mobiel(現(xiàn)叫Windows Phone)、Symbian等廠商不同,Android操作系統(tǒng)免費(fèi)向開發(fā)人員

16、提供,這樣可節(jié)省30%的成本。Android平臺(tái)的手機(jī)以及平板電腦具有以下5大特點(diǎn):1、開放性在優(yōu)勢(shì)方面,Android平臺(tái)首先就是其開放性,開發(fā)的平臺(tái)允許任何移動(dòng)終端廠商加入到Android聯(lián)盟中。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個(gè)嶄新的平臺(tái)也將很將走向成熟,蘋果的IOS系統(tǒng)封閉;無向任何廠商提供,Windows Phone系統(tǒng)封閉,廠商需要花高價(jià)購(gòu)買;Nokia的Symbian之前也一直是封閉,現(xiàn)在已經(jīng)末落了。2、掙脫運(yùn)營(yíng)商的束縛在過去很長(zhǎng)的一段時(shí)間,特別是在歐美地區(qū),手機(jī)應(yīng)用往往受到運(yùn)營(yíng)商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營(yíng)商的控制。自從And

17、roid上市,用戶可以更加方便地連接網(wǎng)絡(luò),運(yùn)營(yíng)商的制約減少。隨著EDGE、HSDPA這些2G至3G移動(dòng)網(wǎng)絡(luò)的逐步過渡和提升,手機(jī)隨意揍人網(wǎng)絡(luò)已不是運(yùn)營(yíng)商口中的笑談。3、豐富的硬件選擇這一點(diǎn)還是與Android平臺(tái)的開放性相關(guān)。由于Android的開放性,眾多的廠商會(huì)推出豐富多彩、各具特色的多種產(chǎn)品。功能上的差異和特色卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容性。好比用戶從諾基亞的Syrnbian(塞班)風(fēng)格手機(jī)一下改用裝載Android(安卓)系統(tǒng)的手機(jī),同時(shí)還可將Symbian中優(yōu)秀的軟件帶到新手機(jī)上使用,聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。4、不受任何限制的開發(fā)商Android平臺(tái)提供給第三方開發(fā)商

18、個(gè)十分寬泛、自由的環(huán)境,因此不會(huì)受到各種條條框框的阻撓,可想而知,這樣會(huì)有多少新穎別致的軟件會(huì)誕生。但這也有其兩面性,血腥、暴力、情色方面的程序和游戲如何控制正是留給Android開發(fā)人員的難題之一。5、無縫結(jié)合的Google應(yīng)用如今Google在互聯(lián)網(wǎng)領(lǐng)域已經(jīng)走過十多年歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺(tái)手機(jī)將無縫結(jié)合這些Google應(yīng)用。第二章 Android系統(tǒng)架構(gòu)Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,Android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程

19、序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層。圖 1 android 架構(gòu)2.1應(yīng)用程序Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語(yǔ)言編寫的。2.2應(yīng)用程序框架開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;豐富而又可擴(kuò)展

20、的視圖(Views),可以用來構(gòu)建應(yīng)用程序, 它包括列表(Lists),網(wǎng)格(Grids),文本框(Text boxes),按鈕(Buttons), 甚至可嵌入的web瀏覽器。內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)), 或者共享它們自己的數(shù)據(jù)資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件(Layout files )。通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。活動(dòng)管理器( Activity Manager) 用來

21、管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。2.3系統(tǒng)運(yùn)行庫(kù)Android 包含一些C/C+庫(kù),這些庫(kù)能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫(kù):* 系統(tǒng) C 庫(kù) - 一個(gè)從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù) Libc ), 它是專門為基于Embedded linux的設(shè)備定制的。* 媒體庫(kù) - 基于PacketVideo OpenCORE;該庫(kù)支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。* Surface Manage

22、r - 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提 供了2D和3D圖層的無縫融合。* LibWebCore - 一個(gè)最新的web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。第三章 進(jìn)程和線程的設(shè)計(jì)當(dāng)一個(gè)應(yīng)用的第一個(gè)組件需要運(yùn)行時(shí),android系統(tǒng)就為這個(gè)組件啟動(dòng)一個(gè)只有一個(gè)線程的Linux進(jìn)程,默認(rèn)的,應(yīng)用的所有組件都運(yùn)行這個(gè)進(jìn)程中的這個(gè)線程中。但是,你可以安排組件運(yùn)行在其他的進(jìn)程中,并且為你的任意的進(jìn)程增加若干線程。3.1進(jìn)程設(shè)計(jì)組件運(yùn)行的進(jìn)程是在manifest文件里控制的,四大組件都一個(gè)process屬性可以指定進(jìn)程來運(yùn)行,這些屬性可以被設(shè)置為了每個(gè)組件都可以運(yùn)行在他

23、自己的進(jìn)程中,或者幾個(gè)組件共享一個(gè)進(jìn)程,或者不共享,如果兩個(gè)應(yīng)用共享一個(gè)Linux user ID并且有相同的權(quán)限,那么就可以使這兩個(gè)應(yīng)用中的組件運(yùn)行在相同的進(jìn)程中,也有process屬性,用來指定對(duì)所有組件的屬性。所有的組件都在指定的進(jìn)程中的主線程中實(shí)例化,系統(tǒng)調(diào)用這些組件就是從主線程里發(fā)出的,其他的線程將不會(huì)對(duì)每個(gè)組件再實(shí)例化,所有作為調(diào)用的回應(yīng)的這些方法,比如說View.onKeyDown()還是組件的生命周期函數(shù)等等都是運(yùn)行在這個(gè)主線程中的,這就意味著當(dāng)系統(tǒng)調(diào)用這個(gè)組件時(shí),這個(gè)組件不能長(zhǎng)時(shí)間的阻塞線程(比如說網(wǎng)絡(luò)操作,循環(huán)計(jì)算),因?yàn)檫@樣會(huì)阻塞這個(gè)進(jìn)程中的其他組件,你可以將很耗時(shí)的任務(wù)

24、分到其他的線程中。當(dāng)內(nèi)存不足或者有其他更緊急的進(jìn)程要求時(shí),Android系統(tǒng)可能關(guān)閉一個(gè)進(jìn)程,運(yùn)行在這個(gè)進(jìn)程中的應(yīng)用組件因此被銷毀,當(dāng)用戶又重新回來時(shí),進(jìn)程才被重新啟動(dòng)。至于究竟要停止哪個(gè)進(jìn)程,android系統(tǒng)是通過衡量哪個(gè)進(jìn)程對(duì)用戶來說更重要來實(shí)現(xiàn)的。3.2線程設(shè)計(jì)你可以限制你的應(yīng)用運(yùn)行在一個(gè)進(jìn)程中,但是有的時(shí)候你需要新開一個(gè)線程在后臺(tái)運(yùn)行,用戶界面需要隨時(shí)對(duì)用戶的要求做出反應(yīng),所以一些很耗時(shí)的工作應(yīng)該重新啟動(dòng)一個(gè)線程來做,以免阻塞主進(jìn)程。線程通過java的標(biāo)準(zhǔn)對(duì)象Thread 創(chuàng)建. Android 提供了很多方便的管理線程的方法: Looper 在線程中運(yùn)行一個(gè)消息循環(huán); Handle

25、r 傳遞一個(gè)消息; HandlerThread 創(chuàng)建一個(gè)帶有消息循環(huán)的線程。遠(yuǎn)程調(diào)用(Remote procedure calls)Android系統(tǒng)有一個(gè)輕量級(jí)的遠(yuǎn)程調(diào)用機(jī)制(RPC)-一個(gè)方法在本地調(diào)用,但是在遠(yuǎn)程執(zhí)行(在另外一個(gè)進(jìn)程里),返回給調(diào)用端的所有結(jié)果都必須的系統(tǒng)能理解的,將數(shù)據(jù)從本地進(jìn)程和地址空間傳遞到遠(yuǎn)程的進(jìn)程和地址空間,并在遠(yuǎn)端重新裝配,返回值的時(shí)候傳輸方向相反,android系統(tǒng)會(huì)去做這些傳輸?shù)墓ぷ?,讓你能夠集中精力來定義你的RPC一個(gè)RPC接口只能包含方法,默認(rèn)的,即使是沒有值返回,所有的方法都是同步執(zhí)行的,就是說本地方法一直會(huì)阻塞直到遠(yuǎn)端的方法執(zhí)行完畢)。簡(jiǎn)單的說,這

26、個(gè)遠(yuǎn)程調(diào)用的機(jī)制是這樣工作的:首先你需要用IDL(interface definition language)聲明你的RPC接口,然后android系統(tǒng)會(huì)使用aidl工具來形成一個(gè)java接口,并且這個(gè)java接口是本地進(jìn)程和遠(yuǎn)端進(jìn)程都可以獲得的,這個(gè)java接口包含了兩個(gè)內(nèi)部類。這兩個(gè)內(nèi)部類有管理遠(yuǎn)程調(diào)用(你用IDL聲明的接口)的所以代碼,兩個(gè)內(nèi)部類都實(shí)現(xiàn)IBinder接口,一個(gè)是在本地(內(nèi)部)使用,這個(gè)你可以不用自己寫代碼,另外一個(gè)叫做Stub,繼承自Binder類的,包含所有完成進(jìn)程間通信(IPC)的代碼,他包含你在RPC接口中聲明的所有方法,你應(yīng)該繼續(xù)繼承Stub類來實(shí)現(xiàn)這些方法。一般

27、的,遠(yuǎn)端進(jìn)程應(yīng)該由一個(gè)service來管理(因?yàn)橐粋€(gè)service能通知系統(tǒng)關(guān)于這個(gè)進(jìn)程和他連接到的其他進(jìn)程)。3.3進(jìn)程的生命周期Android系統(tǒng)總是盡最大的努力來維持一個(gè)應(yīng)用的進(jìn)程,但系統(tǒng)的內(nèi)存不足時(shí)就可能需要關(guān)閉一些舊的進(jìn)程了,但是決定關(guān)閉哪個(gè)進(jìn)程呢,android系統(tǒng)把所以的進(jìn)程放進(jìn)一個(gè)重要性樹里,最低重要性的進(jìn)程將會(huì)被停止,系統(tǒng)有5種重要性等級(jí),重要性從高到低如下:(1)、前臺(tái)進(jìn)程。一個(gè)前臺(tái)進(jìn)程是當(dāng)前執(zhí)行用戶請(qǐng)求的進(jìn)程,如果有如下的一種情形的那么他就是前臺(tái)進(jìn)程:a、這個(gè)進(jìn)程里運(yùn)行著一個(gè)正在和用戶交互的Activity(這個(gè)Activity的onResume()方法被調(diào)用)。b、這個(gè)

28、進(jìn)程里有綁定到當(dāng)前正在和用戶交互的Activity的一個(gè)servicec、這個(gè)進(jìn)程里有一個(gè)service對(duì)象,這個(gè)service對(duì)象執(zhí)行了至少一個(gè)他生命周期的函數(shù)(onCreate(), onStart(), or onDestroy().d、這個(gè)進(jìn)程里有一個(gè)執(zhí)行了onReceive()方法的broadcastreceiver對(duì)象只有一定數(shù)量的前臺(tái)進(jìn)程在任何時(shí)間都存在,他們只有在最后的時(shí)刻被停止-系統(tǒng)的內(nèi)存太少了而不能運(yùn)行這些僅有的前臺(tái)進(jìn)程了),一般的,在那個(gè)時(shí)刻,手機(jī)會(huì)重新設(shè)置內(nèi)存頁(yè)的狀態(tài),所以停止一些前臺(tái)的進(jìn)程是為了保持對(duì)用戶操作的快速響應(yīng)。(2)可見進(jìn)程。一個(gè)可見進(jìn)程一個(gè)沒有任何前臺(tái)顯示

29、的組件,但是仍然可以影響到用戶當(dāng)前屏幕所看見的東西,如果有如下的一種情形那么他就是可見進(jìn)程。a、 這個(gè)進(jìn)程里一個(gè)Activity,但是這個(gè)Activity當(dāng)前不是在前臺(tái)顯示,但是仍然對(duì)用戶是可見的(這個(gè)Activity的onPause()方法被調(diào)用),比如說一個(gè)Activity調(diào)用一個(gè)dialog,那么這個(gè)dialog是當(dāng)前顯示的組件,這個(gè)Activity不是在前臺(tái)顯示,但是對(duì)用戶是可見的。b、 這個(gè)進(jìn)程里有一個(gè)綁定到一個(gè)可見Activity(如上所述的Activity)的service一個(gè)可見進(jìn)程是極端重要的,只有在為了顯示所有前臺(tái)進(jìn)程時(shí),即顯示前臺(tái)進(jìn)程都不夠時(shí),才會(huì)停止可見進(jìn)程。(3)、服

30、務(wù)進(jìn)程。一個(gè)服務(wù)進(jìn)程是一個(gè)通過startService()啟動(dòng)的但是沒有在前兩個(gè)分類中的進(jìn)程,雖然服務(wù)進(jìn)程不是用戶直接能看見的,但是他也總是做一些用戶很關(guān)心的事(如在后臺(tái)播放mp3,從網(wǎng)絡(luò)上下載東西),所以系統(tǒng)會(huì)一直保持服務(wù)進(jìn)程運(yùn)行,除非內(nèi)存不足以運(yùn)行服務(wù)進(jìn)程,前臺(tái)進(jìn)程,可見進(jìn)程。(4)后臺(tái)進(jìn)程。一個(gè)后臺(tái)進(jìn)程是運(yùn)行一個(gè)當(dāng)前對(duì)用戶是不可見的Activity(這個(gè)Activity的onStop()被調(diào)用),這些進(jìn)程對(duì)用戶體驗(yàn)沒有什么直接的影響,當(dāng)內(nèi)存不足以運(yùn)行前臺(tái)進(jìn)程,可見進(jìn)程,服務(wù)進(jìn)程時(shí),可以隨時(shí)停止后臺(tái)進(jìn)程,通常有很多的后臺(tái)進(jìn)程在運(yùn)行,系統(tǒng)會(huì)把這些后臺(tái)進(jìn)程放進(jìn)一個(gè)LRU中(最近使用隊(duì)列),最近

31、使用的就最后停止。(5)空進(jìn)程。一個(gè)空進(jìn)程就是進(jìn)程里沒有任何活動(dòng)的應(yīng)用組件,維持這種進(jìn)程的唯一原因就是作為一種緩存,當(dāng)一個(gè)組件需要啟動(dòng)時(shí)加快啟動(dòng)的速度,系統(tǒng)為了平衡進(jìn)程緩存和核心緩存會(huì)停止這些空的進(jìn)程。Android系統(tǒng)會(huì)取一個(gè)進(jìn)程里的所以組件的最高重要性來安排進(jìn)程的重要性,比如說,一個(gè)進(jìn)程里有一個(gè)service和一個(gè)可見的Activity,那么這個(gè)進(jìn)程會(huì)被安排成一個(gè)可見進(jìn)程,而不是服務(wù)進(jìn)程。另外,一個(gè)進(jìn)程的重要性有可能會(huì)因?yàn)槠渌M(jìn)程的依賴而升高,一個(gè)進(jìn)程不能比他所服務(wù)的進(jìn)程的重要性低,比如有進(jìn)程A里的service綁定到了進(jìn)程B的組件上,那么進(jìn)程A的重要性至少和進(jìn)程B的一樣,或者更高。因?yàn)橐?/p>

32、個(gè)服務(wù)進(jìn)程的重要性比運(yùn)行一個(gè)后臺(tái)Activity的進(jìn)程高,所以,當(dāng)一個(gè)Activity做一些長(zhǎng)時(shí)間運(yùn)行的任務(wù)時(shí),最好啟動(dòng)一個(gè)service來做,而不是放到一個(gè)線程里去做,特別是這個(gè)任務(wù)的時(shí)間可能比Activity運(yùn)行的時(shí)間還長(zhǎng)的時(shí)候,比如在后臺(tái)播放音樂,或者上傳一張圖片到網(wǎng)上,使用一個(gè)service保證了這個(gè)任務(wù)至少是服務(wù)進(jìn)程的重要性,broadcast receiver也是一樣,長(zhǎng)時(shí)間運(yùn)行的任務(wù)也最好是放到一個(gè)service里,而不是放到一個(gè)線程里。第四章 調(diào)度算法4.1進(jìn)程調(diào)度的基礎(chǔ)知識(shí)在一個(gè)系統(tǒng)中,經(jīng)常運(yùn)行著多個(gè)進(jìn)程,和CPU個(gè)數(shù)相比,當(dāng)然是進(jìn)程數(shù)遠(yuǎn)遠(yuǎn)大于CPU個(gè)數(shù)咯,那么就存在為進(jìn)程分

33、配CPU資源的問題。一般而言,有兩種分配方式,一個(gè)是由進(jìn)程間協(xié)調(diào),例如一個(gè)比較友好的進(jìn)程在一定的時(shí)刻主動(dòng)讓出CPU,這樣其他進(jìn)程就有機(jī)會(huì)使用CPU。但是這種類似道德上的約束往往行不通,因?yàn)榭倳?huì)有“惡意“進(jìn)程存在嘛!另外一個(gè)比較難以克服的問題是友好的標(biāo)準(zhǔn)沒法統(tǒng)一,例如什么時(shí)候該友好一下?除了這種不靠譜的道德約束外,大師們又引進(jìn)了搶占式分配,這種分配方式類似法律約束。每個(gè)進(jìn)程會(huì)分配一定的CPU資源,OS也會(huì)定時(shí)(處理時(shí)鐘中斷)+定點(diǎn)(比如系統(tǒng)調(diào)用返回到userspace前,)檢查進(jìn)程的CPU資源使用情況。一旦某個(gè)進(jìn)程CPU資源消耗完畢,則會(huì)毫不留情地挑選下一個(gè)進(jìn)程運(yùn)行。在操作系統(tǒng)理論中,CPU資源

34、一般用時(shí)間片(time slice)來表示。直觀意義就是分配給一個(gè)進(jìn)程可以運(yùn)行在CPU上的時(shí)間。也就是CPU資源是用時(shí)間單位來衡量的。進(jìn)程優(yōu)先級(jí)相關(guān)的知識(shí):最直觀的想法就是給每個(gè)進(jìn)程設(shè)置一個(gè)調(diào)度優(yōu)先級(jí),然后按照round-robin方式每次挑選一個(gè)優(yōu)先級(jí)最高的進(jìn)程運(yùn)行。那么,在Linux中,這個(gè)調(diào)度優(yōu)先級(jí)是通過nice值來反映的,從-20到19。值越大表示該進(jìn)程越nice,這個(gè)nice是對(duì)其他進(jìn)程的nice,所以優(yōu)先級(jí)越低。再解決優(yōu)先級(jí)的概念后,我們?cè)賮砜吹诙€(gè)基本問題:CPU資源:time-slice是什么?以及它如何與優(yōu)先級(jí)結(jié)合起來?· 最先想到的就是time-slice應(yīng)該是一

35、個(gè)時(shí)間單位,例如20ms。然后每種調(diào)度優(yōu)先級(jí)的time-slice和該級(jí)別有某種計(jì)算關(guān)系,例如線性。假設(shè)0級(jí)對(duì)應(yīng)的時(shí)間片是20ms,那么1級(jí)的就是15ms。· 默認(rèn)時(shí)間片(對(duì)應(yīng)0度優(yōu)先級(jí))該取多大呢?太大的話(例如2秒)則會(huì)導(dǎo)致漫長(zhǎng)(從CPU速度來看)的用戶等待,例如每個(gè)進(jìn)程都需要運(yùn)行2秒才會(huì)讓出CPU,這樣的系統(tǒng)運(yùn)行起來給人一頓一頓的感覺。而太小的話(例如1ms)則會(huì)導(dǎo)致CPU把大量時(shí)間浪費(fèi)在進(jìn)程上下文切換。前輩們經(jīng)過長(zhǎng)期的實(shí)際使用,一般系統(tǒng)設(shè)置的默認(rèn)時(shí)間片在20ms或者10ms。4.2 Android平臺(tái)中的進(jìn)程調(diào)度接口從最上的Java層看,Anroid提供的Process類封裝了進(jìn)程調(diào)度優(yōu)先級(jí),調(diào)度策略等一些API。下圖是整體調(diào)用流程和相關(guān)文件位置。圖2 進(jìn)程調(diào)度的API以及調(diào)用分發(fā)流程從上圖我們可知:l 重點(diǎn)討論P(yáng)rocess.java

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論