我們常說的程式 (Program) 是一個寫好的可執行檔案,或是編譯好的可執行檔案。當他開始執行,進入到電腦的記憶體時,會稱作Process。Process是工作的指揮中心,其活動狀態可以藉由 program counter 以及處理器的 registers 內容得知。Process 在記憶體內容中管理的區塊有數個層次,由低地址到高地址分別為:
- Text section: 可執行的程式碼
- Data section: 全域變數
- Heap section: 程式執行中,動態分配及使用的記憶體空間。
- Stack section: 程式執行中,呼叫函數的參數、返回值或定義區域變數等所使用的空間。
Text 以及 Data section的大小是固定的,而 Heap section 及 Stack section 會隨程式執行時而有變化。
Process 身為獨立的指揮中心,管理自己分配到的記憶體內容,即便是相同的程式所產生出的不同的 Process,他們彼此管理的記憶體空間不會互相干涉。
Process State
Process 有下面幾種狀態:
- New: process剛產生
- Running: instructions 正被執行
- Waiting: process 正等待一些事件的完成,如I/O
- Ready: process 準備好並等待分配給處理器
- Terminated: process 執行完成並結束
Process Control Block
前面介紹過 process 管理的記憶體空間的四個層次。而實際 process 在作業系統是以 process control block (PCB) 呈現。PCB包含的資訊內容有:
- Process state: 狀態如 new, ready, running, waiting 等。
- Program counter: 下一個執行的instruction的位置。
- CPU registers: 儲存一些process被中斷又重新執行時所需要的資訊。
- CPU-scheduling information: 儲存prcocess的優先性或process排程列隊的位置。
- Memory-management information: 與記憶體page等相關的訊息。
- Accounting information: 記錄 CPU使用數、執行時間、時間限制、工作數量等訊息。
- I/O status information: 記錄分配給process的 I/O 設備、檔案系統的檔案等。
Context Switch
當CPU core切換正在執行的process到另一個process會進行 context switch。把當前狀態記錄在目前的PCB,讀取下一個要執行的process的PCB,獲取之前的狀態,然後開始執行。 context switch純粹是一個成本,切換時間與硬體相關。