操作系統入門(二)進程

在這裏插入圖片描述

一學期的可也算是基本上完了,不知道大家學的怎樣。
應朋友之約,我來總結一下這學期學的操作系統課程,方便大家複習。
總綱:https://blog.csdn.net/qq_43762191/article/details/106411766 (帶思維導圖)

進程與進程管理

進程的引入

前驅圖

前趨圖(Procedence Graph)是一個有向無循環圖(DAG)。圖中的每個結點可用於表示一條語句、一個程序段或進程;結點間的有向邊則表示在兩結點之間存在的偏序或前趨關係“→”,
→={(Pi,Pj)| Pi必須在Pj開始前完成 }。

程序順序執行

程序執行的順序性

處理機的操作嚴格按程序規定的順序執行,即只有前一操作結束後才能執行後繼操作。

程序執行的封閉性

程序一旦開始運行,其執行結果不受外界因素的影響。

程序執行結果的確定性

程序執行的結果與它的執行速度、時間無關。

程序結果的可再現性

程序執行時的環境和初始條件相同,當程序多次重複執行時,都將獲得相同的結果。

程序併發執行

程序執行的間斷性

程序執行的相互制約將導致併發程序具有“執行—暫停執行—執行”這種間斷性的活動規律。

程序執行失去封閉性

因多個程序共享系統中的資源,所以某程序在執行時必然會受到其他程序的影響。

程序執行結果的不可再現性

由於失去了封閉性,也將導致失去其可再現性。

資源共享

系統中的硬件資源和軟件資源不再被單個用戶或程序獨佔,而爲多個用戶或作業共同使用。

程序和計算不再一一對應

程序和計算是兩個不同的概念,在程序併發執行中一個共享程序可對應多個“計算”,程序與“計算”已不再一一對應。

多道程序設計

在採用多道程序設計的計算機系統中,允許多個程序同時進入一個計算機系統的內存儲器並運行,這種讓多個程序同時進入計算機計算的方法稱爲多道程序設計。

提高處理器的效率,從而提高整個系統的效率。

進程

爲什麼要進程

爲了使程序在多道程序環境下能夠併發執行,並對併發執行的程序加以控制和描述,引入進程的概念。
程序段、數據段及進程控制塊三部分構成了一個進程的實體。

進程的概念

進程是具有獨立功能的可併發執行的程序在一個數據集合上的運行過程,是系統進行資源分配和調度的獨立單位。或者說,“進程”是進程實體的運行過程。

程序與進程的區別與聯繫

(1)進程是程序的一次執行,是一個動態的概念,程序是完成某個特定功能的指令的有序序列,是一個靜態的概念
(2)一個進程可以執行一個或幾個程序,同一程序也可能由多個進程同時執行
(3)進程是系統進行資源分配和調度的一個獨立單位,程序則不是
(4)程序可以作爲一種軟件資源長期保存,而進程是程序的一次執行過程,它是臨時的,有生命期的
進程是具有結構的

聯繫:進程是程序的運行

進程的特徵

動態性:進程的基本特性。進程是進程實體的執行過程;
併發性:進程的主要特徵。多個進程實體同存於內存中,能在一段時間內同時運行;
獨立性:進程實體是一個能獨立運行的基本單位,同時也是系統中獨立獲得資源和獨立調度的基本單位。
異步性:進程按各自獨立的、不可預知的速度向前推進;或者說,進程按異步方式運行。
結構特徵:從結構上看,進程實體是由程序段、數據段及進程控制塊三部分組成,有人把這三部分統稱爲“進程映像”。

進程的基本狀態及其轉換

進程的三種基本狀態
  • 就緒狀態
    當進程已分配到除CPU以外的所有必要的資源後,只要能再獲得處理機便可立即執行,這時的狀態稱爲就緒狀態

  • 執行狀態
    指進程已獲得處理機,其程序正在執行

  • 阻塞狀態
    進程因發生某種事件(如I/O請求、申請緩衝空間等)而暫停執行時的狀態,亦即進程的執行受到阻塞,故稱這種狀態爲阻塞狀態,有時也稱爲“等待”狀態或“睡眠”狀態。

進程狀態的轉換

- 就緒→執行狀態
處於就緒狀態的進程,當進程調度爲之分配了處理機後
- 執行→阻塞狀態
正在執行的進程因發生某種事件而無法執行
- 執行→就緒狀態
正在執行的進程如因時間片用完或一個優先權高的進程到來而被暫停執行
- 阻塞→就緒狀態
處於阻塞狀態的進程,其等待的事件已經發生

思考:其他狀態轉換可以存在嗎?
這個問題自己想想。、,碧如阻塞到執行的飛躍。

在這裏插入圖片描述

進程的掛起狀態

掛起狀態的引入
  • 終端用戶的需要
    當終端用戶在自己的程序運行期間發現有可疑問題時,往往希望暫時使自己的進程靜止下來。
  • 父進程的需要
    父進程常常希望考察和修改子進程或者當要協調各子進程間的活動
  • 操作系統的需要
    操作系統有時需要掛起某些進程,檢查運行中資源的使用情況及進行記賬,以便改善系統運行的性能。
  • 對換的需要
    爲了緩解內存緊張的情況,即將內存中處於阻塞狀態的進程換至輔存上,使進程又處於一種有別於阻塞狀態的新狀態。
  • 負荷調節的需要

進程狀態的轉換

在引入掛起狀態後,又將增加從掛起狀態(又稱靜止狀態)到非掛起狀態(又稱活動狀態)的轉換
- 活動就緒→靜止就緒
- 活動阻塞→靜止阻塞
- 靜止就緒→活動就緒
- 靜止阻塞→活動阻塞

在這裏插入圖片描述

進程控制塊(PCB)

進程控制塊的作用
-進程控制塊記錄進程信息
-操作系統是根據進程控制塊PCB來對併發執行的進程進行控制和管理的 
-PCB是進程存在的唯一標誌
進程控制塊中的信息

-進程標識符信息
進程標識符用於唯一地標識一個進程,通常有外部標識符和內部標識符
①外部標識符。由創建者提供,通常由字母、數字所組成,往往是由用戶(進程)在訪問該進程時使用。
②內部標識符。這是爲了方便系統使用而設置的。在所有操作系統中都爲每一個進程賦予一個惟一的整數作爲內部標識符,它通常就是一個進程的序號。

-處理機狀態信息
處理機狀態信息主要是由處理機各種寄存器中的內容所組成 :通用寄存器、指令計數器、程序狀態字PSW、用戶棧指針。

-進程調度信息
存放了一些與進程調度和進程對換有關的信息:進程狀態、進程優先級、進程調度所需的其他信息、事件。

進程控制

進程控制的主要任務是創建和撤消進程以及實現進程的狀態轉換,進程控制一般由操作系統的內核來實現。操作系統內核通常是運行在系統態的。

操作系統內核

通常,將一些與硬件緊密相關的模塊諸如中斷處理程序、各種常用設備的驅動程序以及運行頻率較高的模塊都安排在緊靠硬件的軟件層次中並使它們常駐內存,以便提高操作系統的運行效率,並對它們加以特殊的保護,把這一部分稱爲操作系統的內核

操作系統內核的功能
中斷處理:中斷處理功能在操作系統中,既是內核的最基本功能,也是整個操作系統賴以活動的基礎,即操作系統的重要活動最終都將依賴於中斷。
進程管理:進程創建、撤消、進程狀態的轉換 、進程調度等。
資源管理中的基本操作:包括對時鐘、I/O設備和文件系統進行控制和管理的基本操作。 
原子操作

所謂原子操作是指:一個操作中的所有動作,要麼全做,要麼全不做。換言之,原子操作是一個不可分割的操作。
內核在執行上述操作時,往往是通過執行各種原語操作來實現的。

進程阻塞過程

進程便通過調用阻塞原語block()把自己阻塞
-立即停止當前進程的執行
-把進程控制塊中的現行狀態由“執行”改爲“阻塞”,並把它插入到阻塞隊列

進程喚醒過程

調用喚醒原語wakeup( )將等待該事件的進程喚醒
-把被阻塞進程從等待該事件的阻塞隊列中移出
-將其PCB中的現行狀態由“阻塞”改爲“就緒”
-然後再將該進程插入到就緒隊列中

進程的掛起過程

當出現了引起進程掛起的事件時,系統就利用掛起原語suspend( )將指定進程或處於阻塞狀態的進程掛起
-檢查被掛起進程的狀態,若正處於活動就緒狀態,便將其改爲靜止就緒;對於活動阻塞狀態的進程,則將其改爲靜止阻塞
-進程保存於外存對換區
-如被掛起的進程正在執行,則轉調度程序重新調度

進程的激活過程

當發生激活進程的事件時系統將利用激活原語active( )將指定進程激活

-將進程從外存調入內存,檢查該進程的現行狀態:若是靜止就緒,便將其改爲活動就緒;若爲靜止阻塞,便將其改爲活動阻塞
-假如採用的是搶佔調度策略 ,檢查是否要進行重新調度

進程的調度

調度的基本概念

一個程序從提交開始直到完成,往往要經歷三級調度:
高級調度又稱爲作業調度,它決定將哪些在外存上處於後備狀態的作業(程序加數據)調入主機內存,準備執行。
低級調度又稱爲進程調度。它決定就緒隊列中哪個進程將獲得處理機,並實際執行將處理機分配給該進程的操作。
在有的系統中,可能增加一中級調度,主要作用是在內存和外存對換區之間進行進程對換,以解決內存緊張問題 。

進程的調度功能

進程調度就是系統按照某種算法把CPU動態地分配給某一就緒進程。進程調度工作是通過進程調度程序來完成的。
進程調度程序的主要功能:
-選擇進程佔有CPU
-進行進程上下文的切換

調度方式

非剝奪方式

分派程序一旦把處理機分配給某進程後便讓它一直運行下去,直到進程完成或發生某事件(如提出I/O請求)而阻塞時才把處理機分配給另一進程
-優點:簡單,系統開銷小,
-缺點:貌似公正,可能導致系統性能的惡化

剝奪方式

該方式規定,當一個進程正在運行時,系統可以基於某種原則,剝奪已分配給它的處理機,將之分配給其它進程
剝奪原則:優先權原則、短進程優先原則、時間片原則

進程調度算法

先進先出(FIFO)
	-算法:把處理機分配給最先進入就緒隊列的進程 
    -優點:易於實現
    -缺點:表面上公平,服務質量不佳 、對短進程不利
最短處理機運行期優先調度算法

-算法:從就緒隊列中選出“下一個CPU執行期”最短的進程,爲之分配處理機使之執行
-優點:可獲得較好的調度性能
-缺點: 進程的CPU執行期難以準確得到、對長進程不利

最高響應比優先調度算法
   -算法:響應比=(等待時間+要求的服務時間)/要求的服務時間 ,每次選取響應比最高的進程調度        
   -優點:所以對短進程有利,並且考慮了等待時間
   -缺點:計算響應比有一定的系統開銷
優先級調度算法

-算法:將CPU分配給就緒隊列中優先級最高的進程
-靜態優先級
在進程創建時確立,確定後運行期間保持不變。確立依據有:進程的類型、進程對資源的需求、用戶申請的優先級
優點:簡單
缺點:不能動態反映進程特點,系統調度性能差

動態優先級
進程在開始創建時,根據某種原則確定一個優先級後,隨着進程執行時間的變化,其優先級不斷地進行動態調整 
確定依據:根據進程佔有的CPU時間的長短來決定,佔有時間越長優先級越低;根據進程等待CPU的時間來決定,時間越長優先級越高
時間片輪轉調度算法

算法:通常用在分時系統,它輪流地調度系統中所有就緒進程,使就緒進程依次獲得一個時間片的運行時間

  • 時間片長短確定遵循原則
    既要保證系統各個用戶進程及時地得到響應,又不要由於時間片太短而增加調度的開銷,降低系統的效率
前後臺調度算法

-算法:該方法用在批處理和分時相結合的系統中。將分時用戶作業放在前臺,把批處理作業放在後臺。系統對前臺作業按照時間片輪轉法進行調度,僅當前臺無作業時,才把處理機分配給後臺作業的進程。後臺進程通常按先來先服務方式運行
-優點:使分時用戶進程得到及時響應,又提高了系統資源的利用率

多級反饋隊列輪轉算法

-系統設置多個不同優先級的就緒隊列,每次調度總是先調度優先級高的隊列,僅當該隊列空時,才調度次高優先級隊列。
-通常剛創建的進程和因請求I/O未用完時間片的進程排在最高優先級隊列,在這個隊列中運行2-3個時間片未完成的進程排列下一個較低優先級隊列。
-不論什麼時候,只要較高優先級隊列有進程進入,立即轉進程調度,及時調度較高優先級隊列進程。
-優點:能較好地滿足各類作業的用戶要求,既能使分時用戶作業得到滿意的響應,又能使批處理用戶的作業獲得較合理的週轉時間

進程依次執行時可能發生的三種情況

   -進程未用完一個時間片便結束,這時系統應提前進行調度
   -進程在執行過程中提出I/O請求而阻塞,系統應將它放入相應的阻塞隊列並引起調度 
   -進程用完一個時間片後尚未完成。系統應將它重新放到就緒隊列的末尾,等待下次執行 

進程調度的時機和過程

進程調度的時機
   -正在執行的進程運行完畢 
   -正在執行的進程調用阻塞原語將自己阻塞起來進入等待狀態 
   -在採用搶佔式優先級調度時,有優先級高於正在運行進程的進程進入就緒隊列 
   -在分時系統中時間片已經用完 
   -CPU方式是可剝奪時,就緒隊列中的某個進程 優先級變得高於當前運行進程的優先級 
進程調度的過程

-進程調度所依賴的數據結構通常是調度隊列,由於調度的原因不同,在單處理器系統中設置了多種等待隊列
-只有就緒隊列中的進程能夠獲得處理器而最終運行,其他隊列中的進程從隊列中出來後,必須進入就緒隊列才能分配處理器
-隊列數據結構的建立結構與調度算法密切相關
-進程調度算法只是決定哪一個進程將獲得處理機,而將處理機分配給該進程的具體操作是由分派程序完成的

線程的基本概念

線程的引入

在操作系統中引入進程的目的是爲了使多個程序併發執行以改善資源利用率及提高系統的吞吐量;
在操作系統中再引入線程,則是爲了減少程序併發執行時所付出的時空開銷,使操作系統具有更好的併發性

其餘部分,詳見:

進程·全家桶,這篇是我上CSDN的文章之一。

線程1
線程2

今天就先到這裏吧,進程間通信部分,見全家桶

在這裏插入圖片描述

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