目錄
一、程序執(zhí)行
1. 前趨圖?
2. 程序的順序執(zhí)行?
3. 程序的并發(fā)執(zhí)行?
二、進(jìn)程的描述?
? ? (一)、進(jìn)程的概念?
1. 進(jìn)程的定義?
2. 進(jìn)程的特征?
? ? (二)、進(jìn)程的狀態(tài)極其轉(zhuǎn)換?
1. 進(jìn)程的三種基本狀態(tài)
(1)就緒狀態(tài)?
(2)運(yùn)行狀態(tài)
(3)等待狀態(tài)
2. 進(jìn)程狀態(tài)的轉(zhuǎn)換?
? ? (三)、進(jìn)程的掛起狀態(tài)?
1. 掛起狀態(tài)的引入?
? ? (四)、進(jìn)程控制塊PCB?
1. 進(jìn)程控制塊的作用?
2. 進(jìn)程控制塊的內(nèi)容?
三、進(jìn)程控制
(一)操作系統(tǒng)內(nèi)核
特權(quán)指令和非特權(quán)指令
特權(quán)指令
非特權(quán)指令
? ? ?(二)、進(jìn)程創(chuàng)建
? ? (三)、進(jìn)程撤銷?
? ? (四)、進(jìn)程等待(進(jìn)程阻塞)
? ? (五)、進(jìn)程喚醒?
? ? 四、進(jìn)程同步
(一)進(jìn)程同步的概念?
? ? (二)、進(jìn)程同步機(jī)制應(yīng)遵循的原則?
? ? (三)、進(jìn)程同步機(jī)制——鎖?
? ? ?(四)、進(jìn)程同步機(jī)制——信號量
五、進(jìn)程通信?
? ? (一)、共享存儲器系統(tǒng)?
? ? (二)、消息傳遞系統(tǒng)
? ? (三)、管道通信系統(tǒng)?
六、處理機(jī)調(diào)度?
?? ? 一、進(jìn)程調(diào)度算法的選取原則
? ? 二、常用的進(jìn)程調(diào)度算法
? ? 三、常用的作業(yè)調(diào)度算法?
? ? 四、死鎖的基本概念?
? ? 七、線程技術(shù)?
1. 線程的概念?
2. 線程與進(jìn)程的比較?
3. 線程的類型?
一、程序執(zhí)行
? ? 程序執(zhí)行是指程序在計算機(jī)中的運(yùn)行過程。程序的執(zhí)行可以用前趨圖表示,程序的執(zhí)行方式有順序執(zhí)行和并發(fā)執(zhí)行兩種。
1. 前趨圖?
? ? 前趨圖是一個有向無循環(huán)圖。圖中的每個節(jié)點(diǎn)可用于表示一條語句、一個程序段等;節(jié)點(diǎn)間的有向邊表示在兩個節(jié)點(diǎn)之間存在的前趨關(guān)系。如Pi→Pj,稱Pi是Pj的前趨,而Pj是Pi的后繼。在前趨圖中,沒有前趨的節(jié)點(diǎn)稱為初始節(jié)點(diǎn),沒有后繼的節(jié)點(diǎn)稱為終止節(jié)點(diǎn)。應(yīng)當(dāng)注意的是,前趨圖中不能存在循環(huán)。?
? ? 在上圖所示的前趨圖中存在下述前趨關(guān)系: ? ? P1→P2,P1→P3,P2→P4,P3→P4,P4→P5。?
2. 程序的順序執(zhí)行?
(1)程序順序執(zhí)行的概念?
? ? 一個較大的程序通常由若干個操作組成。程序在執(zhí)行時,必須按照某種先后次序逐個執(zhí)行操作,只有當(dāng)前一個操作執(zhí)行完后,才能執(zhí)行后一個操作。?
(2)程序順序執(zhí)行的特征?
- 順序性。嚴(yán)格按照程序所規(guī)定的順序執(zhí)行。
- 封閉性。程序在封閉的環(huán)境下執(zhí)行,其執(zhí)行結(jié)果不受外界因素的影響。
- 確定性。程序執(zhí)行的結(jié)果與它的執(zhí)行速度無關(guān),不會影響到最終結(jié)果。
- 可再現(xiàn)性。只要程序執(zhí)行的環(huán)境和初始條件相同,都將獲得相同的結(jié)果。?
3. 程序的并發(fā)執(zhí)行?
?(1)程序并發(fā)執(zhí)行的概念?
? ? 在處理一批程序時,它們之間有時并不存在嚴(yán)格的執(zhí)行次序,可以并發(fā)執(zhí)行。?
? ? 程序并發(fā)執(zhí)行時的前趨圖,如下圖所示。
(2)程序并發(fā)執(zhí)行的特征?
- 間斷性。在程序并發(fā)執(zhí)行時,它們之間共享資源或相互合作,形成了相互制約的關(guān)系,表現(xiàn)為“執(zhí)行—暫停執(zhí)行—執(zhí)行”的間斷性活動規(guī)律。
- 失去封閉性。程序并發(fā)執(zhí)行時,多個程序共享系統(tǒng)中的各種資源,致使程序的運(yùn)行失去了封閉性。這樣,一個程序在執(zhí)行時,必然會受到其他程序的影響。
- 不可再現(xiàn)性。即使并發(fā)程序執(zhí)行的環(huán)境和初始條件相同,程序多次執(zhí)行或以不同的方式執(zhí)行都可能獲得不相同的結(jié)果。
- 資源共享性。系統(tǒng)中的硬件資源(CPU、內(nèi)存和I/O設(shè)備等)和軟件資源(系統(tǒng)程序和數(shù)據(jù)集等)為多個用戶或作業(yè)共同使用。
- 程序和計算不再一一對應(yīng)。?
二、進(jìn)程的描述?
? ? (一)、進(jìn)程的概念?
進(jìn)程的組成:是由PCB、程序段、數(shù)據(jù)段組成。
PCB是給操作系統(tǒng)用的,而程序段和數(shù)據(jù)段是給進(jìn)程自己用的,與進(jìn)程自身的運(yùn)行邏輯有關(guān)。
?
1. 進(jìn)程的定義?
? ? 關(guān)于進(jìn)程的定義有以下一些描述:
? ? (1)進(jìn)程是程序的一次執(zhí)行。
? ? (2)進(jìn)程可以定義為一個數(shù)據(jù)結(jié)構(gòu)及能在其上進(jìn)行操作的一個程序。
? ? (3)進(jìn)程是程序在一個數(shù)據(jù)集合上的運(yùn)行過程,是系統(tǒng)資源分配和調(diào)度的一個獨(dú)立單位。
? ? 據(jù)此,可以把“進(jìn)程”定義為:一個程序在一個數(shù)據(jù)集合上的一次運(yùn)行過程。所以一個程序在不同數(shù)據(jù)集合上運(yùn)行,乃至一個程序在同樣數(shù)據(jù)集合上的多次運(yùn)行都是不同的進(jìn)程。?
?可將進(jìn)程定義為:進(jìn)程是進(jìn)程實(shí)體的一次運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位。
當(dāng)進(jìn)程創(chuàng)建時,操作系統(tǒng)會給該進(jìn)程分配唯一的身份證號——PID
2. 進(jìn)程的特征?
? ? 進(jìn)程與傳統(tǒng)的程序是截然不同的兩個概念,它具有五個基本特征,從這五個特征可以看到進(jìn)程與程序的巨大差異。
(1)動態(tài)性
? ? 動態(tài)性是進(jìn)程的最基本特征,它表現(xiàn)為“進(jìn)程因創(chuàng)建而產(chǎn)生,因調(diào)度而執(zhí)行,因得不到資源而暫停,以及因撤銷而消亡”。因此,進(jìn)程具有一定的生命周期,其狀態(tài)也會不斷發(fā)生變化,是一個動態(tài)實(shí)體。而程序僅是一組指令的集合,并且可以一成不變地存放在某種介質(zhì)上,是一個靜態(tài)實(shí)體。
(2)并發(fā)性
? ? 進(jìn)程的并發(fā)性是指多個進(jìn)程在一段時間內(nèi)同時運(yùn)行,交替使用處理器的情況。并發(fā)性是進(jìn)程也是操作系統(tǒng)的重要特征。
(3)獨(dú)立性
? ? 獨(dú)立性是指進(jìn)程實(shí)體是一個能獨(dú)立運(yùn)行的基本單位,同時也是獨(dú)立獲得資源和獨(dú)立調(diào)度的基本單位。沒有創(chuàng)建進(jìn)程的程序,是不能參加運(yùn)行的。
(4)異步性
? ? 異步性是指系統(tǒng)中的進(jìn)程按照各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn),即進(jìn)程按照異步方式運(yùn)行。正因如此,將導(dǎo)致執(zhí)行的不可再現(xiàn)性。因此,在操作系統(tǒng)中必須采取相應(yīng)的措施來保證進(jìn)程之間能夠協(xié)調(diào)運(yùn)行。
(5)結(jié)構(gòu)性
? ? 進(jìn)程的結(jié)構(gòu)性是指在結(jié)構(gòu)上進(jìn)程實(shí)體由程序段、數(shù)據(jù)段和進(jìn)程控制塊組成,這三部分也統(tǒng)稱為“進(jìn)程映像”。?
? ? (二)、進(jìn)程的狀態(tài)極其轉(zhuǎn)換?
? ? 系統(tǒng)中的諸多進(jìn)程并發(fā)運(yùn)行,并因競爭系統(tǒng)資源而相互依賴相互制約,因而進(jìn)程執(zhí)行時呈現(xiàn)了“運(yùn)行—暫停—運(yùn)行”的間斷性。進(jìn)程執(zhí)行時的間斷性可用進(jìn)程的狀態(tài)及其狀態(tài)的轉(zhuǎn)換來描述。?
1. 進(jìn)程的三種基本狀態(tài)
? ? 通常,一個進(jìn)程必須有就緒、運(yùn)行和等待三種基本狀態(tài)。?
(1)就緒狀態(tài)?
? ? 當(dāng)進(jìn)程已分配到除處理器(CPU)以外的所有必要資源后,只要再獲得處理器就可以立即執(zhí)行,這時進(jìn)程的狀態(tài)稱為就緒狀態(tài)。
? ? 在一個系統(tǒng)里,可以有多個進(jìn)程同時處于就緒狀態(tài),通常把這些就緒進(jìn)程排成一個或多個隊列,稱為就緒隊列。
(2)運(yùn)行狀態(tài)
? ? 處于就緒狀態(tài)的進(jìn)程一旦獲得了處理器,就可以運(yùn)行,進(jìn)程狀態(tài)也就處于運(yùn)行狀態(tài)。
? ? 在單處理器系統(tǒng)中,只能有一個進(jìn)程處于運(yùn)行狀態(tài)。在多處理器系統(tǒng)中,可能有多個進(jìn)程處于運(yùn)行狀態(tài)。
(3)等待狀態(tài)
? ? 正在運(yùn)行的進(jìn)程因?yàn)榘l(fā)生某些事件(如請求輸入/輸出、申請額外空間等)而暫停運(yùn)行,這種受阻暫停的狀態(tài)稱為等待狀態(tài)。
? ? 通常將處于等待狀態(tài)的進(jìn)程排成一個隊列,稱為等待隊列。在有些系統(tǒng)中也會按照等待原因的不同將處于等待狀態(tài)的進(jìn)程排成多個隊列。?
2. 進(jìn)程狀態(tài)的轉(zhuǎn)換?
?
? ? (三)、進(jìn)程的掛起狀態(tài)?
1. 掛起狀態(tài)的引入?
? ? 在很多系統(tǒng)中,進(jìn)程只有上述三種基本狀態(tài)。但在另一些系統(tǒng)中,由于某種需要又增加了一些新的進(jìn)程狀態(tài),其中最重要最常見的是掛起狀態(tài)。
? ? 引入掛起狀態(tài)主要是基于下列需求:
? ? (1)用戶的需求;
? ? (2)父進(jìn)程的需求;
????(3)操作系統(tǒng)的需求;
? ? (4)對換的需求;
?? ? 引入掛起狀態(tài)后的進(jìn)程狀態(tài)轉(zhuǎn)換過程如下圖所示。
? ? (四)、進(jìn)程控制塊PCB?
1. 進(jìn)程控制塊的作用?
? ? 進(jìn)程控制塊PCB(Process Control Block)是進(jìn)程實(shí)體的重要組成部分,是操作系統(tǒng)中最重要的記錄型數(shù)據(jù)。在進(jìn)程控制塊中記錄了操作系統(tǒng)所需要的、用于描述進(jìn)程情況及控制進(jìn)程運(yùn)行所需要的全部信息。換句話說,在進(jìn)程的整個生命周期中,操作系統(tǒng)都要通過進(jìn)程的PCB來對并發(fā)運(yùn)行的進(jìn)程進(jìn)行管理和控制。
? ? 由此看來,進(jìn)程控制塊是系統(tǒng)對進(jìn)程控制采用的數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)是根據(jù)進(jìn)程的PCB而感知進(jìn)程存在的。所以,進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志。 PCB可以被多個系統(tǒng)模塊讀取和修改,如調(diào)度模塊、資源分配模塊、中斷處理模塊、監(jiān)督和分析模塊等。因?yàn)镻CB經(jīng)常被系統(tǒng)訪問,因此常駐主存。系統(tǒng)把所有的PCB組織成若干個鏈表(或隊列),存放在操作系統(tǒng)中專門開辟的PCB區(qū)內(nèi)。
2. 進(jìn)程控制塊的內(nèi)容?
(1)進(jìn)程標(biāo)志信息
? ? 進(jìn)程標(biāo)識符用于標(biāo)識一個進(jìn)程,通常有外部標(biāo)識符和內(nèi)部標(biāo)識符兩種。 ? ?
? ? ① 外部標(biāo)識符:? ?
由進(jìn)程創(chuàng)建者命名,通常是由字母、數(shù)字所組成的一個字符串,在用戶(進(jìn)程)訪問該進(jìn)程時使用。外部標(biāo)識符都便于記憶,如計算進(jìn)程、打印進(jìn)程、發(fā)送進(jìn)程、接收進(jìn)程等。
? ? ② 內(nèi)部標(biāo)識符 ? ??
? ? 為方便系統(tǒng)使用而設(shè)置的。操作系統(tǒng)為每一個進(jìn)程賦予唯一的一個整數(shù),把它作為內(nèi)部標(biāo)識符。內(nèi)部標(biāo)識符通常就是一個進(jìn)程的序號。
(2)說明信息(進(jìn)程調(diào)度信息)
? ? 說明信息是與進(jìn)程調(diào)度有關(guān)的狀態(tài)信息,它包括:
- 進(jìn)程狀態(tài)。它指明進(jìn)程當(dāng)前的狀態(tài),作為進(jìn)程調(diào)度和對換時的依據(jù)。
- 優(yōu)先權(quán)高的進(jìn)程將優(yōu)先獲得處理器。
- 進(jìn)程調(diào)度所需的其他信息。其內(nèi)容與所采用的進(jìn)程調(diào)度算法有關(guān),如進(jìn) ?程等待時間、進(jìn)程已運(yùn)行時間等。
- ?等待事件是指進(jìn)程由運(yùn)行狀態(tài)轉(zhuǎn)變?yōu)榈却隣顟B(tài)時所等待發(fā)生的事件,即等待原因。
?(3)現(xiàn)場信息(處理器狀態(tài)信息)
? ? 現(xiàn)場信息是用于保留進(jìn)程存放在處理器中的各種信息,主要由處理器中的各個寄存器的內(nèi)容組成。尤其是當(dāng)進(jìn)程暫停運(yùn)行時,這些寄存器內(nèi)的信息將被保存在PCB里,當(dāng)該進(jìn)程重新運(yùn)行時,能從上次停止的地方繼續(xù)運(yùn)行。
- 通用寄存器。其中的內(nèi)容可以被用戶程序訪問,用于暫存信息。
- 指令計數(shù)器。用于存放要訪問的下一條指令的地址。
- 程序狀態(tài)字。用于保存當(dāng)前處理器的狀態(tài)信息,如運(yùn)行方式、中斷屏蔽標(biāo)志等。
- 用戶棧指針。每個用戶進(jìn)程都有一個或若干個與之相關(guān)的關(guān)系棧,用于存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址,棧指針指向堆棧的棧頂。?
(4)管理信息(進(jìn)程控制信息)?
? ? 管理信息包括進(jìn)程資源、控制機(jī)制等一些進(jìn)程運(yùn)行所需要的信息。
- ?程序和數(shù)據(jù)的地址。它是指該進(jìn)程的程序和數(shù)據(jù)所在的主存和外存地址,以便該進(jìn)程再次運(yùn)行時,能夠找到程序和數(shù)據(jù)。
- 進(jìn)程同步和通信機(jī)制。它是指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時所采用的機(jī)制,如消息隊列指針、信號量等。
- ?資源清單。該清單中存放有除CPU以外,進(jìn)程所需的全部資源和已經(jīng)分配到的資源。
- ?鏈接指針。它將指向該進(jìn)程所在隊列的下一個進(jìn)程的PCB的首地址。?
(5)進(jìn)程控制塊的組織方式?
(1)鏈接方式
? ? 把具有相同狀態(tài)的PCB用鏈接指針鏈接成隊列,如就緒隊列、等待隊列和空閑隊列等。就緒隊列中的PCB將按照相應(yīng)的進(jìn)程調(diào)度算法進(jìn)行排序。而等待隊列也可以根據(jù)等待原因的不同,將處于等待狀態(tài)的進(jìn)程的PCB排成等待I/O隊列、等待主存隊列等多個隊列。
(2)索引方式
? ? 系統(tǒng)根據(jù)各個進(jìn)程的狀態(tài)建立不同的索引表,如就緒索引表、等待索引表等,并把各個索引表在主存的首地址記錄在主存中的專用單元里,也可以稱為表指針。在每個索引表的表目中,記錄著具有相同狀態(tài)的各個PCB在表中的地址。?
?(6)進(jìn)程控制原語
? ? 原語是指具有特定功能的不被中斷的過程。它主要用于實(shí)現(xiàn)操作系統(tǒng)的一些專門控制操作。用于進(jìn)程控制的原語有:
- ?(1)創(chuàng)建原語 ? ? 用于為一個進(jìn)程分配工作區(qū)和建立PCB,置該進(jìn)程為就緒狀態(tài)。
- (2)撤銷原語 ? ? 用于一個進(jìn)程工作結(jié)束后,收回它的工作區(qū)和PCB。
- (3)等待原語 ? ? 用于進(jìn)程在運(yùn)行過程中發(fā)生等待事件時,把進(jìn)程的狀態(tài)改為等待狀態(tài)。
- (4)喚醒原語 ? ? 用于當(dāng)進(jìn)程等待的事件結(jié)束時,把進(jìn)程的狀態(tài)改為就緒狀態(tài)。
三、進(jìn)程控制
(一)操作系統(tǒng)內(nèi)核
核心態(tài):又稱管態(tài)、系統(tǒng)態(tài),是操作系統(tǒng)管理程序執(zhí)行時計算機(jī)所處的狀態(tài)。這種狀態(tài)具有較高的特權(quán),能執(zhí)行一切指令,訪問所有的寄存器和存儲器。
用戶態(tài):又稱目態(tài),是用戶執(zhí)行程序時計算機(jī)所處的狀態(tài)。這種狀態(tài)具有較低的特權(quán),只有執(zhí)行規(guī)定的指令,訪問指定的寄存器和存儲器。
用戶態(tài)和內(nèi)核態(tài)是操作系統(tǒng)中的兩種不同的運(yùn)行級別。用戶態(tài)是指應(yīng)用程序運(yùn)行時所處的狀態(tài),而內(nèi)核態(tài)是指操作系統(tǒng)運(yùn)行時所處的狀態(tài)。在用戶態(tài)下,應(yīng)用程序可以訪問自己的內(nèi)存空間和一些受限制的系統(tǒng)資源,但不能直接訪問硬件設(shè)備和操作系統(tǒng)的核心功能。而在內(nèi)核態(tài)下,操作系統(tǒng)可以訪問所有的系統(tǒng)資源和硬件設(shè)備,并且可以執(zhí)行所有的核心功能。
用戶態(tài)和內(nèi)核態(tài)之間的切換是通過系統(tǒng)調(diào)用、異常和外圍設(shè)備中斷來實(shí)現(xiàn)的。當(dāng)應(yīng)用程序需要訪問受限制的系統(tǒng)資源或執(zhí)行核心功能時,它會發(fā)起一個系統(tǒng)調(diào)用,這時操作系統(tǒng)會將應(yīng)用程序的狀態(tài)切換到內(nèi)核態(tài),執(zhí)行相應(yīng)的操作,然后將狀態(tài)切換回用戶態(tài),繼續(xù)執(zhí)行應(yīng)用程序。
用戶態(tài)和內(nèi)核態(tài)之間的切換是有開銷的,因?yàn)樾枰4婧突謴?fù)現(xiàn)場、復(fù)制參數(shù)和代碼等操作。這也是為什么說用戶態(tài)和內(nèi)核態(tài)切換的開銷大的原因。
特權(quán)指令和非特權(quán)指令
在計算機(jī)體系結(jié)構(gòu)中,存在兩種主要類型的指令:特權(quán)指令和非特權(quán)指令。它們在處理器的執(zhí)行權(quán)限方面有所區(qū)別。
特權(quán)指令
特權(quán)指令:系統(tǒng)態(tài)下運(yùn)行的指令(相當(dāng)于系統(tǒng)指令),對內(nèi)存的訪問不受限制,可以訪問用戶空間和系統(tǒng)空間,不允許應(yīng)用程序使用。
特權(quán)指令是那些需要較高執(zhí)行權(quán)限的指令,通常由操作系統(tǒng)或內(nèi)核執(zhí)行。這些指令涉及到對系統(tǒng)資源的管理和控制,如內(nèi)存管理、I/O 操作、中斷處理等。只有在特殊的特權(quán)級別下才能執(zhí)行這些指令,一般用戶程序無法直接執(zhí)行它們。這有助于確保系統(tǒng)的安全性和穩(wěn)定性。
常見的特權(quán)指令包括:
1. 操作系統(tǒng)調(diào)用指令
2. 修改頁表的指令
3. 中斷和異常處理指令
4. I/O 操作相關(guān)指令
5. 修改控制寄存器的指令
非特權(quán)指令
非特權(quán)指令:在用戶態(tài)運(yùn)行的指令,應(yīng)用程序所使用的所有指令,訪問內(nèi)存受限,只允許訪問用戶空間,不能對系統(tǒng)中的軟件和硬件直接訪問。
非特權(quán)指令是那些可以由普通用戶程序直接執(zhí)行的指令。它們通常涉及到一般的計算、數(shù)據(jù)傳輸和邏輯運(yùn)算等基本操作。非特權(quán)指令執(zhí)行時不會對系統(tǒng)的關(guān)鍵資源產(chǎn)生直接影響,因此可以由用戶程序自由使用。
常見的非特權(quán)指令包括:
1. 數(shù)據(jù)移動指令(如MOV)
2. 算術(shù)運(yùn)算指令(如ADD、SUB)
3. 邏輯運(yùn)算指令(如AND、OR)
4. 條件分支指令(如JUMP)
5. 棧操作指令(如PUSH、POP)
?通過將特權(quán)指令和非特權(quán)指令分開,計算機(jī)體系結(jié)構(gòu)可以實(shí)現(xiàn)更好的安全性和系統(tǒng)穩(wěn)定性,確保只有授權(quán)的代碼可以執(zhí)行對系統(tǒng)關(guān)鍵資源的敏感操作。
? ? ?(二)、進(jìn)程創(chuàng)建
? ? 在系統(tǒng)中,只有進(jìn)程才能得到運(yùn)行。因此,程序要想運(yùn)行,就必須為之創(chuàng)建進(jìn)程。進(jìn)程運(yùn)行結(jié)束,還必須撤銷它。
? ? (1)用戶登錄:在分時系統(tǒng)中,用戶鍵入登錄命令后,如果是合法用戶,系統(tǒng)將為該終端用戶建立一個進(jìn)程,并把它放入就緒隊列。?
? ? (2)作業(yè)調(diào)度:在批處理系統(tǒng)中,當(dāng)作業(yè)調(diào)度程序調(diào)度某個作業(yè)時,便將該作業(yè)裝入主存,為其分配必要的資源,并為之創(chuàng)建進(jìn)程,放入就緒隊列。?
? ? (3)提供服務(wù):當(dāng)運(yùn)行中的用戶進(jìn)程提出某種請求后,系統(tǒng)將專門創(chuàng)建一個進(jìn)程來提供用戶所需要的服務(wù)。
? ? (4)應(yīng)用請求:基于應(yīng)用進(jìn)程自己的需要,由它自己創(chuàng)建一個新進(jìn)程,這個新進(jìn)程也稱為該進(jìn)程的子進(jìn)程。
進(jìn)程創(chuàng)建的處理過程?
? ? 一旦操作系統(tǒng)發(fā)現(xiàn)了要求創(chuàng)建進(jìn)程的事件后,便調(diào)用進(jìn)程創(chuàng)建原語,按照下列步驟創(chuàng)建一個新進(jìn)程:
? ? ① 為新進(jìn)程分配唯一的進(jìn)程標(biāo)識符,并從PCB隊列中申請一個空閑的PCB。
? ? ② 為新進(jìn)程的程序和數(shù)據(jù),以及用戶棧分配相應(yīng)的主存空間及其他必要的資源。
? ? ③ 初始化PCB中的相應(yīng)信息,如標(biāo)識信息、處理器信息、進(jìn)程控制信息等。
? ? ④ 如果就緒隊列可以接納新進(jìn)程,便將新進(jìn)程加入到就緒隊列中。
? ? (三)、進(jìn)程撤銷?
? ? (1)進(jìn)程正常結(jié)束 ? ? 這是指程序運(yùn)行到最后一條指令后。如在C語言程序的函數(shù)調(diào)用中,執(zhí)行函數(shù)調(diào)用的最后一條指令return后,結(jié)束該函數(shù)。
? ? (2)進(jìn)程異常錯誤 ? ? 在進(jìn)程運(yùn)行期間,由于出現(xiàn)某些錯誤和故障而使進(jìn)程被迫中止。例如越界錯誤、超時故障、非法指令錯、運(yùn)行超時、等待超時、算術(shù)運(yùn)算錯、I/O故障等。
? ? (3)進(jìn)程應(yīng)外界的請求而終止運(yùn)行 ? ? 例如,操作員或操作系統(tǒng)要求父進(jìn)程干預(yù)或父進(jìn)程結(jié)束等。
進(jìn)程撤銷的處理過程,?一旦操作系統(tǒng)發(fā)現(xiàn)了要求終止進(jìn)程的事件后,便調(diào)用進(jìn)程終止原語,按照下列步驟終止指定的進(jìn)程:
? ? ① 根據(jù)被終止進(jìn)程的標(biāo)識符,從PCB集合中檢索該進(jìn)程的PCB,讀出進(jìn)程狀態(tài)。
? ? ② 若該進(jìn)程處于運(yùn)行狀態(tài),則立即終止該進(jìn)程的運(yùn)行。
? ? ③ 若該進(jìn)程有子孫進(jìn)程,還要將其子孫進(jìn)程終止。
? ? ④ 將該進(jìn)程所占用的資源回收,歸還給父進(jìn)程或操作系統(tǒng)。
? ? ⑤ 將被終止進(jìn)程的PCB從所在隊列中移出,撤銷該進(jìn)程的PCB,并將其加入到空閑的PCB隊列中。
? ? (四)、進(jìn)程等待(進(jìn)程阻塞)
? ? (1)請求系統(tǒng)服務(wù) ? ? 正在運(yùn)行的進(jìn)程請求系統(tǒng)提供服務(wù)時,例如申請打印機(jī)打印,但申請服務(wù)資源被另外的進(jìn)程占有,該進(jìn)程只能處于等待狀態(tài)。
? ? (2)啟動某種操作 ? ? 正在運(yùn)行的進(jìn)程啟動某種操作后,其后續(xù)命令必須在該操作完成后才能運(yùn)行,所以要先等待該進(jìn)程。
? ? (3)新數(shù)據(jù)尚未到達(dá) ? ? 對于相互合作的進(jìn)程,如果一個進(jìn)程需要先獲得另一個進(jìn)程提供的數(shù)據(jù)后才能運(yùn)行,則只有等待所需要的數(shù)據(jù)到達(dá)。
? ? (4)無新工作可做 ? ? 系統(tǒng)往往設(shè)置一些具有特定功能的系統(tǒng)進(jìn)程,每當(dāng)這種進(jìn)程完成任務(wù)后,便把自己阻塞起來等待新任務(wù)的到來。
??進(jìn)程等待的處理過程,? ? 一旦操作系統(tǒng)發(fā)現(xiàn)了要求等待進(jìn)程的事件后,便調(diào)用進(jìn)程等待原語,按照下列步驟阻塞指定的進(jìn)程:
? ? ① 立即停止執(zhí)行該進(jìn)程。
? ? ② 修改進(jìn)程控制塊中的相關(guān)信息。把進(jìn)程控制塊中的運(yùn)行狀態(tài)由“運(yùn)行”狀態(tài)改為“等待”狀態(tài),并填入等待的原因,以及進(jìn)程的各種狀態(tài)信息。
? ? ③ 把進(jìn)程控制塊插入到等待隊列。根據(jù)等待隊列的組織方式,把等待進(jìn)程的進(jìn)程控制塊插入等待隊列中。
? ? ④ 轉(zhuǎn)調(diào)度程序重新調(diào)度,運(yùn)行就緒隊列中的其他進(jìn)程。
? ? (五)、進(jìn)程喚醒?
? ? (1)請求系統(tǒng)服務(wù)得到滿足 ? ? 因請求服務(wù)得不到滿足的等待隊列中的進(jìn)程,得到相應(yīng)的服務(wù)要求時,處于等待隊列中的進(jìn)程就被喚醒。
? ? (2)啟動某種操作完成 ? ? 處于等待某種操作完成的等待隊列中的進(jìn)程,其等待的操作已經(jīng)完成,可以執(zhí)行其后續(xù)命令,則必須把它喚醒。
? ? (3)新數(shù)據(jù)已經(jīng)到達(dá) ? ? 對于相互合作的進(jìn)程,如果一個進(jìn)程需要另一個進(jìn)程提供的數(shù)據(jù)已經(jīng)到達(dá),則把因此而處于等待的進(jìn)程喚醒。
? ? (4)有新工作可做 ? ? 系統(tǒng)中的具有特定功能的系統(tǒng)進(jìn)程,接收到新的任務(wù)時,就必須喚醒它。
進(jìn)程喚醒的過程?,? ? 一旦操作系統(tǒng)發(fā)現(xiàn)了要求喚醒進(jìn)程的事件后,便調(diào)用進(jìn)程喚醒原語,按照下列步驟喚醒指定的進(jìn)程。
? ? ① 從等待隊列中找到該進(jìn)程。
? ? ② 修改該進(jìn)程控制塊中的相關(guān)內(nèi)容,把等待狀態(tài)改為就緒狀態(tài),刪除等待原語等。
? ? ③ 把進(jìn)程控制塊插入到就緒隊列中。按照就緒隊列的組織方式,把被喚醒的進(jìn)程的進(jìn)程控制塊插入到就緒隊列中。
? ? 四、進(jìn)程同步
? ? 對于相關(guān)進(jìn)程間的同步和互斥,必須進(jìn)行有效的控制。這種控制涉及幾個基本概念,即臨界資源、臨界區(qū)、進(jìn)程同步和進(jìn)程互斥。
(一)進(jìn)程同步的概念?
1. 臨界資源
? ? 在系統(tǒng)中有許多硬件或軟件資源,如打印機(jī)、公共變量等,這些資源在一段時間內(nèi)只允許一個進(jìn)程訪問或使用,這種資源稱為臨界資源。?
2. 臨界區(qū)
? ? 作為臨界資源,不論是硬件臨界資源,還是軟件臨界資源,多個并發(fā)進(jìn)程都必須互斥地訪問或使用,這時把每個進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)。而這些并發(fā)進(jìn)程中涉及臨界資源訪問的那些程序段稱為相關(guān)臨界區(qū)。
? ? 在臨界區(qū)之前增加一段用于檢查的代碼,這段代碼稱為進(jìn)入?yún)^(qū)。相應(yīng)地,在臨界區(qū)后面也要加入一段代碼,稱為退出區(qū),用于將臨界資源的被訪問標(biāo)志恢復(fù)為未被訪問標(biāo)志。
3. 進(jìn)程同步
? ? 進(jìn)程同步是指多個相關(guān)進(jìn)程在執(zhí)行次序上的協(xié)調(diào),這些進(jìn)程相互合作,在一些關(guān)鍵點(diǎn)上需要相互等待或相互通信。通過臨界區(qū)可以協(xié)調(diào)進(jìn)程間相互合作的關(guān)系,這就是進(jìn)程同步。
4. 進(jìn)程互斥?
? ? 進(jìn)程互斥是指當(dāng)一個進(jìn)程進(jìn)入臨界區(qū)使用臨界資源時,另一個進(jìn)程必須等待。當(dāng)占用臨界資源的進(jìn)程退出臨界區(qū)后,另一個進(jìn)程才被允許使用臨界資源。通過臨界區(qū)協(xié)調(diào)進(jìn)程間資源共享的關(guān)系,就是進(jìn)程互斥。進(jìn)程互斥是同步的一種特例。?
? ? (二)、進(jìn)程同步機(jī)制應(yīng)遵循的原則?
? ? 為了實(shí)現(xiàn)進(jìn)程的同步與互斥,可以利用軟件方法,也可以在系統(tǒng)中設(shè)置專門的同步機(jī)制來協(xié)調(diào)各個進(jìn)程。但是,所有的同步機(jī)制都必須遵循以下四條原則。
1. 空閑讓進(jìn):當(dāng)無進(jìn)程處于臨界區(qū)時,臨界資源處于空閑狀態(tài),可以允許一個請求進(jìn)入臨界區(qū)的進(jìn)程進(jìn)入自己的臨界區(qū),有效地使用臨界資源。
2. 忙則等待:已有進(jìn)程進(jìn)入自己的臨界區(qū)時,意味著臨界資源正被訪問,因而其他試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待,以保證進(jìn)程互斥地使用臨界資源。
3. 有限等待: 對要求訪問臨界資源的進(jìn)程,應(yīng)保證該進(jìn)程在有效的時間內(nèi)進(jìn)入自己的臨界區(qū),以免陷入“死等”狀態(tài)。
4. 讓權(quán)等待:當(dāng)進(jìn)程不能進(jìn)入自己的臨界區(qū)時,應(yīng)立即釋放處理器,以免陷入“忙等”。?
? ? (三)、進(jìn)程同步機(jī)制——鎖?
1. 鎖的概念?
? ? 在同步機(jī)制中,常用一個變量來代表臨界資源的狀態(tài),稱它為鎖。通常用“0”表示資源可用,相當(dāng)于鎖打開。用“1”表示資源已被占用,相當(dāng)于鎖閉合。
互斥鎖:最簡單的一種線程同步方法,會阻塞線程;
自旋鎖:避免切換的一種線程同步方法,屬于“忙等待”?;
讀寫鎖:為“讀多寫少”的資源設(shè)計的線程同步方法,可以顯著提高性能;
條件變量:相對復(fù)雜的一種線程同步方法,有更靈活的使用方法。
? ? ?(四)、進(jìn)程同步機(jī)制——信號量
1. 信號量的概念
? ? 信號量是一種特殊變量,它用來表示系統(tǒng)中資源的使用情況。 ? ? 整型信號量就是一個整型變量。當(dāng)其值大于“0”時,表示系統(tǒng)中對應(yīng)可用資源的數(shù)目;當(dāng)其值小于“0”時,其絕對值表示因該類資源而被等待的進(jìn)程的數(shù)目;當(dāng)其值等于“0”時,表示系統(tǒng)中對應(yīng)資源已經(jīng)用完,并且沒有因該類資源而被等待的進(jìn)程。
2. 對信號量的操作
? ? 對于整型信號量,僅能通過兩個標(biāo)準(zhǔn)的原語操作來訪問,這兩個操作被稱為P操作、V操作,也合稱為PV操作。其中P操作在進(jìn)入臨界區(qū)前執(zhí)行,V操作在退出臨界區(qū)后執(zhí)行。
? ?利用信號量實(shí)現(xiàn)進(jìn)程同步的方法,使用PV操作的規(guī)則
?? ? (1)分清哪些是互斥問題(互斥訪問臨界資源的),哪些是同步問題(具有前后執(zhí)行順序要求的)。
? ? (2)對于互斥問題要設(shè)置互斥信號量,互斥信號量的個數(shù)只與臨界資源的種類有關(guān)。通常有幾類臨界資源就設(shè)置幾個互斥信號量,且初值為1,代表臨界資源可用。
? ? (3)對于同步問題要設(shè)置同步信號量,通常同步信號量的個數(shù)與參與同步的進(jìn)程種類有關(guān),即同步關(guān)系涉及幾類進(jìn)程,就有幾個同步信號量。
? ? (4)在每個進(jìn)程中用于實(shí)現(xiàn)互斥的PV操作必須成對出現(xiàn);用于實(shí)現(xiàn)同步的PV操作也必須成對出現(xiàn),但是它們分別出現(xiàn)在不同的進(jìn)程中;在某個進(jìn)程中如果同時存在互斥與同步的P操作,則其順序不能顛倒,必須先執(zhí)行對同步信號量的P操作,再執(zhí)行對互斥信號量的P操作,但是V操作的順序沒有嚴(yán)格要求。
五、進(jìn)程通信?
進(jìn)程通信是指進(jìn)程之間的信息交換,其所交換的信息量少則幾個字節(jié),多則成千上萬個字節(jié),
? ? (一)、共享存儲器系統(tǒng)?
? ? 在共享存儲器系統(tǒng)中,相互通信的進(jìn)程共享某些數(shù)據(jù)結(jié)構(gòu)或存儲區(qū),進(jìn)程之間能夠通過它們進(jìn)行通信。共享存儲器系統(tǒng)又可以分為共享數(shù)據(jù)結(jié)構(gòu)和共享存儲區(qū)兩種方式。
?1. 共享數(shù)據(jù)結(jié)構(gòu)方式
? ? 在這種通信方式下,相互通信的進(jìn)程共用某些數(shù)據(jù)結(jié)構(gòu),并通過這些數(shù)據(jù)結(jié)構(gòu)交換信息。這種方式與信號量機(jī)制相比,并沒有發(fā)生太大的變化,比較低效、復(fù)雜,只適用于傳送少量的數(shù)據(jù)。
2. 共享存儲區(qū)方式
? ? 這種通信方式是在存儲器中劃出一塊共享存儲區(qū),相互通信的進(jìn)程可以通過對共享存儲區(qū)中的數(shù)據(jù)進(jìn)行讀或?qū)憗韺?shí)現(xiàn)通信。這種方式效率高,可以傳送較多的數(shù)據(jù)。
? ? (二)、消息傳遞系統(tǒng)
?? ? 在消息傳遞系統(tǒng)中,進(jìn)程間的數(shù)據(jù)交換是以消息為單位進(jìn)行的。用戶直接利用系統(tǒng)中提供的一組通信命令(原語)進(jìn)行通信,大大提高了工作效率,又簡化了程序編制的復(fù)雜性。因此,消息傳遞系統(tǒng)成為最常用的高級通信方式。
1. 直接通信方式
? ? 發(fā)送進(jìn)程使用發(fā)送原語直接將消息發(fā)送給接收進(jìn)程,并將它掛在接收進(jìn)程的消息緩沖隊列上。接收進(jìn)程使用接收原語從消息緩沖隊列中取出消息。
? ? 通常,系統(tǒng)提供兩條通信原語: ? ?
(1)發(fā)送原語:Send(Receiver,message); ? ?
(2)接收原語:Receive(Sender,message);
2. 間接通信方式?
? ? 發(fā)送進(jìn)程與接收進(jìn)程通過中間實(shí)體——信箱來完成通信,既可以實(shí)現(xiàn)實(shí)時通信,又可以實(shí)現(xiàn)非實(shí)時通信。
? ?(1)信箱通信的操作
? ? ① 信箱的創(chuàng)建與撤銷 ? ? 進(jìn)程可以利用信箱創(chuàng)建原語來建立一個新信箱。創(chuàng)建進(jìn)程應(yīng)給出信箱的名字、信箱屬性等。當(dāng)信箱所屬進(jìn)程不再需要該信箱時,可用信箱撤銷原語來撤銷信箱。
? ? ② 消息的發(fā)送與接收 ? ? 相互通信的進(jìn)程利用系統(tǒng)提供的下述通信原語來實(shí)現(xiàn)消息的發(fā)送與接收。 ? ? Send(mailbox,message):將一個消息發(fā)送到指定信箱。 ? ? Receive(mailbox,message):從指定信箱中接收一個消息。
? ? 信箱可以由操作系統(tǒng)創(chuàng)建,也可以由用戶創(chuàng)建。創(chuàng)建者是信箱的擁有者,據(jù)此,可以把信箱分為以下三類:
? ? ① 私有信箱 ? ? 用戶進(jìn)程可以為自己建立一個新信箱,并作為進(jìn)程的一部分。信箱的擁有者有權(quán)從信箱中讀取消息,其他用戶只能將自己的消息發(fā)送到該信箱中。
? ? ② 公用信箱 ? ? 它由操作系統(tǒng)創(chuàng)建,并提供給系統(tǒng)中所有核準(zhǔn)的用戶進(jìn)程使用。核準(zhǔn)的進(jìn)程既可以把消息發(fā)送到該信箱,又可以從信箱中取出發(fā)送給自己的消息。
? ? ③ 共享信箱 ? ? 它實(shí)際上是某種進(jìn)程創(chuàng)建的私有信箱。在創(chuàng)建時或創(chuàng)建后,又指明它是可以共享的,同時指出共享進(jìn)程(用戶)的名字,此時就成為共享信箱。?
? ?(3)通信進(jìn)程間的關(guān)系?
? ? ① 一對一關(guān)系 ? ? 在一個發(fā)送進(jìn)程和一個接收進(jìn)程之間建立一條專用的通信通道,使它們之間的通信不受其他進(jìn)程的影響。
? ? ② 多對一關(guān)系 ? ? 允許提供服務(wù)的一個接收進(jìn)程與多個用戶發(fā)送進(jìn)程之間進(jìn)行通信,也稱為客戶機(jī)/服務(wù)器方式。
? ? ③ 一對多關(guān)系 ? ? 允許一個發(fā)送進(jìn)程與多個接收進(jìn)程進(jìn)行通信,使發(fā)送進(jìn)程可以用廣播形式向一組或全部接收者發(fā)送消息。
? ? ④ 多對多關(guān)系 ? ? 允許建立一個公用信箱,讓多個進(jìn)程既可以把消息發(fā)送到該信箱,又可以從信箱中取出發(fā)送給自己的消息。?
? ? (三)、管道通信系統(tǒng)?
? ? 所謂管道是指連接讀進(jìn)程和寫進(jìn)程的,用于實(shí)現(xiàn)它們之間通信的共享文件。向管道提供輸入的發(fā)送進(jìn)程(寫進(jìn)程)以字符流的形式將大量數(shù)據(jù)送入管道,而接受管道輸出的接收進(jìn)程(讀進(jìn)程)可以從管道中接收數(shù)據(jù)。由于發(fā)送進(jìn)程和接收進(jìn)程是利用管道進(jìn)行通信的,故稱為管道通信方式。這種方式首創(chuàng)于UNIX系統(tǒng),因?yàn)樗軅魉痛罅康臄?shù)據(jù),又非常有效,所以又被引入到許多操作系統(tǒng)中。?
六、處理機(jī)調(diào)度?
?? ? 一、進(jìn)程調(diào)度算法的選取原則
1. 面向用戶的原則
?? ?(1)周轉(zhuǎn)時間短
? ?(2)響應(yīng)時間快
? ?(3)截止時間有保證
? ?(4)優(yōu)先權(quán)原則
2. 面向系統(tǒng)的原則
?? ?(1)系統(tǒng)吞吐量高
? ?(2)處理器利用率高
? ?(3)各類資源的平衡利用
? ? 二、常用的進(jìn)程調(diào)度算法
? ? 衡量調(diào)度算法優(yōu)劣的標(biāo)準(zhǔn)是比較不同算法下的周轉(zhuǎn)時間(或帶權(quán)周轉(zhuǎn)時間)和平均周轉(zhuǎn)時間(或平均帶權(quán)周轉(zhuǎn)時間)。平均周轉(zhuǎn)時間短或平均帶權(quán)周轉(zhuǎn)時間短的就是好算法。
1.先來先服務(wù)調(diào)度算法(FCFS)?
? ? 先來先服務(wù)調(diào)度算法是一種最簡單的調(diào)度算法,系統(tǒng)開銷最少。 ? ? 當(dāng)系統(tǒng)采用這種調(diào)度算法時,系統(tǒng)從就緒隊列中選擇一個最先進(jìn)入就緒隊列的進(jìn)程,把處理器分配給該進(jìn)程,使之得到執(zhí)行。進(jìn)程一旦占有了處理器,就一直運(yùn)行下去,直到完成或因發(fā)生某種事件而等待,才退出處理器。?
? ? 先來先服務(wù)調(diào)度算法的裁決模式是非搶占式的,優(yōu)先權(quán)函數(shù)=花費(fèi)在系統(tǒng)中的實(shí)際時間,仲裁規(guī)則是隨機(jī)的。這種調(diào)度算法有利于長進(jìn)程,而不利于短進(jìn)程?
2.短進(jìn)程優(yōu)先調(diào)度算法(SPF)?
? ? 短進(jìn)程優(yōu)先調(diào)度算法是從就緒隊列中選擇一個運(yùn)行時間最短的進(jìn)程,將處理器分配給該進(jìn)程,使之占有處理器并運(yùn)行。直到該進(jìn)程完成或因發(fā)生某種事件而等待,才退出處理器。?
? ? 短進(jìn)程優(yōu)先調(diào)度算法的裁決模式是非搶占式的,優(yōu)先權(quán)函數(shù)=-運(yùn)行時間,仲裁規(guī)則是按照時間先后順序或隨機(jī)方式。這種調(diào)度算法照顧到了系統(tǒng)中的短進(jìn)程,有效地降低了進(jìn)程的平均等待時間,提高了系統(tǒng)的吞吐量。但是,這種算法對長進(jìn)程不利。?
? ? 雖然短進(jìn)程優(yōu)先調(diào)度算法對短進(jìn)程很好,但是也存在不容忽視的缺點(diǎn):?
- 該算法對長進(jìn)程非常不利。
- 該算法和先來先服務(wù)調(diào)度算法一樣,不能保證緊急進(jìn)程得到及時的處理。
- 進(jìn)程調(diào)度的依據(jù)是用戶提供的估計運(yùn)行時間,致使該算法不一定能真正做到短進(jìn)程優(yōu)先調(diào)度。?
3.最短剩余時間優(yōu)先調(diào)度算法(SRT)?
? ? 最短剩余時間優(yōu)先調(diào)度算法是短進(jìn)程優(yōu)先調(diào)度算法的搶占式的動態(tài)版本。它將CPU分配給需要最少時間來完成的進(jìn)程。?
? ? 最短剩余時間優(yōu)先調(diào)度算法的裁決模式是搶占式的,優(yōu)先權(quán)函數(shù)是動態(tài)的,隨著進(jìn)程運(yùn)行和完成時間的減少而增加,仲裁規(guī)則是按照時間先后順序或隨機(jī)方式。這種調(diào)度算法充分照顧到了剩余運(yùn)行時間短的進(jìn)程。?
4.時間片輪轉(zhuǎn)調(diào)度算法(RR)?
? ? 在該算法中,系統(tǒng)將所有的就緒進(jìn)程按照進(jìn)入就緒隊列的先后次序排列。每次調(diào)度時把CPU分配給隊首進(jìn)程,讓其運(yùn)行一個時間片。當(dāng)時間片用完,由計時器發(fā)出時鐘中斷,調(diào)度程序暫停該進(jìn)程的運(yùn)行,使其退出處理器,并將它送到就緒隊列的末尾,等待下一輪調(diào)度運(yùn)行。然后,把CPU分配給就緒隊列中新的隊首進(jìn)程,同時也讓它運(yùn)行一個時間片。這樣就可以保證就緒隊列中的所有進(jìn)程在一定的時間(可以接受的等待時間)內(nèi)均能獲得一個時間片的運(yùn)行時間。?
? ? 時間片輪轉(zhuǎn)調(diào)度算法的裁決模式是面向時間片的,所有就緒進(jìn)程的優(yōu)先權(quán)函數(shù)值相同,仲裁規(guī)則是輪轉(zhuǎn)規(guī)則。這種調(diào)度算法適用于交互進(jìn)程的調(diào)度。?
? ? 在時間片輪轉(zhuǎn)調(diào)度算法中,時間片的大小對系統(tǒng)的性能有很大影響。因此,時間片的大小要適當(dāng),通常要考慮到以下幾個因素:?
? ? ① 系統(tǒng)對響應(yīng)時間的要求 ? ? 作為分時系統(tǒng)首先必須滿足系統(tǒng)對響應(yīng)時間的要求。響應(yīng)時間與進(jìn)程數(shù)目和時間片成正比。?
? ? ② 就緒隊列中進(jìn)程的數(shù)目 ? ? 在分時系統(tǒng)中,就緒隊列上的進(jìn)程數(shù)目是隨著在終端上機(jī)的用戶數(shù)目而改變的。時間片的大小應(yīng)反比于分時系統(tǒng)所配置的終端數(shù)目。?
? ? ③ 系統(tǒng)的處理能力 ? ? 系統(tǒng)的處理能力是必須保證用戶鍵入的常用命令能在一個時間片內(nèi)處理完畢,否則將無法取得滿意的響應(yīng)時間。?
5.優(yōu)先權(quán)調(diào)度算法?
? ? 為了使緊迫型進(jìn)程獲得優(yōu)先處理,引入了優(yōu)先權(quán)調(diào)度算法,也稱為外部優(yōu)先權(quán)調(diào)度算法。它是從就緒隊列中選擇一個優(yōu)先權(quán)最高的進(jìn)程,讓其獲得處理器并運(yùn)行。?
? ? 優(yōu)先權(quán)調(diào)度算法的裁決模式是搶占式的或非搶占式的,優(yōu)先權(quán)函數(shù)是用戶或系統(tǒng)賦給它的優(yōu)先權(quán),仲裁規(guī)則是隨機(jī)的或先進(jìn)先出的。?
? ? 對于優(yōu)先權(quán)調(diào)度算法,其關(guān)鍵在于是采用靜態(tài)優(yōu)先權(quán),還是動態(tài)優(yōu)先權(quán),以及如何確定進(jìn)程的優(yōu)先權(quán)。?
6.響應(yīng)比高者優(yōu)先調(diào)度算法(HRRN)?
? ? 響應(yīng)比高者優(yōu)先調(diào)度算法是一個比較折中的算法,它是從就緒隊列中選擇一個響應(yīng)比最高的進(jìn)程,讓其獲得處理器并運(yùn)行,直到該進(jìn)程完成或因等待某種事件而退出處理器為止。?
響應(yīng)比=響應(yīng)時間/要求服務(wù)時間=等待時間/要求服務(wù)時間?
? ? 響應(yīng)比高者優(yōu)先調(diào)度算法的裁決模式是非搶占式的,優(yōu)先權(quán)函數(shù)=響應(yīng)比,仲裁規(guī)則是隨機(jī)或按照先后次序。這種調(diào)度算法既照顧了短進(jìn)程,又考慮了進(jìn)程到達(dá)的先后次序,也不會使長進(jìn)程長時間得不到服務(wù)。因此,它是一個考慮比較全面的算法。但是每次進(jìn)行調(diào)度時,它都需要對各個進(jìn)程計算響應(yīng)比,所以系統(tǒng)開銷很大,比較復(fù)雜。?
? ? 三、常用的作業(yè)調(diào)度算法?
? ? ① 先來先服務(wù)調(diào)度算法 ? ? 按作業(yè)到達(dá)系統(tǒng)的先后次序進(jìn)行的調(diào)度。該算法優(yōu)先考慮在系統(tǒng)中等待時間最長的作業(yè)。這種算法容易實(shí)現(xiàn),但效率比較低,而且沒有考慮到緊迫作業(yè)和短作業(yè)。?
? ? ② 短作業(yè)優(yōu)先調(diào)度算法 ? ? 從作業(yè)的后備隊列中挑選運(yùn)行時間最短的作業(yè)作為下一個調(diào)度運(yùn)行對象。這種算法容易實(shí)現(xiàn),且效率較高,但未考慮長作業(yè)的利益。 ? ??
? ? ③ 響應(yīng)比高者優(yōu)先調(diào)度算法 ? ? 為了更有效地提高系統(tǒng)的利用率,可以采用響應(yīng)比高者優(yōu)先調(diào)度算法。響應(yīng)比高者優(yōu)先調(diào)度算法既照顧到了短作業(yè)和長作業(yè),又照顧到等待時間長的作業(yè),但對要求運(yùn)行緊迫的作業(yè),沒有充分考慮到。?
? ? ④ 優(yōu)先權(quán)調(diào)度算法????????? 優(yōu)先權(quán)調(diào)度算法是根據(jù)作業(yè)確定的優(yōu)先權(quán)來選取作業(yè),每次總是選取優(yōu)先權(quán)最高的作業(yè)。在優(yōu)先權(quán)調(diào)度算法中,為了照顧緊迫作業(yè)的運(yùn)行,可能使某些系統(tǒng)資源閑置,系統(tǒng)資源的利用率沒有充分地發(fā)揮。?
? ? ⑤ 分類調(diào)度算法????????? 分類調(diào)度算法是根據(jù)系統(tǒng)運(yùn)行情況和作業(yè)屬性將作業(yè)分類,作業(yè)調(diào)度時輪流從這些不同的作業(yè)類中挑選作業(yè)。分類調(diào)度算法雖然可以均衡使用各類資源,但是需要為不同類型的作業(yè)設(shè)置隊列,增加了系統(tǒng)開銷。?
? ? (1)先來先服務(wù)算法。作業(yè)的執(zhí)行情況如下表所示:?
作業(yè) |
提交時間 |
運(yùn)行時間 |
開始時間 |
完成時間 |
周轉(zhuǎn)時間 |
帶權(quán)周轉(zhuǎn)時間 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:00 |
9:30 |
0.67 |
1.34 |
J3 |
9:00 |
0.20 |
9:30 |
9:42 |
0.7 |
3.5 |
J4 |
9:10 |
0.10 |
9:42 |
9:48 |
0.63 |
6.3 |
? ? 作業(yè)的執(zhí)行順序?yàn)椋篔1,J2,J3,J4。 ? ? 平均周轉(zhuǎn)時間=(1.0+0.67+0.7+0.63)/4=0.75小時 ? ? 平均帶權(quán)周轉(zhuǎn)時間=(1.0+1.34+3.5+6.3)/4=3.035小時?
? ? (2)短作業(yè)優(yōu)先算法。作業(yè)的執(zhí)行情況如下表所示:?
作業(yè) |
提交時間 |
運(yùn)行時間 |
開始時間 |
完成時間 |
周轉(zhuǎn)時間 |
帶權(quán)周轉(zhuǎn)時間 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:18 |
9:48 |
0.97 |
1.94 |
J3 |
9:00 |
0.20 |
9:00 |
9:12 |
0.2 |
1.0 |
J4 |
9:10 |
0.10 |
9:12 |
9:18 |
0.13 |
1.3 |
? ? 作業(yè)的執(zhí)行順序?yàn)椋篔1,J3,J4,J2。 ? ? 平均周轉(zhuǎn)時間=(1.0+0.97+0.2+0.13)/4 = 0.575小時 ? ? 平均帶權(quán)周轉(zhuǎn)時間=(1.0+1.94+1.0+1.3)/4 = 1.31小時?
? ? (3)響應(yīng)比高者優(yōu)先算法。作業(yè)的執(zhí)行情況如下表所示:?
作業(yè) |
提交時間 |
運(yùn)行時間 |
開始時間 |
完成時間 |
周轉(zhuǎn)時間 |
帶權(quán)周轉(zhuǎn)時間 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:18 |
9:48 |
0.97 |
1.94 |
J3 |
9:00 |
0.20 |
9:00 |
9:12 |
0.2 |
1.0 |
J4 |
9:10 |
0.10 |
9:12 |
9:18 |
0.13 |
1.3 |
?? ? 作業(yè)的執(zhí)行順序?yàn)椋篔1,J2,J4,J3。 ? ? 平均周轉(zhuǎn)時間=(1.0+0.67+0.8+0.43)/4=0.725小時 ? ? 平均帶權(quán)周轉(zhuǎn)時間=(1.0+1.34+4+4.3)/4=2.66小時
? ? 四、死鎖的基本概念?
1. 死鎖的概念?
? ? 死鎖是指多個進(jìn)程因競爭資源而造成的一種僵局現(xiàn)象,若無外力的作用,這些進(jìn)程都不能繼續(xù)運(yùn)行。?
2. 死鎖的原因?
? ?(1)競爭資源 ? ? 當(dāng)系統(tǒng)中供多個進(jìn)程共享的資源不足以同時滿足它們的需求時,引起它們對資源的競爭而產(chǎn)生死鎖。?
? ?(2)進(jìn)程推進(jìn)順序非法 ? ? 進(jìn)程在運(yùn)行過程中如果請求和釋放資源的順序不當(dāng),也可能會導(dǎo)致進(jìn)程死鎖。?
3. 產(chǎn)生死鎖的必要條件?
? ? 死鎖并不一定都會出現(xiàn),如果一旦產(chǎn)生死鎖,一定會滿足下述四個必要條件。?
? ?(1)互斥條件:進(jìn)程對分配到的資源進(jìn)行排他性、獨(dú)占性使用,即在一段時間內(nèi)某資源只能由一個進(jìn)程占用
? ?(2)請求和保持條件:進(jìn)程已經(jīng)擁有并保持了至少一個資源,但是,又請求新的資源,而新請求的資源又被其他進(jìn)程占有,此時請求進(jìn)程被等待,但對已獲得的資源保持不放。
? ?(3)不可剝奪條件:進(jìn)程所占有的資源在結(jié)束之前不能被剝奪,只能在運(yùn)行結(jié)束后由自己釋放。
? ?(4)環(huán)路等待條件:在發(fā)生死鎖時,必然存在一個“進(jìn)程—資源”的環(huán)形鏈。?
4. 處理死鎖的基本方法?
? ? 死鎖并不一定都會出現(xiàn),如果一旦產(chǎn)生死鎖,一定會滿足下述四個必要條件。?
? ?(1)預(yù)防死鎖 ? ? 預(yù)防死鎖是在進(jìn)行資源分配之前,通過設(shè)置某些資源分配的限制條件,來破壞產(chǎn)生死鎖的四個必要條件的一個或幾個。?
? ?(2)避免死鎖 ? ? 避免死鎖是在資源分配前不設(shè)置限制條件,在進(jìn)行資源分配的過程中,用某種方法對每次資源分配進(jìn)行管理,以避免某次分配使系統(tǒng)進(jìn)入不安全狀態(tài),以至產(chǎn)生死鎖。?
? ?(3)檢測和解除死鎖 ? ? 該方法首先是通過系統(tǒng)的檢測過程及時地檢查系統(tǒng)是否出現(xiàn)死鎖,并確定與死鎖有關(guān)的進(jìn)程和資源,然后通過撤銷或掛起一些死鎖中的進(jìn)程回收相應(yīng)的資源,進(jìn)行資源的再次分配,從而將進(jìn)程死鎖狀態(tài)解除。?
? ? 七、線程技術(shù)?
1. 線程的概念?
? ? 線程是進(jìn)程中的一個實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和運(yùn)行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有少量在運(yùn)行中必不可少的資源(如程序計數(shù)器、一組寄存器和棧),但是它可以與同屬于一個進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。一個線程可以創(chuàng)建和撤銷另一個線程,同一進(jìn)程中的多個線程之間可以并發(fā)運(yùn)行。線程之間也會相互制約,使其在運(yùn)行中呈現(xiàn)異步性。因此,線程同樣具有就緒、運(yùn)行、等待三種基本狀態(tài)。?
2. 線程與進(jìn)程的比較?
?
3. 線程的類型?
? ?(1)系統(tǒng)級線程?
? ? 系統(tǒng)級線程是依賴于系統(tǒng)控制的,即無論是用戶進(jìn)程中的線程,還是系統(tǒng)進(jìn)程中的線程,它們的創(chuàng)建、撤銷與切換都是由系統(tǒng)控制實(shí)現(xiàn)的。在系統(tǒng)中保留了一張線程控制塊,系統(tǒng)根據(jù)該線程控制塊來感知線程的存在,并對線程進(jìn)行控制。?
? ?(2)用戶級線程?
? ? 用戶級線程是由用戶控制的,對于用戶級線程的創(chuàng)建、撤銷與切換,都與系統(tǒng)控制無關(guān),完全由用戶自己管理。簡單來說就是系統(tǒng)并不知道有用戶級線程的存在,在系統(tǒng)中各種控制仍然是基于進(jìn)程的。?文章來源:http://www.zghlxwxcb.cn/news/detail-815412.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-815412.html
到了這里,關(guān)于操作系統(tǒng)(第二章-進(jìn)程管理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!