บทที่ 0 · ปูพื้นฐานก่อนเริ่ม
อ่านหน้านี้ก่อน ถ้ายังไม่คล่องเรื่อง CPU / RAM / process / address / เลขฐาน 2 ทุกบทที่เหลือใช้ความรู้จากหน้านี้ ใช้เวลาอ่านประมาณ 20 นาที
0.1 ในคอมพิวเตอร์มีอะไรที่ OS ต้องดูแล
คืออะไร
| ชิ้นส่วน | ทำหน้าที่ | คุณสมบัติที่ต้องจำ |
|---|---|---|
| CPU | ทำงานตามคำสั่งของโปรแกรมทีละคำสั่ง | เร็วมาก แต่ทำได้ทีละงาน (ต่อ 1 core) |
| RAM / main memory (หน่วยความจำหลัก) | ที่วางโปรแกรมและข้อมูลที่กำลังใช้ CPU อ่านจากที่นี่ได้โดยตรง | เร็ว แต่มีขนาดเล็ก และเป็น volatile (ไฟดับแล้วข้อมูลหาย) |
| Disk / secondary storage (หน่วยความจำสำรอง) | เก็บไฟล์และโปรแกรมแบบถาวร | ใหญ่ ถาวร แต่ช้ากว่า RAM มาก CPU อ่านตรงไม่ได้ ต้องโหลดเข้า RAM ก่อน |
| I/O devices | เครื่องพิมพ์, คีย์บอร์ด, จอ, เครือข่าย | หลายอย่างใช้ได้ทีละคน (เช่น เครื่องพิมพ์) |
เปรียบเทียบให้เห็นภาพ: ร้านอาหาร
CPU = พ่อครัว (ทำอาหารทีละจาน) · RAM = เคาน์เตอร์ในครัว (หยิบใช้ได้ทันที แต่ที่น้อย) · Disk = ห้องเก็บของหลังร้าน (เก็บได้เยอะแต่ต้องเดินไปหยิบ) · OS = ผู้จัดการร้าน ที่คอยแบ่งว่าใครใช้เตาเมื่อไร วางของตรงไหนบนเคาน์เตอร์ และเก็บอะไรไว้หลังร้าน
0.2 OS (Operating System) ทำอะไร
คืออะไร
OS คือโปรแกรมที่ดูแลและแบ่งทรัพยากร (CPU, หน่วยความจำ, ไฟล์, อุปกรณ์) ให้หลายโปรแกรมใช้ร่วมกันได้อย่างปลอดภัยและคุ้มค่า ส่วนที่เป็นแกนกลางของ OS เรียกว่า kernel
แต่ละบทของวิชาคือ "ปัญหาการแบ่งทรัพยากร" คนละแบบ
| บท | ปัญหาที่ OS ต้องแก้ |
|---|---|
| 1 Deadlock | หลายโปรแกรมแย่งทรัพยากรกันจนค้างกันหมด |
| 2 Memory | จะวางหลายโปรแกรมใน RAM ตรงไหน และแปลง address อย่างไร |
| 3 Virtual memory | RAM ไม่พอ จะใช้ดิสก์ช่วยและเลือกว่าจะเก็บอะไรไว้ใน RAM อย่างไร |
| 4 Storage | จะจัดพื้นที่บนดิสก์ (ช่องว่าง, การวางไฟล์, ลำดับการอ่าน) อย่างไร |
| 5 File & protection | จะจัดไฟล์และกันไม่ให้คนที่ไม่มีสิทธิ์เข้าถึงอย่างไร |
0.3 Program กับ process และ PCB
คืออะไร
- Program = ไฟล์คำสั่งที่เก็บอยู่บนดิสก์เฉยๆ (เช่น
chrome.exe) - Process = program ที่กำลังทำงาน ถูกโหลดเข้า RAM แล้ว มีสถานะของตัวเอง (เปิด Chrome 2 หน้าต่าง = program เดียว แต่มี 2 process)
- PCB (Process Control Block) = "บัตรประจำตัว" ของ process ที่ OS เก็บไว้ ข้างในมี: สถานะ (ready/running/waiting), program counter (ทำถึงคำสั่งไหนแล้ว), ค่าใน register, ข้อมูลหน่วยความจำ (เช่น base/limit, page table) และไฟล์ที่เปิดอยู่
Context switch ทำงานยังไง
CPU มีตัวเดียวแต่มีหลาย process ต้องสลับกันใช้ ตอนสลับ OS จะ:
เหมือนคั่นหนังสือ: วางเล่มแรกพร้อมคั่นหน้าไว้ หยิบอีกเล่มที่คั่นไว้ขึ้นมาอ่านต่อ (อาจารย์บอกว่าเรื่อง save/load PCB "ถามนิดหน่อย")
0.4 Multiprogramming และ Round Robin (RR)
คืออะไร
- Multiprogramming = มีหลาย process อยู่ในหน่วยความจำพร้อมกัน เพื่อให้ CPU มีงานทำตลอด
- Ready queue = คิวของ process ที่พร้อมรัน รอ CPU
- RR (Round Robin) = แบ่งเวลาให้แต่ละ process ใช้ CPU คนละเท่าๆ กัน เรียกว่า time quantum (เช่น 1 ms) หมดเวลาแล้วไปต่อท้ายคิว วนไปเรื่อยๆ จนทำงานเสร็จ
ตัวอย่าง: RR quantum = 1, P1 ต้องใช้ 2 ms, P2 ต้องใช้ 1 ms
เวลา 0-1: P1 (เหลือ 1) → ไปต่อท้ายคิว เวลา 1-2: P2 (เหลือ 0) → จบที่เวลา 2 เวลา 2-3: P1 (เหลือ 0) → จบที่เวลา 3
ความรู้นี้ใช้ในตัวอย่าง 3.1.ก ของบท Memory
0.5 Address คืออะไร
คืออะไร
หน่วยความจำคือช่องเก็บข้อมูลเรียงต่อกันยาวๆ แต่ละช่องเก็บได้ 1 byte และมี "บ้านเลขที่" ของตัวเอง เรียกว่า address เริ่มจาก 0, 1, 2, … ไปเรื่อยๆ
address : 0 1 2 3 4 5 ... ข้อมูล : [A] [B] [C] [D] [E] [F] ...
หน่วยที่ต้องรู้
- 1 K (KB) = 1024 byte = 210 (ในวิชานี้ "K" คือ 1024 ไม่ใช่ 1000)
- 1 M (MB) = 1024 K = 220
- address ขนาด n บิต → อ้างได้ 2n ช่อง เช่น 16 บิต → 216 = 65,536 ช่อง = 64 K
ทำไมต้องสนใจ
โปรแกรมทุกตัวอ้างข้อมูลด้วย address และ OS ต้องคอยแปลงว่า "address ที่โปรแกรมคิดว่าใช้" ตรงกับ "ช่องจริงใน RAM ช่องไหน" (เรียนในบท Memory และ Virtual memory)
0.6 เลขฐาน 2 ฉบับเร่งรัด (ใช้ใน paging)
ค่าประจำหลัก
2^0=1 2^1=2 2^2=4 2^3=8 2^4=16 2^5=32 2^6=64 2^7=128 2^8=256 2^9=512 2^10=1024
แปลงฐาน 10 → ฐาน 2 (ตัวอย่าง 25)
25 = 16 + 8 + 1 → หลัก 16 8 4 2 1 = 1 1 0 0 1 → 25 = 11001₂
แปลงฐาน 2 → ฐาน 10 (ตัวอย่าง 000110)
000110 = 4 + 2 = 6
เคล็ดลับสำคัญของ paging: หารด้วย 2ⁿ = ตัดบิตขวา n ตัว
ถ้า page size = 2n แล้ว: d (offset) = n บิตขวาสุด และ p (page number) = บิตที่เหลือด้านซ้าย ซึ่งได้ผลเท่ากับการหาร: p = address div 2n และ d = address mod 2n
ตัวอย่าง 1502 (16 บิต), page = 1024 = 2^10
1502 = 0000010111011110
^^^^^^ ^^^^^^^^^^
p = 1 d = 478 (เช็ค: 1×1024 + 478 = 1502 ✓)
0.7 อ่านสัญลักษณ์ในโจทย์ให้เป็น
- div = หารเอาส่วน (ปัดทิ้ง) เช่น 10 div 4 = 2 · mod = เศษ เช่น 10 mod 4 = 2
- เวกเตอร์ (a, b, c) = ตัวเลขหลายช่องคู่กัน ใช้แทนทรัพยากรหลายชนิด เช่น Available = (3, 3, 2) คือ R1 ว่าง 3, R2 ว่าง 3, R3 ว่าง 2
- (1,2,2) ≤ (3,3,2) แปลว่าทุกช่องต้องน้อยกว่าหรือเท่ากัน: 1≤3 ✓, 2≤3 ✓, 2≤2 ✓ → จริง แต่ (6,0,0) ≤ (5,3,2) ไม่จริง เพราะ 6 > 5
- Matrix = ตาราง แถว = process, คอลัมน์ = ชนิดทรัพยากร เช่น Allocation[P2][R1] = 2 คือ P2 ถือ R1 อยู่ 2 ชิ้น
0.8 คำศัพท์: อะไรคืออะไร
เรียงตามบท กด Ctrl+F (หรือ "ค้นหาในหน้า" บน iPad) เพื่อหาคำได้
| คำ | ความหมายแบบง่าย | บท |
|---|---|---|
| Process | โปรแกรมที่กำลังทำงานอยู่ | 0 |
| PCB | บัตรประจำตัว process (สถานะ, PC, register, ข้อมูลหน่วยความจำ) | 0 |
| Context switch | สลับ CPU จาก process หนึ่งไปอีกตัว โดย save/load PCB | 0 |
| Time quantum | เวลาที่ RR แบ่งให้แต่ละ process ต่อรอบ | 0 |
| Resource | ทรัพยากรที่ process ต้องใช้ เช่น memory, CPU, file, เครื่องพิมพ์ | 1 |
| Instance | จำนวนชิ้นของทรัพยากรชนิดเดียวกัน (เครื่องพิมพ์ 3 เครื่อง = 3 instances) | 1 |
| Deadlock | กลุ่ม process รอทรัพยากรที่อีกฝ่ายถือ จนไม่มีใครทำงานต่อได้ | 1 |
| Mutual exclusion | ทรัพยากรใช้ได้ทีละ process | 1 |
| Hold and wait | ถือของไว้แล้วรอของเพิ่ม | 1 |
| No preemption | ยึดทรัพยากรคืนจาก process ไม่ได้ | 1 |
| Circular wait | รอกันเป็นวง P0 → P1 → … → P0 | 1 |
| RAG | Resource-Allocation Graph แผนภาพว่าใครถืออะไร ใครรออะไร | 1 |
| Allocation / Request matrix | ตารางว่าแต่ละ process ถือ / ขอทรัพยากรอะไรกี่ชิ้น | 1 |
| Prevention | ป้องกันโดยทำลายเงื่อนไขข้อใดข้อหนึ่ง | 1 |
| Avoidance | ก่อนให้ทรัพยากร คำนวณก่อนว่ายังปลอดภัย (safe) ไหม | 1 |
| Safe state / sequence | มีลำดับการรันที่ทุก process ทำงานจบได้ | 1 |
| Banker's algorithm | วิธีตรวจ safe state ด้วย Max, Allocation, Need, Available | 1 |
| Detection | ปล่อยให้เกิดแล้วตรวจหาว่ามี deadlock ไหม | 1 |
| Address binding | การกำหนดว่าชื่อในโปรแกรมจะไปอยู่ที่ address จริงตัวไหน | 2 |
| Logical address | address ที่โปรแกรม/CPU อ้าง (เริ่มนับจาก 0 ของโปรแกรมนั้น) | 2 |
| Physical address | ตำแหน่งจริงใน RAM | 2 |
| MMU | ฮาร์ดแวร์ที่แปลง logical → physical | 2 |
| Base / relocation register | เก็บตำแหน่งเริ่มต้นของ process ใน RAM (เอาไปบวก logical) | 2 |
| Limit register | เก็บขนาดของ process ใช้ตรวจว่าอ้างเกินไหม | 2 |
| Dynamic loading | โหลดส่วนของโปรแกรมเฉพาะตอนที่ถูกเรียกใช้ | 2 |
| Static / dynamic linking | รวม library เข้าไฟล์เลย / ลิงก์ตอนรัน | 2 |
| Overlay | ให้ส่วนของโปรแกรมผลัดกันใช้พื้นที่เดียวกัน | 2 |
| Swapping | ย้าย process ออกไปดิสก์ชั่วคราว (swap out) แล้วเอาอีกตัวเข้า (swap in) | 2 |
| Backing store | พื้นที่บนดิสก์ที่ใช้เก็บ process ที่ถูก swap ออก | 2 |
| Partition | ช่วงของหน่วยความจำที่แบ่งให้ process | 2 |
| Hole | ช่วงหน่วยความจำที่ว่าง | 2 |
| First / best / worst fit | วางใน hole แรกที่พอ / เล็กสุดที่พอ / ใหญ่สุด | 2 |
| External fragmentation | ที่ว่างรวมพอ แต่กระจายเป็นชิ้นเล็ก ไม่ติดกัน | 2 |
| Internal fragmentation | ได้พื้นที่เกินที่ขอ ส่วนเกินถูกทิ้งไว้ในก้อนนั้น | 2 |
| Compaction | ย้ายโปรเซสให้ชิดกัน เพื่อรวมที่ว่างเป็นก้อนเดียว | 2 |
| Paging | ตัดโปรแกรมเป็นชิ้นเท่ากัน (page) ลงช่องเท่ากันใน RAM (frame) | 2 |
| Page / Frame | ชิ้นของ logical memory / ช่องของ physical memory (ขนาดเท่ากัน) | 2 |
| Page table | ตารางบอกว่า page ไหนอยู่ frame ไหน | 2 |
| Offset (d) | ตำแหน่งภายใน page / frame | 2 |
| TLB ข้ามได้ | cache เล็กๆ ของ page table ช่วยแปลง address เร็วขึ้น | 2 |
| Segmentation ข้ามได้ | แบ่งโปรแกรมเป็นส่วนตามความหมาย (code, stack, …) ขนาดไม่เท่ากัน | 2 |
| Virtual memory | ทำให้ดูเหมือนมีหน่วยความจำใหญ่กว่า RAM จริง โดยใช้ดิสก์ช่วย | 3 |
| Demand paging | โหลด page เข้า RAM เฉพาะตอนที่ต้องใช้ | 3 |
| Valid–invalid bit | v = page อยู่ใน RAM, i = ไม่อยู่ | 3 |
| Page fault | อ้าง page ที่ไม่อยู่ใน RAM ต้องไปโหลดจากดิสก์ | 3 |
| Reference string | ลำดับเลข page ที่ถูกอ้าง ใช้จำลอง page replacement | 3 |
| Page replacement | เลือกว่าจะเอา page ไหนออกเมื่อ frame เต็ม | 3 |
| FIFO / OPT / LRU / LFU / MFU | เข้าก่อนออกก่อน / ไกลสุดในอนาคต / ไม่ได้ใช้นานสุด / ใช้น้อยครั้งสุด / ใช้มากครั้งสุด | 3 |
| Page fault rate | จำนวน fault ÷ จำนวนครั้งที่อ้าง | 3 |
| Belady's anomaly | เพิ่ม frame แล้ว fault กลับเพิ่ม (เกิดกับ FIFO) | 3 |
| Thrashing ข้ามได้ | สลับ page เข้าออกจนไม่ได้ทำงานจริง | 3 |
| Block | หน่วยพื้นที่บนดิสก์ (ดิสก์แบ่งเป็นบล็อกเท่าๆ กัน) | 4 |
| Free-space management | วิธีจำว่าบล็อกไหนว่าง (bit vector, linked list, grouping, counting) | 4 |
| Allocation method | วิธีวางบล็อกของไฟล์ (contiguous, linked, indexed) | 4 |
| FAT | ตารางเก็บว่าบล็อกถัดไปของแต่ละไฟล์คือบล็อกไหน | 4 |
| Seek / head movement ข้ามได้ | การเลื่อนหัวอ่านไปยัง track ที่ต้องการ | 4 |
| File property | ข้อมูลของไฟล์: ชื่อ, ชนิด, ตำแหน่ง, ขนาด, สิทธิ์, เวลา | 5 |
| Directory | สมุดรายชื่อไฟล์ (โฟลเดอร์) | 5 |
| Absolute / relative path | เส้นทางเริ่มจาก root / เริ่มจากโฟลเดอร์ปัจจุบัน | 5 |
| rwx | สิทธิ์อ่าน (4) เขียน (2) รัน (1) ของ owner / group / others | 5 |
| Domain / access matrix | ชุดสิทธิ์ / ตารางว่าแต่ละ domain ทำอะไรกับ object ไหนได้ | 5 |
| State machine | ระบบที่มีสถานะ และเปลี่ยนสถานะตาม input (transition) | 5 |