0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

進(jìn)程和線程的區(qū)別

dyquk4xk2p3d ? 來源:CSDN ? 2023-05-09 11:06 ? 次閱讀

進(jìn)程和線程

進(jìn)程和線程的區(qū)別

線程具有許多傳統(tǒng)進(jìn)程所具有的特征,故又稱為輕型進(jìn)程(Light—Weight Process)或進(jìn)程元;而把傳統(tǒng)的進(jìn)程稱為重型進(jìn)程(Heavy—Weight Process),它相當(dāng)于只有一個線程的任務(wù)。在引入了線程的操作系統(tǒng)中,通常一個進(jìn)程都有若干個線程,至少包含一個線程。

根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是處理器任務(wù)調(diào)度和執(zhí)行的基本單位

資源開銷:每個進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程之間切換的開銷小。

包含關(guān)系:如果一個進(jìn)程內(nèi)有多個線程,則執(zhí)行過程不是一條線的,而是多條線(線程)共同完成的;線程是進(jìn)程的一部分,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級進(jìn)程。

內(nèi)存分配:同一進(jìn)程的線程共享本進(jìn)程的地址空間和資源,而進(jìn)程之間的地址空間和資源是相互獨(dú)立的

影響關(guān)系:一個進(jìn)程崩潰后,在保護(hù)模式下不會對其他進(jìn)程產(chǎn)生影響,但是一個線程崩潰整個進(jìn)程都死掉。所以多進(jìn)程要比多線程健壯。

執(zhí)行過程:每個獨(dú)立的進(jìn)程有程序運(yùn)行的入口、順序執(zhí)行序列和程序出口。但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制,兩者均可并發(fā)執(zhí)行

進(jìn)程的狀態(tài)轉(zhuǎn)換

三種基本狀態(tài):

運(yùn)行態(tài):占用CPU,并在CPU上運(yùn)行

就緒態(tài):已經(jīng)具備了運(yùn)行條件,但由于沒有空閑的CPU,而暫時不能運(yùn)行

阻塞態(tài):因等待某一事件而暫時不能運(yùn)行

另外兩種狀態(tài):

創(chuàng)建態(tài):進(jìn)程正在被創(chuàng)建,操作系統(tǒng)為進(jìn)程分配資源,初始化PCB

進(jìn)程正在從系統(tǒng)中撤銷,操作系統(tǒng)會回收進(jìn)程擁有的資源,撤銷PCB

進(jìn)程間的通信

對于同步和互斥的理解:

區(qū)別:

互斥:是指三部在不同進(jìn)程之間的若干程序片斷,當(dāng)某個進(jìn)程運(yùn)行其中一個程序片段時,其它進(jìn)程就不能運(yùn)行它們之中的任一程序片段,只能等到該進(jìn)程運(yùn)行完這個程序片段后才可以運(yùn)行。

同步:是指散步在不同進(jìn)程之間的若干程序片斷,它們的運(yùn)行必須嚴(yán)格按照規(guī)定的 某種先后次序來運(yùn)行,這種先后次序依賴于要完成的特定的任務(wù)。

聯(lián)系:

同步是一種更為復(fù)雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個線程之間不可以同時運(yùn)行,他們會相互排斥,必須等待一個線程運(yùn)行完畢,另一個才能運(yùn)行,而同步也是不能同時運(yùn)行,但他是必須要安照某種次序來運(yùn)行相應(yīng)的線程(也是一種互斥)。

進(jìn)程間為什么需要通信

在操作系統(tǒng)中,協(xié)作的進(jìn)程可能共享一些彼此都能共同讀寫的一些有限資源。而這些資源是有限的,或者如一些共享內(nèi)存,進(jìn)程隨意讀寫可能會造成數(shù)據(jù)的順序,內(nèi)容等發(fā)生錯亂,進(jìn)程不能對其隨意的使用,讀寫等。從而會發(fā)生競爭。我們把對共享內(nèi)存進(jìn)行訪問的程序片稱為臨界資源或臨界區(qū),對同一共享內(nèi)存,任何時候兩個進(jìn)程不能同時處于臨界區(qū).

進(jìn)程間通信的目的:

數(shù)據(jù)傳輸:一個進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個進(jìn)程。

通知事件:一個進(jìn)程需要向另一個或一組進(jìn)程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進(jìn)程終止時要通知父進(jìn)程)。

資源共享:多個進(jìn)程之間共享同樣的資源。為了做到這一點(diǎn),需要內(nèi)核提供互斥和同步機(jī)制。

進(jìn)程控制:有些進(jìn)程希望完全控制另一個進(jìn)程的執(zhí)行(如 Debug 進(jìn)程),此時控制進(jìn)程希望能夠攔截另一個進(jìn)程的所有陷入和異常,并能夠及時知道它的狀態(tài)改變

進(jìn)程間通信的方式

1.管道通信:

9033da3a-edf9-11ed-90ce-dac502259ad0.png

管道只能采取半雙工通信,某一時間段內(nèi)只能實(shí)現(xiàn)單向的傳輸。如果要實(shí)現(xiàn)雙向同時通信,則需要設(shè)置兩個管道

各個進(jìn)程要互斥的訪問管道

數(shù)據(jù)以字節(jié)流的形式寫入管道,當(dāng)管道寫滿時,寫進(jìn)程的write()系統(tǒng)調(diào)用將會被阻塞,等待讀進(jìn)程將數(shù)據(jù)取走。當(dāng)讀進(jìn)程將數(shù)據(jù)全部取走后,管道變空,此時讀進(jìn)程的read()系統(tǒng)調(diào)用將會被阻塞

注意:匿名管道只能用于有親緣關(guān)系間的進(jìn)程,而有名管道允許無親緣關(guān)系的進(jìn)程間通信

2.消息隊(duì)列MessageQueue:

消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識符標(biāo)識。消息隊(duì)列克服了信號傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。

3.信號

信號是進(jìn)程之間唯一的異步通信機(jī)制,信號的主要來源主要有硬件來源(入鍵盤操作ctrl + C) 和軟件來源(如kill命令),信號傳遞的信息比較少,主要用于通知進(jìn)程某個時間已經(jīng)發(fā)生。比如利用kill pid,可以讓系統(tǒng)優(yōu)雅停機(jī)。

4.信號量

信號量是一個計(jì)數(shù)器,可以用來控制多個進(jìn)程對資源的訪問,通常作為一種鎖機(jī)制,防止某個進(jìn)程正在訪問共享資源,其他進(jìn)程也訪問資源

5.共享內(nèi)存

共享內(nèi)存就是映射一段能被進(jìn)程之間共享的內(nèi)存,這段內(nèi)存由一個進(jìn)程創(chuàng)建,但是多個進(jìn)程都可以共享訪問,是最快的一種進(jìn)程間通信的方式(不需要從用戶態(tài)到內(nèi)核態(tài)的切換),它是針對其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。它往往與其他通信機(jī)制,如信號量,配合使用,來實(shí)現(xiàn)進(jìn)程間的同步和通信。

6.Socket

socket套接字,不僅僅可以用于本地進(jìn)程通信,還可以用于不通主機(jī)進(jìn)程之間的通信。

進(jìn)程的調(diào)度和處理機(jī)調(diào)度

進(jìn)程調(diào)度(低級調(diào)度),就是按照某種算法,從就緒隊(duì)列中選擇一個進(jìn)程為其分配處理機(jī)

進(jìn)程調(diào)度的時機(jī)

進(jìn)程主動放棄處理機(jī):進(jìn)程正常終止,發(fā)生異常終止,進(jìn)程主動請求阻塞(如等待I/O)等

進(jìn)程被動放棄處理機(jī):分配的時間片用完,IO中斷,有更高的優(yōu)先級進(jìn)程進(jìn)入就緒隊(duì)列等

調(diào)度算法

設(shè)置多級就緒隊(duì)列,各級的隊(duì)列優(yōu)先級從高到低,時間片從小到大

新進(jìn)程到達(dá)時先進(jìn)入第一級隊(duì)列,按照先來先服務(wù)排隊(duì)等待被分配時間片,若用完時間片進(jìn)程還未結(jié)束,則進(jìn)程進(jìn)入下一級隊(duì)列的隊(duì)尾,如果此時已經(jīng)在最下級隊(duì)列,則從新放回最后一級隊(duì)列的隊(duì)尾

只有當(dāng)?shù)贙級的隊(duì)列為空時,才會為K+1級的隊(duì)列隊(duì)頭的進(jìn)程分配時間片

先來先服務(wù)

最短作業(yè)優(yōu)先

最高響應(yīng)比優(yōu)先 響應(yīng)比:(等待時間+服務(wù)時間)/要求服務(wù)的時間

時間片輪轉(zhuǎn)調(diào)度

優(yōu)先級調(diào)度

多級反饋隊(duì)列

內(nèi)存管理

內(nèi)存管理的功能

內(nèi)存空間的分配與回收:由操作系統(tǒng)完成主存儲器空間的分配和管理,使程序員擺脫存儲分配的麻煩,提高編程效率。

地址轉(zhuǎn)換:在多道程序環(huán)境下, 程序中的邏輯地址與內(nèi)存中的物理地址不可能一致, 因此存儲管理必須提供地址變換功能,把邏輯地址轉(zhuǎn)換成相應(yīng)的物理地址。

內(nèi)存空間的擴(kuò)充:利用虛擬存儲技術(shù)或自動覆蓋技術(shù),從邏輯上擴(kuò)充內(nèi)存 。

存儲保護(hù):保證各道作業(yè)在各自的存儲空間內(nèi)運(yùn)行,互不干擾。

內(nèi)存分配方式

連續(xù)分配管理方式

連續(xù)分配方式,是指為一個用戶程序分配一個連續(xù)的內(nèi)存空間,比如說某用戶需要1GB的內(nèi)存空間,它就在內(nèi)存空間中分配一塊連續(xù)的 1GB的空間給用戶。

單一連續(xù)分配:內(nèi)存在此方式下分為系統(tǒng)區(qū)和用戶區(qū),系統(tǒng)區(qū)僅提供給操作系統(tǒng)使用,通常在低地址部分;用戶區(qū)是為用戶提供的、除系統(tǒng)區(qū)之外的內(nèi)存空間。這種方式無需進(jìn)行內(nèi)存保護(hù)。

固定分區(qū)分配:固定分區(qū)分配是最簡單的一種多道程序存儲管理方式,它將用戶內(nèi)存空間劃分為若干個固定大小的區(qū)域,每個分區(qū)只裝入一道作業(yè)。當(dāng)有空閑分區(qū)時,便可以再從外存的后備作業(yè)隊(duì)列中, 選擇適當(dāng)大小的作業(yè)裝入該分區(qū),如此循環(huán)。

動態(tài)分區(qū)分配:動態(tài)分區(qū)分配又稱為可變分區(qū)分配,是一種動態(tài)劃分內(nèi)存的分區(qū)方法。這種分區(qū)方法不預(yù)先將內(nèi)存劃分,而是在進(jìn)程裝入內(nèi)存時,根據(jù)進(jìn)程的大小動態(tài)地建立分區(qū) ,并使分區(qū)的大小正好適合進(jìn)程的需要。因此系統(tǒng)中分區(qū)的大小和數(shù)目是可變的。

分配策略算法

首次適應(yīng) (First Fit) 算法:空閑分區(qū)以地址遞增的次序鏈接。分配內(nèi)存時順序查找,找到大小能滿足要求的第一個空閑分區(qū)。

最佳適應(yīng) ( Best Fit )算法:空閑分區(qū)按容量遞增形成分區(qū)鏈,找到第一個能滿足要求的空閑分區(qū)。

最壞適應(yīng) ( Worst Fit )算法:又稱最大適應(yīng) ( Largest Fit )算法,空閑分區(qū)以容量遞減的次序鏈接。找到第一個能滿足要求的空閑分區(qū),也就是挑選出最大的分區(qū)。

鄰近適應(yīng) ( Next Fit )算法:又稱循環(huán)首次適應(yīng)算法,由首次適應(yīng)算法演變而成。不同之處是分配內(nèi)存時從上次查找結(jié)束的位置開始繼續(xù)查找。

非連續(xù)分配管理方式

非連續(xù)分配允許一個程序分散地裝入到不相鄰的內(nèi)存分區(qū)中

分頁存儲管理方式

將內(nèi)存空間分為一個個大小相等的分區(qū)(比如:每個分區(qū)4KB),每個分區(qū)就是一個頁框(頁幀,內(nèi)存塊,物理塊),每個頁框都有一個編號,即頁框號(頁幀號,內(nèi)存塊號,物理塊號),頁框號從0開始

將用戶進(jìn)程的地址空間也分為與頁框大小相等的一個個區(qū)域,稱為 "頁"或 “頁面”,每個頁面也有一個編號,即頁號,頁號也是從0開始(注意:進(jìn)程最后一個頁面可能沒有頁框那么大,因此頁框不能太大,否則會產(chǎn)生過大的內(nèi)部碎片)

操作系統(tǒng)以頁框?yàn)閱挝粸楦鱾€進(jìn)程分配內(nèi)存空間。進(jìn)程的每個頁面分別放入一個頁框中,則進(jìn)程的頁面和內(nèi)存的頁框產(chǎn)生了一一對應(yīng)的關(guān)系

904bbf42-edf9-11ed-90ce-dac502259ad0.png

分段存儲管理方式

進(jìn)程的地址空間:按照程序自身的邏輯關(guān)系劃分為若干個段,每個段都有一個段名(在低級語言中,程序員使用段名來編程),每段從0開始編址

內(nèi)存分配規(guī)則:以段位單位進(jìn)行分配,每個段在內(nèi)存中占據(jù)連續(xù)空間,但是各個段之間可以不相鄰

優(yōu)點(diǎn):由于是按邏輯功能劃分,用戶編程更加方便,程序的可讀性更高

9071306a-edf9-11ed-90ce-dac502259ad0.png

分頁和分段存儲管理的區(qū)別

頁是信息的物理單位,分頁是為實(shí)現(xiàn)離散分配方式,提高內(nèi)存利用率。分頁僅僅是由于系統(tǒng)管理的需要而并不是用戶的需要。而段則是信息的邏輯單位,是為了更好地滿足用戶的需要。

分段比分頁更容易實(shí)現(xiàn)信息的保護(hù)與共享,分段可以在某個段編寫邏輯,實(shí)現(xiàn)對另外一個段的保護(hù),而分頁不行

頁的大小固定且由系統(tǒng)決定,而段的長度取決于用戶所編寫的程序。

頁面置換算法(追求最少的缺頁率)

最佳置換算法OPT(無法實(shí)現(xiàn),作為一個標(biāo)準(zhǔn)):每次選擇淘汰的頁面將是以后永不使用,或者在最長的時間內(nèi)不被使用,由于無法預(yù)知將會訪問哪些頁面,所以這種算法無法實(shí)現(xiàn),只能作為一個標(biāo)準(zhǔn)

例如:需要訪問7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,則訪問順序:

908b3a8c-edf9-11ed-90ce-dac502259ad0.png

先進(jìn)先出置換算法FIFO:每次選擇淘汰的頁面是最早進(jìn)入內(nèi)存的頁面

例如:需要訪問 3 2 1 0 3 2 4 3 2 1 0 4 ,則訪問順序

90abbfbe-edf9-11ed-90ce-dac502259ad0.png

最近最久未使用置換算法(LRU):每次淘汰的頁面是最近最久未使用的頁面

例如:需要訪問 1 8 1 7 8 2 7 2 1 8 3 8 2 1 3 1 7 1 3 7 則訪問順序

90bfa81c-edf9-11ed-90ce-dac502259ad0.png

最近未用置換算法NRU(Clock算法):為每個頁面設(shè)置一個訪問位,再將內(nèi)存中的頁面都通過鏈接指針鏈接成一個循環(huán)隊(duì)列。當(dāng)某頁被訪問時,其訪問位置為1.當(dāng)需要淘汰某個頁面時,只需要檢查頁的訪問位。如果是0,就將該頁面換出,如果是1,則將他置為0,暫不換出。繼續(xù)檢查下一個頁面,如果第一輪掃描之后全是1,則掃描完成,這些都置為0.再進(jìn)行第二輪掃描,因此簡單的Clock算法選擇一個頁面淘汰最多兩輪

90e0fd00-edf9-11ed-90ce-dac502259ad0.png

文件管理

文件的分配方式(物理結(jié)構(gòu))

文件塊和磁盤塊:類似于內(nèi)存的分頁

磁盤塊:磁盤中的存儲單元會被分為一個個"塊/磁盤塊/物理塊",在很多的操作系統(tǒng)中,磁盤塊的大小與內(nèi)存塊,頁面的大小相同

90fc3318-edf9-11ed-90ce-dac502259ad0.png

文件塊:在外存管理中,為了方便對文件數(shù)據(jù)的管理,文件的邏輯地址空間被分為一個一個的文件塊,文件的邏輯地址可以表示為(邏輯塊號,塊內(nèi)地址)的形式。用戶通過邏輯地址來操作自己的文件,操作

9118cfd2-edf9-11ed-90ce-dac502259ad0.png

文件的分配方式

連續(xù)分配:要求每個文件在磁盤上占有一組連續(xù)的塊

優(yōu)點(diǎn):支持順序訪問和直接訪問(類似數(shù)組),連續(xù)分配的文件在順序訪問時速度最快

缺點(diǎn):不方便文件的擴(kuò)展,存儲空間利用率低,會產(chǎn)生磁盤碎片

9135c29a-edf9-11ed-90ce-dac502259ad0.png

鏈接分配:采取離散分配的方式,為文件分配離散的磁盤塊。(類似鏈表數(shù)據(jù)結(jié)構(gòu))

隱式鏈接:目錄中記錄的文件的起始塊號和結(jié)束塊號。除了文件最后一個磁盤塊之外,每個磁盤塊中都會保存指向下一個盤塊的指針,這些指針對用戶是透明的,每次訪問某個磁盤塊都需從頭訪問

優(yōu)點(diǎn):方便文件的擴(kuò)展,不會產(chǎn)生碎片問題,外存的利用率高

缺點(diǎn):只支持順序訪問,不支持隨機(jī)訪問,查找時效率低

917826ee-edf9-11ed-90ce-dac502259ad0.png

*顯示鏈接:把用于鏈接文件各物理塊的指針顯示的存放在一張表中,即文件分配表。文件目錄只需要記錄起始塊號。一個磁盤只需要設(shè)置一張分配表,開機(jī)時,將分配表讀入內(nèi)存,并常駐內(nèi)存 *優(yōu)點(diǎn):支持順序訪問,也支持隨機(jī)訪問,方便文件的擴(kuò)展,不會產(chǎn)生碎片問題,地址轉(zhuǎn)換不需要訪問磁盤,因此文件的訪問效率更高 *缺點(diǎn):文件分配表需要占據(jù)一定的存儲空間

91c36140-edf9-11ed-90ce-dac502259ad0.png

索引分配:索引分配允許文件離散的分配在各個磁盤塊中,系統(tǒng)會為每個文件建立一張索引表,索引表中記錄了文件的各個邏輯塊對應(yīng)的物理塊(索引表的功能類似于內(nèi)存管理的頁表–建立邏輯頁面到物理頁面之間的映射關(guān)系)。索引表存放的磁盤塊稱為索引塊,文件數(shù)據(jù)存放的磁盤塊稱為數(shù)據(jù)塊

文件存儲空間管理

存儲空間的劃分和初始化

存儲空間的劃分:將物理磁盤劃分為一個個文件卷(邏輯卷,邏輯盤,如Windows系統(tǒng)下的C,D,E盤等)

有的系統(tǒng)支持超大型文件,可由多個物理磁盤組成一個文件卷

存儲空間的初始化:將各個文件卷劃分為目錄區(qū),文件區(qū)

目錄區(qū):目錄區(qū)主要存放文件的目錄信息(FCB),用于磁盤存儲空間的管理的信息

文件區(qū):文件區(qū)用于存放文件數(shù)據(jù)

91e170cc-edf9-11ed-90ce-dac502259ad0.png

存儲空間的管理方法

空閑表法:與內(nèi)存管理中的動態(tài)分區(qū)分配很類似,為一個文件分配連續(xù)的存儲空間。同樣可以采用首次適應(yīng),最佳適應(yīng),最壞適應(yīng)等算法來決定要為文件分配哪個區(qū)間

92076d72-edf9-11ed-90ce-dac502259ad0.png

空閑鏈表法:分為—>

空閑盤塊鏈:以盤塊為單位組成一條空閑鏈

空閑盤區(qū)鏈:以盤區(qū)為單位組成一條空閑鏈

9227b4ec-edf9-11ed-90ce-dac502259ad0.png

位示圖法:每個二進(jìn)制位代表一個盤塊。例如可以用"0"來代表盤塊空閑 ,"1"代表盤塊已經(jīng)分配

9250861a-edf9-11ed-90ce-dac502259ad0.png

成組鏈接法:UNIX采用的策略,適合大型的文件系統(tǒng)。

IO管理

磁盤調(diào)度算法

一次磁盤讀/寫操作需要的時間:尋找時間+延遲時間+傳輸時間

尋找時間:在讀/寫前,將磁頭移動到指定磁道所畫的時間(啟動磁頭臂和移動磁頭臂)

延遲時間:通過旋轉(zhuǎn)磁盤,使磁頭定位到目標(biāo)扇區(qū)所需要的時間

傳輸時間:從磁盤中讀出或?qū)懭霐?shù)據(jù)所經(jīng)歷的時間

磁盤調(diào)度算法:

先來先服務(wù)算法(FIFO):根據(jù)進(jìn)程請求訪問磁盤的先后順序進(jìn)行調(diào)度

最短尋找時間優(yōu)先算法(SSTF):優(yōu)先處理的磁道是與當(dāng)前磁道最近的磁道,可以保證每次的尋道時間最短,但是不能保證總的尋道時間最短(貪心算法)

掃描算法(SCAN,電梯調(diào)度算法):SSTF算法可能會產(chǎn)生饑餓,磁頭有可能在一個小區(qū)域內(nèi)來回移動,因此掃描算法規(guī)定,只有磁頭移動到最外側(cè)磁道的時候才能往內(nèi)移動,移動到最內(nèi)側(cè)磁道才能往外移動,在這個基礎(chǔ)上使用SSTF算法

循環(huán)掃描算法(C-SCAN):SCAN算法對于各個位置磁道的響應(yīng)頻率不平均,C-SCAN算法在SCAN算法的基礎(chǔ)上規(guī)定:只有磁頭朝著某個特定的方向移動時才能處理磁道的訪問請求,而返回時直接快速移動到起始端而不處理任何請求

死鎖

對死鎖的理解

如果一組進(jìn)程中的每個進(jìn)程都在等待一個事件,而這個事件是有這組中的某一個進(jìn)程觸發(fā),這種情況則會導(dǎo)致死鎖

資源死鎖的條件:發(fā)生死鎖時,以下四個條件必須全部具備

互斥條件:進(jìn)程要求對所分配的資源進(jìn)行排它性控制,即在一段時間內(nèi)某資源僅為一進(jìn)程所占用。

保持和等待條件:當(dāng)進(jìn)程因請求資源而阻塞時,對已獲得的資源保持不放。

不可搶占條件:進(jìn)程已獲得的資源在未使用完之前,不能剝奪,只能在使用完時由自己釋放。

循環(huán)等待條件:在發(fā)生死鎖時,必然存在一個進(jìn)程–資源的環(huán)形鏈。

死鎖的避免->銀行家算法

當(dāng)一個進(jìn)程申請使用資源的時候,銀行家算法通過先 試探 分配給該進(jìn)程資源,然后通過安全性算法判斷分配后的系統(tǒng)是否處于安全狀態(tài),若不安全則試探分配作廢,讓該進(jìn)程繼續(xù)等待。

安全序列的判斷:

92625142-edf9-11ed-90ce-dac502259ad0.png

死鎖的解除

資源剝奪法:掛起(暫時放到外存上)某些死鎖的進(jìn)程,并搶占他的資源,將這些資源分配給其他的死鎖進(jìn)程。但是應(yīng)防止被掛起的進(jìn)程長時間得不到資源而饑餓

撤銷進(jìn)程法:強(qiáng)制撤銷部分,甚至全部的死鎖進(jìn)程,并剝奪這些進(jìn)程的資源。雖然實(shí)現(xiàn)簡單,但是代價可能較大

進(jìn)程回退法:讓一個或多個死鎖進(jìn)程回退到足以避免死鎖的地步

簡單來說,死鎖的破壞就是對死鎖產(chǎn)生的四個條件進(jìn)行破壞,讓其中任意一個不滿足即可。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6545

    瀏覽量

    122732
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    501

    瀏覽量

    19580
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    197

    瀏覽量

    13928

原文標(biāo)題:這一次,徹底拿下操作系統(tǒng)?。?!

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    進(jìn)程線程的概念及其區(qū)別

    今天浩道跟大家分享一篇關(guān)于進(jìn)程線程之間關(guān)聯(lián)的硬核干貨,看看大神如何通過通俗易懂的圖文,讓大家更加深刻理解進(jìn)程線程區(qū)別
    的頭像 發(fā)表于 11-21 10:50 ?770次閱讀
    <b class='flag-5'>進(jìn)程</b>和<b class='flag-5'>線程</b>的概念及其<b class='flag-5'>區(qū)別</b>

    #硬聲創(chuàng)作季 程序員知識:【進(jìn)程管理】進(jìn)程線程區(qū)別

    計(jì)算機(jī)原理cpu/soc
    Mr_haohao
    發(fā)布于 :2022年09月16日 19:19:55

    Java語言核心基礎(chǔ)語法325-進(jìn)程線程區(qū)別

    JAVA
    電子學(xué)習(xí)
    發(fā)布于 :2023年01月16日 16:00:48

    進(jìn)程線程區(qū)別

    線程是指進(jìn)程內(nèi)的一個執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體.與進(jìn)程區(qū)別:(1)地址空間:進(jìn)程內(nèi)的一個
    發(fā)表于 12-12 09:28

    進(jìn)程線程區(qū)別

    `1、進(jìn)程線程區(qū)別和聯(lián)系進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。計(jì)算機(jī)的核心是C
    發(fā)表于 11-30 14:06

    進(jìn)程線程區(qū)別和聯(lián)系介紹

    發(fā)生了變化:它只是資源分配的單位,而不再是調(diào)度運(yùn)行的單位 。在微內(nèi)核系統(tǒng)中,真正調(diào)度運(yùn)行的基本單位是線程。因此,實(shí)現(xiàn)并發(fā)功能的單位是線程線程概念   線程
    發(fā)表于 07-04 00:18

    Linux進(jìn)程線程區(qū)別是什么?

    Linux進(jìn)程線程區(qū)別是什么為什么要使用線程?線程操作的函數(shù)
    發(fā)表于 03-11 06:13

    進(jìn)程線程區(qū)別在哪?

    1、進(jìn)程線程區(qū)別:1. 線程是程序執(zhí)行的最小單位,而進(jìn)程是操作系統(tǒng)分配資源的最小單位;2. 一個進(jìn)程
    發(fā)表于 07-07 06:53

    進(jìn)程線程區(qū)別是什么

    有了提前批的失敗經(jīng)驗(yàn),接下來不斷的總結(jié)鞏固和修正錯誤,這次發(fā)揮要比上次要好很多。一面(電話面)自我介紹進(jìn)程線程區(qū)別線程同步和通信鎖機(jī)制以及死鎖條件和預(yù)防TCP/IP協(xié)議的一些基礎(chǔ)知識C++的構(gòu)造
    發(fā)表于 12-23 07:28

    進(jìn)程線程區(qū)別和聯(lián)系

    進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。 最近,我讀到一篇材料,發(fā)現(xiàn)有一個很好的類比,可以把它們解釋地清晰易懂。 1、計(jì)算機(jī)的核心是 CPU
    的頭像 發(fā)表于 12-05 18:22 ?962次閱讀

    進(jìn)程切換與線程切換有啥區(qū)別

    注意這個題目問的是進(jìn)程**切換**與線程**切換**的區(qū)別,不是進(jìn)程線程區(qū)別。當(dāng)然這里的**
    的頭像 發(fā)表于 02-24 14:16 ?493次閱讀

    程序中進(jìn)程線程區(qū)別

    什么是進(jìn)程 1、進(jìn)程線程區(qū)別 進(jìn)程是指正在運(yùn)行的程序,它擁有獨(dú)立的內(nèi)存空間和系統(tǒng)資源,不同進(jìn)程
    的頭像 發(fā)表于 06-22 11:39 ?528次閱讀
    程序中<b class='flag-5'>進(jìn)程</b>和<b class='flag-5'>線程</b>的<b class='flag-5'>區(qū)別</b>

    進(jìn)程線程區(qū)別以及優(yōu)缺點(diǎn)

    進(jìn)程線程 1、什么是進(jìn)程線程,有什么區(qū)別? 進(jìn)程是資源(CPU、內(nèi)存等)分配的基本單位,
    的頭像 發(fā)表于 07-21 11:02 ?1214次閱讀

    嵌入式進(jìn)程線程區(qū)別

    需要進(jìn)行大量計(jì)算的優(yōu)先使用線程 所謂大量計(jì)算,當(dāng)然就是要耗費(fèi)很多CPU,切換頻繁了,這種情況下線程是最合適的。這種原則最常見的是圖像處理、算法處理。
    發(fā)表于 09-04 10:05 ?299次閱讀
    嵌入式<b class='flag-5'>進(jìn)程</b>和<b class='flag-5'>線程</b>的<b class='flag-5'>區(qū)別</b>

    進(jìn)程線程區(qū)別

    1.什么是進(jìn)程?為什么要有進(jìn)程? 進(jìn)程有一個相當(dāng)精簡的解釋:進(jìn)程是對操作系統(tǒng)上正在運(yùn)行程序的一個抽象。 這個概念確實(shí)挺抽象,仔細(xì)想想?yún)s也挺精準(zhǔn)。 我們平常使用計(jì)算機(jī),都會在同一時間做許
    的頭像 發(fā)表于 11-11 16:46 ?659次閱讀
    <b class='flag-5'>進(jìn)程</b>和<b class='flag-5'>線程</b>的<b class='flag-5'>區(qū)別</b>