国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

進(jìn)程控制:進(jìn)程的創(chuàng)建、終止、阻塞、喚醒和切換

2019-11-08 02:04:13
字體:
供稿:網(wǎng)友
進(jìn)程控制的主要功能是對系統(tǒng)中的所有進(jìn)程實(shí)施有效的管理,它具有創(chuàng)建新進(jìn)程、撤銷已有進(jìn)程、實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換等功能。在操作系統(tǒng)中,一般把進(jìn)程控制用的程序段稱為原語,原語的特點(diǎn)是執(zhí)行期間不允許中斷,它是一個(gè)不可分割的基本單位。

進(jìn)程的創(chuàng)建

允許一個(gè)進(jìn)程創(chuàng)建另一個(gè)進(jìn)程。此時(shí)創(chuàng)建者稱為父進(jìn)程,被創(chuàng)建的進(jìn)程稱為子進(jìn)程。子進(jìn)程可以繼承父進(jìn)程所擁有的資源。當(dāng)子進(jìn)程被撤銷時(shí),應(yīng)將其從父進(jìn)程那里獲得的資源歸還給父進(jìn)程。此外,在撤銷父進(jìn)程時(shí),也必須同時(shí)撤銷其所有的子進(jìn)程。在操作系統(tǒng)中,終端用戶登錄系統(tǒng)、作業(yè)調(diào)度、系統(tǒng)提供服務(wù)、用戶程序的應(yīng)用請求等都會(huì)引起進(jìn)程的創(chuàng)建。操作系統(tǒng)創(chuàng)建一個(gè)新進(jìn)程的過程如下(創(chuàng)建原語):為新進(jìn)程分配一個(gè)唯一的進(jìn)程標(biāo)識號,并申請一個(gè)空白的PCB(PCB是有限的)。若PCB申請失敗則創(chuàng)建失敗。為進(jìn)程分配資源,為新進(jìn)程的程序和數(shù)據(jù)、以及用戶棧分配必要的內(nèi)存空間(在PCB 中體現(xiàn))。注意:這里如果資源不足(比如內(nèi)存空間),并不是創(chuàng)建失敗,而是處于”等待狀態(tài)“,或稱為“阻塞狀態(tài)”,等待的是內(nèi)存這個(gè)資源。初始化PCB,主要包括初始化標(biāo)志信息、初始化處理機(jī)狀態(tài)信息和初始化處理機(jī)控制信息,以及設(shè)置進(jìn)程的優(yōu)先級等。如果進(jìn)程就緒隊(duì)列能夠接納新進(jìn)程,就將新進(jìn)程插入到就緒隊(duì)列,等待被調(diào)度運(yùn)行。

進(jìn)程的終止

引起進(jìn)程終止的事件主要有:正常結(jié)束,表示進(jìn)程的任務(wù)已經(jīng)完成和準(zhǔn)備退出運(yùn)行。異常結(jié)束是指進(jìn)程在運(yùn)行時(shí),發(fā)生了某種異常事件,使程序無法繼續(xù)運(yùn)行,如存儲(chǔ)區(qū)越界、保護(hù)錯(cuò)、非法指令、特權(quán)指令錯(cuò)、I/O故障等。外界干預(yù)是指進(jìn)程應(yīng)外界的請求而終止運(yùn)行,如操作員或操作系統(tǒng)干預(yù)、父進(jìn)程請求和父進(jìn)程終止。操作系統(tǒng)終止進(jìn)程的過程如下(撤銷原語):根據(jù)被終止進(jìn)程的標(biāo)識符,檢索PCB,從中讀出該進(jìn)程的狀態(tài)。若被終止進(jìn)程處于執(zhí)行狀態(tài),立即終止該進(jìn)程的執(zhí)行,將處理機(jī)資源分配給其他進(jìn)程。若該進(jìn)程還有子進(jìn)程,則應(yīng)將其所有子進(jìn)程終止。將該進(jìn)程所擁有的全部資源,或歸還給其父進(jìn)程或歸還給操作系統(tǒng)。將該P(yáng)CB從所在隊(duì)列(鏈表)中刪除。

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

正在執(zhí)行的進(jìn)程,由于期待的某些事件未發(fā)生,如請求系統(tǒng)資源失敗、等待某種操作的完成、新數(shù)據(jù)尚未到達(dá)或無新工作做等,則由系統(tǒng)自動(dòng)執(zhí)行阻塞原語(Block),使自己由運(yùn)行狀態(tài)變?yōu)樽枞麪顟B(tài)。可見,進(jìn)程的阻塞是進(jìn)程自身的一種主動(dòng)行為,也因此只有處于運(yùn)行態(tài)的進(jìn)程(獲得CPU),才可能將其轉(zhuǎn)為阻塞狀態(tài)。阻塞原語的執(zhí)行過程是:找到將要被阻塞進(jìn)程的標(biāo)識號對應(yīng)的PCB。若該進(jìn)程為運(yùn)行狀態(tài),則保護(hù)其現(xiàn)場,將其狀態(tài)轉(zhuǎn)為阻塞狀態(tài),停止運(yùn)行。把該P(yáng)CB插入到相應(yīng)事件的等待隊(duì)列中去。當(dāng)被阻塞進(jìn)程所期待的事件出現(xiàn)時(shí),如它所啟動(dòng)的I/O操作已完成或其所期待的數(shù)據(jù)已到達(dá),則由有關(guān)進(jìn)程(比如,提供數(shù)據(jù)的進(jìn)程)調(diào)用喚醒原語(Wakeup),將等待該事件的進(jìn)程喚醒。喚醒原語的執(zhí)行過程是:在該事件的等待隊(duì)列中找到相應(yīng)進(jìn)程的PCB。將其從等待隊(duì)列中移出,并置其狀態(tài)為就緒狀態(tài)。把該P(yáng)CB插入就緒隊(duì)列中,等待調(diào)度程序調(diào)度。需要注意的是,Block原語和Wakeup原語是一對作用剛好相反的原語,必須成對使用。 Block原語是由被阻塞進(jìn)程自我調(diào)用實(shí)現(xiàn)的,而Wakeup原語則是由一個(gè)與被喚醒進(jìn)程相合作或被其他相關(guān)的進(jìn)程調(diào)用實(shí)現(xiàn)的。

進(jìn)程切換

對于通常的進(jìn)程,其創(chuàng)建、撤銷以及要求由系統(tǒng)設(shè)備完成的I/O操作都是利用系統(tǒng)調(diào)用而進(jìn)入內(nèi)核,再由內(nèi)核中相應(yīng)處理程序予以完成的。進(jìn)程切換同樣是在內(nèi)核的支持下實(shí)現(xiàn)的,因此可以說,任何進(jìn)程都是在操作系統(tǒng)內(nèi)核的支持下運(yùn)行的,是與內(nèi)核緊密相關(guān)的。進(jìn)程切換是指處理機(jī)從一個(gè)進(jìn)程的運(yùn)行轉(zhuǎn)到另一個(gè)進(jìn)程上運(yùn)行,這個(gè)過程中,進(jìn)程的運(yùn)行環(huán)境產(chǎn)生了實(shí)質(zhì)性的變化。進(jìn)程切換的過程如下:保存處理機(jī)上下文,包括程序計(jì)數(shù)器和其他寄存器。更新PCB信息。把進(jìn)程的PCB移入相應(yīng)的隊(duì)列,如就緒、在某事件阻塞等隊(duì)列。選擇另一個(gè)進(jìn)程執(zhí)行,并更新其PCB。更新內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)。恢復(fù)處理機(jī)上下文。注意,進(jìn)程切換與處理機(jī)模式切換是不同的,模式切換時(shí),處理機(jī)邏輯上可能還在同一進(jìn)程中運(yùn)行。如果進(jìn)程因中斷或異常進(jìn)入到核心態(tài)運(yùn)行,執(zhí)行完后又回到用戶態(tài)剛被中斷的程序運(yùn)行,則操作系統(tǒng)只需恢復(fù)進(jìn)程進(jìn)入內(nèi)核時(shí)所保存的CPU現(xiàn)場,無需改變當(dāng)前進(jìn)程的環(huán)境信息。但若要切換進(jìn)程,當(dāng)前運(yùn)行進(jìn)程改變了,則當(dāng)前進(jìn)程的環(huán)境信息也需要改變。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岳西县| 繁峙县| 闻喜县| 大同市| 徐闻县| 石城县| 页游| 大邑县| 江津市| 正蓝旗| 资中县| 泰安市| 广水市| 定日县| 青海省| 曲水县| 望谟县| 泌阳县| 中牟县| 城步| 万源市| 秦皇岛市| 金昌市| 铁力市| 镇平县| 壶关县| 九江县| 武平县| 淮滨县| 江达县| 沾化县| 泗洪县| 婺源县| 吴桥县| 温宿县| 饶平县| 永和县| 潢川县| 武鸣县| 宜春市| 如东县|