進程管理及控制筆記【操做系統】

(一 ) 程序的併發

(1) 順序執行和併發執行

程序有兩種執行方式:① 順序執行 ② 併發執行算法

順序執行:單道批處理的執行方式,也用於簡單的單片機系統,具備獨立功能的程序獨佔cpu直到獲得最終結果的過程數據庫

併發執行:如今的操做系統基本爲併發執行,其引入目的是爲了提升系統資源利用率服務器

A:單道程序順序執行的特色:

  • 順序性:嚴格程序結構規定的次序執行
  • 封閉性:佔據了所有資源,最終結果由初始條件決定,不受外界影響
  • 可再現性:初始條件一致則結果一致,與執行速度無關

B:多道程序執行的特色

  • 獨立性:邏輯上獨立
  • 隨機性:輸入與程序開始時間是隨機的
  • 資源共享性:硬件和軟件資源共享

(2) 程序併發

A:基本概念

基本概念:一組邏輯上相互獨立的程序或者程序段在執行時間上客觀上互相重疊微信

  • 說白了,就是一個程序或者說程序段還沒執行結束,另外一個程序或者程序段就開始了
  • 它也是爲了加強計算機的處理能力和提供資源的利用率所設計的一種同時操做技術

B:優缺點

優勢:提升資源利用率數據結構

缺點多線程

  • 必然致使資源共享和競爭,從而改變程序的執行速度,同時也會失去原有的時序關係
  • 若是併發程序不按照特定的規則和方法進行資源共享和競爭,則其執行結果將不可避免失去封閉性和可再現性併發

    • 失去封閉性:資源被共享了,可能會受到其餘程序控制邏輯的影響,例如一個程序寫到存儲器中的數據可能被另外一個程序修改
  • 失去可再現性:受到其餘的因素干擾,初始條件一致,結果可能不一致

(3) 引入進程的概念

A:出現的問題

上面提到了併發的概念,可是若是隨意的執行併發,不作任何約束,將會有大量的錯誤結果產生,同時上面也提到了,不一樣的執行順序,獲得的結果也是不一樣的,也就是再也不具備封閉性和結果的可再現性異步

這是爲何呢? 這是由於公共變量進行了共享引發的高併發

B:如何解決問題

因此爲了獲取可再現性,咱們須要增長一點約束條件,也就是把他如今存在的問題解決掉即:知足封閉性和可再現性spa

怎麼作呢,首先咱們須要消去共享資源(例如公共變量)帶來的影響

在這裏假定兩個程序,A 和 B ,咱們須要保證知足一些條件

  • 程序 A讀變量集程序 B寫變量集,不能存在交集
  • 反之,程序 A寫變量集程序 B讀變量集,也不能存在交集
  • 程序 A程序 B 的寫變量集,更加不能存在交集(二者讀沒有關係,由於沒有什麼破壞)

C:引入進程

上面雖然提出了三點要求,可是這幾個點卻並很差檢查出來,這是由於程序未運行,誰也不知道併發的狀況是如何的,資源是如何被爭奪的等等,因此說這個時候,「程序」 這個靜態概念已經不能很確切的反映程序活動的特徵了,因此,「進程」 這個動態的概念就出現了,用來描述系統以及用戶的程序活動

(二) 進程的概述

(1) 什麼是進程 ?

  • 一個被調入內存正在執行的程序
  • 一個具備獨立功能的程序對某個數據集在CPU處理器上的執行過程
  • 獨立分配資源的基本單位

簡單的理解:進程是程序的一次執行活動,它描述了程序動態執行的過程

(2) 進程和程序的區別

進程 程序
動態 靜態
併發性 沒有併發性
競爭系統資源的基本單位 不具備資源的競爭性
不一樣進程能夠包含同一個程序,該程序對應的數據集不一樣 能夠有多個進程

(3) 進程和做業的區別

進程 做業
具備獨立功能的程序對某個數據集在CPU處理器上的執行過程 用戶須要計算機完成某項任務時要求計算機所作工做的集合
執行任務的執行實體 用戶向計算機提交任務的任務實體
(二者關係) 一個做業能夠由多個進程組成

作了一幅圖,方便你們理解

(4) 進程的特色

動態性: 進程對應程序的執行

  • 進程產生:建立 --> 運行 --> 消亡
  • 進程在其生命週期內,在內存三種基本狀態(就緒、運行、阻塞)之間轉換,必要時還可能被掛起到外存

獨立性:各進程的地址空間相互獨立,除非採用進程間通訊手段

併發性:任何進程均可以同其餘進程一塊兒向前推動

異步性:每一個進程都以其相對獨立的不可預知的速度向前推動

結構化:進程 = 代碼段 + 數據段 + PCB(進程控制塊)

(三) 進程控制塊(PCB)

上面在進程的特色中提到了 進程 = 代碼段 + 數據段 + PCB(進程控制塊),下面就順着介紹一個進程控制塊這個內容

(1) 基本介紹

① 進程控制塊,用來記錄進程相關信息和管理進程而設置的,而且是由 OS 維護的一個特定的數據結構

  • 包含了進程的描述信息、控制信息、資源信息以及現場保護區(下面講)

② PCB 是進程動態特性的集中反映

  • 系統經過 PCB 感知進程的存在,經過 PCB 中所包含的各項變量的變化,掌握進程的狀態以達到控制進程活動的目的

③ PCB 結構的所有或部分常駐內存

④ PCB 隨進程的建立而填寫,隨進程的撤消而釋放

⑤ 系統利用 PCB 來控制和管理進程,因此 PCB 是系統感知進程存在的惟一標誌

⑥ 進程與 PCB 是一一對應的

(2) 包含的內容

A:描述信息

  • 進程標識號,惟一,一般是一個整數
  • 進程名,一般基於可執行文件名
  • 用戶名或用戶標識號
  • 進程組關係

B:進程控制信息

  • 進程當前狀態:初始態、就緒態、執行態、等待狀態、終止狀態
  • 進程優先級:進程優先級是選取進程佔有處理機的重要依據:

    • 佔有CPU時間
    • 進程優先級偏移
    • 佔據內存時間等
  • 程序開始地址
  • 各類計時信息
  • 通訊信息

C:資源管理信息

  • 佔用內存大小及其管理用數據結構指針
  • 在某些複雜系統中,還有對換或覆蓋用的有關信息,如對換程序段長度,對換外存地址等
  • 共享程序段大小及起始地址。
  • 輸入輸出設備的設備號,所要傳送的數據長度、緩衝區地址、緩衝區長度及所用設備的有關數據結構指針等。
  • 指向文件系統的指針及有關標識等

D:CPU 現場保護結構

  • 存儲退出執行時的進程現場數據(或稱進程上下文)
  • 寄存器值(通用、程序計數器 PC、狀態 PSW,地址包括棧指針)

(四) 進程上下文

在上面的介紹中,又引伸出了進程上下文這樣的概念

進程上下文是對進程執行活動全過程的靜態描述

進程上下文由進程的用戶地址空間內容硬件寄存器內容及與該進程相關的核心數據結構組成(正文段、
數據集、堆棧)

(五) 進程的狀態

提早聲明:在這部分,一般狀況咱們通常理解五個經常使用狀態,新建、就緒、運行、等待、終止,就能夠了,可是咱們首先會講講比較關鍵的三種狀態,此外,更細緻的來講,這五種狀態還不算特別精確,不過咱們這裏不考慮太多

(1) 進程的三種基本狀態

A:就緒態

一個進程已經具有了運行的條件,可是暫時尚未CPU調度,因此不能運行的狀態

  • CPU 調度的時候,立刻就能夠運行

B:執行態

進程佔有了包括CPU在內的所有資源,而且在CPU上運行

C:等待態

叫法挺多,能夠叫作阻塞態、掛起態、封鎖態、凍結態、睡眠態

它指的是進程由於等待某件事情的發生而暫時不能運行的狀態

  • 也就是說,即便CPU空閒,可是這個進程也不能運行

(2) 三狀態轉換及緣由

首先放一張圖,來看一下對於三個狀態的描述

咱們按着圖示的序號來分析一下

① 就緒 --> 運行

  • 調度程序選擇一個新的進程運行,也就是CPU調用了一個已經準備好的進程(就緒態),而後就進入了運行態

② 運行 --> 就緒

  • 第一種緣由是,運行中的進程用完了時間片
  • 第二種緣由是,優先級更高的進程處於就緒狀態,因此當前運行進程被迫中斷

③ 運行 --> 阻塞

  • 當一個進程等待某一件事情發生的時候,例如:

    • 請求系統服務
    • 沒有新的工做能夠作
    • 等待某一進程提供輸入(IPC)
    • 初始化 I/O 且必須等待結果

而這些狀態之間的互相轉換,也存在必定的聯繫和影響,例如:

  • ②(運行 --> 就緒)發生,則 ①(就緒 --> 運行)必然發生

    • 也就是說,當一個進程從運行轉到就緒狀態後,CPU 天然空閒了,若是就緒狀態下仍然有別的進程,那麼這個進程就會被 CPU 調用,一樣呢,若是就緒狀態下沒有別的進程了,那麼這個剛從運行轉到就緒狀態的進程就會立刻被 CPU 從新調用
  • ③(運行 --> 阻塞)發生,則 ①(就緒 --> 運行)必然發生

    • 當運行中的某個進程,進入阻塞狀態後,那麼 CPU 一樣也空閒了下來,因此,就會調用已經在就緒狀態的進程,即執行 ① 的操做
  • CPU 空閒且無就緒進程的時候,④(阻塞 --> 運行)發生則會引發 ①(運行 --> 阻塞)

(3) 進程的五種狀態(基於前三種補充)

剛纔前面講解的三種狀態,是一個比較基本的狀態,可是仍是不完整的,還欠缺建立以及終止狀態

A:建立狀態

建立狀態:即建立一個新的進程

  • 批處理環境中,選擇一個新做業即將進去內存執行
  • 交互環境中,新用戶登陸到系統
  • 操做系統因提供一項服務而建立

B:終止狀態

終止狀態:一個進程結束

  • 含一個終止指令或用於終止的OS顯示服務調用
  • 分時系統中,用戶的行爲可指示終止(好比退出)
  • PC 機環境中,用戶結束一應用程序
  • 出現某些錯誤的時候,例如,I/O失敗,無效指令等
  • 父進程可請求它的某個子進程終止
  • 父進程終止,OS自動終止後代進程

(六) 進程控制

(1) 基本概念

系統使用一些具備特定功能的程序段來建立、撤銷進程並完成進程各狀態間的轉換,從而達到

  • 多進程高效率併發執行和協調
  • 實現資源共享

(2) 原語

定義:在系統模式下執行的某些特定功能的程序段

做用:一般把進程控制用的程序段做成原語

分類

  • 機器指令級的
  • 功能級的

特色:做爲原語的程序段不容許併發

進程控制原語有:

  • 建立原語
  • 撤銷原語
  • 阻塞原語
  • 喚醒原語

A:建立

B:撤銷

C:阻塞

D:喚醒

(七) 線程

(1) 爲何引入線程的概念

實施進程的建立、刪除和切換過程當中時空代價大限制了系統中的進程數目和併發活動的程度

因此現代操做系統中,進程做爲資源的擁有者,調度和運行的屬性賦予新的實體——線程

進程模型在處理「基於同數據區的同時多請求」時的效率侷限性,例:售票系統:數據庫服務器軟件需同時處理來自多個用戶進程的讀盤請求,這些請求都是針對同一個盤,能夠有以下幾種方式:

  • 進程:一個進程來順序處理
  • 多個相互獨立的進程:每一個進程負責處理一個請求
  • 用一個進程來併發處理全部請求(讀盤時要阻塞,處理下一個請求)

分析:第一種方法沒有併發,第二種方法切換的代價比較大。對於這種在一個進程內還能夠有更多的子任務併發執行的狀況,採用第三種方法效率更高,這就是採用了線程

(2) 線程和進程的區別

進程 線程
程序獨立資源分配的基本單位 CPU執行的基本單位
獨立地址空間 共享同一地址空間與進程共享資源
調度開銷較大 調度開銷較小

下面是 copy 的一份解釋,僅供參考

線程是在進程內用於調度和佔有處理機的基本單位,它由線程控制表、存儲線程上下文的用戶棧以及核心棧組成。線程可分爲用戶級線程、核心級線程以及用戶/核心混合型線程等類型。其中用戶級線程在用戶態下執行,CPU調度算法和各線程優先級都由用戶設置,與操做系統內核無關。核心級線程的調度算法及線程優先級的控制權在操做系統內核。混合型線程的控制權則在用戶和操做系統內核兩者。線程與進程的主要區別有:

(1) 進程是資源管理的基本單位,它擁有本身的地址空間和各類資源,例如內存空間、外部設備等;線程只是處理機調度的基本單位,它只和其餘線程一塊兒共享進程資源,但本身沒有任何資源。

(2) 以進程爲單位進行處理機切換和調度時,因爲涉及到資源轉移以及現場保護等問題,將致使處理機切換時間變長,資源利用率下降。以線程爲單位進行處理機切換和調度時,因爲不發生資源變化,特別是地址空間的變化,處理機切換的時間較短,從而處理機效率也較高。

(3) 對用戶來講,多線程可減小用戶的等待時間。提升系統的響應速度。例如,當一個進程須要對兩個不一樣的服務器進行遠程過程凋用時,對於無線程系統的操做系統來講須要順序等待兩個不一樣調用返回結果後才能繼續執行,且在等待中容易發生進程調度。對於多線程系統而言,則能夠在同一進程中使用不一樣的線程同時進行遠程過程調用,從而縮短進程的等待時間。

(4) 線程和進程同樣,都有本身的狀態.也有相應的同步機制,不過,因爲線程沒有單獨的數據和程序空間,所以,線程不能像進程的數據與程序那樣,交換到外存存儲空間。從而線程沒有掛起狀態。

(5) 進程的調度、同步等控制大多由操做系統內核完成,而線程的控制既能夠由操做系統內核進行,也能夠由用戶控制進行。

(3) 線程的特色

減少併發執行的時間和空間開銷(線程的建立、退出和調度),所以容許在系統中創建更多的線程來提升併發程度
線程的建立、終止時間比進程短;

同進程內的線程切換時間比進程短(上下文有許可能是相同的)

因爲同進程內線程間共享進程的代碼、數據、內存和文件資源,可直接進行不經過內核的通訊;而進程間的通訊須要經過內核進行,以提供保護和通訊所需機制

一個進程的全部線程必須同時處於掛起狀態;進程的終止會致使全部線程的終止。

線程不適宜任務單一的、不多作進程調度和切換的實時系統、我的數字助理系統,最適宜多處理機系統

典型的應用環境舉例以下:

  • 服務器中的文件管理或通訊控制或客戶服務器方式的服務器程序
  • 先後臺處理。如表處理程序,用戶輸入命令和命令執行;
  • 異步處理:一個程序中能夠併發的程序段,使用不一樣的線程

(八) 結尾

若是文章中有什麼不足,歡迎你們留言交流,感謝朋友們的支持!

若是能幫到你的話,那就來關注我吧!若是您更喜歡微信文章的閱讀方式,能夠關注個人公衆號

在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤

一個堅持推送原創開發技術文章的公衆號:理想二旬不止

相關文章
相關標籤/搜索