# 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 的相關資訊記錄 ![](https://i.imgur.com/Aqyj1pV.png) * Process 是 OS 分配資源的單位 * Process 之間互相 Memory 是獨立,意味著每開一個 process 就要新開一個 memory space 給他。 * Process 也可以說是 Thread 的容器,一個 process 可以含有多個 thread ![](https://i.imgur.com/cyy1F4X.png) * 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 的概念) ![](https://i.imgur.com/qk3Yunk.png) * [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)