進程是操作系統為了提高系統的併發處理能力,為瞭解決可以“同時”運行多個程式且為了對併發執行的程式加以描述和控制而提出來的。 ...
進程知識概覽
概念
進程是操作系統為了提高系統的併發處理能力,為瞭解決可以“同時”運行多個程式且為了對併發執行的程式加以描述和控制而提出來的。
進程併發執行時的特征
- 間斷性(巨集觀“同時”,微觀間斷性執行)
- 失去封閉性(一個資源可能會有多個進程“同時”訪問)
- 不可再現性(失去了封閉性,從而導致失去了可再現性)
進程的特征
結構特征
通常的程式是不能併發執行的,為使程式(含數據)可以能夠獨立運行,應為之配置——進程式控制制塊(PCB,Process Control Block),而由程式段、相關的數據段和PCB三部分便構成了進程實體。
許多情況下所說的進程實際上是指進程實體。例如,創建進程實質上是創建進程實體中的PCB,而撤銷進程實質上是撤銷進程的PCB
動態性
進程的實質是進程實體的一次執行過程,動態性是進程的最基本的特征,動態性還表現在:“它由創建而產生,由調度而執行,由撤銷而消亡”。
併發性
這是指多個進程實體同時存在於記憶體中,且能在一段時間內同時運行,併發性是進程的重要特征,同時也成為 OS 的重要特征。
引入進程的目的也正是為了使其進程實體能和其它進程實體併發執行,而只有程式(沒有PCB)是不能併發執行的。
獨立性
進程實體是一個能獨立運行、獨立分配資源和獨立接受調度的基本單位。未建立 PCB 的程式都不能作為一個獨立的單位參與運行。
非同步性
進程按各自獨立的、不可預知的速度向前推進或者說進程實體按非同步方式運行。
進程的創建和終止
進程的創建
- 申請空白 PCB,為新的進程申請唯一標識符,並從PCB集合中索取一個空白PCB
- 為新進程分配資源
- 初始化進程式控制制塊
- 把新進程轉入就緒狀態並插入就緒隊列中
終止
- 根據被終止的進程的唯一標識符,從PCB集合中檢索該進程的PCB,從中讀取進程狀態
- 若被終止進程正處於執行狀態,應立即終止該進程的執行,並設置調度標誌為真,用於指示該進程被終止後應重新進行調度。
- 若該進程還有子孫進程,還應將所有子孫進程予以終止,以防他們成為不可控的進程
- 將被終止進程所擁有的全部資源,或者歸還給其父進程或者歸還給系統
- 將被終止進程PCB從所在隊列(或鏈表)中移除
進程式控制制塊
進程式控制制塊的作用
為了描述和控制進程的運行,系統為每個進程定義了一個數據結構——進程式控制制塊(PCB,Process Control Block)它是進程實體的一部分,是操作系統中最重要的記錄型數據結構。PCB中記錄了操作系統所需的、用於描述進程的當前情況以及控制進程運行的全部信息。
PCB的作用是使得一個在多道程式環境下不能獨立運行的程式(含數據)成為一個能獨立運行的基本單位,一個能與其他進程併發執行的進程。或者說,OS是根據PCB來對併發執行的進程進行控制和管理的。
進程式控制制塊中的信息
- 進程標識符
- 內部標識符(OS內部用的進程的一個唯一標識符)
- 外部標識符(由創建者提供,通常是由字母、數字組成,往往是由用戶(進程)訪問該進程時使用。
處理機狀態
處理機狀態信息主要是由處理機的各種寄存器中的內容組成的。處理機在運行時,許多信息保存在寄存器中,當處理機被中斷時,所有這些信息都必須保存在PCB中以便在進程重新執行時,能夠從斷點繼續執行。
這些寄存器包括:- 通用寄存器(用戶程式可以訪問、用於暫存信息)
- 指令寄存器(存放要訪問的下一條指令的地址)
- 程式狀態字PSW(狀態信息如條件碼、執行方式、中斷屏蔽標誌等)
- 用戶棧指針(每個用戶進程都有一個或若幹個與之相關的系統棧,用於存放過程和系統調用參數及調用地址)
進程調度信息
在 PCB 中還存放一些與進程調度和進程對換的有關信息:- 進程狀態(當前進程的狀態,作為進程調度和對換的依據)
- 進程優先順序
- 進程調度所需的其它信息(進程已等待CPU時間等)
- 事件(阻塞原因)
進程式控制制信息
進程式控制制信息包括:- 程式和數據地址
- 進程同步和通信機制(實現進程同步和進程間通信的必須機制,如消息隊列指針、信號量等,他們可能全部或部分放在PCB中)
- 資源清單(除CPU外的進程所需的資源以及已經分配到該進程的資源)
- 鏈接指針(本進程所在隊列的下一個進程的PCB的首地址)
- 進程標識符
進程式控制制塊的組織方式
在一個系統中通常可擁有數十個、數百個乃至數千個PCB。為了能對他們加以有效的管理,應該用適當的方式將這些PCB組織起來。目前常用的組織方式有兩種:
- 鏈接方式(把具有同一狀態的PCB,用七張的鏈接字鏈接成一個隊列)
- 索引方式(根據進程的狀態建立幾張索引表,如就緒索引表、阻塞索引表等)
進程同步
同步機制應遵循的規則
- 空閑讓進(臨界資源處於空閑狀態時,應允許訪問的進程進入臨界區以有效利用臨界資源)
- 忙則等待(當已有進程進入臨界區表明臨界資源正在被訪問,因而其它試圖進入臨界區的進程必須等待以保證對臨界資源的互斥訪問)
- 有限等待(對要求訪問臨界資源的進程,應保證有限時間內能進入自己的臨界區以免陷入“死等”狀態)
- 讓權等待(不能進入自己的臨界區時,應立即釋放處理機以免陷入“忙等”狀態)
信號量機制
信號量是由荷蘭學者 Dijkstra 提出的一種卓有成效的進程同步工具。
基本思想是把資源作為信號,信號量代表了可分配的資源數量,每申請一次資源會分配一個信號量直至分配不出來等待信號的釋放。
- 整型信號量
- 記錄型信號量
- AND 型信號量
- 信號量集
進程通信
進程通信的類型
- 共用存儲器系統
- 消息傳遞系統
- 管道通信(用於連接一個讀進程和一個寫進程以實現它們之間通信的一個共用文件)
消息傳遞通信的實現方法
直接通信方式
直接發送消息給對應的接收者
Send(Recevier, message); Receive(Sender, message);
間接通信方式
發送消息給一個中間實體(信箱),消息在信箱中可以安全地保存,只允許指定的目標用戶讀取,
Send(mailbox, message); Receive(mailbox, message);