版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
主要內(nèi)容調(diào)度
scheduling死鎖deadlock同步
synchronization進程
process2.1并發(fā)與進程并發(fā)——現(xiàn)代操作系統(tǒng)最重要的特征之一進程——操作系統(tǒng)最重要的抽象概念之一并發(fā)基于進程2.1.1并發(fā)概述并發(fā):兩個或多個事件在同一時間間隔內(nèi)發(fā)生事務(wù)處理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)若干應(yīng)用計算機操作系統(tǒng)應(yīng)用級并發(fā)系統(tǒng)級并發(fā)并發(fā)類型2.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行順序執(zhí)行若干程序或程序段之間必須嚴格按照某種先后順序來執(zhí)行順序執(zhí)行示例程序的順序執(zhí)行語句的順序執(zhí)行
S1:a:=x+y;S2:b:=a-5;S3:c:=b+1;I1C1P1I2C2P2S1S2S32.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行程序順序執(zhí)行時的特征順序性處理機的操作嚴格按照程序所規(guī)定的順序執(zhí)行。封閉性程序運行時獨占全機資源,程序一旦開始執(zhí)行,其執(zhí)行結(jié)果不受外界因素影響??稍佻F(xiàn)性只要程序執(zhí)行時的環(huán)境和初始條件相同,都將獲得相同的結(jié)果。2.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行前趨圖有向無循環(huán)圖節(jié)點:程序段、進程、語句邊:前趨關(guān)系P1P3P8P9P4P2P5P6P72.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行并發(fā)執(zhí)行兩個或兩個以上的程序和或程序段在同一時間間隔內(nèi)同時執(zhí)行并發(fā)執(zhí)行示例2.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行并發(fā)執(zhí)行示例(續(xù))有兩個并發(fā)執(zhí)行的進程P1和P2,共享初值為1的變量x。P1對x加1,P2對x減1。加1和減1操作的指令序列分別如下所示,試問兩個操作完成后,x的值是多少?//加1操作loadR1,x//取x到寄存器R1中incR1storex,R1//將R1的內(nèi)容存入x//減1操作loadR2,x//取x到寄存器R2中decR2storex,R2//將R2的內(nèi)容存入x答案:可能為0、1或22.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行程序并發(fā)執(zhí)行時的特征間斷性由于資源共享和相互合作,程序呈現(xiàn)“執(zhí)行-暫停-執(zhí)行”現(xiàn)象。失去封閉性程序本身的執(zhí)行環(huán)境受外界程序的影響。(原因?)不可再現(xiàn)性程序在并發(fā)執(zhí)行時,由于失去了封閉性,導(dǎo)致不可再現(xiàn)性。2.1.2程序的順序執(zhí)行與并發(fā)執(zhí)行并發(fā)執(zhí)行的條件(Berstein)假設(shè)程序Pi所訪問的共享變量的讀集合、寫集合分別為R(Pi)、W(Pi),則任意兩個程序P1和P2可以并發(fā)執(zhí)行的條件有以下三條:
2.1.4進程及其運行環(huán)境引入進程的目的使多道程序能夠正確地并發(fā)執(zhí)行,以保證程序運行結(jié)果的可再現(xiàn)性。典型的進程定義一個正在執(zhí)行中的程序。一個正在計算機上執(zhí)行的程序?qū)嵗D芊峙浣o處理器并由處理器執(zhí)行的實體。一個具有以下特征的活動單元:一組指令序列的執(zhí)行、一個當前狀態(tài)和相關(guān)的系統(tǒng)資源集??刹l(fā)執(zhí)行的程序在一個數(shù)據(jù)集合上的運行過程。2.1.4進程及其運行環(huán)境進程的基本特征動態(tài)性:本質(zhì)特性一個正在計算機上執(zhí)行的程序?qū)嵗?,存在生命周期并發(fā)性:重要特性任何進程都可以同其他進程一起向前推進獨立性各進程的地址空間相互獨立,除非采用進程間通信手段異步性按各自獨立的、不可預(yù)知的速度向前推進結(jié)構(gòu)性
進程=進程控制塊(PCB)+程序段+數(shù)據(jù)段2.1.4進程及其運行環(huán)境進程與程序一個正在計算機上執(zhí)行的程序?qū)嵗M程=進程控制塊+程序段+數(shù)據(jù)段引入進程的目的是使多道程序能夠正確地并發(fā)執(zhí)行程序是靜態(tài)實體,進程具有動態(tài)性進程與程序之間不存在一一對應(yīng)關(guān)系2.1.4進程及其運行環(huán)境引入進程后帶來的挑戰(zhàn)(challenges)?空間開銷(spaceoverhead)為進程建立數(shù)據(jù)結(jié)構(gòu)時間開銷(timeoverhead)管理和協(xié)調(diào)、跟蹤、填寫和更新有關(guān)數(shù)據(jù)結(jié)構(gòu)、切換進程、保護現(xiàn)場控制復(fù)雜性(complexityofcontrol)協(xié)調(diào)多個進程對資源的競爭和共享預(yù)防、解決多個進程因為競爭資源而出現(xiàn)的故障2.2進程的狀態(tài)轉(zhuǎn)換進程的動態(tài)性進程執(zhí)行的間斷性進程具有多種狀態(tài)2.2.1進程的執(zhí)行軌跡進程在內(nèi)存中布局示例2.2.1進程的執(zhí)行軌跡進程的軌跡:執(zhí)行指令序列,用于描述單個進程的行為。I/O
request3進程并發(fā)執(zhí)行的軌跡:理解處理器的行為,如何在三個進程間交替執(zhí)行規(guī)定:每個進程僅允許最多連續(xù)執(zhí)行6個指令周期,之后被中斷(避免獨占)ABCdispatcherdispatcherdispatcherAC7/23/20232.2.1進程的執(zhí)行軌跡dispatcher2.2.2兩狀態(tài)進程模型暫停調(diào)度退出進入未執(zhí)行未執(zhí)行執(zhí)行進程兩狀態(tài)轉(zhuǎn)換模型進入隊列調(diào)度退出暫停進程兩狀態(tài)隊列模型處理器2.2.3五狀態(tài)進程模型進程的三種基本狀態(tài)就緒狀態(tài)
當進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執(zhí)行過程。執(zhí)行狀態(tài)進程已獲得CPU,其程序正在執(zhí)行。阻塞狀態(tài)正在執(zhí)行的進程由于發(fā)生某事件而暫時無法繼續(xù)執(zhí)行時,便放棄處理機而處于暫停狀態(tài),把這種暫停狀態(tài)稱為阻塞狀態(tài),有時也稱為等待狀態(tài)。2.2.3五狀態(tài)進程模型進程的三種基本狀態(tài)及其轉(zhuǎn)換就緒阻塞執(zhí)行時間片完進程調(diào)度事件發(fā)生事件等待2.2.3五狀態(tài)進程模型三種基本狀態(tài)的思考狀態(tài)轉(zhuǎn)換是否可逆?進程主動完成狀態(tài)轉(zhuǎn)換,還是被動完成?進程狀態(tài)是否唯一?時間片用完是否是進程由執(zhí)行變?yōu)榫途w的唯一原因?在單處理機系統(tǒng)中,是否可以有多個進程處于執(zhí)行狀態(tài)?在多處理機系統(tǒng)中,是否可以有多個進程處于執(zhí)行狀態(tài)?三種狀態(tài)是否是進程的全部可能狀態(tài)?2.2.3五狀態(tài)進程模型進程的五種狀態(tài)執(zhí)行狀態(tài)、阻塞狀態(tài)、就緒狀態(tài)新建狀態(tài)OS已完成為創(chuàng)建一進程所必要的工作已構(gòu)造了進程標識符;已創(chuàng)建了管理進程所需的表格但還沒有允許執(zhí)行該進程(尚未同意)因為資源有限,OS所需的關(guān)于該進程的信息保存在主存中的進程表中,但進程自身還未進入主存,也沒有為與這個程序相關(guān)的數(shù)據(jù)分配空間,程序保留在輔存中。終止狀態(tài)它不再有執(zhí)行資格表格和其它信息暫時保留2.2.3五狀態(tài)進程模型進程五狀態(tài)轉(zhuǎn)換模型分派/調(diào)度接納事件等待時間片用完新建阻塞執(zhí)行就緒終止事件發(fā)生完成2.2.3五狀態(tài)進程模型阻塞隊列和就緒隊列
單阻塞隊列單就緒隊列多阻塞隊列單就緒隊列2.2.3五狀態(tài)進程模型單阻塞隊列、單就緒隊列
接納就緒隊列分派/調(diào)度處理機完成時間片完等待事件阻塞隊列事件發(fā)生2.2.3五狀態(tài)進程模型多阻塞隊列、單就緒隊列
時間片完等待事件1阻塞隊列1事件1發(fā)生接納
就緒隊列分派/調(diào)度完成處理機阻塞隊列2阻塞隊列n等待事件2等待事件n事件2發(fā)生事件n發(fā)生2.2.4進程的掛起狀態(tài)多個進程競爭內(nèi)存資源時可能導(dǎo)致下列現(xiàn)象內(nèi)存資源緊張
如何在有限的內(nèi)存中裝入盡量多的進程?無就緒進程,處理機空閑
I/O操作速度遠低于CPU計算速度,導(dǎo)致所有進程阻塞,該如何處理?2.2.4進程的掛起狀態(tài)對換技術(shù)(Swapping)
內(nèi)存中分沒有就緒進程或內(nèi)存空間非常緊張時,系統(tǒng)將一個或多個進程的全部或部程序和數(shù)據(jù)從內(nèi)存中換出到磁盤,以騰出部分內(nèi)存空間。進程被交換到外存,狀態(tài)可能變?yōu)閽炱馉顟B(tài)掛起狀態(tài)使執(zhí)行的進程暫停執(zhí)行,靜止下來,不再參與CPU的競爭,我們把這種靜止狀態(tài)稱為掛起狀態(tài)。2.2.4進程的掛起狀態(tài)進程掛起的原因進程全部阻塞,處理機空閑系統(tǒng)負荷過重,內(nèi)存空間緊張操作系統(tǒng)的需要,操作系統(tǒng)可能需要掛起后臺進程或一些服務(wù)進程,或某些可能導(dǎo)致系統(tǒng)故障的進程。終端用戶的請求父進程請求2.2.4進程的掛起狀態(tài)被掛起進程的特征不能立即執(zhí)行掛起條件獨立于阻塞條件使之掛起的進程:自身、OS、父進程激活掛起進程的進程:實施掛起操作的進程2.2.4進程的掛起狀態(tài)阻塞與掛起阻塞與否:進程是否等待事件掛起與否:進程是否被換出內(nèi)存四種狀態(tài)組合就緒:進程在內(nèi)存,準備執(zhí)行阻塞:進程在內(nèi)存,等待事件就緒/掛起:進程在外存,只要調(diào)入內(nèi)存并獲得CPU即可執(zhí)行阻塞/掛起:進程在外存,等待事件有掛起狀態(tài)的轉(zhuǎn)換模型2.2.3進程的掛起狀態(tài)接納激活掛起激活分派/調(diào)度接納事件等待時間片用完新建阻塞執(zhí)行就緒終止事件發(fā)生阻塞/掛起掛起就緒/掛起完成事件發(fā)生掛起2.3操作系統(tǒng)對進程的控制操作系統(tǒng)內(nèi)核控制結(jié)構(gòu)進程控制2.3.1操作系統(tǒng)內(nèi)核內(nèi)核的概念一些與硬件緊密相關(guān)、基本的、公共的、運行頻率較高的模塊,以及關(guān)鍵性數(shù)據(jù)結(jié)構(gòu)等常駐內(nèi)存,便于提高操作系統(tǒng)運行效能的這部分軟件,稱為操作系統(tǒng)的內(nèi)核。用戶通過系統(tǒng)調(diào)用訪問操作系統(tǒng)的功能,這些功能最終都通過操作系統(tǒng)內(nèi)核實現(xiàn)。不同操作系統(tǒng)對內(nèi)核的定義和功能范圍的設(shè)定是不同的。通常而言,操作系統(tǒng)內(nèi)核的功能可以概括為資源管理功能和支撐功能。2.3.1操作系統(tǒng)內(nèi)核資源管理功能進程管理進程創(chuàng)建和終止、調(diào)度、狀態(tài)轉(zhuǎn)換、同步和通信、管理PCB等。存儲管理為進程分配內(nèi)存空間、實現(xiàn)內(nèi)存保護和對換功能以及對內(nèi)存分段、分頁管理等。I/O設(shè)備管理
I/O緩沖區(qū)的管理,為進程分配I/O通道和設(shè)備等。2.3.1操作系統(tǒng)內(nèi)核支撐功能中斷處理中斷處理既是內(nèi)核的基本功能,也是整個操作系統(tǒng)賴以活動的基礎(chǔ),操作系統(tǒng)的一切重要活動最終都依賴于中斷。時鐘管理操作系統(tǒng)的很多功能都依賴于時鐘,如時間片控制等。原語操作由若干機器指令構(gòu)成用以完成特定功能的一個過程在執(zhí)行中不可分割——原子操作操作系統(tǒng)內(nèi)核的功能大都通過執(zhí)行各種原語操作實現(xiàn)統(tǒng)計、監(jiān)測功能2.3.2操作系統(tǒng)控制結(jié)構(gòu)操作系統(tǒng)是資源的管理者采用表格(或數(shù)據(jù)結(jié)構(gòu))來記載各資源的信息,從而實現(xiàn)對資源的管理、維護、更新等。操作系統(tǒng)控制表的通用結(jié)構(gòu)
進程文件設(shè)備內(nèi)存進程n……進程2進程1內(nèi)存表I/O表文件表進程映像1進程映像2進程映像n……主進程表2.3.3進程的構(gòu)成及進程的組織進程的構(gòu)成(進程映像)
程序段+數(shù)據(jù)段+進程控制塊(PCB)在某些系統(tǒng)中,當進程創(chuàng)建另一進程后,父子進程就以某種形式繼續(xù)保持關(guān)聯(lián)。如UNIX中,進程與其所有子女及后裔共同組成一個進程組。在Windows中,沒有進程層次的概念,所有進程都是地位相等的。2.3.4進程控制塊PCB標示符狀態(tài)優(yōu)先級程序計數(shù)器內(nèi)存指針上下文數(shù)據(jù)I/O狀態(tài)信息記賬信息…進程控制塊的作用進程存在的唯一標志;PCB(processcontrolblock)常駐內(nèi)存進程控制塊中的信息標識、處理機狀態(tài),進程調(diào)度信息,進程控制信息2.3.4進程控制塊PCB進程控制塊中的信息進程標示符:唯一地標識一個進程內(nèi)部標識符操作系統(tǒng)為每個進程賦予的一個唯一整數(shù),便于系統(tǒng)控制外部標識符由創(chuàng)建者提供,通常是由字母、數(shù)字組成,往往是由用戶(進程)在訪問該進程時使用。2.3.4進程控制塊PCB進程控制塊中的信息(續(xù))處理機狀態(tài)信息:主要是由處理器的各種寄存器中的內(nèi)容組成的通用寄存器(用戶可視寄存器)
暫存信息指令計數(shù)器要訪問的下一條指令的地址程序狀態(tài)字PSW狀態(tài)信息,如條件碼、執(zhí)行方式、中斷屏蔽標志等用戶棧指針存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址2.3.4進程控制塊PCB進程控制塊中的信息(續(xù))進程調(diào)度信息:與進程調(diào)度和進程對換有關(guān)的信息進程狀態(tài)
指明進程的當前狀態(tài)進程優(yōu)先級
進程使用戶理器的優(yōu)先級別進程調(diào)度所需的其它信息如進程已等待CPU的時間總和、進程已執(zhí)行的時間總和等;事件
指進程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)所等待發(fā)生的事件,即阻塞原因。2.3.4進程控制塊PCB進程控制塊中的信息(續(xù))其它信息程序和數(shù)據(jù)的地址
指進程的程序和數(shù)據(jù)所在的內(nèi)存或外存地址進程同步和通信機制
指實現(xiàn)進程同步和進程通信時必需的機制,如消息隊列指針、信號量等。資源清單進程所需的全部資源及已經(jīng)分配到該進程的資源的清單鏈接指針2.3.4進程控制塊PCB進程控制塊的組織方式索引方式鏈接方式單一隊列多級隊列2.3.4進程控制塊PCB索引方式系統(tǒng)根據(jù)所有進程的狀態(tài)建立幾張索引表。2.3.4進程控制塊PCB鏈接方式通過鏈接指針將PCB塊連接起來,形成隊列。單一隊列所有PCB塊連接成一個隊列PCB1RunningPCB2ReadyPCBnBlcoked…2.3.4進程控制塊PCB鏈接方式——多級隊列相同狀態(tài)的PCB塊連接成一個隊列2.3.5PCB實例Linux操作系統(tǒng)中采用task_struct來表示進程控制塊\include\linux\sched.h2.3.6操作系統(tǒng)內(nèi)核級安全:執(zhí)行模式模式為了實現(xiàn)操作系統(tǒng)內(nèi)核級安全,由硬件提供CPU特權(quán)保護方式,稱為模式。模式分類單模式無論是用戶程序,還是系統(tǒng)程序都采用一種模式。多模式
多種CPU保護級別2.3.6操作系統(tǒng)內(nèi)核級安全:執(zhí)行模式雙模式系統(tǒng)模式(系統(tǒng)態(tài)、系統(tǒng)控制模式、內(nèi)核模式、管態(tài))具有較高的特權(quán)運行系統(tǒng)特定的指令,包括讀/寫控制寄存器的指令、基本I/O指令以及與存儲器管理有關(guān)的指令等,而且特定的內(nèi)存區(qū)域也只能在系統(tǒng)模式下訪問。內(nèi)核模式下的處理器及其指令、寄存器和內(nèi)存受到完全控制和保護。用戶模式(用戶態(tài)、目態(tài))具有較低的特權(quán)用戶程序一般運行在用戶模式2.3.6操作系統(tǒng)內(nèi)核級安全:執(zhí)行模式模式切換系統(tǒng)模式和用戶模式之間的相互轉(zhuǎn)換模式的思考模式切換是否會必然導(dǎo)致進程狀態(tài)的改變?否,如系統(tǒng)調(diào)用進程切換是否會導(dǎo)致模式切換的發(fā)生?
不一定2.3.7操作系統(tǒng)對進程的控制進程控制創(chuàng)建和撤銷進程,并對進程在整個生命期中各狀態(tài)的轉(zhuǎn)換進行有效控制。實現(xiàn)方式進程控制一般是由OS的內(nèi)核中的一組原語來實現(xiàn)的2.3.7.1進程的創(chuàng)建與撤銷引起創(chuàng)建進程的典型事件用戶登錄為終端用戶建立一進程作業(yè)調(diào)度(不是進程調(diào)度)為被調(diào)度的作業(yè)建立進程提供服務(wù)如要打印時建立打印進程應(yīng)用請求由應(yīng)用程序建立多個進程2.3.7.1進程的創(chuàng)建與撤銷創(chuàng)建進程的步驟給新進程分配一個唯一的進程標識符為進程分配空間初始化進程控制塊初始化標識信息初始化處理機狀態(tài)信息如使程序計數(shù)器指向程序的入口地址,使棧指針指向棧頂?shù)瘸跏蓟M程調(diào)度信息如設(shè)置進程的狀態(tài)、優(yōu)先級。建立鏈接,將之插入就緒或就緒/掛起鏈表。建立或擴充其它數(shù)據(jù)結(jié)構(gòu)2.3.7.1進程的創(chuàng)建與撤銷引起進程終止的事件正常結(jié)束:如exit,halt,logoff異常結(jié)束:外界干預(yù):系統(tǒng)員kill進程父進程終止父進程請求越界錯誤保護錯非法指令特權(quán)指令錯運行超時等待超時算術(shù)運算錯、被0除I/O故障2.3.7.1進程的創(chuàng)建與撤銷進程終止過程根據(jù)被終止進程的標識符找到其PCB,讀出該進程的狀態(tài)。若該進程為執(zhí)行狀態(tài),則終止其執(zhí)行,調(diào)度下一個就緒進程執(zhí)行。若該進程還有子孫進程,還應(yīng)將其所有子孫進程予以終止,以防他們成為不可控的進程將該進程所擁有的全部資源,或者歸還給其父進程,或者歸還給系統(tǒng)。將被終止進程(它的PCB)從所在隊列(或鏈表)中移出,等待其他程序來搜集信息2.3.7.2進程的阻塞與喚醒引起進程阻塞的事件請求系統(tǒng)服務(wù)而得不到滿足時,如向系統(tǒng)請求打印。啟動某種操作而需同步時:如該操作和請求該操作的進程需同步運行(即非異步操作)。新數(shù)據(jù)尚未到達:如進程A寫,進程B讀,則A未寫,完B不能讀。無新工作可做。2.3.7.2進程的阻塞與喚醒進程阻塞過程正在執(zhí)行的進程,當發(fā)現(xiàn)上述某事件時,由于無法繼續(xù)執(zhí)行,于是進程便通過調(diào)用阻塞原語block()把自己阻塞。把進程控制塊中的現(xiàn)行狀態(tài)由“執(zhí)行”改為阻塞,并將PCB插入阻塞隊列。調(diào)度程序?qū)⑻幚頇C分配給另一就緒進程,并進行切換。2.3.7.2進程的阻塞與喚醒進程喚醒過程當被阻塞進程所期待的事件出現(xiàn)時,則由有關(guān)進程(比如,用完并釋放了該I/O設(shè)備的進程)調(diào)用喚醒原語wakeup(),將等待該事件的進程喚醒。喚醒原語執(zhí)行的過程是:首先把被阻塞的進程從等待該事件的阻塞隊列中移出,將其PCB中的現(xiàn)行狀態(tài)由阻塞改為就緒,然后再將該PCB插入到就緒隊列中。2.3.7.3進程的掛起與激活進程的掛起當出現(xiàn)了引起進程掛起的事件時,系統(tǒng)將利用掛起原語suspend()將指定進程掛起。掛起原語的執(zhí)行過程首先檢查被掛起進程的狀態(tài),若處于就緒狀態(tài),便將其改為就緒/掛起;對于處于阻塞狀態(tài)的進程,則將之改為阻塞/掛起。2.3.7.3進程的掛起與激活進程的激活當發(fā)生激活進程的事件時,則可將在外存上處于就緒/掛起狀態(tài)的進程換入內(nèi)存。激活原語的執(zhí)行過程系統(tǒng)利用激活原語active()將指定進程激活;激活原語先將進程從外存調(diào)入內(nèi)存,檢查該進程的現(xiàn)行狀態(tài),若是就緒/掛起,便將之改為就緒;若為阻塞/掛起,便將之改為阻塞。2.3.7.4進程切換進程切換調(diào)度另一個就緒進程占用處理器執(zhí)行進程的上下文
進程執(zhí)行現(xiàn)場進程切換步驟保存處理器上下文環(huán)境,包括程序計數(shù)器和其它寄存器更新當前處于運行狀態(tài)進程的進程控制塊將進程的進程控制塊移至相應(yīng)隊列(就緒、阻塞等)選擇另一進程執(zhí)行更新其進程控制塊信息恢復(fù)被選擇進程的上下文環(huán)境2.3.8UNIX進程控制fork():創(chuàng)建一個新進程exec():執(zhí)行一個可執(zhí)行程序exit():終止sleep():暫停一段時間pause():暫停并等待信號wait():等待子進程暫?;蚪K止kill():發(fā)送信號到某個或一組進程ptrace():設(shè)置執(zhí)行斷點(breakpoint),允許父進程控制子進程的運行2.3.8UNIX進程控制fork()作用
創(chuàng)建一個新進程調(diào)用格式
pid=fork()在調(diào)用fork()之后,父進程和子進程均在下一條語句上繼續(xù)運行。父、子進程的fork返回值不同在子進程中返回時,pid為0;在父進程中返回時,pid為所創(chuàng)建的子進程的標識。2.3.8UNIX進程控制fork()創(chuàng)建子進程之后,執(zhí)行返回父進程,或調(diào)度切換到子進程或其他進程。fork創(chuàng)建一個新進程(子進程),除了子進程標識符和其PCB結(jié)構(gòu)中的某些特性參數(shù)不同之外,子進程是父進程的精確復(fù)制。父、子進程的運行是無關(guān)的,所以運行順序也不固定。若要求父子進程運行順序一定,則要用到進程間的通信。2.3.8UNIX進程控制main(){pid_tval;printf(“PID…\n”);val=fork();
if(val!=0)printf(“parent…\n”);
elseprintf(“child…\n”);}父進程main(){pid_tval;printf(“PID…\n”);val=fork();
if(val!=0)printf(“parent…\n”);
elseprintf(“child…\n”);}父進程main(){pid_tval;printf(“PID…\n”);val=fork();
if(val!=0)printf(“parent…\n”);
elseprintf(“child…\n”);}子進程分裂執(zhí)行繼續(xù)執(zhí)行繼續(xù)執(zhí)行2.3.8UNIX進程控制fork()調(diào)用例子(1)#include<stdio.h>#Include<sys/types.h>#include<unistd.h>voidmain(void){printf(“Hello\n”);
fork();printf(“Bye\n”);}運行結(jié)果HelloByeBye2.3.8UNIX進程控制fork()調(diào)用例子(2)#include<stdio.h>#Include<sys/types.h>#include<unistd.h>voidmain(void){if(fork()==0)printf(“IntheCHILDprocess\n”);elseprintf(“InthePARENTprocess\n”);}程序的運行無法保證輸出順序,輸出順序依賴于內(nèi)核所用的調(diào)度算法2.3.8UNIX進程控制fork()調(diào)用例子(3)voidmain(void){inti;staticcharbuffer[10];if(fork()==0)strcpy(buffer,“Child\n”);elsestrcpy(buffer,“Parent\n”);
for(i=0;i<5;++i){
sleep(1);write(1,buffer,sizeof(buffer));}}2.3.8UNIX進程控制fork()調(diào)用例子(4)#include<stdio.h>#include<sys/types.h>#include<unistd.h>intglobal=4;voidmain(void){intpid;
intvari=5;printf(“beforefork\n”);if((pid=fork())<0){printf(“forkerror\n”);exit(0);}elseif(pid==0){global++;vari--;}printf(“global=%d,vari=%d\n”,global,vari);}父進程:global=?,vari=?
子進程:global=?,vari=?2.3.8UNIX進程控制子進程只能這么用么?Question2.3.8UNIX進程控制子進程如何執(zhí)行一個新的程序?
通過exec()調(diào)用族,加載新的程序文本子進程可以擁有自己的可執(zhí)行代碼,即用一個新進程覆蓋調(diào)用進程。參數(shù)包括新進程對應(yīng)的文件和命令行參數(shù)。成功調(diào)用時,不再返回;否則,返回出錯原因。2.3.8UNIX進程控制六種exec調(diào)用格式:各種調(diào)用的區(qū)別在于參數(shù)的處理方法不同,常用的格式有:intexecvp(constchar*file,char*constargv[])intexeclp(constchar*file,constchar*arg,...,(char*)0)在大多數(shù)程序中,系統(tǒng)調(diào)用fork和exec是結(jié)合在一起使用的。父進程生成一個子進程,然后通過調(diào)用exec覆蓋該子進程2.3.8UNIX進程控制輸出分別是什么fork失敗父進程:子進程:execv失敗父進程:子進程:execv成功父進程:子進程:intglobal=0;voidmain(){
if((child=fork())<0){
/*創(chuàng)建失敗*/}elseif(child==0){
if(execv(B...)<0){/*加載失敗*/
global+=1;
}else{
global+=2;
}
}else{
global+=3;
}printf(“global=%d”,global)}0無313依賴B2.4線程進程回顧進程的兩個特點資源所有權(quán):一個進程包括一個保存進程映像的虛地址空間,擁有對資源的控制或所有權(quán)。調(diào)度/執(zhí)行的基本單位:一個具有狀態(tài)和優(yōu)先級,可被被操作系統(tǒng)調(diào)度并分派的實體。有沒有改進之處?2.4.1進程與線程線程的誕生為區(qū)分這兩個特點,調(diào)度并分派的部分通常稱為線程或輕量級進程(lightweightprocess,LWP),而資源所有權(quán)的部分通常稱為進程。傳統(tǒng)的每個進程中只有一個線程在執(zhí)行(沒有考慮線程的概念),稱作單線程進程。2.4.1進程與線程線程的發(fā)展進程是擁有資源和獨立運行的基本單位。20世紀80年代中期,提出了比進程更小的能獨立運行的基本單位——線程(Threads)試圖用它來提高系統(tǒng)內(nèi)程序并發(fā)執(zhí)行的程度,從而可進一步提高系統(tǒng)的吞吐量。20世紀90年代后,多處理機系統(tǒng)得到迅速發(fā)展,線程能比進程更好地提高程序的并行執(zhí)行程度,充分地發(fā)揮多處理機的優(yōu)越性。2.4.1進程與線程線程的優(yōu)勢減少并發(fā)執(zhí)行時的時空開銷,進程的創(chuàng)建、撤消、切換較費時空,因它既是調(diào)度單位,又是資源擁有者。線程是系統(tǒng)獨立調(diào)度和分派的基本單位,其基本上不擁有系統(tǒng)資源,只有少量資源(PC,寄存器,棧),共享其所屬進程所擁有的全部資源。2.4.1進程與線程線程的屬性輕型實體除了一點必不可少的資源(如線程控制塊TCB、程序計數(shù)器、寄存器和堆棧)外,線程基本上不擁有系統(tǒng)的資源。獨立調(diào)度和分派的基本單位可并發(fā)執(zhí)行同一個進程中的多個線程以及不同進程中的多個線程均可并發(fā)執(zhí)行。共享資源同一個進程中的各線程可以共享該進程所擁有的全部資源,如進程的地址空間、已打開的文件、定時器和信號量等。2.4.2進程與線程的關(guān)系單進程、單線程單進程、多線程多進程、每個進程一個線程多進程、每個進程多個線程2.4.2進程與線程的關(guān)系進程與線程的比較概念調(diào)度并發(fā)性擁有資源系統(tǒng)開銷概念進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。線程是進程中的一個實體,是獨立調(diào)度和分派的基本單位。調(diào)度傳統(tǒng)操作系統(tǒng)中,進程既是擁有資源的基本單位,又是獨立調(diào)度的基本單位。引入線程的操作系統(tǒng)中,線程是獨立調(diào)度的基本單位。進程是資源擁有的基本單位,故可以顯著地提高系統(tǒng)的并發(fā)程度。同一進程中的線程間切換不會引起進程切換,但當一個進程中的線程切換到另一進程中的線程時,將會引起進程切換。2.4.2進程與線程的關(guān)系并發(fā)性進程之間可以并發(fā)執(zhí)行同屬于一個進程的多個線程之間,亦可并發(fā)執(zhí)行引入線程的操作系統(tǒng)具有更好的并發(fā)性,能更有效地使用系統(tǒng)資源和提高系統(tǒng)吞吐量。擁有的資源進程是擁有資源的獨立單位,有權(quán)申請系統(tǒng)的各類資源。線程除了擁有很少的私有資源以外,但可以和進程內(nèi)的其它線程共享其所屬進程的資源。資源比較線程:線程控制塊、程序計數(shù)器、寄存器和堆棧等進程:地址空間、全局變量、打開文件、子進程等2.4.2進程與線程的關(guān)系系統(tǒng)開銷操作系統(tǒng)管理進程的開銷顯著地大于管理線程所需的開銷。進程切換的開銷也遠大于線程切換的開銷。由于同一進程中的多個線程具有相同的地址空間,使它們之間的同步和通信也比較容易。有些類型的線程切換、同步和通信都無需操作系統(tǒng)內(nèi)核的干預(yù)。2.4.2進程與線程的關(guān)系關(guān)于線程的思考在支持多線程的系統(tǒng)中,進程P創(chuàng)建的若干線程可以共享的資源有:進程P的代碼段進程P打開的文件進程P的全局變量進程P中某線程的棧指針進程P中某線程的局部變量2.4.2進程與線程的關(guān)系2.4.3多線程并發(fā)單線程
每個進程中只有一個線程在執(zhí)行(沒有明確線程的概念)多線程在單個進程中執(zhí)行多個線程的能力單進程、單線程單進程、多線程多進程、每個進程一個線程多進程、每個進程多個線程2.4.3多線程并發(fā)單線程和多線程模式
2.4.3多線程并發(fā)線程的基本狀態(tài)就緒狀態(tài)執(zhí)行狀態(tài)阻塞狀態(tài)線程一般不具有掛起狀態(tài)一個進程可以創(chuàng)建和撤消一個或多個線程,同一進程中的多個線程可并發(fā)執(zhí)行。2.4.3多線程并發(fā)線程的基本操作派生(Spawn)
當系統(tǒng)創(chuàng)建一個進程時,同時也為該進程派生一個線程,同一進程中的線程可以再派生其它線程。阻塞(Block)當線程需要等待某事件時,它將被阻塞,釋放處理機執(zhí)行其它線程。解除阻塞(Unblock)當線程的阻塞事件發(fā)生,其狀態(tài)轉(zhuǎn)換為就緒,并插入到就緒隊列,等待調(diào)度執(zhí)行。結(jié)束(Finish)線程執(zhí)行完畢,釋放其私有資源。2.4.4線程的類型線程類型:依據(jù)線程是否對內(nèi)核透明用戶級線程內(nèi)核級線程混合線程2.4.4線程的類型用戶級線程線程的創(chuàng)建、撤銷和切換等操作全部由應(yīng)用程序完成操作系統(tǒng)內(nèi)核不知道線程的存在,仍以進程為調(diào)度單位Infomix支持用戶級線程P線程庫用戶空間內(nèi)核空間2.4.4線程的類型用戶級線程的優(yōu)點線程的管理和控制僅在用戶級進行,切換開銷小調(diào)度更靈活線程庫獨立于系統(tǒng)內(nèi)核用戶級線程的缺點用戶級線程中的系統(tǒng)調(diào)用常常會引起線程及整個進程阻塞,削弱了線程的并發(fā)性難以利用多處理技術(shù)內(nèi)核級線程線程的創(chuàng)建、撤銷和切換等操作由系統(tǒng)內(nèi)核完成操作系統(tǒng)以線程為調(diào)度單位Windows2000/XP、Linux和OS/2等操作系統(tǒng)采用了內(nèi)核級線程技術(shù)用戶空間內(nèi)核空間P2.4.4線程的類型內(nèi)核級線程的優(yōu)點內(nèi)核可以同時把同一個進程的多個線程調(diào)度到多個處理器如果進程中的一個線程被阻塞(包括頁面故障),內(nèi)核可以調(diào)度同一進程中的其他線程內(nèi)核例程也可以是多線程的內(nèi)核級線程的缺點同一進程中線程切換需在內(nèi)核中完成,開銷大在內(nèi)核中創(chuàng)建和撤銷線程的代價大2.4.4線程的類型混合線程線程的創(chuàng)建、撤銷、調(diào)度和同步等操作在用戶級應(yīng)用程序中完成多個用戶級線程被影射到一個或較少的某些內(nèi)核級線程Solaris操作系統(tǒng)采用了混合線程模式PP線程庫用戶空間內(nèi)核空間2.4.4線程的類型用戶級、內(nèi)核級、混合線程模式的比較P線程庫用戶空間內(nèi)核空間(a)用戶級線程:用戶級線程用戶空間內(nèi)核空間P(b)內(nèi)核級線程:內(nèi)核級線程PP線程庫用戶空間內(nèi)核空間(c)混合模式P:進程2.4.4線程的類型2.4.5Posix線程線程調(diào)用描述Pthread_create創(chuàng)建一個線程Pthread_exit結(jié)束調(diào)用的線程Pthread_join等待一個特定的線程退出Pthread_yield釋放CPU來運行另外一個線程Pthread_attr_init創(chuàng)建并初始化一個線程的屬性結(jié)構(gòu)Pthread_attr_destroy刪除一個線程的屬性結(jié)構(gòu)作業(yè)與Project作業(yè)
1.論述程序、進程、線程的區(qū)別與聯(lián)系
2.論述進程控制塊(PCB)的作用、存儲內(nèi)容
3.論述進程的基本特征
4.以圖為例,分析五狀態(tài)進程模型
5.為什么引入掛起狀態(tài),其與阻塞狀態(tài)的本質(zhì)區(qū)別是什么
6.論述進程切換與模式切換的區(qū)別Projecct2使用fork()、exec()函數(shù)編寫進程創(chuàng)建測試程序,并嘗試理解、分析fork()的內(nèi)核實現(xiàn)提交信箱:os_leeyj163
在Linux內(nèi)核中,供用戶創(chuàng)建進程的系統(tǒng)調(diào)用fork()函
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省花都區(qū)聯(lián)安中學(xué)2025屆中考生物四模試卷含解析
- 2025解除房屋租賃合同的注意事項有些
- 2025年工會集體合同范本
- 2024年度四川省公共營養(yǎng)師之二級營養(yǎng)師強化訓(xùn)練試卷B卷附答案
- 2025年油門項目可行性研究報告
- 2025水泥路面施工合同
- 2025標準的流動人員勞動合同模板
- 2024-2029年全球及中國膨脹機行業(yè)發(fā)展前景與投資戰(zhàn)略規(guī)劃分析報告
- 2022-2027年中國靈芝保健品行業(yè)發(fā)展監(jiān)測及投資方向研究報告
- 2025公積金借款合同細則
- 《科學(xué)與工程倫理》課件-1港珠澳大橋工程建設(shè)中的白海豚保護相關(guān)案例分析
- 浙江省杭州市錢塘區(qū)2023-2024學(xué)年四年級上學(xué)期數(shù)學(xué)期末試卷
- 《湖北省市政基礎(chǔ)設(shè)施工程質(zhì)量標準化圖冊》(燃氣管網(wǎng)工程)
- 2024年考研(英語一)真題及參考答案
- 山東省濟南市(2024年-2025年小學(xué)四年級語文)人教版期末考試((上下)學(xué)期)試卷及答案
- GMW系列往復(fù)式給料機說明書
- 集裝箱碼頭堆場項目可行性研究報告寫作范文
- 醫(yī)保藥店一體化信息管理系統(tǒng)操作手冊
- 2016年河南省對口升學(xué)文秘類基礎(chǔ)課試題卷
- 小學(xué)六年級數(shù)學(xué)上期家長會精品課件
- 汽車常用英文術(shù)語
評論
0/150
提交評論