2015-12-17 17:04:28 1696瀏覽
iOS操作系統(tǒng)主要完成兩個(gè)功能:硬件抽象和資源管理。硬件抽象給iOS軟件開發(fā)者提供一個(gè)接口,這個(gè)接口在計(jì)算機(jī)硬件與他們的應(yīng)用程序之間。有了這樣的接口,iOS軟件開發(fā)者就不用再關(guān)心硬件的復(fù)雜性。實(shí)際上對(duì)硬件的編程只需一次(在操作系統(tǒng)內(nèi)部),然后大家都可以共享。操作系統(tǒng)完成的第二個(gè)功能是管理計(jì)算機(jī)的資源(包括:CPU周期、存儲(chǔ)器、磁盤空間等)。
通過操作系統(tǒng)的有效管理,這些資源就可以被各種應(yīng)用所共享。像硬件抽象功能一樣,在操作系統(tǒng)內(nèi)部構(gòu)造一個(gè)資源管理體系,從而每一個(gè)應(yīng)用的iOS開發(fā)者都不必再為自己的程序編寫資源管理代碼。本文主要為大家介紹一下iOS系統(tǒng)中CPU資源管理和多任務(wù)的具體操作。
CPU資源管理和多任務(wù)
雖然一些操作系統(tǒng)在同一時(shí)刻只允許一個(gè)程序運(yùn)行(例如:MS.DOS的許多版本都是如此),現(xiàn)在也很容易發(fā)現(xiàn)許多操作系統(tǒng)也可以在同一時(shí)刻管理多個(gè)程序。在同一時(shí)刻運(yùn)行多個(gè)程序稱為多任務(wù),而支持多任務(wù)的操作系統(tǒng)一般稱之為多任務(wù)操作系統(tǒng)。為多任務(wù)操作系統(tǒng)編寫的應(yīng)用程序通常包括多個(gè)能在同一時(shí)刻運(yùn)行的、獨(dú)立的任務(wù)。這些小的子程序一般稱之為線程,因?yàn)樗鼈兘M成了一個(gè)程序內(nèi)的單線指令序列。每個(gè)線程都含有自己的一個(gè)CPU寄存器的集合,稱為上下文(Context),線程也能和同一程序內(nèi)部的其他線程共享存儲(chǔ)地址空間。一組共享相同的地址空間、為完成同一個(gè)任務(wù)且一起控制一組操作系統(tǒng)資源的線程稱為一個(gè)進(jìn)程(Process)。在支持虛擬存儲(chǔ)的操作系統(tǒng)和CPU中,每一個(gè)進(jìn)程都在各自獨(dú)立的地址空間運(yùn)行,它們的地址并不交叉。
因?yàn)橐粋€(gè)處理器在同一時(shí)刻只能運(yùn)行一個(gè)程序的指令,操作系統(tǒng)必須判斷某一時(shí)刻應(yīng)該執(zhí)行哪一個(gè)程序的指令集合(哪一個(gè)線程)。決定究竟該執(zhí)行哪個(gè)進(jìn)程的機(jī)制稱為調(diào)度(Scheduling),這通常由操作系統(tǒng)的一部分核心程序來完成,稱之為內(nèi)核(kernel)。根據(jù)操作系統(tǒng)所采用的優(yōu)化方式的不同,操作系統(tǒng)可以使用不同的線程調(diào)度策略。不同的應(yīng)用(批處理、交互、事務(wù)性、實(shí)時(shí)及其他類型的應(yīng)用)擁有不同的CPU使用特性,同時(shí)這些應(yīng)用的整體性能也受所采用的調(diào)度策略影響。
最簡(jiǎn)單的調(diào)度策略就是根據(jù)每一個(gè)線程請(qǐng)求處理的先后來分配處理器,先來的先用,直至執(zhí)行完一個(gè)再執(zhí)行下一個(gè),這種方法也稱為FIFO(先進(jìn)先出)直至運(yùn)行完調(diào)度。FIFO的優(yōu)點(diǎn)是:它比較容易實(shí)施,開銷非常低,而且比較公平一一所有的線程都是平等的,先來的先服務(wù)。關(guān)于多任務(wù)線程搶占不了解的讀者可以觀看扣丁學(xué)堂iOS實(shí)戰(zhàn)課程視頻或是閱讀iOS扣丁資訊。
這種調(diào)度方法比較適合于批處理應(yīng)用以及一些需要順序處理,而且處理完馬上就會(huì)結(jié)束的事務(wù)性應(yīng)用。但是它不適合于交互性和實(shí)時(shí)性的應(yīng)用。因?yàn)榻换バ詰?yīng)用需要很快的被調(diào)度,對(duì)CPU需求周期也比較短,只有這樣它才能很快地把執(zhí)行結(jié)果及時(shí)反饋給用戶或服務(wù)于其他外部設(shè)備。
對(duì)于這些類型的應(yīng)用,一個(gè)可行的解決方法就是賦于每一個(gè)線程不同的優(yōu)先級(jí)。對(duì)于那些急需訪問CPU的線程,比如實(shí)時(shí)應(yīng)用的線程,賦于較高的優(yōu)先級(jí);而對(duì)于哪些不太關(guān)鍵的線程,比如批處理應(yīng)用的線程,賦于較低的優(yōu)先級(jí)。具有高優(yōu)先級(jí)的線程可以跳到任務(wù)隊(duì)列的頭部,迅速地訪問CPU。如果有幾個(gè)相同優(yōu)先級(jí)的線程同時(shí)到達(dá),則按它們到達(dá)的順序調(diào)度(就像基本的FIFO策略),這種調(diào)度機(jī)制就稱為直至運(yùn)行完帶有優(yōu)先級(jí)的調(diào)度。
雖然這種調(diào)度策略比基本的FIFO有所改進(jìn),但它有一個(gè)不足,這種方法很容易使某一個(gè)線程長(zhǎng)期獨(dú)占CPU,從而不太適合于交叉的或?qū)崟r(shí)的應(yīng)用。具有高優(yōu)先級(jí)的線程可能會(huì)一直等在一個(gè)已經(jīng)開始運(yùn)行、優(yōu)先級(jí)比較低的線程后面,直至它運(yùn)行完。要解決這個(gè)問題,一個(gè)可行的方法就是暫時(shí)掛起(Suspend)或搶占(Preempt)一個(gè)正在運(yùn)行的線程,從而其他的線程可以使用CPU。
下一篇文章我們將會(huì)介紹iOS操作系統(tǒng)中多任務(wù)線程搶占的優(yōu)點(diǎn),詳情請(qǐng)關(guān)注扣丁學(xué)堂資訊實(shí)時(shí)更新。同時(shí)歡迎大家免費(fèi)觀看扣丁學(xué)堂iOS在線教程視頻學(xué)習(xí)。
查看更多關(guān)于“iOS資訊”的相關(guān)文章>>