操作系統原理3——多道程序


 

 

本章考核知識點:

1.多道程序設計

2.進程

3.進程狀態

4.進程控制塊

5.進程隊列

6.可再入程序

7.中斷及中斷響應

8.中斷優先級

9.進程調度 

 


  自學要求:通過本章學習應該掌握多道程序設計是如何提高計算機系統效率的;進程與程序有什么區別;進程的基本狀態以及狀態變化;進程隊列及進程調度策略;中斷的作用。

  重點是:多道程序設計;進程的定義和屬性;進程調度策略。

 

  一、 多道程序設計( 領會 )

  1、什么是多道程序設計。

  讓多個計算問題  同時裝入  一個計算機系統的主存儲器並行執行,這種設計技術稱“ 多道程序設計 ”,這種計算機系統稱“多道程序設計系統” 或簡稱“多道系統”。

 

  存儲保護 :在多道程序設計的系統中,主存儲器中同時存放了  多個作業的程序。

為避免相互干擾,必須提供必要的手段使得在主存儲器中的各道程序  只能訪問   自己的區域。

這樣,每道程序執行時,都不會破壞其他各道的程序和數據。

 

特別是當某道程序發生錯誤的時,也不至於影響其它的程序。

 

 

  程序浮動 :在多道程序設計系統中,對程序有一些特殊要求,

也就是說,程序可以隨機地從主存的一個區域移動到另一個區域,程序被移動后仍絲毫不影響它的執行,這種技術稱為“程序浮動”。

 

 

  在多道程序設計的系統中,有三點基本要求:

  a.  用“存儲保護”的方法     保證各道程序互不侵犯;

   b. 用“程序浮動”技術       讓程序能靈活地改變存放區域  且    能正確執行;

  c. 必須對資源按一定的策略   分配和調度。

 

  2、 多道程序設計 利用了系統與外圍設備的並行工作能力,從而提高工作效率

 

 

具體表現為:

 (1) 提高了處理器的利用率;

 (2)充分利用外圍設備資源:計算機系統配置多種外圍設備,采用多道程序設計並行工作時,可以將使用不同設備的程序搭配在一起同時裝入主存儲器,

                     使得系統中各外圍設備經常處於忙碌狀態,系統資源被充分利用;

 (3)發揮了處理器與外圍設備以及外圍設備之間的並行工作能力;

 (4)從總體上說,采用多道程序設計技術后,可以有效地提高系統中資源的利用率,增加單位時間內的算題量,從而提高了吞吐率。

 

  3、 多道程序設計 對算題量和算題時間的影響。

 

采用多道程序設計能改變系統資源的使用情況,提高系統效率。

 

但是應注意以下兩個問題:

  a.. 可能延長程序的執行時間;

  b.. 並行工作道數與系統效率不成正比。

從表面上看,增加並行工作道數就可提高系統效率,但實際上並行工作道數與系統效率是不成正比,因為並行的道數要根據系統配置的資源和用戶對資源的要求而定:

  (1)主存儲器的大小限制了可同時裝入的程序數量;

  (2)外圍設備的數量也是一個制約條件;

  (3)多個程序同時要求使用同一資源的情況也會經常發生。

 

  總之,多道程序設計能提高系統資源的使用效率,增加單位時間的算題量;

但是對每個計算問題來說,從算題開始到全部完成所需要的時間可能延長,

另外在確定並行工作道數時應綜合系統的資源配置和用戶對資源的要求。

 

  二、 進程( 領會 )

  1、 進程 的定義:把一個程序在一個數據集上的一次執行稱為一個“進程”。

  2、 進程是由 程序數據集進程控制塊 三部分組成。

  我們舉一個例子,比如在有一個用戶程序notepad.exe(記事本),當它存放在磁盤上時,就是一個程序,在windows操作系統下運行它時,就會在內存中建立一個記事本程序的進程,

而我們在記事本中編輯的當前文字就是這個進程的數據集,操作系統會為當前的進程設置一個    進程控制塊。

如果我們再打開一個記事本程序的窗口,就會建立      另一個進程,此時運行的是同一個程序,但存在兩個進程,第二個窗口中的編輯內容就是第二個進程的數據集。

 

 

  3、 進程 與 程序 的區別及關系。

(1) 程序是靜止的,進程是動態的。

(2) 進程      包括程序  和 程序處理的對象(數據集),   進程能得到程序處理的結果

(3)  進程和程序並非一一對應的,一個程序運行在不同的  數據集上  就構成了不同的    進程。

(4)  通常把進程分為“系統進程”和“用戶進程”兩大類,把完成操作系統功能的進程稱為 系統進程,   而完成用戶功能的進程則稱為  用戶進程

 

 

  三、 進程狀態( 領會 )

  1、 進程的 三種基本狀態 .

 

通常,根據進程執行過程中不同時刻的狀態,可歸納為三種基本狀態:

  。 等待態 :等待某個事件的完成;

  。 就緒態 :等待系統分配處理器以便運行;

  。 運行態 :占有處理器正在運行。

 

  2、進程的狀態變化

  進程在執行中狀態會不斷地改變,每個進程在任何時刻總是處於上述三種基本狀態的某一種基本狀態,進程狀態之間轉換關系如下圖所示:

  運行態→等待態 往往是由於等待外設,等待主存等資源分配或等待人工干預而引起的。

  等待態→就緒態 則是等待的條件已滿足,只需分配到處理器后就能運行。

  運行態→就緒態 不是由於自身原因,而是由外界原因使運行狀態的進程讓出處理器,這時候就變成就緒態。例如時間片用完,或有更高優先級的進程來搶占處理器等。

  就緒態→運行態 系統按某種策略選中    就緒隊列  中的一個進程占用處理器,此時就變成了運行態。

  進程 有 四個基本屬性 :

 

  。多態性 從誕生、運行,直至消滅。

  。多個不同的進程可以包括相同的程序

  。三種基本狀態 它們之間可進行轉換

  。並發性 並發執行的進程輪流占用處理器

 

 

 

  四、進程控制塊( 領會 )

  1、 進程控制塊 的基本內容。

通常進程控制塊包含四類信息:

 

  。標志信息  含唯一的進程名

  。說明信息  有進程狀態、等待原因、進程程序存放位置和進程數據存放位置

  。現場信息   包括通用、控制和程序狀態字寄存器的內容

  。管理信息   存放程序優先數和隊列指針

 

  2、 進程控制塊 的作用

  進程控制塊(Process Control Block,簡稱PCB),是操作系統為進程分配的用於標志進程,記錄各進程執行情況的。進程控制塊是進程存在的標志,它記錄了進程從創建到消亡動態變化的狀況,進程隊列實際也是進程控制塊的鏈接。操作系統利用進程控制塊對進程進行控制和管理。

  進程控制塊的作用有:

  (1)記錄進程的有關信息,以便操作系統的進程調度程序對進程進行調度。這些信息包括標志信息、說明信息、現場信息和管理信息等;

  (2)標志進程的存在,進程控制塊是進程存在的唯一標志

 

 

  五、進程隊列( 領會 )

  1、 進程隊列 的鏈接。

  在多道程序設計的系統中往往會同時創建多個 進程 .在單處理器的情況下,每次只能讓一個進程運行,其他的進程處於就緒狀態或等待狀態。

為了便於管理,經常把處於相同狀態的進程鏈接在一起,稱“進程隊列”,由於 進程控制塊 能標志進程的存在 和 動態刻畫進程的特性,

因此, 進程隊列 可以用 進程控制塊 的連接來形成。

鏈接的方式有兩種:單向鏈接  和   雙向鏈接

 

 

  2、 進程基本隊列

  就緒隊列 :由若干就緒進程按一定次序鏈接起來的隊列。

  等待隊列 :把等待資源或等待某些事件的進程排列的隊列

 

  3、進程的入隊和出隊。

 

  出隊和入隊 :當發生的某個事件使一個進程的狀態發生變化時,這個進程就要退出所在的某個隊列而排入到另一個隊列中去。

  出隊 :一個進程從所在的隊列退出的操作稱為出隊

  入隊 :一個進程排入到一個指定的隊列的操作稱為入隊。

  系統中負責進程入隊和出隊的工作稱為  隊列管理

  無論單向鏈接還是雙向鏈接,解決入,出隊問題,都是首先找到該隊列的 隊首指針,沿鏈找出要入隊的進程以及它要插入的位置,或找出要出隊的進程,

然后修改本進程指針(入隊情況)和 相鄰進程的有關指針值即可。

 

  六、可再入程序( 識記 )

  (1) 什么是 可再入程序 . 一個能被 多個用戶同時調用 的程序稱做“ 可再入 ”的程序。

  (2) 可再入程序的性質。

                              可再入程序必須是純代碼,在執行時自身不改變;

  一個可再入程序要求調用者提供工作區,以保證程序以同樣方式為各用戶服務。

  編譯程序操作系統程序 通常都是“可再入”程序,能同時  被不同用戶調用而構成不同的進程。

 

 

  七、中斷及中斷響應( 領會 )

  1、 中斷 的定義。

  一個進程占有處理器運行時,由於自身或者外界的原因(出現了事件)使運行被打斷,讓操作系統處理所出現的事件,到適當的時候再讓被打斷的進程繼續運行,這個過程稱為“中斷”。

 

  2、 中斷 的類型。

  從中斷事件的性質出發,中斷可以分為兩大類:

  。 強迫性中斷事件 包括硬件故障中斷,程序性中斷,外部中斷和輸入輸出中斷等

  。 自願性中斷事件 是由正在運行的進程執行一條訪管指令用以請求系統調用而引起的中斷,這種中斷也稱為“訪管中斷”。

 

  自願中斷 的斷點是確定的,而 強迫性中斷 的斷點可能發生在任何位置。

 

  3、中斷的響應和處理。

  中斷響應 (硬件即中斷裝置操作)

  處理器每執行一條指令后,硬件的中斷位置立即檢查有無中斷事件發生,若有中斷事件發生,則暫停現行進程的執行,而讓操作系統中斷處理程序占用 處理器,這一過程稱為“中斷響應”。

  中斷響應過程中,中斷裝置要做以下三項工作:

  (1 是否有中斷事件發生

  (2 判別自願性中斷,只要檢查操作碼是否為訪管指令。

  (3  判別強迫性中斷,則要檢查中斷寄存器內容。若為0,則無中斷;若非0,則表示有中斷事件發生。

  若有中斷發生,保護斷點信息

 

  每個程序都有一個程序狀態字(PSW)來反映本狀態的執行狀態,如基本狀態、中斷碼和中斷屏蔽位等內容。

處理器設有一個“程序狀態字寄存器”用來存放當前運行程序的PSW.

程序狀態字可分為當前PSW、舊PSW和新PSW.

 

  當出現中斷事件后,把被中斷進程的PSW保存為   舊PSW,即完成  斷點信息保護。

 

  啟動操作系統的中斷處理程序工作

  中斷裝置通過“交換PSW”過程完成此項任務,即把出現的中斷事件存放到當前PSW中斷碼位置,然后把該當前PSW保存為舊PSW,再把操作系統中斷處理程序的新PSW送到程序狀態字寄存器中,成為當前的PSW.

  中斷處理 ( 軟件即操作系統操作 )

  操作系統的中斷處理程序對中斷事件進行處理時,大致要做三方面的工作:

  保護被中斷進程的現場信息

  把中斷時的通用寄存器,控制寄存器內容及舊PSW保存到被中斷進程的進程控制塊中。

  分析中斷原因

  根據舊PSW的中斷碼可知發生該中斷的具體原因。

  處理發生的中斷事件

  一般只做一些簡單處理,在多數情況下把具體的處理交給其他程序模塊去做。

 

 

  八、 中斷優先級和中斷屏蔽( 識記 )

  1、 中斷優先級 是硬件設計時確定的。

中斷裝置按預定的順序來響應同時出現的中斷事件,這個預定的順序稱為“中斷優先級”。

中斷優先級是按中斷事件的重要性和緊迫程度來確定的 ,是由硬件設計時固定下來的。

一般情況下,優先級的高低順序依次為:

硬件故障中斷 、 自願中斷 、 程序性中斷 , 外部中斷和輸入輸出中斷 .

 

 

  2、中斷的嵌套處理

  3、中斷屏蔽的作用。

中斷優先級只是規定了中斷裝置響應同時出現的中斷的次序,當中斷裝置響應了某個中斷后中斷處理程序在進行處理時,中斷裝置也可能去響應另一個中斷事件。

因此會出現優先級低的中斷事件的處理打斷優先級高的中斷事件的處理,使得中斷事件的處理順序與響應順序不一致,而且會形成多重嵌套處理,使多現場保護、程序返回等工作變的復雜。

 

  中斷屏蔽技術就是為了解決上述問題而提出的在一個中斷處理沒有結束之前   不響應其他中斷事件,或者只響應比當前級別高的中斷事件。

於是,當中斷裝置檢查到有中斷事件后,便去查看PSW中中斷屏蔽標志,如果沒有屏蔽就響應該中斷;否則,暫時不響應該中斷,待屏蔽標志消除后再響應。

 

自願中斷是不能屏蔽的。

 

 

  九、 進程調度( 領會 )

  1、進程調度的職責。    按選定的進程調度算法從  就緒隊列  中選擇一個進程,讓它占用  處理器

  2、選擇進程調度算法的幾個准則:

  。提高處理器利用率

  。增大吞吐量

  。減少等待時間

  。縮短響應時間

  3、進程調度的常用算法:

先來先服務 、 優先數法 、 輪轉法 、 分級調度 .

 

  (1.)先來先服務調度算法 該算法按進程進入就緒隊列的先后次序選擇可以占用處理器的進程。

 

  (2.)優先數調度算法 對每個進程確定一個優先數,該算法總是  讓 優先數最高的進程   先使用處理器。

 

對具有相同優先數的進程,再采用先來先服務的次序分配處理器。

系統常以任務的緊迫性 系統效率等因素確定進程的優先數。進程的優先數可以固定的,也可隨進程執行過程動態變化。

一個高優先數的進程占用處理器后,系統處理該進程時有兩種方法,一是“非搶占式”,另一種是“可搶占式”。

前者是此進程占用處理器后一直運行到結束,除非本身主動讓出處理器,

后者則是嚴格保證任何時刻總是讓優先數最高的進程在處理器上運行。

 

 

 (3.)時間片輪轉調度法   把規定進程一次使用處理器的最長時間稱為“時間片”。

時間片輪轉調度算法讓就緒進程按就緒的先后次序排成隊列,每次總選擇該隊列中第一個進程占用處理器,

但規定只能使用一個時間片,如該進程尚未完成,則排入隊尾,等待下一個供它使用的時間片。

各個進程就這樣輪轉運行。

時間片輪轉算法經常用於分時操作系統中。

 

 (4) 分級調度算法    由系統設置多個就緒隊列,每個就緒隊列中的進程按  時間片 輪轉法 占用處理器,這就是分級調度算法。

 

 

  4、 進程的切換

進程調度將從就緒隊列中  另選一個進程占用處理器,使一個進程讓出處理器,由另一個進程  占用處理器的過程稱“進程切換”。

 

 

  若有一個進程從運行態變成等待態,或完成工作后就撤消,     則必定會發生進程切換。

 

     若一個進程從運行態或等待態         變成  就緒態,          則不一定發生進程切換。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM