วันพุธ, กันยายน 13, 2549

หน้าที่และส่วนประกอบภายใน

หน้าที่และส่วนประกอบภายใน
อุปกรณ์ Input/ Output
เป็นส่วนที่เป็น Hardwre ที่สำคัญที่ทุกระบบคอมพิวเตอร์จำเป็นต้องมีเพื่อรับข้อมูลเข้าสู่ระบบและแสดงผลลัพธ์ให้ผู้ใช้มองเห็น
อุปกรณ์ที่ทำหน้าที่รับข้อมูลเข้าระบบคอมพิวเตอร์ เรียกว่า “Input device” อุปกรณ์ที่ทำหน้าที่แสดงผลลัพธ์ของระบบคอมพิวเตอร์ เรียกว่า “Output device”
อุปกรณ์ที่ทำหน้าที่เป็นตัวเชื่อมระหว่าง Inptut/Output device กับ CPU คือ “I/O Module”
เมื่อคอมพิวเตอร์จะแก้ปัญหาใดๆ ได้จำเป็นต้องมีโปรแกรมและข้อมูลป้อนเข้าสู่เครื่องคอมพิวเตอร์และหลังจากที่คอมพิวเตอร์ทำงานจนกระทั้งได้คำตอบแล้ว คอมพิวเตอร์จะส่งผลลัพธ์ให้ผู้ใช้โปรแกรมนั้นๆ รับหรือส่งข้อมูลผ่านหน่วยอินพุต/เอาต์พุต(Input/Output Unit) หรือเรียกสั้นว่า I/O
เมื่อ CPU จะมีการ รับ-ส่ง ข้อมูลให้กับอุปกรณ์ (I/O device) ต่างๆนั้น CPU จะต้องอ้าง Address ของอุปกรณต่างๆเหล่านั้น และการนี้ CPU จะต้องคอบควบอุปกรณ์เหล่านั้นอยู่ตลอดเวลา ก็จะทำให้เสียเวลา ซึ่ง CPU เองก็จะต้องทำงานอย่างอื่นอีกมากมาย ดังนั้นเมื่อ CPU ต้องการใช้อุปกรณ์ (I/O device) มันจะ Load โปรแกรมลงใน I/O Module ซึ่ง I/O Module นี้จะคอยควบคุมอุปกรณ์ต่างๆแทน CPU อุปกรณ์ต่างๆ (external Device) จะถูกควบคุมโดย I/O Module อีกทีหนึ่ง การอ้าง Address ของอุปกรณ์ I/O จะอ้างผ่านทางเส้นทาง Address Bus การรับส่งข้อมูลจะกระทำผ่านทาง Data Bus และการส่งสัญญาณการควบคุม การอ่าน-เขียน ข้อมูลจะกระทำผ่านทาง Control Bus
External device อุปกรณ์ต่าง (External device) จะควบคุมและแจ้งสถานะให้กับ I/O Module ผ่านเส้นทางสัญญาณควบคุมและสถานะ ส่วน Transducer จะเป็นตัวแปลงข้อมูลให้กับอุปกรณ์เนื่องจาก ข้อมูลจากภายนอก (External Environment) จะต้องแปลงเป็นข้อมูลที่เครื่องคอมพิวเตอร์รู้จัก ส่วน Buffer จะเป็นที่พักข้อมูลในระหว่างการรับ-ส่ง ข้อมูลผ่านทางอุปกรณ์ (External Device)
ภายใน I/O Module ภายใน I/O Module จะมี Register อยู่ 2 ประเภทคือ Data Register และ Status /Control Register ซึ่ง Status/Control Register จะเป็นที่ไว้เก็บโปรแกรมที่ส่งมาจาก CPU และส่งไปให้วงจร I/O logic เพื่อควบคุมการอ่าน-เขียนข้อมูล ลงในอุปกรณ์ I/O (I/O Device)
การอ่าน-เขียน ข้อมูลระหว่าง อุปกรณ์ I/O กับหน่วยความจำจึงสามารถทำได้ 3 วิธี คือ
1.Programmed I/O
2. Interrupt-Driven I/O
3. DMA (Direct Memory Access)

Programmed I/O
Programmed I/O
- เป็นการเขียนโปรแกรมสั่งงานให้อุปกรณ์ I/O อ่านหรือเขียนข้อมูล
- CPU จะต้องคอยตรวจสอบสถานะของ I/O Module เป็นช่วงเวลา ว่าพร้อมหรือไม่
- การตรวจสอบสถานะของ I/O Module จะกระทำทุกๆ Word ที่จะอ่านหรือเขียน
- CPU จะไปทำงานอย่างอื่นไม่ได้จนกว่าการอ่านหรือเขียนจะกระทำเสร็จสิ้น
- CPU จะทำงานช้าตามอุปกรณ์รอบข้าง

Programmed I/O: เป็นการอ่าน-เขียน ข้อมูล ระหว่าง I/O กับหน่วยความจำ ในวิธีการนี้เป็นการเขียนโปรแกรมสั่งงานให้อุปกรณ์ I/O อ่านหรือเขียนข้อมูล ซึ่งจะทำให้ Module ได้รับคำสั่งมาจาก CPU กล่าวคือ CPU จะควบคุมการทำงาน ของอุปกรณ์ I/O โดยตรง ซึ่ง CPU จะคอยตรวจสอบการทำงานของ I/O จนกระทั่งเสร็จ จึงจะสามารถทำงานอื่นให้ได้โดยที่เมื่อ อุปกรณ์ I/O ทำงานเสร็จ Status bit ของ I/O Module จึงจะเปลี่ยนการทำงานแบบ Programmed I/O นี้ CPU จะต้องคอยตรวจสอบ Status bit ของ I/O Module เป็นช่วงๆเวลาเนื่องจากความเร็วของการทำงานระหว่าง CPU กับ I/O แตกต่างกัน กล่าวคือ I/O จะทำงานช้ากว่า CPU ดังนั้นการทำงานแบบ Programmed I/O CPU จะต้องเสียเวลาในการรอคอย I/O มาก ทำให้การทำงานของระบบคอมพิวเตอร์ ไม่มีประสิทธิภาพเนื่องจาก CPU จะทำงานช้าตามอุปกรณ์รอบข้าง (Phipheral) แต่ก็มีข้อดีคือ การทำงาน แบบ Programmed I/O นั้น ใช้งานง่าย โดยการเขียนโปรแกรมส่งงานให้ Hardware ทำงานโดยตรง

การทำงานแบบ Programmed I/O ในการอ่านข้อมูล (Read) จาก I/O มาให้หน่วยความจำหลักมีขั้นตอนดังนี้
ขั้นที่ 1 CPU จะจ่ายคำสั่ง Read ให้กับ I/O Module เพื่ออ่านข้อมูลจาก I/O Device
ขั้นที่ 2 CPU จะคอยอ่านสถานะจาก I/O Module ว่าพร้อมหรือยังที่จะส่งข้อมูลให้กับ CPU ซึ่ง CPU จะคอยอยู่อย่างนั้นจนกระทั่ง I/O Module พร้อม นั่นก็หมายความว่า I/O Deviceจะต้องพร้อมมาก่อน หากว่า I/O device ไม่พร้อมอยู่นานเกินไป หรือมีข้อผิดพลาด ก็จะส่งสัญญาณบอกผู้ใช้ว่า มีข้อผิดพลาดเกิดขึ้น
ขั้นที่ 3 เมื่อ I/O Module พร้อม ข้อมูลจะส่งจาก I/O Module มาให้กับ CPU 1 ครั้งคือ 1 Word
ขั้นที่ 4 CPU จะเขียนข้อมูล word นั้นไปเก็บไว้ในหน่วยความจำหลัก
ขั้นที่ 5 จากนั้นโปรแกรมจะตรวจสอบดูว่าได้ อ่านข้อมูลมาครบทุก word หรือไม่ หากยังไม่ครบให้กลับไปทำขั้นที่ 1 ใหม่ จนครบทุก word เมื่ออ่านมาครบแล้ว CPU ก็จะทำงานคำสั่งถัดไป ของงานอื่นที่จากมาได้

Interrupt driven I/O

Interrupt driven I/O
- อินเตอร์รัพท์ คือ การขัดจังหวะการทำงาน CPU
- ช่วยลดเวลาของ CPU ที่จะต้องสูญเสียไปในการตรวจสอบอุปกรณ์ I/O
- การ Interrupt จะมีวงจรควบคุมระดับของการอินเตอร์รัพท์ ที่เรียกว่า Interrupt Controller

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

Interrupt driven I/O สมมติเป็นอ่านข้อมูลจาก I/O และ write ข้อมูลลงหน่วยความจำจะมีขั้นตอนการทำงานดังนี้

ขั้นที่ 1 CPU จะออกคำสั่ง Read ให้กับ I/O Module เสร็จแล้ว CPU ก็จะไปทำงานอย่างอื่น
ขั้นที่ 2 เมื่อ I/O พร้อมก็จะส่งสัญญาณ Interrupt มาให้กับ CPU CPU จะอ่านสถานะจาก I/O Module ว่าพร้อมหรือยัง
ขั้นที่ 3 CPU ตรวจสอบสถานะของ I/O Module ว่าพร้อมหรือยังไม่พร้อม หากไม่พร้อม ก็แจ้งสถานะ Error หากพร้อมก็จะทำงาน ขั้นตอนต่อไป
ขั้นที่ 4 CPU จะอ่าน Word จาก I/O Module
ขั้นที่ 5 จากนั้น CPU จะเขียน word ไปที่หน่วยความจำ
ขั้นที่ 6 ตรวจสอบว่าอ่านครบทุก Word แล้วหรือยัง หากยังให้กลับมาทำใน ขั้นตอนที่ 1 ใหม่ หากอ่านได้ครบทุก word แล้ว CPU ก็ไปอ่านคำสั่งถัดไปของงานที่จากมา


การตรวจสอบสนองของ CPU ที่มีต่อการ Interrupt
- Interrupt controller à CPU
- CPU à Interrupt คำสั่งปัจจุบันให้เสร็จ
- CPU à PSW
- Load Address ของ Program Interrupt
- เก็บ Process state ไว้ใน Stack
- CPU Execute Program Interrupt จนเสร็จ
- นำ Process state จาก Stack กลับมาที่ CPU
- นำ PSW และ PC Address จาก Stack กลับ มาที่ CPU แล้วจึงไปทำงานคำสั่งถัดไป


การตอบสนองของ CPU ที่มีต่อการ Interrupt: การตอบสนองของ CPU ต่อการ Interrupt ในการขอ Interrupt จากอุปกรณ์ I/O โดยการร้องขอให้ CPU ทำงานให้นั้น ในมุมมองของ CPU ที่ตอบสนองต่อการ Interrupt สามารถกำหนดได้เป็นขั้นตอนโดยขั้นตอนที่ 1 ถึง 5 เป็นส่วนของ Hardware และขั้นตอนที่ 6 ถึง 9 เป็นส่วนของ Software ดังนี้


ในส่วนของ Hardware
ขั้นที่ 1 อุปกรณ์ Controller จะจ่ายสัญญาณ Interrupt ไปให้กับ CPU
ขั้นที่ 2 CPU จะ Execute คำสั่งปัจจุบันให้เสร็จ
ขั้นที่ 3 CPU จะส่งสัญญาณ Interrupt Acknowledge ตอบรับไปยัง Interrupt Controller
ขั้นที่ 4 CPU จะเก็บค่า PSW (Program Status Word) และ PC ไว้ในControl Stack
ขั้นที่ 5 จากนั้น CPU จะ Load ค่าใหม่ให้กับ PC ซึ่งเป็น Address ของ Program Interrupt จากนั้นจะเป็นการทำงานทาง Software

ในส่วนของ Software
ขั้นที่ 6 จากนั้นก็จะเก็บค่า Process state ต่างๆ ที่เหลือไว้ใน Stack
ขั้นที่ 7 CPU ก็จะทำงานหรือ Execute Program Interrupt จนกระทั่งเสร็จสิ้น
ขั้นที่ 8 จะนำค่า Process state กลับมาที่ CPU
ขั้นที่ 9 จะนำค่า PSW และ PC เดิมกลับมาที่ CPU เป็นการสิ้นการให้บริการ Interrupt และ CPU ก็จะไปทำงานต่อจากงานเดิม

การเปลี่ยแปลงค่าต่างๆ ใน Memory และ Register ต่อการ Interrupt การเปลี่ยนแปลงค่าต่างๆใน Memory และ Register ต่อการ Interrupt ขณะที่ CPU รันโปรแกรมไปถึง Address ที่ N และเกิดมีการ Interrupt เกิดขึ้น ค่าของ PC จะเป็น Address ที์ N+1 เมื่อ CPU execute คำสั่งปัจจุบันเสร็จ ก็จะเก็บค่าสถานะต่างๆใน Register ไปเก็บไว้ที่ Control Stack พร้อมทั้งเก็บค่าที่ PC ปัจจุบันคือค่า Address N+1ไว้ใน Stack ด้วยจากนั้น PC จะ load ค่า Address ของโปรแกรม Interrupt เข้ามา พร้อมทั้ง execute program Interrupt จนกระทั่งเสร็จสิ้น Program Interrupt นั้น นั่นก็คือ คำสั่งสุดท้ายของโปรแกรมคือ Return เมื่อเสร็จสิ้นโปรแกรม Interrupt PC จะ load ค่า Address N+1 ที่เก็บไว้ใน Stack แต่เดิม ซึ่งก็คือ Address ของคำสั่งถัดไป ก่อนที่จะถูกและ load ค่าสถานะข้อมูล ที่เก็บไว้ใน Stack กลับมาที่ CPU จากนั้น CPU ก็จะ execute คำสั่งต่อไป

การทำงาน Interrupt controller
- Multiple Interrupt at the same time
- กำหนด priority ให้กับ device ที่ขอ Interrupt มา
- Device Interrupt à IRR
- Interrupt Controller à INT
- CPU à INTA
- Interrupt controller à ISR Reset IRR Vector table
- CPU à PC Status ไว้ใน Stack
- Execute Program Interrupt จนจบ
- CPU execute งานเดิมต่อจากการถูก Interrupt
การทำงานของ interrupt controller : หากมีการขอ interrupt มาที่ CPU หลายๆ Interrupt พร้อมๆ กันCPU จะมีวิธีการอย่างไร ให้บริการ device หรืออุปกรณ์ใดก่อน ในทางปฏิบัติแล้ว จะให้ตัวควบคุมการ interrupt คือ interrupt controller ซึ่งเป็นตัวจัดการระดับความสำคัญ ของแต่ละ device ซึ่ง device
ต่างๆ จะขอ Interrupt มาทาง IRR0-IRR (interrupt Request Channel 0-7) เมื่อ interrupt
Controller ได้รับสัญญาณ จาก device แล้วก็จะset bit IRR (interrupt request register) สัมพันธ์กับ device ที่ขอมา หากมีการขอ interrupt มากกว่า 2 channel พร้อมๆกัน วงจร Priority Resolver
ก็จะเปรียบเทียบว่า Channel ใดมีลำดับความสำคัญสูงกว่า ก็จะให้ channel นั้นส่งสัญญาณ INT ไปให้
CPU ได้รับสัญญาณ INT ไปให้ CPU หลังจาก CPU ได้รับสัญญาณ INT แล้ว CPU จะตอบสนองโดยส่งสัญญาณ INTA (Interrupt Acknowledge) กลับมาให้ interrupt controller เพื่อมา set bit ให้
ISR (Interrupt Service Register) ตรงกับ Channel ที่ได้รับการตอบสนองเป็น high เพื่อบอกว่า
Channel ใดได้รับการตอบสนองอยู่ และ reset bit IRR ที่ตรงกับ Channel นั้นให้เป็น Low หลังจากนั้น
Interrupt Controller ส่ง Vecter Table (เก็บ Address ของ Program Interrupt ) ออกมาบนdata bus เพื่อให้ CPU เปิดตาราง vecter เพื่อหาตำแหน่ง address เริ่มต้นของโปรแกรม Interrupt ซึ่ง Interrupt Vecter ของแต่ละ device ที่ขอ interrupt มา หลังจาก CPU คำนวณค่า Address เริ่มต้นของโปรแกรม Interrupt เรียบร้อยแล้ว CPU ก็จะเก็บค่า ใน PC และ สถานะต่างๆ ไว้ในหน่วยความจำที่เรียกว่า
Stack จากนั้น CPU Execute Program Interrupt จนกระทั้งเสร็จสิ้น

Direct Memory Access I/O
DMA Function
- I/O Module à Controller
- DMA Controller à ควบคุมการเขียนและอ่านข้อมูล
- การเขียนและอ่านข้อมูลกระทำทีละ Block
- Cycle Stealing


DMA function : ถึงแม้ว่า interrupt driven i/o จะมีประสิทธิภาพมากกว่า Programmed I/O แต่ก็ยังพึ่งพาการทำงานของCPU ในการ transfer data ระหว่างหน่วยความจำและ i/o module ซึ่งการ transfer data ข้อมูลของ i/o จะถูกจำกัดด้วยความเร็วของ CPU ที่จะให้บริการกับ Device นั้นๆ และในขณะที่ CPU ยังอยู่กับการจัดการ I/O เพื่อ transfer ข้อมูล CPU จะต้องคอยตรวจสอบ i/o แต่ละครั้งที่ transfer data ว่า I/O พร้อมหรือยัง นั่นหมายความว่าทุกๆ word
ที่จะมีการ transfer หากมีการtransfer ข้อมูลจำนวนมาก ( block of data ) จะให้เสียเวลาหากใช้Programmed I/O หรือ interrupt driven I/O ดังนั้นหากมีการtransfer data จำนวนมาก จะใช้เทคนิคที่เรียกว่า DMA ( direct memory access ) โดยให้ i/o module ซึ่งก็คือ DMA Controller ทำหน้าที่ควบคุม การเขียนและอ่านข้อมูลระหว่างอุปกรณ์ i/o และ main memoryซึ่งการเขียนและอ่านข้อมูลจะกระทำทีละ block
DMAflowchart เมื่อ CPU ต้องการจะอ่านข้อมูลจากอุปกรณ์ i/o cpu จะจ่ายคำสั่งRead ไปให้ I/O mudule ซึ่งในที่นี้คือ DMA controller แล้ว CPU ก็ไปทำงานอื่น ปล่อยให้ DMA ทำอ่านข้อมูลจากอุปกรณ์ และเขียนข้อมูลลงในหน่วยความจำ จนกระทั่งครบ Word DMA controller ก็จะแจ้ง CPU ว่า transfers data เรียบร้อยแล้ว CPU จะไปทำงานในคำสั่งถัดไปจากรูป DMA ระหว่าง instruction cycle ใน OS . แบบ multiprogramming ขณะที่ CPU ทำงานไป fetch คำสั่งมาจากหน่วยความจำ DMA controller จะร้องขอ CPU เพื่อทำ DMA ก่อนเมื่อ DMA controller ควบคุมการ transfer data ได้ 1 word หรือ 1 block ก็จะคืนอำนาจควบคุมให้กับ CPU แล้ว CPU ก็จะทำงานต่อไปและเมื่อ CPU และเมื่อ CPU จะ fetch operand มาจากหน่วยความจำอีก DMA controller จะร้องขอ CPU เพื่อขอทำ DMAก่อนอีก และเมื่อ DMA controllerควบคุมการ transfer ข้อมูลได้ 1 word หรือ 1 block ก็จะคืนอำนาจการควบคุม ให้กับ CPU แล้ว CPU ก็จะทำงานต่อไป สรุปก็คือเมื่อ CPU จะอ้าง address หน่วยความจำเมื่อใด DMA controller จะแย่ง cycle การทำงานของ CPUทันที ลักษณะการแย่ง cycle ของ CPU เรียกว่า cycle stealing

DMA Module
- DMA Module DMA Controller
- DMA Controller à ควบคุม bus แทน CPU เมื่อทำงาน
- Information CPU DMA Controller
- ด้วยการ read หรือ write
- Address ของ i/o device
- Address ของหน่วยความจำเริ่มต้นจะอ่านหรือเขียน

DMA Module : DMA เป็น module ที่เกี่ยวข้องกับ system bus โดยที่ DMA module มีความสามารถ ในการจำลองการทำงานของ CPU ซึ่งสามารถควบคุม bus แทน CPU ได้ เมื่อ CPU ต้องการจะ read หรือ write data เป็นจำนวนมาก CPU จะส่งข่าวสารไปให้ DMA module ดังนี้
ข่าวสารที่ 1 ต้องการ read หรือ write
ข่าวสารที่ 2 ต้องการ address หรือ i/o device
ข่าวสารที่ 3 ต้องการ address ของหน่วยความจำที่จะทำการอ่านหรือเขียน
ข่าวสารที่ 4 จำนวนword ที่จะทำการอ่านหรือเขียน

DMA module เมื่อใดที่ CPU ต้องการจะให้ DMA ทำการ transfer ข้อมูลเป็น block ระหว่าง i/o กับหน่วยความจำ CPU จะต้องส่ง command word มาให้ DMA controller
( ซึ่งก็คือ DMA module นั่นเอง ) ว่าจะเป็นการread หรือ write ข้อมูลลงหน่วยความจำ
สัญญาณ write ที่ส่งมาให้ DMA controller หมายความว่าให้ DMA controller รับ command word ที่ส่งมาจาก CPU มาเก็บไว้ที่ data register และหาก CPU ต้องการดูสถานะจาก DMA Controller ที่จะส่งสัญญาณ read มาให้ DMA controller เพื่อให้ DMA controller บอกสถานะให้ CPU รู้ว่า DMA controller อยู่ในสถานะใด เช่น พร้อมหรือไม่ เช่นส่ง command word และอ่านสถานะของ DMA controller เมื่อ DMA controller พร้อมก็จะขอ DMA Request เพื่อขอทำ DMA มาที่ CPU เมื่อ CPU ทราบและอนุญาตให้ทำ DMA ได้ก็จะตอบรับ โดยส่งสัญญาณตอบรับเป็น DMA ACK มาที่ DMA controller และมอบอำนาจการควบคุม bus ต่างๆ ให้กับ DMA controller

การทำงานของ DMA controller หลังจากCPU ส่งโปรแกรม ให้กับ DMA controller สมมติเป็นการอ่านข้อมูลจาก i/o device แล้วเขียนข้อมูลลงในหน่วยความจำ device จะร้องขอทำ DMA โดยส่งสัญญาณ DREQ ( DMA request ) มาที่ DMA controller จะทราบว่าเป็นอุปกรณ์ใดที่ขอมา หากตรงกับที่ CPU สั่งมา ก็จะส่งสัญญาณ ขอทำ DMA โดยส่งสัญญาณ HRQ (Hold Request ) ไปให้ CPU เพื่อขอควบคุม bus แทน CPU พร้อมที่จะให้ DMA controller ควบคุม Bus แทนก็จะส่งสัญญาณตอบรับไปที่ DMA controller คือ H.I.D.A (Hold Aeknowlege) จากนั้น CPU ก็จะตัดขาดการควบคุม bus สวิตซ์ ก็ตกลงมาด้าน bus ส่วนต่างๆ ขณะควบคุม โดย DMA Controller จากนั้น DMA Controller รอส่งสัญญาณ DACK

(DMA Acknowledges) เพื่อบอกให้ device ทราบจากระบบ DMA Controller จะส่งสัญญาณ IOR ไปให้ device ส่งข้อมูลมาวางไว้บน data bus จากนั้น DMA Controller จะส่ง Address ไปชี้ตำแน่งของหน่วยความจำ แล้วส่งสัญญาณ MEMW ไปที่หน่วยความจำ เพื่อให้หน่วยความจำนำข้อมูลที่วางอยู่บน Data bus ไปเก็บ จนกระทั่ง DMA Controller ทำการ Transfer ข้อมูลจนครบจำนวน word ที่จะทำการ Transfer ซึ่งในการ Transfer ข้อมูลที่ DMA Controller จะไม่นำข้อมูลมาเก็บไว้ที่ตัว DMA Controller เอง เพียงแต่นับจำนวน word ที่ได้ transfer ข้อมูลไปแล้วจนกระทั่งครบ จึงส่งสัญญาณ Terminal Count ให้กับ CPU เพื่อบอกการคืนอำนาจการควบคุม Bus ต่างๆ ให้กับ CPU สวิตซ์ก็จะกลับไปต่อด้านอย่างเดิม
รูปแบบการใช้ DMA
- Single-Bus Detached DMA
- Sing-Bus Integrated DMA-I/O
- I/O


รูปแบบการใช้ DMA
-Single Bus Detached DMA รูปแบบนี้จะใช้ Bus ชุดเดียวใช้ร่วมกันทั้ง I/O device DMA Controller หรือ DMA Module CPU และหน่วยความจำ ซึ่ง DMA Controller จะแยกออกเป็นอิสระจาก I/O device เลย
-Single Bus Integrate DMA I/O รูปแบบนี้จะใช้ Bus เพียงชุดเดียวเหมือนกันแต่จะมี I/O device หลาย device ต่อรวมอยู่ที่ DMA Controller
-I/O Bus รูปแบบนี้จะใช้ Bus 2 ชุด ชุดแรกคือ system Bus ในขณะที่ system Bus นั้นใช้เชื่อมต่อกันระหว่าง CPU DMA Controller และ Memory ส่วน I/O จะเชื่อมต่อ I/O device หลายๆ device โดยผ่านทาง I/O Bus จากนั้นก็จะเชื่อม I/O Bus เข้ากับ DMA Controller เพื่อควบคุม I/O device เหล่านั้น
การเชื่อมต่ออุปกรณ์ภายนอก (External Interface)
I/O Interface Adapters
-Parallel VS serial data transfer
-Data format conversions
Transfer rates
ตัวอย่าง เช่น RS-232 serial ports Game ports High speed I/O busses ซึ่งจะสนับสนุนหน่วยความจำขนาดใหญ่และอุปกรณ์ Multimedia
I/O transfer Adapter: เครื่องมโครคอมพิวเตอร์ส่วนมากจะสนับสนุน I/O ชนิดทั้งแบบขนานและแบบลำดับ อุปกรณ์ I/O ที่ส่งข้อมูลครั้งละ 1 byte หรือมากกว่าเรียกว่า parallel I/O เช่น disk และเครื่องพิมพ์ เป็นต้น อุปกรณ์ I/O ที่ใช้การส่งข้อมูลแบบ serial I/O จะส่งข้อมูลครั้งละ 1 bit ทางสายข้อมูลเพียงสายเดียว ตัวอย่างเช่น การใช้เครื่องไมโครคอมพิวเตอร์ติดต่อกันทางไกลโดยสายโทรศัพท์ ซึ่งเป็นการส่งข้อมูลแบบลำดับหรืออนุกรมโดยใช้ Modem การเชื่อมต่อภายนอกกับ I/O Module (External Interface) จะต้องเป็นไปตามธรรมชาติการทำงานของอุปกรณ์นั้นๆ ซึ่งการเชื่อมต่อจะต้องเกี่ยวข้องกับคุณลักษณะดังต่อไปนี้
-จะขนถ่ายข้อมูลแบบขนานหรืออนุกรม (Parallel or Serial data transfer)
-การแปลงรูปแบบข้อมูล (Data format conversion)
-อัตราการถ่ายข้อมูล (Transfer rates)
-จำนวนของอุปกรณ์ที่สามารถต่อพ่วงได้ (Number of device supported)

ตัวอย่างเช่น
-RS-232 serial ports
-Game ports
-High speed I/O ที่ใช้ได้ทั้ง 2 แบบ โดยแต่ละ I/O Interface จะมีวงจรถอดรหัส Address เฉพาะเพื่อกำหนด I/O port Address ของตนเอง
Programmable Interface Adapters
-รับส่งข้อมูลได้ครั้งละมากกว่า 1 bit
-การติดต่อสื่อสารแบบ Handshaking
Output protocol for PPI
-เป็นรูปแบบการส่งข้อมูลแบบขนานไปให้ Output device
-INT = False หมายถึง PPI ไม่ได้ร้องขอการขัดจังหวะ
-OBF = False หมายถึง Output buffer ยังไม่เต็ม
-ACK = False หมายถึง การตอบรับว่ายังไม่ได้รับข้อมูล
Programmable Interface Adapters ในส่วนนี้จะกล่าวถึงการทำงานของ 8255 PPI (8255 Programmable Parallel Interface) จากรูป Block Diagram 8255A PPI ซึ่งแสดงการทำงานครบทั้งระบบ I/O ภายใน 8255 PPI มีรีจีสเตอร์ 4 ตัว ดังนี้ รีจีสเตอร์ควบคุม 1 ตัว อีก 3 ตัวเป็นรีจีสเตอร์ข้อมูลสำหรับแต่ละ port ซึ่งมี 3 port รีจีสเตอร์ข้อมูลจะเก็บพักข้อมูลเพื่อส่งไปให้ I/O device หาก CPU ถูกโปรแกรมให้ส่งข้อมูลไปให้ Output device หรือพักข้อมูลที่มาจาก I/O device หาก CPU ถูกโปรแกรมให้รับข้อมูล ส่วน Control Register จะเป็นตัวกำหนดรูปแบบของการทำงานระบบ 8522A โดยการเขียนค่าต่างๆ เข้าไปใน Control register เมื่อ CPU Execute คำสั่ง IN หรือ OUT ชึ่งเลือก PPI และเลิก register ใด ที่จะ Access
การติดต่อสื่อสารแบบขนานที่ใช้รูปแบบ Handshaking การจับมือเขย่าเป็นรูปแบบการควบคุมการไหลของข่าวสารระหว่าง Processor เมื่ออุปกรณ์หนึ่งต้องการที่จะส่งข้อมูลไปให้อีกอุปกรณ์หนี่ง ซึ่งจะต้องขออนุญาตก่อน เมื่ออุปกรณ์ให้อนุญาต จึงจะส่งข้อมูงนั้นไปให้ได้ และเมื่ออุปกรณ์ที่รับข้อมูลได้รับข้อมูลเรียบร้อยแล้วก็จะแจ้งให้ทราบว่าได้รับแล้ว (Acknowledge) ซึ่งเป็นกฎเกณฑ์ที่ใช้เช่นเดียวดังที่ใช้ในผู้คนทั่วๆ ไปและ 8255A PPI ในรูปแบบนี้เช่นเดียวกัน
Output Protocol for PPI (จากรูป Output protocol for PPI) เราจะมาดูการทำงานของ CPU โดยมีความหมายของสัญญาณเริ่มต้นดังต่อไปนี้ INT = false หมายถึง PPI ไม่ได้ร้องขอการขัดจังหวะ OBF = false หมายถึง Output buffer ยังไม่เต็ม และ ACK = false หมายถึงการตอบรับว่ายังไม่ได้รับข้อมูลเมื่อ CPU execute คำสั่ง Out มันจะส่งข้อมูลที่อยู่ใน AL รีจีสเตอร์ไปให้ PPI PPI จะอ่านข้อมูลโดยอัตโนมัติ แล้วส่งข้อมูลนั้นไปให้ I/O device โดยที่ PPI จะส่งสัญญาณ OBF = true ไปบอกให้ I/O device ทราบว่าข้อมูลที่ส่งมานี้ถูกต้อง (valid) และ I/O device ก็จะอ่านข้อมูลเข้ามาที่ตัวเอง และ set ให้สัญญาณ ACK เป็น true บอกให้ PPI ทราบว่าได้รับข้อมู,นั้นแล้ว ต่อจากนั้น PPI อาจจะเปลี่ยนค่าต่างๆ ใน register และ PPI จะแจ้งให้ CPU ทราบว่า มันพร้อมที่จะส่งข้อมู,ไปได้อีกโดยส่งสัญญาณ INT = true อีกครั้ง สามารถสรุปเป็นขั้นตอนได้ดังนี้
1. CPU execute คำสั่ง OUT และส่งค่าข้อมูล AL ไปให้ PPI
2. PPI อ่านข้อมูลนั้น
3. PPI ส่งข้อมูลนั้นไปให้ I/O device
4. PPI Set OBF เป็น true เพื่อบอกให้ I/O device ทราบว่ามีข้อมูลและถูกต้อง(valid)
5. I/O device อ่านข้อมูลเมื่อ OBF เปลี่ยนสถานะจาก false เป็น true
6. I/O device Set ACK เป็น true เพื่อบอกให้ PPI ทราบว่าได้รับข้อมูลแล้ว
PPI ส่งสัญญาณ INT เป็น true เพื่อบอกให้ CPU ว่าพร้อมการส่งข้อมูลต่อไป

Input protocol for PPI
- เป็นรูปแบบการอ่านส่งข้อมูลแบบขนานจาก device มาที่ CPU
- IBF = False หมายถึง Input buffer ยังไม่เต็ม
- STB = False หมายถึง สัญญาณ Strobe ที่เปลี่ยนจาก true เป็น false ซึ่งกำหนดจุกเริ่มต้นการรับส่งข้อมูล
- INT = False หมายถึง การตอบรับว่ายังไม่ได้รับข้อมูล
Input protocol for PPI: เมื่อ CPU ต้องการอ่านข้อมูลจาก device โดย CPU execute คำสั่ง IN จะทำให้ PPI Clear buffer และ Set INT ให้ IBF เป็น False โดยปกติแล้ว CPU จะส่งโปรแกรมมาให้ PPI ว่าจะอ่านข้อมูลจาก I/O device จากนั้นจึงเริ่มต้นด้วยการที่ PPI จะส่งสัญญาณ IBF = False ซึ่งหมายถึง Input buffer ยังไม่เต็ม และ I/O device ก็จะส่งสัญญาณ STB = true (Strobe Input) หมายถึงเมื่อ STB เปลี่ยนจาก true เป้ฯ false PPI จะเริ่มต้นอ่านข้อมูลเข้ามา ทันทีที่ I/O device ได้รับข้อมูลมันจะส่งสัญญาณนั้นมาให้ PPI ทางOutput port ของมัน จากนั้นมันจะส่งสัญญาณ STB = false เพื่อบอกให้ PPI อ่านข้อมูลเข้ามาเก็บไว้ PPI จะอ่านข้อมูลเก็บทันที


และ Set สัญญาณ IBF=True เพื่อบอกให้ I/O device ทราบว่าตอนนี้ยังไม่พร้อมที่จะรับข้อมูลและ I/O device จะต้องไม่ส่งข้อมูลมาให้อีกจนกระทั่ง PPI ส่งสัญญาณ IBF=false จากนั้น PPI จะแจ้งให้ CPU ทราบว่ามีข้อมูล จะส่งมาให้โดยส่งสัญญาณ INT (Set INT=True) CPU จึงอ่านข้อมูลเข้าไปเก็บไว้ในรีจิสเตอร์ AL โดยสามารถสรุปเป็นขั้นตอนได้ดังนี้
1. I/O device ส่งข้อมูลมาให้ PPI
2. I/O device Set สัญญาณ STB=false เพื่อบอกให้ PPI อ่านข้อมูลเข้าไปเก็บไว้
3. PPI อ่านข้อมูลเข้ามาและ Set สัญญาณ IBF=true
4. PPI จะแจ้ง CPU ว่ามีข้อมูลที่จะส่งให้ โดยส่งสัญญาณ INT
5. CPU อ่านข้อมูลเข้า มาที่รีจิสเตอร์ AL ในCPU
เทคนิคการรับส่งข้อมูลแบบลำดับของ Serial I/O
- เป็นการรับ-ส่งข้อมูลแบบลำดับ
- Baud rate
- Mark bit
- Data bit
- Parity bit
- Stop bit
เทคนิคการรับส่งข้อมูลแบบลำดับของ Serial I/O :อุปกรณ์ต่างๆ ที่จำเป็นต้องส่งข้อมูลลำดับ อย่างเช่น Modem หรืออุปกรณ์อื่น ๆ จำเป็นต้องมีวงจรเชื่อมต่อที่แปลงจากรูปแบบการส่งข้อมูลแบบขนานเป็นการส่งแบบลำดับ หรือในทางกลับกันโดยปกติแล้วอุปกรณ์ส่งที่ส่งสัญญาณ True จะหมายถึงแรงดันสูงไปบนสายส่ง ขณะที่ไม่ส่งสัญญาณอะไรจะหมายถึง Idle สัญญาณที่ส่งไปจะเป็นบิต โดยมีช่วงเวลาที่แน่นอนที่เรียกว่า “Bit time” สัญญาณ False จะหมายถึงการส่งแรงดันที่เป็นศูนย์ หรือเรียกว่า “Zero bit” อัตราการส่งข้อมูล จะหมายถึงจำนวนการเปลี่ยนแปลงของแรงดันใน 1 วินาที หรือเรียกว่า “Baud rate” หรือเทียบเท่าได้เท่ากับจำนวนบิตที่อุปกรณ์ส่งข้อมูลส่งค่าใน 1 วินาที บิตแรกที่อุปกรณ์ส่งไปจะเรียกว่า “Mark bit” ซึ่งเป็นบิตที่บอกให้เครื่องรับ (อุปกรณ์ที่รับ) รู้ว่าจะเริ่มการรับส่งข้อมูลมาแล้ว หลังจากนั้นอุปกรณ์ส่ง จะส่งข้อมูลซึ่งเป็นบิตข้อมูล เช่น จำนวนที่แน่นอน ตามรูป Serial data Transmission นั้น Data bit มีจำนวนเท่ากับ 7 bit หลังจากนั้นจะส่งอีก 1 bit เรียกว่า “Parity bit” ซึ่งอุปกรณ์รับนั้นจะใช้ parity bit เพื่อตรวจสอบความถูกต้องของการส่งข้อมูล หลังจากนั้นอุปกรณ์ส่งจะส่งบิตสิ้นสุด (Stop bit) จำนวนหนึ่งเพื่อบอกให้อุปกรณ์รับ ทราบว่าสิ้นสุดการส่งข้อมูล 1 ชุด
8250 Universal Asynehronouse Receiver- Transmitter (UART)
-RTS(Request permission to send)
-CTS(Clear to send)
-DTR(Data terminal ready)
-DSR(Data set ready)
-Sin(Serial data input)
-Sout(Serial data output)
-RI(Ring indieator)
-RLSD(Received line signal detect)
8250 Universal Asynehronouse Receiver- Transmitter (UART) วงจร 8250 UART ออกแบบมาเพื่อเชื่อมโยงระหว่างเครื่องคอมพิวเตอร์กับ I/O device เช่น Modem หลังจากนั้น Modem จะแปลงสัญญาณดิจิตอลไปเป็นสัญญาณเสียง แล้วส่งออกไปตามสายโทรศัพท์และ ในทางกลับกัน 8250 UART มีสัญญาณควบคุม 8 เส้นที่ควบคุมการเชื่อมโยงไปยัง BUS สัญญาณที่อ่าน Input มี 4 สัญญาณ ซึ่งทำให้ 8250 UART รับ Input หรือส่ง Data ออกไป Output สัญญาณแรก คือสัญญาณควบคุมที่ให้ 8250 UART เลือก Address ของตัวมันเอง คือสัญญาณ Chip scleet สัญญาณ Oupput 2 เส้นจะแจ้งอุปกรณ์ภายนอก เมื่อ CPU เลือก 8250 UART และเมื่อ CPU อ่านข้อมูลของ 8250 UART 8250 UART จะใช้สัญญาณ Interrupt เป็น Outputเพื่อร้องขอการขัดจังหวะของ CPU
สาย 8 เส้นนี้จะใช้เพียง 6 เส้น เพื่อควบคุบการสื่อสารระหว่าง 8250 UART กับ Serial I/O device ซึ่งในที่นี้จะใช้ Modem มาอธิบายโดยสัญญาณทั้ง 6 มีดังนี้
RTS(Request permission to send) เป็นสัญญาณ Output บอกให้ Modem ทราบว่า 8250 UART มีข้อมูลพร้อมที่จะส่ง
CTS(Clear to send ) เป็นสัญญาณ Input มาจาก Modem เพื่อบอกให้ 8250 UART ทราบว่าให้ส่งข้อมูลมาได้
DTR(Data terminal ready ) (Data terminal คืออุปกรณ์ที่ใช้สำหรับรับหรือส่งข้อมูล)
เป็นสัญญาณ Output ที่บอก Modem ว่า 8250 UART พร้อมที่จะรับข้อมูล
DSR(Data set Ready) (Data setคือโครงสร้างข้อมูลสำหรับไว้เก็บข้อมูลในหน่วยความจำ) เป็น Input ของ 8250 UART ที่มาจาก Modem ที่บอกว่า Modem มีข้อมูลพร้อมที่จะส่งมาให้
Sin เป็นสัญญารข้อมูลรับมาจาก Modem
Sout เป็นสัญญารข้อมูลที่จะส่งไปให้ Modem
RT(Ring Indicator) หมายความว่า Modem ได้ตรวจพบสัญญาณเรียกเข้า
RLSD(Received line signal deteet) หมายความว่าการติดต่อสื่อสารระหว่าง 8250 UART กับ Modem จะกระทำในลักษณะ Handshake
ในที่นี้ 8250 UART จะทำหน้าที่เป็น Data terminal ส่วน Modem ทำหน้าที่เป็น Data set สมมติว่า Modem มีข้อมูลจะส่งให้กับ 8250 UART มันจะทำการติดต่อกันทาง Analog และเมื่อ 8250 UART มีข้อมูลที่จะส่งให้ Modem มันจะต้องขออนุญาต Modem ก่อนโดย ส่งสัญญาน RTS=true โดยมีคำสั่งดังนี้ สัญญาณ RTS จะบอก Modem ว่า 8250 UART พร้อมที่ จะส่ง ข้อมูลและเมื่อ Modem พร้อมที่จะรับข้อมูลมันจะส่งสัญญาร DSR=true มาให้ 8250 UART เพื่อจะแจ้งให้ทราบว่าพร้อมที่จะรับข้อมูล หลังจากนั้น 8250 UART ก็จัดส่งข้อมูลไปบนสายส่งข้อมูลแบบลำดับ(Serial output port (SOUT)) โดยปกติแล้วข้อมูลส่งไปตามลำดับทีละ byte Frame ซึ่งจะประกอบด้วยข้อมูล 1 Byte และมี Start Parity และ Stop bit เมื่อ 8250 UART ไม่มีข้อมูลที่จะส่งอีกต่อไป มันจะส่งสัญญาณ DTR= False และถ้าในระหว่างการส่งข้อมูลแล้ว Modemไม่สามารถรับข้อมูลได้ Modem ก็จะส่งสัญญาณ DSR=False เพื่อบอกให้ 8250 UART โดยการส่งข้อมูลมาให้ (ใช้คำสั่ง Out) กับ 8250 UART ไว้ในรีจิสเตอร์ควบคุม CPU จะกำหนดสถานะให้กับ8250 UART โดยการอ่านค่าสถานะ มาจาก รีจิสเตอร์สถานะของ 8250 UART รีจิสเตอร์ควบคุมตัวหนึ่งจะควบคุมสัญญาณนาฬิกาการส่งและการรับรีจิสเตอร์ควบคุมตัวที่สองจะควบคุม Parity จำนวนของ Stop bit และจำนวนของบิตข้อมูล รีจิสเตอร์สถานะ จะเก็บค่าสถานะของการส่ง(Full receive data register Empty transmit data register Framing error Parity error overrun error etc.) กล่าวได้ว่า รีจิเตอร์ควบคุมของ8250 UART จะควบคุมสถานะของสัญญาณ Output handshake ส่วนรีจิสเตอร์สถานะของ 8250 UART จะบอกสถานะของตนเอง เมื่อCPU ได้อ่านไป จะให้สถานะของสัญญาณ Input handshake

สรุปเนื้อหา
อุปกรณ์ Input/Output เป็นอุปกรณ์ที่สำคัญของระบบคอมพิวเตอร์ ที่ทำให้ผู้เขียนโปรแกรมหรือผู้ใช้โปรแกรมรับหรือส่งข้อมูลได้ แต่การที่อุปกรณ์ อุปกรณ์ Input/Outputจะรับหรือส่งข้อมูลได้นั้นจะต้องผ่านอุปกรณ์ที่เป็นตัวกลางในการควบคุมการรับส่งข้อมูลเหล่านั้น นั่นก็คือ I/O Module ดังนั้นเมื่อจะเขียนหรืออ่านข้อมูลนั้นจึงต้องผ่าน I/O Module นี้ และการเขียนและอ่านข้อมูลจะกระทำระหว่าง หน่วยความจำหลัก และอุปกรณ์ Input/ Output เนื่องจาก CPU มีหน่วยความจำอยู่อย่างจำกัด การเขียนและอ่านข้อมูลระหว่าง หน่วยความจำหลัก และอุปกรณ์ Input/Output จะกระทำได้ 3 วิธีคือ
1. Programmed I/O
2. Interrupt driven I/O
3. DMA (Direct memory access)
Programmed I/O
จะเป็นการเขียนโปรแกรมสั่งงานให้ CPU อ่านข้อมูล จากหน่วยความจำหลักหรืออุปกรณ์ I/O แล้วไปเขียนที่ อุปกรณ์ I/O หรือหน่วยความจำหลักCPU เมื่อจะมีการเขียนหรืออ่านข้อมูลทุก Word ไปที่อุปกรณื I/O CPU จะต้องคอยตรวจ สอบอุปกรณ์ I/O ทุกครั้ง และ CPU จะต้องทำงานนั้นจนเสร็จ ทำให้เสียเวลาการทำงานของ CPU ใช้หลักการรที่ว่า เมื่อMicroprocessor กับอุปกรณ์ภายนอก โดยผ่านทาง register พิเศษที่เรียกว่า I/O ports คุณสมบัติของ I/O เทคนิคนี้คือ อุปกรณ์ภายนอกสามารถกระทำ Funetion ตามที่ Program ซึ่งอยู่ภายในหน่วยความจำของ microprocessor สั่งงานหรือพูดอีกนัยหนึ่งก็คือ microprocessor จะควบคุมการถ่ายโอนข้อมูลทั้งหมดด้วยตนเอง
Interrupt driven I/O เพื่อแก้ปัญหา Programmed I/O
เมื่อ CPU จ่ายโปรแกรมที่เขียนหรื่ออ่านข้อมูลระหว่างอุปกรณ์ I/O และหน่วยความจำหลักแล้ว CPU ก็ไปทำงานอย่างอื่นได้ เมื่ออุปกรณ์ I/O พร้อมก็จะส่งสัญญาณ Interrupt มาบอก CPU อย่างไรก็ตามการเขียนและอ่านข้อมูลก็ยังต้องผ่าน CPU อยู่นั่นเอง มีหลักการว่าอุปกรณ์ภายนอกสามารถบังคับให้ Microprocessor หยุดการทำงานใน program ที่กำลังทำอยู่ชั่วคราว เพื่อที่จะให้มาทำงานในอีกโปรแกรมที่เรียกว่า Interrupt service routine ซึ่ง routine นี้เป็นชุดคำสั่งที่อุปกรณ์ภายนอกต้องการและหลังจากสิ้นสุดแล้ว microprocessor ก็จะกลับไปทำงานตามโปรแกรมเดิมก่อนที่มันจะถูกเรียก Interrupt
DMA (Direct memory access) เป็นการเขียนและอ่านข้อมูลระหว่าง หน่วยความจำหลักและอุปกรณ์โดยไม่ผ่าน CPU ทำให้การเขียนและอ่านข้อมูลกระทำได้เร็วขึ้น มีหลักการที่ว่า การถ่ายโอนข้อมูลระหว่าง memory กับอุปกรณ์ภายนอก โดยไม่ยุ่งเกี่ยวกับ Microprocessor เลย ส่วนใหญ่ DMA จะใช้ในการถ่ายโอนข้อมูลแบบเป็นกลุ่ม (block transfer) ระหว่าง memory กับอุปกรณ์ภายนอก Chip ที่ใช้ในการเชื่อมต่อเรียก DMA Control chip
สุดท้ายได้กล่าวถึง การสื่อสารข้อมูลกับอุปกรณ์ภายนอก (External Interface) โดยมีอยู่ 2 รูปแบบคือ แบบ Serial และแบบ Parallel ในลักษณะ Handshaking

0 ความคิดเห็น: