處理機(jī)調(diào)度與死鎖
處理機(jī)調(diào)度:多道程序環(huán)境下,動(dòng)態(tài)的把處理機(jī)分配給就緒隊(duì)列中的一個(gè)進(jìn)程使之
執(zhí)行。提高處理機(jī)的利用率、改善系統(tǒng)性能,很大程度上取決于處理機(jī)調(diào)度的性能。
處理機(jī)調(diào)度便成為OS設(shè)計(jì)的中心問(wèn)題之一。分配的任務(wù)由處理機(jī)調(diào)度程序完成
處理機(jī)調(diào)度的基本概念
作業(yè)進(jìn)入系統(tǒng)駐留在外存的后備隊(duì)列上,再至調(diào)入內(nèi)存運(yùn)行完畢,可能要經(jīng)歷下述三級(jí)調(diào)度
高級(jí)調(diào)度
又稱作業(yè)調(diào)度或長(zhǎng)程調(diào)度(Long-Term Scheduling),接納調(diào)度(Admission Scheduling) 主要在早期批處理階段,處理在外存上的作業(yè)
決定外存后備隊(duì)列中的哪些作業(yè)調(diào)入內(nèi)存; ?為它們創(chuàng)建進(jìn)程、分配必要的資源; ?將新創(chuàng)建的進(jìn)程排在就緒隊(duì)列上,準(zhǔn)備執(zhí)行。 * 管理的方面比較多
系統(tǒng)運(yùn)行并不一定存在高級(jí)調(diào)度
批處理系統(tǒng) :作業(yè)進(jìn)入系統(tǒng)后先駐留外存, 故需要有作業(yè)調(diào)度。
分時(shí)系統(tǒng) :為及時(shí)響應(yīng),作業(yè)由終端直接送 入內(nèi)存,故不需作業(yè)調(diào)度。
實(shí)時(shí)系統(tǒng) 中,通常也不需作業(yè)調(diào)度。
低級(jí)調(diào)度
也稱為進(jìn)程調(diào)度、微觀調(diào)度或短程調(diào)度 (Short-Term Scheduling) 決定內(nèi)存就緒隊(duì)列中的哪個(gè)進(jìn)程獲得處理 機(jī),進(jìn)行分配工作。是最基本的一種調(diào)度, 在三種基本OS中都有
進(jìn)程調(diào)度方式
非搶占方式(Non-preemptive Mode) 一旦處理機(jī)分配給某進(jìn)程,該進(jìn)程一直執(zhí)行。 決不允許其他進(jìn)程搶占已分配運(yùn)行進(jìn)程的處理機(jī)。 2)搶占方式(Preemptive Mode) 允許調(diào)度程序根據(jù)某種原則,暫停某個(gè)正在執(zhí) 行的進(jìn)程,將處理機(jī)重新分配給另一進(jìn)程。
中級(jí)調(diào)度
又稱交換調(diào)度或中程調(diào)度(Medium-Term Scheduling) 引入目的:提高內(nèi)存利用率和系統(tǒng)吞吐量。 根據(jù)條件將一些進(jìn)程調(diào)出或再調(diào)入內(nèi)存
調(diào)度隊(duì)列模型
不論高級(jí)、中級(jí)或者低級(jí)調(diào)度,都涉及到進(jìn)程隊(duì) 列,由此形成了三類調(diào)度隊(duì)列模型。從這三種方式中 體驗(yàn)調(diào)度的過(guò)程。
① 僅有進(jìn)程調(diào)度的調(diào)度隊(duì)列模型
② 具有高級(jí)和低級(jí)調(diào)度的調(diào)度隊(duì)列模型
③ 同時(shí)具有三級(jí)調(diào)度的調(diào)度隊(duì)列模型
進(jìn)程調(diào)度發(fā)生時(shí)間
正在執(zhí)行的進(jìn)程結(jié)束 ?
正在執(zhí)行的進(jìn)程阻塞 ?
正在執(zhí)行的進(jìn)程未完成轉(zhuǎn)就緒(時(shí)間片到) ?
新就緒了更高優(yōu)先級(jí)的進(jìn)程(搶占式)
具有高級(jí)和低級(jí)調(diào)度的調(diào)度隊(duì)列模型 ? 批處理系統(tǒng)中,還需要作業(yè)調(diào)度
同時(shí)具有三級(jí)調(diào)度的調(diào)度隊(duì)列模型
引入中級(jí)調(diào)度后,進(jìn)程的狀態(tài)變化:
? 就緒狀態(tài):分為內(nèi)存就緒和外存就緒。
? 阻塞狀態(tài):分為內(nèi)存阻塞和外存阻塞。 中級(jí)調(diào)度使進(jìn)程在上述狀態(tài)間變化,并使 數(shù)據(jù)在內(nèi)外存間互換。
選擇調(diào)度方式和調(diào)度算法的若干準(zhǔn)則
面向用戶的準(zhǔn)則
周轉(zhuǎn)時(shí)間短: 針對(duì)批處理系統(tǒng)的性能指標(biāo)。作業(yè)從提交到完成所經(jīng)歷 的時(shí)間。 ?
CPU執(zhí)行用時(shí)Ts ?
總的等待時(shí)間Tw = 在后備隊(duì)列中等待 + 就緒隊(duì)列上等待 + 阻塞隊(duì)列中等待(等待I/O操作用時(shí)) ?
周轉(zhuǎn)時(shí)間T=Ts+Tw ?
帶權(quán)周轉(zhuǎn)時(shí)間W= T/Ts ?
平均周轉(zhuǎn)時(shí)間、平均帶權(quán)周轉(zhuǎn)時(shí)間(n個(gè)作業(yè)求平均)
響應(yīng)時(shí)間快:針對(duì)分時(shí)系統(tǒng)。用戶輸入一個(gè)請(qǐng) 求(如擊鍵)到系統(tǒng)給出首次響應(yīng)(如屏幕顯示) 的時(shí)間
?均衡性:系統(tǒng)響應(yīng)時(shí)間的快慢與用戶所請(qǐng)求的 復(fù)雜性相適應(yīng)。
?截止時(shí)間的保證:針對(duì)實(shí)時(shí)系統(tǒng)的性能指標(biāo)。 開(kāi)始截止時(shí)間和完成截止時(shí)間。任務(wù)必須按規(guī)定 的時(shí)間開(kāi)始或完成,調(diào)度方式和算法必須能保證 該要求。
?優(yōu)先權(quán)準(zhǔn)則:三大基本OS在調(diào)度算法的選擇 時(shí)都可遵循。可以使關(guān)鍵任務(wù)達(dá)到更好的指標(biāo)
面向系統(tǒng)的準(zhǔn)則
系統(tǒng)吞吐量高: 批處理系統(tǒng)的重要指標(biāo)。 ?單位時(shí)間內(nèi)所完成的作業(yè)數(shù),跟作業(yè)本身 (與作業(yè)平均長(zhǎng)度密切相關(guān))和調(diào)度算法 都有關(guān)系;
處理機(jī)調(diào)度與死鎖
調(diào)度算法
先來(lái)先服務(wù)調(diào)度算法FCFS
一種最簡(jiǎn)單的調(diào)度算法,按先后順序進(jìn)行調(diào)度。既 可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。
? 按照作業(yè)提交,或進(jìn)程變?yōu)榫途w狀態(tài)的先后次 序分派CPU;
? 新作業(yè)只有當(dāng)當(dāng)前作業(yè)或進(jìn)程執(zhí)行完或阻塞才 獲得CPU運(yùn)行
? 被喚醒的作業(yè)或進(jìn)程不立即恢復(fù)執(zhí)行,通常等 到當(dāng)前作業(yè)或進(jìn)程出讓CPU。 (所以,默認(rèn)即 是非搶占方式)
不利于短作業(yè)(進(jìn)程)
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJF/SPF
優(yōu)點(diǎn):
? 通過(guò)上表可見(jiàn)采用SJF/SPF算法,平均周轉(zhuǎn) 時(shí)間、平均帶權(quán)周轉(zhuǎn)時(shí)間都有明顯改善。 SJF/SPF調(diào)度算法能有效的降低作業(yè)的平均 等待時(shí)間,提高系統(tǒng)吞吐量。 方式:
? 分搶占和非搶占兩種方式,上例為簡(jiǎn)單的非 搶占式。
SJF/SPF的不足: 1. 對(duì)短作業(yè)有利,但同時(shí)造成了對(duì)長(zhǎng)作 業(yè)的不利。 2.由于作業(yè)(進(jìn)程)的長(zhǎng)短含主觀因素, 不一定能真正做到短作業(yè)優(yōu)先。 3.未考慮作業(yè)的緊迫程度,因而不能保證 緊迫性作業(yè)(進(jìn)程)的及時(shí)處理。
高優(yōu)先權(quán)優(yōu)先調(diào)度算法HPF
照顧緊迫性作業(yè),使其獲得優(yōu)先處理而引入 調(diào)度算法。常用于批處理系統(tǒng)中的作業(yè)調(diào)度算法, 以及多種操作系統(tǒng)中的進(jìn)程調(diào)度算法 1) 分兩種方式:
?非搶占式優(yōu)先權(quán)算法
?搶占式優(yōu)先權(quán)算法 關(guān)鍵點(diǎn):新作業(yè)產(chǎn)生時(shí)
優(yōu)先權(quán)的類型
? 靜態(tài)優(yōu)先權(quán):創(chuàng)建進(jìn)程時(shí)確定,整個(gè)運(yùn)行 期間保持不變。一般利用某一范圍的一個(gè) 整數(shù)來(lái)表示,又稱為優(yōu)先數(shù)。
? 動(dòng)態(tài)優(yōu)先權(quán):創(chuàng)建進(jìn)程時(shí)賦予的優(yōu)先權(quán)可 隨進(jìn)程的推進(jìn)或隨其等待時(shí)間的增加而改 變。
高響應(yīng)比優(yōu)先調(diào)度算法HRRN
短作業(yè)優(yōu)先算法是一種比較好的算法(相當(dāng)于根據(jù) 作業(yè)長(zhǎng)度設(shè)定的靜態(tài)優(yōu)先權(quán)算法),適用于短作業(yè) 較多的批處理系統(tǒng)中,其主要不足是長(zhǎng)作業(yè)的運(yùn)行 得不到保證。
? HRRN為每個(gè)作業(yè)引入動(dòng)態(tài)優(yōu)先權(quán),使作業(yè)的優(yōu) 先級(jí)隨著等待時(shí)間的增加而以速率a提高: 優(yōu)先權(quán) =(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間 = 響應(yīng)時(shí)間 / 要求服務(wù)時(shí)間
基于時(shí)間片的輪轉(zhuǎn)調(diào)度算法RR
? 分時(shí)系統(tǒng)新需求:及時(shí)響應(yīng)用戶的請(qǐng)求; 采用基于 時(shí)間片 的輪轉(zhuǎn)式進(jìn)程調(diào)度算法。
? 早期分時(shí)系統(tǒng)采用的是 簡(jiǎn)單的時(shí)間片輪轉(zhuǎn)法
, 進(jìn)入90年代后廣泛采用 多級(jí)反饋隊(duì)列調(diào)度算 法 。
時(shí)間片輪轉(zhuǎn)算法
1. 將系統(tǒng)中所有的就緒進(jìn)程按照FCFS原則,排成一 個(gè)隊(duì)列。 2. 每次調(diào)度時(shí)將CPU分派給隊(duì)首進(jìn)程,讓其執(zhí)行一 個(gè)時(shí)間片。時(shí)間片的長(zhǎng)度從幾個(gè)ms到幾百ms。 3. 在一個(gè)時(shí)間片結(jié)束時(shí),發(fā)生時(shí)鐘中斷。 4. 調(diào)度程序據(jù)此暫停當(dāng)前進(jìn)程的執(zhí)行,將其送到就 緒隊(duì)列的末尾,并通過(guò)上下文切換執(zhí)行當(dāng)前就緒 的隊(duì)首進(jìn)程。
多級(jí)反饋隊(duì)列算法FB
1)設(shè)置多個(gè)就緒隊(duì)列,各隊(duì)列有不同的優(yōu)先 級(jí),優(yōu)先級(jí)從第一個(gè)隊(duì)列依次降低。
2) 賦予各隊(duì)列進(jìn)程執(zhí)行時(shí)間片大小不同, 優(yōu) 先權(quán)越高,時(shí)間片越短 。
實(shí)時(shí)調(diào)度
實(shí)時(shí)系統(tǒng)
1.指系統(tǒng)能夠在限定的響應(yīng)時(shí)間內(nèi)提供所需水平 的服務(wù)。
2.指計(jì)算的正確性不僅取決于程序的邏輯正確性, 也取決于結(jié)果產(chǎn)生的時(shí)間,如果系統(tǒng)的時(shí)間約 束條件得不到滿足,將會(huì)發(fā)生系統(tǒng)出錯(cuò)。
實(shí)時(shí)任務(wù):具有明確時(shí)間約束的計(jì)算任務(wù), 有軟/硬,隨機(jī)/周期性之分。
實(shí)現(xiàn)實(shí)時(shí)調(diào)度的基本條件
1)提供必要的信息 為了實(shí)現(xiàn)實(shí)時(shí)調(diào)度,系統(tǒng)應(yīng)向調(diào)度程序提供 有關(guān)任務(wù)的下述信息:
就緒時(shí)間 。該任務(wù)成為就緒狀態(tài)的時(shí)間。
開(kāi)始截止時(shí)間、完成截止時(shí)間 。
處理時(shí)間 。從開(kāi)始執(zhí)行到完成所需時(shí)間。
資源要求 。任務(wù)執(zhí)行時(shí)所需的一組資源。
優(yōu)先級(jí) 。根據(jù)任務(wù)性質(zhì)賦予不同優(yōu)先級(jí)。
2)系統(tǒng)處理能力足夠強(qiáng)
處理能力不足可能會(huì)出現(xiàn)某些實(shí)時(shí)任務(wù)不能 得到及時(shí)處理,導(dǎo)致難以預(yù)料的后果。 如: 系統(tǒng)中有M個(gè)周期性的硬實(shí)時(shí)任務(wù),處理 時(shí)間為Ci,周期時(shí)間表示為Pi, 單機(jī)系統(tǒng)中必須滿足條件
3)采用搶占式調(diào)度機(jī)制
? 硬實(shí)時(shí)任務(wù):廣泛采用搶占機(jī)制。
? 小的實(shí)時(shí)系統(tǒng):如能預(yù)知任務(wù)的開(kāi)始 截止時(shí)間,為簡(jiǎn)化調(diào)度程序和對(duì)任務(wù)調(diào) 度時(shí)所花費(fèi)的系統(tǒng)開(kāi)銷,可采用非搶占 調(diào)度機(jī)制,
4)具有快速切換機(jī)制
1. 對(duì)外部中斷的快速響應(yīng)能力。 ? 利用快速硬件中斷機(jī)構(gòu),可在緊迫的 外部事件請(qǐng)求中及時(shí)響應(yīng)。 2. 快速的任務(wù)分派能力。 ? 使系統(tǒng)中的運(yùn)行功能單位適當(dāng)?shù)男。岣咔?換速度。類如線程的思想
實(shí)時(shí)調(diào)度算法的分類
非搶占調(diào)度算法
該算法較簡(jiǎn)單,用于一些小型實(shí)時(shí)系統(tǒng)或要 求不太嚴(yán)格的實(shí)時(shí)系統(tǒng)中,又可分為:
1. 非搶占式輪轉(zhuǎn)調(diào)度算法。常用于工業(yè)生產(chǎn) 的群控系統(tǒng)中,要求不太嚴(yán)格。
2. 非搶占式優(yōu)先調(diào)度算法。要求相對(duì)嚴(yán)格, 根據(jù)任務(wù)的優(yōu)先級(jí)安排等待位置。可用于 有一定要求的實(shí)時(shí)控制系統(tǒng)中。(精心設(shè) 置可獲得百ms級(jí)的響應(yīng)時(shí)間)
搶占式調(diào)度算法
較嚴(yán)格的實(shí)時(shí)系統(tǒng)中(t約為數(shù)十ms), 選擇采用搶占式優(yōu)先權(quán)調(diào)度算法。根據(jù) 搶占發(fā)生時(shí)間可分為:
1. 基于時(shí)鐘:某高優(yōu)先級(jí)任務(wù)到達(dá)后并不 立即搶占,而等下一個(gè)時(shí)鐘中斷時(shí)搶占。
2. 立即搶占:一旦出現(xiàn)外部中斷,只要當(dāng) 前任務(wù)未處于臨界區(qū),就立即搶占處理 機(jī)。
最早截止時(shí)間優(yōu)先EDF
根據(jù)任務(wù)的開(kāi)始截止時(shí)間來(lái)確定任務(wù)的優(yōu)先級(jí)。 截止時(shí)間越早,其優(yōu)先級(jí)越高。 ?系統(tǒng)保持一個(gè)實(shí)時(shí)任務(wù)就緒隊(duì)列 ?隊(duì)列按各任務(wù)截止時(shí)間的早晚排序 ?調(diào)度程序總是選擇就緒隊(duì)列中的第一個(gè)任務(wù),分配處 理機(jī)使之投入運(yùn)行。
? 新任務(wù)產(chǎn)生時(shí),是否等當(dāng)前程序執(zhí)行完: ?搶占式/非搶占式
? 可能會(huì)使作業(yè)錯(cuò)過(guò),但可適用于軟實(shí)時(shí)系統(tǒng)
最低松弛度優(yōu)先LLF
根據(jù)任務(wù)緊急(或松弛)的程度,來(lái)確定任務(wù)的優(yōu)先 級(jí)。任務(wù)的緊急程度越高(松弛度值越小),優(yōu)先級(jí)就越 高。
? 松弛度= 截止完成時(shí)間 – 還需執(zhí)行時(shí)間 - 當(dāng)前時(shí)間 可理解為當(dāng)前時(shí)刻到開(kāi)始截止時(shí)刻間的差距,隨著時(shí)間的 推進(jìn),這個(gè)差值逐漸變小,任務(wù)越來(lái)越緊迫
處理機(jī)調(diào)度與死鎖
死鎖
多道程序系統(tǒng)借助并發(fā)執(zhí)行改善資源利用率, 提高系統(tǒng)吞吐量,但可能發(fā)生一種危險(xiǎn)——死 鎖。 死鎖(Deadlock):指多個(gè)進(jìn)程在運(yùn)行過(guò) 程中,因爭(zhēng)奪資源而造成的一種僵局。當(dāng)進(jìn)程 處于這種狀態(tài)時(shí),若無(wú)外力作用,它們都將無(wú) 法再向前推進(jìn)。
產(chǎn)生死鎖的原因
- 競(jìng)爭(zhēng)資源。系統(tǒng)中供多個(gè)進(jìn)程共享的資源 如打印機(jī)、公用隊(duì)列等的數(shù)目不滿足需要 時(shí),會(huì)引起資源競(jìng)爭(zhēng)而產(chǎn)生死鎖。
- 進(jìn)程間推進(jìn)順序非法。進(jìn)程在運(yùn)行過(guò)程中, 請(qǐng)求和釋放資源的順序不當(dāng),同樣會(huì)導(dǎo)致 死鎖。
產(chǎn)生死鎖的必要條件
① 互斥條件:進(jìn)程對(duì)所分配到的資源進(jìn)行排他性 使用
② 請(qǐng)求和保持條件:進(jìn)程已經(jīng)保持了至少一個(gè)資 源,又提出新的資源請(qǐng)求,而新請(qǐng)求資源被其 他進(jìn)程占有只能造成自身進(jìn)程阻塞,但對(duì)自己 已獲得的其他資源保持不放,必然影響其他進(jìn) 程。
③ 不剝奪條件:進(jìn)程已獲得的資源未使用完之前 不能被剝奪,只能在使用完時(shí)由自己釋放。
④ 環(huán)路等待條件
處理死鎖的基本方法
① 預(yù)防死鎖
? 設(shè)置限制條件,破壞四個(gè)必要條件的一個(gè)或幾個(gè), 預(yù)防發(fā)生死鎖。
? 較易實(shí)現(xiàn)。限制條件的嚴(yán)格也會(huì)導(dǎo)致系統(tǒng)資源利用 率和系統(tǒng)吞吐量降低。
② 避免死鎖
? 不須事先限制,破壞四個(gè)必要條件,而是在資源的 動(dòng)態(tài)分配過(guò)程中,用某種方法去防止系統(tǒng)進(jìn)入不安 全狀態(tài),從而避免發(fā)生死鎖。
? 這種事先加以較弱限制的方法,實(shí)現(xiàn)上有一定難度, 但可獲較高的資源利用率及系統(tǒng)吞吐量,目前在較 完善的系統(tǒng)中,常用此方法來(lái)避免發(fā)生死鎖。
③ 檢測(cè)死鎖。
? 允許系統(tǒng)運(yùn)行過(guò)程中發(fā)生死鎖,但通過(guò)系統(tǒng)檢測(cè)機(jī) 構(gòu)可及時(shí)的檢測(cè)出,能精確確定與死鎖有關(guān)的進(jìn)程 和資源;然后采取適當(dāng)?shù)拇胧瑥南到y(tǒng)中將已發(fā) 生的死鎖清除掉。
④ 解除死鎖。
? 與死鎖檢測(cè)配套的一種措施。
? 常用的實(shí)施方法:撤銷或掛起一些進(jìn)程,以便回收 一些資源并將他們分配給已阻塞進(jìn)程,使之轉(zhuǎn)為就 緒以繼續(xù)運(yùn)行。
? 死鎖的檢測(cè)與解除措施,有可能使系統(tǒng)獲得較好的 資源利用率和吞吐量(死鎖幾率不一定很高),但 在實(shí)現(xiàn)上難度也最大。
預(yù)防死鎖的方法
預(yù)防死鎖
摒棄“環(huán)路等待”條件
避免死鎖
銀行家算法避免死鎖
(1)T0時(shí)刻的初始狀態(tài)是安全的;
(2)下面出現(xiàn)P1請(qǐng)求資源的操作,具體請(qǐng)求 向量為Request1(1,0,2),利用銀行家算法 進(jìn)行檢查該操作是否是安全可行的:
1)兩個(gè)基本判斷
Request1(1,0,2)<=Need1(1,2,2)
Request1(1,0,2)<=Available1(3,3,2)
2)先假設(shè)為P1分配資源,并修改 Available,Allocation1和Need1向量。
3) Request1(1,0,2)后新的資源狀態(tài)表下再判斷新資源狀態(tài)是否是 安全的。 找到一個(gè)安全序列{P1,P3,P4,P0,P2},因此系統(tǒng)是安全的,該請(qǐng)求是 安全的,可將假設(shè)真正實(shí)施,將P1所申請(qǐng)的資源分配給它。
死鎖的檢測(cè)與解除
當(dāng)系統(tǒng)為進(jìn)程分配資源時(shí),若未采取任何 限制性措施,則系統(tǒng)必須提供檢測(cè)和解除 死鎖的手段,為此系統(tǒng)必須:
- 保存有關(guān)資源的請(qǐng)求和分配信息;
-
提供一種算法,以利用這些信息來(lái)檢測(cè)系 統(tǒng)是否已進(jìn)入死鎖狀態(tài)
image.png
死鎖的檢測(cè)
檢測(cè)時(shí)機(jī):
當(dāng)進(jìn)程等待時(shí)檢測(cè)死鎖
定時(shí)檢測(cè)
系統(tǒng)資源利用率下降時(shí)檢測(cè)死鎖
死鎖定理
簡(jiǎn)化方法如下:
1.在資源分配圖中找出一個(gè)既不阻塞又非獨(dú)立 的進(jìn)程結(jié)點(diǎn)Pi,在順利的情況下運(yùn)行完畢,釋 放其占有的全部資源。
2.由于釋放了資源,這樣能使其它被阻塞的進(jìn) 程獲得資源繼續(xù)運(yùn)行。消去了Pi的邊。
3.經(jīng)過(guò)一系列簡(jiǎn)化后,若能消去圖中所有邊, 使結(jié)點(diǎn)都孤立,稱該圖是可完全簡(jiǎn)化的。
死鎖的解除
當(dāng)發(fā)現(xiàn)進(jìn)程死鎖時(shí),便應(yīng)立即把它們從 死鎖狀態(tài)中解脫出來(lái)。常采用的方法是:
- 剝奪資源。從其他進(jìn)程剝奪足夠數(shù)量的 資源給死鎖進(jìn)程以解除死鎖狀態(tài)。
- 撤銷進(jìn)程。最簡(jiǎn)單的是讓全部進(jìn)程都死 掉;溫和一點(diǎn)的是按照某種順序逐個(gè)撤 銷進(jìn)程,直至有足夠的資源可用,使死 鎖狀態(tài)消除為止。
](https://upload-images.jianshu.io/upload_images/5951897-83c04776da3eae4c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)