E N D
Lecture 6 I/O Organization (ต่อ)
I/O ที่ใช้กลไก Interrupt • ปัญหาของการควบคุม I/O โดยใช้โปรแกรมคือ โปรเซสเซอร์จะต้องใช้เวลารอนานเพื่อให้ I/O Module มีความพร้อมในการรับหรือส่งข้อมูล ในระหว่างที่รอนั้น โปรเซสเซอร์ก็จะต้องคอยตรวจสอบสถานการณ์ทำงานของ I/O Module อยู่ตลอดเวลา ทำให้ประสิทธิภาพโดยรวมของคอมพิวเตอร์ลดลง • วิธีแก้ปัญหา คือ ให้โปรเซสเซอร์ส่งคำสั่ง I/O ไปยัง I/O Module แล้วจึงไปทำงานอื่นที่มีประโยชน์มากกว่าการรอคอย I/O Module จะขัดจังหวะการทำงานของโปรเซสเซอร์เมื่อมีความพร้อมที่จะแลกเปลี่ยนข้อมูล • โปรเซสเซอร์จะเป็นตัวจัดการการถ่ายเทข้อมูลเหมือนเดิม ซึ่งเมื่อทำงานเสร็จแล้วก็จะกลับไปทำงานเดิมก่อนที่จะถูกขัดจังหวะ
กระบวนการ Interrupt • อุปกรณ์ I/O จะส่งสัญญาณอินเทอร์รัพท์ไปยังโปรเซสเซอร์ • โปรเซสเซอร์ทำงานประมวลผลคำสั่งในโปรแกรมที่กำลังทำงานอยู่จนเสร็จเรียบร้อย ก่อนที่จะสนองตอบ interrupt • โปรเซสเซอร์จะทำการทดสอบ interrupt และส่งสัญญาณตอบรับไปยังอุปกรณ์ที่ส่งสัญญาณ interrupt มาการตอบรับจะทำให้อุปกรณ์นั้นหยุดส่งสัญญาณ interrupt • โปรเซสเซอร์จะเตรียมการประมวลผลโปรแกรมสำหรับ interrupt นั้นเรียกว่า interrupt routine ซึ่งเริ่มต้นด้วยการบันทึกข้อมูลที่เกี่ยวข้องกับการประมวลผลโปรแกรมที่กำลังทำงานอยู่ขณะนั้น ประกอบด้วย • สถานการณ์ทำงานของโปรเซสเซอร์ซึ่งเก็บอยู่ในรีจิสเตอร์ตัวหนึ่ง เรียกว่า Program status word(PSW) • ตำแหน่งของคำสั่งต่อไปที่จะถูกประมวลผล ซึ่งเก็บอยู่ที่ PC หรืออาจเก็บอยู่ใน systemtem control stack
กระบวนการ Interrupt 5.โปรเซสเซอร์จะดึงคำสั่งแรกของโปรแกรมสำหรับ interrupt ที่เกิดขึ้น มาทำงานเพื่อตอบสนอง interrupt ในกรณีมีคำสั่ง interrupt มากกว่า 1 โปรแกรม โปรเซสเซอร์จะต้องเลือกโปรแกรมหนึ่งขึ้นมาทำงาน ซึ่งข้อมูลการตัดสินใจนี้ อาจถูกส่งมาพร้อมกับสัญญาณ interrupt แล้วหรือโปรเซสเซอร์อาจจะต้องส่งสัญญาณไปถามอุปกรณ์ จึงจะสามารถเลือกโปรแกรมได้ถูกต้อง 6.ณ เวลานี้ PC และ PSW ได้ถูกบันทึกไว้ในสแต็กของระบบเรียบร้อยแล้ว อย่างไรก็ตามยังมีข้อมูลอื่นที่เป็นส่วนหนึ่งของสถานของโปรแกรมที่กำลังถูกประมวลอยู่ นั่นคือข้อมูลที่เก็บอยู่ในรีจิสเตอร์ภายในตัวโปรเซสเซอร์จะต้องถูกบันทึกไว้เช่นเดียวกัน เนื่องจากรีจิสเตอร์ เหล่านี้อาจถูกใช้โดยโปรแกรมสำหรับ interrupt ดังนั้นข้อมูลในรีจิสเตอร์เหล่านี้จะต้องถูกบันทึกไว้ด้วย
กระบวนการ Interrupt รูปด้านล่างแสดงโปรแกรมของผู้ใช้ถูกขัดจังหวะการทำงานภายหลังจากคำสั่งตำแหน่งที่ N ข้อมูลที่เก็บอยู่รีจิสเตอร์ทั้งหมดและตำแหน่งของคำสั่งที่จะถูกประมวลผลในลำดับต่อไป (N+1) จะถูกเก็บไว้ในสแต็ก ตัวชี้ตำแหน่งของสแต็กจะถูกปรับค่าใหม่ และ PC จะถูกบันทึกตำแหน่งของคำสั่งแรกของโปรแกรมสำหรับ interrupt (b) Return from interrupt (a) Interrupt occurs after instruction at location N
กระบวนการ Interrupt 7.โปรแกรมนี้ก็จะเริ่มทำงานต่อไป ด้วยการตรวจสอบสถานะที่เกี่ยวข้องกับการทำงาน I/O ที่ต้องการ 8. เมื่อโปรแกรม interrupt ทำงานเสร็จแล้ว ก็จะปิดท้ายด้วยการคืนค่าให้กับรีจิสเตอร์ในโปรเซสเซอร์ที่นำมาจากสแต็กของระบบ 9. การทำงานส่วนสุดท้ายคือ การคืนค่าให้แก่ PSW และ PC ที่นำมาจากสแต็กระบบ ทำให้คำสั่งต่อไปที่จะถูกประมวลผลนั้นถูกอ่านมาจากคำสั่งในตำแหน่งต่อไปของโปรแกรมที่ถูกขัดจังหวะการทำงานก่อนหน้านี้
ประเด็นในการออกแบบ • ในการสร้างระบบ I/O ที่ใช้กลไก interrupt นั้นมักเกิดปัญหาหลักสองประการ คือ • เนื่องจากว่าอุปกรณ์ I/O และ I/O Module นั้นมีอยู่เป็นจำนวนมาก โปรเซสเซอร์จะใช้วิธีการใดในการตรวจสอบว่าอุปกรณ์ I/O ใดเป็นตัวที่ส่งสัญญาณอินเทอร์รัพท์ออกมา • ถ้าเกิดมีอินเทอร์รัพท์เกิดขึ้นซ้อนกัน โปรเซสเซอร์จะติดสินใจอย่างไร • โดยทั่วไปมีวิธีการแยกแยะ หรือการแสดงตนของอุปกรณ์ I/O อยู่ 4 วิธี • การใช้สายสัญญาณ interrupt หลายเส้น (Multiple interrupt lines) • การทำซอฟแวร์โพล (Software poll) • การต่อพ่วงอุปกรณ์เรียงตามลำดับหรือ ฮาร์ดแวร์โพล(Hardware poll) • การครอบครองบัส (Bus arbitration)
ประเด็นในการออกแบบ • Multiple interrupt lines : การจัดให้มีสายสัญญาณหลายเส้น วิธีนี้แก้ปัญหาได้เป็นอย่างดี แต่ก็สร้างปัญหาในทางปฏิบัติขึ้นมาคือ ในความเป็นจริงนักออกแบบคอมพิวเตอร์ไม่สามารถจะจัดหาสายสัญญาณมากกว่าสอง – สามเส้น หรือมีขาเชื่อมต่อที่ตัวโปรเซสเซอร์เป็นจำนวนมากกว่าที่เป็นอยู่ปัจจุบันได้ • Software poll : เมื่อโปรเซสเซอร์ตรวจพบสัญญาณ interrupt ก็จะเรียกใช้โปรแกรมสำหรับจัดการ interrupt(general interrupt-service routine) ซึ่งจะทำการสอบถามอุปกรณ์ I/O ทีละตัวเพื่อหาตัวที่เป็นต้นกำเนิดของสัญญาณ interrupt นั้น การสอบถามอาจอยู่ในรูปของคำสั่งเฉพาะ เช่น TESTI/O ในกรณีนี้โปรเซสเซอร์จะส่งสัญญาณ TESTI/O และส่งสัญญาณที่อยู่ของอุปกรณ์ I/O ทีละตัวเข้าไปใน address bus อุปกรณ์ I/O ตัวที่เป็นต้นกำเนิดสัญญาณ interrupt จะตอบรับคำสั่งนี้
ประเด็นในการออกแบบ • Software poll : วิธีการที่เป็นไปได้อีกทางหนึ่ง คือ I/O Module แต่ละตัวจะเก็บรีจิสเตอร์แสดงสถานะที่สามารถกำหนดตำแหน่งที่อยู่ของอุปกรณ์ I/O ได้ โปรเซสเซอร์ก็เพียงแต่อ่านข้อมูลจากรีจิสเตอร์เหล่านี้ ซึ่งจะรู้ต้นกำเนิดของสัญญาณ interrupt ได้ เมื่อทราบตำแหน่งที่แน่ชัดแล้ว โปรเซสเซอร์ก็จะเรียกโปรแกรม interrupt สำหรับอุปกรณ์นั้นมาประมวลผล ข้อด้อย ของวิธีการทำ software poll คือจะต้องเสียเวลาพอสมควรกว่าที่จะทราบตำแหน่งที่อยู่ของอุปกรณ์ I/O ที่ส่งสัญญาณ interrupt มา
ประเด็นในการออกแบบ • Hardware poll : จะทำหน้าที่เสมือนการทำโพลโดยฮาร์ดแวร์ อุปกรณ์ทุกตัวจะใช้สายสัญญาณ interrupt ร่วมกัน สายสัญญาณตอบรับ interrupt จะถูกต่อพ่วงเรียงกันตามลำดับไปยัง I/O Module เมื่อโปรเซสเซอร์ตรวจพบสัญญาณ interrupt ก็จะส่งสัญญาณตอบรับ interrupt ออกมา สัญญาณตอบรับนี้จะถูกส่งผ่านอุปกรณ์ I/O ทีละตัว ตั้งแต่ตัวแรกที่อยู่ลำดับแรกในสายสัญญาณไปจนกระทั่งไปถึงอุปกรณ์ตัวที่ส่งสัญญาณ interrupt ออกมาอุปกรณ์นั้นมักจะตอบรับด้วยการส่งข้อมูลขนาดหนึ่ง word ออกมาใน data bus ข้อมูล word นี้มักถูกเรียกว่า vector ซึ่งจะเป็นตำแหน่งที่อยู่หรือหมายเลขเฉพาะของอุปกรณ์ I/O นั้น โปรเซสเซอร์จะใช้ข้อมูลนี้ในการเรียกโปรแกรม interrupt ของอุปกรณ์ตัวนั้นขึ้นมาประมวลผล เทคนิคนี้หลีกเลี่ยงการเรียกใช้โปรแกรม interrupt อื่น เช่นโปรแกรมที่ถูกเรียกใช้ในตอนเริ่มต้นการทำงานของวิธี Software poll ซึ่งอาจเรียกเทคนิคนี้ว่า “vectored interrupt”
ประเด็นในการออกแบบ • Bus arbitration: การครอบครองบัสนี้ I/O Module จะเริ่มต้นการทำงานด้วยการพยายามยึดครองการใช้งานบัสให้ได้เสียก่อน จากนั้นจึงค่อยส่งสัญญาณ interrupt ออกไป วิธีการนี้ทำให้แน่ใจได้ว่า จะมี I/O Module เพียง Module เดียวเท่านั้นที่จะสามารถส่งสัญญาณ interrupt ออกไปได้ในแต่ละครั้ง เมื่อโปรเซสเซอร์ตรวจพบสัญญาณ interrupt และตอบรับมาทางสายสัญญาณตอบรับ I/O Module ที่เป็นผู้ยึดครองบัสก็จะส่งข้อมูล vector ของตนเองกลับมา
ข้อเสียของ I/O ที่ใช้ interrupt และ I/O ที่ใช้โปรแกรม • การควบคุม I/O โดยกลไก interrupt ยังต้องอาศัยการทำงานของโปรเซสเซอร์ในการถ่ายเทข้อมูลระหว่างหน่วยความจำและ I/O Module นั่นคือข้อมูลทั้งหมดไม่ว่าจะเป็นการอ่านหรือบันทึก จะต้องเดินทางผ่านโปรเซสเซอร์เสมอ ทำให้ เกิดประสิทธิภาพต่ำเนื่องจาก • อัตราการถ่ายเทข้อมูล จะถูกจำกัดโดยความเร็วที่โปรเซสเซอร์สามารถทดสอบและให้บริการแก่อุปกรณ์นั้น ๆ ได้ • โปรเซสเซอร์จะถูกดึงให้มาทำงานในระหว่างการถ่ายเทข้อมูล I/O โปรเซสเซอร์จะต้องการประมวลผลคำสั่งจำนวนหนึ่งสำหรับการถ่ายเทข้อมูล I/O แต่ละครั้ง
การเข้าถึงหน่วยความจำโดยตรง (DMA) • เนื่องจากการ I/O ที่ใช้ interrupt ช่วยให้โปรเซสเซอร์มีเวลาว่างมากขึ้น แต่ก็ทำให้การถ่ายเทข้อมูลใช้เวลานานขึ้นน • ส่วน I/O ที่ใช้โปรแกรมควบคุม จะทำให้ต้องใช้งานโปรเซสเซอร์ 100 เปอร์เซ็นต์ ซึ่งสามารถเคลื่อนย้ายข้อมูลได้ด้วยความเร็วสูง แต่มีข้อเสียคือ โปรเซสเซอร์ไม่สามารถทำงานอื่นได้ ทั้งสองวิธีทำให้เกิดผลเสียต่อการทำงานของโปรเซสเซอร์และอัตราการถ่ายเทข้อมูล ในการถ่ายเทข้อมูลปริมาณมาก วิธีการที่มีประสิทธิภาพมากกว่า เรียกว่า การเข้าถึงหน่วยความจำโดยตรง (Direct Memory Access: DMA) จึงถูกนำมาใช้
ฟังก์ชัน DMA • วิธีการแบบ DMA จะใช้ Module เพิ่มเติมใน system bus โมดูล DMA ดังรูปด้านล่าง มีความสามารถในการเลียนแบบการทำงานของโปรเซสเซอร์ ซึ่งอันที่จริงก็เป็นการดึงการควบคุมการทำงานมาจากโปรเซสเซอร์ เพื่อให้สามารถถ่ายเทข้อมูลในหน่วยความจำหลักผ่าน system bus • Module DMA จะใช้บัสได้เฉพาะในจังหวะที่โปรเซสเซอร์ไม่ต้องการใช้งาน เพื่อไม่ให้ขัดขวางการทำงานของโปรเซสเซอร์ มิฉะนั้นก็จะเป็นการบังคับให้โปรเซสเซอร์หยุดทำงานชั่วคราว วิธีการอาจนี้เรียกว่า การแย่งชิงวงรอบทำงาน (cycle stealing) หรือการแย่งชิงวงรอบการทำงานของบัส (bus cycle)
ฟังก์ชัน DMA • เมื่อโปรเซสเซอร์ต้องการอ่านหรือบันทึกข้อมูลหนึ่งบล็อก คำสั่งจะถูกส่งไปยัง DMA Module ซึ่งประกอบด้วยข้อมูลดังต่อไปนี้ • เป็นการอ่านหรือบันทึกข้อมูล โดยการใช้สายสัญญาณสำหรับการอ่านหรือบันทึกข้อมูลที่เชื่อมต่อระหว่างโปรเซสเซอร์กับ DMA Module • ตำแหน่งที่อยู่ของอุปกรณ์ I/O ที่เกี่ยวข้องจะถูกส่งผ่านทาง data bus • ตำแหน่งเริ่มต้นของหน่วยความจำที่จะอ่านหรือบันทึกข้อมูล จะถูกส่งผ่านสาย data bus หรือถูกจัดเก็บไว้ในรีจิสเตอร์แสดงตำแหน่งที่อยู่ (address register) ภายใน I/O Module • จำนวน word ของข้อมูลที่จะถูกอ่านหรือบันทึก จะถูกส่งผ่านสายสัญญาณข้อมูล (data bus) เช่นเดียวกัน และจัดเก็บไว้ใน data count register
ฟังก์ชัน DMA • จากนั้นโปรเซสเซอร์ก็จะหันไปทำงานอื่น เช่น ทำการประมวลผลโปรแกรมอื่น • เนื่องจากได้โอนการทำงานเกี่ยวกับ I/O มาให้กับ I/O Module แล้ว I/O Module จะถ่ายเทข้อมูลทั้งบล็อกครั้งละหนึ่ง word ไปยังหรือมาจากหน่วยความจำหลัก โดยที่ข้อมูลจะไม่ถูกส่งผ่านโปรเซสเซอร์เลย เมื่อการถ่ายเทข้อมูลเสร็จสิ้นแล้ว DMA Module จึงส่งสัญญาณ interrupt ไปยังโปรเซสเซอร์ จะเห็นได้ว่าโปรเซสเซอร์เข้ามาเกี่ยวข้องเฉพาะตอนเริ่มต้น และตอสิ้นสุดของการทำงาน I/O เท่านั้น
ฟังก์ชัน DMA ไดอะแกรมแบบบล็อก สำหรับ DMA โดย ทั่วไป
ฟังก์ชัน DMA DMA และจุดแยกของสัญญาณ interrupt ในวงรอบคำสั่ง
ฟังก์ชัน DMA • จากรูปด้านบน แสดงให้เห็นวงรอบการทำคำสั่ง (instruction cycle) ที่โปรเซสเซอร์จะถูกบังคับให้หยุดทำงานชั่วคราว ในแต่ละกรณีโปรเซสเซอร์จะถูกบังคับให้หยุดทำงานเมื่อโปรเซสเซอร์ต้องการใช้บัส DMA Module จึงถ่ายเทข้อมูลหนึ่ง word และส่งคืนการควบคุมให้แก่โปรเซสเซอร์ • สังเกตว่าการทำงานนี้ไม่ใช่ interrupt เพราะโปรเซสเซอร์ไม่ต้องทำการบันทึกข้อมูลไว้ในสแต็กของระบบ โปรเซสเซอร์เพียงแค่หยุดการทำงานไปหนึ่งวงรอบคำสั่งเท่านั้น • ผลกระทบที่เกิดขึ้นโดยรวมคือ เป็นการทำให้โปรเซสเซอร์ทำงานช้าลง อย่างไรก็ตาม สำหรับการถ่ายเทข้อมูลหลาย word พร้อมกัน วิธีการนี้จะมีประสิทธิภาพดีกว่า แบบ interrupt และแบบเรียกใช้โปรแกรม
ฟังก์ชัน DMA • กลไก DMA สามารถจัดให้ทำงานได้หลายรูปแบบ เช่น ตัวอย่างแรก Module ทุกตัวใช้บัสหลักร่วมกัน DMA Module ทำหน้าที่เหมือนกับตัวแทนของโปรเซสเซอร์ ใช้การควบคุม I/O ผ่านโปรแกรมควบคุมทำการแลกเปลี่ยนข้อมูลระหว่างหน่วยความจำหลัก และ I/O Module ผ่าน DMA Module การจัดการแบบนี้อาจจะมีค่าใช้จ่ายต่ำ แต่ก็เป็นวิธีที่มีประสิทธิภาพต่ำ เพราะการถ่ายเทข้อมูลแต่ละ word จะเกิดขึ้นในสองวงรอบการทำงาน bus cycle
ฟังก์ชัน DMA • จำนวนวงรองการทำงาน bus cycle สามารถทำให้ลดน้อยลงได้อย่างมาก เมื่อรวมฟังก์ชัน DMA เข้ากับฟังก์ชัน I/O ดังแสดงดังรูป จะมีช่องสื่อสารระหว่าง DMA Module กับ I/O Module อย่างน้อยหนึ่งโมดูลซึ่งแยกต่างหากออกมาจากบัสหลัก การทำงานของ DMA Module อาจกลายเป็นส่วนหนึ่งของ I/O Module หรืออาจะเป็นโมดูลแยกต่างหากที่ควบคุมการทำงาน I/O Module อื่น ๆ แนวทางนี้สามารถขยายความสามารถออกไปได้อีก โดยการเชื่อมต่อ I/O Module เข้ากับ DMA Module ด้วยบัส I/O(I/O bus)
ฟังก์ชัน DMA • การเชื่อมต่อ I/O ใน DMAModule ด้วย I/O bus ดังรูป จะช่วยลดการเชื่อมต่อ I/O ใน DMA Module ลงเหลือเพียงหนึ่งเดียว ในขณะที่ช่วยเพิ่มความสามารถในการขยายขีดความสามารถได้ • สำหรับในกรณีในรูป (b) กับ (c) บัสหลักที่ DMA Module ใช้งานร่วมกับโปรเซสเซอร์และหน่วยความจำนั้น จะถูกใช้โดย DMA Module เพื่อการถ่ายเทข้อมูลกับหน่วยความจำเท่านั้น การแลกเปลี่ยนข้อมูลระหว่าง DMA Module และ I/O Module จะเกิดขึ้นภายนอกบัสหลัก
วิวัฒนาการของฟังก์ชัน I/O • โปรเซสเซอร์ควบคุมการทำงานของอุปกรณ์ต่อพ่วงโดยตรง ซึ่งจะเห็นได้จากอุปกรณ์ที่เรียกว่า microprocessor-controlled devices • หน่วยควบคุมหรือ I/O Module ได้รับการเพิ่มเติมเข้ามาในระบบคอมพิวเตอร์ซีพียูควบคุม I/O โดยใช้โปรแกรมที่ไม่มีอินเทอร์รัพท์เข้ามาช่วย • ขั้นตอนที่สองยังคงถูกนำมาใช้ แต่ได้เพิ่มอินเทอร์รัพท์เข้ามาด้วย ซีพียูไม่ต้องเสียเวลารอคอยการทำงานของ I/O อีกต่อไป ทำให้มีประสิทธิภาพดีขึ้น • I/O Module สามารถติดต่อกับหน่วยความจำได้โดยตรงผ่าน DMA ทำให้สามารถเคลื่อนย้ายบล็อกข้อมูลไปยัง หรือมาจากหน่วยความจำได้ โดยไม่ต้องนำซีพียูเข้ามาเกี่ยวข้อง ยกเว้นตอนเริ่มต้น-สิ้นสุด
วิวัฒนาการของฟังก์ชัน I/O • I/O Module ได้รับการขยายขีดความสามารถ ทำให้กลายเป็นโปรเซสเซอร์เสียเอง ซึ่งมีชุดคำสั่งที่ได้รับการพัฒนาขึ้นมาสำหรับงาน I/O โดยเฉพาะ ซีพียูสั่งการให้โปรเซสเซอร์ I/O ประมวลผลคำสั่ง I/Oprogram ในหน่วยความจำโปรเซสเซอร์ I/O จะดึงและประมวลผลคำสั่งเหล่านี้โดยที่ซีพียูไม่ต้องเข้ามาช่วยเหลือเลย กระบวนการนี้ช่วยให้ซีพียู สามารถออกคำสั่ง I/O เป็นชุดโดยไม่ต้องเข้ามาทำงานใด นอกจากเมื่อคำสั่งทั้งชุดนี้ได้ทำสำเร็จแล้วเท่านั้น • I/O Module มีหน่วยความจำเป็นของตนเอง หรือ I/O Module กลายเป็นคอมพิวเตอร์ขนาดเล็ก ทำให้สามารถประมวลผลงาน I/O ขนาดใหญ่ได้โดยไม่ต้องใช้ซีพียูของคอมพิวเตอร์
วิวัฒนาการของฟังก์ชัน I/O • จะเห็นได้ว่าฟังก์ชัน I/O เป็นจำนวนมากถูกประมวลผลได้โดยไม่ต้องการความช่วยเหลือจากซีพียู ซีพียูจะเป็นอิสระจากงานที่เกี่ยวข้องกับ I/O มากยิ่งขึ้น ทำให้มีประสิทธิภาพการทำงานสูงยิ่งขึ้น โดยเฉพาะในวิวัฒนาการข้อ 5 และ 6 ได้เกิดการเปลี่ยนแปลงขึ้นอย่างมาก เมื่อ I/O Module มีความสามารถในการประมวลผลได้ด้วยตัวเอง • สำหรับในวิวัฒนาการข้อ 5I/O Module จะถูกเรียกว่า ช่องสื่อสาร I/O(I/O channel) • สำหรับวิวัฒนาการข้อ 6 จะเรียกว่าโปรเซสเซอร์ I/O (I/O processor)
คุณลักษณะช่องสื่อสาร I/O • ช่องสื่อสาร I/O (I/O channel) เกิดขึ้นจากการขยายขีดความสามารถของสถาปัตยกรรม DMA • I/O channel มีความสามารถในการประมวลผลคำสั่ง I/O ซึ่งจะถูกควบคุมโดยสมบูรณ์ • ในระบบคอมพิวเตอร์ที่มีอุปกรณ์เช่นนี้ ซีพียูจึงไม่ได้เป็นผู้ประมวลผลคำสั่ง I/O คำสั่ง I/O จะถูกเก็บไว้ในหน่วยความจำเพื่อรอให้โปรเซสเซอร์พิเศษใน I/O channel เป็นผู้ทำการประมวลผล • ซีพียูเพียงแต่ออกคำสั่งกระตุ้นการถ่ายเทข้อมูล I/O ด้วยการสั่งให้ช่องสื่อสาร I/O ทำการประมวลผลคำสั่งในหน่วยความจำ โปรแกรมคำสั่งจะให้รายละเอียดเกี่ยวกับอุปกรณ์ที่เกี่ยวข้อง พื้นที่ในหน่วยความจำที่จะนำมาใช้ในการบันทึกข้อมูล ระดับความสำคัญ และวิธีการตอบสนองต่อข้อผิดพลาดที่อาจเกิดขึ้น
คุณลักษณะช่องสื่อสาร I/O • รูปด้านล่างแสดงวิธีการทำงานสองแบบของช่องสื่อสาร I/O • วิธี Selector channel: ควบคุมอุปกรณ์ความเร็วสูงได้หลายตัว และจะทำการถ่ายทอดข้อมูลจากอุปกรณ์เหล่านี้ครั้งละหนึ่งตัว นั่นคือช่องสื่อสาร I/O จะเลือกอุปกรณ์ขึ้นมาหนึ่งตัว แล้วจึงทำการถ่ายโอนข้อมูล อุปกรณ์แต่ละตัวหรืออุปกรณ์กลุ่มหนึ่งจะถูกควบคุมโดย หน่วยควบคุม(controller) หรือ I/O Module ช่องสื่อสารไอโอจึงเข้ามาควบคุมการทำงานของหน่วยควบคุม I/O แทน ซีพียู
วิวัฒนาการของฟังก์ชัน I/O (a) Selector channel
คุณลักษณะช่องสื่อสาร I/O • วิธี Multiplexer channel: สามารถควบคุมการทำงานของอุปกรณ์หลายตัวได้ในเวลาเดียวกัน สำหรับอุปกรณ์ความเร็วต่ำ จะใช้อุปกรณ์เรียกว่า byte multiplexor เพื่อรับหรือส่งข้อมูลหนึ่งตัวอักษรด้วยความเร็วสูงสุดที่เป็นไปได้ เพื่อทำงานกับอุปกรณ์หลายตัวที่เชื่อมต่ออยู่นั้น เช่น ข้อมูลที่เป็นกลุ่มของตัวอักษรจากอุปกรณ์สามตัวที่ทำงานด้วยความเร็วต่างกัน ดังนั้นกลุ่มข้อมูลสามกลุ่ม คือ A1A2A3A4…, B1B2B3B4…, และ C1C2C3C4… อาจจะถูกรวมกลุ่มกันเป็นลักษณะดังนี้ A1B1C1A2B2C2A3B3C3A4… สำหรับอุปกรณ์ความเร็วสูงจะใช้อุปกรณ์ที่เรียกว่า block multiplexor ทำการสลับตำแหน่งบล็อกข้อมูลจากอุปกรณ์หลายตัว
วิวัฒนาการของฟังก์ชัน I/O (b) Multiplexor channel
ส่วนเชื่อมต่อภายนอก : Firewire • ส่วนเชื่อมต่อกับอุปกรณ์ต่อพ่วงจาก I/O Module จะต้องได้รับการจัดแต่งให้มีความสอดคล้องกับลักษณะการทำงานของอุปกรณ์ต่อพ่วง คุณลักษณะเด่นอย่างหนึ่งของส่วนเชื่อมต่อคือ เป็นการทำงานแบบอนุกรม(serial) หรือแบบขนาน (parallel) • ส่วนเชื่อมต่อแบบขนาน (parallel interface): จะมีสายสัญญาณหลายเส้นเชื่อมต่อระหว่าง I/O Module และอุปกรณ์ต่อพ่วง ทำให้สามารถถ่ายโอนข้อมูลได้ครั้งละหลายบิตพร้อม ๆ กัน ในลักษณะเดียวกันกับที่ทำการส่งข้อมูลทุกบิตของข้อมูลหนึ่ง word ไปยังเป้าหมายผ่าน data bus ภายในเครื่องคอมพิวเตอร์ การเชื่อมต่อแบบนี้ มักจะนำมาใช้เชื่อมต่อกับอุปกรณ์ที่ทำงานได้อย่างรวดเร็ว เช่น Harddisk หรือ Magnetic tape
ส่วนเชื่อมต่อภายนอก : Firewire • ส่วนเชื่อมต่อแบบอนุกรม (serial interface): จะมีสายสัญญาณเพียงเส้นเดียวเท่านั้นที่ใช้สำหรับการถ่ายโอนข้อมูล ซึ่งจะถูกส่งออกไปครั้งละหนึ่งบิตเท่านั้น การเชื่อมต่อแบบนี้มักนำมาใช้เชื่อมต่อกับอุปกรณ์ที่มีความเร็วในการทำงานต่ำ เช่น เครื่องพิมพ์ และจอเทอร์มินอล
ส่วนเชื่อมต่อภายนอก : Firewire • ในการเชื่อต่อทั้งสองแบบ I/OModule จะต้องสื่อสารกับอุปกรณ์ต่อพ่วง โดยทั่วไปการสื่อสารดังกล่าวสำหรับการบันทึกข้อมูล หรือ อ่านข้อมูลมีขั้นตอน ดังนี้ • I/O Module ส่งสัญญาณควบคุม เพื่อร้องขอการส่งข้อมูลไปยังอุปกรณ์ต่อพ่วง • อุปกรณ์ต่อพ่วงจะทำการตอบรับคำร้องขอนั้น • I/O Module ทำการถ่ายโอนข้อมูล • อุปกรณ์ต่อพ่วงส่งสัญญาณตอบรับว่าได้รับข้อมูลเรียบร้อยแล้ว • สิ่งสำคัญสำหรับการทำงานของ I/O Module คือ บัฟเฟอร์ (internal buffer) ที่มีอยู่ภายในอุปกรณ์นั้น ซึ่งใช้ในการเก็บข้อมูลที่จะมีการแลกเปลี่ยนระหว่างอุปกรณ์ต่อพ่วงกับส่วนอื่นของระบบ บัฟเฟอร์ช่วยชดเชยความเร็วในการทำงานที่แตกต่างกันระหว่างบัสหลักกับสายสัญญาณภายนอก
การจัดองค์ประกอบแบบจุด-ต่อ-จุดและแบบหลายจุดการจัดองค์ประกอบแบบจุด-ต่อ-จุดและแบบหลายจุด • แบบจุดต่อจุด (point-to-point): เป็นการนำสายสัญญาณมาใช้เชื่อมต่อระหว่าง I/O Module กับอุปกรณ์ภายนอกเป็นการเฉพาะ โดยไม่ใช้งานร่วมกับอุปกรณ์อื่นใด ในระบบคอมพิวเตอร์ขนาดเล็ก เช่น เครื่องพีซี ได้นำวิธีการเชื่อมต่อแบบจุดต่อจุด มาใช้ในอุปกรณ์หลายชนิด เช่นคีย์บอร์ด เครื่องพิมพ์ และโมเด็มแบบติดตั้งภายนอก เป็นต้น • แบบหลายจุด: กำลังได้รับความนิยมมากยิ่งขึ้น เพื่อนำมาใช้สนับสนุนการทำงานของอุปกรณ์บันทึกข้อมูลปริมาณสูง (harddisk หรือ magnetic tape) และอุปกรณ์สื่อผสม (CD-ROM,DVD,video,audio) ส่วนนี้ทำหน้าที่เสมือนเป็นบัสภายนอก (external bus) ซึ่งมีหน้าที่การทำงานเหมือนกับบัสภายใน ยกตัวอย่างเช่น Firewire Serial bus
FireWire Serial Bus • บัสอนุกรมประสิทธิภาพสูง (FireWire) มีข้อดีเหนือกว่าส่วนติดต่อ I/O แบบเก่าหลายประการ นั่นคือ เป็นระบบที่มีความเร็วสูง ราคาต่ำ และสร้างขึ้นมาใช้งานได้ง่าย ที่จริงแล้วระบบนี้ไม่ได้นำมาใช้งานเฉพาะในระบบคอมพิวเตอร์เท่านั้น แต่ยังสามารถนำไปใช้ในอุปกรณ์ดิจิตอลอื่น ๆ ได้ เช่น กล้องดิจิตอล เครื่องเล่นวิดีโอ และโทรทัศน์ ในระบบเหล่านี้ FireWire ถูกนำมาใช้ในการถ่ายโอนข้อมูล video images ซึ่งมีแหล่งที่มาจากอุปกรณ์ดิจิตอล • วัตถุประสงค์ของระบบ FireWire คือเป็นส่วนติดต่อ I/O แบบเดียวในระบบที่มีส่วนติดต่อแบบง่าย แต่สามารถให้บริการแก่อุปกรณ์จำนวนมากผ่านพอร์ตเดียว ดังนั้น เมาส์ เครื่องพิมพ์เลเซอร์ Harddiskแบบติดตั้งภายนอก สามารถเชื่อมต่อผ่านจุดเชื่อมต่อเพียงจุดเดียว
การจัดโครงสร้าง FireWire • ระบบ FireWire จัดโครงสร้างแบบเรียงตามลำดับ หรือ daisy-chain สามารถเชื่อมต่ออุปกรณ์ได้มากถึง 63 ตัวจากจุดเชื่อมต่อเพียงพอร์ตเดียว นอกจากนั้นบัสของระบบ FireWire ยังสามารถเชื่อมต่อเข้าด้วยกันมากถึง 1022 ระบบโดยใช้สะพานสื่อสาร (bridge) ทำให้ระบบคอมพิวเตอร์สามารถเชื่อมต่อกับอุปกรณ์ต่อพ่วงได้มากเท่าที่ต้องการ • ระบบ FireWire สนับสนุนการเชื่อมต่ออุปกรณ์แบบที่เรียกว่า “hot plugging” นั่นคือผู้ใช้สามารถต่ออุปกรณ์เพิ่มเติม หรือปลดอุปกรณ์บางตัวออกจากสายเชื่อมต่อได้ในทุกเวลาที่ต้องการ โดยไม่จำเป็นจะต้องปิดและเปิดคอมพิวเตอร์เครื่องนั้น • FireWire มีระบบการจัดการอุปกรณ์ได้โดยอัตโนมัติ นั่นคือระบบไม่ต้องกำหนดหมายเลขเฉพาะของอุปกรณ์ทีละตัว หรือไม่ต้องกังวลถึงตำแหน่งของอุปกรณ์ที่ต่ออยู่ในสายเลย ดังแสดงในรูป
การจัดโครงสร้าง FireWire คุณลักษณะที่สำคัญของมาตรฐาน FireWire คือ การกำหนดโปรโตคอล (protocal) ควบคุมการทำงานไว้เป็นสามระดับ (layer) เพื่อให้เครื่องคอมพิว เตอร์ติดต่อกับอุปกรณ์ต่อพ่วง ผ่านทางสายสัญญาณอนุกรม รูปด้านล่านแสดงโครงสร้าง ของโปรโตคอลทั้งสามระดับ
โครงสร้าง protocal ของระบบ FireWire
โครงสร้าง protocal ของระบบ FireWire • Phiysical Layer: ชั้นสื่อสารกายภาพของระบบ FireWire กำหนดทางเลือกต่าง ๆ ของการนำสายสัญญาณมาใช้งานรวมทั้งลักษณะของหัวต่อ(connector) ที่มีคุณสมบัติทางกายภาพและการถ่ายทอดสัญญาณต่างกัน อัตราความเร็วในการส่งข้อมูลอยู่ระหว่าง 25 ถึง 400 Mbsp ชั้นสื่อสารกายภาพเปลี่ยนข้อมูล ให้กลายเป็นสัญญาณไฟฟ้าที่เหมาะสมกับสื่อชนิดที่เลือกชั้นสื่อสารนี้ยังได้ให้บริการในการยึดครองบัสเพื่อรับประกันว่าในเวลาใด ๆ ก็ตาม จะมีอุปกรณ์เพียงตัวเดียวเท่านั้นที่กำลังส่งสัญญาณอยู่
โครงสร้าง protocal ของระบบ FireWire • Link Layer : ชั้นสื่อสารการเชื่อมต่อ กำหนดวิธีการถ่ายเทข้อมูลในรูปแบบแพ็กเกต ซึ่งเป็นไปได้สองแบบ คือ • Asynchronous: ใช้ในการส่งข้อมูลที่มีปริมาณที่ไม่แน่นอนพร้อมกับข้อมูลในชั้นสื่อสารอีกจำนวนหลายไบต์ ข้อมูลจะถูกส่งออกไปในลักษณะของแพ็กเกตไปยังตำแหน่งที่อยู่เฉพาะแห่งหนึ่ง ซึ่งจะได้รับข้อมูลตอบรับ(achnowledgement) กลับมา • Isochronous: ใช้ในการส่งข้อมูลปริมาณไม่แน่นอนในรูปแบบของลำดับของแพ็กเกต ที่มีขนาดคงที่ ที่ถูกส่งออกไปในช่วงเวลาที่คงที่ วิธีการนี้ใช้ในกรณีที่ไม่ต้องการกำหนดตำแหน่งที่อยู่ของผู้รับ และไม่ต้องการข้อมูลตอบรับ
การถ่ายเทข้อมูลแบบอะซิงโครนัส(asynchronous transmission) • การถ่ายเทข้อมูลแบบอะซิงโครนัส กระบวนการส่งข้อมูลหนึ่งแพ็กเกตเรียกว่า subaction ประกอบด้วยห้าช่วงเวลาทำงาน ดังนี้ • Arbitration sequence: เป็นการแลกเปลี่ยนสัญญาณ เพื่อกำหนดสิทธิควบคุมการใช้บัส • Packet transmission: ทุกแพ็กเกตจะมีข้อมูลส่วนหัว(header) ซึ่งประกอบด้วยหมายเลขเฉพาะของผู้ส่งและผู้รับ นอกจากนี้ก็ยังมีข้อมูลเกี่ยวกับชนิดของแพ็กเกตข้อมูล การตรวจสอบความถูกต้องและแก้ไขข้อผิดพลาด และข้อมูลเฉพาะสำหรับแพ็กเกตนั้น ๆ • Acknowledgement gap: ช่วยเวลาหน่วงสำหรับผู้รับที่จะได้รับข้อมูล แปลความหมาย และจัดการส่งข้อมูลตอบรับกลังไปยังผู้ส่ง
การถ่ายเทข้อมูลแบบอะซิงโครนัส(asynchronous transmission) • Acknowledgement : ผู้ที่รับแพ็กเกตข้อมูลจะส่งแพ็กเกตตอบรับ พร้อมด้วยรหัสการทำงานที่บอกให้ทราบว่าผู้รับได้ทำสิ่งใดลงไป • Subaction gap: หมายถึง ช่วงเวลาว่างที่มีไว้เพื่อให้แน่ใจว่าโหนดอื่น ๆ จะไม่เริ่มกระบวนการยึดครองบัสก่อนที่แพ็กเกตตอบรับจะถูกส่งกลับมา เมื่อแพ็กเกตตอบรับถูกส่งออกมา โหนดที่ทำการส่งแพ็กเกตนั้นจะเป็นผู้ที่กำลังควบคุม บัสอยู่ ดังนั้น ถ้าการแลกเปลี่ยนข้อมูลเป็นการกระทำในลักษณะคำร้องขอและการตอบ สนองระหว่างสองโหนดนั้น โหนดตอบรับจะสามารถส่งแพ็กเกตตอบรับออกมาได้ ในทันที โดยไม่ต้องผ่านกระบวนการแย่งชิงบัส แสดงดังรูปด้านล่าง
การถ่ายเทข้อมูลแบบอะซิงโครนัส(asynchronous transmission)
การใช้งานร่วมกันของ asynchronous และ Isochronous • การนำ asynchronous และ isochronous มาใช้งานร่วมกันจะต้องกำหนดให้โหนดหนึ่งทำหน้าที่เป็น cycle master ในทุก ๆ ช่วงเวลาที่กำหนด cycle master จะส่งแพ็กเกต cycle-start ออกมา แพ็กเกตนี้จะบอกให้ทุกโหนดทราบว่าวงรอบ isochronous ได้เริ่มขึ้นแล้ว ในวงรอบนี้โหลดที่ทำงานแบบ isochronous เท่านั้นจะสามารถส่งแพ็กเกตข้อมูลออกมาได้
การส่งข้อมูลแบบ Isochronous • สำหรับอุปกรณ์ที่มักจะสร้างข้อมูลออกมา หรือมักจะนำข้อมูลไปใช้อยู่เสมอ เช่น การ์ดเสียง หรือการ์ดวิดีโอ ก็จะใช้วิธีส่งข้อมูลแบบ isochronous วิธีการนี้รับประกันว่าข้อมูลจะถูกส่งภายในระยะเวลาที่กำหนด และด้วยอัตราความเร็วที่ต้องการ • จากรูป (c) แต่ละ isochronous node จะผลัดกันครอบครองและใช้งานบัส โหนดใดที่ได้สิทธิก็จะส่งแพ็กเกตข้อมูลออกมาทันที ซึ่งจะเป็นแพ็กเก็ตที่ไม่ต้องการแพ็กเกตตอบรับ ทำให้ isochronous โหนดต่อไปสามารถครอบครองบัส และส่งแพ็คเกตออกมาได้อย่างต่อเนื่อง ทำให้เกิดช่องว่างระหว่างแพ็กเกตน้อยมาก ซึ่งช่องว่างเป็นองค์ประกอบหลักของระยะเวลาหน่วงในระบบ ซึ่งเรียกว่าisochronous gap และมีค่าน้อยกว่า subaction gap
การส่งข้อมูลแบบ Isochronous • หลังจากที่ isochronous node ทำการส่งข้อมูลหมดแล้ว บัสจะยังคงว่างอยู่อย่างน้อยก็จนกว่า subaction gap จะเกิดขึ้น ช่องว่างนี้จะเป็นเสมือนสัญญาณที่บอกให้โหนดที่ทำงานแบบ asynchornous ได้ทราบว่าโหนดเหล่านี้สามารถเริ่มต้นแข่งขันแย่งชิงบัสได้แล้ว aysnchornousnode จะสามารถทำงานต่อไปได้เรื่อย ๆ จนกว่าจะถึงวงรอบใหม่ของ isochronous • isochronous แพ็กเกตจะมีข้อมูลเสมือนป้ายชื่อขนาด 8 บิต เพื่อใช้บอกหมายเลขช่องสื่อสารที่ต้องการ ซึ่งนำมาจากการต่อรองระหว่างโหนดสองโหนดที่ต้องการแลกเปลี่ยน isochronous แพ็กเกตระหว่างกัน ข้อมูลส่วนหัวของ isochronous แพ็กเกต มีขนาดสั้นกว่าข้อมูลส่วนหัวของ asynchronous แพ็กเกต ซึ่งจะบอกให้ทราบถึงขนาดข้อมูลและข้อมูลที่ใช้ในการตรวจสอบและแก้ไขข้อมูล