国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第二章 進程管理

這篇具有很好參考價值的文章主要介紹了第二章 進程管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

2.1? 進程的引入

2.1.1程序的順序執(zhí)行

1.程序的順序執(zhí)行

2.程序順序執(zhí)行時的特征

2.1.2? 程序的并發(fā)執(zhí)行及其特征

1.并發(fā)執(zhí)行的概念

2.程序并發(fā)執(zhí)行時的特征

2.1.3? 進程的定義與特征

1.進程的定義

2.進程的特征

2.1.4? 進程的基本狀態(tài)及轉(zhuǎn)換

1.進程的三個基本狀態(tài)

2.進程狀態(tài)的轉(zhuǎn)換

2.1.5 ?Linux進程的狀態(tài)

2.2 ?進程的描述

2.2.1 ?進程控制塊PCB

1.進程標識符

2.處理機狀態(tài)? ? ? ?

3.進程調(diào)度信息 ? ?

4.進程控制信息 ? ?

2.2.2 ?進程控制塊的組織方式


2.1? 進程的引入

2.1.1程序的順序執(zhí)行

1.程序的順序執(zhí)行

程序是人們要計算機完成特定功能的一些指令序列,是一個按嚴格次序、順序執(zhí)行的操作序列,是一個靜態(tài)的概念。

如:有一個程序,要求先輸入數(shù)據(jù),再做相應的計算,最后輸出結果并用打印機打印。分別用I、C、P代表以上3個程序段,這樣,上述3個程序段的執(zhí)行順序為:
??????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? I→C→P。

2.程序順序執(zhí)行時的特征

(1)順序性。
?????? 處理機的操作嚴格按照程序所規(guī)定的順序執(zhí)行,即只有前一個程序段完成才執(zhí)行下一個程序段,上一條指令完成再去執(zhí)行下一條指令。
(2)封閉性。
?????? 程序是在封閉環(huán)境下運行的。
?????? 程序運行時獨占全機資源,資源的狀態(tài)除初始狀態(tài)外,只有該程序本身才能改變它。
?????? 程序執(zhí)行的最終結果由給定的初始條件決定,不受外界因素的影響。
(3)可再現(xiàn)性。
?????? 順序執(zhí)行的最終結果可再現(xiàn)。
?????? 也就是說它與執(zhí)行速度執(zhí)行的時刻無關,只要輸入的初始條件相同,無論何時重復執(zhí)行該程序,結果都是相同的。

2.1.2? 程序的并發(fā)執(zhí)行及其特征

1.并發(fā)執(zhí)行的概念

? ? ? ? 所謂程序的并發(fā)性,是指多道程序在同一時間間隔內(nèi)同時發(fā)生。
??????? 程序的并發(fā)執(zhí)行可總結為:一組在邏輯上互相獨立的程序或程序段在執(zhí)行過程中,其執(zhí)行時間在客觀上互相重疊,即一個程序段的執(zhí)行尚未結束,另一個程序段的執(zhí)行已經(jīng)開始的一種執(zhí)行方式。

2.程序并發(fā)執(zhí)行時的特征

(1)間斷性
??????? 程序在并發(fā)執(zhí)行時,由于它們共享系統(tǒng)資源,以及為完成同一項任務而相互合作,致使這些并發(fā)執(zhí)行的程序之間,形成了相互制約的關系。相互制約將導致并發(fā)程序具有“執(zhí)行——暫?!獔?zhí)行”這種間斷性的活動規(guī)律。

第二章 進程管理

(2)失去封閉性
??????? 程序在并發(fā)執(zhí)行時,是多個程序共享系統(tǒng)中的各種資源,因而這些資源的狀態(tài)將由多個運行的程序來改變,致使程序的運行失去了封閉性。例如,當處理機被某個程序占有時,另一程序必須等待。
(3)不可再現(xiàn)性
??????? 在并發(fā)環(huán)境下,同一個程序執(zhí)行多次,執(zhí)行的結果可能不同。
例如,有兩個循環(huán)程序A和B,它們共享一個變量N,初值為0。
程序A():????????????????????????????????????? 程序B():
{do??????????????????????????????????????????????????? ? {do
?? ? N=N+1;???????????????????????????????????????????????? print(N);
???? While(1)??????????????????????????????????????????????? While(1)
}?????????????????????????????????????????????????????????? }
?? 程序A和程序B以不同的速度運行,出現(xiàn)的結果可能不同。例如,當程序A和程序B運行的速度相近時,打印的結果為1、2、3、…;而當程序A的執(zhí)行速度是程序B的2倍時,打印的結果可能是2、4、6…。

小結:引入進程的意義

??????? 從上例來看,程序在并發(fā)執(zhí)行時,由于失去了封閉性,其計算結果與并發(fā)程序的執(zhí)行速度有關,從而使程序失去了可再現(xiàn)性,程序經(jīng)過多次執(zhí)行后,雖然執(zhí)行時的環(huán)境和初始條件相同,但得到的結果卻各不相同。
??????? 所以,從上面的討論看,由于程序的順序性、間斷性和不可再現(xiàn)性,用程序作為描述其執(zhí)行過程以及共享資源的基本單位是不合適的。
??????? 這就需要一個既能描述程序的執(zhí)行過程,又能用來共享資源的基本單位,這個基本單位被稱為進程。

2.1.3? 進程的定義與特征

1.進程的定義

? ? ? ? ?進程是操作系統(tǒng)中最基本、最重要的概念之一。人們對進程下過許多定義。現(xiàn)列舉其中的幾種:
?(1)進程是程序的一次執(zhí)行。
?(2)進程是可以和別的進程并發(fā)執(zhí)行的計算。
?(3)進程就是一個程序在給定活動空間和初始條件下,在一個處理機上的執(zhí)行過程。
?(4)進程是程序在一個數(shù)據(jù)集合上的運行過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。
?(5)進程是動態(tài)的,有生命周期的活動。內(nèi)核可以創(chuàng)建一個進程,最終將由內(nèi)核終止該進程使其消亡。
????? 綜上觀點定義為:“并發(fā)執(zhí)行的程序在一個數(shù)據(jù)集合上的執(zhí)行過程”?????? 【運行著的程序】

補充:進程和程序之間的關系

?????? 進程和程序是兩個完全不同的概念,但又有密切的聯(lián)系。程序是規(guī)定的工作流程,進程則是實際的工作過程。
?????? 它們之間的主要區(qū)別是:
??? (1)程序是靜態(tài)的概念,而進程則是程序的一次執(zhí)行過程。它是動態(tài)的概念。
??? (2)進程是一個能獨立運行的單位,能與其它進程并發(fā)執(zhí)行;而程序是不能作為一個獨立運行的單位而并發(fā)執(zhí)行的。
??? (3)程序和進程無一一對應的關系。
??? (4)各個進程在并發(fā)執(zhí)行過程中會產(chǎn)生相互制約關系,而程序本身是靜態(tài)的,不存在這種異步特征。

2.進程的特征

從進程與程序的區(qū)別可以看出,進程具有如下特征:
(1)動態(tài)性
??????? 動態(tài)性是進程最基本的特性。進程由創(chuàng)建而產(chǎn)生,由調(diào)度而執(zhí)行,因得不到資源而暫停執(zhí)行,以及因撤消而消亡。
(2)并發(fā)性
?????? 這是指多個進程實體,同存于內(nèi)存中,能在一段時間段內(nèi)同時執(zhí)行。并發(fā)性是進程的重要特征,同時也是操作系統(tǒng)的重要特征。提高并發(fā)性,可以提高系統(tǒng)的效率。
(3)獨立性
?????? 進程是一個能獨立運行的基本單位,同時也是系統(tǒng)中獨立獲得資源和獨立調(diào)度的基本單位。
(4)異步性
??????? 這是指進程按各自獨立的、不可預知的速度向前推進;或者說,進程按異步方式運行。
(5)結構特征
??????? 從結構上看,進程實體是由程序段、數(shù)據(jù)段及進程控制塊三部分組成,也稱這三部分為進程映像。

2.1.4? 進程的基本狀態(tài)及轉(zhuǎn)換

第二章 進程管理

??? 進程的動態(tài)性由它的狀態(tài)及狀態(tài)轉(zhuǎn)換來體現(xiàn)的。


1.進程的三個基本狀態(tài)

? ? 進程通常至少有三種基本狀態(tài):
?(1)就緒狀態(tài)(ready)
?????? 進程運行所需的外部條件滿足,但因為其它進程已占用CPU,所以暫時不能運行。
?(2)執(zhí)行狀態(tài)(running)
?????? 外部條件滿足,進程已獲得CPU,其程序正在執(zhí)行。在單處理機系統(tǒng)中,只有一個進程處于執(zhí)行狀態(tài)。
? (3)阻塞狀態(tài)(blocked)
?????? 進程因資源無法滿足而等待資源,暫時不能運行的狀態(tài),稱為阻塞狀態(tài),也稱為等待狀態(tài)。
?????? 系統(tǒng)中處于阻塞狀態(tài)的進程可能有多個,通常將它們排成一個隊列,也有的系統(tǒng)則根據(jù)阻塞原因的不同將這些進程排成多個隊列。

2.進程狀態(tài)的轉(zhuǎn)換

(1)就緒 ----> 執(zhí)行
????? 對于處于就緒狀態(tài)的進程,在調(diào)度程序為之分配了處理機之后,該進程便可執(zhí)行。相應地,它由就緒狀態(tài)轉(zhuǎn)變?yōu)閳?zhí)行狀態(tài)。
(2)執(zhí)行 ----> 就緒
?????? 正在執(zhí)行的進程(執(zhí)行狀態(tài))也稱為當前進程,如果因分配給它的時間片已用完而被暫停執(zhí)行時,該進程便由執(zhí)行狀態(tài)又回到就緒狀態(tài)
(3)執(zhí)行 ----> 阻塞
?????? 一個處在執(zhí)行狀態(tài)的進程,如果因等待資源而使進程的執(zhí)行受阻,使之無法繼續(xù)執(zhí)行,該進程將由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)
(4)阻塞 ----> 就緒
?????? 一個處于阻塞狀態(tài)的進程,當它所需的外部事件滿足,它應由阻塞狀態(tài)變?yōu)榫途w狀態(tài)。

第二章 進程管理

補充:引入掛起狀態(tài)時的進程狀態(tài)------掛起 、激活

?????? 除了上述3種基本狀態(tài)以外,很多系統(tǒng)中又引入了掛起狀態(tài)。?????? ?
?????? 所謂掛起狀態(tài),實際上就是一種靜止的狀態(tài)。一個進程被掛起后,不管它是否在就緒狀態(tài),系統(tǒng)都不分配給它處理機。
? ? ?? 處于掛起狀態(tài)的進程要想重新進入到活動狀態(tài),必須被激活(即轉(zhuǎn)換為活動狀態(tài)),然后才有可能執(zhí)行。
????? 因此在引入掛起狀態(tài)后,進程之間的狀態(tài)轉(zhuǎn)換除了四種基本狀態(tài)轉(zhuǎn)換以外,又增加了以下幾種:
?(1)活動就緒—掛起—靜止就緒。
?(2)活動阻塞—掛起—靜止阻塞。
?(3)靜止就緒—激活—活動就緒。
?(4)靜止阻塞—激活—活動阻塞。

第二章 進程管理

2.1.5 ?Linux進程的狀態(tài)

Linux系統(tǒng)的一個任務總體上有以下幾種狀態(tài):

(1)TASK-RUNNING狀態(tài) :執(zhí)行和就緒兩種狀態(tài)

(2)TASK-INTERRUPTIBLE狀態(tài):可中斷的等待狀態(tài)。

(3)TASK-UNINTERRUPTIBLE狀態(tài):不可中斷等待狀態(tài)。

(4)TASK-ZOMBIE狀態(tài),僵死狀態(tài)。由于某些原因進程被終止,這個進程所占有的資源全部釋放之后,還保存著PCB信息,這種占有PCB但已被撤消的進程就處于僵死狀態(tài)。

(5)TASK-STOPPED狀態(tài),暫停狀態(tài)。

2.2 ?進程的描述

? ? ? ?進程的活動是通過在CPU上執(zhí)行一系列程序和對相應數(shù)據(jù)進行操作來體現(xiàn)的。

? ? ? ?程序和操作的數(shù)據(jù)是進程存在的實體。 ? ? ?

? ? ? ?程序和數(shù)據(jù)是靜態(tài)的,無法反映出其動態(tài)性,還需要一個數(shù)據(jù)結構來描述進程的動態(tài)性(當前的狀態(tài)、本身的特性等)。這種數(shù)據(jù)結構稱為進程控制塊PCB (Process Control Block)。 ? ?所以,進程實體通常是由程序、數(shù)據(jù)集合和進程控制塊PCB這三部分構成,也稱為“進程映象”。

第二章 進程管理

2.2.1 ?進程控制塊PCB

? ? ? ? PCB集中反映一個進程的動態(tài)特征,當系統(tǒng)創(chuàng)建了一個新進程時,就為它建立一個PCB;當進程終止后,系統(tǒng)回收其PCB,該進程在系統(tǒng)中就不存在了。所以,PCB是進程存在的惟一標志。 ? ? ? ? 可以按照功能將PCB分成四個組成部分: ? ? ? ?

? ? ? ? 進程標識符、處理機狀態(tài)、進程調(diào)度信息、進程控制信息。

1.進程標識符

進程標識符用于惟一地標識一個進程。 ? ? ? ?

一個進程通常有兩種標識符:?進程內(nèi)部標識符、?進程外部標識符。

(1)進程內(nèi)部標識符。 ? ? ?

? ? ? ?在所有的操作系統(tǒng)中,為每一個進程賦予一個惟一的數(shù)字標識符,它通常是一個進程的序號。設置內(nèi)部標識符主要是為了方便系統(tǒng)使用。

(2)進程外部標識符。? ? ? ??

? ? ? ?它由創(chuàng)建者提供,通常是由字母、數(shù)字組成,往往由用戶(進程)在訪問該進程時使用。為了描述進程的家族關系,還應設置父進程標識及子進程標識。

2.處理機狀態(tài)? ? ? ?

? ? ? ?處理機狀態(tài)信息主要由處理機的各種寄存器中的內(nèi)容組成。處理機在運行時,許多信息都放在寄存器中當處理機被中斷時,這些信息都必須保存在PCB中,以便在該進程重新執(zhí)行時能從斷點繼續(xù)執(zhí)行。處理機的寄存器包括通用寄存器、指令計數(shù)器、程序狀態(tài)字PSW、用戶棧指針。

3.進程調(diào)度信息 ? ?

? ? ? ? PCB中還存放一些與進程調(diào)度和進程對換有關的信息。

(1)進程狀態(tài)。 ? ? ? ?

?指明進程當前的狀態(tài),作為進程調(diào)度和對換的依據(jù)。

(2)進程優(yōu)先級。 ? ? ? ?

進程使用處理機的優(yōu)先級別的整數(shù),優(yōu)先級高的進程應優(yōu)先獲得CPU

(3)進程調(diào)度所需要的其它信息。 ? ? ? ? ?

與所采用的進程調(diào)度算法有關,如進程已等待CPU的時間、進程已運行的時間等。

(4)事件或阻塞原因。 ? ? ?

指進程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)所需要等待發(fā)生的事件。

4.進程控制信息 ? ?

進程控制信息包括:

(1)程序和數(shù)據(jù)的地址: ? ? ? ?

進程的程序和數(shù)據(jù)所在的內(nèi)存或外存地址,以便再調(diào)度到該進程執(zhí)行時,能從PCB中找到其程序和數(shù)據(jù)。

(2)進程同步和通信機制: ? ? ? ?

實現(xiàn)進程同步和進程通信時必需的機制,如消息隊列指針、信號量等,它們可能全部或部分地放在PCB中。

(3)資源清單: ? ? ?

?是一張列出了除CPU以外、進程所需的全部資源及已經(jīng)分配到該進程的資源清單。

(4)鏈接指針: ? ? ? ?

本進程PCB所在隊列的下一個進程PCB的首地址。

2.2.2 ?進程控制塊的組織方式

各進程的PCB有如下幾種組織方式: ? ?

?線性方式、?鏈接方式、索引方式。

1.線性方式 ? ?

將各進程的PCB依次放入一個表中,結構如下圖所示。

第二章 進程管理

2.鏈接方式

? ? ? ?鏈接方式是經(jīng)常采用的方式。其原理是:按照進程的不同狀態(tài)分別將其放在不同的隊列。Linux操作系統(tǒng)就是應用這種進程控制塊組織方式。

第二章 進程管理

3.索引方式

? ? ? ?系統(tǒng)根據(jù)所有進程的狀態(tài)建立幾張索引表。如就緒索引表、阻塞索引表等。并把各索引表在內(nèi)存的首地址記錄在內(nèi)存的一些專用單元中。 在每個索引表的表目中,記錄具有相應狀態(tài)的某個PCB在PCB表中 的地址。

第二章 進程管理

2.2.3 ?Linux進程的PCB

? ? ? ? Linux系統(tǒng)中的進程稱為任務

該系統(tǒng)的進程控制塊PCB用一個稱為task-struct的結構體來描述, Linux系統(tǒng)PCB包含以下信息:

1. 進程描述信息

(1)進程標識號(pid, process identifier)

(2)用戶和組標識(user and group identifier)

(3) 連接信息(Links)

2.進程控制信息

(1) 進程當前狀態(tài)

(2)調(diào)度信息

(3)記時信息

(4) 通信信息

3. 進程資源信息 ? ? ? ?

? ? ? ?記錄了與該進程有關的存儲器的各種地址和資料、文件系統(tǒng)以及打開文件的信息等等。

4. CPU現(xiàn)場信息 ? ? ?

? ? ? ?每個進程運行時都要使用處理器的寄存器以及堆棧等資源。當一個進程被掛起時,所有有關處理處理器的內(nèi)容都要保存到task_struct結構中。當進程恢復運行時,所有保存的內(nèi)容再裝入到處理器中。

2.3 ?進程控制

? ? ? ? 進程和處理機管理的一個重要任務是進程控制。 ? ? ? ?

? ? ? ? 所謂進程控制,就是系統(tǒng)使用具有特定功能的程序段創(chuàng)建、撤消進程以及完成進程各狀態(tài)間的轉(zhuǎn)換,從而達到多進程高效率并發(fā)執(zhí)行和協(xié)調(diào)、實現(xiàn)資源共享的目的。 ? ? ? ?

? ? ? ? 系統(tǒng)在運行時分為兩種狀態(tài):即核心態(tài)用戶態(tài)。 ? ? ?

? ? ? ? 核心態(tài)也叫系統(tǒng)態(tài)或管態(tài),是指CPU在運行操作系統(tǒng)的核心模塊;用戶態(tài)也稱用態(tài),是指CPU正在運行用戶的程序。

? ? ? ?原語的概念:把系統(tǒng)態(tài)下執(zhí)行的某些具有特定功能的程序段稱為原語,原語的特點是不可被中斷。 ? ? ? ?

? ? ? ?系統(tǒng)在創(chuàng)建、撤消一個進程以及要改變進程的狀態(tài)時,都要調(diào)用相應的程序段來完成這些功能。用于進程控制的原語有創(chuàng)建原語、撤消原語、阻塞原語和喚醒原語等。

2.3.1 ?進程的家族關系

? ? ? ?操作系統(tǒng)通過內(nèi)核原語來實現(xiàn)進程控制。在系統(tǒng)初始化完成后,系統(tǒng)就可創(chuàng)建進程。 ? ?

? ? ? ?創(chuàng)建者稱為父進程,被創(chuàng)建的新進程稱為子進程,子進程又可以創(chuàng)建自己的子進程,從而形成一棵有向的進程家族樹。 ? ?

? ? ? ? 子進程與父進程之間的關系: ? ?

? ? ? ?子進程的許多屬性都是從父進程繼承來的,子進程與父進程的區(qū)別是形成自己獨立的屬性。? ? ? ? ? ?子進程可以從父進程繼承的屬性包括:用戶標識符、環(huán)境變量、打開文件、文件系統(tǒng)的當前目錄、已經(jīng)連接的共享存儲區(qū)和信號處理處理例程入口表等。 ? ? ?

? ? ? ? 子進程不能從父進程繼承的屬性包括:進程標識符和父進程標識符等。

第二章 進程管理

2.3.2 ?進程的創(chuàng)建與終止

1.進程的創(chuàng)建 ? ? fork.c ? ? ?

? ? ? ? 在多道程序環(huán)境下,為使程序運行,必須為他創(chuàng)建進程。 ? ? ?

? ? ? ? 系統(tǒng)發(fā)現(xiàn)要求創(chuàng)建進程的事件請求后,便通過調(diào)用創(chuàng)建原語Creat( )創(chuàng)建進程。

? ? ? ? 其步驟如下:

? ? ?( 1)申請空白PCB。 ? ?

? ? ? ?為新進程申請獲得惟一的進程標識符,并從PCB集合中索取一個空白PCB。 ? ? ? ?

? ? ?(2)為新進程分配資源。 ?

? ? ? ?包括新創(chuàng)建進程的程序、數(shù)據(jù)用戶棧所需的內(nèi)存空間。

? ? (3)初始化進程控制塊。 ? ? ? ? ?

? ? ? ?初始化標識信息,如進程標識符;處理機狀態(tài)信息,使程序計數(shù)器指向程序的入口地址,使棧指針指向棧頂;處理機控制信息,將新建進程的狀態(tài)設置為就緒狀態(tài)(活動就緒或靜止就緒狀態(tài));進程的優(yōu)先級等。

? ? (4)將新建進程插入就緒態(tài)隊列。

2.進程的終止過程 ? ? ? ?

? ? ? ? 系統(tǒng)檢測到要求進程終止事件,操作系統(tǒng)調(diào)用進程終止原語,終止本進程的執(zhí)行。操作過程如下:

(1)根據(jù)被終止進程的標識符,從PCB隊列中檢索出該進程的PCB,從中讀出該進程的狀態(tài)。 (2)若被終止進程正處于執(zhí)行狀態(tài),應立即終止該進程的執(zhí)行,該進程被終止后應重新進行進程調(diào)度。

(3)檢查該進程有無子孫進程,若有,則應將其所有子孫進程終止。

(4)釋放終止的進程所占有的資源,將其歸還它的父進程或者系統(tǒng)。

(5)將被終止的進程它的PCB隊列移出。

2.3.3 ?進程的阻塞與喚醒

? ? ? ? 進程狀態(tài)的轉(zhuǎn)換需要通過進程之間的同步或通信機構來實現(xiàn),也可直接使用“阻塞原語”和“喚醒原語”來實現(xiàn)。 ? ?

? ? ? ? 阻塞原語在一個進程期待某一事件發(fā)生,但發(fā)生條件還不滿足時,被該進程自己調(diào)用來阻塞自己,并轉(zhuǎn)換為等待狀態(tài)。 ? ?

? ? ? ?當?shù)却犃兄械倪M程所等待的事件發(fā)生時,等待該事件的進程都將被喚醒。喚醒一個進程有兩種方法,一種是由系統(tǒng)進程喚醒,另一種是由事件發(fā)生進程喚醒。

? ? ? ?實現(xiàn)進程的執(zhí)行狀態(tài)到阻塞狀態(tài)的原語為阻塞原語;由阻塞狀態(tài)到就緒狀態(tài)轉(zhuǎn)換的原語分為喚醒原語 。

第二章 進程管理

第二章 進程管理

2.3.4 ?Linux系統(tǒng)調(diào)用

在Linux系統(tǒng)中,系統(tǒng)向用戶提供了一些對進程進行控制的系統(tǒng)調(diào)用。常用的有:

1.fork( )系統(tǒng)調(diào)用 ? ? ? ? ? ?fork.c ? ?

? ? ? ?Linux利用fork( ) 系統(tǒng)調(diào)用創(chuàng)建一個新進程。 ? ? ?

? ? ? ?fork()系統(tǒng)調(diào)用的格式是:?int fork(); ? ? ?

? ? ? ?通常情況下,設返回值為int pid,調(diào)用格式為:pid=fork(); ?fork()是通過復制來創(chuàng)建子進程的,子進程繼承父進程的上下文,是父進程的一個副本,與父進程使用同一段代碼。在該系統(tǒng)調(diào)用之后,兩個代碼相同的進程并發(fā)執(zhí)行。fork系統(tǒng)調(diào)出錯可能基于以下兩方面的原因:一是當前進程數(shù)量已達到系統(tǒng)規(guī)定的最大值,二是系統(tǒng)內(nèi)存不足。

通常情況下,設返回值為int pid,調(diào)用格式為: pid=fork(); 其中,返回值pid意義如下: pid=0:創(chuàng)建子進程成功,表示從子進程返回,即CPU正在運行該子進程。 pid>0:創(chuàng)建子進程成功,表示從父進程返回,pid的值為新創(chuàng)建的子進程標識號。 pid=-1:創(chuàng)建失敗。

用進程的家族關系

main()
{
   fork(); 
   fork(); 
   fork(); 
   printf(“S”);
}  
結果:SSSSSSSS

第二章 進程管理

第二章 進程管理

2.Exec系統(tǒng)調(diào)用 ? ? ? ?

? ? ? 利用exec系統(tǒng)調(diào)用執(zhí)行另一個程序。 ? ? ? ?

? ? ? ?在Linux系統(tǒng)中,當由fork()系統(tǒng)調(diào)用創(chuàng)建一個子進程后,可再利用exec( ? ? )系統(tǒng)調(diào)用執(zhí)行另一個程序。

3.exit( )系統(tǒng)調(diào)用 ? ? ?

? ? ? ? 對于一般的用戶進程,在其任務完成后應被盡快撤消。 ? ? ? ?

? ? ? ? Linux系統(tǒng)用exit()系統(tǒng)調(diào)用來實現(xiàn)進程的自我終止。通常,父進程在創(chuàng)建子進程時,應在進程的末尾寫一條exit(),使子進程自我終止。

4.wait系統(tǒng)調(diào)用 ? ? ? ?

? ? ? ?將調(diào)用進程掛起,直至其子進程因暫?;蚪K止而發(fā)來軟中斷信號為止。

第二章 進程管理

2.4 ?進程的同步與互斥?

? ? ? ?進程的并發(fā)提高了系統(tǒng)效率,也同時導致了資源的競爭與共享。必須控制好進程的同步與互斥。

2.4.1 ?臨界資源的概念

1.臨界資源 ? ? ?

? ? ? ?兩個或兩個以上的進程不能同時使用的資源為臨界資源。?臨界資源可能是一些獨占設備,如打印機、磁帶機等;也可能是一些共享變量、表格、鏈表等。

第二章 進程管理

2.臨界區(qū)

? ? ? ?不論硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地訪問臨界資源。

? ? ? ?臨界區(qū): ? ? 每個進程中訪問臨界資源的那段代碼稱為臨界區(qū)。

? ? ? ?進入?yún)^(qū): ?在臨界區(qū)前面增加一段用于進行檢查是否正被其他進程訪問的的代碼,把這段代碼稱為進入?yún)^(qū),進入?yún)^(qū)設置訪問標志

? ? ? ?退出區(qū): ?在臨界區(qū)后面再加一段用于退出臨界區(qū)的代碼,稱為退出區(qū),退出區(qū)取消訪問標志。? ? ? ? ?剩余區(qū): 進程中除去上述各區(qū)外,其它部分的代碼,稱為剩余區(qū)。

? ? ? ?因此,一個訪問臨界資源的進程描述如下:

? repeat ? ?

? ? ? ?進入?yún)^(qū):檢查是否有進程使用臨界資源,有則阻塞自己,無則設置標志

? ? ? ?臨界區(qū):使用臨界資源

? ? ? ?退出區(qū):使用完臨界資源后釋放臨界資源,設置未使用標志,其他進程使用

? ? ? ?剩余區(qū):其他代碼

? until false;

2.4.2 ?進程的互斥與同步

1.同步與互斥的概念 ? ?

? ? ? ?進程互斥是指多個進程不能同時使用同一個臨界資源CR,即兩個或兩個以上進程必須互斥地使用臨界資源,或不能同時進入臨界區(qū)CS。 ? ? ? ?

? ? ? ?兩個邏輯上完全獨立、毫無關系的進程,由于競爭同一個資源而相互制約,就稱為進程的互斥。如系統(tǒng)只有一臺打印機,兩個進程都要使用。為了保證打印結果的正確和方便使用,只能一個進程用完打印機后,另一個進程才能使用。 ? ? ? ?

? ? ? ?進程同步,是指有協(xié)作關系的進程之間,要不斷地調(diào)整它們之間的相對速度或執(zhí)行過程,以保證臨界資源的合理利用和進程的順利執(zhí)行。實現(xiàn)進程同步的機制稱為進程同步機制。如兩個進程合作使用同一個緩沖區(qū)。設進程A負責往緩沖區(qū)中輸入數(shù)據(jù),進程B負責從同一緩沖區(qū)中輸出數(shù)據(jù)。當進程A將數(shù)據(jù)輸滿緩沖區(qū),則只有當進程B將該數(shù)據(jù)讀出后,進程A才能繼續(xù)使用該緩沖區(qū),否則將造成數(shù)據(jù)丟失。此時,進程A和進程B之間就形成了同步關系。

2.同步機制應遵循的規(guī)則 ? ? ?

? ? ? 為實現(xiàn)進程互斥地進入自己的臨界區(qū),所有同步機制都應遵循下列準則:

? ? (1)空閑讓進:并發(fā)進程中某個進程不在臨界區(qū)時,不阻止其他進程進入臨界區(qū)。

? ? (2)忙則等待:并發(fā)進程中的若干個進程申請進入臨界區(qū)時,只允許一個進程進入。?當已有進程進入臨界區(qū)時,其他申請進入臨界區(qū)的進程必須等待,以保證對臨界資源的互斥訪問。? ?

? ? (3)有限等待:保證等待有限時間,不能無限期等待,陷入“等死”狀態(tài) 。

? ? (4)讓權等待:當進程不能進入自己的臨界區(qū)時,應立即釋放處理機,以免進程陷入“忙等”狀態(tài)。

第二章 進程管理

2.4. 3 實現(xiàn)進程同步的軟件方法

? ? ? ?1981年,G.L.Peterson提出了一個簡單的算法來解決進程互斥進入臨界區(qū)的問題。這種方法描述為:為每個進程設置一個標志,當標志值為true時,表示此進程要求進入臨界區(qū),另外,再設置一個指示器turn,即當turn==i時,表示進程pi可以進入臨界區(qū)。 以下是Peterson算法的描述。

第二章 進程管理

2.4.4 實現(xiàn)進程同步的硬件機制

? ? ? ?許多計算機已經(jīng)提供了一些特殊的硬件指令,允許對一個字中的內(nèi)容進行檢測和修改正,或者是對兩個字的內(nèi)容進行交換等??衫眠@些特殊的指令來解決臨界區(qū)問題。下面是實現(xiàn)對臨界區(qū)管理的硬件方法。

1.關中斷 ? ? ? ?

? ? ? ?實現(xiàn)互斥最簡單的方法是在進程進入臨界區(qū)時關中斷,進程退出臨界區(qū)時開中斷。中斷被關后,時鐘中斷也被屏蔽,進程上下文切換都是由中斷事件引起的,這樣進程的執(zhí)行就不會被打斷,因此采用關中斷、開中斷的方法就可確保并發(fā)進程互斥地進入臨界區(qū)。

2.測試并設置指令

? ? ? ?使用硬件所提供的“測試并設置”機器指令TS(Test and Set),實現(xiàn)進程之間的互斥。該指令是一條原語,需獨立執(zhí)行,可把這條指令看作函數(shù),它的返回值和參數(shù)都是布爾類型。當TS(&x)測到x值為true時,置x=false,且根據(jù)所測試到的x值形成條件碼。

3.對換指令

? ? ? 對換指令swap用于交換兩個字的內(nèi)容。

2.5 ?信號量機制

2.5.1 ?信號量的概念 ? ? ? ?

? ? ? ?信號量(Semaphore),也叫做信號燈,它是在信號量同步機制中用于實現(xiàn)進程的同步和互斥的有效數(shù)據(jù)結構。 ? ? ? ?

? ? ? ?可以為每類資源設置一個信號量。 ? ? ? ?

? ? ? ?它有多種類型的數(shù)據(jù)結構,即:整型信號量、記錄型信號量、AND型信號量及信號量集等。 ? ? ? ?申請和釋放臨界資源的兩個原語操作: ? ? ? ?

? ? ? ?P操作--wait操作; ? ? ? ?進入?yún)^(qū) ? ? ? ?

? ? ? ?V操作--signal操作; ? ? 退出區(qū) ? ?

? ? ? ?P、V操作的操作對象是信號量

第二章 進程管理

1.整型信號量

? ? ? ? 整型信號量的數(shù)值表示當前系統(tǒng)中可用的該類臨界資源的數(shù)量。 ? ? ? ? ?

? ? ? ? 如設置整型信號量s,則s的值意義為:

? ? ? ? s > 0,則s的值表示系統(tǒng)中空閑的該類臨界資源的個數(shù);

? ? ? ? s = 0,則表示系統(tǒng)中該類臨界資源剛好全部被占用,而且沒有進程在等待該臨界資源;

? ? ? ? s < 0,則s的絕對值表示系統(tǒng)中的進程等待該類臨界資源的個數(shù);

第二章 進程管理

2.記錄型信號量

?記錄型信號量的數(shù)據(jù)結構由兩部分構成。定義記錄型信號量類型,有如下描述: ? ? ?

struct semaphore
{
    int s;
    struct PCB  *queue;
}semaphore;

? ? ? ?定義記錄型信號量S,則:s的值value表示系統(tǒng)中可用的該類臨界資源的數(shù)量; ?queue為進程鏈表指針指向等待該類資源的PCB隊列?

2.5.2 信號量的申請與釋放

1、p操作----釋放資源

第二章 進程管理

2、v操作?----申請資源

第二章 進程管理

2.5.3 ?利用信號量實現(xiàn)進程的同步和互斥

可以用wait(s)和signal(s)操作處理飛機買票問題。 對臨界資源n設一互斥信號量S,將原進程T1及T2做如下修改:

第二章 進程管理

2.6 ?進程同步問題舉例

? ? ? ?利用P、V操作可以實現(xiàn)進程之間的同步

? ? ? ?關于這類問題的應用有兩種類型: 一種是對于臨界資源,在使用之前申請,使用之后釋放,我們給這類資源設一個互斥信號量即可;

? ? ? ?第二種類型是利用信號量控制進程之間運行的順序,這時需要根據(jù)實際情況設置多于一個信號量,對同一個信號量的P、V操作在不同的進程之間進行。

2.6.1 ?兩個簡單的例子

例1

系統(tǒng)中有多個進程,共同使用一臺打印機。寫出這些進程并發(fā)執(zhí)行時,同步使用打印機的程序段。

第二章 進程管理

例2

有一個緩沖區(qū),供多個進程共享。這些進程中有生產(chǎn)者進程和消費者進程。寫出多個進程共同使用同一個緩沖區(qū)時實現(xiàn)進程同步的程序。

第二章 進程管理

第二章 進程管理

第二章 進程管理

1.問題的描述

第二章 進程管理

? ? ? ?有一批生產(chǎn)者進程在生產(chǎn)產(chǎn)品,并將這些產(chǎn)品提供給消費者進程去消費。 ? ? ? ?

? ? ? ?生產(chǎn)者進程與消費者進程能并發(fā)執(zhí)行,在兩者之間設置了一個具有n個緩沖區(qū)的緩沖池. ? ? ? ?

? ? ? ?生產(chǎn)者進程將它所生產(chǎn)的產(chǎn)品放入一個緩沖區(qū)中; ? ? ? ?

? ? ? ?消費者進程可從一個緩沖區(qū)中取走產(chǎn)品去消費。 ? ? ? ?

? ? ? ?規(guī)定消費者進程不能到一個空緩沖區(qū)中去取產(chǎn)品; ? ? ?

? ? ? ?生產(chǎn)者進程不能將產(chǎn)品放入一個已裝滿產(chǎn)品且尚未被取走的緩沖區(qū)中。

第二章 進程管理

第二章 進程管理

第二章 進程管理

第二章 進程管理

第二章 進程管理

?2.在生產(chǎn)者—消費者問題中應注意:

(1)在每個程序中用于實現(xiàn)互斥的P(mutex)和V(mutex)必須成對地出現(xiàn)。

(2)對資源信號量emptyfullPV操作,同樣需要成對地出現(xiàn),但它們分別處于不同的進程中,這樣保證生產(chǎn)者進程和消費者進程的同步及交替執(zhí)行。

(3)在每個進程中,兩個P操作順序不能顛倒,而signal操作的次序是無關緊要的 。

? ? ? ??

? ? ? ?

?????? ?文章來源地址http://www.zghlxwxcb.cn/news/detail-439621.html

到了這里,關于第二章 進程管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于linux下的高并發(fā)服務器開發(fā)(第二章)- 2.7 進程退出、孤兒進程、僵尸進程

    基于linux下的高并發(fā)服務器開發(fā)(第二章)- 2.7 進程退出、孤兒進程、僵尸進程

    ? 父進程運行結束,但子進程還在運行(未運行結束),這樣的子進程就稱為孤兒進程 (Orphan Process)。 ? 每當出現(xiàn)一個孤兒進程的時候,內(nèi)核就把孤兒進程的父進程設置為 init ,而 init 進程會循環(huán)地 wait() 它的已經(jīng)退出的子進程。這樣,當一個孤兒進程凄涼地結束 了其生

    2024年02月16日
    瀏覽(24)
  • 【操作系統(tǒng)OS】學習筆記:第二章 進程與線程 (上)【哈工大李治軍老師】

    【操作系統(tǒng)OS】學習筆記:第二章 進程與線程 (上)【哈工大李治軍老師】

    基于本人觀看學習 哈工大李治軍老師主講的操作系統(tǒng)課程 所做的筆記,僅進行交流分享 特此鳴謝李治軍老師,操作系統(tǒng)的神作! 如果本篇筆記幫助到了你,還請點贊 關注 支持一下 ???)!! 主頁專欄有更多,如有疑問歡迎大家指正討論,共同進步! 給大家跳段街舞感謝支持

    2024年02月02日
    瀏覽(91)
  • Linux第二章:文件權限管理

    常規(guī)文件 純文本文件(ASCII) 二進制文件(binary) 數(shù)據(jù)文件(data) 目錄 鏈接文件 區(qū)塊設備文件:[b] 字符設備文件:[c] 數(shù)據(jù)接口文件:[s] 數(shù)據(jù)輸送文件FIFO:[p] Linux文件沒有所謂的擴展名,與文件自身的屬性有關,與文件名無關。 具有可執(zhí)行權限和文件可以執(zhí)行 是兩碼事。

    2024年02月08日
    瀏覽(22)
  • SQL Server基礎 第二章 表結構管理

    SQL Server基礎 第二章 表結構管理

    目錄 一、數(shù)據(jù)類型 1,字符類數(shù)據(jù)類型 2,數(shù)值型數(shù)據(jù)類型 3,日期/時間型數(shù)據(jù)類型 二、主鍵(Primary key) 三、默認值 四、唯一鍵(Unique) 五、自增標識 六、約束 七、外鍵 數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,是數(shù)據(jù)所表示信息的類型。 SQLServer提供了比較多的數(shù)據(jù)類型供用戶使用

    2023年04月22日
    瀏覽(24)
  • 第二章 系統(tǒng)集成及服務管理知識點1

    這第二章主要講了下集成及服務管理的內(nèi)容、制度、意義、管理辦法、以及一些管理方面的服務概念。跟著小老弟把內(nèi)容給歸納歸納,后面來復習的時候也能夠省不少時間! 1信息系統(tǒng)集成及服務管理的內(nèi)容 在信息化建設過程中,系統(tǒng)集成及服務存在了諸多問題,主要問題:

    2024年02月16日
    瀏覽(19)
  • 黑馬程序員rocketmq第二章

    maven工程springboot-rocketmq-producer application.properties 測試類 springboot-rocketmq-consumer application.properties zookeeper集群搭建 1.在/usr/soft/zookeeper-cluster下存放zookeeper-3.4.6.tar.gz 2.解壓:tar -zvxf zookeeper-3.4.6.tar.gz 3./usr/soft/zookeeper-cluster/zookeeper-3.4.6/conf 下重命名 zoo_sample.cfg為zoo.cfg mv zoo_sample.cf

    2023年04月26日
    瀏覽(137)
  • 《python語言程序設計基礎》(第二版)第二章課后習題參考答案

    第二章 Python程序?qū)嵗馕?2.1 溫度轉(zhuǎn)換 2.2 匯率兌換 優(yōu)化: 優(yōu)化的主要改動: 將貨幣符號和金額分離出來,使代碼更加清晰易讀。 將條件判斷改為根據(jù)貨幣符號進行判斷,避免重復判斷。 2.3 繪制彩色蟒蛇 2.4 等邊三角形的繪制 代碼一: 代碼二: 2.5 疊加等邊三角形的繪制

    2024年03月19日
    瀏覽(36)
  • 【軟考高級信息系統(tǒng)項目管理師--第二章:信息技術發(fā)展】

    【軟考高級信息系統(tǒng)項目管理師--第二章:信息技術發(fā)展】

    ?? 作者 :“碼上有前” ?? 文章簡介 :軟考高級–信息系統(tǒng)項目管理師 ?? 歡迎小伙伴們 點贊??、收藏?、留言?? 網(wǎng)絡標準協(xié)議 OSI七層 物理層(RS232、V.35、RJ-45、FDDI) 數(shù)據(jù)鏈路層(IEEE802.3/.2、HDLC、PPP、ATM) 網(wǎng)絡層(IP、ICMP、IGMP、IPX、ARP【IP】】) 傳輸層(TCP、UDP、SPX) 會話層

    2024年02月21日
    瀏覽(91)
  • 第二章:項目環(huán)境搭建【基于Servlet+JSP的圖書管理系統(tǒng)】

    第二章:項目環(huán)境搭建【基于Servlet+JSP的圖書管理系統(tǒng)】

    02-圖書管理系統(tǒng)-項目環(huán)境搭建 ??本項目涉及到的工具都有在云盤提供,自行下載即可 JDK8 IDEA2021 Tomcat8.5 MySQL的客戶端工具SQLYog … ??通過IDEA創(chuàng)建maven項目。勾選腳手架工具。選擇 maven-archetype-webapp 設置項目的基礎信息 3.1 JDK配置 ??JDK使用的是JDK8。我們也需要配置下:

    2024年02月11日
    瀏覽(25)
  • Python開發(fā) Git 第二章: 提交更改 撤銷更改 分支管理 遠程倉庫操作

    在第一章中,我們成功地初始化了Git倉庫,并進行了一些基本的配置?,F(xiàn)在,讓我們深入學習Git的基本操作,包括提交更改、撤銷更改、分支管理以及遠程倉庫的操作。 2.1.1 添加文件到暫存區(qū) 在Git中,提交更改通常需要將文件先添加到暫存區(qū)。假設我們有一個新的文件 exa

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包