操作系統(tǒng)學(xué)習(xí)(二)--進(jìn)程描述和執(zhí)行

這是操作系統(tǒng)系列第 2 篇。

如果你想知道操作系統(tǒng)每天都在做些什么趁矾,那就打開你的資源監(jiān)視器:

file

資源監(jiān)視器截圖拐迁,Windows 10

單獨(dú)通過這一張圖,我們就能夠總結(jié)出操作系統(tǒng)的幾個(gè)重要功能:

  • 進(jìn)程管理
  • 線程管理
  • 內(nèi)存管理
  • I/O 管理(包含了磁盤調(diào)度)
  • 文件管理录豺,這一功能在圖里沒有表現(xiàn)出來煤傍,但我相信每個(gè)使用計(jì)算機(jī)的人都知道它盖文。

為什么我要從進(jìn)程開始講起呢?

原因很簡(jiǎn)單蚯姆,我們每天使用計(jì)算機(jī)五续,包括手機(jī)和電腦,本質(zhì)上是使用運(yùn)行在其操作系統(tǒng)上的應(yīng)用程序龄恋。對(duì)于我們來講疙驾,操作系統(tǒng)最為直觀的功能就是進(jìn)程管理,所以郭毕,讓我們從進(jìn)程管理入手它碎,由表及里,一步步深挖操作系統(tǒng)的本質(zhì)显押。

進(jìn)程是什么扳肛?

我在第一篇文章里簡(jiǎn)單提到了進(jìn)程這一概念,這里再詳細(xì)講一下乘碑,加深理解挖息。

操作系統(tǒng)的設(shè)計(jì)從根本上來說是為了迎合用戶需求,對(duì)個(gè)人用戶來說兽肤,需求就是在一臺(tái)計(jì)算機(jī)上運(yùn)行多個(gè)應(yīng)用程序套腹,以滿足生活和工作的需要绪抛。但應(yīng)用程序這么多,不可能讓每一個(gè)程序占用一個(gè) CPU 核心啊电禀,因?yàn)?CPU 核心是有限的幢码,人的需求是無限的。

所以操作系統(tǒng)就需要將無限(夸張一下)的應(yīng)用程序尖飞,分配到有限的 CPU 上去症副。

當(dāng)我們打開一堆程序時(shí),這些程序就會(huì)被加載到內(nèi)存上葫松,為了讓這些運(yùn)行的程序與沒有打開的程序作區(qū)分瓦糕,我們創(chuàng)造了進(jìn)程(Process)這個(gè)名詞。所以腋么,進(jìn)程就是對(duì)運(yùn)行的程序的一種抽象,具有動(dòng)態(tài)性亥揖。進(jìn)程管理其實(shí)就是操作系統(tǒng)通過某種方式珊擂,管理我們已經(jīng)打開的程序。

注:為了簡(jiǎn)化后面的討論费变,我們假設(shè)所說的計(jì)算機(jī)是單核的摧扇。

進(jìn)程的狀態(tài)有哪幾種?

講到進(jìn)程挚歧,我們必然需要了解進(jìn)程狀態(tài)扛稽,想要了解進(jìn)程的狀態(tài),我們就得從進(jìn)程的角度滑负,看一看進(jìn)程的一生會(huì)發(fā)生什么在张。

首先,用戶打開某個(gè)應(yīng)用程序矮慕,這個(gè)程序就處于新建態(tài)(New)帮匾,這個(gè)時(shí)候操作系統(tǒng)還沒有為這個(gè)程序做好準(zhǔn)備工作,這個(gè)進(jìn)程自身還沒有進(jìn)入內(nèi)存痴鳄,可能還留在磁盤里瘟斜。

等到這個(gè)進(jìn)程被加載進(jìn)內(nèi)存,就代表它已經(jīng)準(zhǔn)備好運(yùn)行了痪寻,但因?yàn)?CPU 資源正被別的進(jìn)程占用螺句,它只能等待操作系統(tǒng)為它分配 CPU。這個(gè)狀態(tài)稱為就緒態(tài)(Ready)橡类。

在就緒態(tài)一段時(shí)間后蛇尚,總會(huì)分配到 CPU 資源,一旦進(jìn)程開始執(zhí)行猫态,它就進(jìn)入了運(yùn)行態(tài)(Running)佣蓉。

有的進(jìn)程可能會(huì)執(zhí)行某些阻塞操作披摄,就拿 I/O 操作來舉例子,執(zhí)行操作后勇凭,進(jìn)程需要等待 I/O 操作完成疚膊,第一篇文章講過,進(jìn)程在這段時(shí)間內(nèi)是無法使用 CPU 的虾标,如果讓它繼續(xù)占用 CPU寓盗,就造成了資源浪費(fèi)。所以操作系統(tǒng)會(huì)剝奪它的 CPU 使用權(quán)璧函,并把它放在阻塞態(tài)傀蚌。等到 I/O 操作結(jié)束后,再將其放入就緒態(tài)蘸吓。

還有最后一種狀態(tài)——退出態(tài)善炫,顧名思義,進(jìn)程終止后库继,就會(huì)進(jìn)入退出態(tài)箩艺,這個(gè)進(jìn)程可能還沒有從內(nèi)存中清理出去。等到進(jìn)程完全退出內(nèi)存宪萄,進(jìn)程的一生就徹底結(jié)束了艺谆。

綜合以上的討論,我們得到了進(jìn)程的 5 種狀態(tài):


file

細(xì)心的讀者可能會(huì)發(fā)現(xiàn)拜英,運(yùn)行態(tài)到阻塞態(tài)静汤,以及阻塞態(tài)到就緒態(tài)之間的箭頭是單向的。為什么居凶?

先來看看運(yùn)行態(tài)和阻塞態(tài)虫给。回憶一下排监,一個(gè)進(jìn)程處于阻塞態(tài)代表什么狰右?(希望你看到這確實(shí)停下來思考了)

一個(gè)進(jìn)程處于阻塞態(tài),代表進(jìn)程執(zhí)行了某個(gè)阻塞操作舆床,正在等待操作的結(jié)果棋蚌。也就是說,處于阻塞態(tài)的進(jìn)程沒有使用 CPU 的能力挨队,所以即使給了它 CPU 它也沒辦法運(yùn)行谷暮,自然無法進(jìn)入執(zhí)行狀態(tài)。所以從阻塞態(tài)是無法直接跳到運(yùn)行態(tài)的盛垦。

再來說說就緒態(tài)和阻塞態(tài)湿弦。如果一個(gè)進(jìn)程位于就緒態(tài),說明它現(xiàn)在沒有使用 CPU腾夯,所以更不可能執(zhí)行阻塞操作颊埃。因此從就緒態(tài)也不能直接跳轉(zhuǎn)到阻塞態(tài)蔬充。

結(jié)合剛剛的解釋,我們來看看一個(gè)簡(jiǎn)單的進(jìn)程的排隊(duì)模型:


file

圖中的 ABCDEF 代表了進(jìn)程

要注意的是班利,就緒態(tài)饥漫,運(yùn)行態(tài)和阻塞態(tài)提供了一種描述進(jìn)程行為的系統(tǒng)方法,指導(dǎo)了操作系統(tǒng)的實(shí)現(xiàn)罗标,許多實(shí)際的操作系統(tǒng)都是按照這樣的三種狀態(tài)進(jìn)行具體構(gòu)造的庸队。但這不代表就沒有其他狀態(tài)的立足之地了,在一些實(shí)現(xiàn)中(其實(shí)是主流實(shí)現(xiàn)闯割,但由于牽扯到虛擬內(nèi)存的概念彻消,所以留到以后講解),還有掛起態(tài)等狀態(tài)宙拉。但不管哪種狀態(tài)宾尚,他們都是為了操作系統(tǒng)能夠最大化利用計(jì)算機(jī)資源而抽象出來的。

留幾個(gè)小問題做思考:

  1. 為什么只有從運(yùn)行態(tài)才能轉(zhuǎn)換到退出態(tài)鼓黔?
  2. 你能看懂上圖排隊(duì)模型嗎央勒?

PCB 是什么東西?

操作系統(tǒng)在管理和控制進(jìn)程的時(shí)候澳化,首先必須知道進(jìn)程的位置(即進(jìn)程被加載到哪一塊內(nèi)存了),其次稳吮,它還需要知道進(jìn)程的屬性缎谷,如進(jìn)程 ID,進(jìn)程狀態(tài)等灶似,所以我們就得有一個(gè)結(jié)構(gòu)能夠保存這些信息列林。

進(jìn)程控制塊(Process Control Block)就是這么一個(gè)結(jié)構(gòu)。進(jìn)程控制塊會(huì)在程序啟動(dòng)時(shí)就被創(chuàng)建出來酪惭。


file

進(jìn)程控制塊的主要內(nèi)容及內(nèi)存映像(字丑勿怪)

我們可以看到希痴,PCB 中存儲(chǔ)著進(jìn)程 ID,寄存器狀態(tài)春感,棧指針等重要信息砌创,這些信息現(xiàn)在看來非常陌生,但以后隨著你對(duì)操作系統(tǒng)理解的加深鲫懒,你就會(huì)理解這些信息的含義和作用嫩实。

圖中還有一個(gè)信息,那就是 PCB 存儲(chǔ)在內(nèi)核空間——表明只有操作系統(tǒng)有權(quán)利更改 PCB 里面的內(nèi)容窥岩。因?yàn)?PCB 太重要了甲献,如果其內(nèi)部信息被惡意修改,將造成進(jìn)程意外終止颂翼,甚至可能導(dǎo)致操作系統(tǒng)的崩潰晃洒。

總結(jié)

讓我們來串一下今天的內(nèi)容:

如果一個(gè)程序開始運(yùn)行慨灭,那么操作系統(tǒng)就會(huì)為其創(chuàng)建一個(gè)進(jìn)程控制塊,并將其加載到內(nèi)存中球及,進(jìn)程控制塊內(nèi)的「進(jìn)程狀態(tài)」信息會(huì)更改為就緒態(tài)氧骤,并將進(jìn)程放入就緒隊(duì)列等待分配 CPU。一旦分得 CPU桶略,進(jìn)程就進(jìn)入運(yùn)行態(tài)语淘,根據(jù)實(shí)際情況,還可能因?yàn)閳?zhí)行阻塞操作而進(jìn)入阻塞態(tài)际歼,等到程序運(yùn)行完畢惶翻,進(jìn)程就被操作系統(tǒng)清出內(nèi)存,然后刪除其進(jìn)程控制塊鹅心。

如果看完上一段吕粗,對(duì)黑體字的概念還很模糊,那我建議你再慢慢看一遍文章旭愧,而且一定要帶上自己的思考颅筋,沒有經(jīng)過思考的閱讀的效率是很低的。

希望你在看完文章之后有所收獲输枯。感謝你的閱讀议泵,我們后會(huì)有期!

聲明:原創(chuàng)文章桃熄,未經(jīng)授權(quán)先口,禁止轉(zhuǎn)載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞳收,隨后出現(xiàn)的幾起案子碉京,更是在濱河造成了極大的恐慌,老刑警劉巖螟深,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谐宙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡界弧,警方通過查閱死者的電腦和手機(jī)凡蜻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夹纫,“玉大人咽瓷,你說我怎么就攤上這事〗⒍铮” “怎么了茅姜?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我钻洒,道長(zhǎng)奋姿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任素标,我火速辦了婚禮称诗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘头遭。我一直安慰自己寓免,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布计维。 她就那樣靜靜地躺著袜香,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鲫惶。 梳的紋絲不亂的頭發(fā)上蜈首,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音欠母,去河邊找鬼欢策。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赏淌,可吹牛的內(nèi)容都是我干的踩寇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼六水,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼姑荷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缩擂,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎添寺,沒想到半個(gè)月后胯盯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡计露,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年博脑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票罐。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叉趣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出该押,到底是詐尸還是另有隱情疗杉,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布蚕礼,位于F島的核電站烟具,受9級(jí)特大地震影響梢什,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朝聋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一嗡午、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冀痕,春花似錦荔睹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至猜极,卻和暖如春中姜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跟伏。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工丢胚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人受扳。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓携龟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親勘高。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峡蟋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容