สำหรับการจัดการเหตุการณ์ที่เกิดขึ้นแบบอะซิงโครนัสที่เกี่ยวข้องกับการทำงานของโปรแกรม เหมาะที่สุด กลไกการขัดจังหวะ.
ขัดจังหวะ ถือได้ว่าเป็นเหตุการณ์พิเศษบางอย่างในระบบที่ต้องการการตอบสนองทันที ตัวอย่างเช่น ระบบที่มีความน่าเชื่อถือสูงที่ออกแบบมาอย่างดีใช้ระบบไฟฟ้าขัดข้องในการดำเนินการขั้นตอนการเขียนเนื้อหาของรีจิสเตอร์และ RAM ลงในสื่อแม่เหล็ก เพื่อให้เมื่อไฟฟ้ากลับคืนมา งานก็สามารถดำเนินการต่อจากที่เดิมได้
ดูเหมือนชัดเจนว่าการหยุดชะงักเกิดขึ้นได้หลากหลายด้วยเหตุผลหลายประการ ดังนั้น การขัดจังหวะไม่เพียงแค่ถูกพิจารณาว่าเป็นเช่นนั้น แต่ยังมีตัวเลขที่เกี่ยวข้องด้วย ซึ่งเรียกว่า หมายเลขประเภทขัดจังหวะ หรือเพียงแค่หมายเลขขัดจังหวะ หมายเลขขัดจังหวะแต่ละหมายเลขเชื่อมโยงกับเหตุการณ์หนึ่งหรือเหตุการณ์อื่น ระบบสามารถรับรู้ได้ว่าการขัดจังหวะใดเกิดขึ้นกับหมายเลขใด และเริ่มขั้นตอนที่สอดคล้องกับหมายเลขนี้
โปรแกรมสามารถทำให้เกิดการขัดจังหวะตามจำนวนที่กำหนดได้ เมื่อต้องการทำเช่นนี้ พวกเขาใช้คำสั่ง INT สิ่งเหล่านี้เรียกว่าการขัดจังหวะซอฟต์แวร์ การขัดจังหวะของซอฟต์แวร์นั้นไม่อะซิงโครนัส เนื่องจากถูกเรียกจากโปรแกรม (และรู้เมื่อมันถูกเรียกการขัดจังหวะ!)
การขัดจังหวะของซอฟต์แวร์นั้นสะดวกในการจัดระเบียบการเข้าถึงแต่ละโมดูลที่เหมือนกันกับทุกโปรแกรม ตัวอย่างเช่น โมดูลโปรแกรมระบบปฏิบัติการสามารถเข้าถึงได้โดยแอปพลิเคชันโปรแกรมผ่านการขัดจังหวะ และไม่จำเป็นต้องทราบที่อยู่ปัจจุบันในหน่วยความจำเมื่อเรียกใช้โมดูลเหล่านี้ แอปพลิเคชันโปรแกรมสามารถติดตั้งตัวจัดการการขัดจังหวะของตนเองเพื่อใช้งานโดยโปรแกรมอื่นในภายหลัง เมื่อต้องการทำเช่นนี้ ตัวจัดการขัดจังหวะภายในจะต้องมีหน่วยความจำอยู่
การขัดจังหวะด้วยฮาร์ดแวร์เกิดจากอุปกรณ์ทางกายภาพและมาถึงแบบอะซิงโครนัส การขัดจังหวะเหล่านี้จะแจ้งให้ระบบทราบเกี่ยวกับเหตุการณ์ที่เกี่ยวข้องกับการทำงานของอุปกรณ์ เช่น ในที่สุดเครื่องพิมพ์ก็พิมพ์อักขระเสร็จสิ้นแล้ว และจะเป็นการดีที่จะออกอักขระตัวถัดไป หรืออ่านเซกเตอร์ของดิสก์ที่ต้องการและเนื้อหาในนั้นแล้ว ที่มีอยู่ในโปรแกรม การใช้อินเทอร์รัปต์เมื่อทำงานกับอุปกรณ์ภายนอกที่ช้าทำให้คุณสามารถรวม I/O เข้ากับการประมวลผลข้อมูลในโปรเซสเซอร์กลาง และเป็นผลให้ประสิทธิภาพโดยรวมของระบบดีขึ้น การขัดจังหวะบางอย่าง (ห้ารายการแรกตามลำดับตัวเลข) สงวนไว้สำหรับการใช้งานโดย CPU เองในกรณีที่มีเหตุการณ์พิเศษใดๆ เช่น ความพยายามที่จะหารด้วยศูนย์ โอเวอร์โฟลว์ ฯลฯ
บางครั้ง แนะนำให้ระบบไม่คำนึงถึงการขัดจังหวะทั้งหมดหรือส่วนบุคคล สำหรับสิ่งนี้พวกเขาใช้สิ่งที่เรียกว่า ขัดจังหวะการปิดบัง. แต่การขัดจังหวะบางอย่างไม่สามารถปกปิดได้ เพราะเป็นการขัดจังหวะที่ไม่สามารถปกปิดได้
โปรดทราบว่าตัวจัดการการขัดจังหวะสามารถเรียกซอฟต์แวร์ขัดจังหวะได้ด้วยตนเอง เช่น เพื่อเข้าถึง BIOS หรือบริการ DOS (บริการ BIOS ก็มีให้ใช้งานผ่านกลไกการขัดจังหวะของซอฟต์แวร์เช่นกัน)
การสร้างโปรแกรมจัดการการขัดจังหวะของคุณเองและการเปลี่ยนตัวจัดการ DOS และ BIOS มาตรฐานถือเป็นงานที่ซับซ้อนและมีความรับผิดชอบ มีความจำเป็นต้องคำนึงถึงรายละเอียดปลีกย่อยทั้งหมดของการทำงานของอุปกรณ์และการโต้ตอบของซอฟต์แวร์และฮาร์ดแวร์ เมื่อทำการดีบัก เป็นไปได้ที่จะทำลายระบบปฏิบัติการพร้อมกับผลลัพธ์ที่คาดเดาไม่ได้ ดังนั้นคุณต้องตรวจสอบอย่างรอบคอบว่าโปรแกรมของคุณกำลังทำอะไรอยู่
เพื่อเชื่อมโยงที่อยู่ของตัวจัดการการขัดจังหวะกับหมายเลขขัดจังหวะ ให้ใช้ ขัดจังหวะตารางเวกเตอร์ซึ่งครอบครอง RAM กิโลไบต์แรก - ที่อยู่ตั้งแต่ 0000:0000 ถึง 0000:03FF ตารางประกอบด้วย 256 องค์ประกอบ - ที่อยู่ FAR ของตัวจัดการการขัดจังหวะ องค์ประกอบเหล่านี้เรียกว่า เวกเตอร์ขัดจังหวะ. คำแรกขององค์ประกอบตารางประกอบด้วยออฟเซ็ต และคำที่สองประกอบด้วยที่อยู่ของส่วนตัวจัดการขัดจังหวะ
หมายเลขขัดจังหวะ 0 สอดคล้องกับที่อยู่ 0000:0000 หมายเลขขัดจังหวะ 1 สอดคล้องกับที่อยู่ 0000:0004 เป็นต้น
ตารางบางส่วนได้รับการเตรียมใช้งานโดย BIOS หลังจากทดสอบฮาร์ดแวร์และก่อนที่ระบบปฏิบัติการจะเริ่มโหลด และอีกส่วนหนึ่งเมื่อโหลด DOS DOS สามารถเข้าควบคุมการขัดจังหวะ BIOS บางอย่างได้
ลองดูที่เนื้อหาของตารางเวกเตอร์ขัดจังหวะ นี่คือจุดประสงค์ของเวกเตอร์ที่สำคัญที่สุดบางส่วน:
คำอธิบาย |
|||||||||
ข้อผิดพลาดของแผนก เรียกโดยอัตโนมัติหลังจากดำเนินการคำสั่ง DIV หรือ IDIV หากการหารส่งผลให้เกิดการโอเวอร์โฟลว์ (เช่น การหารด้วย 0) โดยทั่วไป DOS จะพิมพ์ข้อความแสดงข้อผิดพลาดเมื่อจัดการกับการขัดจังหวะนี้ และหยุดโปรแกรมไม่ให้ทำงาน สำหรับโปรเซสเซอร์ 8086 ที่อยู่ผู้ส่งจะชี้ไปที่คำสั่งถัดไปหลังจากคำสั่งการแบ่ง และในโปรเซสเซอร์ 80286 ไปยังไบต์แรกของคำสั่งที่ทำให้เกิดการขัดจังหวะ |
|||||||||
โหมดขั้นตอนขัดจังหวะ ผลิตหลังจากการดำเนินการตามคำสั่งของเครื่องแต่ละเครื่อง หากตั้งค่า TF บิตการติดตามแบบทีละขั้นตอนในคำแฟล็ก ใช้สำหรับแก้จุดบกพร่องโปรแกรม การขัดจังหวะนี้ไม่ถูกสร้างขึ้นหลังจากดำเนินการคำสั่ง MOV ไปยังเซ็กเมนต์รีจิสเตอร์หรือหลังจากโหลดเซ็กเมนต์รีจิสเตอร์ด้วยคำสั่ง POP |
|||||||||
ฮาร์ดแวร์ขัดจังหวะที่ไม่สามารถปกปิดได้ การขัดจังหวะนี้สามารถใช้งานได้แตกต่างกันในเครื่องที่ต่างกัน โดยทั่วไปจะสร้างขึ้นเมื่อมีข้อผิดพลาดของพาริตีใน RAM และเมื่อมีการร้องขอการขัดจังหวะจากตัวประมวลผลร่วม |
|||||||||
ขัดขวางการติดตาม การขัดจังหวะนี้สร้างขึ้นโดยการดำเนินการคำสั่งเครื่องหนึ่งไบต์ด้วยโค้ด CCh และมักใช้โดยดีบักเกอร์เพื่อตั้งค่าเบรกพอยต์ |
|||||||||
ล้น. สร้างโดยคำสั่งเครื่อง INTO หากตั้งค่าสถานะ OF หากไม่ได้ตั้งค่าแฟล็ก คำสั่ง INTO จะถูกดำเนินการเป็น NOP การขัดจังหวะนี้ใช้เพื่อจัดการกับข้อผิดพลาดเมื่อดำเนินการทางคณิตศาสตร์ |
|||||||||
พิมพ์สำเนาหน้าจอ สร้างโดยการกดปุ่ม PrtScr บนคีย์บอร์ด โดยทั่วไปจะใช้ในการพิมพ์ภาพหน้าจอ สำหรับโปรเซสเซอร์ 80286 สร้างขึ้นเมื่อดำเนินการคำสั่งเครื่อง BOUND หากค่าที่กำลังทดสอบอยู่นอกช่วงที่ระบุ |
|||||||||
opcode หรือคำสั่งที่ไม่ได้กำหนดมีความยาวมากกว่า 10 ไบต์ (สำหรับโปรเซสเซอร์ 80286) |
|||||||||
กรณีพิเศษของการไม่มีตัวประมวลผลร่วมทางคณิตศาสตร์ (ตัวประมวลผล 80286) |
|||||||||
IRQ0 - การขัดจังหวะตัวจับเวลาช่วงเวลาเกิดขึ้น 18.2 ครั้งต่อวินาที |
|||||||||
IRQ1 - คีย์บอร์ดขัดจังหวะ สร้างขึ้นเมื่อมีการกดหรือปล่อยปุ่ม ใช้ในการอ่านข้อมูลจากแป้นพิมพ์ |
|||||||||
IRQ2 - ใช้สำหรับการขัดจังหวะฮาร์ดแวร์แบบเรียงซ้อนในเครื่องคลาส AT |
|||||||||
IRQ3 - การหยุดชะงักของพอร์ตอะซิงโครนัส COM2 |
|||||||||
IRQ4 - การหยุดชะงักของพอร์ตอะซิงโครนัส COM1 |
|||||||||
IRQ5 - ขัดจังหวะจากตัวควบคุมฮาร์ดดิสก์สำหรับ XT |
|||||||||
IRQ6 - การขัดจังหวะถูกสร้างขึ้นโดยตัวควบคุมฟล็อปปี้ดิสก์หลังจากการดำเนินการเสร็จสิ้น |
|||||||||
IRQ7 - เครื่องพิมพ์ขัดจังหวะ สร้างโดยเครื่องพิมพ์เมื่อพร้อมที่จะดำเนินการอื่น อะแดปเตอร์เครื่องพิมพ์จำนวนมากไม่ได้ใช้การขัดจังหวะนี้ |
|||||||||
การบำรุงรักษาอะแดปเตอร์วิดีโอ |
|||||||||
การกำหนดคอนฟิกอุปกรณ์ในระบบ |
|||||||||
การกำหนดขนาดของ RAM ในระบบ |
|||||||||
การบำรุงรักษาระบบดิสก์ |
|||||||||
อนุกรม I/O |
|||||||||
บริการขั้นสูงสำหรับคอมพิวเตอร์ AT |
|||||||||
การบำรุงรักษาคีย์บอร์ด |
|||||||||
การบำรุงรักษาเครื่องพิมพ์ |
|||||||||
เรียกใช้ BASIC ใน ROM หากมี |
|||||||||
บริการชม. |
|||||||||
ตัวจัดการขัดจังหวะ Ctrl-Break |
|||||||||
การขัดจังหวะเกิดขึ้น 18.2 ครั้งต่อวินาที และถูกเรียกโดยทางโปรแกรมโดยตัวจัดการการขัดจังหวะของตัวจับเวลา |
|||||||||
ที่อยู่ตารางวิดีโอสำหรับตัวควบคุมอะแดปเตอร์วิดีโอ 6845 |
|||||||||
ชี้ไปที่ตารางพารามิเตอร์ฟล็อปปี้ดิสก์ |
|||||||||
ชี้ไปที่ตารางกราฟิกสำหรับอักขระที่มีรหัส ASCII 128-255 |
|||||||||
ใช้โดย DOS หรือสงวนไว้สำหรับ DOS |
|||||||||
การขัดจังหวะที่สงวนไว้สำหรับผู้ใช้ |
|||||||||
ไม่ได้ใช้. |
|||||||||
IRQ8 - การขัดจังหวะนาฬิกาแบบเรียลไทม์ |
|||||||||
IRQ9 - ขัดจังหวะจากคอนโทรลเลอร์ EGA |
|||||||||
IRQ10 - สงวนไว้ |
|||||||||
IRQ11 - สงวนไว้ |
|||||||||
IRQ12 - สงวนไว้ |
|||||||||
IRQ13 - ขัดจังหวะจากตัวประมวลผลร่วมทางคณิตศาสตร์ |
|||||||||
IRQ14 - ขัดจังหวะจากตัวควบคุมฮาร์ดดิสก์ |
|||||||||
IRQ15 - สงวนไว้ |
|||||||||
ไม่ได้ใช้. |
|||||||||
สงวนไว้สำหรับ BASIC |
|||||||||
ใช้โดยล่ามพื้นฐาน |
|||||||||
การบรรยายครั้งที่ 12 ระบบขัดจังหวะของไมโครโปรเซสเซอร์ 32 บิต ฉัน80 x86. การทำงานของระบบขัดจังหวะในโหมดจริง คำถาม 1. แนวคิดขัดจังหวะ 2. การจำแนกประเภทขัดจังหวะ 3. ระบบขัดจังหวะ · ฮาร์ดแวร์ · ซอฟต์แวร์ระบบขัดจังหวะ · ตารางเวกเตอร์ขัดจังหวะ 4. การจัดการขัดจังหวะในโหมดจริง การหยุดชะงักหมายถึงการหยุดกระบวนการหลักของการคำนวณชั่วคราวเพื่อดำเนินการบางอย่างที่วางแผนไว้หรือไม่ได้วางแผนไว้ซึ่งเกิดจากการทำงานของฮาร์ดแวร์หรือซอฟต์แวร์ เหล่านั้น. นี่เป็นกระบวนการที่จะสลับไมโครโปรเซสเซอร์ชั่วคราวเพื่อรันโปรแกรมอื่น จากนั้นจึงกลับสู่โปรแกรมที่ถูกขัดจังหวะ ด้วยการกดปุ่มบนแป้นพิมพ์ เราจะเริ่มต้นการโทรไปยังโปรแกรมที่จดจำคีย์ได้ทันที เขียนโค้ดลงในบัฟเฟอร์ของแป้นพิมพ์ จากนั้นโปรแกรมอื่นจะอ่านโค้ดนั้น เหล่านั้น. บางครั้งไมโครโปรเซสเซอร์จะขัดจังหวะการทำงานของโปรแกรมปัจจุบันและสลับไปที่โปรแกรมประมวลผลขัดจังหวะซึ่งเรียกว่า โอ ตัวจัดการขัดจังหวะ. หลังจากที่ตัวจัดการขัดจังหวะทำงานเสร็จสิ้น โปรแกรมที่ถูกขัดจังหวะจะดำเนินการต่อไปจากจุดที่มันถูกหยุดชั่วคราว ที่อยู่ของโปรแกรมตัวจัดการอินเทอร์รัปต์คำนวณจากตารางเวกเตอร์อินเทอร์รัปต์ กลไกการขัดจังหวะได้รับการสนับสนุนในระดับฮาร์ดแวร์ การจำแนกประเภทขัดจังหวะ การขัดจังหวะจะถูกแบ่งออกเป็นขึ้นอยู่กับแหล่งที่มา · ฮาร์ดแวร์- เกิดขึ้นจากปฏิกิริยาของไมโครโปรเซสเซอร์ต่อสัญญาณฟิสิคัลจากอุปกรณ์บางตัว (คีย์บอร์ด, นาฬิการะบบ, คีย์บอร์ด, ฮาร์ดไดรฟ์ ฯลฯ ) ในแง่ของเวลาที่เกิดขึ้น การขัดจังหวะเหล่านี้เป็นแบบอะซิงโครนัส เช่น เกิดขึ้นแบบสุ่ม; · ซอฟต์แวร์- ถูกเรียกปลอมโดยใช้คำสั่งที่เหมาะสมจากโปรแกรม (ภายใน ) ได้รับการออกแบบมาเพื่อดำเนินการบางอย่างของระบบปฏิบัติการ เป็นแบบซิงโครนัส · ข้อยกเว้น- เป็นปฏิกิริยาของไมโครโปรเซสเซอร์ต่อสถานการณ์ที่ไม่ได้มาตรฐานซึ่งเกิดขึ้นภายในไมโครโปรเซสเซอร์ระหว่างการดำเนินการของคำสั่งโปรแกรมบางคำสั่ง (หารด้วยศูนย์, การหยุดชะงักด้วยแฟล็ก TF (ติดตาม)) การจำแนกประเภททั่วไปของการขัดจังหวะ · ภายนอก- เกิดจากเหตุการณ์ภายนอกไมโครโปรเซสเซอร์ (โดยพื้นฐานแล้วเป็นกลุ่มของการขัดจังหวะด้วยฮาร์ดแวร์) ไม่มีการขัดจังหวะแบบซ้อน! · ภายใน- เกิดขึ้นภายในไมโครโปรเซสเซอร์ในระหว่างกระบวนการคำนวณ (โดยพื้นฐานแล้วสิ่งเหล่านี้คือสถานการณ์ข้อยกเว้นและการขัดจังหวะของซอฟต์แวร์)
การขัดจังหวะภายนอก เกิดขึ้นจากสัญญาณจากอุปกรณ์ภายนอกบางชนิด การขัดจังหวะภายนอกแบ่งออกเป็น ไม่สวมหน้ากากและอำพราง เนื่องจากสัญญาณภายนอกพิเศษสองสัญญาณในสัญญาณอินพุตของโปรเซสเซอร์ซึ่งคุณสามารถขัดจังหวะการทำงานของโปรแกรมปัจจุบันและเปลี่ยนการทำงานของโปรเซสเซอร์กลางได้ เหล่านี้คือสัญญาณ NMI (ไม่มีการขัดจังหวะการมาสก์ การขัดจังหวะแบบไม่ปกปิด) และ INTR (คำขอขัดจังหวะ รบกวนขอ)
การขัดจังหวะแบบสวมหน้ากากได้ ถูกสร้างขึ้นโดยตัวควบคุมการขัดจังหวะตามคำขอของอุปกรณ์ต่อพ่วงบางอย่าง ตัวควบคุมขัดจังหวะ (ผลิตในรูปแบบของชิปพิเศษ i8259A) รองรับลำดับความสำคัญแปดระดับ (บรรทัด); อุปกรณ์ต่อพ่วงหนึ่งชิ้นถูก “ต่อ” ไว้ในแต่ละระดับ การขัดจังหวะแบบสวมหน้ากากมักเรียกว่าการขัดจังหวะด้วยฮาร์ดแวร์. ในพีซี เริ่มต้นด้วย IBM PC AT สร้างขึ้นบนไมโครโปรเซสเซอร์ i80286 ใช้คอนโทรลเลอร์ขัดจังหวะ i8259A สองตัว มีการเชื่อมต่อแบบอนุกรมในลักษณะแบบเรียงซ้อน ซึ่งจะเพิ่มจำนวนแหล่งสัญญาณขัดจังหวะภายนอกเป็น 15 (แต่ละแหล่ง 8) โปรดทราบ . ชิป ไอ 8259A สามารถตั้งโปรแกรมได้
การขัดจังหวะที่ไม่สามารถปกปิดได้ (พวกเขาบอกว่ามันเป็นอันหนึ่งเพราะมันจ่ายให้กับเอาต์พุตไมโครโปรเซสเซอร์เอ็นเอ็มไอ ) เริ่มต้นแหล่งที่ต้องการการแทรกแซงทันทีจากไมโครโปรเซสเซอร์
ในโหมดการทำงานของไมโครโปรเซสเซอร์จริงและได้รับการป้องกัน การประมวลผลขัดจังหวะจะดำเนินการโดยใช้วิธีการที่แตกต่างกันโดยพื้นฐาน ระบบขัดจังหวะ ขัดจังหวะฮาร์ดแวร์และซอฟต์แวร์ระบบ ระบบขัดจังหวะคือชุดของซอฟต์แวร์และฮาร์ดแวร์ที่ใช้กลไกขัดจังหวะ ถึง ฮาร์ดแวร์ระบบขัดจังหวะได้แก่: · หมุดไมโครโปรเซสเซอร์- สัญญาณจะถูกสร้างขึ้นโดยแจ้งให้ไมโครโปรเซสเซอร์ทราบว่าอุปกรณ์ภายนอกบางตัว "จะให้ความสนใจกับมัน" (ระหว่างประเทศ) ไม่ว่าเหตุการณ์บางอย่างจำเป็นต้องประมวลผลทันทีหรือมีข้อผิดพลาดร้ายแรง(สทศ.) ระหว่างประเทศ - เอาท์พุทสำหรับ ป้อนข้อมูลสัญญาณคำขอขัดจังหวะ, เอ็นเอ็มไอ - เอาท์พุทสำหรับ ป้อนข้อมูลสัญญาณขัดจังหวะที่ไม่สามารถปกปิดได้ อินต้า - เอาท์พุทสำหรับ วันหยุดสัญญาณยืนยันการรับสัญญาณขัดจังหวะโดยไมโครโปรเซสเซอร์ (สัญญาณนี้จะถูกส่งไปยังอินพุตเดียวกันของชิปคอนโทรลเลอร์ 8259A · ตัวควบคุมอินเทอร์รัปต์แบบตั้งโปรแกรมได้ 8259A (ออกแบบมาเพื่อจับสัญญาณอินเทอร์รัปต์จากอุปกรณ์ภายนอกที่แตกต่างกันแปดตัวมันทำในรูปแบบของไมโครเซอร์กิต โดยปกติแล้วพวกเขาจะใช้วงจรไมโครที่เชื่อมต่อแบบอนุกรมสองชุด ดังนั้นจำนวนแหล่งที่มาของการขัดจังหวะภายนอกที่เป็นไปได้จึงสูงถึง 15 บวกกับการขัดจังหวะที่ไม่สามารถปกปิดได้หนึ่งรายการ เขาคือผู้สร้างหมายเลขเวกเตอร์ขัดจังหวะและออกบัสข้อมูล) · อุปกรณ์ภายนอก (ตัวจับเวลา แป้นพิมพ์ ดิสก์แม่เหล็ก ฯลฯ) ถึง ซอฟต์แวร์ระบบขัดจังหวะ โหมดจริงประกอบด้วย: · ขัดจังหวะตารางเวกเตอร์ . ครอบครองกิโลไบต์แรกของ OP (ที่อยู่ 00000 h-003FFh) . มันมีที่อยู่ (เวกเตอร์ - “เวกเตอร์” เพราะ สองค่าสำหรับระบุที่อยู่) ของตัวจัดการขัดจังหวะและประกอบด้วย 256 (0..255) องค์ประกอบละ 4 ไบต์: 2 ไบต์ - ค่าใหม่สำหรับการลงทะเบียนไอพี 2 ไบต์ - ค่าใหม่สำหรับการลงทะเบียนซีเอส. ตำแหน่งของตารางเวกเตอร์ขัดจังหวะในโปรเซสเซอร์ i80286 และเก่ากว่านั้นถูกกำหนดโดยค่ารีจิสเตอร์ไอดีทีอาร์ ตารางเวกเตอร์ขัดจังหวะจะถูกเตรียมใช้งานเมื่อเริ่มต้นระบบ แต่โดยหลักการแล้วสามารถเปลี่ยนแปลงและย้ายได้ เวกเตอร์แต่ละตัวมีหมายเลขของตัวเองและเรียกว่าหมายเลขขัดจังหวะ · สองธงในทะเบียนธง ธง/ธง: IF (แฟล็กขัดจังหวะ) - ขัดจังหวะธง ออกแบบมาเพื่อปกปิด (ปิดการใช้งาน) การขัดจังหวะด้วยฮาร์ดแวร์ ถ้าถ้า=1 ไมโครโปรเซสเซอร์จะประมวลผลการขัดจังหวะภายนอก ถ้า = 0 จะไม่สนใจสิ่งเหล่านั้น TF(ติดตามธง) - ติดตามธง ถ้า = 1 แสดงว่าไมโครโปรเซสเซอร์จะเปลี่ยนเป็นโหมดคำสั่งตามคำสั่ง ในโหมดนี้ไมโครโปรเซสเซอร์จะเกิดการขัดจังหวะภายในด้วยหมายเลข 1 · คำแนะนำเครื่องไมโครโปรเซสเซอร์: int เข้าสู่(ขัดจังหวะล้น), iret, cli, sti การจัดการขัดจังหวะในโหมดจริง ดำเนินการในสามขั้นตอน: 1) การยกเลิกโปรแกรมปัจจุบัน มันจะต้องเกิดขึ้นในลักษณะที่คุณสามารถกลับมาทำงานต่อได้ ในการดำเนินการนี้ จำเป็นต้องบันทึกเนื้อหาของรีจิสเตอร์ เนื่องจากเป็นทรัพยากรที่ใช้ร่วมกันระหว่างโปรแกรม จำเป็นต้องบันทึกการลงทะเบียน cs, ip, แฟล็ก (CS:IP pair มีที่อยู่ของคำสั่งที่จะเริ่มดำเนินการหลังจากส่งคืนธง - สถานะของแฟล็กหลังจากดำเนินการคำสั่งสุดท้ายของโปรแกรมที่ถูกขัดจังหวะ) !!! รีจิสเตอร์เหล่านี้จะถูกบันทึกโดยอัตโนมัติโดยไมโครโปรเซสเซอร์ โปรแกรมเมอร์จะต้องรักษาการลงทะเบียนอื่น ๆ ไว้!!! สถานที่ที่สะดวกที่สุดในการจัดเก็บรีจิสเตอร์คือสแต็ก หลังจากจัดเก็บรีจิสเตอร์บนสแต็กแล้ว ไมโครโปรเซสเซอร์จะรีเซ็ตบิตแฟล็กถ้า (เช่น=0)(!!! ในกรณีนี้ รีจิสเตอร์จะถูกเขียนลงบนสแต็กธง โดยที่ยังติดตั้งอยู่ถ้า !!!)สิ่งนี้ป้องกันความเป็นไปได้ของการขัดจังหวะภายนอกที่ซ้อนกันและความเสียหายต่อการลงทะเบียนของโปรแกรมต้นทางเนื่องจากการกระทำที่ไม่สามารถควบคุมได้ในส่วนของโปรแกรม - ตัวจัดการการขัดจังหวะที่ซ้อนกัน หลังจากที่การดำเนินการบันทึกบริบทที่จำเป็นเสร็จสิ้นแล้ว ตัวจัดการการขัดจังหวะด้วยฮาร์ดแวร์สามารถเปิดใช้งานการขัดจังหวะแบบซ้อนด้วยคำสั่งได้สตี 2) การเปลี่ยนไปใช้การดำเนินการและการดำเนินการของเซอร์วิสโปรแกรมขัดจังหวะ ที่นี่แหล่งที่มาของการขัดจังหวะถูกกำหนดและเรียกตัวจัดการการขัดจังหวะที่เกี่ยวข้อง ในโหมดจริงของไมโครโปรเซสเซอร์ อนุญาตให้ใช้แหล่งที่มาได้ 256 แหล่ง - ตามจำนวนองค์ประกอบของตารางเวกเตอร์ขัดจังหวะ โครงสร้างองค์ประกอบ: · 2 ไบต์ - ค่าออฟเซ็ตของจุดเริ่มต้นของโปรแกรมตัวจัดการการขัดจังหวะจากจุดเริ่มต้นของส่วนของโค้ด · 2 ไบต์ - ค่าของที่อยู่พื้นฐานของเซ็กเมนต์ซึ่งมีโปรแกรมตัวจัดการอยู่ วิธีระบุที่อยู่ซึ่งเป็นที่ตั้งของหมายเลขเวกเตอร์ขัดจังหวะยังไม่มี? ออฟเซ็ตของตารางเวกเตอร์ขัดจังหวะ =น*4 ขนาดโต๊ะเต็ม?4*256=1024 ดังนั้นในขั้นตอนที่สองไมโครโปรเซสเซอร์ 1. ตามจำนวนของแหล่งสัญญาณขัดจังหวะ กำหนดออฟเซ็ตในตารางเวกเตอร์ขัดจังหวะ 2. วางสองไบต์แรกลงในรีจิสเตอร์ไอพี 3. วางสองไบต์ที่สองลงในรีจิสเตอร์ซี.เอส. 4. โอนการควบคุมไปยังที่อยู่ซีเอส:ไอพี (นอกจากนี้ยังสามารถถูกขัดจังหวะได้ด้วยการร้องขอจากแหล่งที่มีลำดับความสำคัญสูงกว่า แหล่งที่มาของการขัดจังหวะทั้งหมดจะมีลำดับความสำคัญ) 3) กลับการควบคุมไปยังโปรแกรมที่ถูกขัดจังหวะ จำเป็นต้องคืนสแต็กกลับสู่สถานะเดิมทันทีหลังจากถ่ายโอนการควบคุมไปยังโพรซีเดอร์นี้ ในการดำเนินการนี้โปรแกรมเมอร์จะต้องระบุการดำเนินการที่จำเป็นเพื่อคืนค่าการลงทะเบียนและล้างสแต็ก !! ส่วนนี้จะต้องได้รับการปกป้องจากความเสียหายที่อาจเกิดขึ้นของเนื้อหาการลงทะเบียน (อันเป็นผลมาจากการขัดจังหวะของฮาร์ดแวร์) โดยใช้คำสั่งคลี คำสั่งสุดท้ายในตัวจัดการการขัดจังหวะคือสติ, โกรธ สตี - เปิดใช้งานการขัดจังหวะด้วยฮาร์ดแวร์ (ตั้งค่าสถานะถ้า=1 ไม่มีตัวถูกดำเนินการ). หงุดหงิด - ลบคำสามคำตามลำดับออกจากสแต็กและวางไว้ในรีจิสเตอร์ตามลำดับ ip, cs, แฟล็ก เวกเตอร์ขัดจังหวะเวกเตอร์อินเทอร์รัปต์คือสัญญาณไฟฟ้าที่ส่งไปยังบัสโปรเซสเซอร์ จากเวกเตอร์อินเทอร์รัปต์ คุณสามารถกำหนดข้อมูลที่จำเป็นทั้งหมดเพื่อข้ามไปยังโปรแกรมอินเทอร์รัปต์ รวมถึงที่อยู่เริ่มต้นของโปรแกรมด้วย แต่ละระดับการขัดจังหวะจะมีเวกเตอร์ขัดจังหวะของตัวเอง เวกเตอร์ขัดจังหวะมักจะอยู่ในตำแหน่งหน่วยความจำคงที่ที่จัดสรรเป็นพิเศษ ตารางเวกเตอร์ขัดจังหวะ ขั้นตอนในการจัดการการเปลี่ยนไปใช้โปรแกรมขัดจังหวะจะเลือกคำขอที่มีลำดับความสำคัญสูงสุดจากคำขอที่ออกทั้งหมด ถ่ายโอนสถานะปัจจุบันของโปรแกรมที่ถูกขัดจังหวะจากการลงทะเบียนตัวประมวลผลไปยังสแต็ก โหลดเวกเตอร์ขัดจังหวะลงในการลงทะเบียนตัวประมวลผลและถ่ายโอนการควบคุม ไปยังโปรแกรมขัดจังหวะ องค์กรของการขัดจังหวะแบบซ้อนเป็นไปได้ว่าในขณะที่ประมวลผลการขัดจังหวะครั้งแรก คำขอสำหรับการขัดจังหวะอื่นก็มาถึง หากมีแหล่งที่มาของคำขอขัดจังหวะหลายแหล่ง จะต้องสร้างลำดับที่แน่นอนในการให้บริการคำขอที่เข้ามา ระบบได้สร้างความสัมพันธ์ที่มีลำดับความสำคัญระหว่างคำขอขัดจังหวะ ความสัมพันธ์ที่มีลำดับความสำคัญจะกำหนดว่าคำขอใดที่เข้ามาหลายคำขอควรได้รับการประมวลผลก่อน และกำหนดว่าคำขอนั้นมีสิทธิ์หรือไม่ที่จะขัดจังหวะโปรแกรมใดโปรแกรมหนึ่งโดยเฉพาะ ตัวอย่างเช่น คำร้องขอการขัดจังหวะจากตัวจับเวลาจะมีลำดับความสำคัญมากกว่าคำขอจากอุปกรณ์ภายนอกใดๆ เสมอ และโปรแกรมผู้ใช้จะมีลำดับความสำคัญต่ำที่สุดและสามารถถูกขัดจังหวะด้วยสิ่งใดก็ได้ มีแนวคิดเรื่องความลึกของการขัดจังหวะ - นี่คือจำนวนโปรแกรมสูงสุดที่สามารถขัดจังหวะซึ่งกันและกันได้ หลังจากย้ายไปยังโปรแกรมขัดจังหวะและจนกว่าจะสิ้นสุด หากไม่อนุญาตให้ยอมรับคำขออื่น ระบบจะกล่าวว่ามีความลึกของการขัดจังหวะเป็น 1 ความลึกจะเท่ากับ n หากอนุญาตให้มีการขัดจังหวะตามลำดับได้มากถึง n โปรแกรม ระบบที่มีความลึกของการขัดจังหวะที่มากขึ้นช่วยให้ตอบสนองต่อคำขอเร่งด่วนได้เร็วขึ้น มีการสร้างความแตกต่างระหว่างการใช้ลำดับความสำคัญแบบสัมบูรณ์และแบบสัมพันธ์ แผนการจัดลำดับความสำคัญแบบสัมบูรณ์: คำร้องขอขาเข้าที่มีลำดับความสำคัญสูงกว่าคำขอที่กำลังประมวลผลอยู่จะขัดจังหวะโปรแกรมที่กำลังทำงานอยู่ โครงการจัดลำดับความสำคัญแบบสัมพัทธ์: คำขอที่เข้ามาคือตัวเลือกแรกสำหรับการบริการหลังจากเสร็จสิ้นโปรแกรมปัจจุบัน แม้ว่าลำดับความสำคัญจะสูงกว่า โปรแกรมที่รันอยู่ก็ยังต้องยุติการทำงาน หากคำขอขัดจังหวะที่มีลำดับความสำคัญสูงสุดไม่เกินระดับลำดับความสำคัญของโปรแกรมที่กำลังดำเนินการโดยโปรเซสเซอร์ คำร้องขอขัดจังหวะจะถูกละเว้นหรือการให้บริการจะถูกเลื่อนออกไปจนกว่าโปรแกรมปัจจุบันจะเสร็จสิ้น มีสถานการณ์ที่คุณจำเป็นต้องมอบหมายงานต่างๆ มากมายให้กับอุปกรณ์ต่อพ่วงเครื่องเดียว แต่มีอุปกรณ์เพียงเครื่องเดียวและจำเป็นต้องทำอะไรบางอย่างเกี่ยวกับอุปกรณ์นั้น ตัวอย่างง่ายๆ คือตัวจับเวลาและการขัดจังหวะโอเวอร์โฟลว์ หรือตัวอย่างเช่น USART เราอาจต้องการโค้ดที่แตกต่างกันเพื่อดำเนินการอย่างง่ายดายทั้งนี้ขึ้นอยู่กับโหมดขัดจังหวะการมาถึงของไบต์ ในโหมดหนึ่ง - ออกคำทักทาย ในอีกโหมดหนึ่ง - ส่งคำหยาบคายไปที่โรงอาบน้ำ ครั้งที่ 3 การตีที่ศีรษะ และมีเวกเตอร์เพียงอันเดียว แน่นอน คุณสามารถเพิ่มโครงสร้าง switch-case ให้กับตัวจัดการการขัดจังหวะ และโดยการเลือกโหมด ให้ไปที่ส่วนของโค้ดที่ต้องการ แต่นี่ค่อนข้างยุ่งยาก และที่สำคัญที่สุด เวลาในการเปลี่ยนจะแตกต่างกัน ขึ้นอยู่กับ ลำดับที่โครงสร้างการสำรวจเปรียบเทียบสวิตช์เคสจะเกิดขึ้น นั่นคือในสวิตช์เช่น:
สวิตช์ (x) ( 1: การกระทำ 1 2: การกระทำ 2 3: การกระทำ 3 4: การกระทำ 4) จะมีการเปรียบเทียบตามลำดับของ x อันดับแรกกับ 1 จากนั้นกับ 2 และ 3 และต่อไปเรื่อยๆ จนกว่าจะระบุตัวเลือกทั้งหมดได้ และในกรณีนี้ การตอบสนองต่อการกระทำที่ 1 จะเร็วกว่าปฏิกิริยาต่อการกระทำที่ 4 ซึ่งมีความสำคัญอย่างยิ่งเมื่อคำนวณช่วงเวลาที่แน่นอนในตัวจับเวลา แต่มีวิธีแก้ไขปัญหานี้ง่ายๆ - การกระโดดดัชนี ก่อนที่เราจะเริ่มคาดหวังว่าจะมีการขัดจังหวะ ก็เพียงพอแล้วที่จะโหลดตัวแปร (หรือแม้กระทั่งโดยตรงไปยังดัชนีรีจิสเตอร์ Z) ในทิศทางที่เราต้องเปลี่ยนเส้นทางเวกเตอร์ของเราและแทรกการเปลี่ยนแปลงดัชนีลงในตัวจัดการการขัดจังหวะ แล้วก็เอาล่ะ! การเปลี่ยนแปลงจะเป็นที่ที่คุณต้องการ โดยไม่มีการเปรียบเทียบตัวเลือกใดๆ ตัวจับเวลา0_Vect_L: .ไบต์ 1 ; ที่อยู่สองไบต์ ตัวจับเวลาสูงและต่ำ 0_Vect_H: .ไบต์ 1 การเตรียมรอการขัดจังหวะนั้นง่ายมาก เรานำมันไปโหลดลงในตัวแปรของเราด้วยที่อยู่ที่ต้องการ ซีแอลไอ ; ส่วนที่สำคัญ ขัดจังหวะปิด LDI R16 ต่ำ (Timer_01) ; ใช้ที่อยู่และบันทึก STS Timer0_Vect_L,R16 ; มันเข้าไปในเซลล์หน่วยความจำ LDI R16,สูง(Timer_01) ; ในทำนองเดียวกัน แต่มีเวกเตอร์สูงสุด STS Timer0_Vect_H,R16 SEI ; ขัดจังหวะเปิด เพียงเท่านี้ คุณก็สามารถเริ่มจับเวลาและรอการขัดจังหวะของเราได้ มันคล้ายกับกรณีอื่นๆ และตัวจัดการดูเหมือนว่า:
;============================ ;============================ ; การเข้าสู่การขัดจังหวะโอเวอร์โฟลว์จาก Timer0 ;============================ TIMER_0: PUSH ZL ; บันทึกการลงทะเบียนดัชนีลงในสแต็ก PUSH ZH ; เพราะ เราใช้มัน PUSH R2; เราประหยัด R2 เพราะ เราก็สปอยเหมือนกันนะ R2,SREG ; ดึงข้อมูลและบันทึกการลงทะเบียนแฟล็ก PUSH R2; หากคุณไม่ทำเช่นนี้ เราจะพบข้อผิดพลาด 100% LDS ZL,Timer0_Vect_L ; โหลดที่อยู่ของเวกเตอร์ LDS ใหม่ ZH,Timer0_Vect_H ; ทั้งสองไบต์ ซีแอลอาร์ R2; ล้าง R2 หรือ R2,ZL ; เราตรวจสอบเวกเตอร์เป็นศูนย์ มิฉะนั้นเราจะคว้าอะนาล็อกของ OR R2,ZH ; รีเซ็ต"ก. การตรวจสอบดำเนินการผ่านการดำเนินการหรือ BREQ Exit_Tm0 โดยมีการสะสมผลลัพธ์ใน R2 ด้วยวิธีนี้เราจะไม่ทำให้เนื้อหาของ Z เสียหายและเราไม่จำเป็นต้องโหลดอีกครั้ง IJMP เรา ปล่อยไปตามเวกเตอร์ใหม่ ออกจากการขัดจังหวะ Exit_Tm0: POP R2 ; เรานำมันออกมาและกู้คืนแฟล็ก register OUT SREG,R2 POP R2 ; การกู้คืน R2 POP ZH ; การกู้คืน Z POP ZL RETI ; เวกเตอร์เพิ่มเติม 1 Timer_01: NOP ; เหล่านี้ เป็นเวกเตอร์ใหม่ของเรา NOP ที่นี่เราสามารถทำทุกอย่างที่เราต้องการ NOP ไม่ควรใช้เวลานาน - ในการหยุดชะงัก NOP ท้ายที่สุด หากเราใช้ NOP อื่น ๆ ; รีจิสเตอร์ เราก็จะบันทึกพวกมันไว้ในสแต็ก RJMP Exit_Tm0 ด้วย นี่คือ การเปลี่ยนไปใช้เอาต์พุตขัดจังหวะ ทำขึ้นเป็นพิเศษผ่าน RJMP เพื่อ; เวกเตอร์เพิ่มเติม 2; บันทึกหนึ่งโหลไบต์ในโค้ดส่งคืน :))) Timer_02: NOP NOP NOP NOP NOP RJMP Exit_Tm0 ; เวกเตอร์เพิ่มเติม 3 Timer_03: NOP NOP NOP NOP NOP RJMP Exit_Tm0 การนำไปปฏิบัติสำหรับ RTOS ของฉันไม่มีกลไกการกีดกันซึ่งกันและกัน แต่สามารถนำไปใช้ได้ อย่างน้อยก็ทำให้มีความคล้ายคลึงกันน้อยที่สุด ฉันไม่ต้องการดำเนินการขยะทั้งหมดนี้อย่างเต็มที่ เพราะ... เป้าหมายของฉันคือรักษาขนาดเคอร์เนลไว้ที่ 500-800 ไบต์ ปัญหาคือหากมีผู้สมัครจำนวนมากสำหรับเวกเตอร์เดียว กระบวนการต่างๆ จะยังคงดำเนินต่อไป เหมือนเด็กขี้เมาอยู่รอบห้องน้ำเพียงแห่งเดียวในจัตุรัสในช่วงเทศกาลเฉลิมฉลอง หากใครคนหนึ่งกระเพาะปัสสาวะทนไม่ได้ อัลกอริธึมก็จะพัง และใครจะสนใจที่จะเดาที่นี่เพราะ... มันจะเป็นเรื่องยากที่จะสร้างแบบจำลองนี้ วิธีแก้ปัญหาคือเพิ่มเชนถัดไป คราวนี้เพื่อเข้าถึงทรัพยากร เพื่อที่จะไม่อยู่เฉยๆเลย เหล่านั้น. คนหนึ่งกระโดดออกมา จากนั้นวินาที สาม และต่อไปเรื่อยๆ จนกว่ากระบวนการทั้งหมดจะบรรเทาความต้องการ USART บางประเภทลง วิธีแก้ปัญหาที่สองคือการโยนตัวแปรเวลาที่ยุ่งออกไป เหลือเพียงแฟล็ก "Busy!" และกระบวนการที่พยายามติดต่อไม่ได้วิ่งหนีไปสู่การสูบบุหรี่ แต่กระโดดกลับไปสองสามขั้นตอน - ไปยังจุดสิ้นสุดของคิวงานแล้วแยกกลับทันที คนรอบโถส้วมไม่ได้วิ่งเล่น แต่ดันศอกตรงทางเข้า โดยยึดหลักว่าใครจะผ่านก่อนได้ แน่นอนว่าตัวจับเวลาแสดงไว้ที่นี่เป็นตัวอย่าง ปัญหาส่วนใหญ่สามารถแก้ไขได้ด้วยตัวจับเวลาของระบบ RTOS แต่ถ้าคุณต้องการความรอบคอบน้อยลงหรือการตอบสนองความเร็วสูงต่อเหตุการณ์อย่างกะทันหัน (และไม่จนกว่าสายพานลำเลียงหลักจะดำเนินการเพื่อ การดำเนินการ) จากนั้นกลไกการขัดจังหวะแบบควบคุม IMHO คือสิ่งที่ดร. กำหนดไว้ 30. ระบบขัดจังหวะเวกเตอร์การเพิ่มประสิทธิภาพของระบบขัดจังหวะนั้นสัมพันธ์กับการถ่ายโอนฟังก์ชันการระบุตัวตนของชุดควบคุมที่ร้องขอบริการไปยังวิธีการภายนอกโปรเซสเซอร์ ใน เวกเตอร์ ระบบ ขัดจังหวะ หน่วยงานผู้ใช้ที่ร้องขอบริการระบุตัวเองว่ากำลังใช้งาน เวกเตอร์ ขัดจังหวะซึ่งเป็นที่ยอมรับของ ส.ส. โดยทั่วไปจำเป็นต้องใช้บัสพิเศษเพื่อส่งเวกเตอร์อินเทอร์รัปต์ อย่างไรก็ตามตามกฎแล้วจะรวมทางกายภาพกับบัสข้อมูลบัสของระบบและเวกเตอร์อินเทอร์รัปต์จะถูกป้อนในวงจรบัสพิเศษซึ่งเรียกว่า วงจร การยืนยัน ขัดจังหวะ. การรวมกันนี้จำเป็นต้องรวมบรรทัดยืนยันการขัดจังหวะของ INTA ไว้ในบัสควบคุม ซึ่งเป็นสัญญาณที่ถูกส่งจากโปรเซสเซอร์ ทำให้สามารถออกเวกเตอร์ขัดจังหวะเพื่อตอบสนองต่อคำขอขัดจังหวะจากชุดควบคุมได้ MP เมื่อได้รับเวกเตอร์อินเทอร์รัปต์แล้ว จะสลับไปที่การดำเนินการรูทีนการประมวลผลอินเทอร์รัปต์ที่ต้องการทันที เช่นเดียวกับระบบรัศมี ระบบการขัดจังหวะเวกเตอร์จะถือว่าหน่วยควบคุมแต่ละชุดมีรูทีนการประมวลผลการขัดจังหวะของตัวเอง ในกรณีนี้ เวกเตอร์การขัดจังหวะจะกำหนดรูทีนการขัดจังหวะที่โปรเซสเซอร์ควรถ่ายโอนการควบคุมไป เวกเตอร์ขัดจังหวะอาจเป็น: คำสั่งเรียกรูทีนย่อยที่สมบูรณ์พร้อมกับที่อยู่ของรูทีนย่อยบริการขัดจังหวะ ที่อยู่ของรูทีนบริการขัดจังหวะ ระบุที่อยู่ของรูทีนบริการขัดจังหวะ ตัวชี้สามารถใช้ได้ทั้งที่อยู่ซึ่งที่อยู่ของรูทีนบริการขัดจังหวะถูกเก็บไว้ในหน่วยความจำ (บางครั้งตัวชี้ดังกล่าวเรียกว่าที่อยู่ของเวกเตอร์ขัดจังหวะ) หรือประเภทของการขัดจังหวะ มีสองวิธีในการสร้างระบบเวกเตอร์ขัดจังหวะ ซึ่งจะแตกต่างกันในวิธีการที่ใช้ในการสร้างเวกเตอร์ขัดจังหวะ วิธีแรกใช้วิธีการควบคุมแบบกระจายอำนาจ - การกำหนดคำขอที่มีลำดับความสำคัญสูงสุดและการสร้างเวกเตอร์ขัดจังหวะจะดำเนินการโดยตรงโดยชุดควบคุม วิธีที่สองใช้วิธีการควบคุมแบบรวมศูนย์และประกอบด้วยการถ่ายโอนฟังก์ชันการสร้างเวกเตอร์ขัดจังหวะไปยังอุปกรณ์พิเศษ - ตัวควบคุมขัดจังหวะ ที่ รูปแบบ เวกเตอร์ ขัดจังหวะ วิธีพียู ตรรกะของการโพลซอฟต์แวร์ถูกถ่ายโอนไปยังฮาร์ดแวร์ - การกำหนดคำขอที่มีลำดับความสำคัญสูงสุดจะดำเนินการโดยใช้การสำรวจฮาร์ดแวร์ของความพร้อมของชุดควบคุม วิธีนี้เรียกว่า ฮาร์ดแวร์ การเลือกตั้ง. สายคำขอจากชุดควบคุมทั้งหมดจะรวมกันตามรูปแบบ "ที่ติดตั้งหรือ" และเชื่อมต่อกับสายคำขอขัดจังหวะทั่วไป IRQ ของโปรเซสเซอร์ (รูปที่ 40) รูปที่ 40 - การก่อตัวของเวกเตอร์ขัดจังหวะโดยใช้แผงควบคุม เมื่อโปรเซสเซอร์ได้รับการร้องขอการขัดจังหวะผ่านสาย IRQ ตัวประมวลผลจะสร้างสัญญาณควบคุมการยืนยันการขัดจังหวะ INTA ซึ่งจะส่งไปยังตัวควบคุมของชุดควบคุมที่อยู่ใกล้กับโปรเซสเซอร์มากที่สุดในครั้งแรก หาก PU นี้ไม่ต้องการการบำรุงรักษา ตัวควบคุมจะส่งสัญญาณยืนยันการขัดจังหวะไปยังตัวควบคุมถัดไป ไม่เช่นนั้นสัญญาณจะหยุดการแพร่กระจายเพิ่มเติม และตัวควบคุมจะส่งสัญญาณเวกเตอร์ขัดจังหวะไปยังบัสข้อมูล โครงการนี้มีอักขระวนซ้ำที่เด่นชัด บรรทัดรับทราบการขัดจังหวะหนึ่งบรรทัดจะส่งผ่านตามลำดับผ่านตัวควบคุม PU และสร้างโครงสร้างลำดับความสำคัญตามลำดับที่เรียกว่า ห่วงโซ่เดซี่. ลำดับความสำคัญจะพิจารณาจากตำแหน่งทางกายภาพของ PU แต่ละตัว หน่วยควบคุมที่อยู่ใกล้กับโปรเซสเซอร์มากที่สุดจะมีลำดับความสำคัญสูงสุด ห่วงโซ่เดซี่มีข้อดีสองประการ ประการแรก จำเป็นต้องมีบรรทัดคำขอขัดจังหวะเพียงบรรทัดเดียวในบัสระบบ (บรรทัดคำขอหนึ่งบรรทัดยังใช้ในระบบที่มีการโพลซอฟต์แวร์ของความพร้อมหน่วยควบคุม แต่การโพลฮาร์ดแวร์ของความพร้อมหน่วยควบคุมนั้นเร็วกว่ามาก) ประการที่สอง คุณสามารถนำชุดควบคุมใหม่ที่มีลำดับความสำคัญที่จำเป็นเข้าสู่ระบบได้โดยเพียงแค่เชื่อมต่อกับตำแหน่งทางกายภาพที่ต้องการ จำนวนชุดควบคุมในระบบถูกจำกัดด้วยจำนวนเวกเตอร์อินเทอร์รัปต์เท่านั้น อย่างไรก็ตาม สายโซ่เดซีจะช้ากว่าวิธีแบบขนานที่ใช้ในตัวควบคุมอินเทอร์รัปต์ เนื่องจากสัญญาณตอบรับอินเทอร์รัปต์จะแพร่กระจายตามลำดับผ่าน PU แต่ละตัว ข้อเสียอีกประการหนึ่งของโครงสร้างลูปคือความยากในการจัดการลำดับความสำคัญ PU ที่อยู่ในเดซีเชนใกล้กับโปรเซสเซอร์จะมีลำดับความสำคัญสูงกว่า ดังนั้นการเปลี่ยนลำดับความสำคัญจึงต้องเปลี่ยนลำดับการสลับ PU ซึ่งเป็นเรื่องยากในหลายกรณี ระบบขัดจังหวะเวกเตอร์ที่มีประสิทธิภาพสูงสุดถูกนำมาใช้โดยใช้ตัวควบคุมการขัดจังหวะ (รูปที่ 41)
คอนโทรลเลอร์ ขัดจังหวะ (CPR) ถือได้ว่าเป็นส่วนขยายของโปรเซสเซอร์ ด้วยเหตุนี้ บางครั้งจึงเรียกว่าโปรเซสเซอร์ร่วมขัดจังหวะ จากการทำ CPR ระบบเวกเตอร์ขัดจังหวะที่มีลำดับความสำคัญหลายระดับจะถูกสร้างขึ้น CRC รับประกันการรับและการประมวลผลคำขอขัดจังหวะ N ตรรกะลำดับความสำคัญของ KPR เลือกคำขอที่มีลำดับความสำคัญสูงสุดจากคำขอขัดจังหวะที่เข้ามา และเปรียบเทียบกับลำดับความสำคัญปัจจุบันของคำขอที่กำลังให้บริการ เมื่อเกินลำดับความสำคัญปัจจุบัน CPR จะสร้างสัญญาณคำขอขัดจังหวะ INT ซึ่งจะถูกส่งไปยังโปรเซสเซอร์ MP ยืนยันการรับคำขอ INT โดยการสร้างสัญญาณยืนยันการขัดจังหวะ INTA เพื่อตอบสนองการที่ CPR ส่งเวกเตอร์การขัดจังหวะที่สอดคล้องกันไปยังบัสข้อมูลบัสของระบบ ตราบใดที่คำขอยังให้บริการอยู่ คำขอทั้งหมดที่มีลำดับความสำคัญเท่ากันหรือต่ำกว่าจะถูกละเว้น ในเวลาเดียวกัน คำขอที่มีลำดับความสำคัญสูงกว่าจะทำให้สัญญาณ INT ถูกสร้างขึ้น ทำให้เกิดการขัดจังหวะแบบซ้อน หากต้องการควบคุมการทำงานของคอนโทรลเลอร์อย่างรวดเร็ว คุณสามารถตั้งโปรแกรมได้ ซึ่งช่วยให้คุณเปลี่ยนลำดับความสำคัญของคำขอ สร้างเวกเตอร์ขัดจังหวะ ฯลฯ ได้แบบไดนามิก
|