1. 進(jìn)程的定義:
- 進(jìn)程是程序的一次執(zhí)行
- 進(jìn)程是可以和別的計算并發(fā)執(zhí)行的計算
- 進(jìn)程是一個數(shù)據(jù)結(jié)構(gòu)及能在其上進(jìn)行操作的程序
- 進(jìn)程是程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行的過程
- 進(jìn)程是程序在某一數(shù)據(jù)集合上的運(yùn)行過程
進(jìn)程(強(qiáng)調(diào)并發(fā)性和動態(tài)性):可以并發(fā)執(zhí)行的程序在某個數(shù)據(jù)集合上的運(yùn)行過程兢哭,是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位,并發(fā)的基本單位蜈七。
2. 進(jìn)程和程序的區(qū)別:
- 進(jìn)程是動態(tài)的党窜,程序是靜態(tài)的:程序是有序代碼的集合鲤脏;進(jìn)程是程序的執(zhí)行考阱。通常進(jìn)程不可在計算機(jī)之間遷移亲族;而程序通常對應(yīng)著文件狠半、靜態(tài)和可以復(fù)制。創(chuàng)建而產(chǎn)生弃甥,調(diào)度而運(yùn)行爽室,撤銷而消亡。
- 進(jìn)程是暫時的淆攻,程序是永久的:進(jìn)程是一個狀態(tài)變化的過程阔墩,程序可長久保存。
- 進(jìn)程與程序的對應(yīng)關(guān)系:通過多次執(zhí)行瓶珊,一個程序可對應(yīng)多個進(jìn)程啸箫;通過調(diào)用關(guān)系,一個進(jìn)程可包括多個程序伞芹。
- 進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序忘苛、數(shù)據(jù)和進(jìn)程控制塊(即進(jìn)程狀態(tài)信息)。
3. 進(jìn)程的特征:
- 結(jié)構(gòu)性:由程序+數(shù)據(jù)+進(jìn)程控制塊組成了進(jìn)程實體唱较,其中進(jìn)程控制塊(PCB)是進(jìn)程存在的標(biāo)志扎唾。
- 動態(tài)性:進(jìn)程是進(jìn)程實體的執(zhí)行過程,它由創(chuàng)建而產(chǎn)生绊汹,由調(diào)度而執(zhí)行稽屏,因某事件而暫停,由撤銷而消亡西乖。
- 并發(fā)性:多個進(jìn)程同時存于內(nèi)存中狐榔,一起向前推進(jìn),并發(fā)執(zhí)行获雕。
- 獨(dú)立性:進(jìn)程是獨(dú)立獲得資源和獨(dú)立調(diào)度的基本單位薄腻。
- 異步性:各進(jìn)程都各自獨(dú)立的不可預(yù)知的速度向前推進(jìn)。
4. 進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換:
(1)運(yùn)行態(tài):當(dāng)一個程序在處理機(jī)上運(yùn)行時届案,則稱該進(jìn)程處于運(yùn)行狀態(tài)庵楷。
(2)就緒態(tài):一個進(jìn)程獲得了除處理機(jī)外的一切所需資源,一旦得到處理機(jī)即可運(yùn)行楣颠,則稱此進(jìn)程處于就緒狀態(tài)尽纽。
(3)阻塞態(tài):當(dāng)一個進(jìn)程正在等待某一事件發(fā)生(例如請求I/O,申請資源未獲得)而暫時停止運(yùn)行童漩,故稱該進(jìn)程處于阻塞狀態(tài)弄贿。注意與就緒狀態(tài)的不同在于即使處理機(jī)處于空閑狀態(tài)也無法運(yùn)行。
- 就緒--->運(yùn)行:調(diào)度程序選擇一個新的進(jìn)程運(yùn)行
- 運(yùn)行--->就緒:運(yùn)行進(jìn)程用完時間片被中斷或在搶占調(diào)度方式中矫膨,因為一高優(yōu)先級進(jìn)程進(jìn)入就緒狀態(tài)
- 運(yùn)行--->阻塞:進(jìn)程發(fā)生I/O請求或等待某事件時
- 阻塞--->就緒:當(dāng)I/O完成或所等待的事件發(fā)生時
5. 掛起狀態(tài)(細(xì)分的進(jìn)程調(diào)度狀態(tài)):
由于終端用戶及操作系統(tǒng)的需要(排除故障或為系統(tǒng)減負(fù))差凹,為了能夠?qū)⒅付ㄟM(jìn)程暫時靜止下來(不接受調(diào)度)期奔,增加了靜止阻塞(阻塞掛起)和靜止就緒(就緒掛起)態(tài),原阻塞和就緒改稱為活動阻塞和活動就緒狀態(tài)危尿。
(1)運(yùn)行或活動就緒--->靜止就緒呐萌,活動阻塞--->靜止阻塞,通過掛起操作
(2)靜止就緒--->活動就緒谊娇,靜止阻塞--->活動阻塞肺孤,通過激活操作
(3)靜止阻塞--->靜止就緒:當(dāng)?shù)却氖录l(fā)生時。
6. PCB:
進(jìn)程是一個正在執(zhí)行的程序。 進(jìn)程是程序的一個實例船逮。 進(jìn)程能分配處理器并由處理器執(zhí)行的實體。 如果從內(nèi)核的角度看的話:進(jìn)程是分配系統(tǒng)資源的單位粤铭。當(dāng)一個程序被加載到內(nèi)存之后并為他分配一個PCB(進(jìn)程控制塊),這時候就稱為進(jìn)程了挖胃。
在linux中PCB就是一個名字叫做task_struct的結(jié)構(gòu)體,我們叫他”進(jìn)程描述符”。它里面有進(jìn)程執(zhí)行的所有信息梆惯,所以CPU對task_struct進(jìn)行管理就相當(dāng)于在對進(jìn)程進(jìn)行管理酱鸭。 PCB叫做進(jìn)程控制塊,它用來維護(hù)進(jìn)程相關(guān)的信息垛吗,每個進(jìn)程都有一個PCB凹髓。在linux中這個PCB是一個叫做task_struct的結(jié)構(gòu)體。
- PCB表:
系統(tǒng)把所有PCB組織在一起怯屉,并把它們放在內(nèi)存固定區(qū)域蔚舀,就構(gòu)成了PCB表。
PCB表的大小決定了系統(tǒng)中最多可同時存在的進(jìn)程個數(shù)锨络,稱為系統(tǒng)的并發(fā)度赌躺。 - PCB表組織方式:鏈接方式和索引方式
成員:
- 標(biāo)識符:描述本進(jìn)程的唯一標(biāo)示符,用來區(qū)別其他進(jìn)程羡儿;
- 狀態(tài):任務(wù)狀態(tài)礼患,退出代碼,退出信號等掠归;
- 優(yōu)先級:相對于其他進(jìn)程的優(yōu)先級缅叠;
- 程序計算器:程序中即將被執(zhí)行的下一條指令的地址;
- 內(nèi)存指針:包括程序代碼和進(jìn)程相關(guān)數(shù)據(jù)的指針虏冻,還有和其他進(jìn)程共享的內(nèi)存塊的指針肤粱;
- 上下文數(shù)據(jù):進(jìn)程執(zhí)行時處理器的寄存器中的數(shù)據(jù);
- I/O狀態(tài)信息:包括現(xiàn)實的I/o請求兄旬,分配給進(jìn)程的I/O設(shè)備和被進(jìn)程使用的文件列表狼犯;
- 記賬信息:可能包括處理器時間總和余寥,使用的時鐘數(shù)總和,時間限制悯森,記賬號宋舷;
- 其他