1 / 91

作業系統

作業系統. 第 2 章 行程管理. 2-1 何謂行程. 電腦系統的指令是以靜態的 程式 檔案形式儲存在輔助記憶體中,當程式被載入系統執行時,就稱為 行程 (Process) 或程序。 硬碟中只有一個程式,但可以被執行好多次而產生很多行程,分別擁有自己執行時所需的資源。 例如 IE 瀏覽器 (iexplore.exe) 在硬碟中只安裝一份 iexplore.exe ,但是使用者可以執行好幾個 IE 瀏覽器,此時,系統中就有多個 IE 瀏覽器的行程,請參考圖 2-1 。. 圖 2-1 IE 行程範例. 執行中的行程. 行程的執行.

Download Presentation

作業系統

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 作業系統 第 2 章 行程管理

  2. 2-1 何謂行程 • 電腦系統的指令是以靜態的程式檔案形式儲存在輔助記憶體中,當程式被載入系統執行時,就稱為行程(Process)或程序。 • 硬碟中只有一個程式,但可以被執行好多次而產生很多行程,分別擁有自己執行時所需的資源。 • 例如IE瀏覽器(iexplore.exe)在硬碟中只安裝一份iexplore.exe,但是使用者可以執行好幾個IE瀏覽器,此時,系統中就有多個IE瀏覽器的行程,請參考圖2-1。

  3. 圖2-1 IE行程範例 執行中的行程

  4. 行程的執行 • 行程執行時包含程式區段、資料區段、堆疊區段、控制資訊、和行程執行時所需的一些控制資訊,例如程式計數器的值。 • 簡單說,在多工的環境下執行程式的時候,必須要安排一個適當的環境,讓它擁有可以正常執行指令所需的資源,不會干擾到別的程式的執行,或是被別的程式干擾,就好像是只有單一形成的環境下執行一樣。 • 當系統中執行多個相同程式時,雖然每個行程的程式區段是相同的,但是卻有各自的資料區段和暫存器等獨立的執行環境。如此,使用者才能在同一時間瀏覽許多不同的網頁,而不必擔心網頁的內容都混在一起。

  5. 行程與程式的主要差異 • 行程是主動的個體,程式是被動的個體。行程是執行的程式,包含了程式計數器來指示下一個要被執行的指令,以及一組相關的資源。程式只是一個存放在儲存裝置中的檔案,可以修改、複製、與刪除。 • 行程是暫時的,程式是長存的。 • 程式與行程的組成內容不同,程式是指令的集合,行程包括程式、資料、與行程的控制資訊。

  6. 2-2 行程狀態 • 行程執行的過程中,可能會經歷多個不同的狀態,這些狀態反應出目前行程的動作,以及能做的事情。 • 行程在每個狀態下能做的事情是不一樣的,而且不同狀態之間會因為某些條件而發生轉換。 • 下面接著討論一些簡單與複雜的行程狀態。

  7. 最簡單的行程狀態模型-雙狀態模型 • 最簡單的行程狀態模型是雙狀態模型(2-state process model) ,也就是執行中(running)與非執行中(not running)2個行程狀態。 • 為了方便說明,我們會使用行程在處理器中執行的指令序列來呈現狀態的轉換,與不同行程間的交錯執行情況,這種執行過程中的指令序列稱為行程軌跡(trace)。 • 根據多工的精神,每個行程在執行一段時間後,必須先暫停然後讓其它的行程執行。因此,在任一時間點上,只有一個行程會處於執行中的狀態,而其其它的行程都是處於非執行中的狀態。如圖2-2是兩組行程軌跡,分別屬於行程A與行程B。

  8. 圖2-2 最簡單的行程狀態模型-雙狀態模型範例 (非執行中) 6000 6001 6002 6003 (執行中) 時間到 9110 9111 9112 9113 (非執行中) (執行中) 時間 時間到 (非執行中) 6004 6005 6006 6007 (執行中) 時間到 (非執行中) 9110 9111 (執行中) 狀態 狀態 行程 A 行程 B

  9. 分派程式決定行程的順序 • 圖2-2的行程是很規律地依序輪流執行,但是在實際情況下,每個行程的情況可能並不相同。例如,某個行程可能是具有高優先權特權行程,必須優先執行。因此,系統必須有一個分派程式(Dispatcher)來決定下一個能取得CPU的時間,能進入執行中的狀態的行程是哪一個。 • 圖2-2加上分派程式後,可修改如圖2-3。 • 當分派程式執行時,行程A、B都處於非執行中的狀態。

  10. 圖2-3 加上分派程式之雙狀態模型範例 6000 6001 6002 6003 (非執行中) (執行中) 200 201 202 (非執行中) 9110 9111 9112 9113 (執行中) 時間 200 201 202 (非執行中) 6004 6005 6006 6007 (執行中) 200 201 202 (非執行中) (執行中) 9110 9111 分派程式 狀態 狀態 行程 A 行程 B

  11. 雙狀態模型的狀態轉換 • 在雙狀態模型中,當新行程建立後,首先會以非執行中狀態進入系統佇列(system queue),等待機會執行。 • 當目前正在執行中的行程被中斷後,分派程式會從在佇列內等待的行程中選擇一個來執行。 • 下圖2-4是在雙狀態模型中,行程的狀態轉換圖(State transition diagram)。 被分派 非執行中 執行中 進入 離開 被中斷

  12. 排程與排程器 • 在多工系統中,決定哪個行程能夠取得CPU控制權的過程稱為排程(scheduling),而負責排程的程式稱為排程器(scheduler)。 • 排程可分為三個階段:長期(long-term)、短期(short-term) 、與中期(mid-term) 。

  13. 長短中期排程 • 長期排程器:也稱為任務排程 • 用來決定哪些任務(行程)可以參與系統資源的競爭;通常只要長期排程器決定讓某個行程加入後,就讓它一直保持可以作用(active) ,直到結束為止。常見於傳統的批次作業系統。目前一般作業系統已沒有長期排程器了。 • 短期排程器:也稱為分派程式 • 負責將CPU分配給已經進入記憶體,並且已經就緒可以執行的行程使用。

  14. 長短中期排程 • 中期排程器:也稱為置換程式(swapper) • 會降低系統的多工程度,但增加系統中記憶體的空間。 • 置換程式會將一些行程從記憶體中暫時移出到輔助記憶體中(通常為硬碟),以釋放一部分的記憶體空間給執行中的行程使用。等經過一段時間後,再重新移進來記憶體等待執行。這種移出/移入的動作稱為置換(swapping) 。 14

  15. 短期排程的5種狀態 • 建立(new):行程剛產生時的狀態。 • 就緒(ready):行程已經準備好。 • 懸置(blocked):行程正在等待某個事件發生,通常是在等待I/O運算完成。 • 執行(running):行程正在執行,亦即正在使用CPU 。 • 終止(terminated):行程已經結束, 但有些資訊還留在系統中(有時候可以作為狀態回報之用)。 • 圖2-5右邊無陰影區,顯示短期排程的5種狀態。

  16. 中期排程的2種狀態 • 置換/就緒(swapped/ready):行程可以被執行,但目前被置換在輔助記憶體中 。 • 置換/懸置(swapped/blocked):行程正在等待某個事件發生,並且被置換在輔助記憶體中。 • 當行程被換出(swap out)到輔助記憶體時 ,短期排程器在分派行程時,就不會將此行程考慮在內。只有在它被中期排程器置入(swap in)記憶體之後,短期排程器才會把它加入排程中。 • 圖2-5左邊陰影區,顯示中期排程的2種狀態。這2種狀態都沒有線條連結到執行狀態,也就是無法直接取得CPU資源 。

  17. 短期排程的5種狀態 中期排程的2種狀態 建立 允許進入 允許進入 置換出去 分派 置換/就緒 就緒 分派程式 置換程式 中斷 離開 置換進入 執行 終止 事件發生 事件發生 置換出去 等待事件 懸置 置換/懸置 置換程式 置換進入 圖2-5 完整的行程狀態轉換圖

  18. 課堂練習-行程狀態轉換 • 假設有一行程在執行了一個I/O運算。在等待運算完成的過程中,因為系統的多工程度過高,被置換程式移到輔助記憶體中。 • 當這個行程還停留在輔助記憶體的時候,它的I/O運算就完成了。 • 請問,直到它被重新執行的時候,一共經歷了哪些狀態?

  19. 練習解答 • 執行懸置置換/懸置置換/就緒就緒執行 短期排程的5種狀態 中期排程的2種狀態 建立 分派 置換/就緒 就緒 分派程式 置換程式 離開 置換進入 執行 終止 事件發生 置換出去 等待事件 懸置 置換/懸置 置換程式

  20. 2-3 行程的建立 • 當行程處於建立狀態時,表示作業系統已經完成行程控制資訊的建立,但是還沒有將行程移入記憶體中。 • 這樣的設計技巧有助於作業系統區分行程控制與記憶體配置的工作 • 當系統內的記憶體或CPU處理能力不足的時候,作業系統可以記錄行程的存在是處於建立狀態,但不必立即開始執行。

  21. 產生新行程的時機 • 使用者登入:系統會產生shell行程,提供與使用者的互動式介面。 • 使用者執行某個程式:會在系統中產生對應的行程。 • 請求系統提供服務:例如使用者進行幕後列印,系統也可能會產生負責執行此命令的行程。 • 由現有行程產生:為了進行平行處理的目的,使用者行程可以利用系統呼叫來建立其它的行程。此時,原本的行程稱為父行程(parent process) ,而新建立的行程則稱為子行程(child process) 。

  22. 行程的結束 • 當行程處於終止狀態,代表行程已經不能執行,但是它的一些相關資訊與表格仍然可以暫時保存在作業系統中,以供相關的程式使用。一旦這些資訊使用完畢後,系統會刪除這些資訊,行程也就完全從系統中消失。

  23. 行程結束的可能原因 • 任務完成 :行程由執行到終止 • 保護錯誤 :行程引發例外中斷而被結束 • 運算錯誤 :行程執行不合法運算,例如除以零。 • I/O失敗 :例如找不到檔案。 • 外力終止 :使用者或作業系統因為某些理由而下令終止行程,例如行程進入無窮迴圈。 • 父行程終止 :作業系統會自動終止其子行程。 • 父行程要求 :父行程可以要求終止其子行程。

  24. 實作討論—Unix的父行程如何生出子行程 • 在Unix中,現有行程要產生新行程的唯一方法就是使用fork系統呼叫 • fork會為執行的行程進行「無性繁殖」,複製父行程的位址空間,建立一個一模一樣的複本 • 當fork執行完畢之後,它會分別返回到父行程與子行程中 • 行程靠fork的傳回值來判斷自己是「本尊」或「分身」 • 一旦分身為二之後,其中一個行程就可以透過exec系列的系統呼叫,執行另一個全新的程式,變身成為完全不同的行程來完成其他的工作

  25. 圖2-6 fork運作原理 父行程 子行程 : : fork(); : : : : fork(); : : : : fork(); : : 程式計數器的值 程式計數器的值 程式計數器的值 a. 執行fork之前 b. 執行fork之後

  26. fork程式範例 main() { int child_pid; child_pid = fork(); if (child_pid == -1) { /* 表示fork失敗 */ perror (“can’t fork”); exit(1); } if (child_pid == 0) { /* 表示是子行程 */ …… } else { /* 表示是父行程 */ …… } }

  27. 使用 fork來執行使用者命令 • shell會利用fork產生新的行程,再用這個行程來執行使用者的程式 • 使用 ps –al命令來檢查行程狀態,就會發現這些命令或行程的父行程都是shell • 例如在shell底下執行a.out後,使用ps -al: F UID PID PPID %C PRI NI SZ RSS WCHAN S TT TIME COMMAND 8 1037 24198 24196 0 49 20 2760 2216 721d22e6 S pts/2 0:00 -tcsh 8 1037 24234 24198 0 59 20 960 496 709b6d26 S pts/2 0:00 ./a.out 8 0 24235 24198 0 49 20 1008 840 O pts/2 0:00 ps –al Shell, ID為24198 Shell的子行程, 父行程ID為24198

  28. 2-4 行程的控制 • 每個行程都會使用到系統的資源,包括CPU的處理時間、記憶體空間、以及I/O裝置等。因此,行程也可以說是作業系統用來管理與分配資源的基本單位。 • 為了便於管理,作業系統會為它所管裡的每一種實體,包括記憶體、I/O、檔案、與行程,分別建立對應的資訊表格,以便控制與追蹤行程與資源的最新狀態。

  29. 行程的控制資訊 • 在管理行程的時候,作業系統需要知道一些行程執行環境相關的資訊,包括行程本身的控制資訊與所使用的資源,都必須有適當的紀錄。 • 作業系統會將行程的控制資訊存放在行程控制表或行程控制區塊(PCB, Process Control Block)中,如圖2-7 所示。 • 圖2-7 行程控制區塊 行程狀態 鏈結 行程識別碼 記憶體管理資訊 程式計數器與其他暫存器 已開啟檔案串列 …….

  30. PCB內容 • PCB通常記載行程之相關資訊,包括: • 行程狀態:new、ready、running、blocked或terminated等。 • 程式計數器:接著要執行的指令位址。 • CPU暫存器:如累加器、程式狀態字組、索引暫存器(Index register)、堆疊指標以及一般用途暫存器、狀況代碼等,主要用途在於中斷時暫時儲存資料,以便稍後繼續利用;其數量及類別因電腦架構有所差異。 • CPU排程資訊:優先順序、排程佇列等指標以及其他參數。 • 記憶體管理資訊:如分頁表等。 • 會計資訊:如CPU與實際時間之使用數量、時限、帳號、工作或行程識別碼。 • 輸入輸出狀態:配置行程使用I/O裝置,如磁帶機。

  31. 行程的佇列 • 作業系統使用佇列來協助進行排程等行程管理的工作。 • 工作佇列(job queue):第一個行程被允許進入系統時,會被放置在工作佇列中;這個佇列用來記錄系統中所有的行程。 • 就緒佇列(ready queue):第一個行程進入就緒狀態時,它會被放入就緒佇列中。 • 裝置佇列(device queue):當行程在等待進行磁碟的I/O時,會被放入磁碟裝置的等待佇列中;這些為了等待I/O完成所產生的佇列又稱為裝置佇列,每個裝置都有各自對應的裝置佇列。 • 等待佇列(waiting queue):當行程在執行系統呼叫或是等待事件發生的時候,則會被移往行程的等待佇列。

  32. 圖2-8 就緒佇列與裝置佇列 就緒佇列 行程控制區塊a 行程控制區塊b head tail …. …. 磁碟裝置佇列 行程控制區塊l 行程控制區塊m 行程控制區塊n head tail …. …. …. 行程等待佇列 行程控制區塊p head tail ….

  33. 內文切換 • 早期電腦在單工的環境下,系統內只有一個程式在執行並完全使用CPU,也不需要任何排程的動作。 • 當CPU的使用權由一個行程切換另一個行程時,作業系統必須將行程的相關資訊儲存在該行程的行程控制區塊中,並且將另一個行程的程式控制區塊載入系統,以便將執行環境復原為後者當初被中斷時的狀態。這個儲存與載入的動作,就稱為內文切換(context switch)。 • 圖2-9是二個行程輪流使用CPU時的切換過程。

  34. 圖2-9 行程的切換 行程A 作業系統 行程B 執行中 中斷或系統呼叫 閒置 將狀態儲存到PCB A 內文切換 由PCB B載入狀態 閒置 執行中 中斷或系統呼叫 閒置 將狀態儲存到PCB B 內文切換 由PCB A載入狀態 執行中

  35. 內文切換與中斷 • 行程的內文切換需要作業系統先重新取得控制權 。 • 作業系統通常是透過中斷來重新取得控制權。當發生中斷的時候,CPU的控制權會交給負責處理該特定中斷的中斷服務常式,進行不同的處理。 • 與目前執行中行程無關的事件所引起的,通常就直接稱為中斷,例如時鐘中斷與輸入/輸出中斷 。 • 與目前執行中的行程相關的事件所引起的,包括例外中斷與軟體中斷 。 • 就系統的利用率而言,內文切換所花費的時間可以說是純粹的浪費,因為它做的並不是具有生產力的工作 。 • 內文切換的速度會隨著電腦硬體架構而有所不同。 • 作業系統越複雜,內文切換時所需執行的工作也會越多 。

  36. 2-5 執行緒-輕量級行程 • 以行程為基本配置單位的系統,在行程的建立和內文切換,都會對系統造成負擔;行程間如果需要溝通或分享資料的時候,更是增加系統額外的負擔。 • 執行緒(thread):CPU配置的基本單位 • 擁有自己的程式計數器、暫存器、與堆疊空間。 • 和同一行程的其他執行緒共享相同的記憶體位址空間、程式區段、資料區段,和一些系統資源 。 • 傳統的行程相當於是只有一個執行緒的單執行緒行程 • 單執行緒行程的缺點在於當它同時接收到多項要求的時候,如果不是採取循序執行的方式,就是必須產生多個子行程,以提供較佳的互動 。 • 這樣的做法需要頻繁地建立大量的行程與執行內文切換,不僅耗費系統處理時間,而且每個行程都要佔用一塊記憶體空間 。 • 目前許多的伺服器程式都是使用多執行緒來改善效能。

  37. 圖2-10 單執行緒與多執行緒的行程 程式碼 資料 檔案 程式碼 資料 檔案 程式計數器 程式計數器 程式計數器 程式計數器 暫存器 堆疊 暫存器 暫存器 暫存器 堆疊 堆疊 堆疊 單執行緒行程 多執行緒行程

  38. 行程與執行緒的主要差異 • 位址空間:行程間的位址空間是相互獨立的,而屬於同一行程的執行緒間則是共用相同的位址空間。 • 通訊方式:行程間的通訊必須利用作業系統所提供的機制進行;而執行緒間因為共享相同的位址空間,可以透過直接讀寫其全域資料來進行溝通。 • 內文切換:同一行程中的執行緒間進行內文切換的時間遠小於行程間的內文切換。

  39. 使用多執行緒的優點 • 快速回應 • 資源共享 • 效率高 • 平行處理

  40. 觀察XP系統內的行程與執行緒數量 • 按下Ctrl-Alt-Del叫出Windows工作管理員,切換到效能頁籤, 處理程序(即行程)如圖2-11所示。

  41. 圖2-11 Windows工作管理員所顯示的行程與執行緒資訊

  42. 使用者執行緒vs.核心執行緒 • 執行緒的功能可以實作在使用者執行緒(user thread),也可以實作在核心執行緒(kernel thread)。 • 系統執行緒是由作業系統核心來支援與管理每個執行緒的狀態與資訊。 • 使用者執行緒是由使用者行程來追蹤管理它的執行緒,作業系統不去提供支援與管理。

  43. 使用者執行緒與核心執行緒的三種對應關係 • 多對一模式:由行程直接管理執行序,作業系統將行程視為單執行緒行程,不需要產生對應的核心執行緒,所以比較有效率。但這種行程因為一次只能使用一個處理器,所以無法達到平行處裡的優點。GUNportable threads使用這種模式來實作執行緒功能。 • 一對一模式:一個使用者執行緒對應一個核心執行緒,可以在多處理器系統上發揮平行的優點。它的缺點是必須產生對應的核心執行緒,而造成效能上的負擔。 • 多對多模式:前二者的混合模式,結合前二者的優點。

  44. 圖2-12 使用者執行緒與核心執行緒 使用者執行緒 使用者執行緒 使用者執行緒 行程 行程 行程 核心執行緒 核心執行緒 核心執行緒 b. 一對一模式 c. 多對多模式 a. 多對一模式

  45. 執行緒庫 • 在行程開始執行時就產生一些執行緒,然後放入執行緒庫(thread pool)中等待工作。當伺服器收到請求時,它不需要再另外產生執行緒,只要到庫中喚醒一個執行緒去處理就可以了。執行緒完成工作之後,會再回到庫中等待。 • 優點: • 效率較好:通常使用現有的執行緒要比另外產生來的快。 • 可以很方便地控管執行緒數量: 庫中的執行緒總數,就是行程能使用的執行緒數量。一般而言,庫中的執行緒數量是根據系統中CPU個數、記憶體大小、和預期的請求量等因素來設定。

  46. 2-6 行程的排程 • 行程排程(process scheduling)是多工系統的基礎,藉由將CPU控制權輪流分派給不同的行程,可以讓整個系統的產量增加。 • 排程的概念:當某個行程在等待某個事件或I/O運算時,因為無法使用到CPU,所以可以將CPU讓出來給其他需要執行的行程使用。如此可提高CPU的使用率,也可以增加系統的產出。 • 當可以執行的行程不只一個的時候,如何選擇最適當的行程來執行,使得系統的整體效能表現最佳,可是一門重要的學問,本節將探討這個重點。

  47. 行程的行為 • 一般而言,正常行程的執行通常都是在下面兩種狀況間不斷切換: • CPU暴衝:持續地使用CPU。 • I/O暴衝:專注在I/O運算上。 • 在程式的執行過程中,這二種情況往往交替出現。 • 圖2-13是行程在某個時刻的執行片段。當CPU執行一陣子運算(CPU暴衝) 之後,往往需要從週邊讀取資料,或是將資料寫入週邊(I/O暴衝) 。為了妥善利用CPU,當發生I/O暴衝的時候行程會進入懸置狀態,並且將CPU的使用全交給下一行程。

  48. 圖2-13 行程執行時的行為模式 將資料載入暫存器 對暫存器資料進行運算 CPU暴衝:持續地使用CPU 將結果存入記憶體中 讀取使用者輸入 等待 I/O I/O暴衝:專注在I/O運算上 將資料載入暫存器 CPU暴衝 對暫存器資料進行運算 將結果寫入檔案 等待 I/O I/O暴衝 將資料載入暫存器 對暫存器資料進行運算 CPU暴衝 將結果存入記憶體中

  49. CPU暴衝的分布形式 • 基本上,不同電腦架構與不同行程出現的CPU暴衝時間通常有相當大的差異,但原則上大都類似圖2-14。也就是具有大量極短的CPU暴衝,而較長的CPU暴衝數量則少得多。 • 這種CPU暴衝的分布形式,對於如何選擇或設計適當的CPU排程演算法而言,是非常重要的資料。 • 以CPU為主的程式:需要大量CPU運算,通常會有較長的CPU暴衝。 • 以I/O為主的程式:通常會有很多很短的CPU暴衝。 • 圖2-14CPU暴衝統計圖 發生次數 暴衝持續時間

  50. 排程效能的衡量 • 排程的目的就是希望在所有就緒的行程中挑出一個能帶來最佳效能者;但是,什麼叫做最佳效能?這往往涉及許多不同標準間的取捨,常見的一些排程標準有: • CPU使用率:CPU真正在執行行程的時間比例 • 產量(throughput):系統在單位時間內所能完成的行程數目 • 回覆時間:單一行程執行完畢平均所需的時間 • 等待時間:行程花費在等待的平均時間 • 反應時間:在互動式系統中,當使用者輸入之後,系統開始做出回應所需的平均時間 • 可預測性:用來評估系統回應的一致程度 • 公平性:所有行程具有相同執行機會的程度

More Related