ความแตกต่างระหว่างกับดักและขัดจังหวะคืออะไร?


159

ความแตกต่างระหว่างกับดักและขัดจังหวะคืออะไร?

หากคำศัพท์นั้นแตกต่างกันสำหรับระบบที่แตกต่างกันพวกมันหมายถึงอะไรใน x86?

คำตอบ:


203

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

การขัดจังหวะเป็นสิ่งที่สร้างขึ้นโดยฮาร์ดแวร์ (อุปกรณ์เช่นฮาร์ดดิสก์การ์ดกราฟิกพอร์ต I / O ฯลฯ ) สิ่งเหล่านี้เป็นแบบอะซิงโครนัส (เช่นจะไม่เกิดขึ้นที่ตำแหน่งที่คาดเดาได้ในรหัสผู้ใช้) หรือ "แฝง" เนื่องจากตัวจัดการขัดจังหวะต้องรอให้เกิดขึ้นในที่สุด

นอกจากนี้คุณยังสามารถเห็นกับดักเป็นอินเทอร์รัปต์ภายใน CPU เนื่องจากตัวจัดการสำหรับตัวจัดการกับดักดูเหมือนตัวจัดการอินเทอร์รัปต์ (บันทึกตัวชี้และสแต็กพอยน์เตอร์แล้วจะมีบริบทสลับอยู่ .


5
เป็นที่น่าสนใจที่lxr.free-electrons.com/source/arch/x86/kernel/…การหารด้วยศูนย์จะเริ่มต้นเป็นฮาร์ดแวร์ขัดจังหวะทำไมเป็นเช่นนั้น?
Alex Kreimer

8
เพราะมันขัดจังหวะซึ่ง CPU ส่งเมื่อ ALU พบปัญหานี้ เช่นเดียวกับความผิดพลาดในการแบ่งกลุ่ม ไม่ใช่ข้อผิดพลาดทางคณิตศาสตร์ทั้งหมดที่ทำให้เกิดการขัดจังหวะ (ไม่ล้น)
Aaron Digulla

4
นั่นทำให้รู้สึก แต่สิ่งที่น่าสับสนเล็กน้อยก็คือว่าทำไมในเคอร์เนลของลีนุกซ์ก่อนหน้านี้มันถูกเริ่มต้นเป็นกับดักซอฟต์แวร์: set_trap_gate (0, & divide_error);
Alex Kreimer

11
คุณหมายถึงอะไร " สับสนเล็กน้อย "? มันสับสนมาก :-) ปัญหาที่นี่คือการหารด้วยศูนย์คือการขัดจังหวะฮาร์ดแวร์ (IRQ / เวกเตอร์ 0) แต่นักพัฒนาเคอร์เนลมีหลายทางเลือกวิธีจัดการกับมัน ดังนั้นจากกระบวนการของผู้ใช้มันเป็นกับดัก แต่จากด้าน CPU มันเป็นการขัดจังหวะ ถูกต้องใคร ไม่มี? ทั้งสอง?
แอรอน Digulla

3
แน่นอนว่านี่เป็นจริงสำหรับ x86 CPU เท่านั้น ซีพียูอื่นทำงานแตกต่างกัน
Aaron Digulla

110

กับดักและขัดจังหวะเกี่ยวข้องอย่างใกล้ชิด กับดักเป็นประเภทของข้อยกเว้นและข้อยกเว้นคล้ายกับการขัดจังหวะ

อินเทล x86 กำหนดสองประเภทที่ทับซ้อนกัน, กิจกรรมเวกเตอร์ ( ขัดจังหวะ VS ข้อยกเว้น ) และการเรียนการยกเว้น ( ความผิดพลาดเทียบกับดัก VS ยกเลิก )

ทั้งหมดของคำพูดในโพสต์นี้มาจากรุ่นเมษายน 2016 ของคู่มือการใช้งานสำหรับนักพัฒนาซอฟแวร์ของอินเทล สำหรับมุมมอง x86 (ชัดเจนและซับซ้อน) ฉันขอแนะนำให้อ่านบทของ SDM เกี่ยวกับการจัดการอินเตอร์รัปต์และข้อยกเว้น

เหตุการณ์ Vectored

เหตุการณ์ที่ถูก Vectored (การขัดจังหวะและข้อยกเว้น ) ทำให้โปรเซสเซอร์ข้ามไปยังตัวจัดการขัดจังหวะหลังจากบันทึกสถานะของโปรเซสเซอร์เป็นจำนวนมาก

ข้อยกเว้นและการขัดจังหวะมี ID ที่เรียกว่าเวกเตอร์ซึ่งเป็นตัวกำหนดว่าตัวจัดการขัดจังหวะตัวใด ตัวจัดการอินเตอร์รัปต์อธิบายไว้ในตารางตัวอธิบายอินเทอร์รัปต์

ขัดจังหวะ

การขัดจังหวะเกิดขึ้นในช่วงเวลาสุ่มระหว่างการทำงานของโปรแกรมเพื่อตอบสนองสัญญาณจากฮาร์ดแวร์ ฮาร์ดแวร์ของระบบใช้อินเทอร์รัปต์เพื่อจัดการเหตุการณ์ภายนอกตัวประมวลผลเช่นการร้องขอไปยังอุปกรณ์ต่อพ่วงบริการ ซอฟต์แวร์ยังสามารถสร้างการขัดจังหวะโดยดำเนินการคำสั่ง INT n

ข้อยกเว้น

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

การจำแนกประเภทข้อยกเว้น

ยกเว้นจะจัดเป็นความผิดพลาด , กับดักหรือยกเลิกขึ้นอยู่กับวิธีที่พวกเขาจะมีการรายงานและไม่ว่าการเรียนการสอนที่ทำให้เกิดข้อยกเว้นสามารถเริ่มต้นใหม่โดยไม่สูญเสียของโปรแกรมหรืองานต่อเนื่อง

สรุป: กับดักเพิ่มตัวชี้คำแนะนำความผิดพลาดไม่ทำและยกเลิก 'ระเบิด'

กับดัก

กับดักเป็นข้อยกเว้นว่าจะมีการรายงานทันทีต่อการดำเนินการของการเรียนการสอนดัก กับดักช่วยให้การดำเนินการของโปรแกรมหรืองานที่จะดำเนินการต่อโดยไม่สูญเสียความต่อเนื่องของโปรแกรม ที่อยู่ผู้ส่งคืนสำหรับตัวจัดการกับดักชี้ไปที่คำสั่งที่จะดำเนินการหลังจากคำสั่งการดักจับ

ความผิดพลาด

ความผิดเป็นข้อยกเว้นที่สามารถทั่วไปได้รับการแก้ไขและว่าเมื่อแก้ไขช่วยให้โปรแกรมที่จะเริ่มต้นใหม่กับการสูญเสียของความต่อเนื่องไม่มี เมื่อรายงานข้อผิดพลาดตัวประมวลผลจะเรียกคืนสถานะของเครื่องกลับสู่สถานะก่อนที่จะเริ่มต้นการดำเนินการตามคำสั่งข้อบกพร่อง ที่อยู่ผู้ส่งคืน (เนื้อหาที่บันทึกไว้ของการลงทะเบียน CS และ EIP) สำหรับตัวจัดการความผิดพลาดชี้ไปที่คำสั่งการบกพร่อง

ตัวอย่าง: ความผิดพลาดหน้ามักจะสามารถกู้คืนได้ พื้นที่ที่อยู่ของแอปพลิเคชันบางส่วนอาจถูกสลับไปยังดิสก์จาก RAM แอปพลิเคชันจะทริกเกอร์ข้อผิดพลาดของหน้าเว็บเมื่อพยายามเข้าถึงหน่วยความจำที่เปลี่ยนไป เคอร์เนลสามารถดึงหน่วยความจำนั้นจากดิสก์ไปยัง RAM และควบคุมมือกลับไปที่แอปพลิเคชัน แอปพลิเคชันจะดำเนินการต่อจากจุดที่ค้างไว้ (ตามคำแนะนำการแก้ไขข้อผิดพลาดที่เข้าถึงหน่วยความจำที่สลับเปลี่ยน) แต่คราวนี้การเข้าถึงหน่วยความจำควรสำเร็จโดยไม่ผิดพลาด

ยกเลิก

การยกเลิกเป็นข้อยกเว้นที่ไม่ได้รายงานตำแหน่งที่แน่นอนของคำสั่งที่ทำให้เกิดข้อยกเว้นเสมอไปและไม่อนุญาตให้เริ่มต้นโปรแกรมหรืองานใหม่ที่ทำให้เกิดข้อยกเว้น การยกเลิกใช้เพื่อรายงานข้อผิดพลาดที่รุนแรงเช่นข้อผิดพลาดของฮาร์ดแวร์และค่าที่ไม่สอดคล้องกันหรือผิดกฎหมายในตารางระบบ

คดีขอบ

ซอฟต์แวร์ที่เรียกใช้อินเตอร์รัปต์ (เรียกใช้โดยคำสั่ง INT) ทำงานในลักษณะคล้ายกับดัก คำสั่งเสร็จสมบูรณ์ก่อนที่ตัวประมวลผลจะบันทึกสถานะและข้ามไปยังตัวจัดการขัดจังหวะ


6
นี่เป็นคำตอบที่ดีฉันบวก“ คิวตอบรับจากผู้ใช้ใหม่” คิวให้ฉันทดสอบเพื่อให้แน่ใจว่าฉันให้ความสนใจ
Noumenon

1
ขอบคุณ! นั่นหมายความว่าจำนวนมากที่จะฉัน :)
ruthafjord

นี่เป็นคำตอบที่ดีสำหรับ x86 คำถามเดิมค่อนข้างทั่วไปและไม่ได้พูดถึง x86 ฉันได้ทำการแก้ไขเพื่อพยายามสร้างสมดุล บางทีคุณอาจเพิ่มย่อหน้าอื่นที่ด้านบนของคำตอบนี้เพื่อตอบคำถามศัพท์ที่อยู่นอกโลก x86 และ / หรือปล่อยให้แก้ไขอีกคำถามถ้าคุณคิดว่าฉันทำให้มันเลวร้ายยิ่ง: PI เท่านั้นจริงๆรู้ x86 ตัวเอง แต่หวังว่ามันเป็นความจริงที่ระบบอื่น ๆ ที่ใช้คำศัพท์ที่คล้ายกันมากและคุณก็สามารถพูดได้ว่า :)
ปีเตอร์ Cordes

1
ไขมันต่ำPPCหนังสือ aarchitecture และดูเหมือนว่าคำจำกัดความของพวกเขาส่วนใหญ่จะทับซ้อนกัน พวกเขามีชื่อใหม่สำหรับกรณีขอบและปฏิบัติต่อข้อยกเว้นเช่นชนิดย่อยของการขัดจังหวะแทนที่จะเป็นส่วนหนึ่งของหมวดหมู่ที่แตกต่างกัน
ruthafjord

1
ฉันคิดว่าคำตอบนี้อธิบายได้ดีที่สุด มันกล่าวถึงสายพร่ามัวที่สามารถมีอยู่ระหว่างสอง และกล่าวถึงว่าข้อบกพร่องของเพจส่งผลให้ซีพียูพยายามดักคำสั่งอีกครั้งเพื่อข้ามกับคำสั่งและดำเนินการต่อ
in70x

9

โดยทั่วไปคำเช่นข้อยกเว้นความผิดพลาดถูกยกเลิก, กับดักและInterruptsทั้งหมดหมายถึงสิ่งเดียวกันและจะเรียกว่า "Interrupts"

ความแตกต่างระหว่างกับดักและการขัดจังหวะ:

Trap: เป็นโปรแกรมเมอร์ที่เริ่มต้นและคาดว่าจะส่งการควบคุมไปยังรูทีนตัวจัดการพิเศษ (สำหรับตัวอย่าง: คำสั่งINT 80x86 เป็นตัวอย่างที่ดี)

อยู่ที่ไหน

อินเตอร์รัปต์ (ฮาร์ดแวร์): เป็นโปรแกรมควบคุมการขัดจังหวะโดยอาศัยเหตุการณ์ฮาร์ดแวร์ภายนอกภายนอก CPU (ตัวอย่างเช่น: การกดปุ่มบนคีย์บอร์ดหรือการหมดเวลาของชิปจับเวลา)


คำจำกัดความที่ดี แหล่งที่มา?
alexlomba87

6

กับดักเป็นชนิดพิเศษของการขัดจังหวะซึ่งมักจะเรียกว่าเป็นขัดจังหวะซอฟแวร์ การขัดจังหวะเป็นคำทั่วไปที่ครอบคลุมทั้งการขัดจังหวะฮาร์ดแวร์ (การขัดจังหวะจากอุปกรณ์ฮาร์ดแวร์) และการขัดจังหวะของซอฟต์แวร์ (การขัดจังหวะจากซอฟต์แวร์เช่นกับดัก )


4
มันทำให้เกิดความสับสนมากยิ่งขึ้นซึ่งผู้เขียนบางคน (Tanenbaum) อ้างถึง "กับดักฮาร์ดแวร์" หากเราสามารถมีกับดักฮาร์ดแวร์และซอฟต์แวร์ขัดจังหวะได้ชัดเจนว่าคำจำกัดความนั้นค่อนข้างยุ่งเหยิงและสามารถไปได้ด้วยวิธีใดก็ตามต้องใช้คำว่าฮาร์ดแวร์หรือซอฟต์แวร์เสมอ
The111

3

กับดักถูกเรียกโดยรหัสเช่นโปรแกรมและใช้เช่นการเรียกรูทีนระบบปฏิบัติการ (เช่นปกติซิงโครนัส) เหตุการณ์ถูกขัดจังหวะโดยเหตุการณ์ (ฮาร์ดแวร์หลายครั้งเช่นการ์ดเครือข่ายที่ได้รับข้อมูลหรือตัวจับเวลา CPU) และ - ตามชื่อแนะนำ - ขัดจังหวะการควบคุมตามปกติเนื่องจาก CPU ต้องสลับไปที่รูทีนไดรเวอร์เพื่อจัดการ เหตุการณ์.


2

การขัดจังหวะคือการเปลี่ยนแปลงการไหลของฮาร์ดแวร์ที่สร้างขึ้นภายในระบบ ตัวจัดการขัดจังหวะถูกเรียกให้จัดการกับสาเหตุของการขัดจังหวะ การควบคุมจะถูกส่งกลับไปยังบริบทที่ถูกขัดจังหวะและคำสั่ง กับดักเป็นซอฟต์แวร์ที่สร้างขึ้นขัดจังหวะ การขัดจังหวะสามารถใช้เพื่อส่งสัญญาณความสมบูรณ์ของ I / O เพื่อขจัดความจำเป็นในการสำรวจอุปกรณ์ กับดักสามารถใช้เพื่อเรียกรูทีนระบบปฏิบัติการหรือเพื่อตรวจจับข้อผิดพลาดทางคณิตศาสตร์


2

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


2

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


1

กับดักเป็นซอฟต์แวร์ขัดจังหวะถ้าคุณเขียนโปรแกรมที่คุณประกาศตัวแปรที่มีการหารด้วยค่าศูนย์จากนั้นก็จะถือว่าเป็นกับดักเมื่อคุณเรียกใช้โปรแกรมนี้มันจะโยนข้อผิดพลาดเดียวกันในเวลาเดียวกันระบบโทรเป็น กับดักเวอร์ชันพิเศษที่โปรแกรมร้องขอระบบปฏิบัติการสำหรับบริการที่ต้องการ ในกรณีของการขัดจังหวะ (คำทั่วไปสำหรับการขัดจังหวะฮาร์ดแวร์) เช่นข้อผิดพลาด i / o, cpu ถูกขัดจังหวะในเวลาสุ่มและนอกหลักสูตรมันไม่ใช่ความผิดของโปรแกรมเมอร์ของเรามันเป็นความผิดพลาดของโปรแกรมเมอร์


1
คุณช่วยอธิบายได้อย่างไรว่าการเรียกระบบเป็นกับดัก?
Radha Gogia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.