操作系統-第二章(上)

2.1. 進程的概念

2.1.1. 程序順序執行的特徵

  • 順序程序設計:一個作業完成了,後一作業才能進入內存,並得以執行。各個作業的程序都是一個語句一個語句的按順序構成。
  • 特點(3個):
  • ①順序性:上一個動作結束之後纔開始
  • ②封閉性:只有程序本身可以的動作才能改變程序的運行環境
  • ③可在現性:程序的執行結果與程序運行結果的速度無關。

2.1.2. 程序併發執行的特徵

  • 多道程序設計:併發執行,提高系統資源利用率和增加作業吞吐量(作業吞吐量:指在給定時間間隔內所完成作業的數量 )
  • 特點(3個)
  • ①失去封閉性:資源的使用狀態受到併發程序的共同影響;
  • ②程序與計算不再一一對應;
  • ③併發程序在執行期間相互制約;

2.1.3. 進程的概念

  • 進程: 具有獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位(進程定義爲:程序在併發環境中的執行過程);
  • 進程特徵(5個)
    1. 動態性:進程是程序的執行過程,可以處於多種不同狀態
    1. 併發性;
    1. 調度性:進程是申請資源的單位,也是被調度的單位;
    1. 異步性;
    1. 結構性:進程由程序段、數據段和控制結構等組成;

2.2. 進程狀態描述及組織方式

2.2.1. 進程的狀態(3個)

  1. 運行態:指當前進程已分配到CPU,他的程序正在處理機執行時的狀態(不能大於CPU的個數);
  2. 就緒態:指進程已具備運行條件,但因爲其他進程佔用了CPU,所以它暫時不能運行而等待分配CPU的狀態;
  3. 阻塞態:指進程因等待某種事件發生而暫時不能運行的狀態;

進程狀態的轉換:

  1. 就緒-》運行
  • 分配到了CPU,因此改變狀態;
  1. 運行-》阻塞
  • 正在運行的進程因某種條件不滿足而放棄對CPU的佔用;
  1. 阻塞-就緒
  • 處於阻塞狀態的進程所等待的事件發生了,如讀數據的操作完成;
  1. 運行-》就緒
  • 正在運行的進程用完了本次分配給它的CPU時間片;

    進程狀態轉換圖
    在這裏插入圖片描述

2.2.2 進程的組成

1.進程映像:由程序、數據集合、棧和PCB(進程控制塊) 四部分組成;

  • PCB進程控制塊:描述進程的當前狀態、本身特性,對資源的佔用及調度信息等;

2.進程控制塊的組成

  • 進程名:它是唯一的標誌對應進程的一個標識符或數字;
  • 特徵信息:
  • 進程狀態信息;
  • 調度優先權:進程獲取CPU的優先級別;
  • 通信信息;
  • 現場保護區;
  • 資源需求、分配和控制方面的信息;
  • 進程實體信息:
  • 族系關係:反映父子進程的隸屬關係;
  • 其他信息:如文件信息,工作單元等。

3. 進程控制塊的作用: 進程控制塊時進程映像中最關鍵的部分,每個進程都有唯一的程序控制塊;

  • 注意:PCB是進程存在的唯一標誌;

2.2.3進程組織方式(三種)

  1. 線性方式:
  • 操作系統預先確定整個系統中同時存在的進程的最大數目,然後靜態分佈空間,把所有進程的PCB都放進整個表中;
    • 缺點:限定同時存在進程的最大數目,無法 創建新的進程,要對整個表掃描,降低了調度效率;
      在這裏插入圖片描述
  1. 鏈接方式:
  • 按照進程的不同狀態分別放在不同的隊列中(單CPU狀態下);
    • 運行狀態只能一個,指針指向它的PCB;
    • 處於就緒態排成一個隊列,就緒隊列指針指向該隊列的第一個PCB,最後一個PCB的拉鍊指針置爲0,表示結尾(先進先出策略);
    • 阻塞隊列可以有多個,當滿足某個等待條件時,把對應阻塞隊列上的PCB送到就緒隊列中。
      -在這裏插入圖片描述
  1. 索引方式:
  • 利用索引表記載相應狀態進程的PCB地址,狀態相同的進程的PCB組織在同一個索引表中,每個索引表的表目中存放該PCB的地址。
  • 各索引表在內存的起始地址放在專用的指針單元中。
  • 在這裏插入圖片描述

2.3進程管理和有關命令

2.3.1 進程圖和進程管理

1.進程圖:

  • 衆多進程的族系關係:由父進程創建子進程,子進程在創建子進程,如此下去,從而構成一棵樹形的進程族系圖。
    在這裏插入圖片描述

2.進程創建

  • 一個進程可以動態創建新進程,前者爲父進程,後者爲子進程;

引發事件: ①:調度新的作業;②:交互式用戶登錄;③:操作系統提供服務;④:現有進程派生新進程

創建新進程要執行創建進程的系統調用:

  1. 申請一個空閒的PCB;(從系統的PCB表種找出一個空閒的PCB項,並指定一個唯一的進程標誌號PID(進程內部名))。
  2. 分配資源給新進程。
  3. 初始化新進程的PCB;
  4. 將新進程加到就緒隊列中;

一個進程派生新進程之後的可能執行方式:

  1. 父進程和子進程同時(併發)執行。
  2. 父進程等待它的某個或者全部子進程終止。

建立子進程的地址空間有兩種方式:

  1. 子進程複製父進程的地址空間;
  2. 把程序裝入子進程的地址空間。

3.進程終止

  1. 從系統的PCB表中找到指定的進程的PCB。若處於運行狀態,則立即終止該進程的運行;
  2. 回收該進程所佔用的全部資源。
  3. 若該進程還有子孫進程,則還要終止其所有子孫進程,回收它們所佔有的全部資源。
  4. 釋放被終止進程的PCB,並從原來隊列中摘走。

4.進程阻塞

  1. 立即停止當前進程的執行。
  2. 將現行進程的CPU現場送到該進程的PCB現場保護區中保存起來,以便將來重新運行時回覆此時的現場;
  3. 把該進程PCB中的現行狀態由運行改爲阻塞狀態,把它插入具有相同事件的阻塞隊列中。
  4. 轉到進程調度程序,重新從就緒隊列中挑選一個合適的進程投入運行;

5.進程喚醒

  1. 首先把被阻塞進程從相應的阻塞隊列中摘走;
  2. 將現行狀態改爲就緒狀態,然後把該進程插入到就緒隊列中;
  3. 如果被喚醒進程比運行進程的優先級更高,則設置重新調度標誌。

6. 進程映像的更換

  1. 釋放子進程原來的程序和數據所佔有的內存空間;
  2. 從磁盤上找出子進程所要執行的程序和數據;
  3. 分配內存空間,裝入新的程序和數據;
  4. 爲子進程建立初始的運行環境—主要對各個寄存器初始化,返回到用戶態,運行該進程的程序;

2.3.2 Linux進程管理

1.Linux進程狀態:

  1. 運行態;
  2. 可中斷等待下狀態(淺度睡眠);
  3. 不可中斷等待狀態(深度睡眠);
  4. 停止態;
  5. 僵死態;
    在這裏插入圖片描述

2.進程的模式和類型

  • 執行模式分爲:用戶模式和內核模式
  • 用戶模式:運行用戶程序,應用程序或內核之外的系統程序;
  • 內核模式:出現系統調用或者發生中斷事件,運行系統(核心)程序;
    在這裏插入圖片描述

2.4線程概念

  • 線程是進程中執行運算的最小單位,也是執行處理機調度的基本單位
  • 一個進程可以包含一個或多個線程;

2.4.1線程的組成和狀態

  • 線程的組成: 每個進程都有一個thread結構,及程序控制塊,用於保存自己私有的信息;
  1. 一個唯一的線程標識符(PID);
  2. 描述處理器工作情況的一組寄存器的內容;
  3. 每個thread結構有兩個棧指針,一個指向核心棧,一個指向用戶棧;
  4. 一個私有存儲區,存放現場保護信息和其他與線程相關的統計信息;
  • 線程的狀態:
  1. 運行狀態;
  2. 就緒狀態;
  3. 阻塞狀態;
  4. 終止狀態: 當一個線程完成任務後,它佔用的寄存器和棧等私有資源會被系統回收,並重新分配給另外的線程;

2.4.2 線程的實現方式------用戶級線程和核心級線程

  1. 用戶級線程: 在用戶空間實現;

優點:

  • 切換速度快;
  • 調度算法可專用 ;
  • 可運行在任何操作系統上

缺點:

  • 阻塞問題;
  • 多處理器利用問題
  1. 核心級線程: 在覈心空間實現;

優點:

  • 真正實現並行操作
  • 克服阻塞問題
  • 本身也可以是多線程的

缺點:

  • 控制轉移開銷大
  • 調度算法由核心確定,應用進程無法影響線程的切換

2.5 進程間的同步與互斥

2.5.1 進程間的三種關係

1.同步

  • 同步進程通過共享資源來協調活動,在執行時間的次序上有一定約束。如:SPOOLing系統;

2.互斥

  • 進程爭用某些資源 ,由於競爭同一個物理資源而相互制約

3.通信

  • 各個進程通過名字彼此之間進行通信;

2.5.2競爭條件和臨界區

競爭條件: 兩個或多個進程同時訪問和操縱相同的數據時,最後的執行結果取決於進程運行的精確時序;

  • 要避免競爭條件:禁止兩個或兩個以上的進程的同時進入臨界區;

臨界資源: 共享資源都有一個特徵,一次僅允許一個進程使用;

臨界區: :每個進程中訪問臨界資源的那段程序,簡稱CS區

進入臨界區要遵循的準則:

  1. 任何兩個進不能同時處於其臨界區;
  2. 進程運行的速度具有不確定性;
  3. 應保證進入臨界區的進程能不受干擾的運行;
  4. 不得使進程無限期等待進入臨界區;
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章