進程管理
2.1. 進程的概念
2.1.1. 程序順序執行的特徵
- 順序程序設計:一個作業完成了,後一作業才能進入內存,並得以執行。各個作業的程序都是一個語句一個語句的按順序構成。
- 特點(3個):
- ①順序性:上一個動作結束之後纔開始
- ②封閉性:只有程序本身可以的動作才能改變程序的運行環境
- ③可在現性:程序的執行結果與程序運行結果的速度無關。
2.1.2. 程序併發執行的特徵
- 多道程序設計:併發執行,提高系統資源利用率和增加作業吞吐量(作業吞吐量:指在給定時間間隔內所完成作業的數量 )
- 特點(3個)
- ①失去封閉性:資源的使用狀態受到併發程序的共同影響;
- ②程序與計算不再一一對應;
- ③併發程序在執行期間相互制約;
2.1.3. 進程的概念
- 進程: 具有獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位(進程定義爲:程序在併發環境中的執行過程);
- 進程特徵(5個)
-
- 動態性:進程是程序的執行過程,可以處於多種不同狀態
-
- 併發性;
-
- 調度性:進程是申請資源的單位,也是被調度的單位;
-
- 異步性;
-
- 結構性:進程由程序段、數據段和控制結構等組成;
2.2. 進程狀態描述及組織方式
2.2.1. 進程的狀態(3個)
- 運行態:指當前進程已分配到CPU,他的程序正在處理機執行時的狀態(不能大於CPU的個數);
- 就緒態:指進程已具備運行條件,但因爲其他進程佔用了CPU,所以它暫時不能運行而等待分配CPU的狀態;
- 阻塞態:指進程因等待某種事件發生而暫時不能運行的狀態;
進程狀態的轉換:
- 就緒-》運行
- 分配到了CPU,因此改變狀態;
- 運行-》阻塞
- 正在運行的進程因某種條件不滿足而放棄對CPU的佔用;
- 阻塞-就緒
- 處於阻塞狀態的進程所等待的事件發生了,如讀數據的操作完成;
- 運行-》就緒
-
正在運行的進程用完了本次分配給它的CPU時間片;
進程狀態轉換圖
2.2.2 進程的組成
1.進程映像:由程序、數據集合、棧和PCB(進程控制塊) 四部分組成;
- PCB進程控制塊:描述進程的當前狀態、本身特性,對資源的佔用及調度信息等;
2.進程控制塊的組成
- 進程名:它是唯一的標誌對應進程的一個標識符或數字;
- 特徵信息:
- 進程狀態信息;
- 調度優先權:進程獲取CPU的優先級別;
- 通信信息;
- 現場保護區;
- 資源需求、分配和控制方面的信息;
- 進程實體信息:
- 族系關係:反映父子進程的隸屬關係;
- 其他信息:如文件信息,工作單元等。
3. 進程控制塊的作用: 進程控制塊時進程映像中最關鍵的部分,每個進程都有唯一的程序控制塊;
- 注意:PCB是進程存在的唯一標誌;
2.2.3進程組織方式(三種)
- 線性方式:
- 操作系統預先確定整個系統中同時存在的進程的最大數目,然後靜態分佈空間,把所有進程的PCB都放進整個表中;
-
- 缺點:限定同時存在進程的最大數目,無法 創建新的進程,要對整個表掃描,降低了調度效率;
- 缺點:限定同時存在進程的最大數目,無法 創建新的進程,要對整個表掃描,降低了調度效率;
- 鏈接方式:
- 按照進程的不同狀態分別放在不同的隊列中(單CPU狀態下);
-
- 運行狀態只能一個,指針指向它的PCB;
-
- 處於就緒態排成一個隊列,就緒隊列指針指向該隊列的第一個PCB,最後一個PCB的拉鍊指針置爲0,表示結尾(先進先出策略);
-
- 阻塞隊列可以有多個,當滿足某個等待條件時,把對應阻塞隊列上的PCB送到就緒隊列中。
-
- 阻塞隊列可以有多個,當滿足某個等待條件時,把對應阻塞隊列上的PCB送到就緒隊列中。
- 索引方式:
- 利用索引表記載相應狀態進程的PCB地址,狀態相同的進程的PCB組織在同一個索引表中,每個索引表的表目中存放該PCB的地址。
- 各索引表在內存的起始地址放在專用的指針單元中。
2.3進程管理和有關命令
2.3.1 進程圖和進程管理
1.進程圖:
- 衆多進程的族系關係:由父進程創建子進程,子進程在創建子進程,如此下去,從而構成一棵樹形的進程族系圖。
2.進程創建
- 一個進程可以動態創建新進程,前者爲父進程,後者爲子進程;
引發事件: ①:調度新的作業;②:交互式用戶登錄;③:操作系統提供服務;④:現有進程派生新進程
創建新進程要執行創建進程的系統調用:
- 申請一個空閒的PCB;(從系統的PCB表種找出一個空閒的PCB項,並指定一個唯一的進程標誌號PID(進程內部名))。
- 分配資源給新進程。
- 初始化新進程的PCB;
- 將新進程加到就緒隊列中;
一個進程派生新進程之後的可能執行方式:
- 父進程和子進程同時(併發)執行。
- 父進程等待它的某個或者全部子進程終止。
建立子進程的地址空間有兩種方式:
- 子進程複製父進程的地址空間;
- 把程序裝入子進程的地址空間。
3.進程終止
- 從系統的PCB表中找到指定的進程的PCB。若處於運行狀態,則立即終止該進程的運行;
- 回收該進程所佔用的全部資源。
- 若該進程還有子孫進程,則還要終止其所有子孫進程,回收它們所佔有的全部資源。
- 釋放被終止進程的PCB,並從原來隊列中摘走。
4.進程阻塞
- 立即停止當前進程的執行。
- 將現行進程的CPU現場送到該進程的PCB現場保護區中保存起來,以便將來重新運行時回覆此時的現場;
- 把該進程PCB中的現行狀態由運行改爲阻塞狀態,把它插入具有相同事件的阻塞隊列中。
- 轉到進程調度程序,重新從就緒隊列中挑選一個合適的進程投入運行;
5.進程喚醒
- 首先把被阻塞進程從相應的阻塞隊列中摘走;
- 將現行狀態改爲就緒狀態,然後把該進程插入到就緒隊列中;
- 如果被喚醒進程比運行進程的優先級更高,則設置重新調度標誌。
6. 進程映像的更換
- 釋放子進程原來的程序和數據所佔有的內存空間;
- 從磁盤上找出子進程所要執行的程序和數據;
- 分配內存空間,裝入新的程序和數據;
- 爲子進程建立初始的運行環境—主要對各個寄存器初始化,返回到用戶態,運行該進程的程序;
2.3.2 Linux進程管理
1.Linux進程狀態:
- 運行態;
- 可中斷等待下狀態(淺度睡眠);
- 不可中斷等待狀態(深度睡眠);
- 停止態;
- 僵死態;
2.進程的模式和類型
- 執行模式分爲:用戶模式和內核模式
- 用戶模式:運行用戶程序,應用程序或內核之外的系統程序;
- 內核模式:出現系統調用或者發生中斷事件,運行系統(核心)程序;
2.4線程概念
- 線程是進程中執行運算的最小單位,也是執行處理機調度的基本單位
- 一個進程可以包含一個或多個線程;
2.4.1線程的組成和狀態
- 線程的組成: 每個進程都有一個thread結構,及程序控制塊,用於保存自己私有的信息;
- 一個唯一的線程標識符(PID);
- 描述處理器工作情況的一組寄存器的內容;
- 每個thread結構有兩個棧指針,一個指向核心棧,一個指向用戶棧;
- 一個私有存儲區,存放現場保護信息和其他與線程相關的統計信息;
- 線程的狀態:
- 運行狀態;
- 就緒狀態;
- 阻塞狀態;
- 終止狀態: 當一個線程完成任務後,它佔用的寄存器和棧等私有資源會被系統回收,並重新分配給另外的線程;
2.4.2 線程的實現方式------用戶級線程和核心級線程
- 用戶級線程: 在用戶空間實現;
優點:
- 切換速度快;
- 調度算法可專用 ;
- 可運行在任何操作系統上
缺點:
- 阻塞問題;
- 多處理器利用問題
- 核心級線程: 在覈心空間實現;
優點:
- 真正實現並行操作
- 克服阻塞問題
- 本身也可以是多線程的
缺點:
- 控制轉移開銷大
- 調度算法由核心確定,應用進程無法影響線程的切換
2.5 進程間的同步與互斥
2.5.1 進程間的三種關係
1.同步
- 同步進程通過共享資源來協調活動,在執行時間的次序上有一定約束。如:SPOOLing系統;
2.互斥
- 進程爭用某些資源 ,由於競爭同一個物理資源而相互制約
3.通信
- 各個進程通過名字彼此之間進行通信;
2.5.2競爭條件和臨界區
競爭條件: 兩個或多個進程同時訪問和操縱相同的數據時,最後的執行結果取決於進程運行的精確時序;
- 要避免競爭條件:禁止兩個或兩個以上的進程的同時進入臨界區;
臨界資源: 共享資源都有一個特徵,一次僅允許一個進程使用;
臨界區: :每個進程中訪問臨界資源的那段程序,簡稱CS區
進入臨界區要遵循的準則:
- 任何兩個進不能同時處於其臨界區;
- 進程運行的速度具有不確定性;
- 應保證進入臨界區的進程能不受干擾的運行;
- 不得使進程無限期等待進入臨界區;