Chapter 7 Input/Output I/O Module Communication between the peripheral and the bus
I/O Module ในการที่หน่วยประมวลผลกลาง (Central Processing Unit) หรือหน่วยความจำหลัก (Main Memory) จะติดต่อสื่อสารกับอุปกรณ์อินพุต/เอ้าท์พุตซึ่งบางทีก็เรียกเป็นอุปกรณ์ภายนอก (Peripheral Devices) เช่น แป้นพิมพ์ จอภาพ เมาส์ เครื่องพิมพ์ โมเด็ม สแกนเนอร์ เป็นต้น จะไม่สามารถติดต่อกันได้โดยตรง แต่จะต้องมีตัวกลางคือหน่วย I/O Module สำหรับทำงานติดต่อและโยกย้ายหรือถ่าย (transfer)
I/O Module
Wide variety of peripherals (หลากหลายชนิดของอุปกรณ์) Input/Output Problems (สาเหตุที่หน่วยประมวลผลกลางและหน่วยความจำหลักไม่สามารถที่จะติดต่อสื่อสารกับอุปกรณ์ภายนอกได้โดยตรงเนื่องจาก) Wide variety of peripherals (หลากหลายชนิดของอุปกรณ์) Delivering different amounts of data ในด้านรูปแบบของข้อมูล (data format) และขนาดของคำของข้อมูล (word length) สำหรับแต่ละอุปกรณ์ก็ไม่เหมือนกัน In different formats อุปกรณ์ภายนอกแต่ละอุปกรณ์ก็มีรูปแบบในการติดต่อ ควบคุมการสื่อสารที่ไม่เหมือนกัน All slower than CPU and RAM ความเร็วในการถ่ายข้อมูลของอุปกรณ์ภายนอกจะช้ากว่าความเร็วของหน่วยประมวลผลกลางและหน่วยความจำหลัก Need I/O modules จึงจำเป็นต้องการ i/o module เพื่อจัดการ
Input/Output Module Interface to CPU and Memory Interface to one or more peripherals
Generic Model of I/O Module
External Devices(เราจำแนกอุปกรณ์ภายนอก เป็น 3 อย่าง) Human readable - สำหรับการติดต่อกับผู้ใช้คอมพิวเตอร์ เช่น Screen, printer, keyboard Machine readable - สำหรับติดต่อกับ equipment เช่น Monitoring and control, magnetic disk, tape , sensor Communication - สำหรับติดต่อกับอุปกรณ์ระยะไกล(Remote Device) Modem Network Interface Card (NIC)
External Device Block Diagram
Typical I/O Data Rates
I/O Module Function หน้าที่ของ I/O Module Control & Timing CPU Communication Device Communication Data Buffering Error Detection
I/O Steps CPU checks I/O module device status I/O module returns status If ready, CPU requests data transfer I/O module gets data from device I/O module transfers data to CPU
I/O Module Diagram โครงสร้างของ I/O Module I/O Module นี้บางที่ก็เรียกเป็น I/O Controller หรือ Device Controller ก็ได้ และในปัจจุบันมีการบรรจุวงจรทั้งหมดลงในไอซีที่เรียกว่า Programmable Peripheral Interface เพื่อที่จะให้ I/O Module สามารถทำงานเป็นตัวต่อเชื่อมระหว่างคอมพิวเตอร์กับอุปกรณ์ภายนอกได้ดี ภายในของ I/O Module ควรจะประกอบด้วยส่วนประกอบสำคัญต่างๆดังแสดงในรูปถัดไป
I/O Module Diagram
I/O Module Diagram โดยในการติดต่อ CPU จะ - ส่ง Address Lines ระบุอุปกรณ์ที่ต้องการ - ส่งสัญญาณควบคุมผ่าน Control Lines ไปสั่งให้ Control Logic รับข้อมูล Status บอกสถานะของอุปกรณ์ที่ต้องการมาวางไว้ใน Status/Control Register เพื่อให้ CPU ตรวจดูสถานะของอุปกรณ์ ถ้าอุปกรณ์พร้อม CPU ก็จะส่งสัญญาณสั่ง read หรือ write ข้อมูลผ่าน Data Register และ Data Lines
Input Output Techniques(เทคนิคในการจัดการกับอุปกรณ์ Input output) Programmed Interrupt driven Direct Memory Access (DMA)
Programmed I/O Programmed I/O ทำการควบคุมการติดต่ออุปกรณ์ภายนอกด้วยการให้ CPU ทำงานไปตามขั้นตอนในโปรแกรมที่สร้างไว้ โดยในโปรแกรมจะประกอบด้วยชุดคำสั่งสำหรับทำงาน 4 อย่างคือ 1. control สำหรับสั่งงานอุปกรณ์ภายนอกให้ทำงานตามที่ต้องการ 2. test สั่งให้ CPU ทำการทดสอบสถานะของ I/O Module และ อุปกรณ์ภายนอก 3. read สั่งให้ I/O Module รับข้อมูลที่ป้อนเข้ามาจากอุปกรณ์ภายนอกเข้ามาวางไว้ใน buffer แล้วส่งต่อให้ CPU หรือหน่วยความจำผ่าน Data Bus 4. write สั่งให้ I/O Module รับข้อมูลไปจาก Data Bus และส่งออกไปให้แก่อุปกรณ์ภายนอก
Programmed I/O
Programmed I/O การควบคุมการติดต่อกับอุปกรณ์ภายนอกแบบนี้มีข้อเสียที่สำคัญคือในระหว่างการรันโปรแกรมทั่วๆไปตามปกติ CPU จะต้องคอยแบ่งเวลามาตรวจสอบว่าอุปกรณ์อินพุตที่สำคัญเช่นแป้นพิมพ์หรือเมาส์มีการกดป้อนข้อมูลเข้ามาหรือไม่อยู่เป็นครั้งคราวตลอดเวลา (polling) มิฉะนั้นก็จะไม่ทราบและไม่ได้ตอบสนองต่ออุปกรณ์อินพุตเหล่านี้ทำให้ได้ผลการรันโปรแกรมไม่สมบูรณ์ แต่ก็มีผลทำให้การรันโปรแกรมช้าลงกว่าที่ควรจะเป็น
Interrupt Driven I/O Interrupt-Driven I/O เพื่อแก้ปัญหาของระบบการควบคุมการติดต่อกับอุปกรณ์อินพุตแบบ Programmed I/O จึงมีการออกแบบให้ไอซีของ CPU มีขั้วสาย Interrupt สำหรับต่อกับอุปกรณ์อินพุตต่างๆ วิธีการนี้จะคล้ายๆ แบบ Programmed I/O เพียงแต่จะมีการ interupt เข้ามาเกี่ยวข้อง ซึ่งจะเป็นการช่วยเพิ่มความเร็วให้ระบบคอมพิวเตอร์ วิธีนี้ Programmed I/O ไม่ต้องรอ เวลาในการติดต่อกับ I/O แต่จะทำกระบวนการใน CPU ไปเรื่อยๆ จนกว่าจะมีสัญญาณ Interupt จาก I/O Module ว่าตอนนี้ Ok แล้ว ถึงจะไปติดต่อกับ I/O ต่อจนทำเสร็จ
โดยเมื่ออุปกรณ์เหล่านั้นมีข้อมูลต้องการจะส่งให้แก่ CPU ก็จะส่งสัญญาณ Interrupt มาที่ขั้วสายนี้พร้อมกับส่งหมายเลขประจำอุปกรณ์มาทางแอดเดรสบัส เป็นการแจ้งให้ CPU ทราบว่าในขณะนั้นอุปกรณ์นั้นๆมีข้อมูลที่จะส่งให้แก่ CPU หรือกล่าวอีกอย่างหนึ่งว่าเป็นการขอใช้บริการจาก CPU ซึ่ง CPU ก็จะทราบว่าอุปกรณ์ใดขอใช้บริการมาก็จะหยุดการรันโปรแกรมที่กำลังรันอยู่เพื่อไปรันโปรแกรมย่อยที่เขียนไว้ และเมื่อเสร็จสิ้นการให้บริการอุปกรณ์นั้นๆแล้วจึงกลับมาทำโปรแกรมเดิมต่อไป ดังขั้นตอนการทำงาน
Interrupt Driven I/O จะเห็นว่าด้วยวิธีการ Interrupt-Driven I/O นี้ CPU ไม่ต้องเสียเวลามาคอยตรวจดูสถานะของอุปกรณ์อินพุตต่างๆอยู่เสมอๆในระหว่างการรัน Main Program ต่อเมื่อมีสัญญาณอินเตอร์รัพท์เข้ามาเท่านั้นซึ่ง CPU ก็จะหยุดการรัน Main Program เพื่อไปรันโปรแกรมย่อยให้บริการอุปกรณ์นั้นๆ เมื่อเสร็จแล้วจึงกลับไปรัน Main program ต่อไป จึงมีผลทำให้ได้ความเร็วในการรัน Main Program สูงขึ้น
Interrupt Driven I/O Basic Operation CPU issues read command I/O module gets data from peripheral while CPU does other work I/O module interrupts CPU CPU requests data I/O module transfers data
Multiple Interrupts Each interrupt line has a priority Higher priority lines can interrupt lower priority lines If bus mastering only current master can interrupt
82C59A Interrupt Controller โดยปกติ cpu จะมี interupt 1 ขา ถ้ามีการ interupt เข้ามาพร้อมๆ กันวิธีแก้ก็คือต่อวงจรตามรูป ซึ่งจะเป็นการใช้ IC 82C59A เป็นตัวจัดการ การ Interupt
Intel 82C55A Programmable Peripheral Interface 82C55A คือตัว I/O Module นั่นเอง
Using 82C55A To Control Keyboard/Display
Direct Memory Access(DMA) เป็นการติดต่อระหว่าง I/O กับ Memory โดยตรง โดยไม่ผ่าน CPU จะเป็นการเพิ่มความเร็วของระบบในการย้ายข้อมูลเข้าออกจากหน่วยความจำโดยไม่รบกวน CPU (แต่จริงๆ แล้วก็รบกวนอยู่บ้าง) จะมี DMA Module เป็นตัวจัดการการรับส่งข้อมูลระหว่างอุปกรณ์ When transfer is complete, the DMA module sends an interrupt signal to the CPU
DMA Function Additional Module (hardware) on bus จะเพิ่ม Module เข้าไปในระบบเพื่อให้ติดต่อกันได้เร็วยิ่งขึ้น DMA controller takes over from CPU for I/O คือ DMA Controller หรือ DMA Module จะจัดการการส่งข้อมูลระหว่าง I/O
DMA Module Diagram (IC ที่ทำหน้าที่ DMA คือ 8237A)
CPU tells DMA controller:- DMA Operation CPU tells DMA controller:- Read/Write Device address Starting address of memory block for data Amount of data to be transferred CPU carries on with other work DMA controller deals with transfer DMA controller sends interrupt when finished
DMA Configurations (1) Single Bus, Detached DMA controller ถ้า I/O ติดต่อกับ Memory จะทำให้ CPU ใช้ bus ไม่ได้
DMA Configurations (2) Single Bus, Integrated DMA controller Controller may support >1 device Each transfer uses bus once DMA to memory
DMA Configurations (3) Separate I/O Bus สามารถอ่านข้อมูลจาก CPU Mem พร้อมๆ กับ Mem I/O Bus supports all DMA enabled devices Each transfer uses bus once DMA to memory
I/O Channels and Processor จะมี I/O processor เป็นตัวประมวลผล ถ้า I/O Module ต้องการติดต่อกับ CPU แต่จะมี I/O Processor เป็นตัวจัดการไม่ให้ I/O Module ไปติดต่อกับ CPU แต่ให้ติดต่อกับ I/O Processor เอง จะไม่ยุ่งกับ CPU ซึ่งจะทำให้ CPU ทำงานของตัวเองได้เรื่อยๆ ตัวอย่างของเทคนิคแบบนี้ เช่น 3D graphics cards VGA AGP Card ที่มีหน่วยประมวลผลของตัวเอง
I/O Channel Architecture