一 進程的定義
進程是指一個具有一定獨立功能的程序在一個數(shù)據(jù)集合上的一次動態(tài)執(zhí)行過程
進程的組成
進程包含了正在運行的一個程序的所有狀態(tài)信息
代碼
系統(tǒng)初始化(init)
正在運行的程序執(zhí)行了創(chuàng)建進程的系統(tǒng)調(diào)用(比如 fork)
用戶請求創(chuàng)建一個新進程
初始化一個批處理工作
數(shù)據(jù)
狀態(tài)寄存器--CPU狀態(tài)CR0,指令指針I(yè)P
通用寄存器--AX BX XX....
進程占用系統(tǒng)資源--打開文件,已分配內(nèi)存...
進程的特點
動態(tài)性--可動態(tài)創(chuàng)建與結(jié)束進程
并發(fā)性--進程可以被獨立調(diào)度并占用CPU運行
獨立性--不同進程工作不互相影響
制約性--因訪問共享資源/數(shù)據(jù)或進程間同步而產(chǎn)生制約
二 進程與程序的聯(lián)系
進程是操作系統(tǒng)對于執(zhí)行狀態(tài)程序的抽象
程序 = 文件(靜態(tài)的可執(zhí)行文件)
進程 = 執(zhí)行中的程序 = 程序+執(zhí)行狀態(tài)
統(tǒng)一程序的多次執(zhí)行過程對應(yīng)不同進程
如命令"xxx"的多次執(zhí)行對應(yīng)多個進程
進程執(zhí)行需要的資源
內(nèi)存--保存代碼和數(shù)據(jù)
CPU--執(zhí)行指令
進程與程序的區(qū)別
進程是動態(tài)的,程序是靜態(tài)的
程序是有序代碼的集合
進程是程序的執(zhí)行,進程有內(nèi)核態(tài)與用戶態(tài)的切換
進程是暫時的,程序是永久的
進程是一個狀態(tài)變化的過程
程序可長久保存在磁盤中
進行與程序組成不同
進程的組成包括程序 數(shù)據(jù)和進程控制塊
三 進程的生命周期
進程創(chuàng)建
系統(tǒng)初始化(init)
正在運行的程序執(zhí)行了創(chuàng)建進程的系統(tǒng)調(diào)用(比如 fork)
用戶請求創(chuàng)建一個新進程
初始化一個批處理工作
進程執(zhí)行
內(nèi)核選擇一個就緒的進程,讓它占用CPU并執(zhí)行
進程等待
進程進入等待(阻塞)的情況:
請求并等待系統(tǒng)服務(wù),無法馬上完成
啟動某種操作,無法馬上完成
需要的數(shù)據(jù)沒有到達
只有進程自身才知道何時需要某種事件的發(fā)生,不會由于外部原因進入等待
進程搶占
進程被搶占的情況:
高優(yōu)先級的進程就緒狀態(tài),需要馬上進入執(zhí)行狀態(tài),會將當(dāng)前進程變成就緒狀態(tài).
當(dāng)前進程執(zhí)行當(dāng)前時間超出最長時間,內(nèi)核會讓下一個進程運行
進程喚醒
喚醒進程的情況:
被阻塞進程需要的資源已經(jīng)被滿足
被阻塞進程等待事件到達
進程只能被別的進程或者操作系統(tǒng)喚醒
進程結(jié)束
喚醒結(jié)束的情況:
正常退出 錯誤退出 致命錯誤 被其他進程所殺
四 進程的狀態(tài)以及切換
就緒狀態(tài)
當(dāng)進程已分配到除CPU以外的所有必要資源后挨决,只要再獲得CPU,便可立即執(zhí)行肆捕,這種狀態(tài)稱為就緒狀態(tài)
執(zhí)行狀態(tài)
進程已獲得CPU盖高,其程序正在執(zhí)行
阻塞狀態(tài)
正在執(zhí)行的進程由于發(fā)生某事件而暫時無法繼續(xù)執(zhí)行時,便放棄CPU而處于暫停狀態(tài)席纽,亦即進程的執(zhí)行受到阻塞撞蚕,把這種暫停狀態(tài)稱為阻塞狀態(tài),有時也稱為等待狀態(tài)或封鎖狀態(tài)甥厦。比如進程當(dāng)中調(diào)用wait()函數(shù)矫渔,會使得進程進入到阻塞狀態(tài)。
創(chuàng)建狀態(tài)與結(jié)束狀態(tài)為輔助狀態(tài)
掛起狀態(tài)
在不少系統(tǒng)中進程只有上述三種狀態(tài)顿痪,但在另一些系統(tǒng)中,又增加了一些新狀態(tài)蚁袭,最重要的是掛起狀態(tài)。引入掛起狀態(tài)的原因有:
終端用戶的請求卖哎。當(dāng)終端用戶在自己的程序運行期間發(fā)現(xiàn)有可疑問題時删性,希望暫時使自己的程序靜止下來。
父進程請求维贺。有時父進程希望掛起自己的某個子進程巴帮,以便考查和修改該子進程,或者協(xié)調(diào)各子進程間的活動榕茧。
負(fù)荷調(diào)節(jié)的需要。當(dāng)實時系統(tǒng)中的工作負(fù)荷較重栏尚,已可能影響到對實時任務(wù)的控制時只恨,可由系統(tǒng)把一些不重要的進程掛起,以保證系統(tǒng)能正常運行纵菌。
操作系統(tǒng)的需要休涤。操作系統(tǒng)有時希望掛起某些進程,以便檢查運行中的資源使用情況或進行記賬功氨。