สำหรับการจัดการเหตุการณ์ที่เกิดขึ้นแบบอะซิงโครนัสที่เกี่ยวข้องกับการทำงานของโปรแกรม เหมาะที่สุด กลไกการขัดจังหวะ.

ขัดจังหวะ ถือได้ว่าเป็นเหตุการณ์พิเศษบางอย่างในระบบที่ต้องการการตอบสนองทันที ตัวอย่างเช่น ระบบที่มีความน่าเชื่อถือสูงที่ออกแบบมาอย่างดีใช้ระบบไฟฟ้าขัดข้องในการดำเนินการขั้นตอนการเขียนเนื้อหาของรีจิสเตอร์และ 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 ให้กับตัวจัดการการขัดจังหวะ และโดยการเลือกโหมด ให้ไปที่ส่วนของโค้ดที่ต้องการ แต่นี่ค่อนข้างยุ่งยาก และที่สำคัญที่สุด เวลาในการเปลี่ยนจะแตกต่างกัน ขึ้นอยู่กับ ลำดับที่โครงสร้างการสำรวจเปรียบเทียบสวิตช์เคสจะเกิดขึ้น

นั่นคือในสวิตช์เช่น:

1 2 3 4 5 6 7 สวิตช์ (x) ( 1 : แอคชั่น 1 2 : แอคชั่น 2 3 : แอคชั่น 3 4 : แอคชั่น 4 )

สวิตช์ (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 ; ขัดจังหวะเปิด

เพียงเท่านี้ คุณก็สามารถเริ่มจับเวลาและรอการขัดจังหวะของเราได้ มันคล้ายกับกรณีอื่นๆ

และตัวจัดการดูเหมือนว่า:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 ;============================ ;============================ ; การเข้าสู่การขัดจังหวะโอเวอร์โฟลว์จาก 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

;============================ ;============================ ; การเข้าสู่การขัดจังหวะโอเวอร์โฟลว์จาก 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
แต่เราควรทำอย่างไรหากโปรแกรมของเราถูกสร้างขึ้นในลักษณะที่โค้ดทั้งหมดหมุนไปตามสายโซ่งานผ่านตัวจัดการ RTOS? เป็นการยากมากที่จะคำนวณในใจของคุณว่าโซ่เหล่านี้ทำงานสัมพันธ์กันอย่างไร และแต่ละคนสามารถพยายามจับเวลาได้ (แน่นอนว่าเรากำลังเขียนโปรแกรมตามคำแนะนำของเรา แต่จะเป็นการยากที่จะติดตามทุกอย่างให้ทันเวลา)
ในแกนขนาดใหญ่สมัยใหม่ มีกลไกการกีดกันร่วมกันสำหรับกรณีนี้ - mutex เหล่านั้น. มันเป็นธงที่วุ่นวาย หากกระบวนการบางอย่างสื่อสารกับ UART เช่น กระบวนการอื่นจะไม่กล้าใส่ไบต์ที่นั่นและรออย่างเชื่อฟังจนกว่ากระบวนการแรกจะปล่อย UART ให้ว่าง ซึ่งแฟล็กจะส่งสัญญาณ

ของฉันไม่มีกลไกการกีดกันซึ่งกันและกัน แต่สามารถนำไปใช้ได้ อย่างน้อยก็ทำให้มีความคล้ายคลึงกันน้อยที่สุด ฉันไม่ต้องการดำเนินการขยะทั้งหมดนี้อย่างเต็มที่ เพราะ... เป้าหมายของฉันคือรักษาขนาดเคอร์เนลไว้ที่ 500-800 ไบต์
วิธีที่ง่ายที่สุดคือสำรองอีกหนึ่งไบต์ในหน่วยความจำ - ตัวแปรไม่ว่าง และเมื่อกระบวนการหนึ่งยึดทรัพยากร ตัวแปรนี้จะบันทึกเวลาที่จะปล่อยทรัพยากรโดยประมาณ เวลาผ่านไปในเครื่องหมายตัวจับเวลาของระบบ ซึ่งสำหรับฉันคือ 1 มิลลิวินาที
หากกระบวนการอื่นพยายามเข้าถึงทรัพยากรฮาร์ดแวร์เดียวกัน ขั้นตอนแรกจะดูสถานะไม่ว่าง นับเวลาที่จะไม่ว่างและเลิกสูบบุหรี่ในช่วงเวลานี้ - จะโหลดตัวเองเข้าสู่คิวตัวจับเวลา ที่นั่นเขาจะตรวจสอบอีกครั้งและต่อๆ ไป นี่เป็นตัวเลือกที่ง่ายที่สุด

ปัญหาคือหากมีผู้สมัครจำนวนมากสำหรับเวกเตอร์เดียว กระบวนการต่างๆ จะยังคงดำเนินต่อไป เหมือนเด็กขี้เมาอยู่รอบห้องน้ำเพียงแห่งเดียวในจัตุรัสในช่วงเทศกาลเฉลิมฉลอง หากใครคนหนึ่งกระเพาะปัสสาวะทนไม่ได้ อัลกอริธึมก็จะพัง และใครจะสนใจที่จะเดาที่นี่เพราะ... มันจะเป็นเรื่องยากที่จะสร้างแบบจำลองนี้

วิธีแก้ปัญหาคือเพิ่มเชนถัดไป คราวนี้เพื่อเข้าถึงทรัพยากร เพื่อที่จะไม่อยู่เฉยๆเลย เหล่านั้น. คนหนึ่งกระโดดออกมา จากนั้นวินาที สาม และต่อไปเรื่อยๆ จนกว่ากระบวนการทั้งหมดจะบรรเทาความต้องการ USART บางประเภทลง
ข้อเสียชัดเจน - คิวอื่นหมายถึงหน่วยความจำเพิ่มเติม รหัสเพิ่มเติม เวลาเพิ่มเติม แน่นอนคุณสามารถบิดเบือนและใส่รหัสของผู้จัดการวงจรหลักลงในคิวเวกเตอร์ได้ แต่ที่นี่คุณต้องแก้ไขทุกอย่างอย่างระมัดระวังเพราะจะถูกเรียกโดยหยุดชะงัก! ใช่ และมันก็ยุ่งยาก จำเป็นเฉพาะเมื่อเรามีคนจำนวนมากเต็มใจที่จะทำเท่านั้น

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

แน่นอนว่าตัวจับเวลาแสดงไว้ที่นี่เป็นตัวอย่าง ปัญหาส่วนใหญ่สามารถแก้ไขได้ด้วยตัวจับเวลาของระบบ RTOS แต่ถ้าคุณต้องการความรอบคอบน้อยลงหรือการตอบสนองความเร็วสูงต่อเหตุการณ์อย่างกะทันหัน (และไม่จนกว่าสายพานลำเลียงหลักจะดำเนินการเพื่อ การดำเนินการ) จากนั้นกลไกการขัดจังหวะแบบควบคุม IMHO คือสิ่งที่ดร. กำหนดไว้

  • 5. การจัดระบบไมโครโปรเซสเซอร์ (MPS): หลักการโมดูลาร์หลักของการจัดองค์กรของ MPS ซึ่งเป็นคลาสหลักของไมโครโปรเซสเซอร์ ระบบไมโครโปรเซสเซอร์ (MPS)
  • 6. โครงสร้างทั่วไปของทางรถไฟนครหลวง: สายหลัก, น้ำตกหลัก, รัศมีหลัก
  • 7. การจัดระเบียบบัสของระบบไมโครโปรเซสเซอร์: มีบัสหนึ่งบัสมีบัสสองประเภทและมีบัสสามประเภท
  • 8. ลักษณะของไมโครโปรเซสเซอร์
  • 9. การจัดระเบียบแกนหลักของระบบไมโครโปรเซสเซอร์ บัสสามบัสพร้อมบัสที่อยู่และบัสส่งข้อมูลแยกกัน
  • 10. รอบการเข้าถึงทางหลวง
  • 11. การจัดระบบการเข้าถึงทางหลวงด้วยการเข้าถึงแบบซิงโครนัส
  • 12. การจัดระบบการเข้าถึงทางหลวงด้วยการเข้าถึงแบบอะซิงโครนัส
  • 13. การรวมกันของแอดเดรสบัสและบัสข้อมูล บัสสองบัสพร้อมบัสแอดเดรส/ข้อมูลรวม
  • 14. กลไกในการส่งข้อมูลแพ็คเก็ตผ่านบัสระบบ
  • 15. สถาปัตยกรรมของระบบย่อยหน่วยความจำของระบบไมโครโปรเซสเซอร์ ลักษณะของระบบย่อยหน่วยความจำของระบบไมโครโปรเซสเซอร์
  • 16. หน่วยความจำที่อยู่ (อุปกรณ์เก็บข้อมูลการเข้าถึงโดยสุ่ม)
  • 17. หน่วยความจำเชื่อมโยง
  • 18. หน่วยความจำสแต็ค
  • 19. หน่วยความจำหลัก: รูปแบบ block, cyclic และ block-cyclic สำหรับการจัดระเบียบหน่วยความจำหลัก
  • 20. หน่วยความจำแคช หลักการแคชหน่วยความจำ
  • 21. วิธีการแมปหน่วยความจำหลักกับหน่วยความจำแคช สถาปัตยกรรมแคช
  • 22. อัลกอริทึมสำหรับการแทนที่ข้อมูลในหน่วยความจำแคชเต็ม
  • 23. อัลกอริทึมสำหรับการกระทบยอดเนื้อหาของหน่วยความจำแคชและหน่วยความจำหลัก
  • 24.แนวคิดของหน่วยความจำเสมือน
  • 25.การจัดเพจของหน่วยความจำเสมือน
  • 26.การจัดกลุ่มหน่วยความจำเสมือน การจัดระเบียบหน้าเซ็กเมนต์รวมของหน่วยความจำเสมือน
  • 27.สถาปัตยกรรมของระบบย่อยอินพุต/เอาท์พุตของระบบไมโครโปรเซสเซอร์
  • 28.การจัดระบบการหยุดชะงักในระบบไมโครโปรเซสเซอร์
  • 29.ระบบขัดจังหวะเรเดียล
  • 30. ระบบขัดจังหวะเวกเตอร์
  • 31.การจัดระบบการเข้าถึงหน่วยความจำโดยตรงในระบบไมโครโปรเซสเซอร์
  • 32.สถาปัตยกรรมแบตเตอรี่ของไมโครโปรเซสเซอร์
  • 33.ลงทะเบียนสถาปัตยกรรมของไมโครโปรเซสเซอร์
  • 34. สถาปัตยกรรมของไมโครโปรเซสเซอร์ที่มีการเข้าถึงหน่วยความจำเฉพาะ
  • 35.สถาปัตยกรรมสแต็กของไมโครโปรเซสเซอร์
  • 36. การจำแนกประเภทของคำสั่งไมโครโปรเซสเซอร์
  • 37.โครงสร้าง(รูปแบบ)ของคำสั่งไมโครโปรเซสเซอร์
  • 38. ลงทะเบียนโครงสร้างของไมโครโปรเซสเซอร์
  • 39. การระบุข้อมูลในไมโครโปรเซสเซอร์: การนำเสนอข้อมูลที่อยู่ วิธีการระบุที่อยู่
  • 40. การจัดการหน่วยความจำในไมโครโปรเซสเซอร์: การกำหนดแอดเดรสเชิงเส้นและเซ็กเมนต์ การแปลงที่อยู่โลจิคัลไปเป็นฟิสิคัล การจัดการหน่วยความจำเสมือน
  • 41. การป้องกันหน่วยความจำในไมโครโปรเซสเซอร์: กลไกการป้องกัน แนวคิดเรื่องสิทธิพิเศษ
  • 42.การสนับสนุนระบบปฏิบัติการในไมโครโปรเซสเซอร์
  • 43.การหยุดชะงักแบบพิเศษ (กรณีพิเศษ ข้อยกเว้น) ในไมโครโปรเซสเซอร์
  • 44. โหมดการทำงานของไมโครโปรเซสเซอร์หลายโปรแกรม
  • 45. การจัดโครงสร้างของไมโครคอนโทรลเลอร์ชิปตัวเดียว (โดยใช้ตัวอย่างของไมโครคอนโทรลเลอร์ 8 บิต): หลักการออกแบบโมดูลาร์ ประเภทของแกนประมวลผล
  • 46. ​​หน่วยความจำที่อยู่อาศัย (ภายใน) ของไมโครคอนโทรลเลอร์
  • 47. อุปกรณ์ต่อพ่วงไมโครคอนโทรลเลอร์: พอร์ตอินพุต/เอาต์พุตแบบขนาน ตัวจับเวลาและตัวประมวลผลเหตุการณ์ อินเทอร์เฟซอินพุต/เอาต์พุตแบบอนุกรม
  • 48. ความรู้พื้นฐานการจัดอินเทอร์เฟซของระบบไมโครโปรเซสเซอร์
  • 49.การจำแนกประเภทของอินเทอร์เฟซ
  • 50.การจัดระบบการส่งข้อมูลแบบขนาน
  • 51.องค์กรของการส่งข้อมูลแบบอนุกรม
  • 52. พื้นฐานของการออกแบบระบบไมโครโปรเซสเซอร์: วงจรการออกแบบ MPS การพัฒนา MPS และเครื่องมือแก้ไขจุดบกพร่อง
  • 30. ระบบขัดจังหวะเวกเตอร์

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

    เวกเตอร์ขัดจังหวะอาจเป็น:

    คำสั่งเรียกรูทีนย่อยที่สมบูรณ์พร้อมกับที่อยู่ของรูทีนย่อยบริการขัดจังหวะ

    ที่อยู่ของรูทีนบริการขัดจังหวะ

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

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

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

    รูปที่ 40 - การก่อตัวของเวกเตอร์ขัดจังหวะโดยใช้แผงควบคุม

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

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

    รูปที่ 41 - ระบบขัดจังหวะเวกเตอร์ที่ใช้ตัวควบคุมขัดจังหวะ

    คอนโทรลเลอร์ ขัดจังหวะ (CPR) ถือได้ว่าเป็นส่วนขยายของโปรเซสเซอร์ ด้วยเหตุนี้ บางครั้งจึงเรียกว่าโปรเซสเซอร์ร่วมขัดจังหวะ จากการทำ CPR ระบบเวกเตอร์ขัดจังหวะที่มีลำดับความสำคัญหลายระดับจะถูกสร้างขึ้น CRC รับประกันการรับและการประมวลผลคำขอขัดจังหวะ N ตรรกะลำดับความสำคัญของ KPR เลือกคำขอที่มีลำดับความสำคัญสูงสุดจากคำขอขัดจังหวะที่เข้ามา และเปรียบเทียบกับลำดับความสำคัญปัจจุบันของคำขอที่กำลังให้บริการ เมื่อเกินลำดับความสำคัญปัจจุบัน CPR จะสร้างสัญญาณคำขอขัดจังหวะ INT ซึ่งจะถูกส่งไปยังโปรเซสเซอร์ MP ยืนยันการรับคำขอ INT โดยการสร้างสัญญาณยืนยันการขัดจังหวะ INTA เพื่อตอบสนองการที่ CPR ส่งเวกเตอร์การขัดจังหวะที่สอดคล้องกันไปยังบัสข้อมูลบัสของระบบ ตราบใดที่คำขอยังให้บริการอยู่ คำขอทั้งหมดที่มีลำดับความสำคัญเท่ากันหรือต่ำกว่าจะถูกละเว้น ในเวลาเดียวกัน คำขอที่มีลำดับความสำคัญสูงกว่าจะทำให้สัญญาณ INT ถูกสร้างขึ้น ทำให้เกิดการขัดจังหวะแบบซ้อน หากต้องการควบคุมการทำงานของคอนโทรลเลอร์อย่างรวดเร็ว คุณสามารถตั้งโปรแกรมได้ ซึ่งช่วยให้คุณเปลี่ยนลำดับความสำคัญของคำขอ สร้างเวกเตอร์ขัดจังหวะ ฯลฯ ได้แบบไดนามิก

    "