การจัดการอุปกรณ์อินพุตเอาต์พุตในระบบปฏิบัติการ Linux

1. ฮาร์ดแวร์ I/O และอินเทอร์เฟส
อุปกรณ์อินพุตเอาต์พุต (I/O Device) เป็นองค์ประกอบที่ทำให้คอมพิวเตอร์รับข้อมูลจากภายนอก (Input) และส่งข้อมูลออกไปยังภายนอก (Output) ได้ อุปกรณ์ I/O ติดต่อกับเครื่องผ่านอินเทอร์เฟสที่เป็นมาตรฐาน โดยมี Controller เป็นตัวกลางรับคำสั่งจาก CPU และสั่งงานอุปกรณ์จริงตาม Protocol ที่กำหนด
อินเทอร์เฟสที่ใช้บ่อย
อินเทอร์เฟส | ความเร็วสูงสุด | ประเภท | ตัวอย่างอุปกรณ์ |
USB 2.0 | 480 Mbps | Serial | Keyboard, Mouse, Flash drive |
USB 3.2 Gen 2 | 10 Gbps | Serial | External SSD, Webcam |
USB4 / Thunderbolt 4 | 40 Gbps | Serial | External GPU, Docking station |
SATA III | 6 Gbps | Serial | HDD, 2.5" SSD |
NVMe (PCIe Gen 4 ×4) | 64 Gbps | Parallel | M.2 SSD |
PCIe Gen 4 ×16 | 256 Gbps | Serial Lane | GPU, Network card |
Ethernet 1 Gbps | 1 Gbps | Serial | LAN, Internet |
HDMI 2.1 | 48 Gbps | Serial | Display 4K/8K |
ประเภทของอุปกรณ์ I/O แบ่งตามวิธีการเข้าถึงข้อมูล
• Block Device: อ่าน/เขียนข้อมูลเป็นบล็อกขนาดคงที่ (มักเป็น 512 B หรือ 4 KB) เข้าถึงแบบสุ่มได้ เช่น HDD, SSD, USB Flash drive — Linux แสดงเป็นไฟล์ใน /dev/sda, /dev/nvme0n1
• Character Device: อ่าน/เขียนทีละไบต์เรียงตามลำดับ เช่น Keyboard, Mouse, Serial port — Linux แสดงเป็น /dev/tty, /dev/input/event0
• Network Device: ไม่มีไฟล์ใน /dev โดยตรง แต่เข้าถึงผ่าน Socket API เช่น eth0, wlan0
2. วิธีการสื่อสารระหว่าง CPU กับอุปกรณ์ I/O
CPU จำเป็นต้องสื่อสารกับอุปกรณ์ I/O เพื่อรับ-ส่งข้อมูลและคำสั่งควบคุม วิธีการสื่อสารหลักที่ใช้ในระบบปฏิบัติการมี 3 รูปแบบ
(1) Polling
CPU ตรวจสอบสถานะของอุปกรณ์อย่างต่อเนื่องโดยการอ่านค่าจาก Status Register จนกว่าอุปกรณ์จะพร้อม วิธีนี้ใช้งานง่าย เขียนโค้ดสั้น แต่ใช้ CPU เปลือง (Busy Waiting) จึงเหมาะกับ Embedded System ที่มีโพรเซสน้อยและต้องการ Latency ต่ำมาก
(2) Interrupt
อุปกรณ์จะส่งสัญญาณ Interrupt ไปยัง CPU เมื่อพร้อมส่ง/รับข้อมูล CPU จะหยุดงานปัจจุบันชั่วคราว เรียก Interrupt Service Routine (ISR) ของ Driver มาทำงาน จากนั้นกลับไปทำงานเดิม วิธีนี้มีประสิทธิภาพดี เพราะ CPU ทำงานอื่นไปก่อนได้ Linux จัดการ Interrupt ผ่าน /proc/interrupts