目錄表
Process
0x00 Outline
- Program vs Process
- Process State Transition Diagram
- Process Control Block
- Scheduling and Scheduler
- Context Switch
0x01 Program vs Process
Program: 單純儲存在 disk 中的檔案,尚未被執行
Process: 正在執行中的程式 (Program) 即為程序、行程 (Process),A program in execution
一個 Process 主要包含:
- Code Section (程式碼、程式區間)
- Data Section (資料區間)
- Program Counter (程式計數器)
- CPU Register (通用暫存器、基底暫存器…)
- Stack
0x02 Process State Transition Diagram
Process 在執行過程會改變狀態,行程狀態圖 (Process STD) 描述 Process 由開始到結束的生命週期
Process STD 是針對 CPU 這項資源,Data 都在 Memory 中
- new → ready: Job scheduler 允許工作進入系統,建立 process,配置記憶體空間載入程式碼
- ready → running: CPU scheduler 由 ready queue 選擇一個 priority 最高的 process 到 CPU 執行,這裡會進行 context switch
- running → waiting: 發生較長時間的中止時,如 I/O request、Semaphore operation、Receive Message 等,Process 會先 block 住
- waiting → ready: 當造成 waiting 的事件已經完成,如 I/O complete 等,Process 會回到 ready 狀態
- running → ready: 發生短暫中止時,如被高優先權的 process 插隊、CPU Time Quantum 超過、Interupt 等,Process 會直接回到 ready 狀態
- running → terminated: 程式完成工作而正常結束,或是溢位、除零等異常終止 (Abort)
0x03 Process Control Block
行程控制區塊 Process Control Block, PCB,又稱 Task/Job Control Block
PCB 是作業系統為了管理 Process 而用來記錄行程相關狀態的資料區塊,眾多 Processes 的這些 PCBs 集合有時也稱 Process Table,換言之,table 中每個 entry 就是一個 Process 的 PCB
PCB 包含以下資訊:
- Process ID
- Process State: 即前面的 new, ready, running, waiting 等
- Program counter: 記錄 Process 中下一個 CPU 要執行的指令位址
- CPU 暫存器保存區: 當 process 不在 running state 時,所有 CPU 暫存器的內容皆須保留至此
- 排程相關資訊: 如 priority,排隊佇列等
- 記憶體管理資訊: Base Register, Limit Register, Page table, Segment table 等
- 帳號資訊: 如 process 所屬的 user id、已用掉的 CPU 時間、使用 CPU 的做大時間量等
- I/O 狀態資訊: 尚未完成的 I/O request、已開啟的檔案串列等資訊
0x04 Scheduling and Scheduler
從一群等候執行的程式中挑選出 priority 最高者,賦予處理器的使用權,這一個過程稱為排程 (Scheduling)
一個 Process 的執行時間是一連串 CPU 執行時間和 I/O 等待時間組成
行程集中使用 CPU 計算的這段期間稱為 CPU Burst,行程在等待 I/O 完成的這段期間則稱為 I/O Burst
- CPU Bound Job: 一個程式包含有一些較長的 CPU burst,相對的 I/O burst 較短
- I/O Bound Job: 一個程式包含有一些較長的 I/O burst,相對的 CPU burst 較短
同時載入記憶體的 processes 數量,稱為 Degree of Multiprogramming
Process Scheduling Queue
作業系統在 Process Scheduling Queue 中維護所有的 PCB
- Job queue − This queue keeps all the processes in the system.
- Ready queue – in main memory, ready and waiting to execute
- Device queues – waiting for an I/O device
排班程式 (Scheduler) 的種類
- Long-Term Scheduler: 又稱 Job Scheduler [new → ready]
- 從 Job Queue 中挑選適合的工作,將其載入 Memory 中準備執行
- 通常適用於 Batch System,但不適用於 Time-Sharing System
- 可調控 Multiprogramming Degree
- 可調合 CPU-Bound 與 I/O Bound processes 之混合比例
- 執行頻率最低
- Short-Term Scheduler: 又稱 CPU Scheduler [ready → running]
- 從 Ready Queue 挑選高優先度的 Process,使之獲得 CPU 控制權執行
- Batch System 和 Time-Sharing 均需要
- 執行頻率最高
- 這部分在 CPU Scheduling 章節會在細提
- Medium-Term Scheduler: [virtual memory]
- 當記憶體空間不足,且又有其它 Process 欲進入記憶體執行,此時該 Scheduler 必須挑選某些 Process 將其 Swap Out 到磁碟中以空出記憶體空間,待記憶體有足夠空間再將其 swap in 記憶體中繼續執行
- 通常用在 Time-Sharing System
- 減少 Multiprogramming Degree
- 可調合 I/O Bound 與 CPU Bound 的比例
0x05 Context Switch
當 CPU 的使用權由一個 Process 切換到另一個 Process 這之間的工作即稱為 Context Switch
過程:
- 將舊 Process 的狀態保存至 PCB
- 選擇出新 Process
- 將新 Process 的狀態從 PCB 載入
- 將 CPU 的使用權轉移
Context Switch 所花費的時間是一個成本,可能成為系統效能瓶頸,因為 Context switch 這個過程對系統而言是沒有生產力的
Context Switch 花費的時間和硬體支援有密切關係,若處理器提供多組暫存器給不同 Process 使用,則在 Context switch 過程中只需要切換指向暫存器的指標,加快切換速度