2.1進(jìn)程的基本概念
1.程序順序執(zhí)行時的特征:
(1)順序性
??? 處理機(jī)的操作嚴(yán)格按程序規(guī)定順序執(zhí)行。
? ?(2) ? 封閉性
??? 程序一旦開始執(zhí)行仇箱,其計算結(jié)果不受外界因素影響剂桥。
? ?(3) 可再現(xiàn)性
??? 程序執(zhí)行只要初始條件一樣,不論如何停頓斟薇,重復(fù)執(zhí)行多少次結(jié)果都一樣堪滨。
2.并發(fā)程序執(zhí)行時的特征:
????間斷性(運(yùn)行表現(xiàn))
????????多道->程序并發(fā)執(zhí)行->要共享系統(tǒng)的資源 ->形成相互制約的關(guān)系->??相互制約導(dǎo)致并發(fā)程序具有“執(zhí)行——暫透は洌——執(zhí)行”這種間斷性的活動規(guī)律发笔。
不可再現(xiàn)結(jié)果的并發(fā)無意義
3.進(jìn)程
pcb內(nèi)信息
定義:進(jìn)程是進(jìn)程實體的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位铺罢。
特征:①結(jié)構(gòu)性特征韭赘,進(jìn)程的根本——PCB ?
????????????②動態(tài)性
????????????????????進(jìn)程實質(zhì)上是進(jìn)程實體的一次有生命期的執(zhí)行過程泉瞻。程序只是靜態(tài)的一組有序指令袖牙。
????????????????????進(jìn)程最基本特征
????????????③并發(fā)性
????????????????????多個進(jìn)程實體同存于內(nèi)存中鞭达,在一段時間內(nèi)同時運(yùn)行畴蹭。
????????????????????有PCB的程序才能并發(fā)叨襟。
????????????④獨(dú)立性
? ? ? ? ? ? ⑤異步性
基本狀態(tài):
(1)就緒狀態(tài)(Ready)
????? 進(jìn)程獲得除CPU之外的所有必需資源,一旦得到CPU控制權(quán)右犹,可立即運(yùn)行傀履。
(2)運(yùn)行狀態(tài)(Running)
????? 進(jìn)程已獲得所有運(yùn)行必需的資源钓账,正在處理機(jī)上執(zhí)行絮宁。
(3)阻塞狀態(tài)(Blocked)
????? 正在執(zhí)行的進(jìn)程由于發(fā)生某事件(請求I/O绍昂、申請緩沖、時間片到)而暫時無法執(zhí)行時跳纳,便放棄CPU后暫停寺庄。
進(jìn)程的三基態(tài)的轉(zhuǎn)換
各種狀態(tài)下的進(jìn)程隊列
單處理機(jī)系統(tǒng)斗塘,執(zhí)行態(tài)的進(jìn)程只有一個馍盟;
就緒態(tài)贞岭、阻塞態(tài)的進(jìn)程可有多個曹步。一般講它們分別排稱一個隊列,稱就緒隊列俊柔、阻塞隊列雏婶。
阻塞隊列有的會根據(jù)不同原因再排成多個隊列留晚。
引入掛起狀態(tài)的狀態(tài)轉(zhuǎn)換圖
4.進(jìn)程控制塊PCB
進(jìn)程實體:代碼段+數(shù)據(jù)段+PCB
定義:存放進(jìn)程的管理和控制信息的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程控制塊。
OS對進(jìn)程進(jìn)行控制和管理圍繞PCB進(jìn)行
分析OS調(diào)度某進(jìn)程的過程
1)赋焕、查該進(jìn)程的PCB隆判,獲取其狀態(tài)、優(yōu)先級臭挽;
2)欢峰、根據(jù)PCB保存的處理機(jī)狀態(tài)信息赤赊,恢復(fù)現(xiàn)場;
3)吹截、根據(jù)PCB中程序和數(shù)據(jù)的內(nèi)存始址凝危,找到其程序和數(shù)據(jù)懦铺;
4)支鸡、執(zhí)行中的同步信號等也要查閱PCB急前,暫停時進(jìn)程執(zhí)行的處理機(jī)環(huán)境保存回PCB瀑构。
重要性
1)寺晌、進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志:進(jìn)程創(chuàng)建時呻征,PCB建立并伴隨進(jìn)程運(yùn)行的全過程边篮,直到進(jìn)程撤消而撤消。PCB就象我們的戶口凌受。
2)、進(jìn)程管理和控制的最重要的數(shù)據(jù)結(jié)構(gòu)誊册。
2.2進(jìn)程控制
基本過程:進(jìn)程的創(chuàng)建案怯、進(jìn)程的終止嘲碱、進(jìn)程的阻塞與喚醒麦锯、進(jìn)程的掛起和激活扶欣;
1.進(jìn)程的創(chuàng)建
1)一個進(jìn)程創(chuàng)建另一進(jìn)程的事件(原因)
(1)用戶登錄:分時情況下用戶的請求
(2)作業(yè)調(diào)度:批處理中
(3)提供服務(wù):運(yùn)行中的用戶程序提出功能請求,要創(chuàng)建服務(wù)進(jìn)程(如打印服務(wù))
(4)應(yīng)用請求:應(yīng)用程序自己創(chuàng)建進(jìn)程,完成特定功能的新進(jìn)程煤痕。(木馬程序)
2)創(chuàng)建過程#*#
(1)申請空白PCB
(2)為新進(jìn)程分配資源
? ????主要是內(nèi)存資源的處理
(3)初始化進(jìn)程控制塊
? ????標(biāo)識符(包括父進(jìn)程的)摆碉、程序計數(shù)器指向程序入口地址巷帝,就緒態(tài)楞泼、優(yōu)先級等信息的填寫堕阔。
(4)將新進(jìn)程插入就緒隊列
注:上述過程很關(guān)鍵超陆,不能被打斷J毖健=髂取屎债!
2.進(jìn)程的終止
1)引起進(jìn)程終止的事件
2)終止過程
對上述事件盆驹,OS調(diào)用內(nèi)核終止原語,執(zhí)行下列過程:
(1)根據(jù)進(jìn)程標(biāo)示符廉丽,檢索出該進(jìn)程PCB正压,讀其狀態(tài)。
? ????*IF 執(zhí)行態(tài)责球,立即終止該進(jìn)程焦履,置調(diào)度標(biāo)志為真,指示重新進(jìn)行調(diào)度雏逾。
? ????*IF 有子孫進(jìn)程嘉裤,亦應(yīng)予以終止,以防成為不可控進(jìn)程栖博。
(2)歸還全部資源至其父進(jìn)程或系統(tǒng)屑宠。
(3)將該進(jìn)程PCB從所在隊列或鏈表中移出。
3.進(jìn)程的阻塞與喚醒
1)引起進(jìn)程阻塞和喚醒的事件
(1)請求系統(tǒng)服務(wù)的滿足情況躺翻;
(2)啟動某種需等待(I/O)操作省店;
(3)合作需要的新數(shù)據(jù)尚未到達(dá)粗俱;
(4)執(zhí)行某功能的進(jìn)程暫時無新工作可做(如發(fā)送數(shù)據(jù)進(jìn)程)偏塞。
2)阻塞和喚醒過程
由進(jìn)程調(diào)用阻塞原語阻塞自己古今,是主動行為:
(1)將PCB中的狀態(tài)改為阻塞
(2)該P(yáng)CB加入到阻塞隊列中
(3)轉(zhuǎn)進(jìn)程調(diào)度抵碟,將處理機(jī)分配給另一進(jìn)程
(4)進(jìn)行進(jìn)程切換宪摧,即根據(jù)兩切換進(jìn)程的PCB,保護(hù)與重新設(shè)置處理機(jī)狀態(tài)。
阻塞與喚醒原語作用相反,成對使用
? ????阻塞進(jìn)程等待的事件發(fā)生時倒谷,有關(guān)進(jìn)程(如放棄該資源的進(jìn)程)調(diào)用喚醒原語把等待該事件的進(jìn)程喚醒倍靡。
(1)把阻塞進(jìn)程從等待該事件的阻塞隊列中移出办桨;
(2)將其PCB中的現(xiàn)行狀態(tài)改為就緒;
(3)將PCB插入到就緒隊列中。
4.進(jìn)程的掛起與激活
? 掛起原語將指定進(jìn)程或阻塞進(jìn)程掛起拦英。
(1)檢查被掛起進(jìn)程的狀態(tài)岗憋,活動就緒則改為靜止就緒,活動阻塞則改為靜止阻塞。
(2)將該P(yáng)CB復(fù)制到內(nèi)存(方便檢查)/外存(對換)指定區(qū)域尿庐。
(3)*若掛起的進(jìn)程是執(zhí)行態(tài)皮假,則需重新進(jìn)行進(jìn)程調(diào)度。
注意:進(jìn)程只能掛起自己或其子孫進(jìn)程。
激活原語的執(zhí)行過程
(1)若掛起進(jìn)程在外存上,將其調(diào)入內(nèi)存肛根;
(2)檢查進(jìn)程狀態(tài),若處于靜止就緒,則改為活動就緒草冈,若處于靜止阻塞隙赁,則改為活動阻塞蠕趁。
*關(guān)于調(diào)度
(1)進(jìn)程控制中,狀態(tài)轉(zhuǎn)換和調(diào)度密切相關(guān)早处。
(2)運(yùn)行態(tài)進(jìn)程的改變必然產(chǎn)生調(diào)度行為
(3)只要產(chǎn)生新就緒態(tài)進(jìn)程桃序,就需考慮調(diào)度策略
(4)只要是采用搶占式調(diào)度忱反,要檢查新就緒進(jìn)程是否可搶占CPU,引起新的調(diào)度巩割。
2.3進(jìn)程同步
兩種制約關(guān)系:
(1).間接相互制約關(guān)系:主要源于資源共享,表現(xiàn)為
????進(jìn)程A---打印機(jī)資源---進(jìn)程B(互斥)
(2).直接相互制約關(guān)系:主要源于進(jìn)程合作嗦嗡,表現(xiàn)為
????進(jìn)程A寫緩沖---進(jìn)程B讀緩沖(有序)
1.進(jìn)程同步的基本概念
1)進(jìn)程同步的主要任務(wù):
? ?使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作滋恬,從而使程序的執(zhí)行具有可再現(xiàn)性。
調(diào)度抱究。
2)臨界資源
理解同步
同步
3)臨界區(qū)
每個進(jìn)程中訪問臨界資源的那段代碼叫臨界區(qū)恢氯。為了正確同步,對臨界區(qū)的代碼要增加控制
(1)進(jìn)入?yún)^(qū):對欲訪問的臨界資源進(jìn)行檢鼓寺。若此刻未被訪問勋拟,設(shè)正在訪問的標(biāo)志
(2)臨界區(qū):訪問臨界資源的代碼。
(3)退出區(qū):將正在訪問的標(biāo)志恢復(fù)為未被訪問的標(biāo)志
(4)剩余區(qū):其余部分
實現(xiàn)互斥的方法應(yīng)符合如下每條原則
空閑讓進(jìn):資源使用最基本原則
忙則等待:保證互斥
有限等待:合適時被喚醒防止死等
讓權(quán)等待:能主動釋放CPU防止忙等
4)同步機(jī)制應(yīng)遵循的規(guī)則
①關(guān)中斷
進(jìn)入鎖測試前關(guān)閉中斷妈候,直到完成鎖測試并上鎖后才能打開中斷敢靡。進(jìn)程在臨界區(qū)執(zhí)行期間,系統(tǒng)不響應(yīng)中斷苦银,從而不引發(fā)調(diào)度啸胧。
缺點(diǎn):
濫用風(fēng)險
關(guān)中斷時間過長會影響效率,限制CPU交叉執(zhí)行能力
不適用于多CPU系統(tǒng)
同步控制的關(guān)鍵
主要涉及”判斷”和”修改標(biāo)志”操作
(1)不應(yīng)被打斷(原語幔虏,OS核心態(tài)運(yùn)行)
(2)如何制定一種寫法纺念,使標(biāo)志的使用適用于各種具體應(yīng)用情況?
2.信號量機(jī)制
1) 整型信號量
最初的信號量機(jī)制想括,兩個原子操作對一個共享整型量進(jìn)行操作陷谱。
信號量定義為一個整型量;根據(jù)初始情況賦相應(yīng)的值瑟蜈;僅能通過兩個原子操作來訪問叭首。
P操作? wait(S):
????????????? While S<=0 do no-op;
????????????? S:=S-1;
V操作? signal(S):? ?
????????????? S:=S+1;
2)記錄型信號量
(1)整型信號量符合“有限等待”原則
????lsignal釋放資源后,當(dāng)CPU被分配給等待進(jìn)程后踪栋,等待進(jìn)程仍可繼續(xù)執(zhí)行焙格,可以符合“有限等待”。
(2)但整型信號量不符合“讓權(quán)等待”原則
????整型信號量的wait操作夷都,當(dāng)s≤0時眷唉,當(dāng)前進(jìn)程會占著CPU不斷測試;
????信號量原語不能被打斷囤官,這個占有CPU的進(jìn)程會一直不斷的占據(jù)CPU循環(huán)下去冬阳,陷入忙等。
*信號量結(jié)構(gòu)信息發(fā)生變化
(1)不僅要有值的處理党饮,還有隊列的處理肝陪。
(2)此時形成記錄型數(shù)據(jù)結(jié)構(gòu),包括兩部分:
????整型變量value(代表資源數(shù)目)
????進(jìn)程鏈表L(鏈接所有等待進(jìn)程):
(3)代碼描述:
????????????????type?
????????????????????Semaphore=record
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?value:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?integer;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?L:list? of?PCB;
????????????????????end;
(4)操作:S.Value刑顺,S.L
????Value>0氯窍,表示當(dāng)前可用資源的數(shù)量饲常;
????Value≤0,其絕對值表示等待使用該資源的進(jìn)程數(shù)狼讨,即在該信號量隊列上排隊的PCB的個數(shù)贝淤。
*P、V操作也有所變化
(1)不僅修改資源數(shù)政供,還要處理進(jìn)程的阻塞播聪、喚醒等操作。先修改資源數(shù)布隔,再判斷處理离陶。
?????定義信號量semaphore代表可用資源實體的數(shù)量。又叫信號燈衅檀。
?????當(dāng)≥0招刨,代表可供并發(fā)進(jìn)程使用的資源實體數(shù)
?????當(dāng)<0,表示正在等待使用該資源的進(jìn)程數(shù)术吝。
(2)建立一個信號量必須經(jīng)過說明计济,包括
?????信號量所代表的意義
?????賦初值
?????建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)茸苇,以便指向等待使用臨界區(qū)的進(jìn)程排苍。
(3)除初值外,信號量的值僅能由標(biāo)準(zhǔn)原子操作P学密、V操作來改變淘衙。PV操作是荷蘭語通過和釋放的意思。
3)信號量的基本應(yīng)用
(1)實現(xiàn)進(jìn)程互斥
(2)實現(xiàn)進(jìn)程間的前趨關(guān)系(有序)
實現(xiàn)多個進(jìn)程互斥
設(shè)置一互斥信號量mutex腻暮,初值為1彤守。
互斥信號量注意點(diǎn):
1.互斥信號量mutex初值為1;
2.每個進(jìn)程中將臨界區(qū)代碼置于P(mutex)和V(mutex)原語之間
3.必須成對使用P和V原語(在同一進(jìn)程中)哭靖,不能次序錯誤具垫、重復(fù)或遺漏:
????遺漏P原語則不能保證互斥訪問
????遺漏V原語則不能在使用臨界資源之后將其釋放(給其他等待的進(jìn)程);
實現(xiàn)有序
前趨關(guān)系:
? ????并發(fā)執(zhí)行的進(jìn)程P1和P2中试幽,分別有代碼C1和C2筝蚕,要求C1要在C2開始前完成;
? ? ? 為每對前趨關(guān)系設(shè)置一個同步信號量S12铺坞,并賦初值為0起宽。則只有V操作所在進(jìn)程獲得cpu時能運(yùn)行
控制同步順序的注意點(diǎn):
(1)信號量值為0的點(diǎn)是限制的關(guān)鍵所在;
(2)成對使用P和V原語(在有先后關(guān)系的兩個進(jìn)程中)济榨,不能次序錯誤坯沪、重復(fù)或遺漏,否則同步順序出錯擒滑。
4)AND型信號量
(1)出現(xiàn)原因:一些應(yīng)用往往需要兩個或多個共享資源腐晾,而不是前述的一個資源叉弦。進(jìn)程同時要求的共享資源越多,發(fā)生死鎖可能性越大赴魁。
(2)解決思想:一次性分配給進(jìn)程所需資源卸奉,用完一起釋放。Wait操作時對它所有需要的資源都要判斷颖御,有AND條件榄棵,故稱“AND同步”、“同時wait”潘拱。
5)信號量集
(1)引入原因:
????每次只能獲得或釋放一個單位的資源疹鳄,低效;某些時候資源分配有下限的限制芦岂;修改:在大于可分配設(shè)置的下界值t前提下瘪弓,每次可分配d個。
(2)信號量集的一個特例
只有一個信號量S的幾種特殊情況:lSwait(S,d, d)禽最,允許每次申請d個資源腺怯,若現(xiàn)有資源數(shù)少于d,不予分配川无。lSwait(S,1, 1)呛占,蛻化為一般的記錄型信號量,一次申請一個懦趋,至多分配一個(S>1時可計數(shù)晾虑,或S=1時可控制互斥)。lSwait(S,1, 0)仅叫,當(dāng)S>=1時帜篇,允許多個進(jìn)程進(jìn)入某特定區(qū),當(dāng)S變?yōu)?后诫咱,阻止任何進(jìn)程進(jìn)入特定區(qū)笙隙,相當(dāng)于可控開關(guān)。并不對S資源的數(shù)量產(chǎn)生影響坎缭。
(3)*體驗Swait(S,1, 0)的開關(guān)作用(選看)
給車庫位數(shù)定義資源信號量S=5通行證p=0
*信號量題目做題一般方法:
1.分析問題竟痰,找出同步、互斥關(guān)系
2.根據(jù)資源設(shè)置信號量變量
3.寫出代碼過程幻锁,并注意P凯亮、V操作的位置
4.檢查代碼,模擬機(jī)器運(yùn)行哄尔,體驗信號量的變化和程序運(yùn)行過程是否正確假消。
2.5
管程:
管程的組成
1.一組局部變量
2.對局部變量操作的一組過程
3.對局部變量進(jìn)行初始化的語句。
(聯(lián)想面向?qū)ο笾械念悾?/p>
2.管程特點(diǎn)
任何進(jìn)程只能通過調(diào)用管程提供的過程入口才能進(jìn)入管程訪問共享數(shù)據(jù)岭接;
就如同使用臨界資源富拗,就要先通過其信號量的申請臼予。
任何時刻,僅允許一個進(jìn)程在管程中執(zhí)行某個內(nèi)部過程啃沪。
管程如何實現(xiàn)同步?
對共享變量互斥操作:
? 管程的特點(diǎn)直接實現(xiàn)了該要求粘拾,進(jìn)程一次一個進(jìn)入管程調(diào)用內(nèi)部過程操作共享變量。
管程的互斥訪問完全由編譯程序在編譯時自動添上创千,無須程序員關(guān)心缰雇,能保證正確。
操作的同步控制:
靠條件變量的操作管理實現(xiàn)追驴。
? 進(jìn)入管程但不能獲取資源操作的過程將阻塞械哟,并在滿足條件時被喚醒執(zhí)行。
3.條件變量
(主要作用就是進(jìn)程同步的阻塞和喚醒控制)
局部于管程的變量有兩種:
普通變量
條件變量(用于控制進(jìn)程阻塞和喚醒)
類似信號量變量殿雪,但不取具體值暇咆;相當(dāng)于每個阻塞隊列的隊列指針。
管程優(yōu)點(diǎn):
對條件變量的操作需結(jié)合對普通變量的條件判斷丙曙,從而控制進(jìn)程狀態(tài)爸业。
保證進(jìn)程互斥地訪問共享變量,并方便地阻塞和喚醒進(jìn)程亏镰。管程可以以函數(shù)庫的形式實現(xiàn)扯旷。相比之下,管程比信號量好控制拆挥。
管程可增強(qiáng)模塊的獨(dú)立性:系統(tǒng)按資源管理的觀點(diǎn)分解成若干模塊薄霜,用數(shù)據(jù)表示抽象系統(tǒng)資源某抓,使同步操作相對集中纸兔,從而增加了模塊的相對獨(dú)立性
引入管程可提高代碼的可讀性,便于修改和維護(hù)否副,正確性易于保證:采用集中式同步機(jī)制汉矿。一個操作系統(tǒng)或并發(fā)程序由若干個這樣的模塊所構(gòu)成,一個模塊通常較短备禀,模塊之間關(guān)系清晰
管程缺點(diǎn):
大多數(shù)常用的編程語言中沒有實現(xiàn)管程洲拇,如果某種語言本身不支持管程,那么加入管程是很困難的曲尸。
雖然大多數(shù)編程語言也沒有實現(xiàn)信號量赋续,但可將P、V操作作為一個獨(dú)立的子例程或操作系統(tǒng)的管理程序調(diào)用加入
2.6進(jìn)程通信
進(jìn)程通信是指進(jìn)程之間的信息交換另患。
一纽乱、低級通信——進(jìn)程之間的互斥和同步
? 信號量機(jī)制是有效的同步工具,但作為通信工具缺點(diǎn)如下:
(1)效率低(通信量少)
(2)通信對用戶不透明(程序員實現(xiàn)昆箕,操作系統(tǒng)只提供共享存儲器供代碼操作)
二鸦列、高級進(jìn)程通信
? 用戶直接利用操作系統(tǒng)提供的一組通信命令租冠,高效地傳送大量數(shù)據(jù)的通信方式。
操作系統(tǒng)隱藏了進(jìn)程通信的細(xì)節(jié)薯嗤,對用戶透明顽爹,減少了通信程序編制上的復(fù)雜性。
1.進(jìn)程通信的類型:
高級通信機(jī)制可歸結(jié)為四大類
①共享存儲器系統(tǒng)(操作存儲區(qū)方式)
? 相互通信的進(jìn)程共享某些數(shù)據(jù)結(jié)構(gòu)或共享存儲區(qū)骆姐,進(jìn)程之間能夠通過這些空間進(jìn)行通信镜粤。
a.基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式(低級)
b.基于共享存儲區(qū)的通信方式(高級)
2.消息傳遞通信的實現(xiàn)方法
1)直接通信方式
? 發(fā)送進(jìn)程利用OS所提供的發(fā)送命令(原語),直接把消息發(fā)送給目標(biāo)進(jìn)程玻褪。此時繁仁,發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式提供對方的標(biāo)識符。通常利用系統(tǒng)通信命令(原語):
? Send(Receiver, message);
? Receive(Sender, message);
2)間接通信方式
? 基于共享數(shù)據(jù)結(jié)構(gòu)的實體用來暫存發(fā)送給目標(biāo)進(jìn)程的消息归园;接收進(jìn)程則從該實體中黄虱,取出對方發(fā)送給自己的消息。通常把這種實體稱為信箱庸诱。
消息在信箱中可以安全地保存捻浦,只允許核準(zhǔn)的目標(biāo)用戶隨時讀取。既可實時通信桥爽,又可非實時通信朱灿。
3.消息傳遞系統(tǒng)的實現(xiàn)
? 單機(jī)和網(wǎng)絡(luò)環(huán)境下的高級進(jìn)程通信廣泛采用“消息傳遞”方式,需要考慮的問題:
? ? 1通信鏈路的建立
? ? 2 消息格式
? ? 3同步方式
4.消息緩沖隊列通信機(jī)制
美國Hansan提出钠四,在RC 4000系統(tǒng)上實現(xiàn)盗扒。后被廣泛應(yīng)用于本地進(jìn)程通信。
①不需管理鏈路
②定義簡單數(shù)據(jù)結(jié)構(gòu)(亦即消息格式)
③實現(xiàn)發(fā)送和接收的操作原語
1.線程的引入
多道程序管理:追求效率的目的下實現(xiàn)“并發(fā)”
2.線程的屬性
多線程OS中缀去,一個進(jìn)程包括多個線程侣灶,每個線程都是利用CPU的基本單位。
輕型實體:只需一點(diǎn)必不可少的缕碎、能保證獨(dú)立運(yùn)行的資源褥影。(TCB)
獨(dú)立調(diào)度和分派的基本單位:調(diào)度切換迅速且開銷小。
可并發(fā)執(zhí)行
共享進(jìn)程資源:同進(jìn)程中的線程可共享相同的進(jìn)程地址空間咏雌、已打開文件凡怎、信號量機(jī)構(gòu)
3.線程的信息
(TCB管理什么信息?)
狀態(tài)參數(shù)
標(biāo)識符赊抖、運(yùn)行狀態(tài)统倒、優(yōu)先級、寄存器狀態(tài)氛雪、堆棧房匆、專有存儲器、信號屏蔽等。
運(yùn)行狀態(tài)
執(zhí)行坛缕、就緒墓猎、阻塞
4.線程的創(chuàng)建和終止
在多線程OS中,應(yīng)用程序啟動時赚楚,通常只有一個線程(初始化線程)在執(zhí)行毙沾,它根據(jù)需要再創(chuàng)建若干線程。
創(chuàng)建新線程
? 利用線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用)宠页,提供相應(yīng)參數(shù)左胞。線程創(chuàng)建函數(shù)執(zhí)行完后,返回一個線程標(biāo)識符供以后使用举户。
線程被終止:
? 不立即釋放資源烤宙,只有當(dāng)進(jìn)程中的其它線程執(zhí)行分離函數(shù)后,資源才分離出來能被其它線程利用俭嘁。
? ? 被終止而未釋放資源的線程仍可被需要它的線程調(diào)用躺枕,使其重新恢復(fù)運(yùn)行。
5.多線程系統(tǒng)中的進(jìn)程
進(jìn)程只是用于分配系統(tǒng)資源
包括多個線程
不是執(zhí)行實體供填,線程在進(jìn)程范圍內(nèi)作為執(zhí)行實體拐云。
6.線程的管理
n同步和通信機(jī)制
1)互斥鎖
比較簡單的,控制線程互斥訪問資源近她;
適用于高頻度使用的關(guān)鍵共享數(shù)據(jù)和程序段叉瘩;
nunlock和lock兩個鎖操作原語;
2)條件變量
與互斥鎖一起使用
鎖保證互斥進(jìn)入臨界區(qū)粘捎,但利用條件變量使線程阻塞
注意不滿足條件時薇缅,wait條件變量:
釋放互斥鎖
進(jìn)程阻塞在條件變量指向隊列中
被喚醒后要重新再設(shè)互斥鎖
3)信號量
私用信號量(privatesamephore)
用于同進(jìn)程的線程間同步,數(shù)據(jù)結(jié)構(gòu)存放在應(yīng)用程序的地址空間攒磨。屬于特定進(jìn)程泳桦,OS感知不到其存在。
公用信號量(publicsamephore)
用于不同進(jìn)程間或不同進(jìn)程中線程的同步咧纠,數(shù)據(jù)結(jié)構(gòu)由OS管理蓬痒,存放在受保護(hù)的系統(tǒng)存儲區(qū)泻骤。
二漆羔、線程的實現(xiàn)方式
1.內(nèi)核線程KST(kernel-level thread)
依賴于內(nèi)核,利用系統(tǒng)調(diào)用由OS內(nèi)核在內(nèi)核空間完成創(chuàng)建狱掂、撤消演痒、切換等線程工作。
時間片分配給線程趋惨,所以多線程的進(jìn)程獲得更多CPU時間鸟顺。
2.用戶線程ULT(user-level thread)
無須利用系統(tǒng)調(diào)用,不依賴于OS核心。進(jìn)程利用線程庫函數(shù)創(chuàng)建讯嫂、同步蹦锋、調(diào)度和管理控制用戶線程。
調(diào)度由應(yīng)用軟件內(nèi)部進(jìn)行欧芽,通常采用非搶先式和更簡單的規(guī)則莉掂,也無需用戶態(tài)/核心態(tài)切換,速度比kst快
?