Apa itu multiprogramming?
Multiprogramming adalah bentuk dasar dari parallel processing, di mana beberapa program dijalankan secara bersamaan pada sistem uniprocessor. Tapi, karena hanya ada satu prosesor, tidak ada eksekusi simultan yang sebenarnya. Sebaliknya, sistem operasi (OS) menjalankan sebagian dari satu program, lalu sebagian dari program lain, dan seterusnya. Jadi, multiprogramming ini lebih mirip pseudo-parallelism. Dari perspektif pengguna, kelihatannya banyak program jalan sekaligus, padahal sebenarnya tidak.
Sebelum ada multiprogramming, komputer dengan satu prosesor hanya bisa menjalankan satu program dalam satu waktu. Begitu program dijalankan, dia akan terus berjalan sampai selesai, kecuali ada interupsi atau program itu sendiri menyerahkan kontrol. Artinya, CPU bakal nganggur selama operasi I/O berlangsung, meskipun ada program lain yang siap jalan. Ini bikin eksekusi aplikasi jadi lambat dan sumber daya prosesor nggak terpakai secara optimal.
Multiprogramming mengatasi masalah ini dengan memungkinkan beberapa program dimuat ke dalam memory dan dijalankan secara bergantian sesuai ketersediaan sumber daya CPU. Misalnya, saat Program A mulai jalan, OS bakal kasih sumber daya CPU ke program itu sampai masuk ke operasi I/O. Saat itu, OS bakal alokasikan CPU ke Program B yang sudah ada di memori. Kalau Program B juga masuk ke operasi I/O, dan Program A masih sibuk dengan I/O-nya, OS bakal kasih CPU ke Program C. Kalau tidak, Program A bakal dapat giliran lagi.
OS bertanggung jawab untuk memastikan bahwa sumber daya CPU dialokasikan dan dialihkan dengan benar ke setiap program sesuai ketersediaan. Untuk melakukan ini, OS menggunakan teknik bernama context switching, yang menyimpan status program dalam memori supaya bisa dilanjutkan lagi saat OS beralih antar program.
Jenis-jenis multiprogramming
Multiprogramming biasanya diterapkan dengan dua cara: cooperative multiprogramming atau preemptive multiprogramming.
Cooperative multiprogramming adalah model yang lebih lama dan sekarang jarang dipakai. Pada model ini, context switching dikendalikan oleh program itu sendiri, bukan OS. Sumber daya prosesor cuma dialihkan ketika program secara sukarela menyerahkannya. OS nggak punya kendali penuh dan hanya bisa berharap program bakal melepaskan kontrolnya suatu saat nanti.
Masalah dari model ini adalah satu program bisa mengambil alih CPU terlalu lama, bikin program lain menunggu. Yang lebih parah, kalau ada program bug atau malware yang masuk ke dalam infinite loop, CPU bisa terkunci selamanya, bikin sistem jadi hang atau bahkan crash. Ini tidak cuma mengganggu workflow pengguna dan aplikasi, tapi juga membuat debugging lebih sulit karena susah menelusuri program mana yang bermasalah.
Sementara itu, preemptive multiprogramming memberi OS kendali penuh atas context switching. OS mengalokasikan CPU berdasarkan antrian program dan operasional I/O, serta membatasi waktu eksekusi setiap program. Jadi, kalau ada program bermasalah, dia nggak bisa terus-menerus mengganggu sistem. Saat ini, hampir semua komputer menggunakan preemptive multiprogramming.
Lihat juga: multiprocessing