บทที่ 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 memoryRAM ไม่พอ จะใช้ดิสก์ช่วยและเลือกว่าจะเก็บอะไรไว้ใน 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 จะ:

1. หยุด P1→2. save สถานะ P1 ลง PCB ของ P1→3. load สถานะ P2 จาก PCB ของ P2→4. ให้ P2 ทำงานต่อจากเดิม

เหมือนคั่นหนังสือ: วางเล่มแรกพร้อมคั่นหน้าไว้ หยิบอีกเล่มที่คั่นไว้ขึ้นมาอ่านต่อ (อาจารย์บอกว่าเรื่อง 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 ✓)
เกทไหม? ลองตอบ
13 เขียนเป็นฐาน 2 แล้วแปลงกลับ ได้เท่าไร (ตอบ 13 ถ้าเข้าใจว่า 1101 = 8+4+1)
13 = 8 + 4 + 1 = 1101₂
address 12 บิต อ้างได้กี่ช่อง
212 = 4096
address = 40, page size = 16 จงหา p และ d (ตอบเช่น 2,8)
p = 40 div 16 = 2, d = 40 mod 16 = 8

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 PCB0
Time quantumเวลาที่ RR แบ่งให้แต่ละ process ต่อรอบ0
Resourceทรัพยากรที่ process ต้องใช้ เช่น memory, CPU, file, เครื่องพิมพ์1
Instanceจำนวนชิ้นของทรัพยากรชนิดเดียวกัน (เครื่องพิมพ์ 3 เครื่อง = 3 instances)1
Deadlockกลุ่ม process รอทรัพยากรที่อีกฝ่ายถือ จนไม่มีใครทำงานต่อได้1
Mutual exclusionทรัพยากรใช้ได้ทีละ process1
Hold and waitถือของไว้แล้วรอของเพิ่ม1
No preemptionยึดทรัพยากรคืนจาก process ไม่ได้1
Circular waitรอกันเป็นวง P0 → P1 → … → P01
RAGResource-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, Available1
Detectionปล่อยให้เกิดแล้วตรวจหาว่ามี deadlock ไหม1
Address bindingการกำหนดว่าชื่อในโปรแกรมจะไปอยู่ที่ address จริงตัวไหน2
Logical addressaddress ที่โปรแกรม/CPU อ้าง (เริ่มนับจาก 0 ของโปรแกรมนั้น)2
Physical addressตำแหน่งจริงใน RAM2
MMUฮาร์ดแวร์ที่แปลง logical → physical2
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ช่วงของหน่วยความจำที่แบ่งให้ process2
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 / frame2
TLB ข้ามได้cache เล็กๆ ของ page table ช่วยแปลง address เร็วขึ้น2
Segmentation ข้ามได้แบ่งโปรแกรมเป็นส่วนตามความหมาย (code, stack, …) ขนาดไม่เท่ากัน2
Virtual memoryทำให้ดูเหมือนมีหน่วยความจำใหญ่กว่า RAM จริง โดยใช้ดิสก์ช่วย3
Demand pagingโหลด page เข้า RAM เฉพาะตอนที่ต้องใช้3
Valid–invalid bitv = page อยู่ใน RAM, i = ไม่อยู่3
Page faultอ้าง page ที่ไม่อยู่ใน RAM ต้องไปโหลดจากดิสก์3
Reference stringลำดับเลข page ที่ถูกอ้าง ใช้จำลอง page replacement3
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 / others5
Domain / access matrixชุดสิทธิ์ / ตารางว่าแต่ละ domain ทำอะไรกับ object ไหนได้5
State machineระบบที่มีสถานะ และเปลี่ยนสถานะตาม input (transition)5