進(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)于只有一個(gè)線程的任務(wù)。在引入了線程的操作系統(tǒng)中,通常一個(gè)進(jìn)程都有若干個(gè)線程,至少包含一個(gè)線程。
根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是處理器任務(wù)調(diào)度和執(zhí)行的基本單位
資源開(kāi)銷:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會(huì)有較大的開(kāi)銷;線程可以看做輕量級(jí)的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程之間切換的開(kāi)銷小。
包含關(guān)系:如果一個(gè)進(jìn)程內(nèi)有多個(gè)線程,則執(zhí)行過(guò)程不是一條線的,而是多條線(線程)共同完成的;線程是進(jìn)程的一部分,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。
內(nèi)存分配:同一進(jìn)程的線程共享本進(jìn)程的地址空間和資源,而進(jìn)程之間的地址空間和資源是相互獨(dú)立的
影響關(guān)系:一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,但是一個(gè)線程崩潰整個(gè)進(jìn)程都死掉。所以多進(jìn)程要比多線程健壯。
執(zhí)行過(guò)程:每個(gè)獨(dú)立的進(jìn)程有程序運(yùn)行的入口、順序執(zhí)行序列和程序出口。但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(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)行條件,但由于沒(méi)有空閑的CPU,而暫時(shí)不能運(yùn)行
阻塞態(tài):因等待某一事件而暫時(shí)不能運(yùn)行
另外兩種狀態(tài):
創(chuàng)建態(tài):進(jìn)程正在被創(chuàng)建,操作系統(tǒng)為進(jìn)程分配資源,初始化PCB
進(jìn)程正在從系統(tǒng)中撤銷,操作系統(tǒng)會(huì)回收進(jìn)程擁有的資源,撤銷PCB
進(jìn)程間的通信
對(duì)于同步和互斥的理解:
區(qū)別:
互斥:是指三部在不同進(jìn)程之間的若干程序片斷,當(dāng)某個(gè)進(jìn)程運(yùn)行其中一個(gè)程序片段時(shí),其它進(jìn)程就不能運(yùn)行它們之中的任一程序片段,只能等到該進(jìn)程運(yùn)行完這個(gè)程序片段后才可以運(yùn)行。
同步:是指散步在不同進(jìn)程之間的若干程序片斷,它們的運(yùn)行必須嚴(yán)格按照規(guī)定的 某種先后次序來(lái)運(yùn)行,這種先后次序依賴于要完成的特定的任務(wù)。
聯(lián)系:
同步是一種更為復(fù)雜的互斥,而互斥是一種特殊的同步。也就是說(shuō)互斥是兩個(gè)線程之間不可以同時(shí)運(yùn)行,他們會(huì)相互排斥,必須等待一個(gè)線程運(yùn)行完畢,另一個(gè)才能運(yùn)行,而同步也是不能同時(shí)運(yùn)行,但他是必須要安照某種次序來(lái)運(yùn)行相應(yīng)的線程(也是一種互斥)。
進(jìn)程間為什么需要通信
在操作系統(tǒng)中,協(xié)作的進(jìn)程可能共享一些彼此都能共同讀寫(xiě)的一些有限資源。而這些資源是有限的,或者如一些共享內(nèi)存,進(jìn)程隨意讀寫(xiě)可能會(huì)造成數(shù)據(jù)的順序,內(nèi)容等發(fā)生錯(cuò)亂,進(jìn)程不能對(duì)其隨意的使用,讀寫(xiě)等。從而會(huì)發(fā)生競(jìng)爭(zhēng)。我們把對(duì)共享內(nèi)存進(jìn)行訪問(wèn)的程序片稱為臨界資源或臨界區(qū),對(duì)同一共享內(nèi)存,任何時(shí)候兩個(gè)進(jìn)程不能同時(shí)處于臨界區(qū).
進(jìn)程間通信的目的:
數(shù)據(jù)傳輸:一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程。
通知事件:一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進(jìn)程終止時(shí)要通知父進(jìn)程)。
資源共享:多個(gè)進(jìn)程之間共享同樣的資源。為了做到這一點(diǎn),需要內(nèi)核提供互斥和同步機(jī)制。
進(jìn)程控制:有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如 Debug 進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常,并能夠及時(shí)知道它的狀態(tài)改變
進(jìn)程間通信的方式
1.管道通信:
管道只能采取半雙工通信,某一時(shí)間段內(nèi)只能實(shí)現(xiàn)單向的傳輸。如果要實(shí)現(xiàn)雙向同時(shí)通信,則需要設(shè)置兩個(gè)管道
各個(gè)進(jìn)程要互斥的訪問(wèn)管道
數(shù)據(jù)以字節(jié)流的形式寫(xiě)入管道,當(dāng)管道寫(xiě)滿時(shí),寫(xiě)進(jìn)程的write()系統(tǒng)調(diào)用將會(huì)被阻塞,等待讀進(jìn)程將數(shù)據(jù)取走。當(dāng)讀進(jìn)程將數(shù)據(jù)全部取走后,管道變空,此時(shí)讀進(jìn)程的read()系統(tǒng)調(diào)用將會(huì)被阻塞
注意:匿名管道只能用于有親緣關(guān)系間的進(jìn)程,而有名管道允許無(wú)親緣關(guān)系的進(jìn)程間通信
2.消息隊(duì)列MessageQueue:
消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
3.信號(hào)
信號(hào)是進(jìn)程之間唯一的異步通信機(jī)制,信號(hào)的主要來(lái)源主要有硬件來(lái)源(入鍵盤操作ctrl + C) 和軟件來(lái)源(如kill命令),信號(hào)傳遞的信息比較少,主要用于通知進(jìn)程某個(gè)時(shí)間已經(jīng)發(fā)生。比如利用kill pid,可以讓系統(tǒng)優(yōu)雅停機(jī)。
4.信號(hào)量
信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來(lái)控制多個(gè)進(jìn)程對(duì)資源的訪問(wèn),通常作為一種鎖機(jī)制,防止某個(gè)進(jìn)程正在訪問(wèn)共享資源,其他進(jìn)程也訪問(wèn)資源
5.共享內(nèi)存
共享內(nèi)存就是映射一段能被進(jìn)程之間共享的內(nèi)存,這段內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但是多個(gè)進(jìn)程都可以共享訪問(wèn),是最快的一種進(jìn)程間通信的方式(不需要從用戶態(tài)到內(nèi)核態(tài)的切換),它是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。它往往與其他通信機(jī)制,如信號(hào)量,配合使用,來(lái)實(shí)現(xiàn)進(jìn)程間的同步和通信。
6.Socket
socket套接字,不僅僅可以用于本地進(jìn)程通信,還可以用于不通主機(jī)進(jìn)程之間的通信。
進(jìn)程的調(diào)度和處理機(jī)調(diào)度
進(jìn)程調(diào)度(低級(jí)調(diào)度),就是按照某種算法,從就緒隊(duì)列中選擇一個(gè)進(jìn)程為其分配處理機(jī)
進(jìn)程調(diào)度的時(shí)機(jī)
進(jìn)程主動(dòng)放棄處理機(jī):進(jìn)程正常終止,發(fā)生異常終止,進(jìn)程主動(dòng)請(qǐng)求阻塞(如等待I/O)等
進(jìn)程被動(dòng)放棄處理機(jī):分配的時(shí)間片用完,IO中斷,有更高的優(yōu)先級(jí)進(jìn)程進(jìn)入就緒隊(duì)列等
調(diào)度算法
設(shè)置多級(jí)就緒隊(duì)列,各級(jí)的隊(duì)列優(yōu)先級(jí)從高到低,時(shí)間片從小到大
新進(jìn)程到達(dá)時(shí)先進(jìn)入第一級(jí)隊(duì)列,按照先來(lái)先服務(wù)排隊(duì)等待被分配時(shí)間片,若用完時(shí)間片進(jìn)程還未結(jié)束,則進(jìn)程進(jìn)入下一級(jí)隊(duì)列的隊(duì)尾,如果此時(shí)已經(jīng)在最下級(jí)隊(duì)列,則從新放回最后一級(jí)隊(duì)列的隊(duì)尾
只有當(dāng)?shù)贙級(jí)的隊(duì)列為空時(shí),才會(huì)為K+1級(jí)的隊(duì)列隊(duì)頭的進(jìn)程分配時(shí)間片
先來(lái)先服務(wù)
最短作業(yè)優(yōu)先
最高響應(yīng)比優(yōu)先 響應(yīng)比:(等待時(shí)間+服務(wù)時(shí)間)/要求服務(wù)的時(shí)間
時(shí)間片輪轉(zhuǎn)調(diào)度
優(yōu)先級(jí)調(diào)度
多級(jí)反饋隊(duì)列
內(nèi)存管理
內(nèi)存管理的功能
內(nèi)存空間的分配與回收:由操作系統(tǒng)完成主存儲(chǔ)器空間的分配和管理,使程序員擺脫存儲(chǔ)分配的麻煩,提高編程效率。
地址轉(zhuǎn)換:在多道程序環(huán)境下, 程序中的邏輯地址與內(nèi)存中的物理地址不可能一致, 因此存儲(chǔ)管理必須提供地址變換功能,把邏輯地址轉(zhuǎn)換成相應(yīng)的物理地址。
內(nèi)存空間的擴(kuò)充:利用虛擬存儲(chǔ)技術(shù)或自動(dòng)覆蓋技術(shù),從邏輯上擴(kuò)充內(nèi)存 。
存儲(chǔ)保護(hù):保證各道作業(yè)在各自的存儲(chǔ)空間內(nèi)運(yùn)行,互不干擾。
內(nèi)存分配方式
連續(xù)分配管理方式
連續(xù)分配方式,是指為一個(gè)用戶程序分配一個(gè)連續(xù)的內(nèi)存空間,比如說(shuō)某用戶需要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)存空間。這種方式無(wú)需進(jìn)行內(nèi)存保護(hù)。
固定分區(qū)分配:固定分區(qū)分配是最簡(jiǎn)單的一種多道程序存儲(chǔ)管理方式,它將用戶內(nèi)存空間劃分為若干個(gè)固定大小的區(qū)域,每個(gè)分區(qū)只裝入一道作業(yè)。當(dāng)有空閑分區(qū)時(shí),便可以再?gòu)耐獯娴暮髠渥鳂I(yè)隊(duì)列中, 選擇適當(dāng)大小的作業(yè)裝入該分區(qū),如此循環(huán)。
動(dòng)態(tài)分區(qū)分配:動(dòng)態(tài)分區(qū)分配又稱為可變分區(qū)分配,是一種動(dòng)態(tài)劃分內(nèi)存的分區(qū)方法。這種分區(qū)方法不預(yù)先將內(nèi)存劃分,而是在進(jìn)程裝入內(nèi)存時(shí),根據(jù)進(jìn)程的大小動(dòng)態(tài)地建立分區(qū) ,并使分區(qū)的大小正好適合進(jìn)程的需要。因此系統(tǒng)中分區(qū)的大小和數(shù)目是可變的。
分配策略算法
首次適應(yīng) (First Fit) 算法:空閑分區(qū)以地址遞增的次序鏈接。分配內(nèi)存時(shí)順序查找,找到大小能滿足要求的第一個(gè)空閑分區(qū)。
最佳適應(yīng) ( Best Fit )算法:空閑分區(qū)按容量遞增形成分區(qū)鏈,找到第一個(gè)能滿足要求的空閑分區(qū)。
最壞適應(yīng) ( Worst Fit )算法:又稱最大適應(yīng) ( Largest Fit )算法,空閑分區(qū)以容量遞減的次序鏈接。找到第一個(gè)能滿足要求的空閑分區(qū),也就是挑選出最大的分區(qū)。
鄰近適應(yīng) ( Next Fit )算法:又稱循環(huán)首次適應(yīng)算法,由首次適應(yīng)算法演變而成。不同之處是分配內(nèi)存時(shí)從上次查找結(jié)束的位置開(kāi)始繼續(xù)查找。
非連續(xù)分配管理方式
非連續(xù)分配允許一個(gè)程序分散地裝入到不相鄰的內(nèi)存分區(qū)中
分頁(yè)存儲(chǔ)管理方式
將內(nèi)存空間分為一個(gè)個(gè)大小相等的分區(qū)(比如:每個(gè)分區(qū)4KB),每個(gè)分區(qū)就是一個(gè)頁(yè)框(頁(yè)幀,內(nèi)存塊,物理塊),每個(gè)頁(yè)框都有一個(gè)編號(hào),即頁(yè)框號(hào)(頁(yè)幀號(hào),內(nèi)存塊號(hào),物理塊號(hào)),頁(yè)框號(hào)從0開(kāi)始
將用戶進(jìn)程的地址空間也分為與頁(yè)框大小相等的一個(gè)個(gè)區(qū)域,稱為 "頁(yè)"或 “頁(yè)面”,每個(gè)頁(yè)面也有一個(gè)編號(hào),即頁(yè)號(hào),頁(yè)號(hào)也是從0開(kāi)始(注意:進(jìn)程最后一個(gè)頁(yè)面可能沒(méi)有頁(yè)框那么大,因此頁(yè)框不能太大,否則會(huì)產(chǎn)生過(guò)大的內(nèi)部碎片)
操作系統(tǒng)以頁(yè)框?yàn)閱挝粸楦鱾€(gè)進(jìn)程分配內(nèi)存空間。進(jìn)程的每個(gè)頁(yè)面分別放入一個(gè)頁(yè)框中,則進(jìn)程的頁(yè)面和內(nèi)存的頁(yè)框產(chǎn)生了一一對(duì)應(yīng)的關(guān)系
分段存儲(chǔ)管理方式
進(jìn)程的地址空間:按照程序自身的邏輯關(guān)系劃分為若干個(gè)段,每個(gè)段都有一個(gè)段名(在低級(jí)語(yǔ)言中,程序員使用段名來(lái)編程),每段從0開(kāi)始編址
內(nèi)存分配規(guī)則:以段位單位進(jìn)行分配,每個(gè)段在內(nèi)存中占據(jù)連續(xù)空間,但是各個(gè)段之間可以不相鄰
優(yōu)點(diǎn):由于是按邏輯功能劃分,用戶編程更加方便,程序的可讀性更高
分頁(yè)和分段存儲(chǔ)管理的區(qū)別
頁(yè)是信息的物理單位,分頁(yè)是為實(shí)現(xiàn)離散分配方式,提高內(nèi)存利用率。分頁(yè)僅僅是由于系統(tǒng)管理的需要而并不是用戶的需要。而段則是信息的邏輯單位,是為了更好地滿足用戶的需要。
分段比分頁(yè)更容易實(shí)現(xiàn)信息的保護(hù)與共享,分段可以在某個(gè)段編寫(xiě)邏輯,實(shí)現(xiàn)對(duì)另外一個(gè)段的保護(hù),而分頁(yè)不行
頁(yè)的大小固定且由系統(tǒng)決定,而段的長(zhǎng)度取決于用戶所編寫(xiě)的程序。
頁(yè)面置換算法(追求最少的缺頁(yè)率)
最佳置換算法OPT(無(wú)法實(shí)現(xiàn),作為一個(gè)標(biāo)準(zhǔn)):每次選擇淘汰的頁(yè)面將是以后永不使用,或者在最長(zhǎng)的時(shí)間內(nèi)不被使用,由于無(wú)法預(yù)知將會(huì)訪問(wèn)哪些頁(yè)面,所以這種算法無(wú)法實(shí)現(xiàn),只能作為一個(gè)標(biāo)準(zhǔn)
例如:需要訪問(wèn)7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,則訪問(wèn)順序:
先進(jìn)先出置換算法FIFO:每次選擇淘汰的頁(yè)面是最早進(jìn)入內(nèi)存的頁(yè)面
例如:需要訪問(wèn) 3 2 1 0 3 2 4 3 2 1 0 4 ,則訪問(wèn)順序
最近最久未使用置換算法(LRU):每次淘汰的頁(yè)面是最近最久未使用的頁(yè)面
例如:需要訪問(wèn) 1 8 1 7 8 2 7 2 1 8 3 8 2 1 3 1 7 1 3 7 則訪問(wèn)順序
最近未用置換算法NRU(Clock算法):為每個(gè)頁(yè)面設(shè)置一個(gè)訪問(wèn)位,再將內(nèi)存中的頁(yè)面都通過(guò)鏈接指針鏈接成一個(gè)循環(huán)隊(duì)列。當(dāng)某頁(yè)被訪問(wèn)時(shí),其訪問(wèn)位置為1.當(dāng)需要淘汰某個(gè)頁(yè)面時(shí),只需要檢查頁(yè)的訪問(wèn)位。如果是0,就將該頁(yè)面換出,如果是1,則將他置為0,暫不換出。繼續(xù)檢查下一個(gè)頁(yè)面,如果第一輪掃描之后全是1,則掃描完成,這些都置為0.再進(jìn)行第二輪掃描,因此簡(jiǎn)單的Clock算法選擇一個(gè)頁(yè)面淘汰最多兩輪
文件管理
文件的分配方式(物理結(jié)構(gòu))
文件塊和磁盤塊:類似于內(nèi)存的分頁(yè)
磁盤塊:磁盤中的存儲(chǔ)單元會(huì)被分為一個(gè)個(gè)"塊/磁盤塊/物理塊",在很多的操作系統(tǒng)中,磁盤塊的大小與內(nèi)存塊,頁(yè)面的大小相同
文件塊:在外存管理中,為了方便對(duì)文件數(shù)據(jù)的管理,文件的邏輯地址空間被分為一個(gè)一個(gè)的文件塊,文件的邏輯地址可以表示為(邏輯塊號(hào),塊內(nèi)地址)的形式。用戶通過(guò)邏輯地址來(lái)操作自己的文件,操作
文件的分配方式
連續(xù)分配:要求每個(gè)文件在磁盤上占有一組連續(xù)的塊
優(yōu)點(diǎn):支持順序訪問(wèn)和直接訪問(wèn)(類似數(shù)組),連續(xù)分配的文件在順序訪問(wèn)時(shí)速度最快
缺點(diǎn):不方便文件的擴(kuò)展,存儲(chǔ)空間利用率低,會(huì)產(chǎn)生磁盤碎片
鏈接分配:采取離散分配的方式,為文件分配離散的磁盤塊。(類似鏈表數(shù)據(jù)結(jié)構(gòu))
隱式鏈接:目錄中記錄的文件的起始?jí)K號(hào)和結(jié)束塊號(hào)。除了文件最后一個(gè)磁盤塊之外,每個(gè)磁盤塊中都會(huì)保存指向下一個(gè)盤塊的指針,這些指針對(duì)用戶是透明的,每次訪問(wèn)某個(gè)磁盤塊都需從頭訪問(wèn)
優(yōu)點(diǎn):方便文件的擴(kuò)展,不會(huì)產(chǎn)生碎片問(wèn)題,外存的利用率高
缺點(diǎn):只支持順序訪問(wèn),不支持隨機(jī)訪問(wèn),查找時(shí)效率低
*顯示鏈接:把用于鏈接文件各物理塊的指針顯示的存放在一張表中,即文件分配表。文件目錄只需要記錄起始?jí)K號(hào)。一個(gè)磁盤只需要設(shè)置一張分配表,開(kāi)機(jī)時(shí),將分配表讀入內(nèi)存,并常駐內(nèi)存 *優(yōu)點(diǎn):支持順序訪問(wèn),也支持隨機(jī)訪問(wèn),方便文件的擴(kuò)展,不會(huì)產(chǎn)生碎片問(wèn)題,地址轉(zhuǎn)換不需要訪問(wèn)磁盤,因此文件的訪問(wèn)效率更高 *缺點(diǎn):文件分配表需要占據(jù)一定的存儲(chǔ)空間
索引分配:索引分配允許文件離散的分配在各個(gè)磁盤塊中,系統(tǒng)會(huì)為每個(gè)文件建立一張索引表,索引表中記錄了文件的各個(gè)邏輯塊對(duì)應(yīng)的物理塊(索引表的功能類似于內(nèi)存管理的頁(yè)表–建立邏輯頁(yè)面到物理頁(yè)面之間的映射關(guān)系)。索引表存放的磁盤塊稱為索引塊,文件數(shù)據(jù)存放的磁盤塊稱為數(shù)據(jù)塊
文件存儲(chǔ)空間管理
存儲(chǔ)空間的劃分和初始化
存儲(chǔ)空間的劃分:將物理磁盤劃分為一個(gè)個(gè)文件卷(邏輯卷,邏輯盤,如Windows系統(tǒng)下的C,D,E盤等)
有的系統(tǒng)支持超大型文件,可由多個(gè)物理磁盤組成一個(gè)文件卷
存儲(chǔ)空間的初始化:將各個(gè)文件卷劃分為目錄區(qū),文件區(qū)
目錄區(qū):目錄區(qū)主要存放文件的目錄信息(FCB),用于磁盤存儲(chǔ)空間的管理的信息
文件區(qū):文件區(qū)用于存放文件數(shù)據(jù)
存儲(chǔ)空間的管理方法
空閑表法:與內(nèi)存管理中的動(dòng)態(tài)分區(qū)分配很類似,為一個(gè)文件分配連續(xù)的存儲(chǔ)空間。同樣可以采用首次適應(yīng),最佳適應(yīng),最壞適應(yīng)等算法來(lái)決定要為文件分配哪個(gè)區(qū)間
空閑鏈表法:分為—>
空閑盤塊鏈:以盤塊為單位組成一條空閑鏈
空閑盤區(qū)鏈:以盤區(qū)為單位組成一條空閑鏈
位示圖法:每個(gè)二進(jìn)制位代表一個(gè)盤塊。例如可以用"0"來(lái)代表盤塊空閑 ,"1"代表盤塊已經(jīng)分配
成組鏈接法:UNIX采用的策略,適合大型的文件系統(tǒng)。
IO管理
磁盤調(diào)度算法
一次磁盤讀/寫(xiě)操作需要的時(shí)間:尋找時(shí)間+延遲時(shí)間+傳輸時(shí)間
尋找時(shí)間:在讀/寫(xiě)前,將磁頭移動(dòng)到指定磁道所畫(huà)的時(shí)間(啟動(dòng)磁頭臂和移動(dòng)磁頭臂)
延遲時(shí)間:通過(guò)旋轉(zhuǎn)磁盤,使磁頭定位到目標(biāo)扇區(qū)所需要的時(shí)間
傳輸時(shí)間:從磁盤中讀出或?qū)懭霐?shù)據(jù)所經(jīng)歷的時(shí)間
磁盤調(diào)度算法:
先來(lái)先服務(wù)算法(FIFO):根據(jù)進(jìn)程請(qǐng)求訪問(wèn)磁盤的先后順序進(jìn)行調(diào)度
最短尋找時(shí)間優(yōu)先算法(SSTF):優(yōu)先處理的磁道是與當(dāng)前磁道最近的磁道,可以保證每次的尋道時(shí)間最短,但是不能保證總的尋道時(shí)間最短(貪心算法)
掃描算法(SCAN,電梯調(diào)度算法):SSTF算法可能會(huì)產(chǎn)生饑餓,磁頭有可能在一個(gè)小區(qū)域內(nèi)來(lái)回移動(dòng),因此掃描算法規(guī)定,只有磁頭移動(dòng)到最外側(cè)磁道的時(shí)候才能往內(nèi)移動(dòng),移動(dòng)到最內(nèi)側(cè)磁道才能往外移動(dòng),在這個(gè)基礎(chǔ)上使用SSTF算法
循環(huán)掃描算法(C-SCAN):SCAN算法對(duì)于各個(gè)位置磁道的響應(yīng)頻率不平均,C-SCAN算法在SCAN算法的基礎(chǔ)上規(guī)定:只有磁頭朝著某個(gè)特定的方向移動(dòng)時(shí)才能處理磁道的訪問(wèn)請(qǐng)求,而返回時(shí)直接快速移動(dòng)到起始端而不處理任何請(qǐng)求
死鎖
對(duì)死鎖的理解
如果一組進(jìn)程中的每個(gè)進(jìn)程都在等待一個(gè)事件,而這個(gè)事件是有這組中的某一個(gè)進(jìn)程觸發(fā),這種情況則會(huì)導(dǎo)致死鎖
資源死鎖的條件:發(fā)生死鎖時(shí),以下四個(gè)條件必須全部具備
互斥條件:進(jìn)程要求對(duì)所分配的資源進(jìn)行排它性控制,即在一段時(shí)間內(nèi)某資源僅為一進(jìn)程所占用。
保持和等待條件:當(dāng)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
不可搶占條件:進(jìn)程已獲得的資源在未使用完之前,不能剝奪,只能在使用完時(shí)由自己釋放。
循環(huán)等待條件:在發(fā)生死鎖時(shí),必然存在一個(gè)進(jìn)程–資源的環(huán)形鏈。
死鎖的避免->銀行家算法
當(dāng)一個(gè)進(jìn)程申請(qǐng)使用資源的時(shí)候,銀行家算法通過(guò)先 試探 分配給該進(jìn)程資源,然后通過(guò)安全性算法判斷分配后的系統(tǒng)是否處于安全狀態(tài),若不安全則試探分配作廢,讓該進(jìn)程繼續(xù)等待。
安全序列的判斷:
死鎖的解除
資源剝奪法:掛起(暫時(shí)放到外存上)某些死鎖的進(jìn)程,并搶占他的資源,將這些資源分配給其他的死鎖進(jìn)程。但是應(yīng)防止被掛起的進(jìn)程長(zhǎng)時(shí)間得不到資源而饑餓
撤銷進(jìn)程法:強(qiáng)制撤銷部分,甚至全部的死鎖進(jìn)程,并剝奪這些進(jìn)程的資源。雖然實(shí)現(xiàn)簡(jiǎn)單,但是代價(jià)可能較大
進(jìn)程回退法:讓一個(gè)或多個(gè)死鎖進(jìn)程回退到足以避免死鎖的地步
簡(jiǎn)單來(lái)說(shuō),死鎖的破壞就是對(duì)死鎖產(chǎn)生的四個(gè)條件進(jìn)行破壞,讓其中任意一個(gè)不滿足即可。
審核編輯 :李倩
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7147瀏覽量
125572 -
線程
+關(guān)注
關(guān)注
0文章
508瀏覽量
20208 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
207瀏覽量
14278
原文標(biāo)題:這一次,徹底拿下操作系統(tǒng)?。。?/p>
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
進(jìn)程和線程的概念及其區(qū)別


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

進(jìn)程和線程的區(qū)別
進(jìn)程和線程區(qū)別
進(jìn)程和線程的區(qū)別和聯(lián)系介紹
進(jìn)程和線程得區(qū)別在哪?
進(jìn)程和線程的區(qū)別是什么
進(jìn)程與線程的區(qū)別和聯(lián)系
進(jìn)程切換與線程切換有啥區(qū)別
程序中進(jìn)程和線程的區(qū)別

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

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

評(píng)論