# OS & Program & Thread & Process
###### tags: `OS`
## Operating System
- 思考為什麼需要 os ?
- os 負責什麼工作 ?
- 資源的管理 ( resource )
- 工作的管理 ( jobs)
## Program
Program 意旨軟體工程師所寫的程式碼 (code) 的集合,也就是還尚未 load 進記憶體的程式碼
## Process 和 thread 比較
### Process v.s. Thread
* Process
---
OS 管理所有 Process 的方法,就是對每一個 Process 建立一個表格,稱為 PCB (Process Control Block),紀錄該 Process 相關狀態和資訊。 OS 在切換不同 Process 時,會先保存原本 Process 當下執行狀態,再切換到下一個 Process ,並恢復此 Process 最後停留的狀態,繼續執行。OS 就是透過 PCB 掌控 Process 的運行
* Process Control Block (PCB)
* process 的相關資訊記錄

* Process 是 OS 分配資源的單位
* Process 之間互相 Memory 是獨立,意味著每開一個 process 就要新開一個 memory space 給他。
* Process 也可以說是 Thread 的容器,一個 process 可以含有多個 thread

* Thread
--------------
* Thread 是 OS 分配 CPU-time 的單位
* 同一個 process 底下的 thread,他的Code Section , Data Section, OS Resources 會是共享的
* OS 會根據 Thread 的優先權以及使用過的 CPU 時間,在不同的 Thread 作切換,讓各個 Thread 都有執行的機會
### Linux process
以 linux 來說,他用 task_struct 來描述 process 和 thread 的結構,task_struct 就是 Task 的資料結構體現,也被稱做為 process descriptor (類似 PCB 的概念)

* [linux task_struct definition](https://elixir.bootlin.com/linux/v5.14.9/source/include/linux/sched.h#L661)
* [jserv 解說 task_struct](https://youtu.be/81h38ZSSnOM?t=9120) at 2:32:00
* [linux context switch 圖解](https://linux-kernel-labs.github.io/refs/heads/master/lectures/processes.html#context-switching)
* [OS Process & Thread (user/kernel) 筆記](https://medium.com/@yovan/os-process-thread-user-kernel-%E7%AD%86%E8%A8%98-aa6e04d35002)
### Reference
* 通用
* [30天~作業系統學習 :: 2019 iT 邦幫忙鐵人賽](https://ithelp.ithome.com.tw/users/20111939/ironman/1800)
* [【恐龍】理解 Process & Thread](https://reurl.cc/r1ZOlN)
* [[OS] 作業系統筆記-電腦系統架構](https://reurl.cc/q1ZA00)
* [[OS] 作業系統筆記-Process](https://reurl.cc/2o8G46)
* linux
* [從 Linux Kernel 出發看!探討 Process 組成結構!](https://fred-zone.blogspot.com/2011/12/linux-kernel-process.html)
* [05. 行程排班/排程 (Process Scheduling)](https://sls.weco.net/node/21325)
* [OS Process & Thread (user/kernel) 筆記](https://medium.com/@yovan/os-process-thread-user-kernel-%E7%AD%86%E8%A8%98-aa6e04d35002)