การจัดการโพรเซสและการกำหนดเวลาซีพียู (Process Management & CPU Scheduling)

การจัดการโพรเซสและการกำหนดเวลาซีพียู (Process Management & CPU Scheduling)

หลังจากเข้าใจสถาปัตยกรรม OS แล้ว สิ่งต่อไปที่ต้องรู้คือ OS จัดการ "โปรแกรมที่กำลังทำงาน" อย่างไร เมื่อเปิด Chrome, VS Code, Spotify พร้อมกัน 3 ตัว แล้วทำไมมันไม่แย่งกันจนค้าง?

คำตอบคือ Process Management และ CPU Scheduling – กลไกสำคัญที่ทำให้คอมพิวเตอร์ทำ Multitasking ได้

## โพรเซสคืออะไร?

Process = โปรแกรมที่กำลังทำงาน

Program = ไฟล์นิ่ง (.exe, .app)

Process = ไฟล์นั้น + สถานะการทำงานปัจจุบัน

ตัวอย่าง: Chrome.exe ยังไม่ได้เปิด = Program

Chrome.exe ที่เปิดค้างไว้ = Process

(see the generated image above)

## สถานะของโพรเซส (Process States)

โพรเซสแต่ละตัวมี "สถานะ" ที่เปลี่ยนไปตามการทำงาน:

bash
New Ready Running Waiting Terminated

- New: เพิ่งสร้าง รอเข้าแถว

- Ready: รอ CPU อยู่

- Running: กำลังใช้ CPU

- Waiting: รอ I/O (เช่น รอโหลดหน้าเว็บ)

- Terminated: ทำงานเสร็จหรือถูกฆ่า

## PCB (Process Control Block)

OS เก็บข้อมูลโพรเซสทั้งหมดไว้ใน PCB หรือตารางควบคุมโพรเซส:

bash
PID: 1234 State: Running CPU: 15%

Memory: 256MB Priority: High Parent: 1

PCB มีข้อมูลครบ: ID, สถานะ, หน่วยความจำ, CPU ที่ใช้

## CPU Scheduling คืออะไร?

CPU Scheduling = การตัดสินใจว่า "โพรเซสไหนได้ใช้ CPU ก่อน"

เปรียบเทียบ:

bash
ร้านก๋วยเตี๊ยว 1 พ่อครัว ลูกค้าหลายคน

พ่อครัวต้องตัดสินใจเสิร์ฟใครก่อน

(see the generated image above)

## อัลกอริทึมการกำหนดเวลา CPU (Scheduling Algorithms)

### 1. First Come First Served (FCFS)

bash
ใครมาก่อน ได้ก่อน (แบบแถวร้านก๋วยเตี๊ยว)

ข้อดี: ยุติธรรม

ข้อเสีย: โพรเซสยาว ๆ ทำให้คนอื่นรอนาน

### 2. Shortest Job First (SJF)

bash
งานสั้นสุดก่อน (เสิร์ฟน้ำเปล่าก่อนต้มก๋วยเตี๊ยว)

ข้อดี: เวลารอรวมน้อยที่สุด

ข้อเสีย: ไม่รู้ล่วงหน้าว่างานจะนานเท่าไหร่

### 3. Round Robin (RR)

bash
วนกันคนละ 10ms (แบบตีลังกา)

ข้อดี: รับประกันความยุติธรรม

ข้อเสีย: อาจมี Context Switch บ่อย

### 4. Priority Scheduling

bash
VIP ก่อน (คนจ่ายทิปเยอะ)

ข้อดี: สำคัญก่อน

ข้อเสีย: อาจอดตายได้ (Starvation)

## Context Switching คืออะไร?

การสลับโพรเซส ที่ CPU ทำงาน

ขั้นตอน:

bash
1. Save สถานะ Process A (Register, PC)

2. Load สถานะ Process B

3. เริ่ม Process B

ใช้เวลา ~1-10 microseconds

## ตัวชี้วัดประสิทธิภาพ (Performance Metrics)

OS วัดการทำงานด้วยตัวชี้วัดหลัก:

bash
CPU Utilization: %CPU ที่ใช้งาน (เป้าหมาย 40-90%)

Throughput: โพรเซสเสร็จ/หน่วยเวลา

Turnaround Time: เวลารวมตั้งแต่เริ่มจนเสร็จ

Waiting Time: เวลารอ CPU

Response Time: เวลาจนกว่าจะตอบสนอง

## ตัวอย่างการคำนวณ (แบบง่าย)

bash
3 โพรเซส: A(4ms), B(2ms), C(3ms)

ใช้ Round Robin (Time Quantum = 2ms)

A1(2) → B(2) → C1(2) → A2(2) → C2(1)

ผลลัพธ์:

- A: Turnaround = 10ms

- B: Turnaround = 4ms

- C: Turnaround = 7ms

## Multilevel Queue Scheduling

bash
Queue สูง: System Process (Priority สูงสุด)

Queue กลาง: Interactive (User App)

Queue ต่ำ: Batch Job (Print, Backup)

## Thread vs Process

bash
Process = หน่วยงานใหญ่ (มีทรัพยากรเอง)

Thread = พนักงานในหน่วยงาน (แชร์ทรัพยากร)

Multithreading = 1 Process มีหลาย Thread ทำงานพร้อมกัน

ตัวอย่าง: Chrome = 1 Process, แต่มี Thread หลายตัว (Tab แต่ละตัว)

## ปัญหาที่พบบ่อย

### 1. Starvation

โพรเซส Priority ต่ำ รอไม่เคยได้

### 2. Thrashing

สลับโพรเซสบ่อยเกิน RAM รับไม่ไหว

### 3. Deadlock (ติดอยู่ในอนาคต)

โพรเซส A รอ B, B รอ A

## ตัวอย่างในชีวิตจริง

bash
เปิด Discord + Spotify + Chrome (10 Tabs)

 OS สร้าง Process 3 ตัว

 แต่ละตัวมี Thread หลายตัว

 CPU Scheduling วนสลับงาน

 คุณรู้สึก "ลื่น" เพราะ Response Time < 100ms

## สรุปแนวคิดสำคัญ

Process = Program + Execution Context

PCB เก็บข้อมูลทุกอย่าง

Scheduling ตัดสินใจว่าใครได้ CPU

Context Switching ทำให้ multitasking ได้

Round Robin เหมาะกับ Interactive System

บทความถัดไป "การจัดการหน่วยความจำหลัก" จะอธิบายว่า OS แบ่ง RAM ให้แต่ละ Process อย่างไร!

หมายเหตุ: เนื่องจากระบบสร้างภาพไม่พร้อมใช้งานในโซนนี้ แนะนำใช้ไดอะแกรมจาก [Draw.io](https://app.diagrams.net) หรือ Canva สร้างตามโครงที่กำหนดไว้ครับ