ขั้นตอนวิธีการตั้งเวลาใดที่ใช้ใน Linux


11

เมื่อเร็ว ๆ นี้ในการสัมภาษณ์ฉันถูกถามเกี่ยวกับอัลกอริทึมการจัดกำหนดการที่ใช้โดยระบบปฏิบัติการ Linux อัลกอริทึมใช้อะไรทำไม?

นอกจากนี้อัลกอริทึมแบบใดที่ใช้ในระบบปฏิบัติการแบบเรียลไทม์และทำไม


สำหรับกระบวนการหรือการตั้งเวลา IO? หรือแม้แต่อย่างอื่น?
maxschlepzig

คำตอบ:


7

ตัวกำหนดเวลางาน Linux ปัจจุบันเรียกว่า Completely Fair Scheduler (CFS) คุณควรดูที่http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txtเพื่อดูรายละเอียดเพิ่มเติม การออกแบบค่อนข้างซับซ้อนและในมุมมองของฉันไม่เหมาะกับ RTOS

เทคนิคทั่วไปในระบบเรียลไทม์คือการจัดตารางอัตราแบบโมโนโทนิกเนื่องจากมีการรับประกันที่รัดกุมหากมีสมมติฐานบางอย่าง (เช่นลำดับความสำคัญของงานคงที่และเวลาดำเนินการและอัตราคงที่) มีอัลกอริธึมอื่น ๆ อีกมากและมีการวิจัยมากมาย ดังนั้นโดยทั่วไปเกี่ยวกับคุณสมบัติที่คุณต้องการและสิ่งที่คุณรู้เกี่ยวกับงานของคุณและสิ่งที่ได้รับการแก้ไข


2

ฉันค่อนข้างแน่ใจไม่ว่าคุณจะเกี่ยวกับการตั้งเวลา I / O ของเคอร์เนลหรือไม่ ในกรณีที่คุณไม่ได้: ละเว้นคำตอบนี้

วิกิพีเดียระบุว่าCFG (การจัดคิวอย่างสมบูรณ์)เป็นค่าเริ่มต้นตั้งแต่เคอร์เนล 2.6.18

ใน openSUSE ของฉัน (ใช้เคอร์เนล 2.6.37) ฉันสามารถสลับระหว่าง CFG, NOOPและกำหนดเวลาได้


ฉันอยากรู้อยากเห็นเราจะเปลี่ยนเป็นอัลกอริทึมที่แตกต่างกันอย่างไร คุณเห็นแสงนี้ได้ไหม ขอบคุณ
rsjethani

@rsjethani ไปที่ YaST -> ระบบ -> การตั้งค่าเคอร์เนล -> แท็บที่ 2 (การตั้งค่าเคอร์เนล) -> Global IO Scheduler (การตั้งชื่อตัวเลือกอาจแตกต่างไปจากที่ฉันแปลจาก GUI ภาษาเยอรมัน)
Torbjörn

1

อัลกอริทึม Round Robin ถูกใช้โดยทั่วไปในสภาพแวดล้อมการแบ่งปันเวลา


0

อัลกอริทึมที่ใช้โดยตัวกำหนดตารางเวลา Linux เป็นรูปแบบที่ซับซ้อนพร้อมการจัดลำดับความสำคัญของการจองล่วงหน้าและการแบ่งเวลาแบบเอนเอียง มันกำหนดควอนตัมเวลาที่นานขึ้นให้กับงานที่มีลำดับความสำคัญสูงกว่าและควอนตัมเวลาที่สั้นลงเพื่องานที่มีลำดับความสำคัญต่ำกว่า

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

งานอื่น ๆ ทั้งหมดมีการจัดลำดับความสำคัญแบบไดนามิกในช่วง [100,139] ขึ้นอยู่กับการโต้ตอบของงานที่ขึ้นอยู่กับค่าที่ดีของพวกเขาบวกหรือลบค่า 5 งานที่มีการโต้ตอบมากกว่าปกติจะมีเวลาพักนานกว่า ปรับได้ใกล้เคียงกับ −5 เนื่องจากตัวกำหนดตารางเวลารองรับงานแบบโต้ตอบ (การโต้ตอบของงานนั้นถูกกำหนดโดยระยะเวลาที่หลับระหว่างรอ I / O) การโต้ตอบของงานเป็นตัวกำหนดว่าค่า 5 จะถูกเพิ่มหรือลบออกจากค่า nice หรือไม่ ผลลัพธ์ของการปรับปรุงดังกล่าวจะมีความสำคัญสูงกว่าสำหรับงานเหล่านี้ ในทางกลับกันงานที่มีเวลาพักเครื่องที่สั้นกว่านั้นมักจะมีผลผูกพันกับ CPU มากขึ้นและจะทำให้ลำดับความสำคัญลดลง

เคอร์เนลรักษารายการของงานที่รันได้ทั้งหมดในโครงสร้างข้อมูล runqueue runqueue มีสองลำดับความสำคัญอาร์เรย์: ใช้งานและหมดอายุ อาเรย์ที่แอคทีฟมีงานทั้งหมดที่มีเวลาเหลืออยู่ในสไลซ์เวลาและอาเรย์ที่หมดอายุนั้นมีงานที่หมดอายุทั้งหมด แต่ละลำดับความสำคัญเหล่านี้มีรายการงานที่จัดทำดัชนีตามลำดับความสำคัญ ตัวกำหนดตารางเวลาเลือกงานที่มีลำดับความสำคัญสูงสุดจากอาร์เรย์ที่ใช้งานอยู่เพื่อดำเนินการกับ CPU เมื่องานทั้งหมดหมดเวลาของพวกเขา (นั่นคืออาเรย์ที่ใช้งานอยู่จะว่างเปล่า), ลำดับความสำคัญสองลำดับจะถูกแลกเปลี่ยน: อาเรย์ที่หมดอายุจะกลายเป็นอาเรย์ที่ใช้งานอยู่และในทางกลับกัน

ลำดับความสำคัญแบบไดนามิกของงานจะถูกคำนวณใหม่เมื่องานหมดเวลาของควอนตัมและจะถูกย้ายไปยังอาร์เรย์ที่หมดอายุ ดังนั้นเมื่อมีการแลกเปลี่ยนสองอาร์เรย์งานทั้งหมดในอาร์เรย์ที่ใช้งานใหม่จะถูกกำหนดลำดับความสำคัญใหม่และแบ่งส่วนเวลาที่สอดคล้องกัน (หมายเหตุ: นี่เป็นข้อความที่ตัดตอนมาจากหนังสือแนวคิดระบบปฏิบัติการ (ฉบับที่ 9) โดย Abraham Silberschatz, et. al. สำหรับรายละเอียดโปรดดูหัวข้อ 5.6.3 ของหนังสือเล่มนี้)


ยินดีต้อนรับสู่เว็บไซต์และขอขอบคุณสำหรับการสนับสนุนของคุณ โปรดใช้การจัดรูปแบบ "อัญประกาศ" (เช่นเริ่มด้วย>) สำหรับส่วนต่าง ๆ ของคำตอบที่คุณได้รับจากแหล่งข้อมูลภายนอกโดยเฉพาะเมื่ออ้างอิงจากหนังสือ
AdminBee

0

นี่คือคำตอบสำหรับคำถามอื่นของคุณ ระบบเรียลไทม์ (RTS) มีสองประเภทคือแข็งและอ่อน อัลกอริทึมการจัดกำหนดการ CPU สำหรับ RTS ที่ยากคืออัลกอริทึมยึดเอาเสียก่อนตามลำดับความสำคัญและสำหรับ soft RTS นั้นมีความสำคัญที่ไม่ต้องเสียสิทธิ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.