ความแตกต่างระหว่างกับดักและขัดจังหวะคืออะไร?
หากคำศัพท์นั้นแตกต่างกันสำหรับระบบที่แตกต่างกันพวกมันหมายถึงอะไรใน x86?
ความแตกต่างระหว่างกับดักและขัดจังหวะคืออะไร?
หากคำศัพท์นั้นแตกต่างกันสำหรับระบบที่แตกต่างกันพวกมันหมายถึงอะไรใน x86?
คำตอบ:
กับดักเป็นข้อยกเว้นในกระบวนการของผู้ใช้ มันเกิดจากการหารด้วยศูนย์หรือการเข้าถึงหน่วยความจำที่ไม่ถูกต้อง นอกจากนี้ยังเป็นวิธีปกติในการเรียกใช้รูทีนเคอร์เนล (การเรียกของระบบ ) เนื่องจากการรันที่มีลำดับความสำคัญสูงกว่ารหัสผู้ใช้ การจัดการแบบซิงโครนัส (ดังนั้นรหัสผู้ใช้จะถูกระงับและดำเนินการต่อในภายหลัง) ในแง่ที่พวกเขา "ใช้งาน" - ส่วนใหญ่รหัสคาดว่ากับดักจะเกิดขึ้นและอาศัยความจริงนี้
การขัดจังหวะเป็นสิ่งที่สร้างขึ้นโดยฮาร์ดแวร์ (อุปกรณ์เช่นฮาร์ดดิสก์การ์ดกราฟิกพอร์ต I / O ฯลฯ ) สิ่งเหล่านี้เป็นแบบอะซิงโครนัส (เช่นจะไม่เกิดขึ้นที่ตำแหน่งที่คาดเดาได้ในรหัสผู้ใช้) หรือ "แฝง" เนื่องจากตัวจัดการขัดจังหวะต้องรอให้เกิดขึ้นในที่สุด
นอกจากนี้คุณยังสามารถเห็นกับดักเป็นอินเทอร์รัปต์ภายใน CPU เนื่องจากตัวจัดการสำหรับตัวจัดการกับดักดูเหมือนตัวจัดการอินเทอร์รัปต์ (บันทึกตัวชี้และสแต็กพอยน์เตอร์แล้วจะมีบริบทสลับอยู่ .
กับดักและขัดจังหวะเกี่ยวข้องอย่างใกล้ชิด กับดักเป็นประเภทของข้อยกเว้นและข้อยกเว้นคล้ายกับการขัดจังหวะ
อินเทล x86 กำหนดสองประเภทที่ทับซ้อนกัน, กิจกรรมเวกเตอร์ ( ขัดจังหวะ VS ข้อยกเว้น ) และการเรียนการยกเว้น ( ความผิดพลาดเทียบกับดัก VS ยกเลิก )
ทั้งหมดของคำพูดในโพสต์นี้มาจากรุ่นเมษายน 2016 ของคู่มือการใช้งานสำหรับนักพัฒนาซอฟแวร์ของอินเทล สำหรับมุมมอง x86 (ชัดเจนและซับซ้อน) ฉันขอแนะนำให้อ่านบทของ SDM เกี่ยวกับการจัดการอินเตอร์รัปต์และข้อยกเว้น
เหตุการณ์ที่ถูก Vectored (การขัดจังหวะและข้อยกเว้น ) ทำให้โปรเซสเซอร์ข้ามไปยังตัวจัดการขัดจังหวะหลังจากบันทึกสถานะของโปรเซสเซอร์เป็นจำนวนมาก
ข้อยกเว้นและการขัดจังหวะมี ID ที่เรียกว่าเวกเตอร์ซึ่งเป็นตัวกำหนดว่าตัวจัดการขัดจังหวะตัวใด ตัวจัดการอินเตอร์รัปต์อธิบายไว้ในตารางตัวอธิบายอินเทอร์รัปต์
การขัดจังหวะเกิดขึ้นในช่วงเวลาสุ่มระหว่างการทำงานของโปรแกรมเพื่อตอบสนองสัญญาณจากฮาร์ดแวร์ ฮาร์ดแวร์ของระบบใช้อินเทอร์รัปต์เพื่อจัดการเหตุการณ์ภายนอกตัวประมวลผลเช่นการร้องขอไปยังอุปกรณ์ต่อพ่วงบริการ ซอฟต์แวร์ยังสามารถสร้างการขัดจังหวะโดยดำเนินการคำสั่ง INT n
ข้อยกเว้นเกิดขึ้นเมื่อโปรเซสเซอร์ตรวจพบเงื่อนไขข้อผิดพลาดขณะดำเนินการคำสั่งเช่นการหารด้วยศูนย์ โปรเซสเซอร์ตรวจพบเงื่อนไขข้อผิดพลาดที่หลากหลายรวมถึงการละเมิดการป้องกันข้อผิดพลาดของหน้าและความผิดพลาดภายในของเครื่อง
ยกเว้นจะจัดเป็นความผิดพลาด , กับดักหรือยกเลิกขึ้นอยู่กับวิธีที่พวกเขาจะมีการรายงานและไม่ว่าการเรียนการสอนที่ทำให้เกิดข้อยกเว้นสามารถเริ่มต้นใหม่โดยไม่สูญเสียของโปรแกรมหรืองานต่อเนื่อง
สรุป: กับดักเพิ่มตัวชี้คำแนะนำความผิดพลาดไม่ทำและยกเลิก 'ระเบิด'
กับดักเป็นข้อยกเว้นว่าจะมีการรายงานทันทีต่อการดำเนินการของการเรียนการสอนดัก กับดักช่วยให้การดำเนินการของโปรแกรมหรืองานที่จะดำเนินการต่อโดยไม่สูญเสียความต่อเนื่องของโปรแกรม ที่อยู่ผู้ส่งคืนสำหรับตัวจัดการกับดักชี้ไปที่คำสั่งที่จะดำเนินการหลังจากคำสั่งการดักจับ
ความผิดเป็นข้อยกเว้นที่สามารถทั่วไปได้รับการแก้ไขและว่าเมื่อแก้ไขช่วยให้โปรแกรมที่จะเริ่มต้นใหม่กับการสูญเสียของความต่อเนื่องไม่มี เมื่อรายงานข้อผิดพลาดตัวประมวลผลจะเรียกคืนสถานะของเครื่องกลับสู่สถานะก่อนที่จะเริ่มต้นการดำเนินการตามคำสั่งข้อบกพร่อง ที่อยู่ผู้ส่งคืน (เนื้อหาที่บันทึกไว้ของการลงทะเบียน CS และ EIP) สำหรับตัวจัดการความผิดพลาดชี้ไปที่คำสั่งการบกพร่อง
ตัวอย่าง: ความผิดพลาดหน้ามักจะสามารถกู้คืนได้ พื้นที่ที่อยู่ของแอปพลิเคชันบางส่วนอาจถูกสลับไปยังดิสก์จาก RAM แอปพลิเคชันจะทริกเกอร์ข้อผิดพลาดของหน้าเว็บเมื่อพยายามเข้าถึงหน่วยความจำที่เปลี่ยนไป เคอร์เนลสามารถดึงหน่วยความจำนั้นจากดิสก์ไปยัง RAM และควบคุมมือกลับไปที่แอปพลิเคชัน แอปพลิเคชันจะดำเนินการต่อจากจุดที่ค้างไว้ (ตามคำแนะนำการแก้ไขข้อผิดพลาดที่เข้าถึงหน่วยความจำที่สลับเปลี่ยน) แต่คราวนี้การเข้าถึงหน่วยความจำควรสำเร็จโดยไม่ผิดพลาด
การยกเลิกเป็นข้อยกเว้นที่ไม่ได้รายงานตำแหน่งที่แน่นอนของคำสั่งที่ทำให้เกิดข้อยกเว้นเสมอไปและไม่อนุญาตให้เริ่มต้นโปรแกรมหรืองานใหม่ที่ทำให้เกิดข้อยกเว้น การยกเลิกใช้เพื่อรายงานข้อผิดพลาดที่รุนแรงเช่นข้อผิดพลาดของฮาร์ดแวร์และค่าที่ไม่สอดคล้องกันหรือผิดกฎหมายในตารางระบบ
ซอฟต์แวร์ที่เรียกใช้อินเตอร์รัปต์ (เรียกใช้โดยคำสั่ง INT) ทำงานในลักษณะคล้ายกับดัก คำสั่งเสร็จสมบูรณ์ก่อนที่ตัวประมวลผลจะบันทึกสถานะและข้ามไปยังตัวจัดการขัดจังหวะ
โดยทั่วไปคำเช่นข้อยกเว้นความผิดพลาดถูกยกเลิก, กับดักและInterruptsทั้งหมดหมายถึงสิ่งเดียวกันและจะเรียกว่า "Interrupts"
ความแตกต่างระหว่างกับดักและการขัดจังหวะ:
Trap: เป็นโปรแกรมเมอร์ที่เริ่มต้นและคาดว่าจะส่งการควบคุมไปยังรูทีนตัวจัดการพิเศษ (สำหรับตัวอย่าง: คำสั่งINT 80x86 เป็นตัวอย่างที่ดี)
อยู่ที่ไหน
อินเตอร์รัปต์ (ฮาร์ดแวร์): เป็นโปรแกรมควบคุมการขัดจังหวะโดยอาศัยเหตุการณ์ฮาร์ดแวร์ภายนอกภายนอก CPU (ตัวอย่างเช่น: การกดปุ่มบนคีย์บอร์ดหรือการหมดเวลาของชิปจับเวลา)
กับดักเป็นชนิดพิเศษของการขัดจังหวะซึ่งมักจะเรียกว่าเป็นขัดจังหวะซอฟแวร์ การขัดจังหวะเป็นคำทั่วไปที่ครอบคลุมทั้งการขัดจังหวะฮาร์ดแวร์ (การขัดจังหวะจากอุปกรณ์ฮาร์ดแวร์) และการขัดจังหวะของซอฟต์แวร์ (การขัดจังหวะจากซอฟต์แวร์เช่นกับดัก )
กับดักถูกเรียกโดยรหัสเช่นโปรแกรมและใช้เช่นการเรียกรูทีนระบบปฏิบัติการ (เช่นปกติซิงโครนัส) เหตุการณ์ถูกขัดจังหวะโดยเหตุการณ์ (ฮาร์ดแวร์หลายครั้งเช่นการ์ดเครือข่ายที่ได้รับข้อมูลหรือตัวจับเวลา CPU) และ - ตามชื่อแนะนำ - ขัดจังหวะการควบคุมตามปกติเนื่องจาก CPU ต้องสลับไปที่รูทีนไดรเวอร์เพื่อจัดการ เหตุการณ์.
การขัดจังหวะคือการเปลี่ยนแปลงการไหลของฮาร์ดแวร์ที่สร้างขึ้นภายในระบบ ตัวจัดการขัดจังหวะถูกเรียกให้จัดการกับสาเหตุของการขัดจังหวะ การควบคุมจะถูกส่งกลับไปยังบริบทที่ถูกขัดจังหวะและคำสั่ง กับดักเป็นซอฟต์แวร์ที่สร้างขึ้นขัดจังหวะ การขัดจังหวะสามารถใช้เพื่อส่งสัญญาณความสมบูรณ์ของ I / O เพื่อขจัดความจำเป็นในการสำรวจอุปกรณ์ กับดักสามารถใช้เพื่อเรียกรูทีนระบบปฏิบัติการหรือเพื่อตรวจจับข้อผิดพลาดทางคณิตศาสตร์
ฉันคิดว่ากับดักเกิดจากการดำเนินการตามคำสั่งปัจจุบันดังนั้นจึงถูกเรียกว่าเป็นเหตุการณ์ซิงโครนัส โดยที่การขัดจังหวะเกิดจากคำสั่งอิสระที่ทำงานในโปรเซสเซอร์ซึ่งเกี่ยวข้องกับเหตุการณ์ภายนอกและเป็นที่รู้จักกันในชื่ออะซิงโครนัส
การขัดจังหวะเป็นการขัดจังหวะฮาร์ดแวร์ขณะที่การดักจับเป็นการขัดจังหวะโดยซอฟต์แวร์ การเกิดขึ้นของการขัดจังหวะฮาร์ดแวร์มักจะปิดการใช้งานการขัดจังหวะฮาร์ดแวร์อื่น ๆ แต่นี่ไม่เป็นความจริงสำหรับกับดัก หากคุณต้องการไม่อนุญาตให้ฮาร์ดแวร์ขัดจังหวะจนกว่าจะมีการให้บริการกับดักคุณจะต้องล้างการตั้งค่าสถานะอินเตอร์รัปต์อย่างชัดเจน และโดยปกติแล้วสถานะการขัดจังหวะบนคอมพิวเตอร์จะส่งผลต่อ (ฮาร์ดแวร์) การขัดจังหวะเมื่อเทียบกับกับดัก ซึ่งหมายความว่าการล้างค่าสถานะนี้จะไม่ป้องกันกับดัก การขัดจังหวะควรรักษาสถานะก่อนหน้าของ CPU
กับดักเป็นซอฟต์แวร์ขัดจังหวะถ้าคุณเขียนโปรแกรมที่คุณประกาศตัวแปรที่มีการหารด้วยค่าศูนย์จากนั้นก็จะถือว่าเป็นกับดักเมื่อคุณเรียกใช้โปรแกรมนี้มันจะโยนข้อผิดพลาดเดียวกันในเวลาเดียวกันระบบโทรเป็น กับดักเวอร์ชันพิเศษที่โปรแกรมร้องขอระบบปฏิบัติการสำหรับบริการที่ต้องการ ในกรณีของการขัดจังหวะ (คำทั่วไปสำหรับการขัดจังหวะฮาร์ดแวร์) เช่นข้อผิดพลาด i / o, cpu ถูกขัดจังหวะในเวลาสุ่มและนอกหลักสูตรมันไม่ใช่ความผิดของโปรแกรมเมอร์ของเรามันเป็นความผิดพลาดของโปรแกรมเมอร์