Bab 10. Konsep Proses 10.1. Pendahuluan Proses didefinisikan sebagai program yang sedang dieksekusi. Menurut Silberschatz proses tidak hanya sekedar suatu kode program ( text section), melainkan meliputi beberapa aktivitas yang bersangkutan seperti program counter dan stack. Sebuah proses juga melibatkan stack yang berisi data sementara (parameter fungsi/ metode, return address, dan variabel lokal) dan data section yang menyimpan variabel-variabel global. Tanenbaum juga berpendapat bahwa proses adalah sebuah program yang dieksekusi yang mencakup program counter, register, dan variabel di dalamnya. Keterkaitan hubungan antara proses dengan sistem operasi terlihat dari cara sistem operasi menjalankan/ mengeksekusi proses. Sistem operasi mengeksekusi proses dengan dua cara yaitu batch system yang mengeksekusi jobs dan time-shared system yang mengatur pengeksekusian program pengguna ( user) atau tasks. Bahkan pada sistem pengguna tunggal ( single user) seperti Microsoft Windows dan Mac OS, seorang pengguna mampu menjalankan beberapa program pada saat yang sama, seperti Spread Sheet, Web Browser, dan Web Email. Bahkan jika pengguna hanya menggunakan satu program saja pada satu waktu, sistem operasi perlu mendukung program internalnya sendiri, seperti manajemen memori. Dengan kata lain, semua aktivitas tersebut adalah identik sehingga kita menyebutnya ''proses''. Program itu sendiri bukanlah sebuah proses. Program merupakan sebuah entitas pasif; serupa isi dari sebuah berkas didalam disket. Sedangkan sebuah proses adalah suatu entitas aktif, dengan sebuah program counter yang menyimpan alamat instruksi yang selanjutnya akan dieksekusi dan seperangkat sumber daya ( resource) yang dibutuhkan agar sebuah proses dapat dieksekusi.
10.2. Diagram Status Proses Gambar 10.1. Status Proses
Sebuah proses dapat memiliki tiga status utama yaitu: 1. Running. Status yang dimiliki pada saat instruksi-instruksi dari sebuah proses dieksekusi 2. Waiting. Status yang dimiliki pada saat proses menunggu suatu sebuah event seperti proses M/K. 3. Ready. Status yang dimiliki pada saat proses siap untuk dieksekusi oleh prosesor Terdapat dua status tambahan, yaitu saat pembentukan dan terminasi: 1. New. Status yang dimiliki pada saat proses baru saja dibuat 2. Terminated. Status yang dimiliki pada saat proses telah selesai dieksekusi. Hanya satu proses yang dapat berjalan pada prosesor mana pun pada satu waktu. Namun, banyak proses yang dapat berstatus Ready atau Waiting. Ada tiga kemungkinan bila sebuah proses memiliki status Running:
79
Process Control Block
1. Jika program telah selesai dieksekusi maka status dari proses tersebut akan berubah menjadi Terminated. 2. Jika waktu yang disediakan oleh OS untuk proses tersebut sudah habis maka akan terjadi interrupt dan proses tersebut kini berstatus Ready. 3. Jika suatu event terjadi pada saat proses dieksekusi (seperti ada permintaan M/K) maka proses tersebut akan menunggu event tersebut selesai dan proses berstatus Waiting.
10.3. Process Control Block Gambar 10.2. Process Control Block
Setiap proses digambarkan dalam sistem operasi oleh sebuah process control block(PCB) - juga disebut sebuah control block. Sebuah PCB ditunjukkan dalam Gambar 10.2, Process Control Block. PCB berisikan banyak bagian dari informasi yang berhubungan dengan sebuah proses yang spesifik, termasuk hal-hal di bawah ini: 1. Status Proses. Status new, ready, running, waiting, halted, dan juga banyak lagi. 2. Program Counter . Suatu stack yang berisi alamat dari instruksi selanjutnya untuk dieksekusi untuk proses ini. 3. CPU register. Register bervariasi dalam jumlah dan jenis, tergantung pada rancangan komputer. Register tersebut termasuk accumulator, register indeks, stack pointer, general-purposes register, ditambah code information pada kondisi apa pun. Beserta dengan program counter, keadaan/status informasi harus disimpan ketika gangguan terjadi, untuk memungkinkan proses tersebut berjalan/ bekerja dengan benar setelahnya (lihat Gambar 10.3, Status Proses). 4. Informasi manajemen memori. Informasi ini dapat termasuk suatu informasi sebagai nilai dari dasar dan batas register, tabel halaman, atau tabel segmen tergantung pada sistem memori yang digunakan oleh sistem operasi (lihat Bagian V, Memori). 5. Informasi pencatatan. Informasi ini termasuk jumlah dari CPU dan waktu riil yang digunakan, batas waktu, jumlah akun, jumlah job atau proses, dan banyak lagi. 6. Informasi status M/K. Informasi termasuk daftar dari perangkat M/K yang di gunakan pada proses ini, suatu daftar berkas-berkas yang sedang diakses dan banyak lagi. PCB hanya berfungsi sebagai tempat penyimpanan informasi yang dapat bervariasi dari proses yang satu dengan yang lain.
80
Pembentukan Proses
10.4. Pembentukan Proses Saat komputer berjalan, terdapat banyak proses yang berjalan secara bersamaan. Sebuah proses dibuat melalui system call create-process yang membentuk proses turunan ( child process) yang dilakukan oleh proses induk ( parent process). Proses turunan tersebut juga mampu membuat proses baru sehingga semua proses ini pada akhirnya membentuk pohon proses. Ketika sebuah proses dibuat maka proses tersebut dapat memperoleh sumber-daya seperti waktu CPU, memori, berkas, atau perangkat M/K. Sumber daya ini dapat diperoleh langsung dari sistem operasi, dari proses induk yang membagibagikan sumber daya kepada setiap proses turunannnya, atau proses turunan dan proses induk berbagi sumber-daya yang diberikan sistem operasi. Di dalam UNIX daftar dari proses yang sedang aktif berjalan bisa didapatkan dengan menggunakan perintah ps, contoh ps -el. Ada dua kemungkinan bagaimana jalannya ( running) proses induk dan turunan. Proses-proses tersebut berjalan secara konkuren atau proses induk menunggu sampai beberapa/seluruh proses turunannya selesai berjalan. Juga terdapat dua kemungkinan dalam pemberian ruang alamat ( address space) proses yang baru. Proses turunan dapat merupakan duplikasi. Bila UNIX menggunakan kemungkinan pertama (proses baru merupakan duplikasi induknya) maka sistem operasi DEC VMS menggunakan kemungkinan kedua dalam pembuatan proses baru yaitu setiap proses baru memiliki program yang di- load ke ruang alamatnya dan melaksanakan program tersebut. Sedangkan sistem operasi Microsoft Windows NT mendukung dua kemungkinan tersebut. Ruang alamat proses induk dapat diduplikasi atau proses induk meminta sistem operasi untuk meload program yang akan dijalankan proses baru ke ruang alamatnya.
10.5. Fungsi fork() Sistem operasi UNIX mempunyai system call fork yang berfungsi untuk membuat proses baru. Proses yang memanggil system call fork ini akan dibagi jadi dua, proses induk dan proses turunan yang identik. Analoginya seperti pembelahan sel, dimana satu sel membelah jadi dua sel yang identik. Proses induk dan turunan independen satu sama lain dan berjalan bersamaan. Return code dari system call ini adalah suatu integer. Untuk proses anak return code-nya adalah 0 sementara untuk proses induk return code-nya adalah nomor identifikasi proses (PID) dari turunannya. Ada juga system call exec yang berguna untuk membuat proses turunan yang terbentuk memiliki instruksi yang berbeda dengan proses induknya. Dengan kata lain, proses induk dan proses turunan tidak lagi identik tapi masing-masing punya instruksi berbeda.
81
Terminasi Proses
Contoh 10.1. Contoh Penggunaan fork()
#include <stdio.h> #include
#include <sys/types.h>
/*standard M/K*/ /*fork()*/ /*pid_t*/
int main() { pid_t pid; pid = fork(); if (pid < 0) { //terjadi error fprintf(stderr,"Fork Gagal"); exit(-1); } else if (pid == 0) { //proses anak execlp("/bin/ls","ls",NULL); } else { //proses induk wait(NULL); printf("Proses anak selesai"); exit(0); } }
Berikut adalah contoh penggunaan fork() dengan menggunakan bahasa C. Tipe data pid_t merupakan signed integer yang sebenernya dalam pustaka GNU. Tipe ini adalah int, fungsinya adalah merepresentasikan PID. Program C diatas menggambarkan atau mengilustrasikan UNIX system call. Didalam UNIX Shell akan membaca perintah dari terminal, kemudian perintah tersebut di fork(), dan menghasilkan proses anak, proses anak inilah yang akan mengeksekusi perintah dari shell tersebut, sementara proses induk hanya menunggu dengan menggunakan system call wait() dan mengeksekusi perintah lain saat proses anak terminasi.
10.6. Terminasi Proses Suatu proses diterminasi ketika proses tersebut telah selesai mengeksekusi perintah terakhir atau diterminasi dengan sengaja oleh proses lain, biasanya proses induk yang melakukan hal ini. Pada saat terminasi. Semua sumber-daya yang digunakan oleh proses akan dialokasikan kembali oleh sistem operasi agar dapat dimanfaatkan oleh proses lain. Suatu proses yang diterminasi karena selesai melakukan tugasnya, sistem operasi akan memanggil system call exit() sedangkan proses yang diterminasi dengan sengaja oleh proses lain melalui system call abort. Biasanya proses induk melakukan terminasi sengaja pada turunannya. Alasan terminasi tersebut seperti: 1. Turunan melampaui penggunaan sumber-daya yang telah dialokasikan. Dalam keadaan ini, proses induk perlu mempunyai mekanisme untuk memeriksa status turunannya-nya. 2. Task yang ditugaskan kepada turunan tidak lagi diperlukan. 3. Proses induk selesai, dan sistem operasi tidak mengizinkan proses turunan untuk tetap berjalan. Jadi, semua proses turunan akan berakhir pula. Hal ini yang disebut cascading termination.
10.7. Proses Linux
82
Rangkuman
Sebuah proses adalah konteks dasar dimana semua permintaan user dilayani sistem operasi. Agar menjadi kompatibel dengan sistem UNIX lainnya, Linux harus menggunakan model proses yang sama dengan sistem UNIX lainnya. Prinsip dasar dari manajemen proses UNIX adalah memisahkan dua operasi untuk membuat proses dan menjalankan program baru. Proses baru dibuat dengan fungsi fork(), sedangkan program baru dijalankan setelah memanggil fungsi exec(). Model seperti ini memiliki kelebihan yaitu kesederhanaan dibanding harus menetapkan setiap detail dari lingkungan program baru dalam system call yang menjalankan program tersebut. Program baru dengan mudah berjalan dalam lingkungannya sendiri. Jika proses induk mengharapkan untuk memodifikasi lingkungan dimana program baru berjalan, dia bisa melakukan fork dan tetap menjalankan program asli dalam proses anak. Membuat beberapa system call membutuhkan modifikasi proses anak sebelum akhirnya mengeksekusi program baru. Setiap proses memiliki identitas proses yang isinya berupa: 1. PID. PIDs digunakan untuk menetapkan proses ke sistem operasi ketika sebuah aplikasi membuat System call untuk sinyal, modifikasi, atau menunggu proses lain. 2. Credentials . Setiap proses harus memiliki hubungan antara user ID dengan group ID yang menentukan hak sebuah proses untuk mengakses sumberdaya sistem dan file. 3. Personality . Dapat sedikit memodifikasi semantics of system calls.
10.8. Rangkuman 1. Sebuah proses adalah suatu program yang sedang dieksekusi. 2. Proses lebih dari sebuah kode program tetapi juga mencakup program counter, stack, dan sebuah data section. 3. Dalam pengeksekusiannya sebuah proses juga memiliki status yang mencerminkan keadaan dari proses tersebut. 4. Status tersebut mungkin menjadi satu dari lima status berikut: new, ready, running, waiting, atau terminated. 5. Proses direpresentasikan dengan PCB yang menyimpan segala informasi yang berkaitan dengan proses tersebut.
Rujukan [Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005 . Operating Systems Concepts. Seventh Edition. John Wiley & Sons. [WEBFSF1991a] Free Software Foundation. 2007 . proses linux – http://www.ilmukomputer.com/ 2006/ 08/ 28/ sistem-operasi-proses-pada-linux/ fajar-proses-linux.zip. Diakses 14 Feb 2007.
83