# Process
###### tags: `IT鐵人`
## Process
![](https://i.imgur.com/xsbgZy9.png)
Process就是前面提到的Job跟Task,Process是執行中的程式。
當Process被建立時,主要組成包括下列:
|Section|內容|
|-|-|
|Code Section(Text Section)|就是Program code部分。|
|Data Section|Containing the global variables。|
|Stack|包含temporary data(例如Function Parameters、Local variables、return address)。|
|Heap|包含Memory dynamically allocated during run time(例如pointer變數的需求空間)。|
|Programming counter & other registers|會有下一條指令的所在位置。|
Process的內容在Memory中如下:
![](https://i.imgur.com/FOCcw92.png)
Memory會分配一塊區間給Process,而最低的放Code Section跟Data Section,之後heap往上長而Stack由上往下長。
## PCB
PCB的全名是Process Control Block,就是在Process被建立時,kernel會建立一個表格,紀錄有關該Process的資訊,以便之後切換不同process時還可以正常運作。
PCB主要紀錄的資訊有:
|項目|內容|
|-|-|
|Process NO.|unique Process ID.|
|Process State|ready, new, running, wait state,etc.|
|CPU Register|accumulator, Stack Top pointer, Index register,etc.|
|CPU Scheduling Info|process優先權值, PCB pointer,etc.|
|Memory Management Info|Base limit register值 or page Table or Segment Table, base on OS memory management.|
|Program Counter|Next instruction address.|
|Accounting Info|Process使用CPU Time的最大值, 目前使用了多少CPU Time, 多少資源, etc.|
|I/O-Status Info|目前配給process之I/O-Device為何,已發出哪些I/O-request,完成多少I/O-request,etc.|
## State Transition
![](https://i.imgur.com/x1dkKBE.png)
前面說紀錄PCB的目的就是為了能夠切換不同的process,所以每個Process都會需要在不同的state中切換,就有了以下的State Transition Diagram:
![](https://i.imgur.com/O36PAUf.png)
建立好Process後,分配完Memory後進入ready state,拿到CPU後進入running state,中間會來回切換執行別的process,執行完成之後就terminated,如果執行中間需要進行I/O或是意外狀況,則進入waiting state等待完成。
![](https://i.imgur.com/qQkFZtn.png)
這種類型的State Transition Diagram是考慮了Memory不夠的狀況,這時候有些process會swap進入disk,等到Memory夠用或是該輪到他的時候再從disk移出來。
## Scheduler
提到了process會輪流執行,那麼就要介紹有甚麼挑選process的方式,以下會介紹三種Scheduler:
|種類|內容|
|-|-|
|Long-Term Scheduler|又稱為Job Scheduler,目的在於從Job Queue中抓Job進入Memory中以便執行。因為執行的頻率最低,所以稱為Long-Term。|
|Short-Term Scheduler|又叫做CPU Scheduler或Process Scheduler。目的在於從Ready Queue中抓Process給CPU執行。因為執行頻率最高,所以稱為Short-Term。|
|Medium-Term Scheduler|當Memory空間不夠時,要把Process swap out到disk中,直到空間足夠時再將Process swap in到Memory。因為執行頻率在中間,所以稱為Medium-Term。|
![](https://i.imgur.com/l9lxAli.png)
## What's Next?
這邊介紹了PCB以及會有不同的State,後面會介紹在切換不同的process時會發生甚麼事情,以及一些酷東西XDD
| 上一篇 | 下一篇 |
|-|-|
|[System Call & OS架構](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/Hk99oy0-F)|[Child Process](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/SyQiqR8zF)
![](https://i.imgur.com/pxAYcTg.png)