iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
IT Operation

解構作業系統:30 天從 Process、Concurrency 到 Virtual Memory系列 第 15 篇

Day 15|Priority Inversion:為什麼最高優先權的 Thread,反而要等最低優先權?

  • 分享至 

  • xImage
  •  

上一篇 CPU Scheduling 提到,Scheduler 不一定把所有 Thread 完全平等看待。系統會存在:Priority
High Priority通常更優先取得 CPU
↓
Medium Priority
↓
Low Priority
↓
通常較晚取得 CPU

在RTOS中假設有三條 Thread:
H = High Priority
M = Medium Priority
L = Low Priority
執行優先程度應該是:H -> M -> L

結果卻可能發生一件非常奇怪的事情:H 正在等 L 但 L 又一直被 M 搶走 CPU,M 竟然間接阻止 H 執行,這種優先權關係被「倒過來」的現象,就是:

Priority Inversion


1. Priority Inversion 到底是怎麼一步一步發生的?

假設現在有三條 Thread:
H = High Priority
M = Medium Priority
L = Low Priority

以及一把:Mutex X

  • Step 1:L 先取得 Mutex,一開始 H 和 M 還沒有 Ready
  • Step 2:H 變成 Ready
    突然,高 Priority 的 H 有工作要做,因為:Priority(H) > Priority(L)
    在 preemptive priority scheduling 的簡化情況下,Scheduler 可以將 Mutex X 讓給 H。
  • Step 3:H 開始執行後。結果發現:Mutex X 的 Owner 是 L所以 H:
    Running
    ↓
    lock(X)
    ↓
    拿不到
    ↓
    Blocked

這時的關係:
H 等待
↓
L 持有 Mutex
因此,H 能不能繼續,現在取決於 L 什麼時候釋放 Mutex。
直覺上:
H 等 L
↓
那趕快讓 L 跑
↓
L unlock
↓
H 就能繼續


上一篇
Day 14|CPU Scheduling:100 個 Thread 都想跑,OS 到底先選誰?
下一篇
Day 16|Virtual Memory:明明 RAM 就這麼大,為什麼每個 Process 都覺得自己有一大片 Memory?
系列文
解構作業系統:30 天從 Process、Concurrency 到 Virtual Memory 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言