ทำความเข้าใจความแตกต่างที่สำคัญระหว่าง Memory-Mapped I/O และ Isolated I/O พร้อมดูว่าแต่ละรูปแบบจัดการการสื่อสารกับอุปกรณ์อย่างไร
CPU จำเป็นต้องสื่อสารกับหน่วยความจำและอุปกรณ์อินพุต/เอาต์พุต (I/O) ต่าง ๆ โดยข้อมูลระหว่างโปรเซสเซอร์กับอุปกรณ์เหล่านี้จะถูกส่งผ่าน System Bus โดยสามารถจัดสรร System Bus ได้ 3 รูปแบบ ดังนี้
ในกรณีแรก การออกแบบจะค่อนข้างง่าย เนื่องจาก I/O และหน่วยความจำมี Address Space และชุดคำสั่ง (Instruction Set) แยกจากกัน แต่ข้อเสียคือจำเป็นต้องใช้บัสจำนวนมากขึ้น
ในระบบ Isolated I/O CPU ใช้บัสชุดเดียวกัน (สายสัญญาณ) ในการสื่อสารกับทั้งหน่วยความจำและอุปกรณ์ I/O แต่จะใช้สัญญาณควบคุมแยกกัน เพื่อระบุว่า CPU กำลังติดต่อกับหน่วยความจำหรืออุปกรณ์ I/O
อุปกรณ์ I/O จะมีแอดเดรสเฉพาะที่เรียกว่า พอร์ต (Port)
เมื่อ CPU ต้องการสื่อสารกับอุปกรณ์ I/O จะดำเนินการดังนี้
เนื่องจากหน่วยความจำและ I/O มี Address Space แยกจากกัน จึงเรียกว่า Isolated I/O นอกจากนี้ CPU ยังใช้คำสั่งที่แตกต่างกันสำหรับการเข้าถึงหน่วยความจำและ I/O เช่น คำสั่ง IN และ OUT สำหรับการทำงานกับ I/O
ระบบ Embedded: Isolated I/O ถูกใช้อย่างแพร่หลายในระบบ Embedded ที่ต้องการแยกการทำงานระหว่าง CPU และอุปกรณ์ต่อพ่วง (Peripherals) อย่างชัดเจน เช่น ระบบควบคุมในภาคอุตสาหกรรม หุ่นยนต์ และอุปกรณ์อิเล็กทรอนิกส์ยานยนต์ การแยกส่วนดังกล่าวช่วยให้ความผิดพลาดหรือการทำงานผิดปกติของอุปกรณ์ต่อพ่วงมีโอกาสส่งผลกระทบต่อเสถียรภาพของระบบโดยรวมน้อยลง
ไมโครคอนโทรลเลอร์: ไมโครคอนโทรลเลอร์มักใช้ Isolated I/O เพื่อเชื่อมต่อกับอุปกรณ์ต่อพ่วงต่าง ๆ เช่น เซนเซอร์ แอคชูเอเตอร์ และจอแสดงผล โดยอุปกรณ์แต่ละตัวจะได้รับการกำหนดพอร์ต I/O ที่ไม่ซ้ำกัน ทำให้ไมโครคอนโทรลเลอร์สามารถสื่อสารกับอุปกรณ์ต่อพ่วงหลายตัวได้อย่างอิสระและมีประสิทธิภาพ
ระบบ Real-Time: ในระบบ Real-Time ที่การกำหนดเวลาที่แม่นยำและการทำงานที่สามารถคาดการณ์ได้เป็นสิ่งสำคัญ Isolated I/O เป็นรูปแบบที่เหมาะสม เนื่องจากช่วยให้สามารถควบคุมเวลาและการซิงโครไนซ์ของเหตุการณ์ภายนอกได้อย่างเคร่งครัด ทำให้ระบบสามารถรักษาประสิทธิภาพการทำงานที่เชื่อถือได้และมีพฤติกรรมที่คาดการณ์ได้
มีพื้นที่แอดเดรสสำหรับ I/O ขนาดใหญ่: Isolated I/O ช่วยให้มีพื้นที่แอดเดรสสำหรับ I/O ได้มากขึ้น เนื่องจากอุปกรณ์ I/O มี Address Space แยกเป็นของตัวเองและไม่ขึ้นกับ Address Space ของหน่วยความจำระบบ
มีความยืดหยุ่นมากขึ้น: สามารถเพิ่มหรือนำอุปกรณ์ I/O ออกได้โดยไม่ส่งผลกระทบต่อ Address Space ของหน่วยความจำ
เพิ่มความน่าเชื่อถือของระบบ: เนื่องจากอุปกรณ์ I/O ไม่ได้ใช้ Address Space ร่วมกับหน่วยความจำ ความผิดพลาดของอุปกรณ์ I/O จึงมีโอกาสส่งผลกระทบต่อหน่วยความจำหรืออุปกรณ์อื่น ๆ น้อยลง ช่วยเพิ่มความน่าเชื่อถือโดยรวมของระบบ
การทำงานของ I/O ช้าลง: การดำเนินการกับ I/O อาจทำได้ช้าลง เนื่องจาก Isolated I/O ต้องใช้คำสั่งเฉพาะ ซึ่งเพิ่มขั้นตอนในการประมวลผล
การเขียนโปรแกรมมีความซับซ้อนมากขึ้น: การเขียนโปรแกรมมีความซับซ้อนมากขึ้น เนื่องจากต้องใช้คำสั่งสำหรับ I/O โดยเฉพาะ เช่น IN และ OUT ซึ่งแยกจากคำสั่งมาตรฐานสำหรับการเข้าถึงหน่วยความจำ
ในระบบ Memory-Mapped I/O จะไม่มีคำสั่งเฉพาะสำหรับการรับหรือส่งข้อมูล I/O แต่ CPU จะใช้คำสั่งเดียวกับที่ใช้ในการเข้าถึงหน่วยความจำ เช่น LOAD และ STORE เพื่อเข้าถึงอุปกรณ์ I/O
การออกแบบในลักษณะนี้ทำให้สามารถจัดการ I/O และหน่วยความจำในรูปแบบเดียวกัน ช่วยให้การเขียนโปรแกรมและการออกแบบฮาร์ดแวร์ง่ายขึ้น
การประมวลผลกราฟิก: Memory-Mapped I/O ถูกใช้อย่างแพร่หลายในกราฟิกการ์ดเพื่อให้สามารถเข้าถึง Frame Buffer และ Control Register ได้อย่างรวดเร็ว ข้อมูลกราฟิกจะถูกแมปเข้ากับหน่วยความจำโดยตรง ทำให้ CPU สามารถติดต่อกับฮาร์ดแวร์กราฟิกได้เสมือนกำลังเข้าถึงหน่วยความจำทั่วไป ส่งผลให้การเรนเดอร์และการแสดงผลทำได้อย่างมีประสิทธิภาพ
การสื่อสารผ่านเครือข่าย: Network Interface Card (NIC) มักใช้ Memory-Mapped I/O เพื่อจัดการการถ่ายโอนข้อมูลระหว่างหน่วยความจำระบบกับเครือข่าย Control Register และ Status Register ของ NIC จะถูกแมปไปยังแอดเดรสหน่วยความจำที่กำหนดไว้ ทำให้ CPU สามารถควบคุมและตรวจสอบการทำงานของเครือข่ายได้อย่างมีประสิทธิภาพ
Direct Memory Access (DMA): ตัวควบคุม DMA ใช้ Memory-Mapped I/O เพื่อรองรับการถ่ายโอนข้อมูลความเร็วสูงระหว่างอุปกรณ์ I/O กับหน่วยความจำระบบโดยไม่จำเป็นต้องให้ CPU จัดการทุกขั้นตอน ด้วยการแมปรีจิสเตอร์ควบคุม DMA เข้ากับหน่วยความจำ อุปกรณ์จึงสามารถถ่ายโอนข้อมูลได้โดยตรง ช่วยเพิ่มประสิทธิภาพของระบบและลดภาระการประมวลผลของ CPU
การทำงานของ I/O รวดเร็วขึ้น: Memory-Mapped I/O ช่วยให้ CPU เข้าถึงอุปกรณ์ I/O โดยใช้กลไกเดียวกับการเข้าถึงหน่วยความจำทั่วไป และสามารถทำงานได้ด้วยความเร็วในระดับเดียวกัน ส่งผลให้การทำงานของ I/O รวดเร็วกว่า Isolated I/O
การเขียนโปรแกรมง่ายขึ้น: เนื่องจากใช้คำสั่งชุดเดียวกันสำหรับการเข้าถึงทั้งหน่วยความจำและ I/O การเขียนโปรแกรมจึงง่ายขึ้น นักพัฒนาไม่จำเป็นต้องเรียนรู้หรือใช้คำสั่ง I/O เฉพาะ ทำให้ความซับซ้อนของโปรแกรมลดลง
ใช้ Address Space ได้อย่างมีประสิทธิภาพ: Memory-Mapped I/O ทำให้อุปกรณ์ I/O สามารถใช้ Address Space ร่วมกับหน่วยความจำได้ ซึ่งช่วยให้ระบบใช้ทรัพยากรด้านแอดเดรสได้อย่างมีประสิทธิภาพ โดยเฉพาะระบบที่ใช้โครงสร้างหน่วยความจำแบบรวมเป็นหนึ่งเดียว (Unified Memory Model)
พื้นที่แอดเดรสสำหรับ I/O มีจำกัด: เนื่องจากหน่วยความจำและอุปกรณ์ I/O ใช้ Address Space ร่วมกัน จำนวนแอดเดรสที่สามารถจัดสรรให้กับอุปกรณ์ I/O จึงมีจำกัด ซึ่งอาจกลายเป็นข้อจำกัดในระบบที่มีอุปกรณ์ต่อพ่วงจำนวนมาก
อาจเกิดปัญหาด้านประสิทธิภาพ: หากอุปกรณ์ I/O ตอบสนองช้า อาจทำให้ CPU ต้องรอเมื่อเข้าถึงบริเวณหน่วยความจำที่แมปไว้สำหรับอุปกรณ์นั้น ซึ่งอาจส่งผลต่อประสิทธิภาพโดยรวมของระบบ โดยเฉพาะงานที่มีข้อกำหนดด้านเวลาอย่างเข้มงวด
มาดูความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O ในตารางด้านล่าง