《操作系統精髓與設計原理》知識梳理 之進程篇

前言

       在我看來,進程之於處理器猶如細胞之於心臟,進程好比體內的細胞,而操作系統那就如整個生理系統。因此,進程對於操作系統來說至關重要。

Ⅰ. 進程

一組元素組成的實體,進程的兩個基本元素是程序代碼(program code, 可能被執行相同程序的其他進程共享)和代碼相關聯的數據集(set of data)。

進程控制塊:

標識符

狀態

優先級

程序計數器

內存指針

上下文數據

I/O狀態信息

記賬信息

 

Ⅱ. 進程狀態

兩狀態進程模型

非運行態

運行態

 

進程的創建和終止

導致進程創建的原因:

新的批處理作業

交互登錄

操作系統因爲提供一項服務而創建

由現有的進程派生

導致進程終止的原因

正常完成

超過時限

無可用內存

越界

保護錯誤

算術錯誤

時間超出

I/O失敗

無效指令

特權指令

數據誤用

操作員或操作系統干涉

父進程終止

父進程請求

 

五狀態模型

新建態

就緒態

運行態

阻塞態

退出態

 

被掛起的進程

交換:把內存中某個進程的一部分或全部移到磁盤中

就緒態:進程在內存中並可以執行

阻塞態:進程在內存中並等待一個事件

阻塞/掛起態:進程在外存中並等待一個事件

就緒/掛起態:進程在外存中,但是隻要被載入內存就可以執行

 

比較重要的轉換:

阻塞-->阻塞/掛起

阻塞/掛起-->就緒/掛起

就緒/掛起-->就緒

就緒-->就緒/掛起

其他幾種轉換:

新建-->就緒/掛起及新建-->就緒

阻塞/掛起-->阻塞

運行-->就緒/掛起

各種狀態-->退出

 

掛起進程特點:

  1. 進程不能立即執行
  2. 進程可能是或不是正在等待一個事件。如果是,阻塞條件不依賴於掛起條件,阻塞事件的發生不會使進程立即被執行
  3. 爲阻止進程執行,可以通過代理把這個進程置於掛起狀態,代理可以是進程自己,也可以是父進程或操作系統
  4. 除非代理顯式地命令系統進行狀態轉換,否則進程無法從這個狀態中轉移

 

導致進程掛起的原因:

交換

其他OS原因

交互式用戶請求

定時

父進程請求

 

Ⅲ. 進程的描述

操作系統的控制結構:

內存表

I/O表

文件表

主進程表

 

進程控制結構

進程映像是程序、數據、棧和屬性的集合

包括 用戶數據、用戶程序、系統棧和進程控制塊

進程控制塊:

進程標識信息

處理器狀態信息

進程控制信息

 

Ⅳ. 進程控制

執行模式:用戶態內核態(系統態或控制態)

模式切換

  1. 把程序計數器置成中斷處理程序的開始地址
  2. 從用戶態切換到內核態,使得中斷處理代碼可以包含有特權的指令

 

進程創建:

  1. 給新進程分配一個唯一的進程標識符
  2. 給進程分配空間
  3. 初始化進程控制塊
  4. 設置正確的連接
  5. 創建或擴充其他數據結構

 

進程切換

進程執行的中斷機制

中斷:當前指令的外部執行,對異步外部事件的反應,包括時鐘中斷、I/O中斷和內存失效

陷阱:與當前指令的執行相關,處理一個錯誤或異常條件

系統調用:顯示請求,調用操作系統函數

 

進程狀態的變化(與模式切換不同)

  1. 保存處理器上下文環境,包括程序計數器和其他寄存器
  2. 更新當前處於運行態進程的進程控制塊
  3. 將進程的進程控制塊移到相應的隊列
  4. 選擇另一個進程執行
  5. 更新所選擇進程的進程控制塊,包括將進程的狀態變爲運行態
  6. 更新內存管理的數據結構
  7. 恢復處理器在被選擇的進程最後一次切換出運行態時的上下文環境

 

Ⅴ. 操作系統的執行

無進程的內核:在所有進程之外執行操作系統內核

在用戶進程執行

基於進程的操作系統

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