Apakah peralihan konteks terjadi pada sistem yang antrian siap pakainya hanya memiliki satu proses dan menggunakan penjadwalan round-robin?

Apakah peralihan konteks terjadi pada sistem yang antrian siap pakainya hanya memiliki satu proses dan menggunakan penjadwalan round-robin?

Asumsikan bahwa ledakan cpu saat ini dari proses tunggal mencakup lebih dari satu potongan waktu algoritma round-robin.

Alasan saya seperti di bawah ini

Langkah-langkah yang mungkin terjadi ketika interupsi pengatur waktu terjadi pada kasus biasa adalah

  1. Interupsi terjadi. Beralih ke mode kernel
  2. OS menyimpan konteks saat ini ke dalam PCB (menyimpan register, status proses, dan info manajemen memori dari proses saat ini)
  3. Lakukan banyak operasi khusus arsitektur, termasuk menghapus data dan cache instruksi serta TLB.
  4. Masukkan proses saat ini ke dalam antrian siap
  5. Pilih proses baru untuk dijalankan
  6. Muat konteks dari PCB proses itu
  7. Beralih ke mode pengguna. Mulai jalankan proses baru

Saya sekarang berpikir bahwa OS sebaiknya memeriksa antrian siap terlebih dahulu dan memeriksa apakah ada proses lain. Jika tidak ada maka tidak diperlukan peralihan konteks. Jadi penanganan interupsi pengatur waktu akan memerlukan peralihan antara mode pengguna dan mode kernel, memeriksa Q yang siap, dan beralih kembali ke mode pengguna untuk melanjutkan eksekusi proses.

Apakah ini yang terjadi? Atau apakah terjadi peralihan konteks yang tepat yang melibatkan penyimpanan yang tidak perlu dari keadaan saat ini dari satu-satunya proses dan pemulihannya?

Jika nanti memang terjadi, apakah ada alasan khusus?

Kebingungan ini muncul karena adanya pertanyaan di kertas ujian mengenai penghitungan waktu yang dihabiskan dalam peralihan konteks dalam situasi seperti itu. Jawaban yang diberikan menyiratkan bahwa peralihan konteks memang terjadi.

Saya berharap orang-orang yang telah mempelajari kode kernel dapat memahami hal ini. Demikian pertanyaan tentang stackoverflow ini.


person Abhijith Madhav    schedule 25.01.2012    source sumber


Jawaban (1)


Kode berikut dari Kernel Linux akan memperjelas keraguan Anda. Pada waktu yang berbeda, kernel akan memanggil penjadwal untuk memilih proses baru yang akan dijalankan. Namun ternyata penjadwal tidak menemukan tugas lain selain tugas yang sedang berjalan. Dalam hal ini penjadwal tidak akan melakukan "pengalihan konteks" melainkan kembali tanpa melakukan apa pun.

Misalnya, saya memberi Anda kode dari 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
Saya tidak bermaksud mengatakan bahwa itu adalah langkah-langkah yang tepat dan berurutan. Saya bermaksud mengatakan bahwa itu adalah langkah-langkah yang mungkin dan mungkin tidak diperlukan jika tidak ada proses lain dalam Q siap. Saya akan mencoba memperjelasnya dalam pertanyaan saya. Dan ya, itu berasal dari buku teks. Saya sedang belajar tentang sistem operasi sekarang. - person Abhijith Madhav; 25.01.2012
comment
Bagus! Sebuah buku akan mencantumkan, apa yang dilakukan OS secara umum. Namun implementasi sebenarnya akan menangani kasus-kasus sudut, seperti yang Anda sebutkan. Perhatikan bahwa, berdasarkan kebijakan penjadwalan, meskipun terdapat lebih dari 1 proses yang siap, OS mungkin masih memilih proses yang potongan waktunya baru saja habis. Jadi ini adalah pemeriksaan yang sangat berguna. Anda tidak ingin menjalankan kode tambahan, hanya untuk mengetahui bahwa itu membuat sistem Anda lebih lambat. - person Saurabh; 25.01.2012
comment
Saya ingin menerima jawaban Anda karena kode linux yang Anda tunjukkan dengan jelas menunjukkan bahwa peralihan konteks tidak terjadi jika hanya ada satu proses. Namun saya merasa bahwa penjelasan kode di atas tidak mengarah secara alami pada poin yang diungkapkan oleh kode tersebut. Ini terjadi sebelum saya mengklarifikasi pertanyaan tersebut. Bisakah Anda mengedit jawaban Anda (bagian kode non linux) sehingga saya dapat menerima jawaban Anda. Setiap saran untuk mengedit pertanyaan saya akan diterima. - person Abhijith Madhav; 17.03.2012
comment
Terima kasih. Memang penjelasan sebelumnya agak terlalu keluar konteks. - person Saurabh; 23.04.2012