操作系統(tǒng)基礎(chǔ)8-進(jìn)程及進(jìn)程控制

進(jìn)程(Process) 的定義

從不同的角度焕窝,進(jìn)程可以有不同的定義尔破,傳統(tǒng)典型的定義:

進(jìn)程是程序的一次執(zhí)行過程媳叨。 或者:一個(gè)正在執(zhí)行的程序的實(shí)例

進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行所發(fā)生的活動(dòng)

進(jìn)程是具有獨(dú)立功能的程序在數(shù)據(jù)集合上運(yùn)行的過程万牺,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位

通過htop命令顯示的進(jìn)程列表

進(jìn)程和程序的關(guān)系

進(jìn)程是一個(gè)動(dòng)態(tài)概念,程序是一個(gè)靜態(tài)概念邢享。

進(jìn)程具有并發(fā)特征鹏往,程序沒有(程序全部是順序的)。

進(jìn)程是競(jìng)爭(zhēng)資源的基本單位骇塘。

一個(gè)程序?qū)?yīng)多個(gè)進(jìn)程伊履,一個(gè)進(jìn)程為多個(gè)程序服務(wù)。

進(jìn)程的狀態(tài)(State)

創(chuàng)建(New): 進(jìn)程正在被建立的階段绪爸。

就緒(Ready?):當(dāng)進(jìn)程已分配到除CPU以外的所有必要資源后湾碎,只要再獲得CPU宙攻,便可立即執(zhí)行奠货,進(jìn)程這時(shí)的狀態(tài)稱為就緒狀態(tài)。在一個(gè)系統(tǒng)中處于就緒狀態(tài)的進(jìn)程可能有多個(gè)座掘,通常將它們排成一個(gè)隊(duì)列递惋,稱為就緒隊(duì)列

運(yùn)行(Running?):進(jìn)程占有CPU,并在CPU上運(yùn)行指令溢陪。

等待/阻塞(Waiting?/blocked):正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無法繼續(xù)執(zhí)行時(shí)萍虽,便放棄處理機(jī)而處于暫停狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞形真,把這種暫停狀態(tài)稱為阻塞狀態(tài)杉编,也稱為等待狀態(tài)封鎖狀態(tài)。致使進(jìn)程阻塞的典型事件有:請(qǐng)求I/O咆霜,申請(qǐng)緩沖空間等邓馒。通常將這種處于阻塞狀態(tài)的進(jìn)程也排成一個(gè)隊(duì)列。有的系統(tǒng)則根據(jù)阻塞原因的不同而把處于阻塞狀態(tài)的進(jìn)程排成多個(gè)隊(duì)列蛾坯。

終止(Terminated?):進(jìn)程已經(jīng)完成了執(zhí)行光酣。

進(jìn)程的五種基本狀態(tài)及轉(zhuǎn)換

進(jìn)程控制塊(PCB)

進(jìn)程控制塊(Process Control Block?PCB) 是操作系統(tǒng)核心中一種數(shù)據(jù)結(jié)構(gòu),用來表示進(jìn)程狀態(tài)脉课,記錄進(jìn)程的外部特征救军,描述進(jìn)程的運(yùn)動(dòng)變化過程财异。同時(shí),操作系統(tǒng)可以利用PCB來控制和管理進(jìn)程唱遭。

一般情況下戳寸,PCB中包含以下內(nèi)容:

標(biāo)識(shí)信息

用于存放唯一標(biāo)識(shí)該進(jìn)程的信息。系統(tǒng)分配的標(biāo)識(shí)號(hào)拷泽、系統(tǒng)分配的進(jìn)程組標(biāo)識(shí)號(hào)庆揩、用戶定義的進(jìn)程名、用戶定義的進(jìn)程組名跌穗。

現(xiàn)場(chǎng)信息

用于存放該進(jìn)程運(yùn)行時(shí)的處理器現(xiàn)場(chǎng)信息订晌。用戶可見寄存器內(nèi)容:數(shù)據(jù)寄存器、地址寄存器蚌吸、控制與狀態(tài)寄存器內(nèi)容:PC(程序計(jì)數(shù)器)锈拨、IR(指令寄存器)、PSW(程序狀態(tài)字)羹唠。棧指針內(nèi)容:核心棧與用戶棧指針

控制信息

用于存放與管理奕枢、調(diào)度進(jìn)程相關(guān)的信息。調(diào)度相關(guān)信息:狀態(tài)佩微、等待事件/原因缝彬、優(yōu)先級(jí)。進(jìn)程組成信息:代碼/數(shù)據(jù)地址哺眯、外存映像地址谷浅。進(jìn)程隊(duì)列指引元:進(jìn)程隊(duì)列指針、父子兄弟進(jìn)程指針奶卓。

進(jìn)程通信相關(guān)信息:消息隊(duì)列一疯、信號(hào)量、鎖夺姑。進(jìn)程處理器使用信息:占用的處理器墩邀、時(shí)間片、處理器使用時(shí)間/已執(zhí)行總時(shí)間盏浙、記賬信息眉睹。進(jìn)程特權(quán)信息:如內(nèi)存訪問權(quán)限、處理器特權(quán)废膘。進(jìn)程資源清單信息:如正占有的資源竹海、已使用的資源。

進(jìn)程控制塊PCB

PCB的作用

PCB?可以被操作系統(tǒng)中的多個(gè)模塊讀或修改殖卑,如被調(diào)度程序站削、資源分配程序、中斷處理程序以及監(jiān)督和分析程序等讀或修改孵稽。 操作系統(tǒng)是根據(jù)?PCB來對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的许起,它是操作系統(tǒng)中最重要的記錄型數(shù)據(jù)結(jié)構(gòu)十偶。

Linux?系統(tǒng)中PCB結(jié)構(gòu)用?task_struct?數(shù)據(jù)結(jié)構(gòu),?Windows系統(tǒng)的PCB:EPROCESS园细,

PCB使一個(gè)在多道程序環(huán)境下不能獨(dú)立運(yùn)行的程序(含數(shù)據(jù))惦积,成為一個(gè)能獨(dú)立運(yùn)行的基本單位, 一個(gè)能與其它進(jìn)程并發(fā)執(zhí)行的進(jìn)程猛频。

進(jìn)程的組成


PCB狮崩、程序段、數(shù)據(jù)段組成了進(jìn)程實(shí)體鹿寻,也叫進(jìn)程映像睦柴。一般情況下,我們把進(jìn)程實(shí)體就簡(jiǎn)稱為進(jìn)程毡熏,所謂創(chuàng)建進(jìn)程坦敌,實(shí)質(zhì)上創(chuàng)建進(jìn)程實(shí)體中的PCB;而撤銷進(jìn)程痢法,實(shí)質(zhì)上就是撤銷進(jìn)程實(shí)體中的PCB狱窘。

進(jìn)程上下文(context)

除了進(jìn)程實(shí)體(進(jìn)程映像),進(jìn)程的執(zhí)行還需要環(huán)境支持财搁,包括CPU現(xiàn)場(chǎng)和Cache中的執(zhí)行信息蘸炸, 操作系統(tǒng)中的進(jìn)程物理實(shí)體(代碼和數(shù)據(jù)等)和支持進(jìn)程運(yùn)行的環(huán)境合成進(jìn)程上下文,用于刻畫進(jìn)程的執(zhí)行情況尖奔,進(jìn)程在當(dāng)前上下文中運(yùn)行搭儒。

在前面的操作系統(tǒng)基礎(chǔ)4我們已經(jīng)說過關(guān)于CPU的內(nèi)核模式與用戶模式。在操心系統(tǒng)基礎(chǔ)6也已經(jīng)說過關(guān)于中斷越锈。 正是有了不同運(yùn)行狀態(tài)的劃分仗嗦,才有了上下文的概念膘滨。

用戶空間的應(yīng)用程序甘凭,通過系統(tǒng)調(diào)用,進(jìn)入內(nèi)核空間火邓。這個(gè)時(shí)候用戶空間的進(jìn)程要傳遞很多變量丹弱、參數(shù)的值給內(nèi)核,內(nèi)核模式運(yùn)行的時(shí)候也要保存用戶進(jìn)程的一些寄存器值铲咨、變量等躲胳。所謂的“進(jìn)程上下文”,可以看作是用戶進(jìn)程傳遞給內(nèi)核的這些參數(shù)以及內(nèi)核要保存的那一整套的變量和寄存器值和當(dāng)時(shí)的環(huán)境等纤勒。

硬件通過觸發(fā)信號(hào)坯苹,導(dǎo)致內(nèi)核調(diào)用中斷處理程序,進(jìn)入內(nèi)核空間摇天。這個(gè)過程中粹湃,硬件的一些變量和參數(shù)也要傳遞給內(nèi)核恐仑,內(nèi)核通過這些參數(shù)進(jìn)行中斷處理。所謂的“中斷上下文”为鳄,其實(shí)也可以看作就是硬件傳遞過來的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(主要是當(dāng)前被打斷執(zhí)行的進(jìn)程環(huán)境)裳仆。

進(jìn)程上下文可以劃分為:

(1)用戶級(jí)上下文:用戶程序塊/用戶數(shù)據(jù)區(qū)/用戶堆棧/用戶共享內(nèi)存組成的用戶空間信息

(2)寄存器上下文:即進(jìn)程的現(xiàn)場(chǎng)信息,包括PSW/棧指針/通用寄存器孤钦。

(3)系統(tǒng)級(jí)上下文:由進(jìn)程控制塊(進(jìn)程的狀態(tài))歧斟、內(nèi)存管理信息(進(jìn)程頁表或段表)和系統(tǒng)核心棧(進(jìn)程內(nèi)核態(tài)運(yùn)行時(shí)的工作區(qū))等操作系統(tǒng)管理進(jìn)程需要的信息。

用戶級(jí)上下文地址空間和系統(tǒng)級(jí)上下文地址空間一起構(gòu)成了一個(gè)進(jìn)程的整個(gè)存儲(chǔ)器映像偏形。

進(jìn)程的組織方式

把處于同一狀態(tài)的所有進(jìn)程的PCB鏈接在一起的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程隊(duì)列静袖,有兩種常用的隊(duì)列組織方式:

(1)鏈接方式:即把具有相同狀態(tài)的進(jìn)程的PCB分別通過鏈接指針連接成一個(gè)隊(duì)列,系統(tǒng)為每個(gè)隊(duì)列設(shè)置隊(duì)列標(biāo)志以便標(biāo)識(shí)和識(shí)別隊(duì)列俊扭。這樣勾徽,可以形成就緒隊(duì)列、若干個(gè)阻塞隊(duì)列和空白隊(duì)列等统扳。對(duì)其中的就緒隊(duì)列常按進(jìn)程優(yōu)先級(jí)的高低排列喘帚,把優(yōu)先級(jí)高的進(jìn)程的 PCB 排在隊(duì)列前面。此外咒钟,也可根據(jù)阻塞原因的不同而把處于阻塞狀態(tài)的進(jìn)程的?PCB?排成等待 I/O 操作完成的隊(duì)列和等待分配內(nèi)存的隊(duì)列等吹由。

(2)索引方式:系統(tǒng)根據(jù)所有進(jìn)程的狀態(tài)建立幾張索引表。例如朱嘴,就緒索引表倾鲫、阻塞索引表等,并把各索引表在內(nèi)存的首地址記錄在內(nèi)存的一些專用單元中萍嬉。在每個(gè)索引表的表目中乌昔,記錄具有相應(yīng)狀態(tài)的某個(gè) PCB 在 PCB 表中的地址。

進(jìn)程控制

進(jìn)程控制對(duì)應(yīng)的進(jìn)程隊(duì)列模型

進(jìn)程控制的主要功能是對(duì)系統(tǒng)中的所有進(jìn)程實(shí)施有效的管理壤追,它具有創(chuàng)建新進(jìn)程磕道、撤銷已有進(jìn)程、實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換等功能行冰。

簡(jiǎn)化理解:進(jìn)程控制就是要實(shí)現(xiàn)進(jìn)程狀態(tài)的轉(zhuǎn)換溺蕉。

進(jìn)程創(chuàng)建:進(jìn)程列表加一項(xiàng),申請(qǐng)PCB并初始化悼做,分配唯一進(jìn)程標(biāo)識(shí)符疯特,建立映像,分配資源肛走,移入就緒隊(duì)列

進(jìn)程撤銷:從隊(duì)列中移除漓雅,歸還資源,撤銷標(biāo)識(shí)符,回收PCB邻吞,移除進(jìn)程表項(xiàng)(先要撤銷子進(jìn)程)

進(jìn)程阻塞:保存現(xiàn)場(chǎng)信息庶灿,修改PCB,移入等待隊(duì)列吃衅,轉(zhuǎn)向進(jìn)程調(diào)度程序調(diào)度其它進(jìn)程執(zhí)行

進(jìn)程喚醒:等待隊(duì)列中移出往踢,修改PCB,移入就緒隊(duì)列(該進(jìn)程優(yōu)先級(jí)高于運(yùn)行進(jìn)程徘层,則重新設(shè)置調(diào)度標(biāo)志)

隊(duì)列管理模塊是操作系統(tǒng)實(shí)現(xiàn)進(jìn)程控制管理的核心模塊峻呕。進(jìn)程與資源調(diào)度圍繞進(jìn)程隊(duì)列展開。

操作系統(tǒng)建立多個(gè)進(jìn)程隊(duì)列趣效,如只有一個(gè)進(jìn)程的運(yùn)行隊(duì)列瘦癌、按照優(yōu)先級(jí)或FCFS排列的就緒隊(duì)列、等待I/O操作完成的隊(duì)列跷敬、等待信號(hào)量的隊(duì)列等讯私。按需組織為先進(jìn)先出隊(duì)列與優(yōu)先隊(duì)列

當(dāng)發(fā)生某個(gè)事件使進(jìn)程狀態(tài)發(fā)生轉(zhuǎn)換時(shí),此進(jìn)程退出所在隊(duì)列進(jìn)入另一個(gè)隊(duì)列西傀。

原語:原語實(shí)現(xiàn)進(jìn)程控制斤寇。原語的特點(diǎn)是執(zhí)行期間不允許中斷,只能一氣呵成拥褂。這種不可中斷的操作即原子操作娘锁。原語采用“關(guān)中斷”指令和“開中斷指令”實(shí)現(xiàn)。關(guān)中斷指令執(zhí)行后饺鹃,外部中斷信號(hào)將被忽略莫秆,直到開中斷執(zhí)行。

進(jìn)程控制會(huì)導(dǎo)致進(jìn)程狀態(tài)的轉(zhuǎn)換悔详。原語要做的三類事情:

1. 更新PCB中的信息(如修改進(jìn)程狀態(tài)標(biāo)志镊屎、將運(yùn)行環(huán)境保存到PCB、從PCB恢復(fù)運(yùn)行環(huán)境)

? ? ?a. 所有的進(jìn)程原語一定都會(huì)修改進(jìn)程狀態(tài)標(biāo)志

? ? ?b. 剝奪當(dāng)前運(yùn)行進(jìn)程的CPU使用權(quán)必然需要保存其運(yùn)行環(huán)境

? ? ?c. 某進(jìn)程開始運(yùn)行前必然要恢復(fù)其運(yùn)行環(huán)境茄螃。

2. 將PCB插入合適的隊(duì)列

3. 分配/回收資源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缝驳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子责蝠,更是在濱河造成了極大的恐慌党巾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霜医,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡驳规,警方通過查閱死者的電腦和手機(jī)肴敛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人医男,你說我怎么就攤上這事砸狞。” “怎么了镀梭?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵刀森,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我报账,道長(zhǎng)研底,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任透罢,我火速辦了婚禮榜晦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羽圃。我一直安慰自己乾胶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布朽寞。 她就那樣靜靜地躺著识窿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脑融。 梳的紋絲不亂的頭發(fā)上腕扶,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音吨掌,去河邊找鬼半抱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膜宋,可吹牛的內(nèi)容都是我干的窿侈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秋茫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼史简!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肛著,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤圆兵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枢贿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殉农,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年局荚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了超凳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愈污。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖轮傍,靈堂內(nèi)的尸體忽然破棺而出暂雹,到底是詐尸還是另有隱情,我是刑警寧澤创夜,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布杭跪,位于F島的核電站,受9級(jí)特大地震影響驰吓,放射性物質(zhì)發(fā)生泄漏涧尿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一棚瘟、第九天 我趴在偏房一處隱蔽的房頂上張望现斋。 院中可真熱鬧,春花似錦偎蘸、人聲如沸庄蹋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽限书。三九已至,卻和暖如春章咧,著一層夾襖步出監(jiān)牢的瞬間倦西,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工赁严, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扰柠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓疼约,卻偏偏與公主長(zhǎng)得像卤档,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子程剥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354