操作系統(tǒng)--進(jìn)程

一 進(jìn)程的定義

進(jìn)程是指一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一次動(dòng)態(tài)執(zhí)行過(guò)程

進(jìn)程的組成

進(jìn)程包含了正在運(yùn)行的一個(gè)程序的所有狀態(tài)信息

代碼
系統(tǒng)初始化(init)
正在運(yùn)行的程序執(zhí)行了創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用(比如 fork)
用戶(hù)請(qǐng)求創(chuàng)建一個(gè)新進(jìn)程
初始化一個(gè)批處理工作
數(shù)據(jù)
狀態(tài)寄存器--CPU狀態(tài)CR0,指令指針I(yè)P
通用寄存器--AX BX XX....
進(jìn)程占用系統(tǒng)資源--打開(kāi)文件,已分配內(nèi)存...

進(jìn)程的特點(diǎn)

動(dòng)態(tài)性--可動(dòng)態(tài)創(chuàng)建與結(jié)束進(jìn)程
并發(fā)性--進(jìn)程可以被獨(dú)立調(diào)度并占用CPU運(yùn)行
獨(dú)立性--不同進(jìn)程工作不互相影響
制約性--因訪(fǎng)問(wèn)共享資源/數(shù)據(jù)或進(jìn)程間同步而產(chǎn)生制約

二 進(jìn)程與程序的聯(lián)系

進(jìn)程是操作系統(tǒng)對(duì)于執(zhí)行狀態(tài)程序的抽象

程序 = 文件(靜態(tài)的可執(zhí)行文件)
進(jìn)程 = 執(zhí)行中的程序 = 程序+執(zhí)行狀態(tài)

統(tǒng)一程序的多次執(zhí)行過(guò)程對(duì)應(yīng)不同進(jìn)程

如命令"xxx"的多次執(zhí)行對(duì)應(yīng)多個(gè)進(jìn)程

進(jìn)程執(zhí)行需要的資源

內(nèi)存--保存代碼和數(shù)據(jù)
CPU--執(zhí)行指令

進(jìn)程與程序的區(qū)別

進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的

程序是有序代碼的集合
進(jìn)程是程序的執(zhí)行,進(jìn)程有內(nèi)核態(tài)與用戶(hù)態(tài)的切換

進(jìn)程是暫時(shí)的,程序是永久的

進(jìn)程是一個(gè)狀態(tài)變化的過(guò)程
程序可長(zhǎng)久保存在磁盤(pán)中

進(jìn)行與程序組成不同

進(jìn)程的組成包括程序 數(shù)據(jù)和進(jìn)程控制塊

三 進(jìn)程的生命周期

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

系統(tǒng)初始化(init)
正在運(yùn)行的程序執(zhí)行了創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用(比如 fork)
用戶(hù)請(qǐng)求創(chuàng)建一個(gè)新進(jìn)程
初始化一個(gè)批處理工作

進(jìn)程執(zhí)行

內(nèi)核選擇一個(gè)就緒的進(jìn)程,讓它占用CPU并執(zhí)行

進(jìn)程等待

進(jìn)程進(jìn)入等待(阻塞)的情況:
請(qǐng)求并等待系統(tǒng)服務(wù),無(wú)法馬上完成
啟動(dòng)某種操作,無(wú)法馬上完成
需要的數(shù)據(jù)沒(méi)有到達(dá)
只有進(jìn)程自身才知道何時(shí)需要某種事件的發(fā)生,不會(huì)由于外部原因進(jìn)入等待

進(jìn)程搶占

進(jìn)程被搶占的情況:
高優(yōu)先級(jí)的進(jìn)程就緒狀態(tài),需要馬上進(jìn)入執(zhí)行狀態(tài),會(huì)將當(dāng)前進(jìn)程變成就緒狀態(tài).
當(dāng)前進(jìn)程執(zhí)行當(dāng)前時(shí)間超出最長(zhǎng)時(shí)間,內(nèi)核會(huì)讓下一個(gè)進(jìn)程運(yùn)行

進(jìn)程喚醒

喚醒進(jìn)程的情況:
被阻塞進(jìn)程需要的資源已經(jīng)被滿(mǎn)足
被阻塞進(jìn)程等待事件到達(dá)
進(jìn)程只能被別的進(jìn)程或者操作系統(tǒng)喚醒

進(jìn)程結(jié)束

喚醒結(jié)束的情況:
正常退出 錯(cuò)誤退出 致命錯(cuò)誤 被其他進(jìn)程所殺

四 進(jìn)程的狀態(tài)以及切換

就緒狀態(tài)

當(dāng)進(jìn)程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執(zhí)行,這種狀態(tài)稱(chēng)為就緒狀態(tài)

執(zhí)行狀態(tài)

進(jìn)程已獲得CPU,其程序正在執(zhí)行

阻塞狀態(tài)

正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無(wú)法繼續(xù)執(zhí)行時(shí),便放棄CPU而處于暫停狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞,把這種暫停狀態(tài)稱(chēng)為阻塞狀態(tài),有時(shí)也稱(chēng)為等待狀態(tài)或封鎖狀態(tài)。比如進(jìn)程當(dāng)中調(diào)用wait()函數(shù),會(huì)使得進(jìn)程進(jìn)入到阻塞狀態(tài)。

創(chuàng)建狀態(tài)與結(jié)束狀態(tài)為輔助狀態(tài)

五種狀態(tài)的轉(zhuǎn)換關(guān)系圖

掛起狀態(tài)

在不少系統(tǒng)中進(jìn)程只有上述三種狀態(tài),但在另一些系統(tǒng)中,又增加了一些新?tīng)顟B(tài),最重要的是掛起狀態(tài)。引入掛起狀態(tài)的原因有:
終端用戶(hù)的請(qǐng)求。當(dāng)終端用戶(hù)在自己的程序運(yùn)行期間發(fā)現(xiàn)有可疑問(wèn)題時(shí),希望暫時(shí)使自己的程序靜止下來(lái)。
父進(jìn)程請(qǐng)求。有時(shí)父進(jìn)程希望掛起自己的某個(gè)子進(jìn)程,以便考查和修改該子進(jìn)程,或者協(xié)調(diào)各子進(jìn)程間的活動(dòng)。
負(fù)荷調(diào)節(jié)的需要。當(dāng)實(shí)時(shí)系統(tǒng)中的工作負(fù)荷較重,已可能影響到對(duì)實(shí)時(shí)任務(wù)的控制時(shí),可由系統(tǒng)把一些不重要的進(jìn)程掛起,以保證系統(tǒng)能正常運(yùn)行。
操作系統(tǒng)的需要。操作系統(tǒng)有時(shí)希望掛起某些進(jìn)程,以便檢查運(yùn)行中的資源使用情況或進(jìn)行記賬。


具有掛起狀態(tài)的轉(zhuǎn)換圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容