ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

การอินเตอร์รัพท์ และการออกแบบ Interrupt and Design (อินเตอร์รัพท์ แอน ดีไซน์)

     การอินเตอร์รัพท์ คือ การติดต่อเพื่อรับส่งข้อมูลกันระหว่างอุปกรณ์ภายนอกต่าง ๆ ของคอมพิวเตอร์ เช่น จอภาพ, แป้นพิมพ์, เครื่องพิมพ์, เม้าส์ และอื่ น ๆ กับ ไมโครโปรเซสเซอร์ ซึ่งจะมีการติดต่อกันอยู่เสมอ ๆ การที่จะทำให้ระบบมีประสิทธิภาพมากที่สุดนั้นก็คือ การมีการติดต่อหรือการอินเตอร์รัพท์ที่ดีนั่นเอง

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

    วิธีหนึ่งก็คือ ให้ซีพียูใช้เวลาส่วนใหญ่ในการทำโปรแกรมหลัก และหันมาสนใจอุปกรณ์ภายนอกก็ต่อเมื่ออุปกรณ์ภายนอกส่งสัญญาณ เข้ามาขัดจังหวะการทำงานที่ซีพียูทำอยู่ในขณะนั้น ซึ่งซีพียูมีสิทธิที่จะยอมรับหรือปฏิเสธการขัดจังหวะนั้นก็ได้ หากว่าซีพียูยอมรับการขัดจังหวะนั้น ซีพียู จะหยุดจากการทำงานในโปรแกรมหลัก และไปทำงานในโปรแกรมย่อยซึ่งอุปกรณ์นั้น ๆ ร้องขอมา เมื่อเสร็จแล้ว ซีพียูก็จะกลับมาทำโปรแกรมเดิมที่หยุดไป ต่อไป ลักษณะเช่นนี้เรียกว่า การ Interrupt (อินเตอร์รัพท์)

 

ประเภทของการอินเตอร์รัพท์ การอินเตอร์รัพท์สามารถแบ่งได้เป็น 2 ประเภทใหญ่ ๆ ดังนี้

1. NMI : Non-maskable Interrupt (นอท มาร์กเอเบิล อินเตอร์รัพท์) คือ การอินเตอร์รัพท์ที่ซีพียูไม่สามารถปฏิเสธได้ หากมีการอินเตอร์รัพท์ประเภทนี้มา ซีพียูต้องหยุดการทำงานของโปรแกรมที่ทำอยู่ในขณะนั้นโดยไม่มีข้อแม้ และเปลี่ยนไปทำงานให้การอุปกรณ์ที่มีการส่งอินเตอร์รัพท์เข้ามา

2. INT : Maskable Interrupt (มาร์กเอเบิล อินเตอร์รัพท์) คือ การอินเตอร์รัพท์ที่ซีพียูสามารถปฏิเสธได้ โดยปกติ ซีพียูจะมีการกำหนดว่าในขณะนั้น ซีพียูจะอยู่ในภาวะ DI : Disable Interrupt (ดิสเอเบิล อินเตอร์รัพท์) หรือ EI : Enable Interrupt (อิเนเบิล อินเตอร์รัพท์) ถ้าหากว่าในขณะที่มีการอินเตอร์รัพท์เข้ามานั้น ซีพียูอยู่ในภาวะ Disable Interrupt (ดิเอเบิล อินเตอร์รัพท์) แล้ว การอินเตอร์รัพท์นั้นก็จ ะได้รับการปฏิเสธไป แต่ถ้าเป็น Enable Interrupt (อิเนเบิล อินเตอร์รัพท์) การอินเตอร์รัพท์นั้นก็เปลี่ยนไปทำงานให้อุปกรณ์นั้นแทน

การจัดลําดับความสําคัญของการ Interrupt (อินเตอร์รัพท์)

      - แม้ว่าซีพียูจะสามารถแยกแยะได้ว่าอุปกรณ์ใดเป็นผู้ส่งสัญญาณอินเตอร์รัพท์แล้วก็ตาม แต่ในทางปฏิบัติแล้ว เมื่อมีอุปกรณ์มากกว่าหนึ่งอุปกรณ์ต้องการจะติดต่อกับซีพียูพร้อม ๆ กัน ปัญหาว่าซีพียูจะติดต่อกับอุปกรณ์ใดก่อนก็จะเกิดขึ้น จึงต้องมีการจัดให้ความสําคัญต่ออุปกรณ ์ไม่เท่ากัน Priority Arbitration (โพลิตี้ อบิทเทชัน)
     - อุปกรณ์ภายนอกจะไม่ได้ต่อสัญญาณอินเตอร์รัพท์ของตนเข้าโดยตรงกับซีพียู แต่จะต่อผ่านวงจรจัดลําดับความสําคัญ ถ้ามีอุปกรณ์หลายตัวต้องการ ที่จะส่งสัญญาณอินเตอร์รัพท์ (INT) เข้าซีพียูพร้อม ๆ กัน วงจรจัดลําดับความสําคัญจะส่งผ่านสัญญาณอินเตอร์รัพท์ และ Interrupt Vector (อินเตอร์รัพท์ เวกเตอร์) ของอุปกรณ์ที่มีความสําคัญ Priority (โพลิตี้) สูงสุดไปยังซีพียู ซีพียูจะตอบรับ และให้บริการอุปกรณ์ที่ส่งอินเตอร์รัพท์นั้นมาให้เสร็จสิ้นเสียก่อน แลัวจึงเริ่มให้ความสนใจแก่อินเตอร์รัพท์ของอุปกรณ์ที่มีความสําคัญรองลงไปตามลําดับ

การควบคุม Interrupt (อินเตอร์รัพท์)

     การควบคุมการอินเตอร์รัพท์คือการควบคุมซีพียูว่าจะให้ตอบรับอินเตอร์รัพท์หรือไม่ เนื่องจากในบางขณะที่ซีพียูกําลังทำงานที่ต่อเนื่องอยู่
คําสั่งที่ใช้ในการเซ็ตหรือรีเซ็ตแฟล็กอินเตอร์รัพท์นั้นเรียกว่า คําสั่งอินเตอร์รัพท์ ซึ่งได้แก่
     - DI : Disable Interrupt (ดิเอเบิล อินเตอร์รัพท์) เป็นการเซ็ตให้ซีพียูอยู่ในภาวะไม่ตอบสนอง
     - EI : Enable Interrupt (อิเนเบิล อินเตอร์รัพท์) ใช้เพื่อรีเซ็ตแฟล็กให้อยู่ในภาวะตอบสนอง

หลักการทำงานของ Interrupt (อินเตอร์รัพท์)

     ในไมโครโปรเซสเซอร์แทบจะทุกประเภทนั้น การอินเตอร์รัพท์จะเกิดขึ้นโดยอุปกรณ์อินพุท เอาท์พุท ได้ส่งสัญญาณอิเลกทรอนิกส์เพื่อไปเปลี่ยนระดับสัญญาณที่ขาใดขาหนึ่งของไมโครโปรเซสเซอร์ เรียกว่า ขาอินเตอร์รัพท์ Interrupt Pin (อินเตอร์รัพท์ พิน) เพื่อเป็นการแจ้งแก่ไมโครโปรเซสเซอร์ถึงการอินเตอร์รัพท์ โดยจะมีขั้นตอนต่าง ๆ ดังนี้
     1. วงจรภายนอกส่งสัญญาณอินเตอร์รัพท์มายังซีพียู
     2. หากซีพียูอยู่ในสภาวะ EI : Enable Interrupt (อิเนเบิล) ก็จะตอบรับการอินเตอร์รัพท์ด้วยการส่งสัญญาณ Interrupt Acknowledge (อินเตอร์รัพท์ แอคนอเรท) กลับไปยังวงจรภายนอก
     3. เซ็ตซีพียูให้อยู่ในสภาวะ DI : Disable Interrupt (ดิเชเบิล) เพื่อป้องกันการอินเตอร์รัพท์ซ้อน
     4. หยุดการทำงานในโปรแกรมหลัก
     5. วงจรภายนอกส่งอินเตอร์รัพท์เวกเตอร์มาให้ซีพียูเพื่อบอกตําแหน่งที่จะให้ซีพียูกระโดดไป
     6. ซีพียูส่งค่าในรีจิสเตอร์ PC และรีจิสเตอร์ทั่วไป ไปเก็บไว้ในสแต็ก
     7. ไปทำงานในโปรแกรมย่อยเพื่อบริการอุปกรณ์ที่ส่งอินเตอร์รัพท์เข้ามาจนเสร็จ
     8. รับค่าที่ไปเก็บไว้ในสแต็กคืนสู่รีจิสเตอร์ PC และ รีจิสเตอร์ทั่วไปตามเดิม
     9. เซ็ตซีพียูให้กลับสู่สภาวะ Enable Interrut (อิเนเบิล อินเตอร์รัพท์)
     10. ทำงานในโปรแกรมหลักที่ค้างอยู่ต่อไป

ตำแหน่งของโปรแกรมย่อยในการ Interrupt (อินเตอร์รัพท์)

     การที่ซีพียูจะรู้ได้ว่าโปรแกรมย่อยจากการอินเตอร์รัพท์มีตำแหน่งอยู่ที่ใดในหน่วยความจำนั้น ส่วนแรกขึ้นอยู่กับชนิดของไมโครโปรเซสเซอร์ นั้นๆ ผู้ผลิตไมโครโปรเซสเซอร์แต่ละชนิดหรือแต่ละรายก็จะมีการกำหนดลักษณะการอ้างถึงตำแหน่งแตกต่างกันออกไป โดยอาจจะกำหนดดังนี้
     - ผู้ผลิตจะกำหนดไว้ว่าโปรแกรมย่อยของการอินเตอร์รัพท์จะต้องเก็บไว้ที่ตำแหน่งใดตำแหน่งหนึ่งตลอดทั้งโปรแกรม
     - เขียนเป็นเพียงคำสั่งกระโดดเพียงคำสั่งเดียวเพื่อกระโดดไปยังตำแหน่งอื่นที่เก็บโปรแกรมย่อยไว้ วิธีนี้จะเป็นที่นิยมมากสุด
     - ต่อชิ้นส่วนฮาร์ดแวร์เพื่อชี้ตำแหน่งที่เก็บโปรแกรมย่อยการอินเตอร์รัพท์ในหน่วยความจำซึ่งอาจเก็บไว้ที่ใดก็ได้

การ Interrupt (อินเตอร์รัพท์) จากหลายอุปกรณ์

     ในซีพียูจะมีขาที่ใช้รับสัญญาณอินเตอร์รัพท์เพียงขาเดียว ดังนั้นในกรณีที่มีอุปกรณ์หลายอุปกรณ์ร้องขอการอินเตอร์รัพท์เข้ามา ทุกๆอุปกรณ์ก็จะ ต้องป้อนสัญญาณอินเตอร์รัพท์ให้แก่ซีพียูที่ขาเดียวกันนี้ จึงมีปัญหาเกิดขึ้น วิธีการจำแนกสามารถทำได้หลายวิธี แต่แบ่งวิธีที่สำคัญออกเป็น 2 วิธี คือ
     1. การ Polling (โพลลิง) หมายถึง การที่ซีพียูจะตรวจสอบการแฟล็กการขออินเตอร์รัพท์ของหน่วยรับส่งข้อมุลเข้าออก เมื่อตรวจพบแล้ว ป้อนค่าจากรีจิสเตอร์ต่างๆภายในซีพียูไปเก็บไว้ที่สแต็ก ในขณะเดียวกันก็จะจัดลำดับความสำคัญก่อนหลัง Priority (โพลิตี้) ของอินเตอร์รัพท์จากอุปกรณ์ต่าง ๆ ที่ร้องขอมา เพื่อในกรณีที่ทีการอินเตอร์รัพท์เข้ามาพร้อม ๆ กัน
     2. ฮาร์ดแวร์ วิธีฮาร์ดแวร์จะมีวงจรอิเลิกทรอนิกส์เพิ่มเติมเพื่อช่วยค้นหาว่าสัญญาณอินเตอร์รัพท์ถูกส่งมาจากอุปกรณ์ไหน เทื่อซีพียูได้รับสัญญาณอินเตอร์รัพท์ ( INT) ก็จะส่งสัญญาณตอบสนองอินเตอร์รัพท์ INTA = Interrupt Acknowledge (อินเตอร์รัพท์ แอคนอเรท) จนกว่าจะจะพบว่าอุปกรณ์ใดเป็นผู้ส่งสัญญาณอินเตอร์รัพท์มา

สรุป
     จากการที่คอมพิวเตอร์เป็นอุปกรณ์ที่สามารถทํางานได้รวดเร็วมาก จึงสามารถทํางานพร้อมกันได้หลาย ๆ อย่าง ทั้งที่สามารถมองเห็นได้ชัดเจน และที่มองไม่เห็น ดังนั้นหากไม่มีการจัดการการอินเตอร์รัพท์ให้ดีแล้ว ประสิทธิภาพของคอมพิวเตอร์ก็ย่อมที่จะลดลงกว่าที่ควร จะเป็นหรืออาจก่อให้เกิดผลเสียต่างได้ ซึ่งถึงแม้บางอย่างอาจจะไม่มากจนเราสังเกตเห็นได้ แต่เพียงเล็กน้อยหากสะสมไปเรื่อยๆ ก็ย่อมจะกลายเป็นมากได้เช่นกัน

อ้างอิง
cpe.ku.ac.th

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
คำสั่งสร้างชื่อผู้ใช้ใน postgres Command Create User on PostgreSQL
โดย mindphp จ 09 ธ.ค. 2019 4:48 am บอร์ด PostgreSQL
2
13
จ 09 ธ.ค. 2019 5:39 am โดย mindphp
วิธีใช้โปรแกรม Weka ในการทำนายข้อมูล
โดย Grammanano ส 07 ธ.ค. 2019 6:54 pm บอร์ด Share Knowledge
0
13
ส 07 ธ.ค. 2019 6:54 pm โดย Grammanano
พื้นฐาน RML เพื่อทำใบปริ้นท์ในระบบ ERP
โดย Grammanano ส 07 ธ.ค. 2019 4:58 pm บอร์ด M098 - อนงค์นาท ไฝขาว
1
9
ส 07 ธ.ค. 2019 5:47 pm โดย Grammanano
แนะนำฟีเจอร์ Coupons ของ MooZiiCart ตัวช่วย ทำ คูปองส่วนลด ในเว็บขายของ สำหรับร้านค้าออนไลน์ ที่จะกระตุ้นยอดขายบางช่วง
โดย prmindphp ส 07 ธ.ค. 2019 3:56 pm บอร์ด MindPHP News & Feedback
0
20
ส 07 ธ.ค. 2019 3:56 pm โดย prmindphp
ใน ปล๊กอิน เราสามารถนำข้อความในไฟล์ภาษาออกมาแสดงได้อย่างไร ครับ
โดย jamepiyawat ส 07 ธ.ค. 2019 2:21 pm บอร์ด Joomla Development
0
14
ส 07 ธ.ค. 2019 2:21 pm โดย jamepiyawat
Block IP เข้าเว็บ เซิร์ฟเวอร์ เป็นข่วง ด้วย .htaccess
โดย mindphp ส 07 ธ.ค. 2019 2:12 pm บอร์ด Linux - Web Server
2
1421
อ 08 ธ.ค. 2019 11:17 am โดย mindphp
ภาพประกอบ Extensions
โดย numtan5839 ส 07 ธ.ค. 2019 11:19 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
0
2
ส 07 ธ.ค. 2019 11:19 am โดย numtan5839
งานประจำวันที่ 7 ธันวาคม 2562
โดย numtan5839 ส 07 ธ.ค. 2019 10:15 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
3
8
ส 07 ธ.ค. 2019 7:02 pm โดย numtan5839
งานประจำวันที่ 7 ธันวาคม 2562
โดย Grammanano ส 07 ธ.ค. 2019 10:05 am บอร์ด M098 - อนงค์นาท ไฝขาว
6
28
อ 08 ธ.ค. 2019 4:40 pm โดย mindphp
คำว่า extension ผิดค่ะ
โดย numtan5839 ศ 06 ธ.ค. 2019 8:17 pm บอร์ด MindPHP News & Feedback
1
21
ส 07 ธ.ค. 2019 1:20 am โดย mindphp
ทำอย่างไรให้ google slide นั้นสามารถแสดงหน้าที่เรากำหนดได้ ผ่าน url ครับ
โดย jamepiyawat ศ 06 ธ.ค. 2019 5:23 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
1
1425
ส 07 ธ.ค. 2019 5:42 pm โดย numtan5839
การทำนายข้อมูลแบบ Dicision Tree ด้วยโปรแกรม Weka
โดย Grammanano ศ 06 ธ.ค. 2019 5:16 pm บอร์ด Share Knowledge
0
13
ศ 06 ธ.ค. 2019 5:16 pm โดย Grammanano
ทำไม แปลงวันเดือนปีเป็นวันที่ ตามระบบของ Joomla แล้ววันถึงถอยไปวันหนึ่งครับ
โดย jamepiyawat ศ 06 ธ.ค. 2019 3:23 pm บอร์ด Joomla Development
1
19
ศ 06 ธ.ค. 2019 4:51 pm โดย thatsawan
คำสั่งพื้นฐานในการใช้ Matlab เพื่อการทำ Image Processing
โดย Grammanano ศ 06 ธ.ค. 2019 3:20 pm บอร์ด Share Knowledge
0
1427
ศ 06 ธ.ค. 2019 3:20 pm โดย Grammanano
Introducing the Module Weather Forcecast.
โดย numtan5839 ศ 06 ธ.ค. 2019 2:34 pm บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
3
13
ส 07 ธ.ค. 2019 3:25 pm โดย numtan5839
เขียนบทความ แต่พอ save แล้วเนื้อหาไม่แสดง
โดย numtan5839 ศ 06 ธ.ค. 2019 2:30 pm บอร์ด MindPHP News & Feedback
0
14
ศ 06 ธ.ค. 2019 2:30 pm โดย numtan5839
จะทำอย่างไรให้ดึงข้อความ 10 ตัวท้ายได้ครับ
โดย jamepiyawat ศ 06 ธ.ค. 2019 11:39 am บอร์ด Programming - PHP
3
1428
ศ 06 ธ.ค. 2019 2:04 pm โดย jamepiyawat
จะทำอย่างไรให้ Plugin Content Change Log แสดงข้อความด้านบนได้ ครับ
โดย jamepiyawat ศ 06 ธ.ค. 2019 11:03 am บอร์ด Joomla Development
1
1424
ศ 06 ธ.ค. 2019 7:42 pm โดย thatsawan
งานประจำวันที่ 6 ธันวาคม 2562
โดย Grammanano ศ 06 ธ.ค. 2019 9:43 am บอร์ด M098 - อนงค์นาท ไฝขาว
5
33
ส 07 ธ.ค. 2019 6:59 pm โดย Grammanano
งานประจำวันที่ 6 ธันวาคม 2562
โดย numtan5839 ศ 06 ธ.ค. 2019 9:34 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
10
33
ศ 06 ธ.ค. 2019 7:42 pm โดย numtan5839