日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

操作系统(九)进程控制

發(fā)布時間:2025/3/15 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统(九)进程控制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2.1.3 進(jìn)程控制

目錄

2.1.3 進(jìn)程控制

2.1.3.1 基本概念

2.1.3.2 進(jìn)程創(chuàng)建原語

2.1.3.3 進(jìn)程終止原語

2.1.3.4 進(jìn)程的阻塞與喚醒

2.1.3.5 進(jìn)程的切換

2.1.3.6 小結(jié)?

?

2.1.3.1 基本概念

? 在書中,進(jìn)程控制的定義是這樣的:進(jìn)程控制是進(jìn)程管理中最基本的功能。它用于創(chuàng)建一個新進(jìn)程,終止一個已完成的進(jìn)程,或終止一個因出現(xiàn)某事件而使其無法運行下去的進(jìn)程,還可負(fù)責(zé)進(jìn)程運行中的狀態(tài)轉(zhuǎn)換。其實簡單來說,進(jìn)程控制就是為了實現(xiàn)進(jìn)程狀態(tài)之間的轉(zhuǎn)換。

??那么進(jìn)程控制是怎么實現(xiàn)的呢?進(jìn)程控制一般來說是通過OS內(nèi)核中的原語來實現(xiàn)的。原語(Primitive)是由若干條指令組成的,用于完成一定功能的一個過程,它是一個不可分割的基本單位,因此,在執(zhí)行過程中不允許被中斷。原子操作在管態(tài)下執(zhí)行,常駐內(nèi)存。

? 為什么要使用原子操作(一氣呵成)呢?如果系統(tǒng)對進(jìn)程的控制如不使用原語,就會造成其狀態(tài)的不確定性,從而達(dá)不到進(jìn)程控制的目的。比如說將執(zhí)行態(tài)變?yōu)樽枞麘B(tài)需要兩步,首先將state的值改變之后再將此PCB放在阻塞隊列,如果非原子操作,在改變state值之后發(fā)生中斷,那么在執(zhí)行隊列就出現(xiàn)了阻塞態(tài)的PCB,這是不正確的。

? 如何保證操作的原子性呢?這里我們需要引出兩個特權(quán)指令:開中斷指令和關(guān)中斷指令。顧名思義,開中斷就是將中斷打開,關(guān)中斷就是將中斷關(guān)閉。我們將要執(zhí)行的操作放在開中斷與關(guān)中斷指令的中間,CPU執(zhí)行了關(guān)中斷指令之后,就不再例行檢查中斷信號,直到執(zhí)行開中斷指令之后才會恢復(fù)檢查。這樣,關(guān)中斷、開中斷 之間的這些指令序列就是不可被中斷的,這就實現(xiàn)了“原子性”。

? ? ? ? ? ?

? 2.1.3.2 進(jìn)程創(chuàng)建原語

? ?引起進(jìn)程創(chuàng)建的事件:(1) 用戶登錄。在分時系統(tǒng)中,用戶在終端鍵入登錄命令后,如果是合法用戶,系統(tǒng)將為該終端建立一個進(jìn)程,并把它插入就緒隊列中。(2) 作業(yè)調(diào)度。在批處理系統(tǒng)中,當(dāng)作業(yè)調(diào)度程序按一定的算法調(diào)度到某作業(yè)時,便將該作業(yè)裝入內(nèi)存,為它分配必要的資源,并立即為它創(chuàng)建進(jìn)程,再插入就緒隊列中。(3) 提供服務(wù)。當(dāng)運行中的用戶程序提出某種請求后,系統(tǒng)將專門創(chuàng)建一個進(jìn)程來提供用戶所需要的服務(wù)。(4) 應(yīng)用請求。在上述三種情況下,都是由系統(tǒng)內(nèi)核為它創(chuàng)建一個新進(jìn)程;而第 4 類事件則是基于應(yīng)用進(jìn)程的需求,由它自己創(chuàng)建一個新進(jìn)程,以便使新進(jìn)程以并發(fā)運行方式完成特定任務(wù)。

? 進(jìn)程創(chuàng)建原語Create( )所執(zhí)行的步驟:?申請空白 PCB-->為新進(jìn)程分配資源-->初始化進(jìn)程控制塊-->將新進(jìn)程插入就緒隊列(創(chuàng)建態(tài)轉(zhuǎn)變?yōu)榫途w態(tài))

2.1.3.3 進(jìn)程終止原語

? 引起進(jìn)程終止的事件:1) 正常結(jié)束??2) 異常結(jié)束??3) 外界干預(yù)

? 進(jìn)程終止原語所執(zhí)行的步驟:(1) 根據(jù)被終止進(jìn)程的標(biāo)識符,從 PCB 集合中檢索出該進(jìn)程的 PCB,從中讀出該進(jìn)程的狀態(tài)。(2) 若被終止進(jìn)程正處于執(zhí)行狀態(tài),應(yīng)立即終止該進(jìn)程的執(zhí)行,并置調(diào)度標(biāo)志為真,用于指示該進(jìn)程被終止后應(yīng)重新進(jìn)行調(diào)度。(3) 若該進(jìn)程還有子孫進(jìn)程,還應(yīng)將其所有子孫進(jìn)程予以終止,以防它們成為不可控的進(jìn)程。(4) 將被終止進(jìn)程所擁有的全部資源,或者歸還給其父進(jìn)程,或者歸還給系統(tǒng)。(5) 將被終止進(jìn)程(PCB)從所在隊列(或鏈表)中移出,等待其他程序來搜集信息。(這樣就由其他狀態(tài)轉(zhuǎn)為終止態(tài)

2.1.3.4 進(jìn)程的阻塞與喚醒

? 引起進(jìn)程阻塞(block)的事件:需要等待系統(tǒng)分配資源、需要等待相互合作的進(jìn)程完成工作

? 進(jìn)程阻塞原語所執(zhí)行的步驟:找到相應(yīng)的PCB-->保護(hù)現(xiàn)場并將PCB設(shè)置為阻塞態(tài),暫停進(jìn)程的運行-->將PCB插入到相應(yīng)的隊列中(運行態(tài)變?yōu)樽枞麘B(tài))

? 引起進(jìn)程喚醒(wakeup)的事件:引起阻塞的事件已經(jīng)解決(何事引起的阻塞就要由何事進(jìn)行喚醒,所以阻塞原語與喚醒原語往往是成對出現(xiàn)的)。

? 進(jìn)程喚醒原語所執(zhí)行的步驟:把被阻塞的進(jìn)程從等待該事件的阻塞隊列中移出-->將其PCB 中的現(xiàn)行狀態(tài)由阻塞改為就緒-->然后再將該 PCB 插入到就緒隊列中。(阻塞態(tài)變?yōu)榫途w態(tài)

2.1.3.5 進(jìn)程的切換

? 進(jìn)程的切換我們可以理解為進(jìn)程的執(zhí)行態(tài)與就緒態(tài)之間的相互轉(zhuǎn)換,或者說不同進(jìn)程之間的切換。

? 引起切換的事件:當(dāng)前進(jìn)程時間片到、有更高優(yōu)先級的進(jìn)程到達(dá)、當(dāng)前進(jìn)程主動阻塞、當(dāng)前進(jìn)程終止。

? 切換原語執(zhí)行的步驟:將運行環(huán)境存儲到PCB-->將PCB更換存儲隊列選擇其他PCB執(zhí)行并更新其狀態(tài)-->根據(jù)PCB存儲的運行環(huán)境恢復(fù)其運行環(huán)境。

2.1.3.6 小結(jié)

? 本節(jié)各個狀態(tài)之間的轉(zhuǎn)換是比較多的,進(jìn)程控制會導(dǎo)致進(jìn)程狀態(tài)的轉(zhuǎn)換。無論哪個進(jìn)程控制原語,要做的無非三類事情:

1. 更新PCB中的信息(a. 所有的進(jìn)程控制原語一定都會修改進(jìn)程狀態(tài)標(biāo)志?b. 剝奪當(dāng)前運行進(jìn)程的CPU使用權(quán)必然需要保存其運行環(huán)境 c.某進(jìn)程開始運行前必然要恢復(fù)期運行環(huán)境)

2. 將PCB插入合適的隊列

3. 分配/回收資源 如下圖:

?

總結(jié)

以上是生活随笔為你收集整理的操作系统(九)进程控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。