02. 操作系統之進程管理

1. 進程管理之進程實體

進程的必要性
  • 進程是系統進行資源分配的基本單位(線程作爲獨立運行的基本單位)
  • 進程作爲程序獨立運行的載體保障程序正常執行
  • 進程的存在使得操作系統資源的利用率大幅度提高
進程與程序
  • 進程是資源分配的最小單位,線程是程序執行的最小單位(資源調度的最小單位)
  • 進程是動態的,程序是靜態的: 程序是有序代碼的集合,可以複製;進程是程序在數據集上的一次執行
  • 進程具有結構特徵,由程序段、數據段和進程控制塊三者組成
  • 進程與程序的對應關係: 通過多次執行,一個程序可對應多個進程
進程實體構成
  • 程序(段): 進程要進行的操作
  • 數據段: 包括操作的數據和程序自己的變量
  • 進程控制塊PCB(Process Control Block): 存放進程標識符,進程運行的當前狀態,程序和數據的地址、程序運行的CPU環境
進程的特徵
  • 動態性: 進程是一個動態的概念,進程具有生命週期
  • 併發性: 多個進程實體同時存在於內存中,且一段時間內同時運行,共享系統資源,引入進程實體的目的就是併發執行
  • 獨立性: 進程是一個能獨立運行的基本單位,也是系統進行資源分配和調度的基本單位
  • 異步性: 各進程按各自獨立的、不可預測的速度向前推薦
進程併發執行的特徵
  • 間斷性: “走走停停”, 一個程序可能走到中途停下來,失去原有的時序關係
  • 失去封閉性: 程序併發執行時,系統中多道程序共享資源,資源的狀態不是取決於某一進程,所以失去封閉性
  • 不可再現性: 失去封閉性->失去可再現性,外界環境在程序的兩次執行期間發生變化,失去原有的重複性特徵
進程塊的4大原語
  • 創建原語

    在實際系統中創建一個進程有兩種方法:一是由操作系統建立,O號進程就是由操作系統建立的;二是由其他進程創建一個新的進程。基本操作都是一樣的。創建進程原語總是先爲新建進程申請一空白PCB,併爲之分配唯一的數字標識符,使之獲得PCB的內部名稱,若該進程所對應的程序不在內存中,則應將它從外存儲器調入內存,並將該進程有關信息填入PCB中,然後置該進程爲就緒狀態,並將它排入就緒隊列和進程家族隊列中

  • 撤銷原語

    撤銷進程的實質是撤銷進程存在標誌——進程控制塊PCB。一旦PCB被撤銷,進程就消亡了。撤銷原語的操作過程大致如下:以調用者提供的標識符Ⅱ爲索引,從該進程所在的隊列,將它從該隊列中消去,並撤銷屬於該進程的一切“子孫進程”,若有父進程則從父進程PCB中刪除指向該進程的指針,並釋放撤銷進程所佔用的全部資源,或將其歸還給父進程,或歸還給系統。若被撤銷的進程處於執行狀態,應立即中斷該進程的執行,並設置調度標識爲真,以指示該進程被撤銷後系統應重新調度

  • 阻塞原語

    阻塞原語的大致工作過程如下:開始時,進程正處於執行狀態,因此首先應中斷CPU執行,並保存該進程的CPU現場,然後把阻塞狀態賦予該進程,並將它插入具有相同實體的阻塞隊列中

  • 喚醒原語

    一進程因爲等待事件的發生而處於阻塞狀態,當等待的事件完成後,進程又具有了繼續執行的條件,這時就要把該進程從阻塞狀態轉變爲就緒狀態,這個工作由喚醒原語來完成。喚醒原語執行的操作有:先把被喚醒進程從阻塞隊列中移出,設置該進程當前狀態爲就緒狀態,然後再將該進程插入到就緒隊列中

2. 進程的五狀態

創建狀態
  • 創建進程時擁有PCB但其他資源尚未就緒的狀態稱爲創建狀態
  • 當其他資源準備就緒則進入就緒狀態
就緒狀態
  • 進程被分配到除CPU以外的所有必要的資源
  • 只要再獲得CPU的使用權,就可以立即雲運行
阻塞狀態
  • 進程因某種原因如:其他設備未就緒而無法繼續執行從而放棄CPU的狀態稱爲阻塞狀態
  • 解決方案:
    (1) 將所有的阻塞狀態的進程統一放入一個隊列裏面,等待CPU空閒,用時間換空間
    (2)將不同類別的進程分門別類地放入不同的隊列,等CPU空閒根據隊列不同優先次序調度,用空間換時間
    在這裏插入圖片描述
執行狀態
  • 進程獲得CPU,其程序正在執行稱爲執行狀態
  • 此狀態某一時刻的進程的數目小於等於CPU的數目
終止狀態
  • 進程結束由系統清理或者歸還PCB的狀態稱爲終止狀態
三種基本狀態的轉換

在這裏插入圖片描述

3. 進程控制

進程的創建
  • 進程創建事件

    1. 用戶登錄: 在分時系統中,用戶在終端登錄後,如果是合法用戶,系統將爲用戶創建一個進程,並插入就緒隊列
    2. 作業調度: 在批處理系統中,當作業調度程序調度到某作業時,該作業裝入內存,爲它分配資源並創建進程
    3. 提供服務: 當運行中的用戶進程提出某種請求後,系統將專門創建一個進程來提供服務,如打印
    4. 應用請求: 由應用進程爲自己創建進程,以便能併發執行,如輸入、計算、輸出程序
  • 進程創建過程

    1. 申請空白PCB: 爲新進程申請唯一的數字標識符
    2. 爲進程分配資源: 爲新進程的程序和數據分配內存
    3. 初始化進程控制塊: 初始化標識信息將系統標識信息寫入新的PCB
    4. 將新進程插入就緒隊列: 前提是進程就緒隊列能夠接納新進程
進程的終止
  • 進程終止事件

    1. 正常結束

    2. 異常結束: 由於出現某些錯誤和故障迫使進程終止,常見的錯誤如下
      (1) 越界錯誤: 程序訪問的存儲區已經出該程序的區域
      (2) 保護錯: 進程試圖去訪問一個不允許訪問的資源或文件
      (3) 非法指令: 程序試圖去執行一條不存在的指令
      (4) 特權指定錯: 用戶進程試圖去執行一條只允許OS執行的指令
      (5) 運行超時

    3. 外界干預: 外界干預並非指在本進程運行中出現了異常事件,而迫使進程結束,有如下的干預
      (1) 操作員或操作系統干預終止該進程,由於某種原因,如死鎖
      (2) 父進程請求,由於父進程具有終止自己的任何子孫進程的權利,可以由父進程提出請求,系統將終止該進程
      (3) 父進程終止時,OS也將它所有子孫進程終止

  • 進程終止過程

    1. 讀取進程狀態: 從PCB集合中檢索出該進程的PCB,從中讀出該進程狀態
    2. 判斷進程轉態並作決策: 如果進程正處於執行轉態,立即終止進程,並置調度標誌爲真,用於重新調度。如果該進程還有子孫進程,還應將其所有子孫進程終止,防止不可控
    3. 歸還資源: 將終止進程所擁有的全部資源,或歸還給其它進程,或者歸還給系統
    4. 將終止進程(它的PCB)從所在隊列移除,等待其它程序來搜索信息
進程的組阻塞與喚醒
  • 進程阻塞和喚醒事件

    1. 請求系統服務: 如請求打印機,若以被其它進程佔用,此時只能阻塞,等其它進程釋放後再請求進程喚醒
    2. 啓動某種操作: 當進程啓動某種操作後,進程在該操作完成後才能繼續執行,則必須使進程阻塞
  • 進程阻塞和喚醒過程

    1. 進程喚醒: 調用喚醒原語weakup(),將阻塞等待的進程喚醒
進程的掛起與激活
  1. 掛起原語: suspend()
  2. 激活原語: active()

4. 進程同步

說明:
  • 對競爭資源在多線程間進行使用次序的協調,使得併發執行的多個程序之間可以有效使用資源和相互合作
臨界資源及臨界區
  • 臨界資源: 指的是一些雖作爲共享資源卻無法同時被多個線程共同訪問的共享資源。當進程在使用臨界資源時,其他進程必須依據操作系統的同步機制等待佔用進程釋放該共享資源纔可以重新競爭使用該共享資源,如打印機、磁帶機、卡片輸入機等

  • 臨界區: 每個進程中訪問臨界資源的那段代碼稱爲臨界區

  • 進入區: 在臨界區之前,對臨界區進行查看,看是否正在被訪問,如果未被訪問,該進程進入臨界區,並設置它正在被訪問的標誌,這段代碼稱爲進入區

  • 退出區: 在臨界區後的一段代碼,用於將訪問的資源恢復爲未被訪問的標誌,這段代碼稱爲退出區

進程間的同步原則
  • 空閒讓進:資源無佔用,允許使用
  • 忙則等待:資源有佔有,請求進程等待
  • 有限等待:保證有限等待時間能夠使用資源
  • 讓權等待:等待時,進程需讓出CPU
進程同步的方法
信號量機制
  • 整型信號量:
    通過兩個標準的原子操作wait(S)和signal(S)訪問,這兩個操作分別被稱爲P、V操作。P操作用來判斷訪問臨界資源,V操作用來釋放臨界資源

  • 記錄型信號量:
    相比於整型信號量,遵循了"讓權等待"的準則,不存在"忙等"現象

  • AND型信號量:
    相比於記錄型信號量,通過將所有需要的資源一次性全部分配給進程解決死鎖的問題

  • 信號量集:
    一次申請多個資源,可以批量的處理資源,當資源低於某個下限值時便不予分配。大大提高效率

  • 信號量的應用
    利用信號量實現前趨關係
    在這裏插入圖片描述
    生產者消費者問題
    在這裏插入圖片描述

線程間的同步
  • 互斥量
  • 讀寫鎖
  • 自旋鎖
  • 條件變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章