【作業系統】Processes Part 2

朱痕染跡璧有瑕
6 min readApr 20, 2021

--

https://pixabay.com/photos/river-brook-spring-cascade-water-5524569/

本文為清華大學開放式課程上課心得整理。

Schedulers

由於資源有限,而要執行的程式很多,因此需要排程去控制程式使用資源的先後順序。程式在電腦的位置也可以對應到前述的五個狀態:

https://www.youtube.com/watch?v=N9hCtVGF76M&list=PL9jciz8qz_zyO55qECi2PD3k6lgxluYEV&index=22,7 分 04 秒截圖

程式進到 CPU 便稱為 CPU Scheduling,進入記憶體便稱為 Job Scheduling。CPU Scheduling 又稱為 Short-term,因為它會很頻繁的執行;相較之下執行時間間隔比較久的 Job Scheduling 便被稱為 Long-term。

而在兩者之間還有一個被稱為 Medium-term 的 Scheduler,它的作用是當記憶體空間不足時,便將程式從記憶體拋回(swap)硬體,有需要時再移回記憶體中執行,因此 Medium-term Scheduler 是一種與虛擬記憶體的概念結合而產生的 Scheduler。

Long-term Scheduler

Long-term Scheduler 在電腦中扮演著控制多工程序規劃(degree of multiprogramming)的角色,degree 太低最造成 CPU 閒置,太高又會導致資源爭奪,因此必須控制在適當的數量上。

此外,Long-term Scheduler 也負責挑選進入 CPU 執行的程式,為了有效利用資源,最好能讓 CPU 與 I/O 執行的時間一致,有的程式使用 CPU 有的程式使用 I/O,讓資源的分配達到平衡。

不過,在一些功能比較強大的電腦中,Long-term Scheduler 的功能已經被淡化,因為資源足夠,所以可以選擇先將程式全部載入記憶體,只需要決定何時將程式再拋回硬體即可,在這種狀況下,反而是 Medium-term Scheduler 的工作比較吃重。

同上,12 分 32 秒截圖

Short-term Scheduler

Short-term Scheduler 的執行時間非常短,最少在硬體預設的 interrupt 便會被喚起執行一次。

Short-term Scheduler 的演算法會確保它的等待時間與公平性(每個程式等待的時間要盡量一樣)。等待時間也是用來評估電腦效能的重要指標,不同的演算法執行一樣的程序,就會得到不同的等待時間,因此如何設計一個有效的演算法對電腦效能來說是一件至關重要的事。

同上,17 分 25 秒截圖

由於 Short-term Scheduler 講求效率,所以演算法不能太慢,否則也會造成閒置,因此演算法在設計時,本身的執行時間也要控制在合理的範圍內。

Medium-term Scheduler

Medium-term Scheduler 負責程式在記憶體或硬碟之間的轉換,稱為 swap out 與 swap in。Medium-term Scheduler 是現代電腦常見控制 multiprogramming degree 的手段。

同上,21 分 48 秒截圖

Operations on Processes

前面介紹的是作業系統如何管理 Processes,現在則要從 user 的角度來看 Processes 的操作。

Tree of Processes

在電腦中,每個程式都有屬於自己的認證號碼,稱為 pid(processor identifier)。電腦一開始執行時只有一個程序,執行過程中再透過這個程序去創建其他程序,因此每個程式之間會有 parent、children 的關係,這些關係也可以用樹狀圖來表示。

如果想看正在執行的所有程式以及其樹狀結構,可以使用以下指令:

ps -ael

Processes creation

process parent、children 雖然是兩隻不同的程式,但彼此之間又有關聯,比較重要的有以下三個部分:

  1. Resource sharing:當程式創建下一隻程式的時候,它的子程式是否能繼承這個程式的 file handler 直接使用?能夠使用的程度到哪裡?是所有的資料都看得到(share all)、只看得到全域變數(subset)、或是全部都無法使用(no)?
  2. Two possibilities of execution:當程式呼叫作業系統創建子程式後,會有複數個程式等待執行,因此必須決定程式的執行順序。其中又可以分為由 scheduler 自行決定(execute concurrently)以及子程式優先(wait until children terminate)兩種。
  3. Two possibilities of address space:每個程式都有自己的記憶體空間,子程式在創建時可以直接複製父程式的記憶體資料(child duplicate of parent),或是重新載入不同的程式碼執行(child has a program load into it)。
https://www.youtube.com/watch?v=WlWvSmivguU&list=PL9jciz8qz_zyO55qECi2PD3k6lgxluYEV&index=23,16 分 34 秒截圖
同上,21 分 13 秒截圖

Processes termination

Terminate 指的是 process 的最後一個執行狀態,或是 call exit() 這個 function。Terminate 會釋出程式本來佔用的資源,除了程式自身 call exit() 結束之外,由於程式之間有親子關係,因此 parent 也可以強制結束子程式,此時使用的指令是 abort()。

由於作業系統的程序是以樹的方式建構,當 parent 被結束時,其下方的所有子程式也會跟著被刪除。

--

--

No responses yet