DayDayUp02:進程的描述與控制

引言:作爲資源分配和獨立運行的基本單位都是進程。OS所具有的四大特徵也都是基於進程而形成的。

前趨圖和程序執行

  • 前趨圖:有向無循環圖DAG(Directed Acyclic Graph),即單項不循環圖。用於描述進程之間執行的先後順序。Pi—>Pj,表示進程Pi和Pj存在着前趨關係,表示在Pj開始執行之前Pi必須完成。Pi是Pj的直接前趨,Pj是Pi的直接後繼。沒有前趨的結點稱爲初始結點,沒有後繼的結點稱爲終止結點。每個結點還具有一個重量,用於表示該結點所含有的程序量或程序的執行時間
  • 程序的順序執行
    • 程序的順序執行:i.e. I1—>C1—>P1—>I2—>C2—>P2…
    • 程序順序執行時的特徵:
      • 1、順序性:每一操作必須在下一操作開始前結束
      • 2、封閉性:程序運行時獨佔全機資源(互斥共享方式),執行結果不受外界因素影響
      • 3、可再現性:只要程序執行時的環境和初始條件相同,當程序重複執行時,無論以何種執行方式都可獲得相同的結果。
  • 程序的併發執行
    • 程序的併發執行:只有在不存在前趨關係的程序之間纔有可能併發執行。
    • 程序併發執行的特徵:
      • (1)間斷性:程序併發執行,由於共享系統資源,致使在這些併發執行的程序之間形成了相互制約的關係,將導致併發程序具有“執行——暫停——執行”這種間斷性的活動規律
      • (2)失去封閉性:執行結果受影響,其環境都必然受到其他程序的影響。
      • (3)不可再現性:由於失去了封閉性,其計算結果必將與併發程序執行速度有關,從而使程序失去了可再現性。換言之,程序經過多次執行後,雖執行時的環境和初始條件相同,但得到的結果卻各不同。這是與異步性的區別!

進程的描述

  • 進程的定義和特徵
    • 1、進程的定義:爲了使程序併發執行,並可以對併發執行的程序加以描述和控制,人們引入了“進程”概念。爲了使參與併發執行的每一個程序(含數據)都能獨立地運行,在OS中必須爲之配置一個專門的數據結構——進程控制快PCB(Process Control Block)。
      進程實體(又稱進程映像):程序段、相關的數據段和PCB
      實質上創建進程就是創建進程實體中的PCB;撤銷進程就是撤銷進程的PCB。
      這裏概括一下進程的終極定義:進程是系統進行資源分配和調度的一個獨立單位。
    • 2、進程的特徵:
      • (1)動態性:進程的實質是進程實體的執行過程。由創建產生,由調度執行,由撤銷消亡。進程實體有一定的生命週期,程序只是一組有序指令的集合,是靜態的
      • (2)併發性:多個進程實體同存於內存中,且能在一段時間內同時運行。而程序(沒有建立PCB)是不能參與併發執行的
      • (3)獨立性:進程實體是一個能獨立運行、獨立獲得資源和獨立接受調度的基本單位。凡未建立PCB的程序都不能作爲一個獨立的單位參與運行
      • (4)異步性:各自獨立,以不可預知的速度推進,結果是可再現的
  • 進程的基本狀態及轉換
    • 進程的三種基本狀態:

      • 1、就緒(Ready)狀態:進程已分配到除CPU以外的所有必要資源,只要再獲得CPU,即可立即執行。如果系統中有許多處於就緒狀態的進程,通常將它們按照一定策略排成一個隊列,該隊列稱爲就緒隊列
      • 2、執行(Running)狀態:進程已獲得CPU,其程序正在執行狀態
      • 3、阻塞(Block)狀態:正在執行的進程由於發生某事件暫時無法繼續執行時的狀態,將處於阻塞狀態的進程也排成一個隊列,其稱爲阻塞隊列
      • 在這裏插入圖片描述
      • 在這裏插入圖片描述
    • 三種狀態的基本轉換:i.e. 正在執行的進程因分配給它的時間片用完而剝奪處理機暫停執行時,其狀態轉換爲就緒;在調度程序爲之分配了處理機後,其狀態轉爲執行態;因資源被其他進程訪問時,使之無法繼續執行,則由執行轉爲阻塞

    • 創建狀態和終止狀態:爲滿足進程控制快PCB對數據及操作的完整性要求以及增強管理的靈活性

      • 1、創建狀態:引入創建狀態是爲了保證進程的調度必須在創建工作完成後進行,確保對進程控制快操作的完整性。對於處於創建狀態的進程,當其獲得所需資源以及PCB初始化工作完成後,可由創建狀態轉換爲就緒狀態
      • 2、終止狀態:將PCB清零並將PCB空間返還系統
        在這裏插入圖片描述
                                 進程的五種基本狀態及轉換
  • 掛起操作和進程狀態的轉換:爲了系統和用戶觀察和分析進程的需要,引入掛起操作,與其對應的是激活操作
    • 1、掛起操作引入的原因:

      • (1)終端用戶的需要
      • (2)父進程請求
      • (3)負荷調節的需要
      • (4)OS的需要
        在這裏插入圖片描述
    • 2、引入掛起原語操作後三個進程狀態的轉換
      引入掛起原語Suspend和激活原語Active

      • (1)活動就緒—>靜止就緒
      • (2)活動阻塞—>靜止阻塞,當其所期待的事件出現後,將由靜止阻塞變爲靜止就緒
      • (3)靜止就緒—>活動就緒
      • (4)活動就緒—>活動阻塞
        在這裏插入圖片描述
                        具有掛起狀態的進程狀態圖
    • 3、引入掛起操作後五個進程狀態的轉換

      • (1)NULL —> 創建
      • (2)創建 —> 活動就緒:參與調度
      • (3)創建 —> 靜止就緒:不分配資源,被置於外存,不參與調度
      • (4)執行 —> 終止
        在這裏插入圖片描述
                                    具有創建、終止和掛起狀態的進程狀態圖
  • 進程管理中的數據結構 :用戶可利用這些數據結構及操作命令來執行相關操作,而無需關心實現的具體細節;OS對記錄和查詢各種資源的使用以及各類進程運行情況的具體細節的信息的組織和維護也是通過建立和維護各種數據結構的方式來實現的
    • 1、OS中用於管理控制的數據結構:內存表、設備表、文件表、用於進程管理的進程表(PCB)
    • 2、進程控制塊PCB作用
      • (1)作爲獨立運行基本單位的標誌
      • (2)能實現間斷性運行方式:能保留運行時的CPU現場信息
      • (3)提供進程管理所需要的信息
      • (4)提供進程調度所需信息:瞭解進程所處的狀態…
      • (5)實現與其他進程的同步與通信:與諸進程協調運行
    • 3、進程控制塊中的信息
      • 1)進程標識符:用於唯一標識一個進程。有外部標識符和內部標識符(唯一的數字標識符,通常是一個進程的序號)
      • 2)處理機狀態:也稱處理機的上下文,主要由處理機的各種寄存器中的內容組成。寄存器包括:通用寄存器、指令計數器、程序狀態字PSW、用戶棧指針
      • 3)進程調度信息:進程狀態、進程優先級、進程調度所需其他信息、事件(阻塞原因)
      • 4)進程控制信息:程序和數據的地址、進程同步和通信機制、資源清單、鏈接指針
    • 4、進程控制塊的組織方式:
      • (1)線性方式:將所有PCB都組織在一張線性表中,方式實現簡單、開銷小。每次查找時都需要掃描整張表,只適合進程不多的系統
      • (2)鏈接方式:把具有相同狀態進程的PCB分別通過鏈接字鏈接成一個隊列,按優先級將PCB從高到低進行排序,高者在前
      • (3)索引方式:建立多張索引表,每個索引表中記錄相應狀態的某個PCB在PCB表的地址

進程控制:一般由OS內核中的原語來實現

  • OS的內核(運行頻率較高):常駐於內存
    • 處理機的執行狀態:系統態(管態、內核態)、用戶態(目態)
    • 1、支持功能:中斷處理、時鐘管理、原語操作(在執行過程中不允許被中斷)
    • 2、資源管理功能:進程管理、存儲器管理、設備管理
  • 進程的創建
    • 1、進程的層次結構:子進程可以繼承父進程所擁有的資源,但在windows中不存在任何進程層次結構的概念
    • 2、進程圖:用於描述進程間關係的一棵有向樹
    • 3、引起創建進程的事件:
      • (1)用戶登錄
      • (2)作業調度
      • (3)提供服務
        以上三種是內核創建的
      • (4)應用請求(用戶自創)
    • 4、進程的創建:
      • (1)申請空白PCB,申請獲得唯一的數字標識符
      • (2)爲新進程分配其運行所需的資源
      • (3)初始化進程控制塊PCB:初始化標識信息、初始化處理機狀態信息、初始化處理機控制信息。
  • 進程的終止
    • 1、引起進程終止的事件
      • (1)正常結束,產生一箇中斷
      • (2)異常結束
      • (3)外界干預
    • 2、進程的終止過程:讀PCB、設置調度標誌、終止子孫進程、歸還資源、從隊列(鏈表)移出
  • 進程的阻塞與喚醒
    • 1、引起進程阻塞和喚醒的事件:
      • (1)向系統請求共享資源失敗,系統無足夠資源分配給該進程
      • (2)等待某種操作的完成
      • (3)新數據尚未到達
      • (4)等待新任務的到達
    • 2、進程阻塞過程(調用阻塞原語block)
    • 3、進程喚醒過程(調用喚醒原語wakeup)
  • 進程的掛起與激活
    • 1、進程的掛起(調用掛起原語suspend)
    • 2、進程的激活(調用激活原語active):將進程從外存調入內存,檢查該進程的現行狀態,並根據優先級比較考慮是否重新調度

進程同步

  • 進程同步的基本概念:對多個相關進程在執行次序上進行協調,從而使程序的執行具有可再現性
    • 1、兩種形式的制約關係
      • (1)間接相互制約關係
      • (2)直接相互制約關係
    • 2、臨界資源(如打印機、磁帶機):相關著名進程同步問題——生產者—消費者問題
    • 3、臨界區:
      while(TRUE)
      {
      進入區
      臨界區
      退出區
      剩餘區
      }
    • 4、同步機制應遵循的規則:空閒讓進、忙則等待、有限等待(避免死等)、讓權等待
  • 硬件同步機制
    • 1、關中斷
    • 2、利用Test-and-Set指令實現互斥
    • 3、利用Swap指令實現進程互斥
  • 信號量機制:整型信號量、記錄型信號量(採用讓權等待機制)、AND型信號量(針對共享多資源的進程)、信號量集(設置資源的分配下限值)
  • 信號量的應用
    • 1、利用信號量實現進程互斥
    • 2、利用信號量實現前趨關係
  • 管程機制:
    • 1、管程的定義:代表共享資源的數據結構以及由對該共享數據結構實施操作的一組過程所組成的資源管理程序共同構成了一個操作系統的資源管理模塊
      管程與進程的異同點:
      同:都定義了數據結構,存在對各自數據結構上的操作
      異:進程定義的是私有數據結構PCB,管程定義的是公有數據結構;進程進行順序程序執行,管程進行同步操作和初始化操作;進城爲了實現系統併發性,管程爲了解決共享資源的互斥使用問題;進程爲主動工作方式,管程被動;進程之間能併發執行,進程具有動態性
    • 2、條件變量condition:也是一種抽象數據類型,每個條件變量保存了一個鏈表。用於解決進程調用了管程,在管程中被阻塞或掛起,這段期間進程不釋放管程導致其他進程無法進入管程,被迫長時間等待的過程等問題。

經典進程的同步問題

  • 生產者—消費者問題
  • 哲學家進餐問題
  • 讀者—寫者問題

進程通信

其實我在這篇博客上寫過關於線程的知識點,不料今天這一打開竟然這一塊的知識都不見了,可能是我關瀏覽器的時候忘保存了吧,以後要是遇到關於線程的知識我會再寫一篇的,我感到又難受又抱歉,我以後一定會寫完就及時保存文章的!!!

如果喜歡我的文章,請記得一鍵三連哦,點贊關注收藏,你的每一個贊每一份關注每一次收藏都將是我前進路上的無限動力 !!!↖(▔▽▔)↗感謝支持,明天我們不見不散!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章