การสลับบริบทเกิดขึ้นในระบบที่คิวพร้อมมีเพียงกระบวนการเดียวและระบบใดที่ใช้การกำหนดเวลาแบบวนรอบหรือไม่

การสลับบริบทเกิดขึ้นในระบบที่คิวพร้อมมีเพียงกระบวนการเดียวและระบบใดที่ใช้การกำหนดเวลาแบบวนรอบหรือไม่

สมมติว่า cpu burst ปัจจุบันของกระบวนการเดียวครอบคลุมมากกว่าหนึ่งส่วนของอัลกอริธึมการปัดเศษ

เหตุผลของฉันมีดังนี้

ขั้นตอนที่อาจเกิดขึ้นเมื่อมีการขัดจังหวะตัวจับเวลาเกิดขึ้นในกรณีทั่วไปคือ

  1. ขัดจังหวะเกิดขึ้น สลับไปที่โหมดเคอร์เนล
  2. OS บันทึกบริบทปัจจุบันลงใน PCB (บันทึกการลงทะเบียน สถานะกระบวนการ และข้อมูลการจัดการหน่วยความจำของกระบวนการปัจจุบัน)
  3. ดำเนินการเฉพาะสถาปัตยกรรมหลายอย่าง รวมถึงการล้างข้อมูลและแคชคำสั่งและ TLB
  4. ใส่กระบวนการปัจจุบันลงในคิวที่พร้อม
  5. เลือกกระบวนการใหม่เพื่อดำเนินการ
  6. โหลดบริบทจาก PCB ของกระบวนการนั้น
  7. สลับไปที่โหมดผู้ใช้ เริ่มดำเนินการกระบวนการใหม่

ตอนนี้ฉันกำลังคิดว่าระบบปฏิบัติการอาจตรวจสอบคิวที่พร้อมใช้งานก่อนและตรวจสอบว่ามีกระบวนการอื่นหรือไม่ หากไม่มีก็ไม่จำเป็นต้องเปลี่ยนบริบท ดังนั้นการจัดการการขัดจังหวะตัวจับเวลาจะต้องสลับระหว่างโหมดผู้ใช้และโหมดเคอร์เนล การตรวจสอบ Q ที่พร้อม และสลับกลับไปยังโหมดผู้ใช้เพื่อดำเนินการกระบวนการต่อ

นี่คือสิ่งที่เกิดขึ้นเหรอ? หรือการสลับบริบทที่เหมาะสมที่เกี่ยวข้องกับการบันทึกสถานะปัจจุบันของกระบวนการเดียวโดยไม่จำเป็นและการกู้คืนสิ่งเดียวกันนั้นเกิดขึ้นหรือไม่

หากเกิดภายหลัง มีเหตุผลพิเศษหรือไม่?

ความสับสนนี้เกิดขึ้นเนื่องจากคำถามในข้อสอบเกี่ยวกับการคำนวณเวลาที่ใช้ในการสลับบริบทในสถานการณ์ดังกล่าว คำตอบที่ให้มาบ่งบอกว่ามีการสลับบริบทเกิดขึ้น

ฉันหวังว่าผู้ที่ได้ดูโค้ดเคอร์เนลจะสามารถเข้าใจเรื่องนี้ได้ ดังนั้นคำถามนี้เกี่ยวกับ stackoverflow


person Abhijith Madhav    schedule 25.01.2012    source แหล่งที่มา


คำตอบ (1)


รหัสต่อไปนี้จาก Linux Kernel จะชี้แจงข้อสงสัยของคุณ ในช่วงเวลาต่างๆ เคอร์เนลจะเรียกตัวกำหนดตารางเวลาเพื่อเลือกกระบวนการใหม่ที่จะรัน แต่อาจกลายเป็นว่าตัวกำหนดเวลาไม่พบงานอื่นนอกจากงานที่กำลังทำงานอยู่ ในกรณีนั้นตัวกำหนดเวลาจะไม่ดำเนินการ "เปลี่ยนบริบท" แต่เพียงส่งคืนโดยไม่ทำอะไรเลย

ตัวอย่างเช่น ฉันให้โค้ดจากเคอร์เนล Linux แก่คุณ

   .........
   if (likely(prev != next)) {<-- if next and current are same, then no context switch
            sched_info_switch(prev, next);
            perf_event_task_sched_out(prev, next);

            rq->nr_switches++;
            rq->curr = next;
            ++*switch_count;

            context_switch(rq, prev, next); /* unlocks the rq */
            /*
             * The context switch have flipped the stack from under us
             * and restored the local variables which were saved when
             * this task called schedule() in the past. prev == current
             * is still correct, but it can be moved to another cpu/rq.
             */
            cpu = smp_processor_id();
            rq = cpu_rq(cpu);
    } else {
     ............
person Saurabh    schedule 25.01.2012
comment
ฉันไม่ได้ตั้งใจจะบอกว่านั่นเป็นขั้นตอนที่แน่นอนและเรียงตามลำดับนั้น ฉันตั้งใจจะบอกว่าสิ่งเหล่านั้นเป็นขั้นตอนที่เป็นไปได้ และอาจไม่จำเป็นหากไม่มีกระบวนการอื่นในคำถามที่พร้อม ฉันจะพยายามทำให้คำถามของฉันชัดเจนยิ่งขึ้น และใช่ พวกเขามาจากหนังสือเรียน ฉันกำลังเรียนรู้เกี่ยวกับระบบปฏิบัติการตอนนี้ - person Abhijith Madhav; 25.01.2012
comment
ดี! หนังสือจะแสดงรายการว่า OS ทำอะไรในกรณีทั่วไป แต่การใช้งานจริงจะดูแลกรณีมุมดังที่คุณกล่าวถึง โปรดทราบว่า ตามนโยบายการจัดกำหนดการ แม้ว่าจะมีกระบวนการที่พร้อมมากกว่า 1 กระบวนการ OS อาจยังคงเลือกกระบวนการที่มีการแบ่งเวลาเพิ่งหมดลง นี่เป็นการตรวจสอบที่มีประโยชน์มาก คุณคงไม่อยากรันโค้ดเพิ่มเติม เพียงแต่พบว่ามันทำให้ระบบของคุณช้าลง - person Saurabh; 25.01.2012
comment
ฉันต้องการยอมรับคำตอบของคุณด้วยเหตุผลที่ว่ารหัส linux ที่คุณแสดงแสดงให้เห็นอย่างชัดเจนว่าการสลับบริบทจะไม่เกิดขึ้นหากมีเพียงกระบวนการเดียว อย่างไรก็ตาม ฉันรู้สึกว่าคำอธิบายข้างต้นโค้ดไม่ได้นำไปสู่ประเด็นที่แสดงโดยโค้ดอย่างเป็นธรรมชาติ สิ่งนี้เกิดขึ้นก่อนที่ฉันจะชี้แจงเกี่ยวกับคำถามนี้ คุณช่วยแก้ไขคำตอบของคุณ (ส่วนที่ไม่ใช่รหัส linux) เพื่อที่ฉันจะได้ยอมรับคำตอบของคุณ ข้อเสนอแนะใด ๆ ในการแก้ไขคำถามของฉันจะยินดี - person Abhijith Madhav; 17.03.2012
comment
ขอบคุณ. แท้จริงแล้วคำอธิบายก่อนหน้านี้ไม่อยู่ในบริบทมากนัก - person Saurabh; 23.04.2012