作業系統 Operating System
Process 與 Program 最主要的差異,在於是否處於執行狀態
一個 Process 由以下內容組成:
以下為 Process 執行時記憶體的狀態
Threads 又稱為 Lightweight process
,是使用 CPU 的最小單位,同 Process 的 Threads 有共享的記憶體空間。在 Parent Process 創造 Threads 時就會 allocate ,因此省去在空間管理及處理上的執行動作。
Process 在其生命週期中,共有 5 個狀態
Ready
一個 Processor 一次只執行一個 Process ; 但同時可能有多個 Process 處於 Ready 或 Waiting 的狀態。
User 創建 Process 後,OS 會自動建立 PCB 來做管理。我們說將 Process 放到佇列當中,指得是將 Process 的 pointer 放到佇列中,而非記憶體空間,使用的資料結構為 Linked list
。PCB 包含以下內容:
此外還有:
因為這些資訊只有 OS 需要知道,所以會放在 kernel space 的記憶體空間
CPU 一次只能執行一個 Process,要切換給另一個 Process 時,必須將舊 Process 的資訊 (e.g. PCB) 儲存起來,並載入新 Process 的資訊,這個動作稱為 「Context Switch」。
CPU 完整切換的流程如下:
Context switch 的過程中, CPU 沒有執行任何 instruction,因此 Context Switch 其實是 overhead,浪費 CPU 的資源。但為了 CPU sharing 及 time sharing,Context switch 無法避免地經常發生,所以我們只能盡可能縮短時間:
由於 Process 共享 CPU,使用的先後順序就是由 scheduler 來決定。
Scheduling 分為 CPU 及 Job Scheduling
因現代 memory 空間的增長以及虛擬記憶體的觀念引入,過往由 Long-Term Schduler 處理的動作多改由 Medium-Term Schduler 執行
回到 programmer 及 user 角度,我們到底如何跟 Process 溝通
相關資料: MIT6.s081 Lab: Xv6 and Unix utilities
copy-on-wirte
技術,在 Run time 過程中,儲存 Child 的與 Parent 的不同處 (A's Child 在執行過程中會慢慢增長)以下為 UNIX/Linux Process Creation 的範例程式碼
以下範例簡單示意 fork 的特性, Child Process 會保存 fork() 呼叫當下 Parent Process 的狀態。注意如果過程中呼叫 execlp ,則該分支會斷掉,樹不會繼續往下生長
當 Process 執行到最後一個指令或是呼叫 exit(),都會中止程序
ctrl+C
可以強制停止 Process,因為其他程序都是由 console 程序創建,更進階的是呼叫 kill
,但需要管理者權限要做到 IPC 用 memory 分別有兩種方式
Sockets
In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction.
Process 要能夠 …
in+1
留一個空格。之後會提到以 locking 的方式使用所有的 Buffer 空間