Linux操作系統(tǒng)原理與應(yīng)用第四章課件_第1頁
Linux操作系統(tǒng)原理與應(yīng)用第四章課件_第2頁
Linux操作系統(tǒng)原理與應(yīng)用第四章課件_第3頁
Linux操作系統(tǒng)原理與應(yīng)用第四章課件_第4頁
Linux操作系統(tǒng)原理與應(yīng)用第四章課件_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第四章 進程管理 4.1進程概述 為了提高計算機系統(tǒng)的效率,增強計算機系統(tǒng)內(nèi)各種硬件的并行操作能力,操作系統(tǒng)要求程序結(jié)構(gòu)必須適應(yīng)并發(fā)處理的需要,為此引入了進程的概念。進程是操作系統(tǒng)的核心,所有基于多道程序設(shè)計的操作系統(tǒng)都建立在進程的概念之上。 4.1.1進程的概念 所謂進程是由正文段(Text)、用戶數(shù)據(jù)段(User Segment)以及系統(tǒng)數(shù)據(jù)段(System Segment)共同組成的一個執(zhí)行環(huán)境。4.1.2程序和進程 進程與程序的聯(lián)系和區(qū)別如下:動態(tài)性和靜態(tài)型。動態(tài)性是進程最基本的特性,可表現(xiàn)為由創(chuàng)建而產(chǎn)生,由調(diào)度而執(zhí)行,因得不到資源而暫停執(zhí)行以及由撤銷而消亡,因而進程有一定的生命期;而

2、程序只是一組有序指令的集合,是靜態(tài)實體。結(jié)構(gòu)上每個進程實體都由程序段和相應(yīng)的數(shù)據(jù)段組成,這一特征與程序含義相近。4.1.2程序和進程一個進程可以涉及到一個或幾個程序的執(zhí)行;反之一個程序可以對應(yīng)多個進程,即同一程序段可在不同數(shù)據(jù)集合上運行,可構(gòu)成不同的進程。并發(fā)性。并發(fā)性是進程的重要特征,同時也是操作系統(tǒng)的重要特征。引入進程的目的正是為了使其程序能和其它建立了進程的程序并發(fā)執(zhí)行,而程序本身是不能并發(fā)執(zhí)行的。進程具有創(chuàng)建其它進程的功能。操作系統(tǒng)中的每一個程序都是在一個主進程中運行的。4.1.3進程的結(jié)構(gòu) 進程是一個動態(tài)實體,它具有生命周期。因此,對操作系統(tǒng)中進程的描述模仿人類的活動。4.1.4進程

3、實例 進程是程序在計算機上的一次執(zhí)行活動,當(dāng)你運行一個程序,你就啟動了一個進程。顯然,程序是死的(靜態(tài)的),進程是活的(動態(tài)的)。進程可以分為系統(tǒng)進程和用戶進程,凡是用于完成操作系統(tǒng)的各種功能的進程就是系統(tǒng)進程,它們就是處于運行狀態(tài)下的操作系統(tǒng)本身;用戶進程就是所有由你啟動的進程。進程是操作系統(tǒng)進行資源分配的單位,進程實例就是一個運行的程序。 4.1.5Linux系統(tǒng)中的進程 在Linux中,每個進程在創(chuàng)建時都會被分配一個數(shù)據(jù)結(jié)構(gòu),稱為進程控制塊(Process Control Block,PCB)。在進程的整個生命周期中,系統(tǒng)(也就是內(nèi)核)總是通過PCB感知進程的存在。除了PCB以外,每個進

4、程都有獨立的內(nèi)核堆棧,一個進程描述符結(jié)構(gòu),這些數(shù)據(jù)都作為進程的控制信息儲存在內(nèi)核空間中,而進程的用戶空間主要存儲代碼和數(shù)據(jù)。進程的另外一個名字是任務(wù),Linux內(nèi)核通常把進程也叫任務(wù)。另外,在Linux內(nèi)核中,對進程和線程也不做明顯的區(qū)別, 4.2進程控制塊 操作系統(tǒng)為了對進程進行管理,就必須對每個進程在其生命周期內(nèi)涉及的所有事情進行全名的描述。這些信息在內(nèi)核中可以用一個結(jié)構(gòu)體來描述,Linux中把對進程的描述結(jié)構(gòu)叫做task_struct,傳統(tǒng)上這樣的數(shù)據(jù)結(jié)構(gòu)即為進程控制塊。 4.2.1進程狀態(tài) 最基本的進程狀態(tài)有以下三種:運行態(tài):進程占有CPU,并在CPU上運行。就緒態(tài):進程已經(jīng)具備運行條

5、件,但由于CPU忙而暫時不能運行。阻塞態(tài):進程因等待某種事件的發(fā)生而暫時不能運行(即使CPU空閑,進程也不可運行)4.2.1進程狀態(tài)4.2.2進程標(biāo)識符 不管對內(nèi)核還是普通用戶來說,如何用一種簡單的方式識別不同的進程呢?這就引入了進程標(biāo)識符(PID)。每個進程都有一個唯一的標(biāo)識符,內(nèi)核通過這個標(biāo)識符來識別不同進程。同時,進程標(biāo)識符也是內(nèi)核提供給用戶程序的接口,用戶程序通過PID來對進程發(fā)號施令。 4.2.3進程之間的關(guān)系 Linux進程關(guān)系主要有三種:父進程和子進程、進程組、進程會話。 4.2.4進程控制塊的存放 當(dāng)一個進程從用戶態(tài)進入內(nèi)核態(tài),CPU自動設(shè)置該進程的內(nèi)核棧,這個棧位于內(nèi)核數(shù)據(jù)段

6、上。同時,為節(jié)省空間,Linux把內(nèi)核棧和一個緊挨近PCB的小數(shù)據(jù)結(jié)構(gòu)thread-info放在一起。在Intel系統(tǒng)中,棧起始于末端,并朝這個內(nèi)存區(qū)開始的方向“增長”。剛切換過來,內(nèi)核棧是空的,堆棧寄存器ESP直接指向此內(nèi)存區(qū)的頂端,通過找到thread-info來找到當(dāng)前運行的task-struct(PCB)。 4.3進程的組織方式 在Linux中,每個進程都有自己的taskstruct結(jié)構(gòu)。系統(tǒng)擁有的進程數(shù)取決于物理內(nèi)存的大小,因此進程數(shù)可能達到成千上萬個。為了對系統(tǒng)中的很多進程及處于不同狀態(tài)的進程進行管理,Linux采用了以下幾種組織方式來管理進程。 4.3.1散列表 散列表(Hash

7、table,也叫哈希表),是根據(jù)關(guān)鍵碼值(Keyvalue)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu)。也就是說,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表。 4.3.2NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換模式) 使用NAT模式,就是讓虛擬系統(tǒng)借助NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)功能,通過宿主機器所在的網(wǎng)絡(luò)來訪問公網(wǎng)。采用NAT模式最大的優(yōu)勢是虛擬系統(tǒng)接入互聯(lián)網(wǎng)非常簡單,你不需要進行任何其他的配置,只需要宿主機器能訪問互聯(lián)網(wǎng)即可。如果你想利用VMware安裝一個新的虛擬系統(tǒng),在虛擬系統(tǒng)中不用進行任何手工配置就能直接訪問互聯(lián)網(wǎng),建議你采用NAT模式。 4.3.2雙向循

8、環(huán)鏈表 哈希表的主要作用是根據(jù)進程的pid可以快速地找到對應(yīng)的進程,但它沒有反映進程創(chuàng)建的順序,也無法反映進程之間的親屬關(guān)系,因此引入雙向循環(huán)鏈表。每個進程taskstruct結(jié)構(gòu)中的prevtask和nexttask成員用來實現(xiàn)這種鏈表,鏈表的頭和尾都是inittask,也就是所謂的空進程,它是所有進程的祖先。 4.3.3可運行隊列 當(dāng)內(nèi)核要尋找一個新的進程在CPU上運行時,一般只考慮那些處于可運行狀態(tài)的進程,因為查找整個進程鏈表效率是很低的,所以引入了可運行狀態(tài)進程的雙向循環(huán)鏈表,也叫運行隊列。可運行隊列容納了系統(tǒng)中所有可以運行的進程,它是一個雙向循環(huán)隊列。4.3.4等待隊列 可運行隊列鏈

9、表將所有狀態(tài)為TASK_RUNNING的進程組織在一起。將所有狀態(tài)為TASK_INTERRUPTIBLE和TASKUN_INTERRUPTIBLE的進程組織在一起而形成的進程鏈表稱為等待隊列。 4.4進程的互斥與同步 操作系統(tǒng)是管理計算機的軟件和硬件資源,合理組織計算機的工作流程以及方便用戶使用的程序的集合?,F(xiàn)代操作系統(tǒng)的三個主要特征是并發(fā)性、資源共享和異步性。 4.4.1互斥的定義 進程互斥是進程之間發(fā)生的一種間接性作用,通常的情況是兩個或兩個以上的進程需要同時訪問某個共享變量。在多道程序環(huán)境下,存在著臨界資源,兩個或兩個以上的進程,不能同時進入關(guān)于同一組共享變量的臨界區(qū)域,否則就會導(dǎo)致數(shù)據(jù)

10、的不一致,產(chǎn)生與時間有關(guān)的錯誤,這種現(xiàn)象被稱作進程互斥。4.4.1互斥的定義4.4.2同步的定義 進程同步是在多道程序的環(huán)境下,存在著不同的制約關(guān)系,為了協(xié)調(diào)這種互相制約的關(guān)系,實現(xiàn)資源共享和進程協(xié)作,從而避免進程之間的沖突,引入了進程同步。進程同步也是進程之間直接的制約關(guān)系,是為完成某種任務(wù)而建立的兩個或多個線程,這個線程需要在某些位置上協(xié)調(diào)它們的工作次序而等待、傳遞信息所產(chǎn)生的制約關(guān)系。 4.4.2同步的定義4.4.3信號量機制 1965年由荷蘭科學(xué)家Dijkstra提出的信號量機制,是一種卓有成效的進程同步工具。對信號量的充分理解是學(xué)習(xí)P、V操作的基本前提,信號量是一個記錄型的數(shù)據(jù)結(jié)構(gòu),

11、它有兩個數(shù)據(jù)項。 Struck semaphore int value; pointer_PCB queue; ;4.4.4用P、V操作實現(xiàn)進程的互斥 在各進程的臨界區(qū)的兩端分別加入對于同一個初值為1的信號量的P、V操作,當(dāng)一個進程進入臨界區(qū)后,其它進程不能夠再進入臨界區(qū),直到先前進入臨界區(qū)的進程退出臨界區(qū)后,通過V操作喚醒其它某個等待進程后,才會有進程再次訪問臨界資源,從而實現(xiàn)多個進程對于臨界資源的互斥訪問。 4.4.5用P、V操作實現(xiàn)進程的同步 當(dāng)一個進程執(zhí)行以后,確定下一個將要執(zhí)行的進程,并用V操作使該進程可以執(zhí)行。在實現(xiàn)時,在各進程中完成特定功能的程序段兩端加上P操作和V操作,它們分別

12、使用不同的信號量,用以在各進程間傳遞信息。通常,能夠最先執(zhí)行的進程中,P操作中所使用的信號量的初值大于1,而其它進程中,第一個P操作所對應(yīng)的信號量的初值為零。這樣,在執(zhí)行時,第一個進程先執(zhí)行,執(zhí)行完V操作后,使另一個進程可以執(zhí)行,依次傳遞下去,就可以實現(xiàn)各個進程按照一定的順序執(zhí)行了。 4.6死鎖 死鎖是指兩個或兩個以上的進程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進下去,此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖。 4.5進程調(diào)度 無論是在批處理系統(tǒng)還是分時系統(tǒng)中,用戶進程數(shù)一般都多于處理機數(shù)、這將導(dǎo)致它們互相爭奪處理機。另外,系統(tǒng)進程也同樣需

13、要使用處理機。這就要求進程調(diào)度程序按一定的策略,動態(tài)地把處理機分配給處于就緒隊列中的某一個進程,以使之執(zhí)行。 4.5.1進程調(diào)度的基本原理 在設(shè)計進程調(diào)度程序時應(yīng)該考慮以下三個方面:調(diào)度時機:什么時候,什么情況下進行程序調(diào)度。調(diào)度策略:使用什么樣的策略來選擇下一個進入運行的進程。調(diào)度方式:是搶占式還是非搶占式,當(dāng)由調(diào)度程序來決定什么時候停止一個進程的執(zhí)行,以便讓其它進程能夠得到執(zhí)行機會時,這種強制掛起進程的動作成為搶占式。 4.5.2Linux進程調(diào)度 Linux內(nèi)核有如下三種調(diào)度方法:SCHED_OTHER 分時調(diào)度策略,SCHED_FIFO實時調(diào)度策略,先到先服務(wù)SCHED_RR實時調(diào)度策

14、略,時間片輪轉(zhuǎn)4.5.3調(diào)度策略 在每個進程的task_struct結(jié)構(gòu)中有以下四項:PolicyPriorityCounterrt_priority這四項就是調(diào)度程序選擇進程的依據(jù)。其中,policy是進程的調(diào)度策略,用來區(qū)分實時和普通兩種進程;priority是進程(實時和普通)的優(yōu)先級;counter是進程剩余的時間片,它的大小完全由priority決定;rt_priority是實時優(yōu)先級,這是實時進程所特有的,用于實時進程間的選擇。4.5.4調(diào)度函數(shù) 函數(shù)schedule()實現(xiàn)調(diào)度程序,它的任務(wù)是從運行隊列的鏈表中找到一個進程,并隨后將CPU分配給這個進程。 直接調(diào)用延遲調(diào)用4.6進

15、程間通信 進程間通信就是在不同進程之間傳播或交換信息,在Linux這種多用戶多任務(wù)的環(huán)境中,為了完成一個任務(wù)有時候需要多個進程協(xié)同工作,這必然牽扯到進程間的相互通信。 4.6.1進程通信的方式 管道(Pipe) 命名管道(named pipe) 信號(Signal) 消息(Message)隊列 共享內(nèi)存 內(nèi)存映射(mapped memory) 信號量(semaphore) 套接口(Socket) 4.6.2Linux信號通信原理 在Linux系統(tǒng)中,根據(jù)具體的的軟硬件情況,內(nèi)核程序會發(fā)出不同的信號來通知進程某個事件的發(fā)生。對于信號的發(fā)送,大都由內(nèi)核程序在遇到以下幾種特定情況的時候向進程發(fā)送的,

16、例如:系統(tǒng)測出一個可能出現(xiàn)的硬件故障,如電源故障程序出現(xiàn)異常行為,如企圖使用該進程之外的存貯器該進程的子進程已經(jīng)終止用戶從終端向目標(biāo)程序發(fā)出中斷(BREAK)鍵、繼續(xù)(CTRL-Q)鍵等4.6.2Linux信號通信原理當(dāng)一個信號正在被處理時,所有同樣的信號都將暫時擱置,直到這個信號處理完成后,才加以理會。當(dāng)一個進程收到信號后,用下列方式之一做出反應(yīng) 忽略該信號 捕獲該信號(即內(nèi)核在繼續(xù)執(zhí)行該進程之前先運行一個由用戶定義的函數(shù))讓內(nèi)核執(zhí)行與該信號相關(guān)的默認(rèn)動作4.6.3Linux管道通信原理 管道只能用于有親系關(guān)系的進程間通信,即只能在父進程與子進程或兄弟進程間通信,而有名管道可以用于任何進程間

17、通信。管道是半雙工的,即在某一時刻只能有一個進程向管道里讀或?qū)憽?4.7線程 線程(Thread)是一個動態(tài)對象,是處理機調(diào)度的基本單位,表示一個進程中的一個控制點,執(zhí)行一些指令。一個進程內(nèi)的個線程均可訪問整個進程的所有資源,因此線程間通信比較簡單。 4.7.1線程的概念 線程(thread),有時被稱為輕量級進程,是程序執(zhí)行流的最小單元。一個標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,它可與同屬一個進程的其它線程共享進程所擁有的全部資源。 4.7.1線程的概念4.7.2線程與進程的比

18、較 線程和進程在很多方面是相似的,主要表現(xiàn)在如下幾方面:都具有ID,一組寄存器,狀態(tài),有限級以及所要遵循的調(diào)度策略。每個進程都有一個進程控制塊,線程也擁有一個線程控制塊,這個控制塊包含線程的一些屬性信息,操作系統(tǒng)適應(yīng)這些屬性信息來描述線程。線程和子進程共享父進程中的資源。線程和子進程獨立于它們的父進程,競爭使用處理器資源。線程和子進程的創(chuàng)建者可以在線程和子進程上實行某些控制,比如創(chuàng)建者可以取消、掛起、繼續(xù)和修改線程和子進程的優(yōu)先級。線程和子進程可以改變其屬性并創(chuàng)建新的資源。4.7.2線程與進程的比較進程和線程的區(qū)別在于:一個程序至少有一個進程,一個進程至少有一個線程.線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論