操作系統網課學習筆記(二)

進程的基本概念

順序執行

僅當前一操作執行完畢後,才能執行後續操作。

特徵

  • 順序性

    處理機嚴格按照程序所規定的順序執行,即每個操作必須在下一個操作開始之前結束。

    • 外部順序性
    • 內部順序性
  • 封閉性

    程序是在封閉的環境下運行的,它獨佔系統資源,執行過程中不受外界影響。

  • 結果可再現性

    程序執行得到的最終結果與程序執行速度無關,只要初始狀態相同,每次執行結果必然相同。

併發執行

爲了調高效率,允許若干個程序段同時在系統中運行。

特徵

  • 間斷性

  • 失去封閉性

  • 結果不可再現性

結論

併發環境下,"程序"一詞對描述和管理系統下各併發任務的執行過程已經不適用了。

進程定義

進程是程序的一次執行

進程是一個程序及其數據在處理機上順序執行時發生的活動

進程是程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單元。

傳統OS中的進程定義:

“進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位。”

進程和程序的區別與聯繫

  1. 程序是指令的集合,是靜態的概念。進程是程序在處理機上的一次執行的過程,是動態的概念。程序可以作爲軟件資料長期保存。進程是有生命週期的。

  2. 進程是一個獨立的運行單位,能與其它進程併發活動。而程序不是。

  3. 進程是競爭計算機系統有限資源的基本單位,也是進行處理機調度的基本單位。

  4. 一個程序可以作爲多個進程的運行程序,一個進程也可以運行多個程序。

進程狀態

  1. 就緒態 一個進程已經具備運行條件,但由於CPU暫時不能運行的狀態。

  2. 執行態 進程佔有CPU,並在CPU上運行。

  3. 阻塞態 也稱爲等待態、封鎖態。指進程因等待某種事件的發生而暫時不能運行的狀態。

阻塞態不能直接轉執行態,還需放入到就緒態進行排隊,因爲這樣高效並且簡單。

掛起態

在系統資源不足的情況下,操作系統會對內存中的進程進行合理的安排,其中有的進程被暫時掉離出內存,即處於“掛起”狀態。當條件允許的時候,會被操作系統再次調回內存,重新進入就緒態等待處理機調度

引入掛起狀態的原因:

  1. 終端用戶的請求

  2. 父進程請求

  3. 負荷調節的需求

  4. 操作系統的需求

進程狀態的轉換:

活動就緒->靜止就緒
活動阻塞->靜止阻塞
靜止就緒->活動就緒
靜止阻塞->活動阻塞

進程控制塊

作用

存放進程的管理和控制信息的數據結構稱爲進程控制塊。它是進程管理和控制的重要的數據結構,在進程創建時,系統爲該進程建立PCB,並伴隨其運行的全過程,直到進程撤銷而撤銷。

PCB的作用是使一個在多道程序環境下不能獨立運行的程序(含數據),成爲一個能獨立運行的基本單位,一個能與其它進程併發執行的進程。

進程控制塊中的信息

進程描述信息

  • 進程標識符

在這裏插入圖片描述

  • 進程家族關係

    父進程標識、子進程標識

  • 用戶

    指示擁有該進程的用戶

處理機狀態 (CPU現場保護結構、進程上下文)

  • 通用寄存器

    又稱爲用戶可視寄存器,它們是用戶程序可以訪問的,用於暫存信息。

  • 指令計數器PC

    其中存放了要訪問的下一條指令的地址。

  • 程序狀態字PSW

    其中含有狀態信息,如條件碼、執行方式、中斷屏蔽標誌。

  • 用戶棧指針

    指每個用戶進程都有一個或者若干個與之相關的系統棧,用於存放過程和系統調用參數及調用地址。

進程調度信息

  • 進程狀態

    指明進程當前狀態,作爲進程調度和對換時的依據。

  • 進程優先級

    用於描述進程使用處理機的優先級別的整數,優先級高的進程應優先獲得處理機。

  • 進程調度所需的其它信息

    它們與所採用的進程調度算法有關,如進程已等待CPU的時間總和,進程已執行的時間綜合等。

  • 事件

    是指進程由執行狀態轉變爲阻塞狀態所等待發生的事件,即阻塞的原因。

進程控制信息

  • 程序和數據的地址

    指進程的程序和數據所在的內存或外存地(首)址,以便再調度到該進程執行時,能從PCB中找到其程序和數據。

  • 進程同步和通信機制

    指實現進程同步和進程通信時必須的機制,如消息隊列、信號量等。

  • 資源清單

    是一張列出了除CPU以外、進程所需的全部資源及已分配到該進程的資源清單。

  • 鏈接指針

    給出本進程(PCB)所在隊列中的下一個進程的PCB的首地址。

進程控制

就是系統使用一些具有特定功能的程序段來創建進程、撤銷進程以及完成進程各狀態之間的轉換,從而達到多線程高效率併發執行、實現資源共享的目的。

爲防止OS本身或關鍵數據被其他程序破壞,一般將處理機執行狀態分成以下2種:

  • 系統態(管態/內核態):它具有較高的特權,能執行一切指令,訪問所有寄存器和存儲區。

  • 用戶態(目態):具有較低的特權,僅能執行特定指令,訪問指定寄存器和存儲區。

應用程序只能工作在用戶態。

OS的內核一般包括以下2方面功能:

支撐功能:時鐘管理、中斷處理、原語操作

資源管理功能:進程管理、存儲器管理、設備管理

原語 (Primitive)

系統態下執行的某些具有特定功能的程序段。

也指原子操作——不可分割的基本單位。

創建原語Create

進程創建過程:

  1. 申請空白PCB

  2. 爲新進程分配資源

  3. 初始化進程控制塊

  4. 將新進程插入就緒隊列 (前提是有空間能接納新進程)

進程創建的事件:

  • 用戶登錄

  • 作業調度

  • 提供服務: 以上三種由系統內核創建

  • 應用請求: 由用戶自己創建

進程終止Delete

進程終止過程:

  1. 根據標識符,從PCB集合中檢索出對應PCB,並讀出進程狀態。

  2. 若正處於執行狀態,應立即終止該進程的執行,並置調度標誌位真。

  3. 若該進程還有子孫進程,還應將其所有子孫進程予以終止,以防他們成爲不可控得進程。

  4. 將被終止進程的全部資源歸還給其父進程或系統。

  5. 將被終止進程的PCB從所在隊列移出。等待其它程序來收集它的信息。

引起進程終止的事件:

  • 正常結束

  • 異常結束

  • 外界干預

異常結束:

出現某些錯誤和故障而迫使進程終止。

越界錯誤:程序所訪問的存儲區,已越出該進程的區域;
保護錯:進程試圖去訪問一個不允許訪問的資源或文件,或者以不適當的方式進行訪問,如進程去寫一個只讀文件;
非法指令:程序試圖去執行一條不存在的指令。如程序錯誤地轉移到數據區,把數據當成了指令;
特權指令錯:用戶進程執行一條只允許OS執行的指令;
運行超時:進程的執行時間超過了指定的最大值;
等待超時:進程等待某事件的時間, 超過規定的最大值;
算術運算錯:進程試圖執行一個被禁止的運算,如除0;
I/O故障:這是指在I/O過程中發生了錯誤等。

外界干預:

外界干預並非指在本進程運行中出現了異常事件,而是指進程應外界的請求而終止運行。

操作員或操作系統干預:由於某種原因,例如,發生了死鎖, 由操作員或操作系統終止該進程;
父進程請求:由於父進程具有終止自己的任何子孫進程的權利, 因而當父進程提出請求時,系統將終止該進程;
父進程終止。 當父進程終止時,OS也將他的所有子孫進程終止。

進程阻塞Block

阻塞是進程的自身調用阻塞原語而自我阻塞(主動行爲)。而喚醒是引起阻塞的事件消失後,有關的“發現者”調用喚醒原語來喚醒被阻塞的進程,它們是一對逆過程。

阻塞是進程的主動行爲

進程阻塞過程:

  1. 保存當前進程的CPU現場

  2. 置該進程的狀態爲阻塞狀態

  3. 被阻塞進程進入等待隊列

  4. 轉進程調度

進程喚醒Wakeup

當被阻塞進程所期待的事件出現時,如I/O完成或其所期待的數據已經到達,則由有關進程(比如,用完並釋放了該I/O設備的進程)調用喚醒原語wakeup( ),將等待該事件的進程喚醒。

喚醒原語 Wakeup() 不能自己喚醒

進程喚醒過程:

  1. 從等待隊列中摘下被喚醒的進程

  2. 將被喚醒的進程置爲就緒態

  3. 將被喚醒的進程送入就緒隊列

  4. 轉進程調度或返回

進程掛起Suspend

當出現了引起進程掛起的事件時,如用戶進程請求將自己掛起,或父進程請求將自己的某個子進程掛起,系統將利用掛起原語suspend( )將指定進程或處於阻塞狀態的進程掛起。

進程掛起過程:

  1. 檢查被掛起進程的狀態,若處於活動就緒狀態,便將其改爲靜止就緒;對於活動阻塞狀態的進程,則將之改爲靜止阻塞。

  2. 爲了方便用戶或父進程考查該進程的運行情況而把該進程的PCB複製到某指定的內存區域。

  3. 若被掛起的進程正在執行,則轉向調度程序重新調度。

進程激活Active

當發生激活進程的事件時,例如,父進程或用戶進程請求激活指定進程,若該進程駐留在外存而內存中已有足夠的空間時,則可將在外存上處於靜止就緒狀態的進程換入內存。這時,系統將利用激活原語active( )將指定進程激活。

進程激活過程:

  1. 激活原語先將進程從外存調入內存,檢查該進程的現行狀態,若是靜止就緒,便將之改爲活動就緒;若爲靜止阻塞便將之改爲活動阻塞。

  2. 假如採用的是搶佔調度策略,則每當有新進程進入就緒隊列時,應檢查是否要進行重新調度,即由調度程序將被激活進程與當前進程進行優先級的比較,如果被激活進程的優先級更低,就不必重新調度;否則,立即剝奪當前進程的運行,把處理機分配給剛被激活的進程。

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