试利用记录型信号量和pv操作写出_计算机操作系统知识点汇总
1、基本特征
(1)并發(fā):并發(fā)是指宏觀上在一段時(shí)間內(nèi)能同時(shí)運(yùn)行多個(gè)程序,而并行則指同一時(shí)刻能運(yùn)行多個(gè)指令。操作系統(tǒng)通過引入進(jìn)程和線程使得程序能夠并發(fā)運(yùn)行;
(2)共享:共享是指系統(tǒng)中的資源可以被多個(gè)并發(fā)進(jìn)程共同使用。共享的方式有兩種:互斥共享和同時(shí)共享;其中互斥共享的資源成為臨界資源,例如打印機(jī)等,在同一時(shí)間只允許一個(gè)進(jìn)程訪問,需要用同步機(jī)制來實(shí)現(xiàn)對(duì)臨界資源的訪問;
(3)虛擬:虛擬是指把一個(gè)物理實(shí)體轉(zhuǎn)換為多個(gè)邏輯實(shí)體。主要的虛擬技術(shù)有兩種:時(shí)分復(fù)用技術(shù)和空分復(fù)用技術(shù);多個(gè)進(jìn)程能在同一個(gè)處理器上并發(fā)執(zhí)行使用了時(shí)分復(fù)用技術(shù),讓每個(gè)進(jìn)程輪流占有處理器,每次只執(zhí)行一小個(gè)時(shí)間片并快速切換;空分復(fù)用技術(shù)是指將物理內(nèi)存抽象為地址空間,每個(gè)進(jìn)程都有各自的地址空間。地址空間和物理內(nèi)存使用頁進(jìn)行交換,地址空間的頁并不需要全部在物理內(nèi)存中,當(dāng)使用到一個(gè)沒有在物理內(nèi)存的頁時(shí),執(zhí)行頁面置換算法, 將該頁置換到內(nèi)存中;
(4)異步:異步只進(jìn)程不是一次性執(zhí)行完畢,而是走走停停,以不可知的速度向前推進(jìn);
2、基本功能
(1)進(jìn)程管理:進(jìn)程控制、進(jìn)程同步、進(jìn)程通信、死鎖處理、處理機(jī)調(diào)度等;
(2)內(nèi)存管理:內(nèi)存分配、地址映射、內(nèi)存保護(hù)與共享、虛擬內(nèi)存等;
(3)文件管理:文件存儲(chǔ)空間的管理、目錄管理、文件讀寫管理和保護(hù)等;
(4)設(shè)備管理:完成用戶的IO請(qǐng)求,方便用戶使用各種設(shè)備,并提高設(shè)備的利用率。主要包括緩沖管理、設(shè)備分配、設(shè)備處理、虛擬設(shè)備等;
3、中斷分類
(1)外中斷:由CPU執(zhí)行指令以外的時(shí)間引起,如IO完成中斷,表示設(shè)備輸入/輸出處理已經(jīng)完成,處理器能夠發(fā)送下一個(gè)輸入/輸出請(qǐng)求。此外還有時(shí)鐘中斷、控制臺(tái)中斷等;
(2)異常:由CPU執(zhí)行指令的內(nèi)部時(shí)間引起,如非法操作碼、地址越界、算術(shù)溢出等;
(3)陷入:在用戶程序中使用系統(tǒng)調(diào)用;
二、進(jìn)程管理
1、進(jìn)程與線程
(1)進(jìn)程:進(jìn)程是資源分配的基本單位,進(jìn)程控制塊PCB描述進(jìn)程的基本信息和運(yùn)行狀態(tài),所謂的創(chuàng)建進(jìn)程和撤銷進(jìn)程,都是指對(duì)PCB的操作;每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會(huì)有較大的開銷,一個(gè)進(jìn)程包含至少一個(gè)線程;
(2)線程:線程是CPU調(diào)度的基本單位,一個(gè)進(jìn)程中可以有多個(gè)線程,它們共享進(jìn)程資源;每個(gè)線程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器PC,線程切換開銷小;
區(qū)別:
a.擁有資源:進(jìn)程是資源分配的基本單位,但是線程不擁有資源,線程可以訪問隸屬進(jìn)程的資源;
b.調(diào)度:線程時(shí)獨(dú)立調(diào)度的基本單位,在同一進(jìn)程中,線程的切換不會(huì)引起進(jìn)程切換,從一個(gè)進(jìn)程中的線程切換到另一個(gè)進(jìn)程中的線程時(shí),會(huì)引起進(jìn)程切換;
c.系統(tǒng)開銷:由于創(chuàng)建或撤銷進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O設(shè)備等,所付出的開銷遠(yuǎn)大于創(chuàng)建或撤銷線程時(shí)的開銷。類似地,在進(jìn)行進(jìn)程切換時(shí),涉及當(dāng)前進(jìn)程CPU環(huán)境的保存及新調(diào)度進(jìn)程CPU環(huán)境的設(shè)置,而線程切換時(shí)只需保存和設(shè)置少量寄存機(jī)內(nèi)容,開銷很小;
d.通信:線程間可以通過直接讀寫同一進(jìn)程中的數(shù)據(jù)進(jìn)行通信,但是進(jìn)程通信需要借助IPC;
2、線程狀態(tài)切換
(1)新建狀態(tài)(New):新創(chuàng)建了一個(gè)線程對(duì)象;
(2)就緒狀態(tài)(Runnable):線程位于可運(yùn)行線程池中,等待獲取CPU的使用權(quán);
(3)運(yùn)行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行程序代碼;
(4)阻塞狀態(tài)(Blocked):因?yàn)槟撤N原因放棄CPU使用權(quán),暫時(shí)停止運(yùn)行。其原因主要有:等待阻塞(wait())、同步阻塞(synchronized)、其他阻塞(sleep()、join()、I/O輸入);
(5)死亡狀態(tài)(Dead):線程執(zhí)行完成了或因一場(chǎng)退出了run()方法;
3、進(jìn)程同步
臨界區(qū):對(duì)臨界資源進(jìn)行訪問的那段代碼稱為臨界區(qū);為了互斥訪問臨界資源,每個(gè)進(jìn)程在進(jìn)入臨界區(qū)之前,需要先進(jìn)行檢查;
同步:多個(gè)進(jìn)程按一定順序執(zhí)行;
互斥:多個(gè)進(jìn)程在同一時(shí)刻只有一個(gè)進(jìn)程能進(jìn)入臨界區(qū);
信號(hào)量:信號(hào)量是一個(gè)整型變量,可以對(duì)其執(zhí)行down和up操作,也就是常見的P和V操作。
down:如果信號(hào)量大于0,執(zhí)行-1操作;如果信號(hào)量等于0,進(jìn)程睡眠,等待信號(hào)量大于0;
up:對(duì)信號(hào)量執(zhí)行+1操作,喚醒睡眠的進(jìn)程讓其完成down操作;
1
2
down和up操作需要被設(shè)計(jì)成原語,不可分割,通常的做法是在執(zhí)行這些操作的時(shí)候屏蔽中斷;如果信號(hào)量的取值只能為0或者1,那么就成為了互斥量,0表示臨界區(qū)已經(jīng)加鎖,1表示臨界區(qū)解鎖;
typedef int semaphore;
semaphore mutex = 1;void P1() {
down(&mutex);
// 臨界區(qū)
up(&mutex);
}
void P2() {
down(&mutex);
// 臨界區(qū)
up(&mutex);
}
1
2
3
4
5
6
7
8
9
10
11
經(jīng)典同步問題:
生產(chǎn)者-消費(fèi)者問題、讀者-寫者問題、哲學(xué)家進(jìn)餐問題、理發(fā)師問題、煙鬼問題
4、進(jìn)程通信
進(jìn)程同步是控制多個(gè)進(jìn)程按一定順序執(zhí)行,進(jìn)程通信是進(jìn)程間傳輸信息;進(jìn)程通信是一種手段,而進(jìn)程同步是一種目的。也可以說,為了能夠達(dá)到進(jìn)程同步的目的,需要讓進(jìn)程進(jìn)行通信,傳輸一些進(jìn)程同步所需要的信息;
(1)管道:通常指無名管道,它是半雙工的(即數(shù)據(jù)只能在一個(gè)方向上流動(dòng)),具有固定的讀端和寫端,且只能在父子進(jìn)程中使用,它不是普通的文件,并不屬于其他任何文件,并且只存在于內(nèi)存中;
(2)FIFO:也稱命名管道,它是一種文件類型,可以在無關(guān)的進(jìn)程之間交換數(shù)據(jù),與無名管道不同,它由路徑名與之相關(guān)聯(lián),以一種特殊設(shè)備文件形式存在于文件系統(tǒng)中。它的通信方式類似于在進(jìn)程中使用文件來傳輸數(shù)據(jù),只不過FIFO類型文件同時(shí)具有管道的特性,在數(shù)據(jù)讀出時(shí),FIFO管道中同時(shí)清除數(shù)據(jù),并且“先進(jìn)先出”;
(3)消息隊(duì)列:是消息的鏈接表,存放在內(nèi)核中。一個(gè)消息隊(duì)列由一個(gè)標(biāo)識(shí)符(即隊(duì)列ID)來標(biāo)識(shí),它是面向記錄的,其中的消息具有特定的格式以及特定的優(yōu)先級(jí)。相比于FIFO,消息隊(duì)列可以獨(dú)立于讀寫進(jìn)程存在,從而避免了FIFO中同步管道的打開和關(guān)閉時(shí)可能產(chǎn)生的困難;避免了FIFO的同步阻塞問題,不需要進(jìn)程自己提供同步方法;讀進(jìn)程可以根據(jù)消息類型有選擇地接收消息,而不像FIFO那樣只能默認(rèn)地接收;進(jìn)程在終止時(shí),消息隊(duì)列及其內(nèi)容并不會(huì)被刪除,它可以實(shí)現(xiàn)消息的隨機(jī)查詢;
(4)信號(hào)量:它是一個(gè)計(jì)數(shù)器,用于為多個(gè)進(jìn)程提供對(duì)共享數(shù)據(jù)對(duì)象的訪問。它基于操作系統(tǒng)的PV操作,程序?qū)π盘?hào)量的操作都是原子操作,每次對(duì)信號(hào)量的操作不僅限于對(duì)信號(hào)量值的+1或-1,可以加減任意正整數(shù),支持信號(hào)量組;
(5)共享內(nèi)存:允許多個(gè)進(jìn)程共享一個(gè)給定的存儲(chǔ)區(qū)。因?yàn)閿?shù)據(jù)不需要在進(jìn)程之間復(fù)制,所以這是最快的一種IPC;需要使用信號(hào)量用來同步對(duì)共享內(nèi)存的訪問,多個(gè)進(jìn)程可以將同一個(gè)文件映射到它們的地址空間從而實(shí)現(xiàn)共享內(nèi)存。另外XSI共享內(nèi)存不是使用文件,而是使用內(nèi)存的匿名段;
(6)套接字:與其它通信機(jī)制不同的是,它可以用于不同機(jī)器間的進(jìn)程通信;
5、進(jìn)程調(diào)度
(1)先來先服務(wù)調(diào)度算法(FCFS):按作業(yè)或者進(jìn)程到達(dá)的先后順序依次調(diào)度;有利于長作業(yè),不利于短作業(yè);
(2)短作業(yè)優(yōu)先調(diào)度算法(SJF):從就緒隊(duì)列中選擇估計(jì)時(shí)間最短的作業(yè)進(jìn)行處理,直到得出結(jié)果或者無法繼續(xù)執(zhí)行。不利于長作業(yè),未考慮作業(yè)的重要性,運(yùn)行時(shí)間是預(yù)估的,并不靠譜;
(3)高響應(yīng)比調(diào)度算法(HRN):響應(yīng)比=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間;
(4)時(shí)間片輪轉(zhuǎn)調(diào)度算法(RR):將所有就緒進(jìn)程按FCFS的原則排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把CPU時(shí)間分配給隊(duì)首進(jìn)程,該進(jìn)程可以執(zhí)行一個(gè)時(shí)間片。當(dāng)時(shí)間片用完時(shí),由計(jì)時(shí)器發(fā)出時(shí)鐘中斷,調(diào)度程序便停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾,同時(shí)繼續(xù)把CPU時(shí)間分配給隊(duì)首的進(jìn)程;時(shí)間片輪轉(zhuǎn)算法的效率和時(shí)間片的大小有很大關(guān)系,因?yàn)檫M(jìn)程切換都要保存進(jìn)程的信息并且載入新進(jìn)程的信息,如果時(shí)間片太小,會(huì)導(dǎo)致進(jìn)程切換得太頻繁,在進(jìn)程切換上就會(huì)花過多的時(shí)間;但另一方面,如果時(shí)間片過長,那么實(shí)時(shí)性就不能得到保證;
(5)優(yōu)先級(jí)調(diào)度算法:為每個(gè)進(jìn)程分配一個(gè)優(yōu)先級(jí),按優(yōu)先級(jí)進(jìn)行調(diào)度;為了防止低優(yōu)先級(jí)的進(jìn)程永遠(yuǎn)等不到調(diào)度,可以隨著時(shí)間的推移增加等待進(jìn)程的優(yōu)先級(jí);
(6)多級(jí)反饋隊(duì)列調(diào)度算法:一個(gè)進(jìn)程需要執(zhí)行100個(gè)時(shí)間片,如果采用時(shí)間片輪轉(zhuǎn)調(diào)度算法,那么需要交換100次;多級(jí)隊(duì)列是為這種需要連續(xù)執(zhí)行多個(gè)時(shí)間片的進(jìn)程考慮,它設(shè)置了多個(gè)隊(duì)列,每個(gè)隊(duì)列時(shí)間片大小都不同,例如1,2,4,8,…,進(jìn)程在第一個(gè)隊(duì)列沒執(zhí)行完,就會(huì)被移到下一個(gè)隊(duì)列。這種方式下,之前的進(jìn)程只需要交換7次;每個(gè)隊(duì)列優(yōu)先權(quán)也不同,最上面的優(yōu)先權(quán)最高。因此只有上一個(gè)隊(duì)列沒有進(jìn)程在排隊(duì),才能調(diào)度當(dāng)前隊(duì)列上的進(jìn)程;可以將這種調(diào)度算法看成是時(shí)間片輪轉(zhuǎn)調(diào)度算法和優(yōu)先級(jí)調(diào)度算法的結(jié)合;
三、死鎖
1、必要條件
(1)互斥:每個(gè)資源要么已經(jīng)分配給了一個(gè)進(jìn)程,要么就是可用的;
(2)請(qǐng)求和保持:進(jìn)程被阻塞的時(shí)候并不釋放鎖請(qǐng)求到的資源;
(3)不可搶占:已經(jīng)分配給一個(gè)進(jìn)程的資源不能強(qiáng)制性地被搶占,它只能被占有它的進(jìn)程顯式地釋放;
(4)環(huán)路等待:有兩個(gè)或者兩個(gè)以上的進(jìn)程組成一條環(huán)路,該環(huán)路中的每個(gè)進(jìn)程都在等待下一個(gè)進(jìn)程所占有的資源;
2、處理方法
(1)鴕鳥策略:把頭埋在沙子里,假裝根本沒有發(fā)生問題;因?yàn)榻鉀Q死鎖問題的代價(jià)很高,因此不采取任何措施的方案會(huì)獲得更高的性能;當(dāng)發(fā)生死鎖時(shí)不會(huì)對(duì)用戶造成多大影響,或發(fā)生死鎖的概率很低,可以采用鴕鳥策略;
(2)死鎖檢測(cè);每種類型一個(gè)資源的死鎖檢測(cè)、每種類型多個(gè)資源的死鎖檢測(cè);
(3)死鎖恢復(fù):利用搶占恢復(fù)、利用回滾恢復(fù)、通過殺死進(jìn)程恢復(fù);
(4)死鎖預(yù)防:破壞必要條件任意一條即可;
(5)死鎖避免:銀行家算法;
四、內(nèi)存管理
虛擬內(nèi)存:從邏輯的角度擴(kuò)充內(nèi)存容量,基于局部性原理,在程序裝入的時(shí)候,可以將程序的一部分裝入內(nèi)存,而將其余部分留在外存就可以啟動(dòng)程序執(zhí)行。在程序執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存時(shí),由操作系統(tǒng)將所需要的部分調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。另一方面,操作系統(tǒng)將內(nèi)存中暫時(shí)不使用的內(nèi)容換出到外存上,從而騰出空間存放將要調(diào)入的內(nèi)存的信息。這樣,系統(tǒng)就好像為用戶提供了一個(gè)比實(shí)際內(nèi)存大得多的存儲(chǔ)器,稱為虛擬存儲(chǔ)器;
頁面置換算法:在程序運(yùn)行過程中,如果訪問的頁面不在內(nèi)存中,就發(fā)生缺頁中斷從而將該頁調(diào)入內(nèi)存中。此時(shí)如果內(nèi)存已無空閑空間,系統(tǒng)必須從內(nèi)存中調(diào)出一個(gè)頁面到磁盤對(duì)換去中來騰出空間;頁面置換算法和緩存淘汰策略類似,可以將內(nèi)存看成磁盤的緩存。在緩存系統(tǒng)中,緩存的大小有限,當(dāng)有新的緩存到達(dá)時(shí),需要淘汰一部分已經(jīng)存在的緩存,這樣才有空間存放新的緩存數(shù)據(jù);
(1)最佳置換算法:只具有理論意義的算法,用來評(píng)價(jià)其他頁面置換算法;置換策略是將當(dāng)前頁面中在未來最長時(shí)間內(nèi)不會(huì)被訪問的頁置換出去;
(2)先進(jìn)先出置換算法:每次淘汰最早調(diào)入的頁面,沒有考慮頁面的訪問頻率細(xì)信息。會(huì)使缺頁率升高;
(3)最近最久未使用算法(LRU):將最近最久未使用的頁面換出;實(shí)現(xiàn)的時(shí)候需要在內(nèi)存中維護(hù)一個(gè)所有頁面的鏈表,當(dāng)一個(gè)頁面被訪問時(shí),將這個(gè)頁面移到鏈表表頭。這樣每次只要找鏈表表尾的頁面就是最近最久未訪問的。因?yàn)槊看卧L問都需要更新鏈表,因此這種方式實(shí)現(xiàn)的LRU代價(jià)很高;
(4)最近未使用算法(NRU):每個(gè)頁面都有兩個(gè)狀態(tài)位R與M,當(dāng)頁面被訪問時(shí)設(shè)置頁面的R=1,當(dāng)頁面被修改時(shí)設(shè)置頁面的M=1。其中R位會(huì)定時(shí)被清零;當(dāng)發(fā)生缺頁中斷時(shí),NRU算法隨機(jī)地從類編號(hào)最小的非空類中挑選一個(gè)頁面將它換出;注意,NRU優(yōu)先換出已經(jīng)被修改的臟頁面(R=0,M=1),而不是被頻繁使用的干凈頁面(R=1,M=0);
分頁與分段的比較:
(1)對(duì)程序員的透明性:分頁透明,但是分段需要程序員顯示劃分每個(gè)段;
(2)地址空間的維度:分頁是一維地址空間,分段是二維的;
(3)大小是否可以改變:頁的大小不可變,段的大小可以動(dòng)態(tài)改變;
(4)出現(xiàn)的原因:分頁主要用于實(shí)現(xiàn)虛擬內(nèi)存,從而獲得更大的地址空間;分段主要是為了使程序和數(shù)據(jù)可以被劃分為邏輯上獨(dú)立的地址空間并且有助于共享和保護(hù)。
制作不易 且看且珍惜
總結(jié)
以上是生活随笔為你收集整理的试利用记录型信号量和pv操作写出_计算机操作系统知识点汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net控件FreeTextBox使用方
- 下一篇: c++ 编译添加dll_matconvn