1. 程式人生 > >os -- 進程的控制

os -- 進程的控制

rgb microsoft 正常 完成 spl 復制 wak 設備 獲得

os -- 進程的控制

新建模板小書匠

參考

《計算機操作系統》(第四版) 湯小丹等編著


概念引入

進程控制

進程控制是最基本的功能,負責創建進程、結束進程等功能,一般由 OS 內核中的原語來實現

原語

所謂原語,就是由若幹條指令組成的,用於完成一定功能的一個過程,算是不可分割的、最基本的操作

Note

  1. 接下來原語基本用於所有的操作

操作系統內核

操作系統將一些常用或者運行頻率較高的模塊(如時鐘管理、進程調度等)常駐內存,這些就被稱為 OS 內核

兩大功能
  1. 支撐功能

    • 中斷處理
    • 時鐘管理
    • 原語操作

  2. 資源管理功能

    • 進程管理
    • 存儲器管理
    • 設備管理

進程的創建

進程的層次

進程可以創建另一個進程,形成父進程和子進程的關系

Note

  1. 進程不能拒絕子進程的繼承權
  2. 父進程撤銷時,子進程也得隨之 over
  3. 根據父子進程的關系,可以構成一棵進程樹
  4. Window 中,一個進程創建另一個進程時,獲得一個句柄,形成控制與被控制的關系

引起創建進程的事件

  1. 用戶登錄
  2. 作業調度
  3. 提供服務
  4. 應用請求

進程的創建

調用進程創建原語 Creat

  1. 申請空白 PCB(進程控制塊),獲取唯一的數字標識符
  2. 分配進程所需的資源
  3. 初始化 PCB
  4. 允許的情況下,插入就緒隊列

進程的終止

引起進程終止的事件

  1. 正常結束

  2. 異常終止

    • 越界錯:超出進程訪問的存儲區
    • 保護錯:進程試圖訪問不能被訪問的資源或文件
    • 非法指令:訪問一條不存在的指令
    • 運行超時
    • 等待超時
    • 算術運算錯
    • I/O 故障
  3. 外界幹預

Note:最典型的算是 Ctrl + C 吧

進程的終止過程

調用進終止原語

  1. 根據進程的標識符, 從 PCB 集合中檢索該進程的 PCB,讀出進程狀態
  2. 若進程還在執行,則立即終止該進程的執行,並置調度標誌為真,用於指示該進程被終止後應重新進行調度
  3. 若該進程還有子孫進程,則先終止其子孫進程,防止失控進程的產生
  4. 將終止進程的所有資源歸還父進程或系統
  5. PCB 從所在集合中移除

進程的阻塞與喚醒

引起進程阻塞和喚醒的事件

  1. 請求共享資源失敗
  2. 等待某種操作的完成
  3. 新數據尚未到達
  4. 等待新任務的到達

進程阻塞進程

調用阻塞原語 Block

  1. 將進程停止運行
  2. 修改 PCB 現行狀態為“阻塞”
  3. 插入阻塞隊列等待喚醒

進程喚醒過程

調用喚醒原語 Wakeup

  1. 將進程從阻塞隊列移出
  2. 修改 PCB 線性狀態為“執行”
  3. 插入到就緒隊列

進程的掛起與激活

進程的掛起

掛起原語 suspend

  1. 檢查被掛起進程的狀態
    • 若為活動就緒狀態,則改為靜止就緒
    • 若為活動阻塞狀態,則改為靜止阻塞
  2. 將該進程的 PCB 復制到指定的內存區域,方便考察其運行情況
  3. 若進程正在執行,則轉向調度程序重新調度

進程的激活過程

激活原語 active

  1. 狀態轉換與掛起相反

總結

  1. 原語和操作系統內核
  2. 進程的創建和終止
  3. 進程的阻塞和喚醒
  4. 進程的掛起和激活

os -- 進程的控制