เมื่อเร็ว ๆ นี้ในการสัมภาษณ์ฉันถูกถามเกี่ยวกับอัลกอริทึมการจัดกำหนดการที่ใช้โดยระบบปฏิบัติการ Linux อัลกอริทึมใช้อะไรทำไม?
นอกจากนี้อัลกอริทึมแบบใดที่ใช้ในระบบปฏิบัติการแบบเรียลไทม์และทำไม
เมื่อเร็ว ๆ นี้ในการสัมภาษณ์ฉันถูกถามเกี่ยวกับอัลกอริทึมการจัดกำหนดการที่ใช้โดยระบบปฏิบัติการ Linux อัลกอริทึมใช้อะไรทำไม?
นอกจากนี้อัลกอริทึมแบบใดที่ใช้ในระบบปฏิบัติการแบบเรียลไทม์และทำไม
คำตอบ:
ตัวกำหนดเวลางาน Linux ปัจจุบันเรียกว่า Completely Fair Scheduler (CFS) คุณควรดูที่http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txtเพื่อดูรายละเอียดเพิ่มเติม การออกแบบค่อนข้างซับซ้อนและในมุมมองของฉันไม่เหมาะกับ RTOS
เทคนิคทั่วไปในระบบเรียลไทม์คือการจัดตารางอัตราแบบโมโนโทนิกเนื่องจากมีการรับประกันที่รัดกุมหากมีสมมติฐานบางอย่าง (เช่นลำดับความสำคัญของงานคงที่และเวลาดำเนินการและอัตราคงที่) มีอัลกอริธึมอื่น ๆ อีกมากและมีการวิจัยมากมาย ดังนั้นโดยทั่วไปเกี่ยวกับคุณสมบัติที่คุณต้องการและสิ่งที่คุณรู้เกี่ยวกับงานของคุณและสิ่งที่ได้รับการแก้ไข
ฉันค่อนข้างแน่ใจไม่ว่าคุณจะเกี่ยวกับการตั้งเวลา I / O ของเคอร์เนลหรือไม่ ในกรณีที่คุณไม่ได้: ละเว้นคำตอบนี้
วิกิพีเดียระบุว่าCFG (การจัดคิวอย่างสมบูรณ์)เป็นค่าเริ่มต้นตั้งแต่เคอร์เนล 2.6.18
ใน openSUSE ของฉัน (ใช้เคอร์เนล 2.6.37) ฉันสามารถสลับระหว่าง CFG, NOOPและกำหนดเวลาได้
อัลกอริทึม Round Robin ถูกใช้โดยทั่วไปในสภาพแวดล้อมการแบ่งปันเวลา
อัลกอริทึมที่ใช้โดยตัวกำหนดตารางเวลา Linux เป็นรูปแบบที่ซับซ้อนพร้อมการจัดลำดับความสำคัญของการจองล่วงหน้าและการแบ่งเวลาแบบเอนเอียง มันกำหนดควอนตัมเวลาที่นานขึ้นให้กับงานที่มีลำดับความสำคัญสูงกว่าและควอนตัมเวลาที่สั้นลงเพื่องานที่มีลำดับความสำคัญต่ำกว่า
มันระบุแต่ละกระบวนการไม่ว่าจะเป็นกระบวนการตามเวลาจริงหรือกระบวนการ (อื่น ๆ ) ปกติ งานแบบเรียลไทม์ได้รับการจัดลำดับความสำคัญแบบคงที่ในช่วง [0,99] ซึ่งจำนวนที่ต่ำกว่าหมายถึงลำดับความสำคัญสูงกว่า
งานอื่น ๆ ทั้งหมดมีการจัดลำดับความสำคัญแบบไดนามิกในช่วง [100,139] ขึ้นอยู่กับการโต้ตอบของงานที่ขึ้นอยู่กับค่าที่ดีของพวกเขาบวกหรือลบค่า 5 งานที่มีการโต้ตอบมากกว่าปกติจะมีเวลาพักนานกว่า ปรับได้ใกล้เคียงกับ −5 เนื่องจากตัวกำหนดตารางเวลารองรับงานแบบโต้ตอบ (การโต้ตอบของงานนั้นถูกกำหนดโดยระยะเวลาที่หลับระหว่างรอ I / O) การโต้ตอบของงานเป็นตัวกำหนดว่าค่า 5 จะถูกเพิ่มหรือลบออกจากค่า nice หรือไม่ ผลลัพธ์ของการปรับปรุงดังกล่าวจะมีความสำคัญสูงกว่าสำหรับงานเหล่านี้ ในทางกลับกันงานที่มีเวลาพักเครื่องที่สั้นกว่านั้นมักจะมีผลผูกพันกับ CPU มากขึ้นและจะทำให้ลำดับความสำคัญลดลง
เคอร์เนลรักษารายการของงานที่รันได้ทั้งหมดในโครงสร้างข้อมูล runqueue runqueue มีสองลำดับความสำคัญอาร์เรย์: ใช้งานและหมดอายุ อาเรย์ที่แอคทีฟมีงานทั้งหมดที่มีเวลาเหลืออยู่ในสไลซ์เวลาและอาเรย์ที่หมดอายุนั้นมีงานที่หมดอายุทั้งหมด แต่ละลำดับความสำคัญเหล่านี้มีรายการงานที่จัดทำดัชนีตามลำดับความสำคัญ ตัวกำหนดตารางเวลาเลือกงานที่มีลำดับความสำคัญสูงสุดจากอาร์เรย์ที่ใช้งานอยู่เพื่อดำเนินการกับ CPU เมื่องานทั้งหมดหมดเวลาของพวกเขา (นั่นคืออาเรย์ที่ใช้งานอยู่จะว่างเปล่า), ลำดับความสำคัญสองลำดับจะถูกแลกเปลี่ยน: อาเรย์ที่หมดอายุจะกลายเป็นอาเรย์ที่ใช้งานอยู่และในทางกลับกัน
ลำดับความสำคัญแบบไดนามิกของงานจะถูกคำนวณใหม่เมื่องานหมดเวลาของควอนตัมและจะถูกย้ายไปยังอาร์เรย์ที่หมดอายุ ดังนั้นเมื่อมีการแลกเปลี่ยนสองอาร์เรย์งานทั้งหมดในอาร์เรย์ที่ใช้งานใหม่จะถูกกำหนดลำดับความสำคัญใหม่และแบ่งส่วนเวลาที่สอดคล้องกัน (หมายเหตุ: นี่เป็นข้อความที่ตัดตอนมาจากหนังสือแนวคิดระบบปฏิบัติการ (ฉบับที่ 9) โดย Abraham Silberschatz, et. al. สำหรับรายละเอียดโปรดดูหัวข้อ 5.6.3 ของหนังสือเล่มนี้)
>
) สำหรับส่วนต่าง ๆ ของคำตอบที่คุณได้รับจากแหล่งข้อมูลภายนอกโดยเฉพาะเมื่ออ้างอิงจากหนังสือ
นี่คือคำตอบสำหรับคำถามอื่นของคุณ ระบบเรียลไทม์ (RTS) มีสองประเภทคือแข็งและอ่อน อัลกอริทึมการจัดกำหนดการ CPU สำหรับ RTS ที่ยากคืออัลกอริทึมยึดเอาเสียก่อนตามลำดับความสำคัญและสำหรับ soft RTS นั้นมีความสำคัญที่ไม่ต้องเสียสิทธิ์