---
# System prepended metadata

title: Process Concept

---

# Process Concept
## Process vs. Program
- Program: binary stored in disk(a passive entity)
- Process: a executing program in memory(an active entity)
- 
---
## Process includes
1. Process在memory空間裡面的content(不同區塊)

    - Code segment (text section)
        - 也就是平常寫的程式碼，先被載入到記憶體裡面等著被CPU fetch
    - Data section: Global Variable
    - Stack: local variable and function
    - Heap: dynamic allocated variables or classes
2. 一些meta data(管理process的資料)
    - <span style="color:orange">**program counter, register contents**</span>
    - a set of associated resources (e.g. open file handlers)

![image](https://hackmd.io/_uploads/S1e_aY7O1l.png)

---
## Threads
- a.k.a <span style="color:orange">lightweight process</span>: a basic unit of CPU utilization (thread是使用CPU的最小單位)
- 同一個parent process的thread，預設會共享一記憶體空間，而這一塊空間在形成的時候就會被分配好
- Thread共用的部分:
    code section, data section, OS resources
- Thread獨立的部分：
    thread ID, program counter, register set, and stack


---
## Process State
 - <span style="color:orange">New</span>: the process is being created
     - load into memory, allocate space, initialization, etc
 - <span style="color:orange">Ready</span>: wait in queue to be assigned to a processor
 - <span style="color:orange">Running</span>: instructions being executed by CPU
 - <span style="color:orange">Waiting</span>: the process is waiting for events to occur(e.g. I/O)
 - <span style="color:orange">Terminated</span>: the process has finished execution

![image](https://hackmd.io/_uploads/HymU7q7dkx.png)

### Note:
- Only one process is running on any processor at any instant
- But many processes may be ready and waiting

---
## Process Control Block(PCB)
**當process被創建的時候，OS就會去建立一個PCB用來管理process。所謂的「process被放進queue」其實是指<span style="color:orange">「PCB被放入queue裡面」</span>，而不是整個process的記憶體空間被放進去。<span style="color:orange">串接的資料結構為linked list**</span>

PCB主要會含有以下資訊:
- Process state
- Program counter
- CPU registers

其他資訊：
- CPU scheduling information (e.g. priority)
- memory management information (e.g. base/limit register)
    * 只有在running state的時候才會把這兩個值從 memory load 進 CPU 的 register
- I/O status information
- accounting information

這些資訊只有 OS 需要知道，所以會放在 kernel的記憶體空間裡面


---
## Context Switch

CPU一次只能執行一個Process，要<span style="color:orange">切換</span>給另一個Process時(<span style="color:orange">透過**Interrupt**或是**System call**</span>)，必須將process state存入PCB，或是載入其他Process的資訊，這個動作稱為「Context Switch」
![image](https://hackmd.io/_uploads/SyNn69mO1x.png)

- 在做context switch的時候，對process來說都是在閒置

### Note
- Context Switch: Kernel saves the state of the old process and loads the saved state for the new process
- Context Switch time is purely <span style="color:orange">overhead</span>
    - 無法避免，但需要減少切換的時間
- Switch time depends on
    - memory speed
    - number of registers (difficult for current computers since current CPU has more registers)
    - existence of special instructions
        - a single instruction to save/load all registers
    - <span style="color:orange">hardware support</span>
        - multiple sets of registers，可以一次紀錄多個process state的狀態，快速地在register之間切換，就不需要經過memory access
