iT邦幫忙

0

【小黑馬作業系統教室】(6) (Ch3)程式生命週期-new, ready, running, waiting, terminated

我是心原一馬,接下來整理第三章的內容。

上一篇: 【小黑馬作業系統教室】(5) (Ch2)常見的OS結構

要我說OS第三章最重要的圖,
大概屬底下這張了吧:

https://ithelp.ithome.com.tw/upload/images/20191216/201171144xjagEV3Ul.png

程式的生命週期

這張圖展示了一個程式(process)的生命週期,
一開始這張圖對小馬來說是相當難理解的,
因為小馬怎麼樣也想不到說程式會細分為五個狀態。
對於初學程式來說,寫程式的過程無非就是
「寫程式碼」->「按下編譯按鈕執行」->「程式結束」,
所以真的要猜的話,頂多猜程式有三個狀態: 「new」->「running」->「terminated」。

會有五個狀態,大概就是描述有多個程式的互動關係了。
從字面上意思,大概可以了解粗略的意思:

new: 程式剛創建的階段
ready: 程式準備就緒,就等OS安排執行了
running: 程式正在執行中
waiting: 等候system call完成
terminated: 程式已經執行完畢

另外,從字面上意思,
「ready」和「waiting」這兩個狀態尤其難理解,
它們看起來都具有「等待」的意思,究竟分別在等什麼呢?

為了更容易地理解,
小馬決定再引入動畫的比喻:

https://ithelp.ithome.com.tw/upload/images/20191216/201171147z1qBzR4Wh.png
(圖片來源: 動畫<暗殺教室>第一季第六集)

關於這張圖,在自己的作業系統教學的系列文第三篇第四篇都有出現,
講的是這位「章魚老師」可以用20倍音速移動,
快速來回穿梭於教室之間,
達到「同時」幫幾十個同學們輔導課業的效果。

小馬自己還蠻喜歡這個比喻的,

  • CPU- 電腦用來運作程式的地方,我們可以把它比喻為「老師」
  • process- 程式,我們可以把它比喻為「老師處理學生問題的過程」(比如說: 要老師批改學生的作業、有課業問題要問老師)

章魚老師的課後輔導教室

這邊我們就以老師和學生的互動過程,
用來比喻OS跟程式之間的互動過程,
來看看程式如何在五個狀態之間切換。

我們現在就想像這樣一個情境:
由於期末考快到了,
很有熱忱的「章魚老師」決定開一個課後輔導時間,
透過快速穿梭於教室「同時」幫學生們輔導課業,
讓有需要的同學自由參加。
那麼…

  • new-> ready : 假設原來有19個學生在教室接受老師輔導,新來了一個學生,變成同時有20個學生接受老師輔導,那麼新來的那個學生便猶如由「new state」切換到「ready state」。
    (比喻: 作業系統本來管理19支程式,新增一支程式)

  • ready, running state間互換稱為「context switch」:
    【小黑馬作業系統教室】(4)介紹過context switch一詞,
    章魚老師快速來回穿梭於教室之間的動作,
    輪流解決學生的問題,稱為「context switch」。
    (比喻: OS快速交替選出程式給CPU執行)

接下來再對於兩個狀態互換來講:

  • ready->running:
    如何決定要換哪支程式給CPU執行呢?
    在OS上實際上有支叫做scheduler的程式進行程式的排程,
    CPU一次只會執行一支程式,
    scheduler會決定下一個給CPU執行的程式是哪個。
    以比喻來說的話,
    就是彷彿「章魚老師」每次在選擇要處理哪個學生的問題時,
    有個類似「小老師」或是「助教」的職位幫老師決定。

  • running->ready:
    透過interrupt打擾CPU,
    對於interrupt是什麼有在【小黑馬作業系統教室】(3)細講了,
    不過這邊講的interrupt除了程式有特別需求去打斷CPU以外,
    更多的interrupt可能是來硬體「Timer」的打斷。
    「Timer」類似一個「鬧鐘」,
    因為不希望有的程式一直無限等待都沒被執行到,
    (比喻: 不希望有的學生一直等待問問題但老師都不鳥他)
    因此「Timer」每隔一段時間會固定發出一個interrupt打斷CPU,
    告訴CPU說時間到了,該換人了。

  • running-> waiting:
    那什麼時候程式會從running state切換到waiting state呢?
    就是程式要做一件耗時的事情時,比如說I/O (之前說過I/O是input/output的簡稱),
    (這點可能要寫程式的人比較有感覺,讓程式在螢幕上印出文字遠比做加法運算耗時)
    OS就會先把CPU的資源讓出來給其它程式使用,
    做I/O的程式便進入 waiting state。
    以學生的比喻來說就是學生中途想去「上廁所」,
    「上廁所」是一件耗時的事情,
    那這時老師自然先處理其它學生的問題。

  • waiting->ready:
    當程式將耗時的事情(比如: I/O)做完時,
    程式就會回到ready state等候OS安排給CPU執行,
    好比說學生上完廁所回到教室一樣。

  • running-> terminated:
    程式執行完畢。
    (比喻: 學生參加自由的課後輔導,由於問題都問完了,離開教室。)

scheduler的種類

講完了程式的生命週期,
我們可以看到在OS上是有支叫做scheduler的程式,
用來管理程式。
(比喻: 「章魚老師」有個「小老師」或是「助教」管理學生在教室的進出,或決定換誰給老師處理問題)
依據不同的程式狀態切換,
scheduler可以分為三種。

短、中、長期的排程決定者

  • Short-term scheduler: 又稱 CPU scheduler,在Ready state中選擇哪支程式可以進入running state,被CPU執行。(當前換哪個學生給老師處理問題)
  • Long-term scheduler: 又稱 job scheduler,選擇哪些程式可以從new state進入ready state,決定的是當前可以有多少支程式同時執行。(當前有幾個學生在教室)
  • Medium-Term Scheduler: 決定哪支程式要請出記憶體,由running state 進入waiting state等待。用意是當程式要做IO, sleep這類耗時長的事情時,先將程式移出記憶體,等待它做完,再將程式搬回記憶體,節省記憶體空間。(當前哪個學生要上廁所,先把學生請出教室)

先整理到這裡吧。


尚未有邦友留言

立即登入留言