iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

當你凝視linux, linux也在凝視你系列 第 5

Day5 process 的生命週期

  • 分享至 

  • xImage
  •  

前言

昨天講了process 怎麼來的,今天來講講process 的生命週期。

process 的生命週期(理論)

上圖來自Operating System Concepts

在作業系統的聖經上,關於作業系統的行程的各種狀態,細講各個state以及state 轉移的
new: 創立新的新行程
ready: 行程所需的資料已經移入記憶體,等待獲得CPU資源
waiting: 行程因為等待某個資源暫時移出CPU
running: 行程正在CPU運行中
terminated: 行程結束

process 的生命週期(實際)

但是linux 又來了,linux 跟教科書寫的資訊又不一樣了! 實作與理論總是有一些落差的!在linux中沒有所謂的 ready state,而是將ready state跟 running state合併,統一變成 Running state ,示意圖如下。

TASK_RUNNING: linux 中將理論裏的 ready 與 running混合成為單獨的 TASK_RUNNING state,上圖中右邊的 TASK_RUNNING代表實際正在運行的行程,左邊則是正在等待被指定CPU的行程,只是對linux來說這兩種狀態並沒有特別區分,而是統一用 TASK_RUNNING 標記。

TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE: 當行程需要執行IO或是需要等待條件滿足時,此時的等待時間是無法預估的,因此行程的狀態會轉移成TASK_INTERRUPTIBLE / TASK_UNINTERRUPTIBLE,這兩個狀態的差別就跟他的名字一樣, TASK_INTERRUPTIBLE在條件滿足/收到未被屏蔽的訊號時能夠返回等待隊列中,反之TASK_UNINTERRUPTIBLE並不能被訊號喚醒,只能夠在條件滿足時返回運行狀態。

_TASK_STOPPED: SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOUT等信號會將行程暫時停止,進入_TASK_STOPPER的狀態。
EXIT_ZOMBIE:行程已經不在運行隊列中,只是記憶體仍然保有該行程的資料,尚未處理。

以上的定義出現在 /include/linux/sched.h

reference: linxu中進程的狀態


上一篇
Day4 橫空出世的 kernel_clone
下一篇
Day6 讓 scheduler 規劃未來
系列文
當你凝視linux, linux也在凝視你30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言