操作系統(tǒng)原理_方敏_進(jìn)程管理.ppt_第1頁
操作系統(tǒng)原理_方敏_進(jìn)程管理.ppt_第2頁
操作系統(tǒng)原理_方敏_進(jìn)程管理.ppt_第3頁
操作系統(tǒng)原理_方敏_進(jìn)程管理.ppt_第4頁
操作系統(tǒng)原理_方敏_進(jìn)程管理.ppt_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章 進(jìn)程管理,操作系統(tǒng)課程組,第2頁,內(nèi)容回顧,第3頁,一、進(jìn)程的定義,曾經(jīng)的定義 進(jìn)程是程序的一次執(zhí)行; 進(jìn)程是可以和別的計算并發(fā)執(zhí)行的計算; 進(jìn)程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位。 教材中的定義 進(jìn)程是程序的一次執(zhí)行,該進(jìn)程可與其它進(jìn)程并發(fā)執(zhí)行;它是一個動態(tài)的實體,在傳統(tǒng)的操作系統(tǒng)設(shè)計中,進(jìn)程既是資源的基本分配單元,也是基本的執(zhí)行單元。,第4頁,二、為什么要引入進(jìn)程的概念?,順序執(zhí)行程序 指的是在有多個程序需要執(zhí)行的情況下,處理器嚴(yán)格按照某一順序按序執(zhí)行,每次只執(zhí)行一個程序。其實質(zhì)是單道程序系統(tǒng)。 特點 順序性 資源獨占性 可再現(xiàn)性 不足 效率

2、低下,第5頁,二、為什么要引入進(jìn)程的概念?,多道程序設(shè)計 同一時刻內(nèi)存中存放了多個作業(yè),處理器交替運行不同的作業(yè)。提高了系統(tǒng)的效率,尤其是資源利用率。 特點 多道 宏觀上并行 微觀上串行 問題 系統(tǒng)管理復(fù)雜化,第6頁,二、為什么要引入進(jìn)程的概念?,程序并發(fā)執(zhí)行帶來的新特征 資源共享性; 獨立性和制約性; 程序執(zhí)行的間斷性; 結(jié)果不可再現(xiàn)。,第7頁,二、為什么要引入進(jìn)程的概念?,與時間有關(guān)的錯誤, a = n /n表示剩余的票數(shù) if (a=1) a = a-1; /售出一張票 n = a; , a = n /n表示剩余的票數(shù) if (a=1) a = a-1; /售出一張票 n = a; ,因

3、為這種錯誤和相對執(zhí)行速度有關(guān),因此稱為與時間有關(guān)的錯誤。,服務(wù)器,第8頁,二、為什么要引入進(jìn)程的概念?,結(jié)論: 程序的并發(fā)執(zhí)行使得程序的執(zhí)行情況不可預(yù)見,其結(jié)果不再唯一,成為一個動態(tài)的過程。而程序是一個靜態(tài)的概念,不再能切實反映程序執(zhí)行的各種特征(獨立性、并發(fā)性、動態(tài)性)。,第9頁,三、進(jìn)程的定義與控制,進(jìn)程與程序的區(qū)別和聯(lián)系,(1)程序是靜態(tài)的,進(jìn)程是動態(tài)的。程序是有序代碼的集合;進(jìn)程是程序的一次執(zhí)行。 (2)進(jìn)程是暫時的,程序的永久的。進(jìn)程是一個變化的過程,有生命周期,暫時存在,程序沒有生命周期,可長久保存。 (3)進(jìn)程還是操作系統(tǒng)資源分配和保護(hù)的基本單位,程序沒有此功能。 (4)進(jìn)程與程

4、序的對應(yīng)關(guān)系。通過多次執(zhí)行,一個程序可對應(yīng)多個進(jìn)程;通過調(diào)用關(guān)系,一個進(jìn)程可包括多個程序。 (5)進(jìn)程與程序的結(jié)構(gòu)不同。,第10頁,三、進(jìn)程的定義與控制,進(jìn)程的組成,第11頁,三、進(jìn)程的定義與控制,進(jìn)程控制塊(PCB) 定義:是操作系統(tǒng)用來記錄進(jìn)程詳細(xì)狀態(tài)和相關(guān)信息的基本數(shù)據(jù)結(jié)構(gòu),它和進(jìn)程是一一對應(yīng)的,是進(jìn)程存在的唯一標(biāo)識。 作用:提供進(jìn)程的各種信息,以便操作系統(tǒng)控制和管理。,第12頁,三、進(jìn)程的定義與控制,PCB結(jié)構(gòu),第13頁,三、進(jìn)程的定義與控制,操作系統(tǒng)對PCB的管理:集中統(tǒng)一管理,內(nèi)存,PCB表,第14頁,三、進(jìn)程的定義與控制,進(jìn)程的創(chuàng)建 操作系統(tǒng)為進(jìn)程創(chuàng)建進(jìn)程控制塊和分配地址空間的過

5、程就是進(jìn)程創(chuàng)建的過程。,創(chuàng)建進(jìn)程標(biāo)識,分配內(nèi)存和其它資源,初始化進(jìn)程控制塊,將創(chuàng)建的進(jìn)程置于就緒隊列,第15頁,三、進(jìn)程的定義與控制,進(jìn)程的執(zhí)行,運行 Running,進(jìn)程占有處理機,處理機正在執(zhí)行該進(jìn)程的程序。,進(jìn)程已獲得除處理機外的所需資源,等待分配處理機執(zhí)行。,也叫等待、掛起、睡眠態(tài),此時進(jìn)程因等待某種條件(如I/O操作或進(jìn)程同步)無法運行。引起進(jìn)程阻塞的原因很多,系統(tǒng)將根據(jù)不同的阻塞原因?qū)⑦M(jìn)程插入某個相應(yīng)的阻塞隊列中。,第16頁,三、進(jìn)程的定義與控制,進(jìn)程狀態(tài)轉(zhuǎn)換及原因,第17頁,三、進(jìn)程的定義與控制,運行,就緒,阻塞,被調(diào)度,時間片用完,中斷,資源釋放或事件完成,等待資源 和事件,五

6、種進(jìn)程狀態(tài)轉(zhuǎn)換,第18頁,三、進(jìn)程的定義與控制,七種進(jìn)程狀態(tài)轉(zhuǎn)換,第19頁,三、進(jìn)程的定義與控制,進(jìn)程的組織管理隊列,第20頁,三、進(jìn)程的定義與控制,進(jìn)程控制 進(jìn)程控制的主要任務(wù)是:創(chuàng)建和撤銷進(jìn)程以及進(jìn)行進(jìn)程間的狀態(tài)轉(zhuǎn)換。這包括: 創(chuàng)建一個進(jìn)程 撤銷一個進(jìn)程 改變進(jìn)程狀態(tài) 實現(xiàn)進(jìn)程間的通信 這些由操作系統(tǒng)內(nèi)核通過執(zhí)行各種原語完成。,第21頁,三、進(jìn)程的定義與控制,原語(primitive) 由若干條機器指令構(gòu)成的可完成特定功能的程序段,它是一個 “原子操作(atomic operation)”過程,作為一個整體而不可分割要么全都完成,要么全都不做(類似數(shù)據(jù)庫中的“事務(wù)”)。原語主要是通過屏蔽各

7、種中斷和固化技術(shù)保證其原子性的。 分類 進(jìn)程控制原語 進(jìn)程通信原語 進(jìn)程管理原語 其他方面的原語,1、進(jìn)程創(chuàng)建原語 2、進(jìn)程撤銷原語 3、進(jìn)程阻塞原語 4、進(jìn)程喚醒原語 5、進(jìn)程掛起原語 6、進(jìn)程激活原語,第22頁,三、進(jìn)程的定義與控制,進(jìn)程的特征 并發(fā)性:執(zhí)行時間可以重疊; 動態(tài)性:有生命周期,存在不同的狀態(tài); 獨立性:獨立執(zhí)行,是資源分配和調(diào)度的獨立單位; 制約性:雖然獨立執(zhí)行,但可能存在相互制約關(guān)系; 異步性:各進(jìn)程執(zhí)行時間相對獨立,不確定; 結(jié)構(gòu)性:擁有固定結(jié)構(gòu)。,第23頁,四、進(jìn)程調(diào)度,進(jìn)程調(diào)度:就是按照一定的算法,從就緒隊列中選擇某個進(jìn)程占用CPU的方法對CPU資源進(jìn)行合理的分配使

8、用,以提高處理機利用率,并使各進(jìn)程公平得到處理機資源。,第24頁,四、進(jìn)程調(diào)度,確定進(jìn)程調(diào)度算法原則 進(jìn)程調(diào)度的任務(wù)是:有效的選擇占用CPU的進(jìn)程,控制協(xié)調(diào)系統(tǒng)安全、高效的工作。,設(shè)計者,第25頁,四、進(jìn)程調(diào)度,進(jìn)程調(diào)度算法 先來先服務(wù)調(diào)度算法 (FCFS, First Come First Served) 特點: 簡單、可靠; 容易理解、實現(xiàn)方便; 非搶占式的。 缺點: 作業(yè)的平均等待時間過長,系統(tǒng)效率低下; 不適合于分時系統(tǒng)。,CPU,第26頁,四、進(jìn)程調(diào)度,基于優(yōu)先數(shù)的調(diào)度算法 (Priority Scheduling Algorithm) 思想:給每一個進(jìn)程設(shè)置一個優(yōu)先數(shù)(優(yōu)先級),系

9、統(tǒng)在調(diào)度時優(yōu)先選擇具有高優(yōu)先級的進(jìn)程占用CPU。具有相同優(yōu)先數(shù)的進(jìn)程按照FCFS算法執(zhí)行。 優(yōu)先數(shù)的確定: 運行前:可根據(jù)外設(shè)的使用情況,運行時間的長短,緊急程度,重要程度等因素確定。 運行中: 1)靜態(tài)優(yōu)先數(shù)法:進(jìn)程創(chuàng)建時就規(guī)定好它的優(yōu)先 數(shù),這個數(shù)值在進(jìn)程運行時不變。 2)動態(tài)優(yōu)先數(shù)法:進(jìn)程的優(yōu)先數(shù)在執(zhí)行過程中可以根據(jù)情況變化而改變(UNIX中采用的方法)。,第27頁,四、進(jìn)程調(diào)度,優(yōu)點: 靈活。通過不同的優(yōu)先級設(shè)置策略,可以強調(diào)不同的性能。 實現(xiàn)也較為方便。 通過優(yōu)先級的動態(tài)調(diào)整,可以平衡系統(tǒng)性能。 問題: 靜態(tài)優(yōu)先數(shù)法無窮阻塞 (Indefinite Blocking) 進(jìn)程占用CPU

10、的方式 非搶占式 (不可剝奪式)FCFS。 搶占式 (可剝奪式)會使進(jìn)程頻繁調(diào)度,在設(shè)計時還應(yīng)考慮進(jìn)程切換的時間開銷。,第28頁,四、進(jìn)程調(diào)度,時間片輪轉(zhuǎn)法 (RR, Round Robin) 特點:專門為分時系統(tǒng)設(shè)計。類似于FCFS算法但是增加了搶占及進(jìn)程間的切換功能。 思想:系統(tǒng)規(guī)定一個時間長度(時間片/時間量)作為允許一個進(jìn)程運行的時間,如果在這段時間該進(jìn)程沒有執(zhí)行完,則必須讓出CPU等待下一次分配的時間片。 原理,第29頁,四、進(jìn)程調(diào)度,時間片的選擇方法 固定時間片:分配給每個進(jìn)程時間片相等; 可變時間片:根據(jù)進(jìn)程的不同要求對時間片的大小實時修改。 優(yōu)點:公平性,及時性。 問題:時間片

11、大小的確定? 過大:退化為FCFS算法,響應(yīng)時間變長。 過?。阂粋€任務(wù)需要多個時間片執(zhí)行,增加了進(jìn)程切換次數(shù),響應(yīng)時間變長。,第30頁,四、進(jìn)程調(diào)度,多級反饋隊列調(diào)度算法 (Multilevel Feedback Queue Scheduling) 思想:引入多個就緒隊列,通過對各隊列的區(qū)別對待,達(dá)到一個綜合的調(diào)度目標(biāo)。 原理:,目前最為通用、靈活的CPU調(diào)度算法,但也是最為復(fù)雜的。,第31頁,五、進(jìn)程間的相互作用,同步,data,定義:進(jìn)程之間這種相互合作、協(xié)同工作的關(guān)系稱為進(jìn)程的同步。 簡單說來就是:多個相關(guān)進(jìn)程在執(zhí)行次序上的協(xié)調(diào)。 制約關(guān)系:直接制約。,第32頁,五、進(jìn)程間的相互作用,互

12、斥,定義:當(dāng)多個進(jìn)程因為爭奪臨界資源而互斥執(zhí)行稱為進(jìn)程的互斥。 制約關(guān)系:間接制約。,第33頁,五、進(jìn)程間的相互作用,臨界資源處理不當(dāng)帶來的問題 執(zhí)行結(jié)果錯誤,第34頁,五、進(jìn)程間的相互作用,死鎖(Dead Lock),在并發(fā)系統(tǒng)中,程序執(zhí)行結(jié)果的正確性不僅取決于自身的正確性,還與其在執(zhí)行過程中能否正確的與其它進(jìn)程實施同步或互斥有關(guān)。必須對臨界資源的訪問進(jìn)行控制。,第35頁,五、進(jìn)程間的相互作用,互斥解決方案 關(guān)中斷法(開關(guān)中斷指令) 也稱為“硬件鎖”,是實現(xiàn)互斥最簡單的方法。 做法:每個進(jìn)程在進(jìn)入臨界區(qū)后先關(guān)中斷,屏蔽其它請求,在離開之前再開中斷。 優(yōu)點:實現(xiàn)簡單。 缺點:中斷被關(guān)掉后,CP

13、U不再響應(yīng)任何外部事件,此時進(jìn)程將會獨占CPU,直至關(guān)閉中斷,如果中斷關(guān)閉時間過長,會造成嚴(yán)重后果,因此把開關(guān)中斷的權(quán)力交給用戶進(jìn)程是很不明智的。,第36頁,五、進(jìn)程間的相互作用,鎖變量法(測試和設(shè)置指令) 做法:設(shè)置一個共享(鎖)變量W,初值為0。當(dāng)一個進(jìn)程想進(jìn)入其臨界區(qū)時,它首先測試這把鎖。如果鎖的值為0,則進(jìn)程將其置為1并進(jìn)入臨界區(qū)。若鎖已經(jīng)為1,則進(jìn)程等待直到其變成0。于是,0就表示臨界區(qū)內(nèi)沒有進(jìn)程,1表示已經(jīng)有某個進(jìn)程進(jìn)入了臨界區(qū)。,優(yōu)點:較為簡單。 缺點:當(dāng)有一個進(jìn)程進(jìn)入臨界區(qū)后,其它試圖進(jìn)入的進(jìn)程必須反復(fù)不斷的測試W以便在W為0時進(jìn)入,此時CPU會一直處于忙狀態(tài)(busy wai

14、ting)。因此這種方法效率也很低。, LOCK(W); /加鎖原語 臨界區(qū); UNLOCK(W); /解鎖原語 ,第37頁,五、進(jìn)程間的相互作用,其它方法 Dekker算法:進(jìn)程被強制輪流進(jìn)入臨界區(qū)(不管是否愿意)。 Peterson算法:設(shè)置標(biāo)識指示是否又要求進(jìn)入臨界區(qū)。 ,第38頁,五、進(jìn)程間的相互作用,原則: 互斥:一次只允許一個進(jìn)程進(jìn)入臨界區(qū)中,即各進(jìn)程互斥訪問臨界資源。 空閑則入,忙則等待:不能讓等待進(jìn)入臨界區(qū)的進(jìn)程“死等”,而誰也不能進(jìn)入,即進(jìn)程不能無限地停留在等待臨界資源的狀態(tài)。 有限等待:每個進(jìn)程占用臨界資源的時間必須是有限的,使用完畢立刻釋放資源。,第39頁,五、進(jìn)程間的相

15、互作用,信號量(Semaphore)和P、V操作 信號量:1965年由荷蘭學(xué)者Dijkstra提出,它是一種特殊的數(shù)據(jù)結(jié)構(gòu)。 功能:表示資源的實體。 特殊之處: 每個信號量與一個隊列關(guān)聯(lián); 其值只能通過初始化和P、V操作來訪問。 信號量的類型: 公用信號量:用于進(jìn)程間的互斥,初值通常為1 私有信號量:用于進(jìn)程間的同步,初值通常為0或n,第40頁,五、進(jìn)程間的相互作用,P、V操作 (均是原語),P操作:荷蘭語“proberen”“檢測”之意。 意味著請求分配一個單位資源。,P(S): /S為信號量 S = S - 1; if (S 0) 調(diào)用進(jìn)程被阻塞, 進(jìn)入S的等待隊列; ,第41頁,五、進(jìn)程

16、間的相互作用,V操作:荷蘭語“verhogen”“增量”之意, 意味著釋放一個單位資源。,V(S): /S為信號量 S = S + 1; if (S = 0) 從S的等待隊列中喚醒一個進(jìn)程 使其進(jìn)入就緒狀態(tài); ,第42頁,五、進(jìn)程間的相互作用,信號量及P、V操作的應(yīng)用 進(jìn)程的互斥,semaphore S; /設(shè)置公有信號量 S = 1; /初值, P(S); print file1; V(S); , P(S); print file2; V(S); ,第43頁,五、進(jìn)程間的相互作用,進(jìn)程的同步生產(chǎn)者與消費者問題,問題描述:,生產(chǎn)者,緩沖區(qū),消費者, cooking; P(S1); put in

17、 dish; V(S2); ,semaphore S1, S2 ; /設(shè)置私有信號量 S1=1; /表示盤子是否空 S2=0; /表示盤子里是否有東西, P(S2); take out from dish; V(S1); eating; ,第44頁,五、進(jìn)程間的相互作用,使用P、V操作時的注意事項 P、V操作總是成對出現(xiàn)的;互斥操作時他們處于同一進(jìn)程中;同步操作時他們處于不同進(jìn)程中。,第45頁,五、進(jìn)程間的相互作用,P、V操作的位置十分重要,放置不當(dāng)會造成嚴(yán)重后果,注意邏輯關(guān)系。,第46頁,五、進(jìn)程間的相互作用,IPC (Inter-Process Communication)經(jīng)典問題 讀者寫

18、者問題 問題描述:一個數(shù)據(jù)對象(文件、記錄)可以為多個并發(fā)進(jìn)程共享。其中有的進(jìn)程只需要讀其中的內(nèi)容,我們稱為“讀者”;有的進(jìn)程負(fù)責(zé)更新其中內(nèi)容(讀/寫),我們稱為“寫者”?!白x者”可以同時讀取共享數(shù)據(jù)對象;“寫者”不能和其它任何進(jìn)程同時訪問數(shù)據(jù)對象。如何實現(xiàn)?,data,第47頁,五、進(jìn)程間的相互作用,分析: “讀寫”:互斥訪問 “寫寫”:互斥訪問 “讀讀”:允許同時訪問 第一類讀者寫者問題:“讀者”優(yōu)先,只要有讀進(jìn)程在讀,寫進(jìn)程被迫等待。,第48頁,五、進(jìn)程間的相互作用,設(shè)置信號量: semaphore mutex, write; /公用信號量,用于互斥 mutex=1; write=1;

19、/設(shè)置初值 int readcount; /計數(shù),用于記錄讀者的數(shù)目,寫者進(jìn)程: P(write); /申請使用data資源 writing; V(write); /釋放data資源,讀者進(jìn)程: P(mutex); /對readcount互斥 readcount +; /讀者數(shù)目加1 if (readcount=1) /第一個讀進(jìn)程 P(write); /申請使用data資源 V(mutex); /釋放readcount reading; P(mutex); /對readcount互斥 readcount -; if (readcount=0) /最后一個讀進(jìn)程 V(write); /釋放da

20、ta資源 V(mutex); /釋放readcount,第49頁,五、進(jìn)程間的相互作用,哲學(xué)家問題 五個哲學(xué)家圍坐在一圓桌旁,桌中央有一盤通心粉,每人面前有一只空盤子,每兩人之間放一只叉子。每個哲學(xué)家的行為是思考,感到饑餓,然后吃通心粉。為了吃通心粉,每個哲學(xué)家必須拿到兩只叉子,并且每個人只能直接從自己的左邊或右邊去取叉子。,第50頁,五、進(jìn)程間的相互作用,使用P、V操作解決 每一只叉子用一個信號量表示,通過對信號量執(zhí)行P操作取得叉子,執(zhí)行V操作放下叉子。,可以確保沒有兩個相鄰的哲學(xué)家同時進(jìn)餐。,第51頁,五、進(jìn)程間的相互作用,帶來的問題: 死鎖每個人拿起而且只拿起了一只叉子; 饑餓動作很協(xié)調(diào)

21、時。 原因:P、V操作本身可以很好的解決同步互斥問題,但是實際中遇到的問題并不都是同步互斥問題,并且P、V操作自身也存在著缺點:操作繁瑣,同步互斥操作被分散在各個進(jìn)程中,使得易讀性、維護(hù)性差,復(fù)雜性高,對于一些復(fù)雜問題實現(xiàn)不方便,存在隱患。 如何解決?提出了一些高級數(shù)據(jù)結(jié)構(gòu)。,第52頁,五、進(jìn)程間的相互作用,管程(monitor) 定義: 1973年,Hoare和Brinch Hanson提出,他們給出的定義“一個管程定義了一個數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進(jìn)程所執(zhí)行(在該數(shù)據(jù)結(jié)構(gòu)上)的一組操作,這組操作能同步進(jìn)程和改變管程中的數(shù)據(jù)”。 簡單說來:管程是由若干公共變量和所有訪問這些變量的過程所組成的一個特

22、殊的模塊或軟件包。 基本思想: 集中管理各進(jìn)程中的臨界區(qū):管程把分散在各個進(jìn)程中互斥地訪問公共變量的那些臨界區(qū)集中起來管理。 特點 管程的局部變量只能由該管程的過程存?。?系統(tǒng)保證進(jìn)程只能互斥地調(diào)用管程中的過程。,第53頁,五、進(jìn)程間的相互作用,第i個哲學(xué)家進(jìn)程: philosophers.pickup(i); eating; philosophers.putdown(i); ,第54頁,五、進(jìn)程間的相互作用,管程的特征 模塊化:一個管程是一個基本程序單位,可以單獨編譯; 抽象數(shù)據(jù)類型:管程是一種特殊的數(shù)據(jù)類型,其中不僅有數(shù)據(jù),而且有對數(shù)據(jù)進(jìn)行操作的代碼,是對數(shù)據(jù)和操作的封裝。 信息掩蔽:管程

23、如何實現(xiàn)其功能相對于外部程序是半透明的。 管程的優(yōu)點 安全性:共享變量外部不可見,只能由管程中的操作存取; 互斥性:管程保任何一個時刻只能有一個進(jìn)程進(jìn)入; 等待機制:設(shè)置有等待隊列及相應(yīng)的操作,對資源進(jìn)行管理。,第55頁,五、進(jìn)程間的相互作用,管程和進(jìn)程的區(qū)別 設(shè)置目的不同:管程是對共享資源進(jìn)行管理,進(jìn)程是資源分配和執(zhí)行的基本單位。 數(shù)據(jù)結(jié)構(gòu)不同:管程定義公用數(shù)據(jù)結(jié)構(gòu),進(jìn)程定義私有數(shù)據(jù)結(jié)構(gòu)。 存在方式不同:進(jìn)程有生命周期,管程是操作系統(tǒng)固有的部分,沒有生命周期。 執(zhí)行方式不同:管程被進(jìn)程調(diào)用,沒有并發(fā)性,進(jìn)程具有并發(fā)執(zhí)行性。,第56頁,六、進(jìn)程通信,什么是進(jìn)程通信? 簡單來說就是在進(jìn)程間傳輸數(shù)

24、據(jù)(交換信息)。 進(jìn)程通信的分類 根據(jù)交換信息量的多少和效率的高低,分為: 低級通信:只能傳遞狀態(tài)和整數(shù)值(控制信息),缺點: 傳送信息量小,效率低,每次通信傳遞的信息量固定,若傳遞較多信息則需要進(jìn)行多次通信。 編程復(fù)雜:用戶直接實現(xiàn)通信的細(xì)節(jié),容易出錯。,第57頁,六、進(jìn)程通信,高級通信:提高信號通信的效率,傳遞大量數(shù)據(jù),減輕程序編制的復(fù)雜度。,進(jìn)程1,進(jìn)程2,data,提供三種方式: 1、共享內(nèi)存模式 2、消息傳遞模式 3、共享文件模式,第58頁,六、進(jìn)程通信,根據(jù)通信方式不同,分為: 直接通信:信息直接傳遞給接收方,如管道。在發(fā)送時,指定接收方的地址或標(biāo)識,也可以指定多個接收方或廣播式地

25、址;在接收時,允許接收來自任意發(fā)送方的消息,并在讀出消息的同時獲取發(fā)送方的地址。 間接通信:借助于收發(fā)雙方進(jìn)程之外的共享數(shù)據(jù)結(jié)構(gòu)作為通信中轉(zhuǎn),如消息隊列。通常收方和發(fā)方的數(shù)目可以是任意的。,第59頁,六、進(jìn)程通信,共享內(nèi)存模式(間接通信) 最為快捷有效的方式之一,UNIX系統(tǒng)種常被使用。 原理,進(jìn)程1,進(jìn)程2,data,data,內(nèi)存共享區(qū)的互斥要通過其它機制實現(xiàn); 數(shù)據(jù)的發(fā)送方不關(guān)心數(shù)據(jù)由誰接收,數(shù)據(jù)的接收方 也不關(guān)心數(shù)據(jù)是由誰發(fā)送的,存在安全隱患。,第60頁,六、進(jìn)程通信,消息傳遞模式 消息(message):由發(fā)送方形成,通過一定的機制傳遞給接收方的一組信息,它的長度可以固定,也可以變化

26、。,第61頁,六、進(jìn)程通信,工作原理,進(jìn)程 A,進(jìn)程 B,原語 Send(B,m),原語 Receive(m),進(jìn)程B的消息隊列,Q: 一個進(jìn)程如何和一個消息隊列關(guān)聯(lián)? 臨界資源是什么? OS如何實現(xiàn)同步互斥的?,Hptr,mutex,Sn,第62頁,六、進(jìn)程通信,Send()和Receive()通信原語,Procedure Send(receiver,Ma) begin getbuf (Ma,size,i); i.sender := Ma.sender; i.size := Ma.size; i.text := Ms.text; i.next := 0; getid(PCB set, rec

27、eiver, j); P(j.mutex); insert(j.Hptr, i); V(j.Sn); V(j.mutex); end,Procedure Receive(Mb) begin j:internal name; P(j.Sn); P(j.mutex); remove(j.Hptr,i); V(j.mutex); Mb.Sender:= i.Sender; Mb.Size := i.Size; Mb.text := i.text; end,第63頁,六、進(jìn)程通信,消息傳遞的方式 直接通信方式:點到點的發(fā)送 Send (DestProcessName, Message); Receiv

28、e (SourceProcessName, Message); 間接通信方式:以信箱為媒介進(jìn)行傳遞,可以廣播 Send (MailBox, Message); Receive (MailBox, Message);,第64頁,六、進(jìn)程通信,管道(直接通信) 是一種信息流緩沖機構(gòu), UNIX系統(tǒng)中管道基于文件系統(tǒng),在內(nèi)核中通過文件描述符表示。管道以先進(jìn)先出(FIFO)方式組織數(shù)據(jù)傳輸。 實現(xiàn)方法,調(diào)用pipe()函數(shù)創(chuàng)建管道 int pipe(int fd2); fd0為管道里的讀取端 fd1則為管道的寫入端。 通過write()函數(shù)寫入信息 int write (int handle,char

29、 *buf,unsigned len) 進(jìn)程通過read()函數(shù)讀取信息 int read (int handle,void *buf,unsigned len),第65頁,六、進(jìn)程通信,管道的特點: 管道是一個單向通信信道,如果進(jìn)程間要進(jìn)行雙向通信,通常需要定義兩個管道 管道通過系統(tǒng)調(diào)用read(), write()函數(shù)進(jìn)行讀寫操作 管道的分類 匿名管道:只適用于父子進(jìn)程之間通信;管道能夠把信息從一個進(jìn)程的地址空間拷貝到另一個進(jìn)程的地址空間。 命名管道:命名管道有自己的名字和訪問權(quán)限的限制,就像一個文件一樣。它可以用于不相關(guān)進(jìn)程間的通信,進(jìn)程通過使用管道的名字獲得管道。,第66頁,七、線程,

30、為什么要提出線程的概念? 進(jìn)程作為計算機的基本計算調(diào)度單位,在現(xiàn)代操作系統(tǒng)的發(fā)展中出現(xiàn)了一些問題: 進(jìn)程的并發(fā)執(zhí)行使得進(jìn)程調(diào)度的工作量日益增大,系統(tǒng)將大量精力耗費在進(jìn)程調(diào)度和分配內(nèi)存上,系統(tǒng)效率得不到有效的提高。 進(jìn)程之間的通信延遲很大,使得頻度較高的通信過程效率低下。 進(jìn)程間的并行度沒有人們預(yù)想的效果好。,第67頁,七、線程,線程的定義 線程(thread)也叫輕型進(jìn)程,是一個可執(zhí)行的實體單元。它代替以往的進(jìn)程,成為現(xiàn)代操作系統(tǒng)中處理機調(diào)度的基本單位。 線程和進(jìn)程的關(guān)系,多線程模型,1、線程是進(jìn)程的一個組成部分,線程由進(jìn)程創(chuàng)建,因此一個進(jìn)程中至少存在一個線程,線程還可以創(chuàng)建其它線程。 2、進(jìn)

31、程依然是資源分配和保護(hù)的基本單位,線程只能在進(jìn)程的地址空間活動,線程只能使用其所在進(jìn)程的資源。,第68頁,七、線程,線程的結(jié)構(gòu),PCB,程序,數(shù)據(jù),線程的特點: 1、線程作為基本的調(diào)度單位,其狀態(tài)有:就緒、運行、阻塞等; 2、進(jìn)程中都所有線程共享進(jìn)程的存儲空間和分配資源。,工作區(qū),第69頁,七、線程,線程優(yōu)勢: 創(chuàng)建和撤消線程的開銷非常小。不需要向系統(tǒng)請求獨立的地址空間及進(jìn)行相關(guān)的地址空間復(fù)制(例如父子進(jìn)程),因此創(chuàng)建和撤銷線程系統(tǒng)的開銷要遠(yuǎn)小于進(jìn)程。 切換迅速。線程的上下文環(huán)境要比進(jìn)程簡單的多,因此線程間的切換遠(yuǎn)比進(jìn)程快的多。 通信效率高。同一進(jìn)程中的線程由于共享同一地址空間,通信時不需要借

32、助內(nèi)核功能。 并發(fā)度高。在多處理機系統(tǒng)中,對進(jìn)程的個數(shù)是有所限制的,但對線程的個數(shù)理論上不存在限制,更發(fā)揮了多處理機系統(tǒng)的優(yōu)勢。,第70頁,七、線程,線程的實現(xiàn)機制,用戶級線程,優(yōu)點: 1、核心不用管理線程的切換,處理機在兩個線程間切換時不用進(jìn)入到核心態(tài)執(zhí)行,節(jié)省了用戶態(tài)與核心態(tài)之間切換的開銷。 2、用戶級線程的管理機制可以運行在各種操作系統(tǒng)中,方便、靈活。 缺點: 當(dāng)線程執(zhí)行系統(tǒng)調(diào)用時,整個進(jìn)程都被阻塞,不能充分利用多處理機。,第71頁,七、線程,核心級線程,核心可以調(diào)度一個進(jìn)程中的多個線程同時運行,當(dāng)某線程發(fā)生阻塞,可以調(diào)度其它線程執(zhí)行。 優(yōu)點: 充分發(fā)揮了多處理機的并行工作能力。 缺點:

33、 在同一進(jìn)程間的線程控制權(quán)轉(zhuǎn)移時,用戶級與核心級的切換開銷很大。,第72頁,七、線程,Solaris thread,LWP,第73頁,八、UNIX進(jìn)程模型,進(jìn)程映像基本結(jié)構(gòu),第74頁,八、UNIX進(jìn)程模型,proc結(jié)構(gòu),struct proc char p_stat; /*進(jìn)程狀態(tài)*/ char p_flag; /*進(jìn)程標(biāo)志*/ char p_pri; /*進(jìn)程優(yōu)先級*/ char p_sig; /*軟中斷號*/ char p_uid; /*用戶號*/ char p_time; /*駐留時間*/ char p_cpu; /*進(jìn)程占據(jù)CPU的時間量*/ char p_nice ; /*用于計算優(yōu)

34、先級*/ int p_ttyp; /*控制終端tty結(jié)構(gòu)的地址*/ int p_pid; /*進(jìn)程號*/ int p_ppid; /*父進(jìn)程號*/ int p_addr; /*數(shù)據(jù)段地址*/ int p_size; /*數(shù)據(jù)段大小*/ int p_wchan; /*等待的原因*/ int *p_textp; /*對應(yīng)正文段的text項地址*/ procNPROC;,第75頁,八、UNIX進(jìn)程模型,text結(jié)構(gòu),struct text int x_daddr; /*磁盤地址*/ int x_caddr; /*內(nèi)存地址*/ int x_size; /*內(nèi)存塊數(shù),每塊64字節(jié)*/ int x_iptr; /*文件內(nèi)存i節(jié)點地

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論