การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

ทำความเข้าใจความแตกต่างที่สำคัญระหว่าง Memory-Mapped I/O และ Isolated I/O พร้อมดูว่าแต่ละรูปแบบจัดการการสื่อสารกับอุปกรณ์อย่างไร

การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

CPU จำเป็นต้องสื่อสารกับหน่วยความจำและอุปกรณ์อินพุต/เอาต์พุต (I/O) ต่าง ๆ โดยข้อมูลระหว่างโปรเซสเซอร์กับอุปกรณ์เหล่านี้จะถูกส่งผ่าน System Bus โดยสามารถจัดสรร System Bus ได้ 3 รูปแบบ ดังนี้

  1. ใช้ชุด Address Bus, Control Bus และ Data Bus แยกกันสำหรับ I/O และหน่วยความจำ
  2. ใช้ Data Bus และ Address Bus ร่วมกันสำหรับ I/O และหน่วยความจำ แต่แยกสายสัญญาณควบคุม (Control Lines)
  3. ใช้ Data Bus, Address Bus และ Control Bus ร่วมกันสำหรับ I/O และหน่วยความจำ

ในกรณีแรก การออกแบบจะค่อนข้างง่าย เนื่องจาก I/O และหน่วยความจำมี Address Space และชุดคำสั่ง (Instruction Set) แยกจากกัน แต่ข้อเสียคือจำเป็นต้องใช้บัสจำนวนมากขึ้น

Isolated I/O

ในระบบ Isolated I/O CPU ใช้บัสชุดเดียวกัน (สายสัญญาณ) ในการสื่อสารกับทั้งหน่วยความจำและอุปกรณ์ I/O แต่จะใช้สัญญาณควบคุมแยกกัน เพื่อระบุว่า CPU กำลังติดต่อกับหน่วยความจำหรืออุปกรณ์ I/O

อุปกรณ์ I/O จะมีแอดเดรสเฉพาะที่เรียกว่า พอร์ต (Port)

เมื่อ CPU ต้องการสื่อสารกับอุปกรณ์ I/O จะดำเนินการดังนี้

  • CPU ส่งแอดเดรสของพอร์ตไปยัง Address Bus
  • CPU ใช้สายสัญญาณควบคุมเฉพาะ เช่น I/O Read หรือ I/O Write
  • จากนั้นข้อมูลจะถูกส่งหรือรับผ่าน Data Bus

เนื่องจากหน่วยความจำและ I/O มี Address Space แยกจากกัน จึงเรียกว่า Isolated I/O นอกจากนี้ CPU ยังใช้คำสั่งที่แตกต่างกันสำหรับการเข้าถึงหน่วยความจำและ I/O เช่น คำสั่ง IN และ OUT สำหรับการทำงานกับ I/O

Isolated I/O

การประยุกต์ใช้ Isolated I/O

ระบบ Embedded: Isolated I/O ถูกใช้อย่างแพร่หลายในระบบ Embedded ที่ต้องการแยกการทำงานระหว่าง CPU และอุปกรณ์ต่อพ่วง (Peripherals) อย่างชัดเจน เช่น ระบบควบคุมในภาคอุตสาหกรรม หุ่นยนต์ และอุปกรณ์อิเล็กทรอนิกส์ยานยนต์ การแยกส่วนดังกล่าวช่วยให้ความผิดพลาดหรือการทำงานผิดปกติของอุปกรณ์ต่อพ่วงมีโอกาสส่งผลกระทบต่อเสถียรภาพของระบบโดยรวมน้อยลง

ไมโครคอนโทรลเลอร์: ไมโครคอนโทรลเลอร์มักใช้ Isolated I/O เพื่อเชื่อมต่อกับอุปกรณ์ต่อพ่วงต่าง ๆ เช่น เซนเซอร์ แอคชูเอเตอร์ และจอแสดงผล โดยอุปกรณ์แต่ละตัวจะได้รับการกำหนดพอร์ต I/O ที่ไม่ซ้ำกัน ทำให้ไมโครคอนโทรลเลอร์สามารถสื่อสารกับอุปกรณ์ต่อพ่วงหลายตัวได้อย่างอิสระและมีประสิทธิภาพ

ระบบ Real-Time: ในระบบ Real-Time ที่การกำหนดเวลาที่แม่นยำและการทำงานที่สามารถคาดการณ์ได้เป็นสิ่งสำคัญ Isolated I/O เป็นรูปแบบที่เหมาะสม เนื่องจากช่วยให้สามารถควบคุมเวลาและการซิงโครไนซ์ของเหตุการณ์ภายนอกได้อย่างเคร่งครัด ทำให้ระบบสามารถรักษาประสิทธิภาพการทำงานที่เชื่อถือได้และมีพฤติกรรมที่คาดการณ์ได้

ข้อดีของ 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 จึงมีโอกาสส่งผลกระทบต่อหน่วยความจำหรืออุปกรณ์อื่น ๆ น้อยลง ช่วยเพิ่มความน่าเชื่อถือโดยรวมของระบบ

ข้อเสียของ Isolated I/O

การทำงานของ I/O ช้าลง: การดำเนินการกับ I/O อาจทำได้ช้าลง เนื่องจาก Isolated I/O ต้องใช้คำสั่งเฉพาะ ซึ่งเพิ่มขั้นตอนในการประมวลผล

การเขียนโปรแกรมมีความซับซ้อนมากขึ้น: การเขียนโปรแกรมมีความซับซ้อนมากขึ้น เนื่องจากต้องใช้คำสั่งสำหรับ I/O โดยเฉพาะ เช่น IN และ OUT ซึ่งแยกจากคำสั่งมาตรฐานสำหรับการเข้าถึงหน่วยความจำ

Memory-Mapped I/O

ในระบบ Memory-Mapped I/O จะไม่มีคำสั่งเฉพาะสำหรับการรับหรือส่งข้อมูล I/O แต่ CPU จะใช้คำสั่งเดียวกับที่ใช้ในการเข้าถึงหน่วยความจำ เช่น LOAD และ STORE เพื่อเข้าถึงอุปกรณ์ I/O

  • อุปกรณ์ I/O แต่ละตัวจะได้รับการกำหนดแอดเดรสเฉพาะภายใน Address Space เดียวกับหน่วยความจำ
  • อุปกรณ์จะเชื่อมต่อผ่าน Interface Register ซึ่งทำหน้าที่เสมือนตำแหน่งหนึ่งในหน่วยความจำ
  • เมื่อ CPU ต้องการอ่านหรือเขียนข้อมูลไปยังอุปกรณ์ I/O CPU จะเข้าถึงแอดเดรสที่เกี่ยวข้องในลักษณะเดียวกับการเข้าถึงข้อมูลในหน่วยความจำ
  • Interface Register เหล่านี้จะตอบสนองต่อการดำเนินการอ่าน/เขียนตามปกติ เสมือนว่าเป็นเซลล์หน่วยความจำ

การออกแบบในลักษณะนี้ทำให้สามารถจัดการ I/O และหน่วยความจำในรูปแบบเดียวกัน ช่วยให้การเขียนโปรแกรมและการออกแบบฮาร์ดแวร์ง่ายขึ้น

Memory-Mapped I/O System

การประยุกต์ใช้ Memory-Mapped 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

ข้อดีของ Memory-Mapped I/O

การทำงานของ 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)

ข้อเสียของ Memory-Mapped I/O

พื้นที่แอดเดรสสำหรับ I/O มีจำกัด: เนื่องจากหน่วยความจำและอุปกรณ์ I/O ใช้ Address Space ร่วมกัน จำนวนแอดเดรสที่สามารถจัดสรรให้กับอุปกรณ์ I/O จึงมีจำกัด ซึ่งอาจกลายเป็นข้อจำกัดในระบบที่มีอุปกรณ์ต่อพ่วงจำนวนมาก

อาจเกิดปัญหาด้านประสิทธิภาพ: หากอุปกรณ์ I/O ตอบสนองช้า อาจทำให้ CPU ต้องรอเมื่อเข้าถึงบริเวณหน่วยความจำที่แมปไว้สำหรับอุปกรณ์นั้น ซึ่งอาจส่งผลต่อประสิทธิภาพโดยรวมของระบบ โดยเฉพาะงานที่มีข้อกำหนดด้านเวลาอย่างเข้มงวด

ความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O

มาดูความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O ในตารางด้านล่าง

บทความที่เกี่ยวข้อง

การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

ทำความเข้าใจความแตกต่างที่สำคัญระหว่าง Memory-Mapped I/O และ Isolated I/O พร้อมดูว่าแต่ละรูปแบบจัดการการสื่อสารกับอุปกรณ์อย่างไร

นักเขียนบทความ
by 
นักเขียนบทความ
การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

ทำความเข้าใจความแตกต่างที่สำคัญระหว่าง Memory-Mapped I/O และ Isolated I/O พร้อมดูว่าแต่ละรูปแบบจัดการการสื่อสารกับอุปกรณ์อย่างไร

CPU จำเป็นต้องสื่อสารกับหน่วยความจำและอุปกรณ์อินพุต/เอาต์พุต (I/O) ต่าง ๆ โดยข้อมูลระหว่างโปรเซสเซอร์กับอุปกรณ์เหล่านี้จะถูกส่งผ่าน System Bus โดยสามารถจัดสรร System Bus ได้ 3 รูปแบบ ดังนี้

  1. ใช้ชุด Address Bus, Control Bus และ Data Bus แยกกันสำหรับ I/O และหน่วยความจำ
  2. ใช้ Data Bus และ Address Bus ร่วมกันสำหรับ I/O และหน่วยความจำ แต่แยกสายสัญญาณควบคุม (Control Lines)
  3. ใช้ Data Bus, Address Bus และ Control Bus ร่วมกันสำหรับ I/O และหน่วยความจำ

ในกรณีแรก การออกแบบจะค่อนข้างง่าย เนื่องจาก I/O และหน่วยความจำมี Address Space และชุดคำสั่ง (Instruction Set) แยกจากกัน แต่ข้อเสียคือจำเป็นต้องใช้บัสจำนวนมากขึ้น

Isolated I/O

ในระบบ Isolated I/O CPU ใช้บัสชุดเดียวกัน (สายสัญญาณ) ในการสื่อสารกับทั้งหน่วยความจำและอุปกรณ์ I/O แต่จะใช้สัญญาณควบคุมแยกกัน เพื่อระบุว่า CPU กำลังติดต่อกับหน่วยความจำหรืออุปกรณ์ I/O

อุปกรณ์ I/O จะมีแอดเดรสเฉพาะที่เรียกว่า พอร์ต (Port)

เมื่อ CPU ต้องการสื่อสารกับอุปกรณ์ I/O จะดำเนินการดังนี้

  • CPU ส่งแอดเดรสของพอร์ตไปยัง Address Bus
  • CPU ใช้สายสัญญาณควบคุมเฉพาะ เช่น I/O Read หรือ I/O Write
  • จากนั้นข้อมูลจะถูกส่งหรือรับผ่าน Data Bus

เนื่องจากหน่วยความจำและ I/O มี Address Space แยกจากกัน จึงเรียกว่า Isolated I/O นอกจากนี้ CPU ยังใช้คำสั่งที่แตกต่างกันสำหรับการเข้าถึงหน่วยความจำและ I/O เช่น คำสั่ง IN และ OUT สำหรับการทำงานกับ I/O

Isolated I/O

การประยุกต์ใช้ Isolated I/O

ระบบ Embedded: Isolated I/O ถูกใช้อย่างแพร่หลายในระบบ Embedded ที่ต้องการแยกการทำงานระหว่าง CPU และอุปกรณ์ต่อพ่วง (Peripherals) อย่างชัดเจน เช่น ระบบควบคุมในภาคอุตสาหกรรม หุ่นยนต์ และอุปกรณ์อิเล็กทรอนิกส์ยานยนต์ การแยกส่วนดังกล่าวช่วยให้ความผิดพลาดหรือการทำงานผิดปกติของอุปกรณ์ต่อพ่วงมีโอกาสส่งผลกระทบต่อเสถียรภาพของระบบโดยรวมน้อยลง

ไมโครคอนโทรลเลอร์: ไมโครคอนโทรลเลอร์มักใช้ Isolated I/O เพื่อเชื่อมต่อกับอุปกรณ์ต่อพ่วงต่าง ๆ เช่น เซนเซอร์ แอคชูเอเตอร์ และจอแสดงผล โดยอุปกรณ์แต่ละตัวจะได้รับการกำหนดพอร์ต I/O ที่ไม่ซ้ำกัน ทำให้ไมโครคอนโทรลเลอร์สามารถสื่อสารกับอุปกรณ์ต่อพ่วงหลายตัวได้อย่างอิสระและมีประสิทธิภาพ

ระบบ Real-Time: ในระบบ Real-Time ที่การกำหนดเวลาที่แม่นยำและการทำงานที่สามารถคาดการณ์ได้เป็นสิ่งสำคัญ Isolated I/O เป็นรูปแบบที่เหมาะสม เนื่องจากช่วยให้สามารถควบคุมเวลาและการซิงโครไนซ์ของเหตุการณ์ภายนอกได้อย่างเคร่งครัด ทำให้ระบบสามารถรักษาประสิทธิภาพการทำงานที่เชื่อถือได้และมีพฤติกรรมที่คาดการณ์ได้

ข้อดีของ 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 จึงมีโอกาสส่งผลกระทบต่อหน่วยความจำหรืออุปกรณ์อื่น ๆ น้อยลง ช่วยเพิ่มความน่าเชื่อถือโดยรวมของระบบ

ข้อเสียของ Isolated I/O

การทำงานของ I/O ช้าลง: การดำเนินการกับ I/O อาจทำได้ช้าลง เนื่องจาก Isolated I/O ต้องใช้คำสั่งเฉพาะ ซึ่งเพิ่มขั้นตอนในการประมวลผล

การเขียนโปรแกรมมีความซับซ้อนมากขึ้น: การเขียนโปรแกรมมีความซับซ้อนมากขึ้น เนื่องจากต้องใช้คำสั่งสำหรับ I/O โดยเฉพาะ เช่น IN และ OUT ซึ่งแยกจากคำสั่งมาตรฐานสำหรับการเข้าถึงหน่วยความจำ

Memory-Mapped I/O

ในระบบ Memory-Mapped I/O จะไม่มีคำสั่งเฉพาะสำหรับการรับหรือส่งข้อมูล I/O แต่ CPU จะใช้คำสั่งเดียวกับที่ใช้ในการเข้าถึงหน่วยความจำ เช่น LOAD และ STORE เพื่อเข้าถึงอุปกรณ์ I/O

  • อุปกรณ์ I/O แต่ละตัวจะได้รับการกำหนดแอดเดรสเฉพาะภายใน Address Space เดียวกับหน่วยความจำ
  • อุปกรณ์จะเชื่อมต่อผ่าน Interface Register ซึ่งทำหน้าที่เสมือนตำแหน่งหนึ่งในหน่วยความจำ
  • เมื่อ CPU ต้องการอ่านหรือเขียนข้อมูลไปยังอุปกรณ์ I/O CPU จะเข้าถึงแอดเดรสที่เกี่ยวข้องในลักษณะเดียวกับการเข้าถึงข้อมูลในหน่วยความจำ
  • Interface Register เหล่านี้จะตอบสนองต่อการดำเนินการอ่าน/เขียนตามปกติ เสมือนว่าเป็นเซลล์หน่วยความจำ

การออกแบบในลักษณะนี้ทำให้สามารถจัดการ I/O และหน่วยความจำในรูปแบบเดียวกัน ช่วยให้การเขียนโปรแกรมและการออกแบบฮาร์ดแวร์ง่ายขึ้น

Memory-Mapped I/O System

การประยุกต์ใช้ Memory-Mapped 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

ข้อดีของ Memory-Mapped I/O

การทำงานของ 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)

ข้อเสียของ Memory-Mapped I/O

พื้นที่แอดเดรสสำหรับ I/O มีจำกัด: เนื่องจากหน่วยความจำและอุปกรณ์ I/O ใช้ Address Space ร่วมกัน จำนวนแอดเดรสที่สามารถจัดสรรให้กับอุปกรณ์ I/O จึงมีจำกัด ซึ่งอาจกลายเป็นข้อจำกัดในระบบที่มีอุปกรณ์ต่อพ่วงจำนวนมาก

อาจเกิดปัญหาด้านประสิทธิภาพ: หากอุปกรณ์ I/O ตอบสนองช้า อาจทำให้ CPU ต้องรอเมื่อเข้าถึงบริเวณหน่วยความจำที่แมปไว้สำหรับอุปกรณ์นั้น ซึ่งอาจส่งผลต่อประสิทธิภาพโดยรวมของระบบ โดยเฉพาะงานที่มีข้อกำหนดด้านเวลาอย่างเข้มงวด

ความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O

มาดูความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O ในตารางด้านล่าง

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

การรับส่งข้อมูลแบบ I/O ที่แมปกับหน่วยความจำ และ I/O แบบแยกพื้นที่แอดเดรส

ทำความเข้าใจความแตกต่างที่สำคัญระหว่าง Memory-Mapped I/O และ Isolated I/O พร้อมดูว่าแต่ละรูปแบบจัดการการสื่อสารกับอุปกรณ์อย่างไร

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

CPU จำเป็นต้องสื่อสารกับหน่วยความจำและอุปกรณ์อินพุต/เอาต์พุต (I/O) ต่าง ๆ โดยข้อมูลระหว่างโปรเซสเซอร์กับอุปกรณ์เหล่านี้จะถูกส่งผ่าน System Bus โดยสามารถจัดสรร System Bus ได้ 3 รูปแบบ ดังนี้

  1. ใช้ชุด Address Bus, Control Bus และ Data Bus แยกกันสำหรับ I/O และหน่วยความจำ
  2. ใช้ Data Bus และ Address Bus ร่วมกันสำหรับ I/O และหน่วยความจำ แต่แยกสายสัญญาณควบคุม (Control Lines)
  3. ใช้ Data Bus, Address Bus และ Control Bus ร่วมกันสำหรับ I/O และหน่วยความจำ

ในกรณีแรก การออกแบบจะค่อนข้างง่าย เนื่องจาก I/O และหน่วยความจำมี Address Space และชุดคำสั่ง (Instruction Set) แยกจากกัน แต่ข้อเสียคือจำเป็นต้องใช้บัสจำนวนมากขึ้น

Isolated I/O

ในระบบ Isolated I/O CPU ใช้บัสชุดเดียวกัน (สายสัญญาณ) ในการสื่อสารกับทั้งหน่วยความจำและอุปกรณ์ I/O แต่จะใช้สัญญาณควบคุมแยกกัน เพื่อระบุว่า CPU กำลังติดต่อกับหน่วยความจำหรืออุปกรณ์ I/O

อุปกรณ์ I/O จะมีแอดเดรสเฉพาะที่เรียกว่า พอร์ต (Port)

เมื่อ CPU ต้องการสื่อสารกับอุปกรณ์ I/O จะดำเนินการดังนี้

  • CPU ส่งแอดเดรสของพอร์ตไปยัง Address Bus
  • CPU ใช้สายสัญญาณควบคุมเฉพาะ เช่น I/O Read หรือ I/O Write
  • จากนั้นข้อมูลจะถูกส่งหรือรับผ่าน Data Bus

เนื่องจากหน่วยความจำและ I/O มี Address Space แยกจากกัน จึงเรียกว่า Isolated I/O นอกจากนี้ CPU ยังใช้คำสั่งที่แตกต่างกันสำหรับการเข้าถึงหน่วยความจำและ I/O เช่น คำสั่ง IN และ OUT สำหรับการทำงานกับ I/O

Isolated I/O

การประยุกต์ใช้ Isolated I/O

ระบบ Embedded: Isolated I/O ถูกใช้อย่างแพร่หลายในระบบ Embedded ที่ต้องการแยกการทำงานระหว่าง CPU และอุปกรณ์ต่อพ่วง (Peripherals) อย่างชัดเจน เช่น ระบบควบคุมในภาคอุตสาหกรรม หุ่นยนต์ และอุปกรณ์อิเล็กทรอนิกส์ยานยนต์ การแยกส่วนดังกล่าวช่วยให้ความผิดพลาดหรือการทำงานผิดปกติของอุปกรณ์ต่อพ่วงมีโอกาสส่งผลกระทบต่อเสถียรภาพของระบบโดยรวมน้อยลง

ไมโครคอนโทรลเลอร์: ไมโครคอนโทรลเลอร์มักใช้ Isolated I/O เพื่อเชื่อมต่อกับอุปกรณ์ต่อพ่วงต่าง ๆ เช่น เซนเซอร์ แอคชูเอเตอร์ และจอแสดงผล โดยอุปกรณ์แต่ละตัวจะได้รับการกำหนดพอร์ต I/O ที่ไม่ซ้ำกัน ทำให้ไมโครคอนโทรลเลอร์สามารถสื่อสารกับอุปกรณ์ต่อพ่วงหลายตัวได้อย่างอิสระและมีประสิทธิภาพ

ระบบ Real-Time: ในระบบ Real-Time ที่การกำหนดเวลาที่แม่นยำและการทำงานที่สามารถคาดการณ์ได้เป็นสิ่งสำคัญ Isolated I/O เป็นรูปแบบที่เหมาะสม เนื่องจากช่วยให้สามารถควบคุมเวลาและการซิงโครไนซ์ของเหตุการณ์ภายนอกได้อย่างเคร่งครัด ทำให้ระบบสามารถรักษาประสิทธิภาพการทำงานที่เชื่อถือได้และมีพฤติกรรมที่คาดการณ์ได้

ข้อดีของ 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 จึงมีโอกาสส่งผลกระทบต่อหน่วยความจำหรืออุปกรณ์อื่น ๆ น้อยลง ช่วยเพิ่มความน่าเชื่อถือโดยรวมของระบบ

ข้อเสียของ Isolated I/O

การทำงานของ I/O ช้าลง: การดำเนินการกับ I/O อาจทำได้ช้าลง เนื่องจาก Isolated I/O ต้องใช้คำสั่งเฉพาะ ซึ่งเพิ่มขั้นตอนในการประมวลผล

การเขียนโปรแกรมมีความซับซ้อนมากขึ้น: การเขียนโปรแกรมมีความซับซ้อนมากขึ้น เนื่องจากต้องใช้คำสั่งสำหรับ I/O โดยเฉพาะ เช่น IN และ OUT ซึ่งแยกจากคำสั่งมาตรฐานสำหรับการเข้าถึงหน่วยความจำ

Memory-Mapped I/O

ในระบบ Memory-Mapped I/O จะไม่มีคำสั่งเฉพาะสำหรับการรับหรือส่งข้อมูล I/O แต่ CPU จะใช้คำสั่งเดียวกับที่ใช้ในการเข้าถึงหน่วยความจำ เช่น LOAD และ STORE เพื่อเข้าถึงอุปกรณ์ I/O

  • อุปกรณ์ I/O แต่ละตัวจะได้รับการกำหนดแอดเดรสเฉพาะภายใน Address Space เดียวกับหน่วยความจำ
  • อุปกรณ์จะเชื่อมต่อผ่าน Interface Register ซึ่งทำหน้าที่เสมือนตำแหน่งหนึ่งในหน่วยความจำ
  • เมื่อ CPU ต้องการอ่านหรือเขียนข้อมูลไปยังอุปกรณ์ I/O CPU จะเข้าถึงแอดเดรสที่เกี่ยวข้องในลักษณะเดียวกับการเข้าถึงข้อมูลในหน่วยความจำ
  • Interface Register เหล่านี้จะตอบสนองต่อการดำเนินการอ่าน/เขียนตามปกติ เสมือนว่าเป็นเซลล์หน่วยความจำ

การออกแบบในลักษณะนี้ทำให้สามารถจัดการ I/O และหน่วยความจำในรูปแบบเดียวกัน ช่วยให้การเขียนโปรแกรมและการออกแบบฮาร์ดแวร์ง่ายขึ้น

Memory-Mapped I/O System

การประยุกต์ใช้ Memory-Mapped 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

ข้อดีของ Memory-Mapped I/O

การทำงานของ 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)

ข้อเสียของ Memory-Mapped I/O

พื้นที่แอดเดรสสำหรับ I/O มีจำกัด: เนื่องจากหน่วยความจำและอุปกรณ์ I/O ใช้ Address Space ร่วมกัน จำนวนแอดเดรสที่สามารถจัดสรรให้กับอุปกรณ์ I/O จึงมีจำกัด ซึ่งอาจกลายเป็นข้อจำกัดในระบบที่มีอุปกรณ์ต่อพ่วงจำนวนมาก

อาจเกิดปัญหาด้านประสิทธิภาพ: หากอุปกรณ์ I/O ตอบสนองช้า อาจทำให้ CPU ต้องรอเมื่อเข้าถึงบริเวณหน่วยความจำที่แมปไว้สำหรับอุปกรณ์นั้น ซึ่งอาจส่งผลต่อประสิทธิภาพโดยรวมของระบบ โดยเฉพาะงานที่มีข้อกำหนดด้านเวลาอย่างเข้มงวด

ความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O

มาดูความแตกต่างระหว่าง Memory-Mapped I/O และ Isolated I/O ในตารางด้านล่าง

Related articles