ขัดจังหวะกับข้อยกเว้น
ในคอมพิวเตอร์ทุกเครื่อง ระหว่างการทำงานปกติของโปรแกรม อาจมีเหตุการณ์ที่อาจทำให้ CPU หยุดทำงานชั่วคราว เหตุการณ์เช่นนี้เรียกว่าอินเตอร์รัปต์ การขัดจังหวะอาจเกิดจากความผิดพลาดของซอฟต์แวร์หรือฮาร์ดแวร์ การขัดจังหวะของฮาร์ดแวร์เรียกว่า (อย่างง่าย) การขัดจังหวะ ในขณะที่ซอฟต์แวร์ขัดจังหวะเรียกว่า ข้อยกเว้น เมื่ออินเตอร์รัปต์ (ซอฟต์แวร์หรือฮาร์ดแวร์) เพิ่มขึ้น การควบคุมจะถูกโอนไปยังรูทีนย่อยพิเศษที่เรียกว่า ISR (Interrupt Service Routine) ที่สามารถจัดการกับเงื่อนไขที่เพิ่มขึ้นจากการขัดจังหวะ
ขัดจังหวะคืออะไร
คำว่า Interrupt มักจะสงวนไว้สำหรับการขัดจังหวะของฮาร์ดแวร์เป็นการหยุดชะงักของการควบคุมโปรแกรมที่เกิดจากเหตุการณ์ฮาร์ดแวร์ภายนอก ในที่นี้ ภายนอก หมายถึงภายนอกของ CPU การขัดจังหวะของฮาร์ดแวร์มักมาจากแหล่งต่างๆ เช่น ชิปจับเวลา อุปกรณ์ต่อพ่วง (แป้นพิมพ์ เมาส์ ฯลฯ) พอร์ต I/O (ซีเรียล ขนาน ฯลฯ) ดิสก์ไดรฟ์ นาฬิกา CMOS การ์ดเอ็กซ์แพนชัน (การ์ดเสียง วิดีโอ บัตร ฯลฯ) นั่นหมายถึงการขัดจังหวะของฮาร์ดแวร์แทบไม่เคยเกิดขึ้นเนื่องจากเหตุการณ์บางอย่างที่เกี่ยวข้องกับโปรแกรมที่ดำเนินการอยู่ ตัวอย่างเช่น เหตุการณ์ เช่น การกดปุ่มบนแป้นพิมพ์โดยผู้ใช้ หรือการหมดเวลาของตัวจับเวลาฮาร์ดแวร์ภายใน สามารถเพิ่มการขัดจังหวะประเภทนี้ และสามารถแจ้ง CPU ว่าอุปกรณ์บางอย่างต้องการการดูแล ในสถานการณ์เช่นนี้ CPU จะหยุดสิ่งที่เคยทำ (เช่น หยุดโปรแกรมปัจจุบันชั่วคราว) ให้บริการที่อุปกรณ์ต้องการและจะกลับสู่โปรแกรมปกติ เมื่อฮาร์ดแวร์ขัดจังหวะเกิดขึ้นและ CPU เริ่ม ISR การขัดจังหวะของฮาร์ดแวร์อื่นๆ จะถูกปิดใช้งาน (เช่น ในเครื่องขนาด 80×86) หากคุณต้องการให้ฮาร์ดแวร์ขัดจังหวะอื่นๆ เกิดขึ้นในขณะที่ ISR กำลังทำงาน คุณต้องดำเนินการดังกล่าวให้ชัดเจนโดยล้างแฟล็กการขัดจังหวะ (ด้วยคำสั่ง sti)ในเครื่องขนาด 80×86 การล้างค่าสถานะอินเตอร์รัปต์จะส่งผลต่อการขัดจังหวะของฮาร์ดแวร์เท่านั้น
ข้อยกเว้นคืออะไร
Exception เป็นซอฟต์แวร์ขัดจังหวะ ซึ่งสามารถระบุได้ว่าเป็นรูทีนตัวจัดการพิเศษ ข้อยกเว้นสามารถระบุได้ว่าเป็นกับดักที่เกิดขึ้นโดยอัตโนมัติ (กับดักสามารถระบุได้ว่าเป็นการถ่ายโอนการควบคุม ซึ่งเริ่มต้นโดยโปรแกรมเมอร์) โดยทั่วไป ไม่มีคำแนะนำเฉพาะที่เกี่ยวข้องกับข้อยกเว้น (กับดักถูกสร้างขึ้นโดยใช้คำสั่งเฉพาะ) ดังนั้น ข้อยกเว้นเกิดขึ้นเนื่องจากเงื่อนไข "พิเศษ" ที่เกิดขึ้นระหว่างการทำงานของโปรแกรม ตัวอย่างเช่น การหารด้วยศูนย์ การดำเนินการ opcode ที่ผิดกฎหมายหรือข้อผิดพลาดที่เกี่ยวข้องกับหน่วยความจำอาจทำให้เกิดข้อยกเว้น เมื่อใดก็ตามที่มีข้อยกเว้น CPU จะระงับโปรแกรมที่ดำเนินการอยู่ชั่วคราวและเริ่ม ISR ISR จะมีสิ่งที่ต้องทำโดยมีข้อยกเว้น อาจแก้ไขปัญหาได้หรือหากไม่สามารถทำได้ อาจยกเลิกโปรแกรมอย่างงดงามโดยการพิมพ์ข้อความแสดงข้อผิดพลาดที่เหมาะสมแม้ว่าคำสั่งเฉพาะจะไม่ทำให้เกิดข้อยกเว้น แต่ข้อยกเว้นจะเกิดจากคำสั่งเสมอ ตัวอย่างเช่น ข้อผิดพลาดการหารด้วยศูนย์สามารถเกิดขึ้นได้ระหว่างการดำเนินการคำสั่งการหารเท่านั้น
Interrupt และ Exception ต่างกันอย่างไร
การขัดจังหวะเป็นการขัดจังหวะของฮาร์ดแวร์ ในขณะที่ข้อยกเว้นคือการขัดจังหวะของซอฟต์แวร์ การขัดจังหวะของฮาร์ดแวร์มักจะปิดใช้งานการขัดจังหวะของฮาร์ดแวร์อื่นๆ แต่กรณีนี้ไม่เป็นความจริงสำหรับข้อยกเว้น หากคุณต้องการไม่อนุญาตการขัดจังหวะของฮาร์ดแวร์จนกว่าจะมีการแสดงข้อยกเว้น คุณต้องล้างการตั้งค่าสถานะขัดจังหวะอย่างชัดเจน และโดยปกติค่าสถานะการขัดจังหวะบนคอมพิวเตอร์จะส่งผลต่อ (ฮาร์ดแวร์) การขัดจังหวะซึ่งต่างจากข้อยกเว้น ซึ่งหมายความว่าการล้างแฟล็กนี้จะไม่ป้องกันข้อยกเว้น