




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、主要內(nèi)容:主要內(nèi)容: n進程的定義和屬性進程的定義和屬性 n進程的狀態(tài)和轉(zhuǎn)換進程的狀態(tài)和轉(zhuǎn)換 n進程的描述和組成進程的描述和組成 n進程切換與模式切換進程切換與模式切換 n進程的控制和管理進程的控制和管理 進程是操作系統(tǒng)中最基本、重要的概念進程是操作系統(tǒng)中最基本、重要的概念 是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn) 的動態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動規(guī)律的動態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動規(guī)律 引進的一個概念引進的一個概念,所有多道程序設(shè)計操作系統(tǒng)都建所有多道程序設(shè)計操作系統(tǒng)都建 立在進程的基礎(chǔ)上。立在進程的基礎(chǔ)上。 從理論角度看,進程是對正在
2、運行的程序過程的抽 象; 從實現(xiàn)角度看,進程是一種數(shù)據(jù)結(jié)構(gòu),目的在于清 晰地刻劃動態(tài)系統(tǒng)的內(nèi)在規(guī)律,有效管理和調(diào)度進 入計算機系統(tǒng)主存儲器運行的程序。 *對于單任務(wù)的操作系統(tǒng)而言,由于任何時候內(nèi)存中 只有一道程序(計算活動) ,而不是兩道或兩道以上 的程序(計算活動)在運行,程序(計算)運行的藍 本(程序)只有一個,程序與計算之間具有一對一的 關(guān)系,將依照藍本(程序)進行的計算活動稱為程序 (與藍本叫法相同)并無明顯不妥之處。 *但是在多任務(wù)的操作系統(tǒng)環(huán)境下,內(nèi)存中可以同時但是在多任務(wù)的操作系統(tǒng)環(huán)境下,內(nèi)存中可以同時 存在兩道或兩道以上的程序(計算活動)在運行,如存在兩道或兩道以上的程序(計算
3、活動)在運行,如 果每道程序(計算)運行的藍本(程序)互不相同,果每道程序(計算)運行的藍本(程序)互不相同, 則仍以程序(藍本)的名字呼喚每個計算并無明顯不則仍以程序(藍本)的名字呼喚每個計算并無明顯不 妥。但是,如果有某兩道程序(計算)運行的藍本(妥。但是,如果有某兩道程序(計算)運行的藍本( 程序、步驟)相同,只是加工處理的數(shù)據(jù)(原料)不程序、步驟)相同,只是加工處理的數(shù)據(jù)(原料)不 同,則稱這兩個計算是一個程序或兩個程序均自相矛同,則稱這兩個計算是一個程序或兩個程序均自相矛 盾。因為問題的實質(zhì)是一個程序(藍本)對應(yīng)了兩個盾。因為問題的實質(zhì)是一個程序(藍本)對應(yīng)了兩個 或多個計算,程序與
4、計算之間出現(xiàn)了一對多的關(guān)系。或多個計算,程序與計算之間出現(xiàn)了一對多的關(guān)系。 以以“程序程序”稱呼稱呼“計算計算”產(chǎn)生了混淆,由此提出了產(chǎn)生了混淆,由此提出了“ 進程進程”這個名詞來稱呼這個名詞來稱呼“計算計算”。 1.1.操作系統(tǒng)為什么要引入進程概念操作系統(tǒng)為什么要引入進程概念? ? 一是刻畫系統(tǒng)的動態(tài)性,發(fā)揮系統(tǒng)的并發(fā)性,提高資源利用 率。在多道程序設(shè)計環(huán)境下,程序可以并發(fā)執(zhí)行,一個程序 的任意兩條指令之間都可能發(fā)生隨機事件而引發(fā)程序切換。 因而,每個程序的執(zhí)行都可能不是連續(xù)的而是走走停停。 二是它能解決系統(tǒng)的“共享性”,正確描述程序的執(zhí)行狀態(tài)。 幾個概念: (1)“可再入可再入”程序程序-
5、是指能被多個程序同時調(diào)用的程序。是指能被多個程序同時調(diào)用的程序。 (2)“可再用可再用”程序程序-被調(diào)用過程中自身會被修改,在調(diào)被調(diào)用過程中自身會被修改,在調(diào) 用它的程序退出之前不允許其他程序來調(diào)用它。用它的程序退出之前不允許其他程序來調(diào)用它。 (3)“可再入可再入”程序具有的性質(zhì)程序具有的性質(zhì):它是純代碼,即它在執(zhí)行 中自身不被改變;調(diào)用它的各程序應(yīng)提供工作區(qū),因此, “可再入”程序可被多個程序同時調(diào)用。 “可再入” 程序舉例 編譯程序P編譯源程序甲,從A點開始工作,執(zhí)行到B點時需 將信息記到磁盤上,且程序P在B點等待磁盤傳輸。 為提高系統(tǒng)效率,利用編譯程序的“可再入”性,讓編譯程 序P再為
6、源程序乙進行編譯,仍從A點開始工作。 現(xiàn)在怎樣來描述編譯程序P的狀態(tài)呢? 稱它為在B點等待磁盤傳輸狀態(tài),還是稱它為正在從A點開 始執(zhí)行的狀態(tài)? 把編譯程序P,與服務(wù)對象聯(lián)系起來,P為甲服務(wù)就說構(gòu)成進 程P甲,P為乙服務(wù)則構(gòu)成進程P乙。 兩個進程雖共享程序P,但它們可同時執(zhí)行且彼此按各自的 速度獨立執(zhí)行??梢姵绦蚺c計算(程序的執(zhí)行)不再一一對應(yīng), 進程是一個既能用來共享資源,又能描述程序并發(fā)執(zhí)行過程 的一個基本單位。 2.進程的概念進程的概念 進程進程(process)是一個可并發(fā)執(zhí)行的具有獨立功能的程序關(guān)于 某個數(shù)據(jù)集合的一次執(zhí)行過程,也是操作系統(tǒng)進行資源分配 和保護的基本單位。 有些系統(tǒng)稱進
7、程為“任務(wù)”(task)或“活動”(active)。 3.進程的屬性進程的屬性 (進程與程序比較進程與程序比較) (1)結(jié)構(gòu)性:結(jié)構(gòu)性:進程包含了數(shù)據(jù)集合和運行于其上的程序。每個 進程至少包含三個組成要素:程序塊、數(shù)據(jù)塊和進程控制塊。 (2)共享性共享性:同一程序運行于不同數(shù)據(jù)集合上時,構(gòu)成不同的 進程。多個不同的進程可以共享相同的程序,所以進程和程 序不是一一對應(yīng)的。 (函數(shù)的遞歸調(diào)用也是不同數(shù)據(jù)共享相同 函數(shù),在這一點上類似于進程,但不相同,因為函數(shù)不是進程) (3)動態(tài)性:動態(tài)性:進程由創(chuàng)建而產(chǎn)生,由調(diào)度而執(zhí)行,由撤銷而消 亡。程序是一組有序指令序列,作為一種系統(tǒng)資源是永久存 在的。 (
8、4)獨立性:獨立性:進程是系統(tǒng)中資源分配和保護的基本單位,也是 系統(tǒng)調(diào)度的獨立單位(單線程進程)。 (5)制約性制約性:并發(fā)進程之間存在著制約關(guān)系,進程在進行的關(guān) 鍵點上需要相互等待或互通消息,以保證程序執(zhí)行的可再現(xiàn) 性和計算結(jié)果的唯一性。 (6)并發(fā)性:并發(fā)性:在一個單處理器系統(tǒng)環(huán)境下,各個進程輪流占用 處理器 。 1.1.三態(tài)模型三態(tài)模型 (1)(1)進程的三種基本狀態(tài)進程的三種基本狀態(tài) 一個進程從創(chuàng)建而產(chǎn)生至撤銷而消亡的整個生命周期,可用一 組狀態(tài)加以刻劃,按進程在執(zhí)行過程中的狀況至少定義三種不 同的進程狀態(tài): 運行態(tài)(運行態(tài)(runningrunning):進程占有處理器正在運行。 就
9、緒態(tài)(就緒態(tài)(readyready):進程具備運行條件,等待系統(tǒng)分配處理器 以便運行。 等待態(tài)(等待態(tài)(waitwait):又稱為阻塞(blocked)態(tài)或睡眠(sleep) 態(tài),進程不具備運行條件,正在等待某個事件的完成。 通常,當(dāng)一個進程創(chuàng)建后,就處于就緒狀態(tài)。每個進程在執(zhí)行 過程中,任一時刻當(dāng)且僅當(dāng)處于上述三種狀態(tài)之一。在一個進 程執(zhí)行過程中,它的狀態(tài)將會發(fā)生變化。 (2)引起進程狀態(tài)轉(zhuǎn)換的具體原因引起進程狀態(tài)轉(zhuǎn)換的具體原因 運行態(tài)運行態(tài)等待態(tài):等待態(tài):等待使用資源或某事件發(fā)生 ; 等待態(tài)等待態(tài)就緒態(tài):就緒態(tài):資源得到滿足或事件發(fā)生 ; 運行態(tài)運行態(tài)就緒態(tài)就緒態(tài):運行時間片到;出現(xiàn)有更高
10、優(yōu)先權(quán)進程。 就緒態(tài)就緒態(tài)運行態(tài)運行態(tài):CPU空閑時選擇一個就緒進程。 運行態(tài)運行態(tài) 就緒態(tài)就緒態(tài)等待態(tài)等待態(tài) 選中 落選 出現(xiàn)等待事件 等待事件結(jié)束 進程三態(tài)模型及其狀態(tài)轉(zhuǎn)換 2.2.五態(tài)模型五態(tài)模型 五態(tài)模型在三態(tài)模型的基礎(chǔ)上,引進了新建態(tài)和終止 態(tài)。 新建態(tài)新建態(tài)-對應(yīng)進程剛被創(chuàng)建的狀態(tài)。對應(yīng)進程剛被創(chuàng)建的狀態(tài)。為一個新進 程創(chuàng)建必要的管理信息,它并沒有被提交執(zhí)行,而是 在等待操作系統(tǒng)完成創(chuàng)建進程的必要操作。 終止態(tài)終止態(tài)-進程的終止。進程的終止。首先,等待操作系統(tǒng)進 行善后,然后,退出主存。進入終止態(tài)的進程不再執(zhí) 行,但依然臨時保留在系統(tǒng)中等待善后。一旦其他進 程完成了對終止態(tài)進程的信
11、息抽取之后,系統(tǒng)將刪除 該進程。 運行態(tài) 就緒態(tài)等待態(tài) 選 中落 選 出現(xiàn)等待事件 等待事件結(jié)束 新建態(tài)終止態(tài) 進程五態(tài)模型及其轉(zhuǎn)換進程五態(tài)模型及其轉(zhuǎn)換 進程狀態(tài)轉(zhuǎn)換的具體原因進程狀態(tài)轉(zhuǎn)換的具體原因 NULLNULL新建態(tài):新建態(tài):創(chuàng)建一個子進程。創(chuàng)建一個子進程。 新建態(tài)新建態(tài)就緒態(tài)就緒態(tài):系統(tǒng)完成了進程創(chuàng)建操作,且當(dāng)前系統(tǒng)的系統(tǒng)完成了進程創(chuàng)建操作,且當(dāng)前系統(tǒng)的 性能和內(nèi)存的容量均允許。性能和內(nèi)存的容量均允許。 運行態(tài)運行態(tài)終止態(tài)終止態(tài):一個進程到達自然結(jié)束點,或出現(xiàn)了無法一個進程到達自然結(jié)束點,或出現(xiàn)了無法 克服的錯誤,或被操作系統(tǒng)所終結(jié),或被其他有終止權(quán)的進程克服的錯誤,或被操作系統(tǒng)所終結(jié)
12、,或被其他有終止權(quán)的進程 所終結(jié)。所終結(jié)。 終止態(tài)終止態(tài)NULLNULL:完成善后操作。完成善后操作。 就緒態(tài)就緒態(tài)終止態(tài):終止態(tài):某些操作系統(tǒng)允許父進程終結(jié)子進程。某些操作系統(tǒng)允許父進程終結(jié)子進程。 等待態(tài)等待態(tài)終止態(tài):終止態(tài):某些操作系統(tǒng)允許父進程終結(jié)子進程。某些操作系統(tǒng)允許父進程終結(jié)子進程。 3.3.具有掛起功能系統(tǒng)的進程狀態(tài)及其轉(zhuǎn)換具有掛起功能系統(tǒng)的進程狀態(tài)及其轉(zhuǎn)換 (1)為什么要有“掛起”狀態(tài)? 由于進程的不斷創(chuàng)建,系統(tǒng)資源已不能滿足進程運行的要求,由于進程的不斷創(chuàng)建,系統(tǒng)資源已不能滿足進程運行的要求, 就必須把某些進程掛起(就必須把某些進程掛起(suspendsuspend),對換
13、到磁盤鏡像區(qū)中,),對換到磁盤鏡像區(qū)中, 暫時不參與進程調(diào)度,起到平滑系統(tǒng)操作負荷的目的。暫時不參與進程調(diào)度,起到平滑系統(tǒng)操作負荷的目的。 (2)引起進程掛起的主要原因 系統(tǒng)中的進程均處于等待狀態(tài),需要把一些阻塞進程對換出系統(tǒng)中的進程均處于等待狀態(tài),需要把一些阻塞進程對換出 去,騰出足夠內(nèi)存裝入就緒進程運行。去,騰出足夠內(nèi)存裝入就緒進程運行。 進程競爭資源,導(dǎo)致系統(tǒng)資源不足,負荷過重,需要掛起部進程競爭資源,導(dǎo)致系統(tǒng)資源不足,負荷過重,需要掛起部 分進程以調(diào)整系統(tǒng)負荷分進程以調(diào)整系統(tǒng)負荷, ,保證系統(tǒng)的實時性或讓系統(tǒng)正常運行。保證系統(tǒng)的實時性或讓系統(tǒng)正常運行。 定期執(zhí)行的進程(如審計、監(jiān)控、記
14、賬程序)對換出去,以定期執(zhí)行的進程(如審計、監(jiān)控、記賬程序)對換出去,以 減輕系統(tǒng)負荷。減輕系統(tǒng)負荷。 用戶要求掛起自己的進程,以便進行某些調(diào)試、檢查和改正。用戶要求掛起自己的進程,以便進行某些調(diào)試、檢查和改正。 父進程要求掛起后代進程,以進行某些檢查和改正。父進程要求掛起后代進程,以進行某些檢查和改正。 操作系統(tǒng)需要掛起某些進程,檢查運行中資源使用情況,以操作系統(tǒng)需要掛起某些進程,檢查運行中資源使用情況,以 改善系統(tǒng)性能改善系統(tǒng)性能; ;或當(dāng)系統(tǒng)出現(xiàn)故障或某些功能受到破壞時,需或當(dāng)系統(tǒng)出現(xiàn)故障或某些功能受到破壞時,需 要掛起某些進程以排除故障。要掛起某些進程以排除故障。 (3)(3)進程增加
15、的兩個新狀態(tài)進程增加的兩個新狀態(tài) 掛起就緒態(tài)(掛起就緒態(tài)(ready suspendready suspend):表明進程具備運行條件但目):表明進程具備運行條件但目 前在輔助存儲器中,當(dāng)它被對換到主存才能被調(diào)度執(zhí)行。前在輔助存儲器中,當(dāng)它被對換到主存才能被調(diào)度執(zhí)行。 掛起等待態(tài)(掛起等待態(tài)(blocked suspendblocked suspend):表明進程正在等待某一個):表明進程正在等待某一個 事件且在輔助存儲器中。事件且在輔助存儲器中。 掛起 等待事件結(jié)束 出現(xiàn)等 待事件 解除 掛起 掛起 落選 選中 運行態(tài) 就緒態(tài) 等待事件結(jié)束 終止態(tài) 新建態(tài) 掛起就緒 態(tài) 解除 掛起 掛起 掛
16、起等待 態(tài) 等待態(tài) 提交 提交 具有掛起功能的進程狀態(tài)及轉(zhuǎn)換 (4)(4)引起進程狀態(tài)轉(zhuǎn)換的具體原因引起進程狀態(tài)轉(zhuǎn)換的具體原因 等待態(tài)等待態(tài)掛起等待態(tài):掛起等待態(tài):當(dāng)前不存在就緒進程,至少一個等待 態(tài)進程將被對換出去成為掛起等待態(tài); 掛起等待態(tài)掛起等待態(tài)掛起就緒態(tài):掛起就緒態(tài):引起進程等待的事件發(fā)生之后, 相應(yīng)的掛起等待態(tài)進程將轉(zhuǎn)換為掛起就緒態(tài)。 掛起就緒態(tài)掛起就緒態(tài)就緒態(tài):就緒態(tài):內(nèi)存中沒有就緒態(tài)進程,或掛起就緒 態(tài)進程具有比就緒態(tài)進程更高的優(yōu)先級,將把掛起就緒態(tài)進 程轉(zhuǎn)換成就緒態(tài)。 就緒態(tài)就緒態(tài)掛起就緒態(tài):掛起就緒態(tài):系統(tǒng)根據(jù)當(dāng)前資源狀況和性能要求, 決定把就緒態(tài)進程對換出去成為掛起就緒態(tài)
17、。 掛起等待態(tài)掛起等待態(tài)等待態(tài):等待態(tài):當(dāng)一個進程等待一個事件時,原則上 不需要把它調(diào)入內(nèi)存。但是,當(dāng)一個進程退出后,主存已經(jīng) 有了足夠的自由空間,而某個掛起等待態(tài)進程具有較高的優(yōu) 先級并且操作系統(tǒng)已經(jīng)得知導(dǎo)致它阻塞的事件即將結(jié)束,便 可能發(fā)生這一狀態(tài)變化。 運行態(tài)運行態(tài)掛起就緒態(tài):掛起就緒態(tài):當(dāng)一個高優(yōu)先級掛起等待進程的等待 事件結(jié)束后,它將搶占CPU,而此時主存不夠,從而可能導(dǎo)致 正在運行的進程轉(zhuǎn)化為掛起就緒態(tài)。運行態(tài)的進程也可以自 己掛起自己。 新建態(tài)新建態(tài)掛起就緒態(tài):掛起就緒態(tài):根據(jù)系統(tǒng)當(dāng)前資源狀況和性能要求, 可以將新建進程對換出去成為掛起就緒態(tài)。 注意:掛起的進程將不參與低級調(diào)度直
18、到它們被對注意:掛起的進程將不參與低級調(diào)度直到它們被對 換進主存。換進主存。 (5)掛起進程具有如下特征掛起進程具有如下特征 該進程不能立即被執(zhí)行。 掛起進程可能會等待事件,但所等待事件是獨立于掛起條件的, 事件結(jié)束并不能導(dǎo)致進程具備執(zhí)行條件。 進程進入掛起狀態(tài)是由于操作系統(tǒng)、父進程或進程本身阻止它 的運行。 結(jié)束進程掛起狀態(tài)的命令只能通過操作系統(tǒng)或父進程發(fā)出。 進程映像的組成進程映像的組成 進程映像即進程實體,主要包括: 進程程序塊:即被執(zhí)行的程序,規(guī)定了進程一次運行應(yīng)完成的 功能。通常它是純代碼,可被多個進程共享。 進程數(shù)據(jù)塊:是進程的私有地址空間,存放各種私有數(shù)據(jù),用 戶棧也要在數(shù)據(jù)塊中
19、開辟,用以函數(shù)調(diào)用時存放棧幀、局部變 量等參數(shù)。 系統(tǒng)核心棧:每一個進程都將捆綁一個核心堆棧,進程在核心 態(tài)工作時使用,用來保存中斷/異?,F(xiàn)場,保護函數(shù)調(diào)用返回的 參數(shù)和返回地址。 進程控制塊:每一個進程都將捆綁一個進程控制塊,用來存儲 進程的標(biāo)志信息、現(xiàn)場信息和控制信息。進程創(chuàng)建時建立進程 控制塊,進程撤銷時回收進程控制塊,進程控制塊與進程一一 對應(yīng)。 總結(jié): 進程有四個要素組成:進程控制塊、程序塊、數(shù)據(jù)塊、核心棧。 如果只具有前三個要素,而共享內(nèi)存空間,則稱為“用戶線 程”; 如果完全沒有用戶空間,則稱為“內(nèi)核線程”。 進程上下文(進程上下文(contextcontext)-操作系統(tǒng)中把進
20、程物理實體和支持 進程運行的環(huán)境合稱為進程上下文(進程上下文(contextcontext)。 當(dāng)系統(tǒng)調(diào)度新進程占有處理器時,新老進程隨之發(fā)生上下文 切換。 進程的運行被認(rèn)為是在上下文中執(zhí)行。 (2)(2)進程上下文的三個組成部分進程上下文的三個組成部分 用戶級上下文用戶級上下文(user-level-context)(user-level-context):由用戶進程的正文(程 序塊)、數(shù)據(jù)塊(含共享數(shù)據(jù)塊)和用戶堆棧組成。它們占用進 程的虛擬地址空間。 寄存器上下文寄存器上下文(register-level-context):由程序狀態(tài)字(PSW) 指令計數(shù)器、控制寄存器、通用寄存器、棧指
21、針等組成。 系統(tǒng)級上下文系統(tǒng)級上下文(system-level-context)(system-level-context):包括進程控制塊、內(nèi) 存管理信息、核心棧等組成。 2.2.進程控制塊進程控制塊 每個進程都有一個也只有一個進程控制塊PCB(Process Control Block) 進程控制塊PCB是操作系統(tǒng)用于記錄和刻劃進程狀態(tài)及有關(guān)信 息的數(shù)據(jù)結(jié)構(gòu),也是操作系統(tǒng)掌握進程的唯一資料結(jié)構(gòu),是操 作系統(tǒng)控制和管理進程的主要依據(jù)。它包括了進程執(zhí)行時的情 況,以及進程讓出處理器后所處的狀態(tài)、斷點等信息。 進程控制塊包含三類信息:標(biāo)識信息、現(xiàn)場信息、控制信息 標(biāo)識信息:用于唯一地標(biāo)識一個進程
22、,常常分為由用戶使用 的外部標(biāo)識符和被系統(tǒng)使用的內(nèi)部標(biāo)識號。幾乎所有操作系統(tǒng) 中進程都被賦予一個唯一的、內(nèi)部使用的數(shù)值型的進程號,操 作系統(tǒng)的其他控制表可以通過進程號來交叉引用進程控制表。 常用的標(biāo)識信息有進程標(biāo)識符、父進程的標(biāo)識符、用戶進程名、 用戶組名等。 現(xiàn)場信息:用于保留進程運行時存放在處理器現(xiàn)場中的各種信 息,進程讓出處理器時必須把處理器現(xiàn)場信息保存到PCB中, 當(dāng)該進程重新恢復(fù)運行時也應(yīng)恢復(fù)處理器現(xiàn)場?,F(xiàn)場信息包括: 通用寄存器內(nèi)容、控制寄存器(如PSW寄存器的)內(nèi)容、用戶 堆棧指針、系統(tǒng)堆棧指針等。 控制信息:常用的控制信息包括: 1)進程調(diào)度相關(guān)信息,如進程狀態(tài)、等待事件和等待
23、原因、 進程優(yōu)先級、隊列指引元等; 2)進程組成信息,如正文段指針、數(shù)據(jù)段指針; 3)進程間通信相關(guān)信息,如消息隊列指針、信號量等互斥和 同步機制; 4)進程在二級(輔助)存儲器內(nèi)的地址信息; 5)CPU資源的占用和使用信息,如時間片余量、進程己占用 CPU的時間、進程己執(zhí)行時間總和,記帳信息; 6)進程特權(quán)信息,如在內(nèi)存訪問權(quán)限和處理器狀態(tài)方面的特 權(quán); 7)資源清單,包括進程所需全部資源、已經(jīng)分得的資源,如 主存資源、I/O設(shè)備、打開文件表等。 進程控制塊的集合事實上定義了一個操作系統(tǒng)的當(dāng)前狀態(tài)。進程控制塊的集合事實上定義了一個操作系統(tǒng)的當(dāng)前狀態(tài)。 進程控制塊的使用權(quán)或修改權(quán)均屬于操作系統(tǒng)
24、程序,包括調(diào)度進程控制塊的使用權(quán)或修改權(quán)均屬于操作系統(tǒng)程序,包括調(diào)度 程序、資源分配程序、中斷處理程序、性能監(jiān)視和分析程序等。程序、資源分配程序、中斷處理程序、性能監(jiān)視和分析程序等。 操作系統(tǒng)是根據(jù)操作系統(tǒng)是根據(jù)PCBPCB來對并發(fā)執(zhí)行的進程進行控制和管理的。來對并發(fā)執(zhí)行的進程進行控制和管理的。 3.進程隊列及其管理 處于同一狀態(tài)的所有PCB鏈接在一起的數(shù)據(jù)結(jié)構(gòu)稱為進程隊列 (Process Queues)。 進程隊列有三種組織方式:線性方式、鏈接方式、索引方式 (1)線性方式:操作系統(tǒng)根據(jù)系統(tǒng)內(nèi)進程的最大數(shù)目,靜態(tài) 地分配主存中地某塊空間,所有進程的PCB都組織在一個線性 表里。 (2)鏈接
25、方式:通過PCB中的鏈接指針將其鏈接成隊列。 單向鏈接:在每一個PCB中設(shè)置一個鏈接指針,指出本隊 列中緊隨其后的下一個PCB在PCB表中的編號或者地址。 雙向鏈接時:在每一個PCB中設(shè)置兩個鏈接指針,前向鏈 接指針指出本隊列中上一個PCB在PCB表中的編號或者地 址;后向鏈接指針指出本隊列中緊隨其后的下一個PCB在 PCB表中的編號或者地址。 為了標(biāo)志和識別隊列,每一個隊列均設(shè)置隊列標(biāo)志,存放于內(nèi)核空 間里。 單向鏈接的隊列標(biāo)志指針指向隊列中第一個PCB在PCB表中的編 號或者地址; 雙向鏈接的前向隊列標(biāo)志指針指向隊列中第一個PCB在PCB表中 的編號或者地址;后向隊列標(biāo)志指針隊列中最后一個
26、PCB在PCB表 中的編號或者地址; P99,圖2.14 不同狀態(tài)的進程可以排成不同的隊列,如運行隊列、就緒隊列、等 待隊列: 運行隊列只有一個進程; 就緒隊列可以按照優(yōu)先級或者先進先出的原則排隊,也可以按 照進程優(yōu)先級的高低分成多個就緒隊列; 等待隊列通常有多個,對應(yīng)不同的等待狀態(tài); 還可以將空閑PCB鏈接成自由隊列以便使用。 一個進程從所在隊列退出的事件叫做出隊;一個進程排入指定隊列 的事件叫做入隊。 處理器調(diào)度中管理進程出隊入隊的模塊叫做隊列管理模塊。 (3)索引方式:是線性方式的一種改進。 利用索引表記錄不同狀態(tài)的PCB地址,系統(tǒng)建立若干索引表; 狀態(tài)相同的PCB組織在同一張索引表中,
27、每個索引表的表目 中存放PCB在PCB表中的編號或者地址; 各索引表在主存中的起始地址放在內(nèi)核的專用指針單元里。 P99,圖2.15 Linux進程鏈表(略)。 進程上下文切換 中斷(異常)是激活操作系統(tǒng)的唯一方法,它暫時中止當(dāng)前運 行進程的執(zhí)行,把處理器切換到操作系統(tǒng)的控制之下。當(dāng)操作 系統(tǒng)獲得了處理器的控制權(quán)之后,它就可以實現(xiàn)進程切換,所 以,進程切換必定在核心態(tài)而不是用戶態(tài)下發(fā)生。 進程切換是讓處于運行態(tài)的進程中斷運行,讓出處理器,這時 要做一次進程上下文切換、即保存老進程狀態(tài)而裝入被保護了 的新進程的狀態(tài),以便新進程運行。 進程切換時,一個進程讓出處理器,其寄存器上下文將被保 存到系統(tǒng)
28、級上下文的相應(yīng)的現(xiàn)場信息位置,這時內(nèi)核就把這些 信息壓入系統(tǒng)棧的一個上下文層。當(dāng)內(nèi)核處理中斷返回,或一 個進程完成其系統(tǒng)調(diào)用返回用戶態(tài),或內(nèi)核進行上下文切換時, 內(nèi)核就從系統(tǒng)棧彈出一個上下文層。因此,上下文的切換總會 引起上下文的壓入和彈出堆棧。 允許發(fā)生進程上下文切換的四種情況允許發(fā)生進程上下文切換的四種情況 (1)當(dāng)進程進入等待態(tài)時; (2)當(dāng)進程完成其系統(tǒng)調(diào)用返回用戶態(tài),但不是最有資格獲得 CPU時; (3)當(dāng)內(nèi)核完成中斷處理,進程返回用戶態(tài)但不是最有資格獲 得CPU時; (4)當(dāng)進程執(zhí)行結(jié)束時。 進程切換的步驟進程切換的步驟 保存被中斷進程的處理器現(xiàn)場信息。保存被中斷進程的處理器現(xiàn)場信
29、息。 修改被中斷進程的進程控制塊的有關(guān)信息,如進程狀態(tài)等。修改被中斷進程的進程控制塊的有關(guān)信息,如進程狀態(tài)等。 把被中斷進程的進程控制塊加入有關(guān)隊列。把被中斷進程的進程控制塊加入有關(guān)隊列。 選擇下一個占有處理器運行的進程。選擇下一個占有處理器運行的進程。 修改被選中進程的進程控制塊的有關(guān)信息。修改被選中進程的進程控制塊的有關(guān)信息。 根據(jù)被選中進程設(shè)置操作系統(tǒng)用到的地址轉(zhuǎn)換和存儲保護信根據(jù)被選中進程設(shè)置操作系統(tǒng)用到的地址轉(zhuǎn)換和存儲保護信 息。息。 根據(jù)被選中進程的上下文信息恢復(fù)處理器現(xiàn)場根據(jù)被選中進程的上下文信息恢復(fù)處理器現(xiàn)場。 注意,注意,一般情況下,一般情況下,用戶態(tài)到核心態(tài)或者核心態(tài)到用用
30、戶態(tài)到核心態(tài)或者核心態(tài)到用 戶態(tài)的轉(zhuǎn)變是戶態(tài)的轉(zhuǎn)變是CPUCPU模式的改變,而不是進程上下文切模式的改變,而不是進程上下文切 換。換。 2. 2. 進程上下文切換的時機進程上下文切換的時機 進程在運行過程中執(zhí)行系統(tǒng)調(diào)用,產(chǎn)生中斷或者異常時,操 作系統(tǒng)從當(dāng)前進程手里獲得CPU控制權(quán),此后進程切換可以在 任意時刻開始。 系統(tǒng)發(fā)現(xiàn)當(dāng)前進程的時間片耗盡,或者執(zhí)行一個阻塞式系統(tǒng) 調(diào)用,都會導(dǎo)致當(dāng)前進程讓出處理器,請求重新調(diào)度,內(nèi)核轉(zhuǎn) 向低級調(diào)度程序運行,當(dāng)?shù)图壵{(diào)度程序選中新的就緒進程之后, 就會執(zhí)行進程上下文切換。 注意:低級調(diào)度和進程切換并不一定總是連續(xù)發(fā)生!低級調(diào)度和進程切換并不一定總是連續(xù)發(fā)生!
31、在中斷處理程序工作期間,來了一個更高優(yōu)先級的中斷,在中斷處理程序工作期間,來了一個更高優(yōu)先級的中斷, 當(dāng)這個高優(yōu)先級中斷處理結(jié)束后,不會馬上進行進程切換;當(dāng)這個高優(yōu)先級中斷處理結(jié)束后,不會馬上進行進程切換; 在各種原語操作、現(xiàn)場保護和恢復(fù)過程中,即使發(fā)生請在各種原語操作、現(xiàn)場保護和恢復(fù)過程中,即使發(fā)生請 求低級調(diào)度的事件,也不能立刻執(zhí)行低級調(diào)度和進行進程求低級調(diào)度的事件,也不能立刻執(zhí)行低級調(diào)度和進行進程 切換。切換。 在不能夠立刻進行調(diào)度和切換的情況下,系統(tǒng)采用置請求調(diào)在不能夠立刻進行調(diào)度和切換的情況下,系統(tǒng)采用置請求調(diào) 度,延遲至敏感性操作完成之后才進行低級調(diào)度和進程切換。度,延遲至敏感性操
32、作完成之后才進行低級調(diào)度和進程切換。 3. 3. 處理器模式切換處理器模式切換 當(dāng)中斷發(fā)生的時候,暫時中斷正在執(zhí)行的用戶進程,把進程從 用戶狀態(tài)切換到內(nèi)核狀態(tài),去執(zhí)行操作系統(tǒng)例行程序以獲得服 務(wù),這就是一次模式切換。此時,該進程仍在自己的上下文中 執(zhí)行,僅僅模式變了。內(nèi)核在被中斷了的進程的上下文中對這 個中斷事件作處理,即使該中斷事件可能不是此進程引起的。 被中斷的進程可以是正在用戶態(tài)下執(zhí)行的,也可以是正在核心 態(tài)下執(zhí)行的,內(nèi)核都要保留足夠信息以便在后來能恢復(fù)被中斷 了的進程執(zhí)行。 模式切換的步驟模式切換的步驟 保存被中斷進程的處理器現(xiàn)場信息。 把用戶狀態(tài)切換到內(nèi)核狀態(tài),以便執(zhí)行中斷處理程序。
33、 如果處理中斷,可以根據(jù)規(guī)定的中斷級別設(shè)置中斷屏蔽位。 根據(jù)系統(tǒng)調(diào)用號或者中斷號,從系統(tǒng)調(diào)用表或者中斷入口地 址表中找到系統(tǒng)服務(wù)程序或者中斷處理程序的地址。 模式切換和進程切換的聯(lián)系與區(qū)別模式切換和進程切換的聯(lián)系與區(qū)別 模式切換不一定會引起進程狀態(tài)的轉(zhuǎn)換,也不一定 引起進程切換。 在完成系統(tǒng)調(diào)用服務(wù)或者中斷處理之后,可通過模 式切換來恢復(fù)被中斷進程的運行。 CPU上所執(zhí)行的進程在任意時刻必須處在三個活動范 圍之內(nèi): 用戶空間中,處于進程上下文,用戶進程在運行, 使用用戶棧; 內(nèi)核空間中,處于進程上下文,內(nèi)核代表某進程 在運行,使用核心棧 內(nèi)核空間中,處于中斷上下文,與進程無關(guān),中 斷服務(wù)程序正
34、在處理特定的中斷。(Intel x86不 提供中斷專用棧,使用核心棧)。 P102 Unix/Linux的進程切換與模式切換 中斷是激活操作系統(tǒng)的唯一途徑. 在核心態(tài)下,處理機執(zhí)行用戶程序指令,在核心態(tài)下,處理機執(zhí) 行操作系統(tǒng)內(nèi)核代碼.在計算機中,有一些操作需要委托操作系 統(tǒng)代為執(zhí)行,一些操作用戶程序可以自行完成. 可以將操作系統(tǒng)比做國家行政機構(gòu)(如法庭等職能部門),用戶 程序比做百姓、公民,有一些事情百姓可自己做主辦理,如衣食 住行;另有一些事情必須通過國家行政機關(guān)辦理,如打官司、辦 理身份證等.事情在國家行政機關(guān)辦理的過程相當(dāng)于處于核心 態(tài),百姓自己辦理的部分相當(dāng)于處于用戶態(tài). 喚醒 核心
35、態(tài)運行 系統(tǒng)調(diào)用 或中斷(隱 含模式切 換) 模式切換 用戶態(tài)運行 等待狀態(tài)就緒狀態(tài) 發(fā)生事件調(diào)度進程 中斷、中斷 返回 允許的上下 文切換 進程上下文切換和模式切換 處理器管理的一個主要工作是對進程的控制,包括:處理器管理的一個主要工作是對進程的控制,包括:創(chuàng)建進程、創(chuàng)建進程、 阻塞進程、喚醒進程、掛起進程、激活進程、終止進程和撤銷阻塞進程、喚醒進程、掛起進程、激活進程、終止進程和撤銷 進程進程等。等。 這些控制和管理功能是由這些控制和管理功能是由操作系統(tǒng)中的原語來實現(xiàn)的。操作系統(tǒng)中的原語來實現(xiàn)的。 原語原語(Primitive)(Primitive)是在核心態(tài)下運行、完成系統(tǒng)特定功能的不
36、可分割過程。 原語和機器指令類似,其特點是執(zhí)行過程中不允許被中斷, 是一個不可分割的基本單位,原語的執(zhí)行是順序的而不可能是 并發(fā)的。 一種原語的實現(xiàn)方法是以系統(tǒng)調(diào)用方式提供原語接口,且采 用屏蔽中斷的方式來實現(xiàn)原語功能,以保證原語操作不被打斷 的特性。 原語和系統(tǒng)調(diào)用都使用訪管指令實現(xiàn),具有相同的調(diào) 用形式,但 原語由內(nèi)核實現(xiàn),系統(tǒng)調(diào)用由系統(tǒng)進程或系統(tǒng)服務(wù)器 實現(xiàn); 原語不可中斷,系統(tǒng)調(diào)用執(zhí)行時允許被中斷,甚至有 些操作系統(tǒng)中系統(tǒng)進程或系統(tǒng)服務(wù)器在用戶態(tài)運行。 通常情況下,原語提供給系統(tǒng)進程或系統(tǒng)服務(wù)器使用 (反之決不會形成調(diào)用關(guān)系),系統(tǒng)進程或系統(tǒng)服務(wù) 器提供系統(tǒng)調(diào)用給系統(tǒng)程序(和用戶)使用
37、,系統(tǒng)程 序提供高層功能給用戶使用。 部分進程控制原語:部分進程控制原語: 1.1.進程創(chuàng)建進程創(chuàng)建 (1)(1)進程創(chuàng)建的事件來源進程創(chuàng)建的事件來源 提交一個批處理作業(yè)。 在終端上一個交互式作業(yè)登錄。 操作系統(tǒng)創(chuàng)建一個服務(wù)進程。 存在的進程創(chuàng)建(孵化(spawn)新的進程。 生成其它進程的進程稱父進程(Parent Process), 被生成進程稱子進程(Child Process)、即一個父進 程可以創(chuàng)建子進程,從而形成樹形結(jié)構(gòu)。 (2)進程的創(chuàng)建過程 在主進程表中增加一項,并從PCB池中取一個空白PCB。 為新進程的進程映像分配地址空間。傳遞環(huán)境變量,構(gòu)造共 享地址空間。 為新進程分配資源,除內(nèi)存空間外,還有其他各種資源。 查找輔存,找到進程正文段并裝入到進程地址空間的正文區(qū)。 初始化進程控制塊(如狀態(tài)、PSW、棧等),為新進程分配 進程標(biāo)識符。 把進程加入就緒進程隊列,或直接將進程投入運行。 通知操作系統(tǒng)的某些模塊,如記賬程序、性能監(jiān)控程序。 實例實例 P104,Unix/Linux進程創(chuàng)建進程創(chuàng)建 Linux fork( ) 創(chuàng)建子進程但父子進程不共享內(nèi)容 Linux clone( ) 允許定義父子進程共享的內(nèi)容 Li
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《餐飲服務(wù)與管理》課件-教學(xué)課件:閩浙湘徽
- 2025年合作聯(lián)盟合同范本
- 腎小管性酸中毒的臨床護理
- 五年級數(shù)學(xué)下《分?jǐn)?shù)的基本性質(zhì)》公開課教學(xué)設(shè)計
- 三尖瓣畸形的臨床護理
- 2025勞動合同試用期限是多少個月
- 2025勞動合同范本【簡單】
- 《2025年光纖傳輸網(wǎng)絡(luò)建設(shè)合同》
- 2025年上海市各區(qū)高三二模語文試題匯編《文言文一》含答案
- 初中歷史金與南宋對峙課件-2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 2025年裝維智企工程師(三級)復(fù)習(xí)模擬100題及答案
- 國家管網(wǎng)集團西南管道昆明輸油氣分公司突發(fā)環(huán)境事件綜合應(yīng)急預(yù)案
- 施工現(xiàn)場臨時用電安全
- 停送電培訓(xùn)課件
- 醫(yī)院培訓(xùn)課件:《核心制度-護理值班和交接班制度》
- 解題秘籍05 圓的綜合問題(9種題型匯-總+專題訓(xùn)練)(解析版)-2025年中考數(shù)學(xué)重難點突破
- 無線網(wǎng)絡(luò)施工方案
- 電商平臺居間合同
- 阮樂器美術(shù)課件
- 中國大唐集團有限公司陸上風(fēng)電工程標(biāo)桿造價指標(biāo)(2023年)
- 2025年上半年赤峰新正電工技術(shù)服務(wù)限公司社會招聘66人(內(nèi)蒙古)易考易錯模擬試題(共500題)試卷后附參考答案
評論
0/150
提交評論