




付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、執(zhí)行線(Thread)的進(jìn)一步探討 在介紹處理元時(shí),我們說明了執(zhí)行線的特點(diǎn)及它的一些應(yīng)用實(shí)例,在此處我們將進(jìn)一步探討執(zhí)行線的特性,並以Java為範(fàn)例,說明執(zhí)行線的狀態(tài)及排程方式。 Task1 Task 2 Task 3 User Level Thread Lightweight ProcessKernel Thread Kernel CPU圖1 Sun Solaris作業(yè)系統(tǒng)之使用者執(zhí)行線與核心執(zhí)行線介面 請參看圖1,這是我們在教科書上所談到的Sun Solaris作業(yè)系統(tǒng)內(nèi),使用者執(zhí)行線與核心執(zhí)行線之介面。由於多個(gè)使用者執(zhí)行線是由處理元所衍生出來,故當(dāng)它們要使用到系統(tǒng)資源時(shí),必須透過系統(tǒng)呼叫
2、、中斷等方式,由作業(yè)系統(tǒng)內(nèi)之處理元協(xié)助處理;因此處理元內(nèi)的使用者執(zhí)行線必須與系統(tǒng)內(nèi)的核心執(zhí)行線對應(yīng)。這種多元執(zhí)行線(Multithreads)的對應(yīng)方式在不同作業(yè)系統(tǒng)會有不同,大致上分為以下三類:1. 多個(gè)對應(yīng)一個(gè)(Many to One) 多個(gè)使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線。你可以想像成一個(gè)處理元內(nèi)的所有使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線。早期的Sun Solaris作業(yè)系統(tǒng)採用此種對應(yīng)方式。2. 一個(gè)對應(yīng)一個(gè)(One To One) 每一個(gè)使用者執(zhí)行線均有一個(gè)核心執(zhí)行線對應(yīng)。Windows 、OS/2、Linux作業(yè)系統(tǒng)均為這種對應(yīng)方式。3. 多個(gè)對應(yīng)多個(gè)(Many to Many) 可以將一
3、個(gè)處理元內(nèi)某幾個(gè)使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線,將另外幾個(gè)使用者執(zhí)行線對應(yīng)另一個(gè)核心執(zhí)行線。Sun Solaris作業(yè)系統(tǒng)便是採用這種對應(yīng)方式。請參看圖1,Task 1內(nèi)一個(gè)使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線,另二個(gè)使用者執(zhí)行線對應(yīng)另一個(gè)核心執(zhí)行線;Task 2內(nèi)一個(gè)使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線,另三個(gè)使用者執(zhí)行線對應(yīng)另一個(gè)核心執(zhí)行線,。 我們就使用者執(zhí)行線及核心執(zhí)行線在這三種不同對應(yīng)模組內(nèi),所具備的特性分別說明如下:1. 多個(gè)對應(yīng)一個(gè) 當(dāng)處理元分配到中央處理器時(shí)間後,使用者執(zhí)行線排程器自行分配時(shí)間片段給所屬多個(gè)使用者執(zhí)行線,所以僅需輕微的環(huán)境切換代價(jià),這是因?yàn)樽鳂I(yè)系統(tǒng)僅認(rèn)定有一個(gè)處理元佔(zhàn)有中央
4、處理器在執(zhí)行,它不知道處理元內(nèi)有使用者執(zhí)行線,也不知道處理元如何去作所屬執(zhí)行線之排程。 當(dāng)某一個(gè)使用者執(zhí)行線進(jìn)入懸置狀態(tài),則所有此處理元內(nèi)的使用者執(zhí)行線均一起被懸置,這是因?yàn)樽鳂I(yè)系統(tǒng)認(rèn)為處理元懸置的關(guān)係。由於核心執(zhí)行線是個(gè)別排程,所以不會造成其他核心執(zhí)行線一起被懸置,而且核心執(zhí)行線會有環(huán)境切換的代價(jià)。2. 一個(gè)對應(yīng)一個(gè) 由於每個(gè)使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線,從作業(yè)系統(tǒng)的角度,可以看到每個(gè)使用者執(zhí)行線,所以每個(gè)使用者執(zhí)行線均由中央處理器排程器排程,而用不著自行分配時(shí)間片段。當(dāng)某一個(gè)使用者執(zhí)行線懸置,其他使用者執(zhí)行線仍然可以繼續(xù)依排程工作。也由於作業(yè)系統(tǒng)直接控制使用者執(zhí)行線之排程,所以必須花費(fèi)較
5、高的環(huán)境切換代價(jià),但是執(zhí)行線的環(huán)境及執(zhí)行線共用資源的特性仍然被使用到。3. 多個(gè)對應(yīng)多個(gè) 為了避免一個(gè)使用者執(zhí)行線懸置而造成此處理元內(nèi)所有使用者執(zhí)行線連帶被懸置,以及避免一個(gè)使用者執(zhí)行線對應(yīng)一個(gè)核心執(zhí)行線的代價(jià)太高,所以發(fā)展出多個(gè)使用者執(zhí)行線依分群組的方式來對應(yīng)核心執(zhí)行線。 Sun Solaris作業(yè)系統(tǒng)或Java虛擬機(jī)器便可以將一個(gè)處理元內(nèi)的使用者執(zhí)行線依需求組成不同群組,在Sun Solaris內(nèi)稱為輕量級處理元(Light Weight Process)。每個(gè)輕量級處理元對應(yīng)一個(gè)核心處理元,且輕量級處理元及核心執(zhí)行線由作業(yè)系統(tǒng)核心進(jìn)行排程。這個(gè)對應(yīng)方式綜合多個(gè)對應(yīng)一個(gè)及一個(gè)對應(yīng)一個(gè)的缺失
6、加以改進(jìn),因此一個(gè)處理元可對應(yīng)多個(gè)輕量級處理元,且可對應(yīng)多個(gè)核心執(zhí)行線。當(dāng)某一個(gè)使用者執(zhí)行線懸置,則僅有與此執(zhí)行線同一個(gè)群組內(nèi)的其他使用者執(zhí)行線會被懸置,其他群組內(nèi)的使用者執(zhí)行線不會被懸置。 由於作業(yè)系統(tǒng)看到輕量級處理元,而看不到使用者執(zhí)行線,所以中央處理器時(shí)間分配給此輕量級處理元後,其內(nèi)的使用者執(zhí)行線排程器再將時(shí)間片段分配給此輕量級處理元內(nèi)的使用者執(zhí)行線。因此輕量級處理元內(nèi)部排程僅需輕微的環(huán)境切換,而輕量級處理元或核心執(zhí)行線間,則必須進(jìn)行環(huán)境切換。 雖然Java虛擬機(jī)器具有多個(gè)對應(yīng)多個(gè)的排程,而且也具有跨平臺的功能,但Java虛擬機(jī)器載入不同平臺後,則依據(jù)各平臺作業(yè)系統(tǒng)的不同,會有不同的對應(yīng)
7、方式,但是它的開發(fā)環(huán)境是一致的。 圖2為Java執(zhí)行線撰寫的範(fàn)例。new ( )用來衍生執(zhí)行線,start ( )呼叫該執(zhí)行線進(jìn)入排程,以便輪到中央處理器排程。圖中有個(gè)main ( )執(zhí)行線,它衍生worker1 ( )這個(gè)執(zhí)行線,之後兩個(gè)執(zhí)行線由執(zhí)行線程式庫內(nèi)的執(zhí)行線排程器來進(jìn)行排程。 Class worker1 extends thread public void run() system.out.println(“I am worker thread”); public class first public static void main(string args) worker1 ru
8、nner = new worker1(); runner.start(); system.out.println(“I am main thread”); 圖2 Java執(zhí)行線撰寫的範(fàn)例 使用者執(zhí)行線雖然不是由作業(yè)系統(tǒng)來進(jìn)行排程,但是仍然必須記錄各個(gè)執(zhí)行線的狀態(tài),這些工作必須由執(zhí)行線程式庫內(nèi)的執(zhí)行線排程器來配合處理。圖3為Java執(zhí)行線的狀態(tài)(Thread States)。 Java執(zhí)行線的狀態(tài)分別有衍生(new)、可執(zhí)行(runnable)、懸置(blocked)及結(jié)束(dead)。1. 衍生狀態(tài) 當(dāng)程式以new ( )呼叫之後,被衍生的執(zhí)行線便進(jìn)入衍生狀態(tài),衍生狀態(tài)僅是承認(rèn)有此執(zhí)行線,但此
9、執(zhí)行線尚無法進(jìn)入排程,必須以start ( )讓其進(jìn)入排程。2. 可執(zhí)行狀態(tài) 在衍生狀態(tài)之執(zhí)行線經(jīng)由start ( )呼叫之後,即進(jìn)入可執(zhí)行狀態(tài),此狀態(tài)就如同處理元之備妥狀態(tài)。在佇列內(nèi)排隊(duì)的執(zhí)行線會依執(zhí)行線排程器的排程,輪流使用中央處理器。由於Java的設(shè)計(jì)可以使用在多個(gè)中央處理器環(huán)境,所以同一時(shí)間可能有多個(gè)可執(zhí)行狀態(tài)的執(zhí)行線使用中央處理器。3. 懸置狀態(tài) 執(zhí)行線在懸置狀態(tài)與處理元在懸置狀態(tài)條件大致相同。當(dāng)執(zhí)行線進(jìn)行輸出/輸入、睡覺(sleep)、等待事件等,則進(jìn)入懸置狀態(tài),在懸置狀態(tài)之執(zhí)行線不接受執(zhí)行線排程,只有在它等待之事件或輸出/輸入完成後,它才會再進(jìn)入可執(zhí)行狀態(tài)接受排程。4. 結(jié)束 執(zhí)
10、行線執(zhí)行完畢。 runnable start stop new sleep new suspend dead I/O resume blocked 圖3 Java執(zhí)行線的狀態(tài) 圖4為Java執(zhí)行線排程器以分時(shí)方式的排程範(fàn)例。基本上Java的排程是以優(yōu)先等級來處理,亦即高優(yōu)先等級的執(zhí)行線優(yōu)先佔(zhàn)有中央處理器;因此我們只要將執(zhí)行線排程器之優(yōu)先等級訂的高一點(diǎn),這樣它便可以擁有中央處理器,以便分配時(shí)間片段給處理元內(nèi)的執(zhí)行線同儕。 我們假設(shè)一般的使用者執(zhí)行線的優(yōu)先等級為2,佔(zhàn)有中央處理器的使用者執(zhí)行線的優(yōu)先等級為4,而執(zhí)行線排程器之優(yōu)先等級為6,則分時(shí)的排程演算法為:1. 執(zhí)行線排程器有較高優(yōu)先等級,它佔(zhàn)
11、有中央處理器執(zhí)行。2. 執(zhí)行線排程器由可執(zhí)行狀態(tài)佇列內(nèi)選取一個(gè)使用者執(zhí)行線,將其優(yōu)先等級設(shè)為4。3. 執(zhí)行線排程器設(shè)定一段睡覺時(shí)間,並進(jìn)入懸置狀態(tài)睡覺。4. 擁有優(yōu)先等級4的使用者執(zhí)行器佔(zhàn)有中央處理器執(zhí)行。5. 經(jīng)過一段時(shí)間,執(zhí)行線排程器睡醒,並佔(zhàn)有中央處理器。6. 執(zhí)行線排程器將原使用者執(zhí)行線之優(yōu)先等級由4降為2。7. 重覆執(zhí)行步驟2至步驟6,直到安排給此處理元之時(shí)間片段用罄。 Public class scheduler extends thread : private void schedulersleep() try thread.sleep(timeslice); catch(interruptedexception e) public void run() thread current; this.setpriority(6); while (true) current =(thread)queue.getnext(); if (current !=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 日產(chǎn)促銷活動方案
- 春晚幼兒線上活動方案
- 新年插花活動方案
- 明一鮮奶開業(yè)活動方案
- 新年服裝引流活動方案
- 整體備課活動方案
- 春節(jié)公司聯(lián)歡活動方案
- 新春村春節(jié)活動方案
- 文藝采風(fēng)活動方案
- 我的妹妹高中 我的妹妹初中800字(三篇)
- 昆明天大礦業(yè)有限公司尋甸縣金源磷礦老廠箐-小凹子礦段(擬設(shè))采礦權(quán)出讓收益評估報(bào)告
- -衛(wèi)生資格-副高-內(nèi)科護(hù)理-副高-章節(jié)練習(xí)-護(hù)理學(xué)總論-醫(yī)院感染護(hù)理(案例分析題)(共6題)
- 尿動力學(xué)檢查操作指南2023版
- 夢幻西游古龍服務(wù)端安裝教程
- 食品安全地方標(biāo)準(zhǔn) 預(yù)制菜生產(chǎn)衛(wèi)生規(guī)范
- 亮化工程竣工驗(yàn)收報(bào)告
- 《出生醫(yī)學(xué)證明》單親母親情況聲明
- PCS-915母差保護(hù)裝置介紹
- 第一套路面工程考試試題及答案
- GB∕T 22590-2021 軋鋼加熱爐用耐火澆注料
評論
0/150
提交評論