iT邦幫忙

1

【小黑馬作業系統教室】(8) (Ch4) 幾種多線程模型介紹,認識user thread 與 kernel thread

我是心原一馬,接下來繼續詳談第四章user thread 與 kernel thread。

上一篇: 【小黑馬作業系統教室】(7) (Ch4)thread- 比process更輕量的程式

在上一篇中,相信大家已經了解program, process, thread的差異了。
在這一篇中,我們來談談user thread 與 kernel thread吧。

user thread 與 kernel thread

不知道讀者還記得user mode與kernel mode嗎? (見【文科生都能懂的小黑馬作業系統教室】(4) (Ch1)特權指令與系統保謢)
kernel mode是需要有權限才能執行指令的地方。
簡單來說,kernel thread直接歸OS所管,
user thread則是歸使用者程式所管。(使用者呼叫thread的函式庫創建thread)

  • OS並不會知道使用者寫了程式去創建user thread,
    不會介入user thread的管理。
  • 但OS會知道有幾個kernel thread存在,
    kernel thread就在kernel mode之下執行,
    由OS直接管理。

Multi-threading models 介紹

由於OS不直接管理user thread,
使用者寫程式要user thread完成的工作,
會連接到kernel thread來完成。
由user thread 的 kernel thread的連接關係來看,
又可以分為三種模型:

  1. Many-to-One model

https://ithelp.ithome.com.tw/upload/images/20191219/20117114tLwCcQe5Ek.png

  • 多個user thread接到一個kernel thread
  • 因為只有一個kernel thread,同時只能有一個user thread進入kernel執行,程式沒有平行化
  • 缺點: 可能會因為一支thread「卡住」而導致整個process跟著「卡住」

這缺點說的是什麼意思呢?
想像user thread 是排隊上廁所的人,kernel thread是廁所。
如果每個人上廁所時間都恰當的話則沒事,
但如果剛好有個人便秘,占著廁所一小時不出來(好比說某個user thread呼叫system call讓程式「卡住」),
那其它人也別想上廁所了。

  1. One-to-One model

https://ithelp.ithome.com.tw/upload/images/20191219/201171143fjFa6xTUN.png

  • 一個user thread接到一個kernel thread
  • 每創建一個user thread,就必須創建一個kernel thread,對OS來說管理的負擔較大。
  1. Many-to-Many model

https://ithelp.ithome.com.tw/upload/images/20191219/20117114uu5qnXZDxy.png

  • 多個user thread接到多個kernel thread,看哪個kernel thread不忙碌就去使用它

  • 比喻: user thread 是排隊上廁所的人,kernel thread是廁所,
    男廁內有多個人排隊使用小便斗,看哪個小便斗沒人使用了,排前面的人就優先去使用。

    就先整理到這邊吧。
    目前已整理完畢作業系統第1~4章的內容了,
    至此,讀者們已可以對作業系統都做些什麼工作大致有基礎認識了,
    真是可喜可賀。

再接下來,就要進入OS中較為深入也很重要的課題:
「記憶體管理」、「排程」、「同步化」、「死結」(deadlock),
敬請期待…

願【小黑馬作業系統教室】能拯救千千萬萬為「作業系統」必修課苦惱的資工系學生,
以及單純想要對電腦系統有更深入了解的朋友。


尚未有邦友留言

立即登入留言