




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1,第三章 進(jìn)程管理,主講:何中勝 計(jì)算機(jī)科學(xué)工程系,2020年7月15日星期三,2,3.7 進(jìn)程的調(diào)度,2020年7月15日星期三,3,無論是在批處理系統(tǒng)還是分時系統(tǒng)中,用戶進(jìn)程數(shù)一般都多于處理機(jī)數(shù),這將導(dǎo)致用戶進(jìn)程互相爭奪處理機(jī)。另外,系統(tǒng)進(jìn)程也同樣需要使用處理機(jī)。這就要求進(jìn)程調(diào)度程序按一定的策略,動態(tài)地把處理機(jī)分配給處于就緒隊(duì)列中的某一個進(jìn)程,以使之執(zhí)行。本節(jié)介紹進(jìn)程調(diào)度的功能、進(jìn)程調(diào)度發(fā)生的時機(jī)以及由進(jìn)程調(diào)度引起的進(jìn)程上下文切換等。,2020年7月15日星期三,4,分級調(diào)度,作業(yè)調(diào)度:又稱宏觀調(diào)度,或高級調(diào)度。其主要任務(wù)是按一定的原則對外存輸入井上的大量后備作業(yè)進(jìn)行選擇,給選出的作業(yè)分
2、配內(nèi)存、輸入輸出設(shè)備等必要的資源,并建立相應(yīng)的進(jìn)程,以使該作業(yè)的進(jìn)程獲得競爭處理機(jī)的權(quán)利。另外,當(dāng)該作業(yè)執(zhí)行完畢時,還負(fù)責(zé)回收系統(tǒng)資源。 交換調(diào)度:又稱中級調(diào)度。其主要任務(wù)是按照給定的原則和策略,將處于外存交換區(qū)中的就緒狀態(tài)或就緒等待狀態(tài)的進(jìn)程調(diào)入內(nèi)存,或把處于內(nèi)存就緒狀態(tài)或內(nèi)存等待狀態(tài)的進(jìn)程交換到外存交換區(qū)。交換調(diào)度主要涉及到內(nèi)存管理與擴(kuò)充。,2020年7月15日星期三,5,分級調(diào)度(續(xù)),進(jìn)程調(diào)度:又稱微觀調(diào)度或低級調(diào)度。其主要任務(wù)是按照某種策略和方法選取一個處于就緒狀態(tài)的進(jìn)程占用處理機(jī)。在確定了占用處理機(jī)的進(jìn)程后,系統(tǒng)必須進(jìn)行進(jìn)程上下文切換以建立與占用處理機(jī)進(jìn)程相適應(yīng)的執(zhí)行環(huán)境。 線程調(diào)
3、度。,2020年7月15日星期三,6,4級調(diào)度的關(guān)系,2020年7月15日星期三,7,在多道批處理系統(tǒng)中,存在著作業(yè)調(diào)度和進(jìn)程調(diào)度。但是,在分時系統(tǒng)和實(shí)時系統(tǒng)中,一般不存在作業(yè)調(diào)度,而只有進(jìn)程調(diào)度、交換調(diào)度和線程調(diào)度。這是因?yàn)樵诜謺r系統(tǒng)和實(shí)時系統(tǒng)中,為了縮短響應(yīng)時間或?yàn)榱藵M足用戶需求的截止時間,作業(yè)不是建立在外存,而是直接建立在內(nèi)存中。在這些系統(tǒng)中,一旦用戶和系統(tǒng)的交互開始,用戶馬上要進(jìn)行控制。因而,這些系統(tǒng)中沒有作業(yè)提交狀態(tài)和后備狀態(tài)。它們的輸入信息經(jīng)過終端緩沖區(qū)為系統(tǒng)所接收,或者立即處理,或者經(jīng)交換調(diào)度暫存外存中。,2020年7月15日星期三,8,進(jìn)程調(diào)度方式,非搶占式(不可剝奪方式):即
4、使就緒隊(duì)列中的某個進(jìn)程的優(yōu)先級高于正在運(yùn)行進(jìn)程的優(yōu)先級,也要等運(yùn)行進(jìn)程主動讓出處理機(jī)后高優(yōu)先級進(jìn)程才能得到處理機(jī)。 搶占式(可剝奪方式):是指當(dāng)就緒隊(duì)列中某一進(jìn)程的優(yōu)先級高于正在運(yùn)行的進(jìn)程優(yōu)先級時,系統(tǒng)可剝奪正在運(yùn)行進(jìn)程的處理機(jī)的使用權(quán)(即使分配給它的時間片還沒有用完),而使高優(yōu)先級的進(jìn)程搶占處理機(jī)。,2020年7月15日星期三,9,引起進(jìn)程調(diào)度的時機(jī),(1) 正在執(zhí)行的進(jìn)程執(zhí)行完畢。這時,如果不選擇新的就緒進(jìn)程執(zhí)行,將浪費(fèi)處理機(jī)資源。 (2) 執(zhí)行中進(jìn)程自己調(diào)用阻塞原語將自己阻塞起來進(jìn)入睡眠等待狀態(tài)。 (3) 執(zhí)行中進(jìn)程調(diào)用了P原語操作,從而因資源不足而被阻塞;或調(diào)用了V原語操作激活了等待資
5、源的進(jìn)程隊(duì)列。 (4) 執(zhí)行中進(jìn)程提出IO請求后被阻塞。 (5) 在分時系統(tǒng)中時間片已經(jīng)用完。 (6) 在執(zhí)行完系統(tǒng)調(diào)用,在系統(tǒng)程序返回用戶進(jìn)程時,可認(rèn)為系統(tǒng)進(jìn)程執(zhí)行完畢,從而可調(diào)度選擇一新的用戶進(jìn)程執(zhí)行。 以上都是在CPU執(zhí)行不可剝奪方式下所引起進(jìn)程調(diào)度的原因。在CPU執(zhí)行方式是可剝奪時,還有: (7) 就緒隊(duì)列中的某進(jìn)程的優(yōu)先級變得高于當(dāng)前執(zhí)行進(jìn)程的優(yōu)先級,從而也將引發(fā)進(jìn)程調(diào)度。,2020年7月15日星期三,10,進(jìn)程調(diào)度程序的功能,(1)記錄系統(tǒng)中所有進(jìn)程的有關(guān)信息。作為進(jìn)程調(diào)度的準(zhǔn)備,進(jìn)程管理模塊必須將系統(tǒng)中各進(jìn)程的執(zhí)行情況和狀態(tài)特征記錄在各進(jìn)程的PCB表中。并且,進(jìn)程管理模式根據(jù)各進(jìn)
6、程的狀態(tài)特征和資源需求,將各進(jìn)程的PCB表排成相應(yīng)的隊(duì)列并進(jìn)行動態(tài)隊(duì)列轉(zhuǎn)接。進(jìn)程調(diào)度模塊通過PCB變化來掌握系統(tǒng)中所有進(jìn)程的執(zhí)行情況和狀態(tài)特征,并在適當(dāng)?shù)臅r機(jī)從就緒隊(duì)列中選擇出一個進(jìn)程占據(jù)處理機(jī)。 (2)確定處理機(jī)的分配原則。即按照一定的策略選擇一個處于就緒狀態(tài)的進(jìn)程,使其獲得處理機(jī)執(zhí)行。同時還確定將處理機(jī)分配給進(jìn)程使用的時間片大小。根據(jù)不同的系統(tǒng)設(shè)計(jì)目的,有各種各樣的選擇策略,例如系統(tǒng)開銷較少的靜態(tài)優(yōu)先數(shù)調(diào)度法,適合于分時系統(tǒng)的輪轉(zhuǎn)法和多級反饋輪轉(zhuǎn)法等。這些選擇策略決定了調(diào)度算法的性能。,2020年7月15日星期三,11,進(jìn)程調(diào)度程序的功能(續(xù)),(3)分配處理機(jī)。 (4)切換進(jìn)程上下文。一
7、個進(jìn)程的上下文(context)包括進(jìn)程的狀態(tài)、有關(guān)變量和數(shù)據(jù)結(jié)構(gòu)的值、硬件寄存器的值和PCB以及有關(guān)程序等。一個進(jìn)程的執(zhí)行是在進(jìn)程的上下文中執(zhí)行。當(dāng)正在執(zhí)行的進(jìn)程由于某種原因要讓出處理機(jī)時,系統(tǒng)要做進(jìn)程上下文切換,以使另一個進(jìn)程得以執(zhí)行。當(dāng)進(jìn)行上下文切換時,系統(tǒng)要首先檢查是否允許做上下文切換。然后,系統(tǒng)要保留有關(guān)被切換進(jìn)程的足夠信息,以便以后切換回該進(jìn)程時,順利恢復(fù)該進(jìn)程的執(zhí)行。在系統(tǒng)保留了CPU現(xiàn)場之后,調(diào)度程序選擇一個新的處于就緒狀態(tài)的進(jìn)程,并裝配該進(jìn)程的上下文,使CPU的控制權(quán)轉(zhuǎn)換到被選中進(jìn)程中。 (5)回收處理機(jī)。,2020年7月15日星期三,12,調(diào)度算法,1. 先來先服務(wù)(FCF
8、S)調(diào)度算法 將就緒進(jìn)程按提交順序或變?yōu)榫途w狀態(tài)的先后排成隊(duì)列,并按照先來先服務(wù)的方式進(jìn)行調(diào)度處理,是一種最普遍和最簡單的方法。在沒有特殊理由要優(yōu)先調(diào)度進(jìn)程時,從處理的角度來看,F(xiàn)CFS方式是一種最合適的方法,無論是追加還是取出一個隊(duì)列元素在操作上都是最簡單的。 直觀看,該算法在一般意義下是公平的。即每個進(jìn)程都按照它們在隊(duì)列中等待時間長短來決定它們是否優(yōu)先享受服務(wù)。不過對于那些執(zhí)行時間較短的進(jìn)程來說,如果它們在某些執(zhí)行時間很長的進(jìn)程之后到達(dá),則它們將等待很長時間。在實(shí)際操作系統(tǒng)中,盡管很少單獨(dú)使用FCFS算法,但和其他一些算法配合起來,F(xiàn)CFS算法還是使用得相當(dāng)多的。例如基于優(yōu)先級的調(diào)度算法就
9、是對具有同樣優(yōu)先級的進(jìn)程采用的FCFS方式。,2020年7月15日星期三,13,調(diào)度算法(續(xù)),2. 輪轉(zhuǎn)調(diào)度算法(round robin scheduling) 輪轉(zhuǎn)法的基本思路是讓每個進(jìn)程在就緒隊(duì)列中的等待時間與享受服務(wù)的時間成比例。輪轉(zhuǎn)法的基本概念是將CPU的處理時間分成固定大小的時間片。如果一個進(jìn)程在被調(diào)度選中之后用完了系統(tǒng)規(guī)定的時間片,但未完成要求的任務(wù),則它自行釋放自己所占有的CPU而排到就緒隊(duì)列的末尾,等待下一次調(diào)度。同時,進(jìn)程調(diào)度程序又去調(diào)度當(dāng)前就緒隊(duì)列中的第一個進(jìn)程或作業(yè)。輪轉(zhuǎn)法的原理見圖。 顯然,輪轉(zhuǎn)法只能用來調(diào)度分配那些可以搶占的資源。將它們隨時剝奪再分配給別的進(jìn)程。CP
10、U是可搶占資源的一種。但如打印機(jī)等資源是不可搶占的。由于作業(yè)調(diào)度是對除了CPU之外的所有系統(tǒng)硬件資源的分配,其中包含有不可搶占資源,所以作業(yè)調(diào)度不使用輪轉(zhuǎn)法。,2020年7月15日星期三,14,調(diào)度算法(續(xù)),在輪轉(zhuǎn)法中,時間片長度的選取非常重要。首先,時間片長度的選擇會直接影響系統(tǒng)開銷和響應(yīng)時間。如果時間片長度過短,則調(diào)度程序剝奪處理機(jī)的次數(shù)增多。這將使進(jìn)程上下文切換次數(shù)也大大增加,從而加重系統(tǒng)開銷。反過來,如果時間片長度選擇過長,比方說一個時間片能保證就緒隊(duì)列中所需執(zhí)行時間最長的進(jìn)程能執(zhí)行完畢,則輪轉(zhuǎn)法變成了先來先服務(wù)法。 此時間片值的設(shè)置可以是固定的(固定周期輪轉(zhuǎn)),也可以是可變的(可變
11、周期輪轉(zhuǎn))。 RR算法主要用于分時系統(tǒng)或事務(wù)處理系統(tǒng),可保證對各終端用戶的及時響應(yīng)。但它對偏重CPU的進(jìn)程和偏重I/O的進(jìn)程有不同的處理結(jié)果,可以采用虛擬時間片輪轉(zhuǎn)(VRR)策略來避免這個問題。新加入的特性是附加一個FCFS策略隊(duì)列來收集從I/O等待中釋放的進(jìn)程。,2020年7月15日星期三,15,3. 多級反饋輪轉(zhuǎn)法 在輪轉(zhuǎn)法中,加入到就緒隊(duì)列的進(jìn)程有三種情況,一種是分給它的時間片用完,但進(jìn)程還未完成,回到就緒隊(duì)列的末尾等待下次調(diào)度去繼續(xù)執(zhí)行。另一種情況是分給該進(jìn)程的時間片并未用完,只是因?yàn)檎埱驣O或由于進(jìn)程的互斥與同步關(guān)系而被阻塞。當(dāng)阻塞解除之后再回到就緒隊(duì)列。再有一種情況就是新創(chuàng)建進(jìn)程進(jìn)
12、入就緒隊(duì)列。如果對這些進(jìn)程區(qū)別對待,給予不同的優(yōu)先級和時間片,從直觀上看,可望進(jìn)一步改善系統(tǒng)服務(wù)質(zhì)量和效率。例如,可把就緒隊(duì)列按照進(jìn)程到達(dá)就緒隊(duì)列的類型和進(jìn)程被阻塞時的阻塞原因分成不同的就緒隊(duì)列,每個隊(duì)列按FCFS原則排列,各隊(duì)列之間的進(jìn)程享有不同的優(yōu)先級,但同一隊(duì)列內(nèi)優(yōu)先級相同。這樣,當(dāng)一個進(jìn)程在執(zhí)行完它的時間片之后,或從睡眠中被喚醒以及被創(chuàng)建之后,將進(jìn)入不同的就緒隊(duì)列。多級反饋輪轉(zhuǎn)法與優(yōu)先級法在原理上的區(qū)別是,一個進(jìn)程在它執(zhí)行結(jié)束之前,可能需要反復(fù)多次通過反饋循環(huán)執(zhí)行,而不是優(yōu)先級法中的一次執(zhí)行。,調(diào)度算法(續(xù)),2020年7月15日星期三,16,2020年7月15日星期三,17,調(diào)度算法
13、(續(xù)),4. 優(yōu)先級法 首先,系統(tǒng)或用戶按某種原則為進(jìn)程指定一個優(yōu)先級來表示該進(jìn)程所享有的調(diào)度優(yōu)先權(quán)。該算法的核心是確定進(jìn)程的優(yōu)先級。這種算法可以是搶占式也可是非搶占式的。 確定優(yōu)先級的方法:靜態(tài)法和動態(tài)法。 靜態(tài)法根據(jù)進(jìn)程的靜態(tài)特性在進(jìn)程執(zhí)行之前就確定它們的優(yōu)先級,而且在執(zhí)行過程中一直保持不變。動態(tài)法則是將進(jìn)程的靜態(tài)特性與動態(tài)特性結(jié)合起來確定進(jìn)程的優(yōu)先級而且隨著進(jìn)程的運(yùn)行,其優(yōu)先級不斷變化。,2020年7月15日星期三,18,進(jìn)程的靜態(tài)優(yōu)先級確定原則可以是: (1) 按進(jìn)程的類型給予不同的優(yōu)先級。例如,在有些系統(tǒng)中,進(jìn)程被劃分為系統(tǒng)進(jìn)程和用戶進(jìn)程。系統(tǒng)進(jìn)程享有比用戶進(jìn)程高的優(yōu)先級。對于用戶進(jìn)
14、程來說,則可以分為: IO繁忙的進(jìn)程, CPU繁忙的進(jìn)程, IO與CPU均衡的進(jìn)程, 其他進(jìn)程。 對系統(tǒng)進(jìn)程,也可以根據(jù)其所要完成的功能劃分為不同的類型,例如,調(diào)度進(jìn)程、IO進(jìn)程、中斷處理進(jìn)程、存儲管理進(jìn)程等。這些進(jìn)程還可進(jìn)一步劃分為不同類型和賦予不同的優(yōu)先級。例如,在操作系統(tǒng)中,對于鍵盤中斷的處理優(yōu)先級和對于電源掉電中斷的處理優(yōu)先級是不相同的。 (2) 將作業(yè)的靜態(tài)優(yōu)先級作為它所屬進(jìn)程的優(yōu)先級,2020年7月15日星期三,19,動態(tài)優(yōu)先級 基于靜態(tài)優(yōu)先級的調(diào)度算法實(shí)現(xiàn)簡單,系統(tǒng)開銷小,但由于靜態(tài)優(yōu)先級一旦確定之后,直到執(zhí)行結(jié)束為止始終保持不變,從而系統(tǒng)效率較低,調(diào)度性能不高?,F(xiàn)在的操作系統(tǒng)中
15、,如果使用優(yōu)先級調(diào)度的話,則大多采用動態(tài)優(yōu)先級的調(diào)度策略。 進(jìn)程的動態(tài)優(yōu)先級一般根據(jù)以下原則確定: (1) 根據(jù)進(jìn)程占有CPU時間的長短來決定。一個進(jìn)程占有處理機(jī)的時間愈長,則在被阻塞之后再次獲得調(diào)度的優(yōu)先級就越低,反之,其獲得調(diào)度的可能性就會越大。 (2) 根據(jù)就緒進(jìn)程等待CPU的時間長短來決定。一個就緒進(jìn)程在就緒隊(duì)列中等待的時間越長,則它獲得調(diào)度選中的優(yōu)先級就越高。 由于動態(tài)優(yōu)先級隨時間的推移而變化,系統(tǒng)要經(jīng)常計(jì)算各進(jìn)程的優(yōu)先級,因此,系統(tǒng)要為此付出一定的開銷。,2020年7月15日星期三,20,5. 最短進(jìn)程優(yōu)先法(shortest process first) 最短作業(yè)優(yōu)先法(SPF)
16、就是從就緒隊(duì)列中選擇那些估計(jì)需要執(zhí)行時間最短的進(jìn)程將處理機(jī)分配給它。 6. 最高響應(yīng)比優(yōu)先法(highest responseratio next) 最高響應(yīng)比優(yōu)先法(HRN)是對FCFS方式和SJF 方式的一種綜合平衡。HRN調(diào)度策略同時考慮每個作業(yè)的等待時間長短和估計(jì)需要的執(zhí)行時間長短,從中選出響應(yīng)比最高的作業(yè)投入執(zhí)行。,調(diào)度算法(續(xù)),2020年7月15日星期三,21,實(shí)時調(diào)度算法,實(shí)現(xiàn)實(shí)時調(diào)度的基本條件 提供必要的信息(就緒時間、截止時間、處理時間、資源優(yōu)先級) 系統(tǒng)處理能力強(qiáng) 采用搶占式調(diào)度機(jī)制 具有快速切換機(jī)制 實(shí)時調(diào)度算法的分類 1)非搶占式調(diào)度算法 : 非搶占式輪轉(zhuǎn)調(diào)度算法 非
17、搶占式優(yōu)先調(diào)度算法 2)搶占式調(diào)度算法: 基于時鐘中斷的搶占優(yōu)先調(diào)度算法 立即搶占優(yōu)先權(quán)調(diào)度算法。,2020年7月15日星期三,22,2020年7月15日星期三,23,常用的幾種實(shí)時調(diào)度算法,1)最早截止時間優(yōu)先即EDF(Earliest Deadline First)算法 EDF算法用于非搶占調(diào)度方式,2020年7月15日星期三,24,2)最低松弛度優(yōu)先(LLF)算法 該算法是根據(jù)任務(wù)緊急(或松弛)的程度,來確定任務(wù)的優(yōu)先級。該算法主要用于可搶占調(diào)度方式中。 假如在一個實(shí)時系統(tǒng)中,有兩個周期性實(shí)時任務(wù)A和B,任務(wù)A要求每 20 ms執(zhí)行一次,執(zhí)行時間為 10 ms;任務(wù)B只要求每50 ms執(zhí)
18、行一次,執(zhí)行時間為 25 ms。,A和B任務(wù)每次必須完成的時間,2020年7月15日星期三,25,在剛開始時(t1=0),A1必須在20ms時完成,而它本身運(yùn)行又需 10 ms,可算出A1的松弛度為10ms;B1必須在50ms時完成, 而它本身運(yùn)行就需25 ms,可算出B1的松弛度為25 ms,故調(diào)度程序應(yīng)先調(diào)度A1執(zhí)行。在t2=10 ms時,A2的松弛度可按下式算出: A2的松弛度=必須完成時間-其本身的運(yùn)行時間-當(dāng)前時間 =40 ms-10 ms-10 ms=20 ms 類似地,可算出B1的松弛度為15ms,調(diào)度程序應(yīng)選擇B2運(yùn)行。t3=30 ms時,A2的松弛度已減為0,B1的松弛度為1
19、5 ms,于是調(diào)度程序應(yīng)搶占B1的處理機(jī)而調(diào)度A2運(yùn)行.,利用ELLF算法進(jìn)行調(diào)度的情況,2020年7月15日星期三,26,其它算法,時限調(diào)度算法與頻率單調(diào)調(diào)度算法。時限調(diào)度算法是一種以滿足用戶要求的時限為調(diào)度原則的算法。在實(shí)時系統(tǒng)中的用戶要求時限有兩種,即處理開始時限和處理結(jié)束時限。時限調(diào)度算法可以使用任一種時限。時限調(diào)度算法不可用于周期性調(diào)度與非周期性調(diào)度兩種。 時限調(diào)度算法的基本思想是:按用戶的時限要求順序設(shè)置優(yōu)先級,優(yōu)先級高者占據(jù)處理機(jī),也就是說,時限要求最近的任務(wù)優(yōu)先占有處理機(jī)。時限調(diào)度是搶先式的。搶先式時限調(diào)度算法必須把新到達(dá)任務(wù)的時限要求和當(dāng)前正在執(zhí)行任務(wù)的時限要求進(jìn)行比較,如果
20、新到達(dá)任務(wù)的時限要求更近,則應(yīng)執(zhí)行新到達(dá)的任務(wù)。 時限調(diào)度算法也可以用于非周期性任務(wù)調(diào)度。,2020年7月15日星期三,27,頻率單調(diào)調(diào)度算法是一種被廣泛用于多周期性實(shí)時處理的調(diào)度算法。 頻率單調(diào)調(diào)度算法的基本原理是頻率越低(周期越長)的任務(wù)的優(yōu)先級越低。 另外,設(shè)任務(wù)周期問題,任務(wù)的執(zhí)行時間為C,則使用頻率單調(diào)調(diào)度算法的必要條件是C T。,2020年7月15日星期三,28,3.8 死鎖,2020年7月15日星期三,29,死鎖例子,一個由于申請不同類型資源而產(chǎn)生死鎖的例子 設(shè)系統(tǒng)有一臺打印機(jī)(R1)一臺掃描儀(R2),兩進(jìn)程共享這兩臺設(shè)備。 用信號量S1表示R1是否可用,用信號量S2表示R2是
21、否可用, S1、 S2初值為1。,這兩個進(jìn)程在并發(fā)執(zhí)行過程中,可能會發(fā)生死鎖。大家可以思考一下,如何修改,進(jìn)程才不會發(fā)生死鎖。,2020年7月15日星期三,30,死鎖的概念,所謂死鎖,是指各并發(fā)進(jìn)程彼此互相等待對方所擁有的資源,且這些并發(fā)進(jìn)程在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各并發(fā)進(jìn)程不能繼續(xù)向前推進(jìn)的狀態(tài)。下圖是兩個進(jìn)程發(fā)生死鎖時的例子。,2020年7月15日星期三,31,關(guān)于死鎖的一些結(jié)論,參與死鎖的進(jìn)程最少是兩個 參與死鎖的進(jìn)程至少有兩個已經(jīng)占有資源 參與死鎖的所有進(jìn)程都在等待資源 參與死鎖的進(jìn)程是當(dāng)前系統(tǒng)中所有進(jìn)程的子集 注:如果死
22、鎖發(fā)生,會浪費(fèi)大量系統(tǒng)資源,甚至導(dǎo)致系統(tǒng)崩潰。,2020年7月15日星期三,32,永久性資源和臨時性資源,永久性資源:可以被多個進(jìn)程多次使用(可再用資源) 可搶占資源 不可搶占資源 臨時性資源:只可使用一次的資源;如信號量,中斷信號,同步信號等(可消耗性資源) “申請-分配-使用-釋放”模式,2020年7月15日星期三,33,引起死鎖的原因,有限資源的競爭 并發(fā)進(jìn)程推進(jìn)的順序不當(dāng),2020年7月15日星期三,34,1. 競爭系統(tǒng)資源,若系統(tǒng)中只有一臺打印機(jī)R1和一臺讀卡機(jī)R2,可供進(jìn)程P1和P2共享。若形成環(huán)路,這樣會產(chǎn)生死鎖。,2020年7月15日星期三,35,2.進(jìn)程的推進(jìn)順序不當(dāng),在進(jìn)程
23、P1和P2并發(fā)執(zhí)行時,按照下圖曲線所示順序推進(jìn)時,兩進(jìn)程會順利完成,我們稱這種推進(jìn)順序是合法的。若按曲線的順序推進(jìn)時,進(jìn)入不安全區(qū)D內(nèi),兩進(jìn)程再推進(jìn)會產(chǎn)生死鎖。,2020年7月15日星期三,36,系統(tǒng)資源類型,可剝奪資源:存儲器 和不可剝奪資源:如打印機(jī) 死鎖的起因是并發(fā)進(jìn)程的資源競爭。產(chǎn)生死鎖的根本原因在于系統(tǒng)提供的資源個數(shù)少于并發(fā)進(jìn)程所要求的該類資源數(shù)。顯然,由于資源的有限性,不可能為所有要求資源的進(jìn)程無限制地提供資源。但是,可以采用適當(dāng)?shù)馁Y源分配算法,以達(dá)到消除死鎖的目的。為此,先看看產(chǎn)生死鎖的必要條件。,2020年7月15日星期三,37,產(chǎn)生死鎖的必要條件,(1) 互斥條件。并發(fā)進(jìn)程所
24、要求和占有的資源是不能同時被兩個以上進(jìn)程使用或操作的,進(jìn)程對它所需要的資源進(jìn)行排他性控制。 (2) 不剝奪條件。進(jìn)程所獲得的資源在未使用完畢之前,不能被其他進(jìn)程強(qiáng)行剝奪,而只能由獲得該資源的進(jìn)程自己釋放。 (3) 部分分配。進(jìn)程每次申請它所需要的一部分資源,在等待新資源的同時繼續(xù)占用已分配到的資源。 (4) 環(huán)路條件。存在一種進(jìn)程循環(huán)鏈,鏈中每一個進(jìn)程已獲得的資源同時被下一個進(jìn)程所請求。 顯然,只要使上述4個必要條件中的某一個不滿足,則死鎖就可以排除。,2020年7月15日星期三,38,饑餓(starvation),是指系統(tǒng)資源分配不合理 與死鎖區(qū)別:處于饑餓態(tài)的進(jìn)程可能 是一個,也可能 是多
25、個。而處于死鎖狀態(tài)的進(jìn)程至少是兩個;饑餓不是對資源的循環(huán)等待,而是單向等待。處于饑餓態(tài)的進(jìn)程所等待的事件不是永遠(yuǎn)不發(fā)生,而是在發(fā)生時總是被別的進(jìn)程先響應(yīng)?!梆囸I”現(xiàn)象是可以避免的,2020年7月15日星期三,39,死鎖的排除方法,解決死鎖的方法一般可分為預(yù)防、避免、檢測與恢復(fù)等三種。預(yù)防是采用某種策略,限制并發(fā)進(jìn)程對資源的請求,從而使得死鎖的必要條件在系統(tǒng)執(zhí)行的任何時間都不滿足。避免是指系統(tǒng)在分配資源時,根據(jù)資源的使用情況提前做出預(yù)測,從而避免死鎖的發(fā)生。死鎖檢測與恢復(fù)是指系統(tǒng)設(shè)有專門的機(jī)構(gòu),當(dāng)死鎖發(fā)生時,該機(jī)構(gòu)能夠檢測到死鎖發(fā)生的位置和原因,并能通過外力破壞死鎖發(fā)生的必要條件,從而使得并發(fā)進(jìn)
26、程從死鎖狀態(tài)中恢復(fù)出來。 通過預(yù)防和避免的手段達(dá)到排除死鎖的目的是一件十分困難的事。死鎖的檢測和恢復(fù)則不必花費(fèi)多少執(zhí)行時間就能發(fā)現(xiàn)死鎖和從死鎖中恢復(fù)出來。因此,在實(shí)際操作系統(tǒng)中大都使用檢測與恢復(fù)法排除死鎖,2020年7月15日星期三,40,死鎖預(yù)防,一種方法是打破資源的互斥和不可剝奪這兩個條件,例如允許進(jìn)程同時訪問某些資源等。這種方法不能解決訪問那些不允許被同時訪問的資源時所帶來的死鎖問題。另一種方法則是打破資源的部分分配這個死鎖產(chǎn)生的必要條件。即預(yù)先分配各并發(fā)進(jìn)程所需要的全部資源。如某個進(jìn)程的資源得不到滿足時,則安排一定的等待次序讓其他進(jìn)程釋放資源。但是,這種方法也有如下缺點(diǎn): (1) 在許
27、多情況下,一個進(jìn)程在執(zhí)行之前不可能提出它所需要的全部資源。 (2) 無論所需資源何時用到,一個進(jìn)程只有在所有要求資源都得到滿足之后才開始執(zhí)行。 (3) 對于那些不經(jīng)常使用的資源,進(jìn)程在生存過程期間一直占用它們是一種極大的浪費(fèi)。 (4) 降低了進(jìn)程的并發(fā)性。,2020年7月15日星期三,41,另外一種死鎖的預(yù)防方法是打破死鎖的環(huán)路條件。即把資源分類按順序排列,使進(jìn)程在申請、保持資源時不形成環(huán)路。如有m種資源,則列出R1R2Rm。若進(jìn)程Pi保持了資源Ri,則它只能申請比Ri級別更高的資源Rj(Ri Rj )。釋放資源時必須是Rj先于Ri被釋放,從而避免環(huán)路的產(chǎn)生。這種方法的缺點(diǎn)是限制了進(jìn)程對資源的
28、請求,而且對資源的分類編序也耗去一定的系統(tǒng)開銷。,2020年7月15日星期三,42,死鎖避免,死鎖避免定義:在系統(tǒng)運(yùn)行過程中,對進(jìn)程發(fā)出的每一個系統(tǒng)能夠滿足的資源申請進(jìn)行動態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配。 死鎖避免可被稱為動態(tài)預(yù)防,因?yàn)橄到y(tǒng)采用動態(tài)分配資源,在分配過程中預(yù)測出死鎖發(fā)生的可能性并加以避免的方法。 預(yù)防死鎖的幾種策略,會嚴(yán)重地?fù)p害了系統(tǒng)性能。因此要施加較弱的限制,從而獲得較滿意得系統(tǒng)性能來避免死鎖。 由于在避免死鎖的策略中,允許進(jìn)程動態(tài)地申請資源。因而,系統(tǒng)在進(jìn)行資源分配之前預(yù)先計(jì)算資源分配的安全性。若此次分配不會導(dǎo)致系統(tǒng)
29、進(jìn)入不安全狀態(tài),則將資源分配給進(jìn)程;否則,進(jìn)程等待。其中最具有代表性的避免死鎖算法是銀行家算法。,2020年7月15日星期三,43,安全狀態(tài)與不安全狀態(tài),安全狀態(tài)指系統(tǒng)能按某種進(jìn)程順序來為每個進(jìn)程分配其所需資源,直至最大需求,使每個進(jìn)程都可順序完成。若系統(tǒng)不存在這樣一個序列,則稱系統(tǒng)處于不安全狀態(tài)。,2020年7月15日星期三,44,1)安全序列,一個進(jìn)程序列P1,Pn是安全的,如果對于每一個進(jìn)程Pi(1in),它以后尚需要的資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj (j i )當(dāng)前占有資源量之和,系統(tǒng)處于安全狀態(tài)。 (安全狀態(tài)一定是沒有死鎖發(fā)生的),2020年7月15日星期三,45,2)
30、 安全狀態(tài)之例,我們通過一個例子來說明安全性。假定系統(tǒng)中有三個進(jìn)程P1、 P2和P3,共有12臺磁帶機(jī)。進(jìn)程P1總共要求10臺磁帶機(jī),P2和P3分別要求4臺和9臺。假設(shè)在T0時刻,進(jìn)程P1、P2和P3已分別獲得5臺、2臺和2臺磁帶機(jī),尚有3臺空閑未分配,如下表所示:,2020年7月15日星期三,46,3) 由安全狀態(tài)向不安全狀態(tài)的轉(zhuǎn)換,如果不按照安全序分配資源,則系統(tǒng)可能會由安全狀態(tài)進(jìn)入不安全狀態(tài)。例如,在T0時刻以后,P3又請求1臺磁帶機(jī),若此時系統(tǒng)把剩余3臺中的1臺分配給P3,則系統(tǒng)便進(jìn)入不安全狀態(tài)。 因?yàn)?,此時也無法再找到一個安全序列, 例如,把其余的2臺分配給P2,這樣,在P2完成后只
31、能釋放出4臺,既不能滿足P1尚需5臺的要求,也不能滿足P3尚需6臺的要求,致使它們都無法推進(jìn)到完成,彼此都在等待對方釋放資源,即陷入僵局,結(jié)果導(dǎo)致死鎖。 不安全狀態(tài):不存在一個安全序列,不安全狀態(tài)可能進(jìn)而導(dǎo)致死鎖,2020年7月15日星期三,47,利用銀行家算法避免死鎖,銀行家算法中的數(shù)據(jù)結(jié)構(gòu) (1) 可利用資源向量Available。這是一個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。如果Availablej=K,則表示系統(tǒng)中現(xiàn)有Rj類資源K個。 (2) 最大需求矩陣Max。這是一個n
32、m的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果Maxi,j=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。,2020年7月15日星期三,48,銀行家算法(續(xù)),(3) 分配矩陣Allocation。這也是一個nm的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocationi,j=K,則表示進(jìn)程i當(dāng)前已分得Rj類資源的數(shù)目為K。 (4) 需求矩陣Need。這也是一個nm的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。如果Needi,j=K,則表示進(jìn)程i還需要Rj類資源K個,方能完成其任務(wù)。 顯然有:Needi,j=Maxi,j-Allocation
33、i,j,2020年7月15日星期三,49,銀行家算法具體步驟,設(shè)Requesti是進(jìn)程Pi的請求向量,如果Requestij=K,表示進(jìn)程Pi需要K個Rj類型的資源。當(dāng)Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查: (1) 如果RequestijNeedi,j,便轉(zhuǎn)向步驟2;否則認(rèn)為出錯,因?yàn)樗枰馁Y源數(shù)已超過它所宣布的最大值。 (2) 如果RequestijAvailablej,便轉(zhuǎn)向步驟(3);否則, 表示尚無足夠資源,Pi須等待。,2020年7月15日星期三,50,銀行家算法具體步驟,(3) 系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值: Availablej=Avail
34、ablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,j=Needi,j-Requestij; (4) 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程Pi等待。,2020年7月15日星期三,51,安全性 判斷算法,(1) 設(shè)置兩個向量: 工作向量Work: 它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目,它含有m個元素,在執(zhí)行安全算法開始時,Work=Available; Finish: 它表示系
35、統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開始時先做Finishi=false; 當(dāng)有足夠資源分配給進(jìn)程時, 再令Finishi=true。 (2) 從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程: Finishi=false; Needi,jWorkj; 若找到, 執(zhí)行步驟(3), 否則,執(zhí)行步驟(4)。,2020年7月15日星期三,52,安全性 判斷算法(續(xù)),(3) 當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行: Workj=Worki+Allocationi,j; Finishi=true; go to step 2; (4) 如果所有進(jìn)程的Finishi=
36、true都滿足, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。,2020年7月15日星期三,53,銀行家算法之例,假定系統(tǒng)中有五個進(jìn)程P0, P1, P2, P3, P4和三類資源A, B, C,各種資源的數(shù)量分別為10、5、7,在T0時刻的資源分配情況如圖 所示。,T0時刻的資源分配表,2020年7月15日星期三,54,(1) T0時刻的安全性:,T0時刻的安全序列,2020年7月15日星期三,55,(2) P1請求資源:P1發(fā)出請求向量Request1(1,0,2),系統(tǒng)按銀行家算法進(jìn)行檢查: Request1(1, 0, 2)Need1(1, 2, 2) Request1(1, 0
37、, 2)Available1(3, 3, 2) 系統(tǒng)先假定可為P1分配資源,并修改Available, Allocation1和Need1向量,由此形成的資源變化情況如圖 中的圓括號所示。 再利用安全性算法檢查此時系統(tǒng)是否安全。,2020年7月15日星期三,56,P1申請資源時的安全性檢查,2020年7月15日星期三,57,(3) P4請求資源:P4發(fā)出請求向量Request4(3,3,0),系統(tǒng)按銀行家算法進(jìn)行檢查: Request4(3, 3, 0)Need4(4, 3, 1); Request4(3, 3, 0) Available(2, 3, 0),讓P4等待。(4) P0請求資源:P
38、0發(fā)出請求向量Requst0(0,2,0),系統(tǒng)按銀行家算法進(jìn)行檢查: Request0(0, 2, 0)Need0(7, 4, 3); Request0(0, 2, 0)Available(2, 3, 0); 系統(tǒng)暫時先假定可為P0分配資源,并修改有關(guān)數(shù)據(jù),如圖 所示。,2020年7月15日星期三,58,為P0分配資源后的有關(guān)資源數(shù)據(jù),2020年7月15日星期三,59,死鎖的檢測和恢復(fù)(一般系統(tǒng)使用),它是死鎖發(fā)生后的事后處理技術(shù)。它是指系統(tǒng)設(shè)有專門的機(jī)構(gòu),當(dāng)死鎖發(fā)生時該機(jī)構(gòu)能夠檢測到死鎖發(fā)生的位置和原因,并通過外力破壞死鎖發(fā)生的必要條件,使得并發(fā)進(jìn)程從死鎖狀態(tài)中恢復(fù)出來。 允許死鎖發(fā)生,操
39、作系統(tǒng)不斷監(jiān)視系統(tǒng)進(jìn)展情況,判斷死鎖是否發(fā)生。一旦死鎖發(fā)生則采取專門的措施,解除死鎖并以最小的代價恢復(fù)操作系統(tǒng)運(yùn)行 當(dāng)進(jìn)程進(jìn)行資源請求時,死鎖檢測算法檢查并發(fā)進(jìn)程組是否構(gòu)成資源的請求和保持環(huán)路。有限狀態(tài)轉(zhuǎn)移圖和petriNet等技術(shù)都可用來有效地判斷死鎖發(fā)生。 死鎖的恢復(fù)辦法較多。最簡單的辦法是終止各鎖住進(jìn)程,或按一定的順序中止進(jìn)程序列,直至已釋放到有足夠的資源來完成剩下的進(jìn)程時為止。另外,也可以從被鎖住進(jìn)程強(qiáng)迫剝奪資源以解除死鎖。,60,3.9 線程,2020年7月15日星期三,61,線程的概念,進(jìn)程是程序的一次執(zhí)行過程和資源分配的基本單位。由此可知,即使是同一段程序,在不同的執(zhí)行時間,應(yīng)屬
40、于不同的進(jìn)程。那么,什么是線程(Thread)以及為什么在操作系統(tǒng)中要引入線程的概念呢? 事實(shí)上,引入線程主要是為了提高系統(tǒng)的執(zhí)行效率,減少處理機(jī)的空轉(zhuǎn)時間和調(diào)度切換(保護(hù)現(xiàn)場信息)的時間,以及便于系統(tǒng)管理。 一個進(jìn)程內(nèi)的基本調(diào)度單位稱為線程或稱為輕權(quán)進(jìn)程(Light weight process),這個調(diào)度單位既可以由操作系統(tǒng)內(nèi)核控制,也可以由用戶程序控制。,2020年7月15日星期三,62,線程與進(jìn)程的異同,可以從比較中進(jìn)一步理解線程的概念。 (1)進(jìn)程是資源分配的基本單位。所有與該進(jìn)程有關(guān)的資源,例如打印機(jī),輸入緩沖隊(duì)列等,都被記錄在進(jìn)程控制塊PCB中。以表示該進(jìn)程擁有這些資源或正在使用
41、它們。有時,為了對進(jìn)程的上述兩個特性進(jìn)行區(qū)分,規(guī)定線程為操作系統(tǒng)的基本調(diào)度單位,而進(jìn)程則為系統(tǒng)資源的者。 (2)當(dāng)發(fā)生進(jìn)程調(diào)度時,它擁有一個完整的虛擬地址空間,但不同的進(jìn)程擁有不同的虛擬地址空間存同時同一進(jìn)程內(nèi)的不同線程共享其所屬進(jìn)程的同一地址空間。 (3)線程只由相關(guān)堆棧、寄存器和線程控制塊(TCB)組成,寄存器用來存儲線程內(nèi)的局部變量,但不能存儲其它線程的相關(guān)變量,線程控制塊則用于記錄線程的有關(guān)信息,起到與PCB相對應(yīng)的一些功能。,2020年7月15日星期三,63,線程與進(jìn)程的異同,(4)進(jìn)程切換時涉及到有關(guān)資源指針的保存以及地址空間的變化等問題,線程切換時,由于同一進(jìn)程內(nèi)的線程共享資源和
42、地址空間,將不涉及資源信息的保存和地址變化問題,從而減少了操作系統(tǒng)的開銷時間。 (5)進(jìn)程的調(diào)度與切換都是由操作系統(tǒng)內(nèi)核完成,而線程則既可由操作系統(tǒng)內(nèi)核完成,也可由用戶程序進(jìn)行。 (6)在多線程操作系統(tǒng)中,線程是系統(tǒng)內(nèi)的執(zhí)行褓,而進(jìn)程不是。 (7)一個進(jìn)程內(nèi)的各個線程以及不同進(jìn)程內(nèi)的各個線程均可并發(fā)執(zhí)行,在多處理機(jī)系統(tǒng)中,它們可以被分派到不同的CPU上并行運(yùn)行。,2020年7月15日星期三,64,多線程系統(tǒng)中進(jìn)程與線程的關(guān)系,2020年7月15日星期三,65,并不是在所有的計(jì)算機(jī)系統(tǒng)中線程都是適用的。事實(shí)上在那些很少做進(jìn)程調(diào)度和切換的實(shí)時系統(tǒng)、個人數(shù)字助理系統(tǒng)中,由于任務(wù)的單一性,設(shè)置線程相反
43、會占用更多的內(nèi)存空間和寄存器。 使用線程的最大好處是在有多個任務(wù)需要處理機(jī)處理時,減少處理機(jī)的切換時間;而且,線程的創(chuàng)建和結(jié)束所需要的系統(tǒng)開銷也比進(jìn)程的創(chuàng)建和結(jié)束要小得多。由此,可以推出最適合使用線程的系統(tǒng)是多處理機(jī)系統(tǒng)。在多處理機(jī)系統(tǒng)中,同一用戶程序可以根據(jù)不同的功能劃分為不同的線程,放在不同的處理機(jī)上執(zhí)行。 在用戶程序可以按功能劃分為不同的小段時,單處理機(jī)系統(tǒng)也可因使用線程而簡化程序的結(jié)構(gòu)和提高執(zhí)行效率。,線程的適用范圍,2020年7月15日星期三,66,線程的分類,線程的兩個基本類型是:用戶級線程和系統(tǒng)級線程(核心級線型)。在同一個操作系統(tǒng)中,有的使用純用戶級線程,有的使用純核心級線程,
44、例如Windows NT和Os/2;有的則混合使用用戶及線程和核心級線程,例如Solaris 。 用戶級線程(user level threads)的管理過程全部由用戶程序完成,操作系統(tǒng)內(nèi)核只對進(jìn)程進(jìn)行管理。 為了對用戶級線程進(jìn)行管理,操作系統(tǒng)提供一個在用戶空間執(zhí)行的線程庫。該線程庫提供創(chuàng)建、調(diào)度、撤銷線程功能。同時該線程庫也提供線程間的通信,線程的執(zhí)行以及存儲線程上下文的功能。用戶級線程只使用戶堆棧和分配給所屬進(jìn)程的用戶寄存器。 線程的調(diào)度算法和調(diào)度過程完全由用戶自行選擇和確定。線程調(diào)度過程中僅進(jìn)行線程上下文的切換而不切換處理機(jī),而且切換僅在用戶本、用戶寄存器間進(jìn)行,與操作系統(tǒng)內(nèi)核無關(guān),所以
45、開銷相當(dāng)小。,2020年7月15日星期三,67,線程的分類,核心級線程(Kernel-level Threads)由操作系統(tǒng)內(nèi)核進(jìn)行管理,操作系統(tǒng)負(fù)責(zé)維護(hù)核心級線程的各種管理表格,負(fù)責(zé)線程在處理機(jī)上的調(diào)度和切換,并給應(yīng)用程序提供相應(yīng)的系統(tǒng)調(diào)用和應(yīng)用程序接口API,以使用戶程序可以創(chuàng)建、執(zhí)行、撤消線程。 與用戶線程不同,核心級線程既可以被調(diào)度到一個處理機(jī)上并發(fā)執(zhí)行,也可以被調(diào)度到不同的處理機(jī)上并行執(zhí)行。操作系統(tǒng)內(nèi)核既負(fù)責(zé)進(jìn)程的調(diào)度,也負(fù)責(zé)進(jìn)程內(nèi)不同線程的調(diào)度工作。因此,核心級線程不會出現(xiàn)進(jìn)程處于阻塞或等待狀態(tài),而線程處于執(zhí)行狀態(tài)的情況。 另外,核心級線程技術(shù)也可用于內(nèi)核程序自身,從而提高操作系統(tǒng)
46、內(nèi)核程序的執(zhí)行效率。 與用戶級線程相比,核心級線程的上下文切換時間要大于用戶級線程的上下文切換時間。,2020年7月15日星期三,68,線程的狀態(tài)及轉(zhuǎn)換,線程在執(zhí)行時也有它的相關(guān)特性。線程的狀態(tài)和同步用來反映線程的這些特性。 線程有3個基本狀態(tài),即執(zhí)行、就緒和阻塞。但是線程沒有進(jìn)程中的掛起狀態(tài)。也就是說,線程是一個只與內(nèi)存和寄存器相關(guān)的概念,它的內(nèi)容不會因交換而進(jìn)入外存。 針對線程的3種基本狀態(tài),存在5種基本操作來轉(zhuǎn)換線程的狀態(tài)。這5種基本操作是: (1) 派生(spawn):線程在進(jìn)程內(nèi)派生出來,它即可由進(jìn)程派生,也可由線程派生。用戶一般用系統(tǒng)調(diào)用(或相應(yīng)的庫函數(shù))派生自己的線程。,2020
47、年7月15日星期三,69,線程的狀態(tài)及轉(zhuǎn)換,一個新派生出來的線程具有相應(yīng)的數(shù)據(jù)結(jié)構(gòu)指針和變量,這些指針和變量作為寄存器上下文放在相應(yīng)的寄存器和堆棧中。 新派生線程被放入就緒隊(duì)列。 (2) 阻塞(Block):如果一個線程在執(zhí)行過程中需要等待某個事件發(fā)生,則被阻塞。阻塞時,寄存器上下文、程序計(jì)數(shù)器以及堆棧指針都會得到保證。 (3) 激活(unblock):如果阻塞線程的事件發(fā)生,則該線程被激活并進(jìn)入就緒隊(duì)列。 (4) 調(diào)度(schedule):選擇一個就緒線程進(jìn)入執(zhí)行狀態(tài)。 (5) 結(jié)束(Finish):如果一個線程執(zhí)行結(jié)束,它的寄存器上下文以及堆棧內(nèi)容等將被釋放。,2020年7月15日星期三,
48、70,線程的狀態(tài)和操作關(guān)系,需要注意的一點(diǎn)是,在某些情況下,某個線程被阻塞也可能導(dǎo)致該線程所屬的進(jìn)程被阻塞。,2020年7月15日星期三,71,線程的應(yīng)用,幾種典型的應(yīng)用是 (1) 服務(wù)器中的文件管理或通信控制。在局域網(wǎng)的文件服務(wù)器中,對文件的訪問要求可被服務(wù)器進(jìn)程派生出的線程進(jìn)行處理。由于服務(wù)器同時可能接受許多個文件訪問要求,則系統(tǒng)可以同時生成多個線程來進(jìn)行處理。如果計(jì)算機(jī)系統(tǒng)是多處理機(jī)的,這些線程還可以安排到不同的處理機(jī)上執(zhí)行。 (2) 前后臺處理。許多用戶都有過前后臺處理經(jīng)驗(yàn),即把一個計(jì)算量較大的程序或?qū)崟r性要求不高的程序安排在處理機(jī)空閑時執(zhí)行,即后臺方式。對于同一個進(jìn)程中的上述程序來說,線程可被用來減少處理機(jī)切換時間和提高執(zhí)行速度。 (3)異步處理。若程序中的兩部分在執(zhí)行上無順序規(guī)定,則這兩
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 砂漿抹面施工方案
- 柱亞克力燈箱施工方案
- 展廳裝飾裝修承包合同
- 管道除銹施工方案
- 4米高圍擋施工方案
- 手球館地坪施工方案
- 房屋粉刷安裝施工方案
- 堤壩護(hù)坡混凝土施工方案
- 反光漆施工方案
- 填筑施工方案
- 家鄉(xiāng)鹽城城市介紹江蘇鹽城介紹課件
- 市政工程施工安全檢查標(biāo)準(zhǔn)
- 銀行整村授信工作經(jīng)驗(yàn)材料工作總結(jié)匯報(bào)報(bào)告2篇
- 四川事業(yè)單位工作人員收入分配制度改革實(shí)施意見
- 陜西省2023第二屆長安杯大中小學(xué)國家安全知識競賽題庫及答案
- 基建礦井應(yīng)急救援預(yù)案之綜合應(yīng)急預(yù)案匯編(完整版)資料
- GA/T 830-2021尸體解剖檢驗(yàn)室建設(shè)規(guī)范
- 《PEP英語六年級下冊Unit3Readandwrite》東城虎英小學(xué)王曉惠
- GB/T 3778-2021橡膠用炭黑
- GB/T 210.1-2004工業(yè)碳酸鈉及其試驗(yàn)方法第1部分:工業(yè)碳酸鈉
- GB/T 19228.3-2012不銹鋼卡壓式管件組件第3部分:O形橡膠密封圈
評論
0/150
提交評論