【操作系統(tǒng)】 Operation System 第七章:進(jìn)程和線程

7.2 進(jìn)程的組成

  • (1)一個(gè)進(jìn)程應(yīng)該包括

    • 程序的代碼
    • 程序處理的數(shù)據(jù)
    • 程序運(yùn)行位置(程序計(jì)數(shù)器的值张峰,指示下一條將運(yùn)行的指令)
    • 一組通用寄存器的值,堆棒旗、棧
    • 一組系統(tǒng)資源喘批,如文件等撩荣。
      總之,進(jìn)程包含了正在運(yùn)行的一個(gè)程序的所有狀態(tài)信息饶深。
  • (2)進(jìn)程與程序的聯(lián)系

    • 程序是產(chǎn)生進(jìn)程的基礎(chǔ)
    • 程序的每次運(yùn)行構(gòu)成不同的進(jìn)程
    • 進(jìn)程是程序功能的體現(xiàn)
    • 通過多次執(zhí)行餐曹,一個(gè)程序可對應(yīng)多個(gè)進(jìn)程;通過調(diào)用關(guān)系敌厘,一個(gè)進(jìn)程可包括多個(gè)程序台猴。
  • (3)進(jìn)程與程序的區(qū)別

    • 進(jìn)程是動態(tài)的,程序是靜態(tài)的:程序是有序代碼的集合俱两;進(jìn)程是程序的執(zhí)行饱狂,進(jìn)程有核心態(tài)/用戶態(tài)
    • 進(jìn)程是暫時(shí)的,程序是永久的:進(jìn)程是一個(gè)狀態(tài)變化的過程宪彩,程序可長久保存
    • 進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序休讳,數(shù)據(jù)和進(jìn)程控制塊(進(jìn)程的狀態(tài)信息

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

  • 動態(tài)性:可動態(tài)創(chuàng)建,結(jié)束進(jìn)程
  • 并發(fā)行:進(jìn)程可被獨(dú)立調(diào)用并占用處理機(jī)運(yùn)行
  • 獨(dú)立性:不同進(jìn)程的工作不互相影響
  • 制約性:因訪問共享數(shù)據(jù)尿孔、資源或進(jìn)程間同步而產(chǎn)生制約

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

  • 定義:process control block, PCB俊柔。操作系統(tǒng)管理控制進(jìn)程運(yùn)行所用的信息集合。操作系統(tǒng)用PCB來描述進(jìn)程的基本情況以及運(yùn)行變化的過程纳猫。PCB是進(jìn)程存在的唯一標(biāo)志婆咸。

  • PCB含有以下三大類信息

    • 1. 進(jìn)程標(biāo)志信息: 如本進(jìn)程的標(biāo)識竹捉,本進(jìn)程的產(chǎn)生者標(biāo)識(父進(jìn)程標(biāo)識)芜辕;用戶標(biāo)識。
    • 2. 處理機(jī)狀態(tài)信息保存區(qū):保存進(jìn)程的運(yùn)行現(xiàn)場信息:
      • ->用戶可見寄存器:用戶程序可以使用的數(shù)據(jù)块差,地址等寄存器
      • ->控制和狀態(tài)寄存器:如程序寄存器(PC)侵续,程序狀態(tài)字(PSW)
      • ->棧指針: 過程調(diào)用/系統(tǒng)調(diào)用/中斷處理和返回時(shí)需要用到它。
    • 3. 進(jìn)程的控制信息
      • ->調(diào)度和狀態(tài)信息:用于操作系統(tǒng)調(diào)度進(jìn)程并占用處理機(jī)使用憨闰;
      • ->進(jìn)程間通信信息:為支持進(jìn)程間的與通信相關(guān)的各種標(biāo)識状蜗,信號,信件等鹉动,這些信息存在接收方的PCB中轧坎;
      • ->存儲管理信息:包含有指向本進(jìn)程映像存儲空間的數(shù)據(jù)結(jié)構(gòu);
        進(jìn)程所用資源:說明由進(jìn)程打開泽示,使用的系統(tǒng)資源缸血,如打開的文件等;
      • ->有關(guān)數(shù)據(jù)結(jié)構(gòu)等連接信息:進(jìn)程可以連接到一個(gè)進(jìn)程隊(duì)列中械筛,或連接到相關(guān)的其它進(jìn)程的PCB捎泻。
  • PCB的組織方式

    • 鏈表: 統(tǒng)一狀態(tài)的進(jìn)程其PCB成一臉表,多個(gè)狀態(tài)對應(yīng)多個(gè)不同的鏈表埋哟,各狀態(tài)的進(jìn)程形成不同的鏈表笆豁,例如就緒鏈表和阻塞鏈表
    • 索引表:同一狀態(tài)的進(jìn)程歸入一個(gè)index表(由index指向PCB),多個(gè)狀態(tài)對應(yīng)多個(gè)不同的index,各狀態(tài)的進(jìn)程形成不同的索引表闯狱,例如就緒索引表煞赢,阻塞索引表。

7.5 進(jìn)程的生命周期管理

全周期:進(jìn)程創(chuàng)建-進(jìn)程運(yùn)行-進(jìn)程等待-進(jìn)程喚醒-進(jìn)程結(jié)束

  • 進(jìn)程創(chuàng)建:引起進(jìn)程創(chuàng)建的三個(gè)主要事件:(1)系統(tǒng)初始化哄孤;(2)用戶請求創(chuàng)建一個(gè)新進(jìn)程耕驰;(3)正在運(yùn)行的進(jìn)程執(zhí)行了創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用
  • 進(jìn)程等待(阻塞) :以下情況下,進(jìn)程等待:(1)請求并等待系統(tǒng)服務(wù)录豺,無法馬上完成朦肘;(2)啟動某種操作,無法馬上完成双饥;(3)需要的數(shù)據(jù)沒有到達(dá)媒抠。(進(jìn)程只能自己阻塞自己)
  • 進(jìn)程喚醒:喚醒進(jìn)程的原因如下:(1)被阻塞進(jìn)程需要的資源可被滿足;(2)被阻塞進(jìn)程等待的事件到達(dá)咏花;(3)將該進(jìn)程的PCB插入到就緒隊(duì)列中趴生。(進(jìn)程只能被別的進(jìn)程或操作系統(tǒng)完成)
  • 進(jìn)程結(jié)束:(1)正常退出(自愿性);(2)錯(cuò)誤導(dǎo)致(自愿性)昏翰;(3)致命錯(cuò)誤(強(qiáng)制性)苍匆;(4)被其他進(jìn)程所殺(強(qiáng)制性)

7.6 進(jìn)程的狀態(tài)變化模型

進(jìn)程的三種基本狀態(tài):

  • ->創(chuàng)建狀態(tài)(new),一個(gè)進(jìn)程正在被創(chuàng)建棚菊,還沒被轉(zhuǎn)到就緒狀態(tài)之前的狀態(tài)浸踩。
  • ->運(yùn)行狀態(tài)(running):當(dāng)一個(gè)進(jìn)程正在處理機(jī)上運(yùn)行時(shí);
  • ->就緒狀態(tài)(ready):一個(gè)進(jìn)程獲得了除處理機(jī)之外的一切所需資源统求,一旦得到處理機(jī)即可運(yùn)行检碗;
  • ->等待狀態(tài)(或阻塞狀態(tài)blocked):一個(gè)進(jìn)程正在等待某一事件而暫停運(yùn)行時(shí)的狀態(tài),如等待資源码邻,等待I/O完成折剃。
  • ->結(jié)束狀態(tài)(exit),一個(gè)進(jìn)程正在從系統(tǒng)中消失時(shí)的狀態(tài)像屋,這是因?yàn)檫M(jìn)程結(jié)束或由于其它原因所導(dǎo)致怕犁。
進(jìn)程狀態(tài)變化模型.png

7.7 進(jìn)程掛起suspend

  • 概念:進(jìn)程掛起是一種合理且充分地利用系統(tǒng)資源的方式。掛起時(shí)己莺,進(jìn)程沒有占用內(nèi)存空間奏甫,處于掛起狀態(tài)的進(jìn)程映像在磁盤上。掛起就是把一個(gè)進(jìn)程從內(nèi)存轉(zhuǎn)到外存篇恒。掛起的兩種狀態(tài):(1)阻塞掛起狀態(tài)(blocked-suspend): 進(jìn)程在外存并等待某事件的出現(xiàn)扶檐。(2)就緒掛起狀態(tài)(ready-suspend): 進(jìn)程在外存涌韩,但只要進(jìn)入內(nèi)存羡鸥,即可運(yùn)行察蹲。
  • 掛起/解掛狀態(tài)變化
    • 阻塞->阻塞掛起:沒有進(jìn)程處于就緒狀態(tài);或者就緒進(jìn)程需要更多的內(nèi)存資源堕油;
    • 就緒->就緒掛起:當(dāng) 高優(yōu)先級阻塞(系統(tǒng)認(rèn)為會很快就緒的)進(jìn)程 和 低優(yōu)先級就緒進(jìn)程 沖突時(shí)尼荆,系統(tǒng)會掛起低優(yōu)先級就緒進(jìn)程砚蓬;
    • 運(yùn)行->就緒掛起:對于搶先式分時(shí)系統(tǒng)圣勒,當(dāng)有高優(yōu)先級阻塞掛起進(jìn)程 因?yàn)槭录兂?就緒掛起 時(shí),系統(tǒng)可能會把正在運(yùn)行的進(jìn)程轉(zhuǎn)到就緒掛起狀態(tài)攘须。
    • 阻塞掛起->就緒掛起:當(dāng)阻塞掛起的進(jìn)程因?yàn)橄嚓P(guān)事件出現(xiàn)時(shí)漆撞,系統(tǒng)會 阻塞掛起進(jìn)程轉(zhuǎn)化為就緒掛起狀態(tài)。
    • 就緒掛起->就緒:現(xiàn)在沒有就緒進(jìn)程于宙;當(dāng)前的就緒掛起進(jìn)程的優(yōu)先級高于就緒進(jìn)程浮驳;
    • 阻塞掛起->阻塞:當(dāng)一個(gè)進(jìn)程釋放足夠的內(nèi)存時(shí),系統(tǒng)會把一個(gè)高優(yōu)先級的阻塞掛起進(jìn)程(系統(tǒng)認(rèn)為會很快出現(xiàn)所等待的事件發(fā)生) 轉(zhuǎn)為阻塞進(jìn)程捞魁。
  • 狀態(tài)隊(duì)列
    • 狀態(tài)隊(duì)列是由操作系統(tǒng)來維護(hù)的一組隊(duì)列至会,用來表示系統(tǒng)當(dāng)中所有進(jìn)程的當(dāng)前狀態(tài);
    • 不同的狀態(tài)分別用不同的隊(duì)列來表示(就緒隊(duì)列谱俭,各種類型的阻塞隊(duì)列等)奉件;
    • 每個(gè)進(jìn)程的PCB都根據(jù)它的狀態(tài)加入到相應(yīng)的隊(duì)列當(dāng)中,當(dāng)一個(gè)進(jìn)程的狀態(tài)發(fā)生變化時(shí)昆著,它的PCB從一個(gè)狀態(tài)隊(duì)列中脫離县貌,加入到另一個(gè)狀態(tài)隊(duì)列里。

7.8 線程

  • 提出背景:需要新的實(shí)體凑懂,有以下特性:(1)實(shí)體間能夠并發(fā)地執(zhí)行煤痕;(2)實(shí)體之間共享相同的地址空間
  • 重新理解線程:進(jìn)程 = 資源管理+線程
    線程所需資源.png
  • 線程優(yōu)點(diǎn)
    (1)一個(gè)進(jìn)程中可以同時(shí)存在多個(gè)線程;
    (2)各個(gè)線程之間可以并發(fā)的執(zhí)行征候;
    (3)各個(gè)線程之間可以共享地址空間和文件等資源杭攻。
  • 線程缺點(diǎn)
    一個(gè)線程崩潰祟敛,該進(jìn)程的所有線程崩潰疤坝。
  • 線程與進(jìn)程比較
    (1)進(jìn)程是資源分配的單位,線程是CPU調(diào)度單位馆铁;
    (2)進(jìn)程擁有完整的資源平臺跑揉,而線程只占有必須的資源,如寄存器埠巨,棧历谍。
    (3)線程同樣由就緒,阻塞辣垒,執(zhí)行三種基本狀態(tài)望侈,同樣具有狀態(tài)之間的轉(zhuǎn)換關(guān)系。
    (4)線程能減少并發(fā)執(zhí)行的時(shí)間和空間開銷:(線程的創(chuàng)建時(shí)間/終止時(shí)間/(同一進(jìn)程內(nèi))切換時(shí)間更醒啊脱衙;同一進(jìn)程內(nèi)各線程共享內(nèi)存和文件資源侥猬,可直接進(jìn)行不通過內(nèi)核的通信)。

7.10 線程的實(shí)現(xiàn)

有三種線程實(shí)現(xiàn)的方法
用戶線程:在用戶空間實(shí)現(xiàn)捐韩,例如POSIX Pthreads, Mach C-threads, Solaris threads退唠。
內(nèi)核線程:在內(nèi)核中實(shí)現(xiàn),例如Windows, Solaris, Linux荤胁。
輕量級線程:在內(nèi)核中實(shí)現(xiàn)瞧预,支持用戶線程,例如Solaris

用戶線程

在用戶空間實(shí)現(xiàn)的線程機(jī)制仅政,不依賴于操作系統(tǒng)的內(nèi)核垢油;由一組用戶級的線程庫來完成線程的管理,包括創(chuàng)建/終止/同步/調(diào)度圆丹;


用戶線程.png
  • 優(yōu)點(diǎn)
    (1)不需要操作系統(tǒng)內(nèi)核了解用戶線程的存在秸苗,可用于不支持線程技術(shù)的多進(jìn)程操作系統(tǒng);
    (2)每個(gè)進(jìn)程都需要它私有的線程控制塊TCB列表运褪,來跟蹤記錄它各個(gè)線程的狀態(tài)信息(PC/棧指針/寄存器),TCB由線程庫函數(shù)來維護(hù)惊楼;
    (3)用戶線程的切換由線程庫函數(shù)實(shí)現(xiàn),無需用戶態(tài)/核心態(tài)切換秸讹,所以速度快檀咙;
    (4)允許每個(gè)進(jìn)程有自定義的線程調(diào)度算法。
  • 缺點(diǎn)
    (1)如果一個(gè)線程發(fā)起系統(tǒng)調(diào)用而阻塞璃诀,則整個(gè)進(jìn)程都在等待弧可;
    (2)如果一個(gè)線程開始運(yùn)行,除非它主動交出CPU劣欢,否則該線程所在進(jìn)程的其它線程都無法運(yùn)行棕诵;
    (3)由于時(shí)間片分配給的是進(jìn)程,所以與其它進(jìn)程相比凿将,在多線程執(zhí)行時(shí)校套,每個(gè)線程得到的時(shí)間片較少,執(zhí)行會較慢牧抵。

內(nèi)核線程

是指在操作系統(tǒng)的內(nèi)核中實(shí)現(xiàn)的一種線程機(jī)制笛匙,由操作系統(tǒng)的內(nèi)核來完成線程的創(chuàng)建,終止和管理犀变。


內(nèi)核線程.png
  • 由內(nèi)核維護(hù)進(jìn)程和上下文信息妹孙,也就是進(jìn)程/線程控制塊PCB/TCB;
  • 線程的創(chuàng)建/終止/切換都是通過系統(tǒng)調(diào)用或內(nèi)核函數(shù)來實(shí)現(xiàn)(內(nèi)核實(shí)現(xiàn))获枝,所以系統(tǒng)開銷大蠢正;
  • 在一個(gè)進(jìn)程中,如果某個(gè)內(nèi)核線程發(fā)起系統(tǒng)調(diào)用而阻塞省店,不會影響其它內(nèi)核線程的運(yùn)行嚣崭;
  • 時(shí)間片分配給線程蜘拉,多線程的進(jìn)程能獲得更多的CPU時(shí)間;
  • Windows NT/2000/XP 支持內(nèi)核線程有鹿。

輕量級進(jìn)程

他是內(nèi)核支持的用戶線程旭旭。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)輕量級進(jìn)程,每個(gè)輕量級進(jìn)程由一個(gè)單獨(dú)的內(nèi)核線程來支持(Solaris/Linux)


輕量級進(jìn)程.png

7.11 上下文切換

  • 概念:停止當(dāng)前運(yùn)行的進(jìn)程(從運(yùn)行態(tài)改變成其它狀態(tài))葱跋,并且調(diào)度其它進(jìn)程(轉(zhuǎn)變成運(yùn)行態(tài))持寄。
  • 要求
    (1)->必須在切換之前儲存許多部分的進(jìn)程上下文;
    (2)->必須能夠在之后恢復(fù)他們娱俺,所以進(jìn)程不能顯示它曾經(jīng)被暫停過稍味;
    (3)->必須快速(因?yàn)樯舷挛那袚Q非常頻繁)。
  • 上下文切換需要儲存的內(nèi)容:
    (1)->例如寄存器(PC/SP/…)荠卷,CPU狀態(tài)模庐,…
    (2)->一些時(shí)候可能會費(fèi)時(shí),所以需要盡量避免油宜。

參考資料

原視頻課程
其他課程筆記

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掂碱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慎冤,更是在濱河造成了極大的恐慌疼燥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚁堤,死亡現(xiàn)場離奇詭異醉者,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)披诗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門撬即,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呈队,你說我怎么就攤上這事剥槐。” “怎么了掂咒?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵才沧,是天一觀的道長。 經(jīng)常有香客問我绍刮,道長,這世上最難降的妖魔是什么挨摸? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任孩革,我火速辦了婚禮,結(jié)果婚禮上得运,老公的妹妹穿的比我還像新娘膝蜈。我一直安慰自己锅移,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布饱搏。 她就那樣靜靜地躺著非剃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪推沸。 梳的紋絲不亂的頭發(fā)上备绽,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音鬓催,去河邊找鬼肺素。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宇驾,可吹牛的內(nèi)容都是我干的倍靡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼课舍,長吁一口氣:“原來是場噩夢啊……” “哼塌西!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筝尾,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤雨让,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后忿等,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栖忠,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年贸街,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庵寞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薛匪,死狀恐怖捐川,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逸尖,我是刑警寧澤古沥,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站娇跟,受9級特大地震影響岩齿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苞俘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一盹沈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吃谣,春花似錦乞封、人聲如沸做裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锚贱。三九已至,卻和暖如春关串,著一層夾襖步出監(jiān)牢的瞬間拧廊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工悍缠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卦绣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓飞蚓,卻偏偏與公主長得像滤港,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子趴拧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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