Strategi penjadwalan proses secara umum dibedakan menjadi dua kelompok besar, yaitu penjadwalan non-preemptive dan preemptive.

  1. Non-preemptive (run-to-completion), pada strategi non-preemptive, begitu proses lain tidak dapat mengambil alih eksekusi prosesor. Pengalihan hanya dapat terjadi jika proses yang running sudah selesai, baik secara normal maupun abnormal. Strategi ini membahayakan sistem dan proses lain, sebab jika proses yang sedang berjalan mengalami kegagalan, crash ataupun looping tak berhingga maka sistem operasi menjadi tidak berfungsi dan proses lain tidak mendapatkan kesempatan untuk dieksekusi. Strategi penjadwalan non-preemptive umumnya digunakan pada sistem batch atau sekuensial.
  2. Preemptive, pada strategi preemptive sistem operasi dan proses lain dapat mengambil alih eksekusi prosesor tanpa harus menunggu proses yang sedang running menyelesaikan tugasnya. Penjadwalan preemptive merupakan fitur yang penting, terutama pada sistem dimana proses-proses memerlukan tanggapan prosesor secara cepat. Sebagai contoh adalah sistem real-time, dimana jika terjadi interupsi dan tidak segera dilayani maka dapat berakibat fatal. Contoh lain adalah sistem interaktif time-sharing, dimana pengguna sistem mengharapkan tanggapan yang cepat dari sistem. Secara umum, sistem konkuren seperti sistem operasi yang multitasking lebih menghendaki sistem penjadwalan preemptive.

Pemicu Terjadinya Penjadwalan

Kapan sesungguhnya penjadwalan itu dilakukan oleh sistem operasi? Pada gambar dibawah ini kemungkinan transisi proses yang memicu terjadinya penjadwalan proses.

Pemicu terjadinya penjadwalan proses
Pemicu terjadinya penjadwalan proses

Sejumlah pemicu atau keadaan yang mengaktifkan fungsi penjadwalan proses antara lain:

  1. Proses berubah dari status running ke blocked, keadaan ini dapat disebabkan karena proses melakukan system call untuk meminta operasi I/O (I/O Request), seperti membaca berkas dari disk ataupun scanner atau karena menunggu suatu event atau interupsi (wait for an interrupt), seperti inputan keyboard oleh pengguna. System call tersebut akan mengalihkan proses yang running ke status blocked dan kemudian memanggil rutin penjadwalan proses (scheduller) untuk memilih proses berikutnya yang akan dieksekusi.
  2. Proses berubah dari status running ke ready. Keadaan ini disebabkan proses yang sedang running sudah habis time-slice-nya (time slice expired). Pengendalian jatah waktu eksekusi dilakukan oleh suatu pewaktu yang akan melakukan interupsi ke prosesor jika jatah waktu eksekusi suatu proses sudah habis. Rutin penanganan interupsi pewaktu ini selanjutnya akan mengalihkan proses running ke status ready dan kemudian memanggil rutin penjadwalan proses untuk memilih proses berikutnya yang akan dieksekusi.
  3. Proses berubah dari status blocked ke ready. Ketika permintaan akses I/O ataupun event yang ditunggu oleh suatu proses yang berstatus blocked telah terpenuhi maka akan terjadi interupsi. Akibatnya proses yang sedang running akan terhenti dan terjadi pengalihan konteks eksekusi ke rutin penanganan interupsi. Rutin ini akan mengalihkan proses yang meminta akses I/O dari status blocked menjadi ready atau dengan kata lain memindahkan proses tersebut dari antrian I/O ke antrian ready. Pada akhirnya rutin ini akan memanggil fungsi penjadwalan proses. Perhatikan, proses yang terpilih dapat berupa proses yang terakhir running atau proses yang baru dipindahkan ke antrian ready ataupun proses lain yang ada sudah berada di antrian ready.
  4. Proses berhenti (Terminated). Proses yang berhenti secara normal akan memanggil system call exit“, sedangkan proses yang berhenti secara abnormal umumnya disertai dengan terjadinya trap. Rutin system call exit maupun rutin penanganan trap seperti itu akan melakukan penghapusan proses dari sistem dan diakhiri dengan memanggil fungsi penjadwalan proses.

Pada sistem yang menggunakan strategi penjadwalan non-preemptive, fungsi penjadwalan proses hanya dipicu oleh keadaan nomor 1 dan 4.