2021年7月20日 星期二

Process and Thread

Process 主要包含 :

  • Code Section
  • Data Section
  • OS Resources (e.g. files)

*Code Section+Data Section = memory (text segment、data segment、heap segment)


OS 管理所有 Process 的方法,就是對每一個 Process 建立一個表格,稱為 PCB (Process Control Block),紀錄該 Process 相關狀態和資訊。 OS 在切換不同 Process 時,會先保存原本 Process 當下執行狀態,再切換到下一個 Process ,並恢復此 Process 最後停留的狀態,繼續執行。OS 就是透過 PCB 掌控 Process 的運行。

Process 切換的動作我們稱為 Context Switch。

Context Switch 發生的時機 :

  • External Interrupt ( CPU 以外元件所發出 : I/O interrupt、 Timers)
  • Internal Interrupt ( CPU本身所引發 : stack overflow、divided by zero …)
  • Software Interrupt (e.g. System Call: user mode 換到 kernel mode)


Thread主要包含 :

  • Stack
  • Register Set
  • Program Counter


Process 內 Thread 彼此之間共享:

  • Code Section
  • Data Section
  • OS Resources


Process 是 OS 分配資源的對象

Thread 是 OS 分配 CPU 時間的對象


User-level thread

使用 User-level library 管理 Thread,包括處理 Thread Context Switch,也因此 OS 是察覺不到 Thread 存在的,因為只有在 User-level 中運行,所以不會使用到 System Call。

Kernel-level thread

由 OS 管理 Thread,因此 OS 是察覺的到 Thread 存在,所以也有 Thread Context Switch 的發生,但是比 Process Context Switch 成本低,因為不需要切換 address space(記憶體空間),專門處理 System Call 。


thread建立成功,但是確沒有啟動,可能是因為在thread裡宣告了太大的陣列,造成segmentation fault,通常在embedded system比較容易發生。

沒有留言:

張貼留言