操作系統進程的概念,進程的狀態及狀態轉換,進程控制

一、進程的基本概念

1. 多道程序設計

允許多個程序同時進入內存並運行,其目的是爲了提高系統效率。


2. 併發環境

一段時間間隔內,單處理器上有兩個或者兩個以上的程序同時處於開始運行但尚未結束的狀態,並且次序不是事先確定的

併發程序指的就是在併發環境中執行的程序。


3.進程的定義(Process)————對CPU的抽象

進程是具有獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的獨立單位。又稱爲任務(Task or Job)

特點:

  • 程序的一次執行過程
  • 是正在運行程序的抽象
  • 將一個CPU變幻成多個虛擬的CPU
  • 系統資源是以進程爲單位分配的,如內存、文件、。。。
  • 每個具有獨立的地址空間
  • 操作系統將CPU調度給需要的進程
4.進程控制塊PCB

  • PCB:Process Control Block 又稱爲 進程描述符、進程屬性
  • 是操作系統用於管理控制進程的一個專門的數據結構
  • 記錄進程的各種屬性,描述進程的動態變化過程

PCB是系統感知進程存在的唯一標誌:進程與PCB是一一對應的

進程表: 所有進程的PCB集合

PCB所包含的信息

  • 進程描述信息
    • 進程標識符(Process ID),唯一。通常是一個整數
    • 進程名。通常基於可執行文件名,不唯一
    • 用戶標識符(user ID)
    • 集成組關係
  • 進程控制信息
    • 當前的狀態
    • 優先級(priority)
    • 代碼執行入口地址
    • 程序的磁盤地址
    • 運行統計信息(執行時間,頁面調度)
    • 進程間同步和通信
    • 進程的隊列指針
    • 進程的信息隊列指針
  • 作擁有的資源和使用情況
    • 虛擬地址空間狀況
    • 打開文件列表
  • CPU現場信息
    • 寄存器值(通用寄存器、程序計數器PC、程序狀態字PSW、棧指針)
    • 指向該進程頁表的指針


5.進程狀態及狀態轉換(三、五、七)

5.1進程的三種基本狀態: 運行態, 就緒態, 等待態

運行態(Running)

佔有CPU,並在CPU上運行

就緒態(Ready)

已經具備運行條件,但由於沒有空閒CPU,而暫時不能運行

等待態(Waiting/Blocked)又稱爲: 阻塞態、封鎖態、睡眠態

因等待某一時間而暫時不能運行(例如:等待讀盤結果)

三狀態模型及狀態轉換


5.2進程的其他狀態

創建態(New)

 已經完成創建一進程所必需的工作——PID/PCB;但尚未同意執行該文件——因爲資源有限

終止態(Terminated)

 終止執行後,進程進去該狀態;可完成一些數據統計工作;資源回收

掛起態(Suspend)

 用於調節負載;進程不佔用內存空間,其進程映像交換到磁盤上

五狀態進程模型


七狀態模型


linux狀態示意圖

5.3 進程隊列

  • 操作系統爲每一類進程建立一個或者多個隊列
  • 隊列元素爲PCB
  • 伴隨進程狀態的改變,其PCB從一個隊列進去另一個隊列

注意: 多個等待隊列表示等待的事件不同

           就緒隊列也可以有多個

   但COU情況下,運行的隊列中只有一個進程

5.4 五狀態進程模型的隊列模型


6. 進程的控制

6.1 進程控制

進程控制操作完成進程各狀態之間的轉換,由具有特定功能的原語完成。

原語(primitive) : 挖煤成交額美好某種特定功能的一段程序,具有不可分割性和不可中斷性。即原語的執行必須是連續的,在執行過程中不允許被中斷。

例如: 進程創建原語;進程撤消原語;阻塞、喚醒原語等 

6.2 進程的創建

主要實現的工作:

  • 給新進程分配一個唯一標識以及進程控制塊
  • 爲進程分配地址空間
  • 初始化控制塊
    • 設置默認值(例如:狀態爲New,。。。)
  • 設置相應的隊列指針
    • 把新景程加到就緒隊列鏈表中
不同操作系統中主要的創建進程操作

UNIX: frok/exec

WINDOWS: CreateProcess

6.3 進程的撤銷

主要實現的工作:

  • 收回進程所佔用的資源
    • 關閉打開的文件、斷開網絡鏈接、回收分配的內存
  • 撤銷該進程的PCB

不同操作系統中主要的創建進程操作

UNIX: exit

WINDOWS: TerminateProcess

6.4 進程阻塞

處於運行狀態的進程,在其運行過程中期待某一事件的發生,如等待鍵盤的輸入、等待磁盤數據傳輸完成、等待其他進程發送信息,當被等待的時間未發生時,由進程自己執行阻塞原語,使自己的運行狀態變爲阻塞態。

不同操作系統中主要的創建進程操作

UNIX: wait

WINDOWS: WaitForSingleObject

6.5 UNIX的幾個進程控制操作

  • fork() 通過複製調用進程來建立新的進程,是最基本的進程建立過程


  • exec() 包括一系列系統調用,它們都是通過用一段新的程序代碼覆蓋原來的地址空間,實現進程執行代碼的轉換
  • wait() 提供初級進程同步操作,能使一個進程等待另一個進程的結束
  • exit() 用來終止一個進程的運行

6.6 進程的深入在學習

1. 進程的分類  

  • 系統進程;用戶進程
  • 前臺進程;後臺進程
  • CPU密集型進程;I/O密集型進程
2. 進程的層次結構

UNIX:進程家族樹;int 爲根

WINDOWS:地位相同

3. 進程和程序的區別

  • 進程能夠更準確刻畫併發,而程序不能
  • 程序是靜態的,進程是動態的
  • 進程有生命週期的,有誕生有消亡,是短暫的;而程序相對長久的
  • 一個程序可以對應多個進程
  • 進程具有創建其他進程的功能
4. 進程地址空間

操作系統爲每一個進程都分配了一個地址空間

5. 進程映像(IMAGE)

對進程執行活動全過程的靜態描述

由進程地址空間內容、硬件寄存器內容以及與該進程相關的內核數據結構、內核棧組成

  • 和用戶相關的: 進程地址控件(包括代碼段、數據段、堆和棧、共享庫、。。。)
  • 和寄存器相關的: 程序計數器、指令寄存器、程序狀態寄存器、棧指針、通用寄存器等的值
  • 和內核相關的: 動態部分內核棧(不同進程在進入內核後使用不同的內核棧)
    • 靜態部分:PCB及各種資源數據結構
    • 動態部分:內核棧(不同進程在進入內核後使用不同的內核棧)
6. 上下文(CONTEXT)切換

  •  將CPU硬件狀態從一個進程換到另一個進程的過程稱爲上下文切換
  • 進程運行時,其硬件狀態保存在CPU的寄存器中(程序計數器、程序狀態寄存器、棧指針、通用寄存器、其他控制寄存器的值)
  • 進程不運行時,這些寄存器的值保存到進程控制塊PCB中;當操作系統要運行一個新的進程時,將PCB中的相關值送到對應的寄存器中

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