อ่าน 4 นาที
ตารางคำอธิบายการขัดจังหวะ
ตาราง ตัวอธิบายการขัดจังหวะ ( IDT ) เป็น โครงสร้างข้อมูล ที่ใช้โดย สถาปัตยกรรม x86 เพื่อสร้าง ตารางเวกเตอร์การขัดจังหวะ โปรเซสเซอร์ใช้ IDT...
ตารางคำอธิบายการขัดจังหวะ
ตารางตัวอธิบายการขัดจังหวะ ( IDT ) เป็นโครงสร้างข้อมูลที่ใช้โดย สถาปัตยกรรม x86เพื่อสร้างตารางเวกเตอร์การขัดจังหวะโปรเซสเซอร์ใช้ IDT เพื่อกำหนดที่อยู่หน่วยความจำของตัวจัดการที่จะถูกเรียกใช้เมื่อเกิดการขัดจังหวะและข้อ ยกเว้น
รายละเอียดในคำอธิบายด้านล่างนี้ใช้ได้เฉพาะกับสถาปัตยกรรม x86 เท่านั้น สถาปัตยกรรมอื่นๆ มีโครงสร้างข้อมูลที่คล้ายกัน แต่การทำงานอาจแตกต่างกันไป
IDT ประกอบด้วยเวกเตอร์การขัดจังหวะ 256 ตัว และการใช้งาน IDT จะถูกกระตุ้นด้วยเหตุการณ์สามประเภท ได้แก่ ข้อผิดพลาดของโปรเซสเซอร์ การขัดจังหวะของฮาร์ดแวร์ และการขัดจังหวะของซอฟต์แวร์ ซึ่งรวมเรียกว่าการ ขัดจังหวะ
- ข้อยกเว้นของโปรเซสเซอร์ที่สร้างโดย CPU มีการแมปคงที่ไปยังเวกเตอร์การขัดจังหวะ 32 ตัวแรก[ 1 ]ในขณะที่เวกเตอร์ 32 ตัว (0x00-0x1f) ถูกสงวนไว้อย่างเป็นทางการ (และหลายตัวถูกใช้ในโปรเซสเซอร์รุ่นใหม่กว่า) แต่ 8086 รุ่นดั้งเดิมใช้เวกเตอร์การขัดจังหวะเพียงห้าตัวแรก (0-4) และเค้าโครง IDT ของ IBM PC ไม่ได้เคารพช่วงที่สงวนไว้
- หมายเลขเวกเตอร์ การขัดจังหวะฮาร์ดแวร์สอดคล้องกับหมายเลข IRQ ฮาร์ดแวร์ การแมปที่แน่นอนขึ้นอยู่กับวิธีการตั้งโปรแกรมตัวควบคุมการขัดจังหวะแบบโปรแกรมได้เช่นIntel 8259 [ 2 ] ในขณะที่เอกสารของ Intel ระบุว่า IRQ 0-7 จะถูกแมปกับเวกเตอร์ 0x20-0x27 แต่ IBM PC และเครื่องที่เข้ากันได้จะแมปกับ 0x08-0x0F โดยปกติแล้ว IRQ 8-15 จะถูกแมปกับเวกเตอร์ 0x70-0x77
- หมายเลขเวกเตอร์ การขัดจังหวะซอฟต์แวร์ถูกกำหนดโดยสภาพแวดล้อมการทำงานเฉพาะ เช่น BIOS ของ IBM PC, DOS หรือระบบปฏิบัติการอื่นๆ การขัดจังหวะเหล่านี้เกิดขึ้นจากซอฟต์แวร์โดยใช้ คำสั่ง INT (ไม่ว่าจะเป็นแอปพลิเคชัน ไดรเวอร์อุปกรณ์ หรือแม้แต่ตัวจัดการการขัดจังหวะอื่นๆ) ตัวอย่างเช่นBIOS ของ IBM PC ให้บริการวิดีโอที่เวกเตอร์ 0x10, MS-DOSให้บริการ DOS APIที่เวกเตอร์ 0x21 และLinuxให้บริการอินเทอร์เฟซ syscall ที่เวกเตอร์ 0x80
โหมดจริง
ในโหมดจริงตารางการขัดจังหวะเรียกว่า IVT (ตารางเวกเตอร์การขัดจังหวะ) จนถึง 80286 IVT จะอยู่ที่ตำแหน่งเดียวกันในหน่วยความจำเสมอ โดยอยู่ในช่วงตั้งแต่0x0000ถึง0x03ffและประกอบด้วยตัวชี้ระยะไกล 256 ตัว การขัดจังหวะฮาร์ดแวร์สามารถแมปไปยังเวกเตอร์ใดก็ได้โดยใช้ตัวควบคุมการขัดจังหวะที่ตั้งโปรแกรมได้ ใน80286และรุ่นต่อมา ขนาดและตำแหน่งของ IVT สามารถเปลี่ยนแปลงได้ในลักษณะเดียวกับที่ทำกับ IDT (ตารางตัวอธิบายการขัดจังหวะ) ในโหมดป้องกัน (เช่น ผ่านคำสั่ง LIDT (Load Interrupt Descriptor Table Register)) แม้ว่าจะไม่เปลี่ยนแปลงรูปแบบก็ตาม[ 3 ]
การขัดจังหวะ BIOS
BIOS ให้การเข้าถึงโหมดเรียลแบบง่ายๆ ไปยังชุดย่อยของฟังก์ชันฮาร์ดแวร์โดยการลงทะเบียนตัวจัดการการขัดจังหวะ การขัดจังหวะเหล่านี้ถูกเรียกใช้เป็นซอฟต์แวร์ขัดจังหวะด้วย คำสั่งแอสเซมบลี INTและพารามิเตอร์จะถูกส่งผ่านทางรีจิสเตอร์ การขัดจังหวะเหล่านี้ใช้สำหรับงานต่างๆ เช่น การตรวจจับโครงสร้างหน่วยความจำ ของระบบ การกำหนด ค่าเอาต์พุตและโหมด VGAและการเข้าถึงดิสก์ในช่วงเริ่มต้นของกระบวนการบูต
โหมดป้องกันและโหมดใช้งานระยะยาว
IDT คืออาร์เรย์ของตัวอธิบายที่จัดเก็บเรียงลำดับกันในหน่วยความจำและจัดทำดัชนีโดยหมายเลขเวกเตอร์ ไม่จำเป็นต้องใช้รายการทั้งหมดที่เป็นไปได้ เพียงแค่เติมข้อมูลลงในตารางจนถึงเวกเตอร์ขัดจังหวะสูงสุดที่ใช้ก็เพียงพอแล้ว และตั้งค่าส่วนความยาวของ IDT IDTRตามนั้น
รีจิสเตอร์ IDTR ใช้สำหรับจัดเก็บทั้งที่อยู่ฐานเชิงเส้นและขีดจำกัด (ความยาวเป็นไบต์ลบ 1) ของ IDT เมื่อเกิดการขัดจังหวะ โปรเซสเซอร์จะคูณเวกเตอร์การขัดจังหวะด้วยขนาดรายการ (8 สำหรับโหมดป้องกัน 16 สำหรับโหมดยาว ) และเพิ่มผลลัพธ์ไปยังที่อยู่ฐานของ IDT [ 4 ]หากที่อยู่ภายในตาราง จะมีการตรวจสอบ DPLและจัดการการขัดจังหวะตามประเภทเกต
ตัวอธิบายอาจเป็นเกตขัดจังหวะ เกตดักจับ หรือสำหรับโหมดป้องกัน 32 บิตเท่านั้น เกตงาน เกตขัดจังหวะและเกตดักจับชี้ไปยังตำแหน่งหน่วยความจำที่มีโค้ดที่จะดำเนินการโดยการระบุทั้งเซ็กเมนต์ (ที่มีอยู่ในGDTหรือLDT ) และออฟเซ็ตภายในเซ็กเมนต์นั้น ความแตกต่างเพียงอย่างเดียวระหว่างเกตดักจับและเกตขัดจังหวะคือ เกตขัดจังหวะจะปิดใช้งานการจัดการการขัดจังหวะฮาร์ดแวร์ที่สามารถปิดกั้นได้โดยโปรเซสเซอร์ ทำให้เหมาะสำหรับการจัดการการขัดจังหวะที่สร้างโดยฮาร์ดแวร์ (ในทางกลับกัน เกตดักจับมีประโยชน์สำหรับการจัดการการขัดจังหวะซอฟต์แวร์และข้อยกเว้น) เกตงานจะทำให้เซ็กเมนต์สถานะงานที่ใช้งานอยู่ในปัจจุบันถูกสลับ โดยใช้กลไกการสลับงานของฮาร์ดแวร์เพื่อส่งมอบการใช้งานโปรเซสเซอร์ให้กับโปรแกรม เธรด หรือกระบวนการอื่นอย่างมีประสิทธิภาพ
รูปแบบ IDT ทั่วไป
ข้อยกเว้นและการขัดจังหวะในโหมดป้องกัน
ในโหมดป้องกันเวกเตอร์การขัดจังหวะ 32 ตัวล่างสุดจะถูกสงวนไว้สำหรับข้อยกเว้นของ CPU ซึ่งเป็นเหตุการณ์ที่ถูกเรียกใช้ใน CPU เอง แทนที่จะรับการขัดจังหวะจากฮาร์ดแวร์ภายนอก อย่างไรก็ตาม ข้อยกเว้นของ CPU บางอย่าง เช่น NMI หรือ#MCเกี่ยวข้องโดยตรงกับเหตุการณ์ที่เกิดขึ้นในส่วนประกอบอื่นๆ ของคอมพิวเตอร์[ 5 ] [ 6 ]เวกเตอร์การขัดจังหวะ 0x20 ถึง 0xff ( เลขฐานสิบหก ) จะถูกปล่อยว่างไว้สำหรับการใช้งานของนักพัฒนาสำหรับการขัดจังหวะภายนอก การขัดจังหวะที่มีหมายเลขต่ำกว่า 0x20 ไม่ควรถูกกำหนดให้กับการขัดจังหวะภายนอก
| ระหว่างประเทศ เลขที่ | มเนม. | พิมพ์ | รหัสข้อผิดพลาด[ a ] | ชื่อ | แหล่งที่มา | |
|---|---|---|---|---|---|---|
| หกเหลี่ยม | ธันวาคม | |||||
| 0x00 | 0 | #DE | ข้อผิดพลาด[ข] | เลขที่ | ข้อผิดพลาดการหาร | คำสั่งหารจำนวนเต็ม: DIV, IDIVและAAM. |
| 0x01 | 1 | #DB | กับดัก/ | เลขที่ | ข้อผิดพลาดในการดีบัก | จุดหยุดคำสั่ง ข้อมูล และอินพุต/เอาต์พุต; การทำงาน ทีละขั้นตอน ; INT1/ ICEBPคำสั่งและอื่นๆ |
| 0x02 | 2 | NMI [ d ] | ขัดจังหวะ | เลขที่ | NMI ขัดจังหวะ | อินเตอร์รั ป ต์ภายนอกที่ไม่สามารถปิดกั้นได้ |
| 0x03 | 3 | #BP | กับดัก | เลขที่ | จุดหยุด | INT3คำแนะนำ. |
| 0x04 | 4 | #ของ | กับดัก | เลขที่ | ล้น | INTOคำแนะนำ. |
| 0x05 | 5 | #BR | ข้อผิดพลาด[ข] | เลขที่ | ขอบเขตเกินขีดจำกัด | BOUNDคำสั่งนี้สามารถสร้างได้ด้วยคำสั่งIntel MPXBNDCL , BNDCU, BNDCN, BNDLDXและBNDSTXเช่น กัน |
| 0x06 | 6 | #UD | ความผิดพลาด | เลขที่ | รหัสคำสั่งไม่ถูกต้อง (รหัสคำสั่งไม่ถูกกำหนด) | คำสั่ง UD หรือรหัสปฏิบัติการที่สงวนไว้ |
| 0x07 | 7 | #NM | ความผิดพลาด | เลขที่ | อุปกรณ์ไม่พร้อมใช้งาน ( ไม่มีตัวประมวลผลร่วมทางคณิตศาสตร์ ) |
|
| 0x08 | 8 | #DF | ยกเลิก | ใช่ (ศูนย์) | ดับเบิ้ลฟอลต์ | คำ สั่ง ใดๆ ก็ตามที่อาจก่อให้เกิดข้อยกเว้น, NMIหรือINTR |
| 0x09 | 9 | #MP [ e ] | ยกเลิก | เลขที่ | เซ็กเมนต์ โคโปรเซสเซอร์โอเวอร์รัน (สงวนสิทธิ์สำหรับสาย 486 และสายต่อ ๆ ไป) | คำสั่งจุดลอยตัว x87ที่มีตัวถูกดำเนินการในหน่วยความจำเมื่อส่วนกลางของตัวถูกดำเนินการในหน่วยความจำไม่สามารถเข้าถึงได้[ 9 ] [ 10 ] (เฉพาะโปรเซสเซอร์ 80287/80387 เท่านั้น; โปรเซสเซอร์ Intel 80486และรุ่นที่ใหม่กว่าจะสร้างข้อยกเว้น #GP หรือ #PF สำหรับตัวดำเนินการดังกล่าวแทน) |
| 0x0A | 10 | #TS | ความผิดพลาด | ใช่ | TSSไม่ถูกต้อง | การสลับงานหรือการเข้าถึง TSS |
| 0x0B | 11 | #NP | ความผิดพลาด | ใช่ | ส่วนนั้นไม่ปรากฏ | การโหลดรีจิสเตอร์เซ็กเมนต์หรือการเข้าถึงเซ็กเมนต์ระบบ |
| 0x0C | 12 | #SS | ความผิดพลาด | ใช่ | ข้อผิดพลาดของสแต็กเซกเมนต์ | การดำเนินการสแต็กและการโหลดรีจิสเตอร์ SS |
| 0x0D | 13 | #GP | ความผิดพลาด | ใช่ | การคุ้มครองทั่วไป | การตรวจสอบการอ้างอิงหน่วยความจำและการตรวจสอบการป้องกันอื่นๆ |
| 0x0E | 14 | #PF | ความผิดพลาด | ใช่ | ข้อผิดพลาดของเพจ | การอ้างอิงหน่วยความจำใดๆ |
| 0x0F | 15 | ไม่มีข้อมูล | Intel สงวนลิขสิทธิ์ ห้ามนำไปใช้ | |||
| 0x10 | 16 | #MF | ความผิดพลาด | เลขที่ | ข้อผิดพลาดการคำนวณเลขทศนิยม (Math Fault) ของหน่วยประมวลผลทศนิยม x87 (x87 FPU ) | คำสั่ง จุดลอยตัวx87 FPUWAITหรือFWAITMMX [ f ] [ g ] |
| 0x11 | 17 | #AC | ความผิดพลาด | ใช่ | การตรวจสอบการจัดแนว | การเข้าถึงหน่วยความจำที่ไม่ตรงแนว ในโปรเซสเซอร์รุ่นใหม่บางรุ่น #AC อาจเกิดขึ้นจากคำสั่งที่พยายามเข้าถึงหน่วยความจำที่ไม่สามารถแคชได้โดยการล็อกไว้ |
| 0x12 | 18 | #MC | ยกเลิก/ เกิดข้อผิดพลาด/ ขัดจังหวะ[ h ] | เลขที่ | การตรวจสอบเครื่องจักร | เกิดข้อผิดพลาดทางฮาร์ดแวร์ ข้อมูลข้อผิดพลาดได้มาจาก MSR (Machine Check System) ที่ใช้ในการตรวจสอบเครื่องจักร ชุดของข้อผิดพลาดที่สามารถตรวจจับและรายงานได้ผ่านกลไกการตรวจสอบเครื่องจักร รวมถึง MSR ที่สามารถเก็บข้อมูลข้อผิดพลาดได้นั้น ขึ้นอยู่กับรุ่นของโปรเซสเซอร์ |
| 0x13 | 19 | #XM | ความผิดพลาด | เลขที่ | ข้อยกเว้นจุดลอยตัว SIMD | คำสั่งจุดลอยตัวSSE / SSE2 / SSE3 / AVX / AVX2 / AVX-512 [ i ] |
| 0x14 | 20 | #VE | ความผิดพลาด | เลขที่ | ข้อยกเว้นการจำลองเสมือน | การละเมิด EPT ( Extended Page Table ) (เฉพาะระบบปฏิบัติการแขก Intel VT-xเท่านั้น) |
| 0x15 | 21 | #ซีพี | ความผิดพลาด | ใช่ | ข้อยกเว้นการป้องกันการควบคุม | เมื่อ เปิดใช้งาน CET shadow stacks คำสั่ง RET, IRET, RSTORSSP, และSETSSBSYอาจทำให้เกิดข้อยกเว้นนี้ได้ เมื่อเปิดใช้งานการติดตามสาขาทางอ้อมของ CET ข้อผิดพลาดนี้อาจเกิดขึ้นได้เนื่องจากไม่มีคำสั่ง ENDBRANCH ที่ปลายทางของการเรียกหรือกระโดดทางอ้อม |
| 0x16 ⋮ 0x1B | 22 ⋮ 27 | ไม่มีข้อมูล | สงวนไว้สำหรับการใช้งานในอนาคตในฐานะเวกเตอร์ข้อ ยกเว้นของ CPU | |||
| 0x1C | 28 | #เอชวี | ขัดจังหวะ | เลขที่ | ข้อยกเว้นการฉีดไฮเปอร์ไวเซอร์ | การส่งข้อมูลเหตุการณ์จากไฮเปอร์ไวเซอร์ไปยังเครื่องเสมือน SNP (เฉพาะเครื่องเสมือน AMD SEV-SNPเท่านั้น) |
| 0x1D | 29 | #VC | ความผิดพลาด | ใช่ | ข้อผิดพลาดในการสื่อสาร VMM | เหตุการณ์การออกจากเครื่องเสมือนที่ต้องการให้VMMตรวจสอบสถานะรีจิสเตอร์ของแขก ( เฉพาะแขก AMD SEV-ES เท่านั้น) |
| 0x1E | 30 | #SX | ขัดจังหวะ | ใช่ | ข้อยกเว้นด้านความปลอดภัย | เหตุการณ์ที่มีความอ่อนไหวต่อความปลอดภัย (เฉพาะ AMD SVM VMM เท่านั้น) |
| 0x1F | 31 | ไม่มีข้อมูล | สงวนไว้สำหรับการใช้งานในอนาคตในฐานะเวกเตอร์ข้อ ยกเว้นของ CPU | |||
| 0x20 ⋮ 0xFF | 32 ⋮ 255 | ไม่มีข้อมูล | ขัดจังหวะ | เลขที่ | ไม่มีข้อมูล | การขัดจังหวะจากภายนอก |
- ^คอลัมน์นี้กำหนดว่าการขัดจังหวะจะส่งรหัสข้อยกเว้นไปยังสแต็กตัวจัดการการขัดจังหวะหรือไม่ สำหรับข้อยกเว้นบางอย่าง จะส่งเพียงหมายเลขศูนย์เท่านั้น
- ^ a b #DE (ข้อผิดพลาดในการหาร) และ #BR (เกินขอบเขต) เป็นข้อยกเว้นประเภทความผิดพลาดในโปรเซสเซอร์ 80286 และรุ่นที่ใหม่กว่า ในโปรเซสเซอร์รุ่นก่อนหน้านั้น ข้อยกเว้นเหล่านี้เป็นกับดัก
- ^ข้อผิดพลาด #DB อาจเป็นได้ทั้งกับดักหรือข้อผิดพลาดจากการทำงานผิดพลาด ขึ้นอยู่กับเงื่อนไขที่ทำให้เกิดข้อผิดพลาด (เช่น จุดหยุดการทำงานของคำสั่งเป็นข้อผิดพลาดจากการทำงานผิดพลาด ในขณะที่จุดหยุดการทำงานของข้อมูลและการทำงานทีละขั้นตอนเป็นกับดัก) สามารถระบุเงื่อนไขที่ทำให้เกิดข้อผิดพลาด #DB ได้โดยการตรวจสอบ
DR6รีจิสเตอร์ดีบัก - ^เอกสารอย่างเป็นทางการของ Intel ไม่ได้กำหนดตัวย่ออย่างเป็นทางการสำหรับอินเตอร์รัปต์นี้ แต่ตัวย่อ "NMI" ถูกใช้กันอย่างแพร่หลายเพื่ออ้างถึงอินเตอร์รัปต์นี้ แม้แต่ในเอกสารของ Intel เองก็ตาม
- ^ตัวย่อ #MP สำหรับข้อยกเว้น 9 ระบุไว้ในเอกสาร Intel 80286 เท่านั้น [ 8 ] − เอกสาร Intel ในภายหลังสำหรับโปรเซสเซอร์ 80386 และรุ่นต่อมายังคงอธิบายข้อยกเว้นนี้ แต่ไม่ได้ใช้ตัวย่อ #MP อีกต่อไป
- ^เมื่อตรวจพบข้อผิดพลาดทางคณิตศาสตร์ที่ไม่ได้ถูกปิดบังใน FPU x87 ข้อผิดพลาดนั้นจะไม่ถูกส่งสัญญาณว่าเป็นความผิดพลาดในคำสั่ง x87 ที่ก่อให้เกิดข้อผิดพลาด แต่จะถูกส่งสัญญาณใน
FWAITคำสั่ง x87/ /MMX - ^บนโปรเซสเซอร์ i486 และรุ่นที่ใหม่กว่า ข้อยกเว้น #MF จะถูกส่งได้ก็ต่อเมื่อ
CR0.NEบิตนี้ถูกตั้งค่าเท่านั้น หากบิตนี้ไม่ถูกตั้งค่า CPU จะส่งสัญญาณไปยังขา FERR# แทน และรอการขัดจังหวะจากภายนอกบนโปรเซสเซอร์ 80286 และ 80386 ซึ่งไม่มี CR0.NE เวกเตอร์ข้อยกเว้น #MF ได้รับการสนับสนุนโดยโปรเซสเซอร์ แต่พีซีที่เข้ากันได้กับ IBM จะกำหนดเส้นทางสัญญาณข้อผิดพลาด FPU ใหม่ในลักษณะที่ข้อผิดพลาด FPU x87 จะปรากฏเป็น IRQ13 (INT 75h) แทน[ 11 ]
- ^บนโปรเซสเซอร์ x86 ที่รองรับ Machine Check Architecture (Intel Pentium Pro และรุ่นที่ใหม่กว่า, AMD K7 และรุ่นที่ใหม่กว่า) ข้อยกเว้น #MC อาจทำหน้าที่เป็นข้อยกเว้นประเภท Abort, Fault หรือ Interrupt ขึ้นอยู่กับประเภทของข้อผิดพลาดที่ทำให้เกิดข้อยกเว้นนั้น ซึ่งระบุด้วยบิต RIPV (บิต 0) และบิต EIPV (บิต 1) ของ
MCG_STATUSMSR (MSR17Ah):- บิต RIPV ระบุว่าสามารถเริ่มต้นกระแสคำสั่งใหม่จากค่า CS:rIP ที่ถูกผลักลงบนสแต็กได้หรือไม่ (1=ได้, 0=ไม่ได้)
- บิต EIPV บ่งชี้ว่าข้อผิดพลาดนั้นเกี่ยวข้องกับคำสั่งที่ชี้โดยค่า CS:rIP ที่ถูกผลักลงบนสแต็กหรือไม่ (1=ใช่, 0=ไม่ใช่)
- ^ต่างจากข้อยกเว้น #MF ที่ใช้สำหรับข้อผิดพลาด x87 ข้อยกเว้น #XM จะถูกส่งสัญญาณว่าเป็นความผิดพลาดในคำสั่งที่ทำให้เกิดข้อยกเว้นจุดลอยตัว SIMD
เค้าโครงพีซี IBM
IBM PC ( BIOSและ รันไทม์ MS-DOS ) ไม่ได้ปฏิบัติตามเค้าโครง Intel อย่างเป็นทางการนอกเหนือจากเวกเตอร์ข้อยกเว้นห้าตัวแรกที่ใช้งานใน 8086 ดั้งเดิม อินเตอร์รัปต์ 5 ถูกใช้สำหรับการจัดการ ปุ่ม Print Screenแล้ว IRQ 0-7 ถูกแมปไปยัง INT_NUM 0x08-0x0F และ BIOS ใช้เวกเตอร์ส่วนใหญ่ในช่วง 0x10-0x1F เป็นส่วนหนึ่งของ API [ 12 ]
การเกี่ยว
โปรแกรมWindowsบาง โปรแกรม จะดักจับการเรียกไปยัง IDT ซึ่งเกี่ยวข้องกับการเขียนไดรเวอร์โหมดเคอร์เนลที่ดักจับการเรียกไปยัง IDT และเพิ่มการประมวลผลของตัวเองเข้าไป วิธีนี้ไม่เคยได้รับการสนับสนุนอย่างเป็นทางการจากMicrosoftแต่ก็ไม่ได้ถูกป้องกันด้วยโปรแกรมในระบบปฏิบัติการจนกระทั่งถึง Windows เวอร์ชัน 64 บิตซึ่งไดรเวอร์ที่พยายามใช้ การดักจับ โหมดเคอร์เนลจะทำให้เครื่องเกิดข้อผิดพลาด[ 13 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
- คู่มือสำหรับนักพัฒนาซอฟต์แวร์สถาปัตยกรรม Intel 64 และ IA-32 เล่ม 3A: คู่มือการเขียนโปรแกรมระบบ ส่วนที่ 1 (ดูบทที่ 5 การจัดการการขัดจังหวะและข้อยกเว้น และบทที่ 10 ตัวควบคุมการขัดจังหวะแบบโปรแกรมได้ขั้นสูง)
- ตารางตัวอธิบายการขัดจังหวะที่ OSDev.org
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ตารางคำอธิบายการขัดจังหวะ
ตาราง ตัวอธิบายการขัดจังหวะ ( IDT ) เป็น โครงสร้างข้อมูล ที่ใช้โดย สถาปัตยกรรม x86 เพื่อสร้าง ตารางเวกเตอร์การขัดจังหวะ โปรเซสเซอร์ใช้ IDT...
โหมดจริง
ใน โหมดจริง ตารางการขัดจังหวะเรียกว่า IVT (ตารางเวกเตอร์การขัดจังหวะ) จนถึง 80286 IVT จะอยู่ที่ตำแหน่งเดียวกันในหน่วยความจำเสมอ โดยอยู่ในช่วงตั้งแต่ 0x0000 ถึง 0x03ff และประกอบด้วย ตัวชี้ระยะไกล 256 ตัว...
การขัดจังหวะ BIOS
BIOS ให้การเข้าถึงโหมดเรียลแบบง่ายๆ ไปยังชุดย่อยของฟังก์ชันฮาร์ดแวร์โดยการลงทะเบียนตัวจัดการการขัดจังหวะ การขัดจังหวะเหล่านี้ถูกเรียกใช้เป็นซอฟต์แวร์ขัดจังหวะด้วย คำสั่งแอสเซมบลี INT และพารามิเตอร์จะถูกส่งผ่านทางรีจิสเตอร์...
โหมดป้องกันและโหมดใช้งานระยะยาว
IDT คืออาร์เรย์ของตัวอธิบายที่จัดเก็บเรียงลำดับกันในหน่วยความจำและจัดทำดัชนีโดยหมายเลขเวกเตอร์ ไม่จำเป็นต้องใช้รายการทั้งหมดที่เป็นไปได้ เพียงแค่เติมข้อมูลลงในตารางจนถึงเวกเตอร์ขัดจังหวะสูงสุดที่ใช้ก็เพียงพอแล้ว และตั้งค่าส่วนความยาวของ IDT IDTR ตามนั้น