Proses
3.1 Konsep Proses
Jika kita berdiskusi mengenai sistem operasi, maka akan timbul sebuah pertanyaan yaitu mengenai istilah apa yang tepat untuk menyebut semua kegiatan yang dilakukan oleh CPU. Sistem batch mengeksekusi jobs sebagaimana suatu sistem time-share menggunakan program pengguna (user programs) atau tasks. Bahkan pada sistem dengan pengguna tunggal pun, seperti padaMicrosoftWindows dan Macintosh OS, seorang pengguna mampu menjalankan beberapa program pada saat yang sama, contohnya Word Processor, Web Browser, dan paket e-mail. Bahkan jika pengguna hanya dapat menjalankan satu program pada satu waktu, sistem operasi perlu untuk mendukung aktivitas program internalnya sendiri, seperti managemen memori.
Dalam banyak hal, seluruh aktivitas ini adalah serupa, maka kita menyebut seluruh program itu proses-proses.
Istilah job dan proses digunakan hampir dapat dipertukarkan pada tulisan ini. Walau kami sendiri lebih menyukai istilah proses, banyak teori dan terminologi sistem operasi dikembangkan selama suatu waktu ketika aktivitas utama sistem operasi adalah job processing. Akan membingungkan jika kita menghindari penggunaan istilah yang telah diterima oleh masyarakat yang memasukkan kata job hanya karena proses memiliki istilah job sebagai pengganti atau pendahulunya.
3.1.1 Definisi Proses
Secara tidak langsung, proses merupakan program yang sedang dieksekusi. Menurut Silberschatz, suatu proses adalah lebih dari sebuah kode program, yang terkadang disebut text section. Proses jugamencakup program counter, yaitu sebuah stack untuk menyimpan alamat dari instruksi yang akan dieksekusi selanjutnya dan register. Sebuah proses pada umumnya juga memiliki sebuah stack yang berisikan data-data yang dibutuhkan selama proses dieksekusi seperti parameter metoda, alamat return dan variabel lokal, dan
sebuah data section yang menyimpan variabel global. Sama halnya dengan Silberschatz, Tanenbaum juga berpendapat bahwa proses adalah sebuah program yang dieksekusi yangmencakup program counter, register, dan variabel di dalamnya. Kami tekankan bahwa program itu sendiri bukanlah sebuah proses; suatu
program adalah satu entitas pasif; seperti isi dari sebuah berkas yang disimpan didalam disket. Sedangkan sebuah proses dalam suatu entitas aktif, dengan sebuah program counter yang menyimpan alamat instruksi selanjut yang akan dieksekusi dan seperangkat sumber daya (resource) yang dibutuhkan agar sebuah proses dapat dieksekusi. Untuk mempermudah kita membedakan program dengan proses, kita akan menggunakan analogi yang diberikan oleh Tanenbaum. Misalnya ada seorang tukang kue yang ingin membuat kue ulang tahun untuk anaknya. Tukang kue tersebut memiliki resep kue ulang tahun dan bahan-bahan yang dibutuhkan untuk membuat kue ulang tahun di dapurnya seperti: tepung terigu, telur, gula, bubuk vanila dan bahan-bahan lainnya. Dalam analogi ini, resep kue ulang tahun adalah sebuah program, si tukang kue tersebut adala prosesor (CPU), dan bahan-bahan untuk membuat kue tersebut adalah data input. Sedangkan proses-nya adalah kegiatan sang tukang kue untuk membaca resep, mengolah bahan, dan memanggang kue tersebut.
Walau dua proses dapat dihubungkan dengan program yang sama, program tersebut dianggap dua urutan eksekusi yang berbeda. Sebagai contoh, beberapa pengguna dapat menjalankan salinan yang berbeda pada mail program, atau pengguna yang sama dapat meminta banyak salinan dari program editor. Tiap-tiap proses ini adakah proses yang berbeda dan walau bagian text-section adalah sama, data section-nya bervariasi. Adalah umum untuk memiliki proses yang menghasilkan banyak proses begitu ia bekerja.
3.1.2 Status Proses
Bila sebuah proses dieksekusi, maka statusnya akan berubah-ubah. Status dari sebuah proses mencerminkan aktivitas atau keadaan dari proses itu sendiri. Berikut ini adalah status-status yangmungkin dimiliki sebuah proses menurut Tanenbaum:
- Running: pada saat menggunakan CPU pada suatu waktu.
- Ready: proses diberhentikan sementara karena menunggu proses lain untuk dieksekusi.
- Blocked: tidak dijalankan sampai event dari luar, yang berhubungan dengan proses tersebut terjadi. Sedangkan menurut Silberschatz, terdapat lima macam jenis status yang mungkin dimiliki oleh suatu proses:
- New: status yang dimiliki pada saat proses baru saja dibuat.
- Running: status yang dimiliki pada saat instruksi-instruksi dari sebuah proses dieksekusi.
- Waiting: status yang dimiliki pada saat proses menunggu suatu event (contohnya: proses I/O).
- Ready: status yang dimiliki pada saat proses siap untuk dieksekusi oleh prosesor.
- Terminated: status yang dimiliki pada saat proses telah selesai dieksekusi.
Gambar~3.1: Status proses
- Jika program telah selesai dieksekusi maka status dari proses tersebut akan berubah menjadi Terminated.
- Jika waktu yang disediakan oleh OS untuk proses tersebut sudah habis maka akan terjadi interrupt dan proses tersebut kini berstatus Ready.
- Jika suatu event terjadi pada saat proses dieksekusi (seperti ada request I/O) maka proses tersebut akan menunggu event tersebut selesai dan proses berstatus Waiting.
3.1.3 Proses Control Block
Tiap proses digambarkan dalam sistem operasi oleh sebuah process control block (PCB) - juga disebut sebuah control block. Sebuah PCB ditunjukkan dalam Gambar 3.2. PCB berisikan banyak bagian dari informasi yang berhubungan dengan sebuah proses yang spesifik, termasuk hal-hal di bawah ini:
- Status proses: status mungkin, new, ready, running, waiting, halted, dan juga banyak lagi.
- Program counter: suatu stack yang berisi alamat dari instruksi selanjutnya untuk dieksekusi untuk proses ini.
- 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, untukmemungkinkan proses tersebut berjalan/bekerja dengan benar setelahnya (lihat Gambar 3.3Tiap proses digambarkan dalamsistem operasi oleh sebuah process control block (PCB) - juga disebut sebuah control block. Sebuah PCB ditunjukkan dalam Gambar 3-2. PCB berisikan banyak bagian dari informasi yang berhubungan dengan sebuah proses yang spesifik, termasuk hal-hal di bawah ini:
- Status proses: status mungkin, new, ready, running, waiting, halted, dan juga banyak lagi.
- Program counter: suatu stack yang berisi alamat dari instruksi selanjutnya untuk dieksekusi untuk proses ini.
- 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, untukmemungkinkan proses tersebut berjalan/bekerja dengan benar setelahnya (lihat Gambar 3.3).
- ² Informasi managemen memori: Informasi ini dapat termasuk suatu informasi sebagai nilai dari dasar dan batas register, tabel page/halaman, atau tabel segmen tergantung pada sistem memori yang digunakan oleh sistem operasi (lihat Bab 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.
- Informasi status I/O: Informasi termasuk daftar dari perangkat I/O 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.
Gambar~3.2: Proses Control Block
3.2 Thread3.2.1 Apa itu thread ?
Threadmerupakan unit dasar dari penggunaan CPU, yang terdiri dari Thread_ID, program counter, register set, dan stack. Sebuah thread berbagi code section, data section, dan sumber daya sistem operasi dengan Thread lain yang dimiliki oleh proses yang sama. Thread juga sering disebut lightweight process. Sebuah proses tradisional atau heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Perbedaan antara proses dengan thread tunggal dengan proses dengan thread yang banyak adalah proses dengan thread yang banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu. Banyak perangkat lunak yang berjalan pada PC modern dirancang secara multi-threading. Sebuah aplikasi biasanya diimplementasi sebagai proses yang terpisah dengan beberapa thread yang berfungsi sebagai pengendali.
Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar
Gambar~3.3: Status proses
Gambar~3.4: Thread
bar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network. Kadang kala ada situasi dimana sebuah aplikasi diperlukan untuk menjalankan beberapa tugas yang serupa. Sebagai contohnya sebuah web server dapatmempunyai ratusan klien yangmengaksesnya secara concurrent. Kalau web server berjalan sebagai proses yang hanya mempunyai thread tunggal maka ia hanya dapat melayani satu klien pada pada satu satuan waktu. Bila ada klien lain yang ingin mengajukan permintaan maka ia harus menunggu sampai klien sebelumnya selesai dilayani. Solusinya adalah dengan membuat web server menjadi multi threading. Dengan ini maka sebuah web server akan membuat thread yang akan mendengar permintaan klien, ketika permintaan lain diajukan maka web server akan menciptakan thread lain yang akan melayani permintaan tersebut. Java mempunyai pengunaan lain dari thread. Perlu diketahui bahwa Java tidak mempunyai konsep asynchronous. Sebagai contohnya kalau program java mencoba untuk melakukan koneksi ke server maka ia akan berada dalam keadaan block state sampai koneksinya jadi (dapat dibayangkan apa yang terjadi apabila servernya mati). Karena Java tidak memiliki konsep asynchronous maka solusinya adalah dengan membuat thread yang mencoba untuk melakukan koneksi ke server dan thread lain yang pertamanya tidur selamabeberap waktu (misalnya 60 detik) kemudian bangun. Ketika waktu tidurnya habis maka ia akan bangun dan memeriksa apakah thread yang melakukan koneksi ke server masih mencoba untuk melakukan koneksi ke server, kalau thread tersebutmasih dalam keadaan mencoba untuk melakukan koneksi ke server maka ia akan melakukan interrupt dan mencegah thread tersebut untuk mencoba melakukan koneksi ke server.3.2.2 Keuntungan Thread
Keuntungan dari program yang multithreading dapat dipisah menjadi empat
kategori:
1. Responsi: Membuat aplikasi yang interaktif menjadi multithreading dapat membuat sebuah program terus berjalan meskipun sebagian dari program tersebut diblok atau melakukan operasi yang panjang, karena itu dapat meningkatkan respons kepada pengguna. Sebagai contohnya dalam web browser yang multithreading, sebuah thread dapat melayani permintaan pengguna sementara thread lain berusaha menampilkan image.
2. Berbagi sumber daya: thread berbagi memori dan sumber daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungan dari berbagi kode adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.
3. Ekonomi: dalam pembuatan sebuah proses banyak dibutuhkan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan penggunaan thread, karena thread berbagi memori dan sumber daya proses yang memilikinya maka akan lebih ekonomis untuk membuat dan context switch thread. Akan susah untuk mengukur perbedaan waktu antara proses dan thread dalam hal pembuatan dan pengaturan, tetapi secara umum pembuatan dan pengaturan proses lebih lama dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 30 kali dibandingkan pembuatan thread, dan context switch proses 5 kali lebih lama dibandingkan context switch thread.
4. Utilisasi arsitektur multiprocessor: Keuntungan dari multithreading dapat sangat meningkat pada arsitektur multiprocessor, dimana setiap thread dapat berjalan secara pararel di atas processor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi pararel, tetapi pada kenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu (satu-satuan waktu pada CPU biasa disebut time slice atau quantum).
3.2.3 User dan Kernel Thread User Thread
User thread didukung di atas kernel dan diimplementasi oleh thread library pada user level. Library menyediakan fasilitas untuk pembuatan thread, penjadualan thread, dan managemen thread tanpa dukungan dari kernel. Karena kernel tidak menyadari user-level thread maka semua pembuatan dan penjadualan thread dilakukan di user space tanpa intervensi dari kernel. Oleh karena itu, user-level thread biasanya cepat untuk dibuat dan diatur. Tetapi user threadmempunyai kelemahan yaitu apabila kernelnyamerupakan thread tunggal maka apabila salah satu user-level thread menjalankan blocking system call maka akan mengakibatkan seluruh proses diblok walau pun ada thread lain yang dapat jalan dalam aplikasi tersebut. Contoh user-thread libraries adalah POSIX Pthreads, Mach C-threads, dan Solaris threads.
Kernel Thread
Kernel thread didukung langsung oleh sistem operasi. Pembuatan, penjadualan, dan managemen thread dilakukan oleh kernel pada kernel space. Karena pengaturan thread dilakukan oleh sistem operasi maka pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread. Keuntungannya adalah thread diatur oleh kernel, karena itu jika sebuah thread menjalankan blocking system call maka kernel dapat menjadualkan thread lain di aplikasi untuk melakukan eksekusi. Keuntungan lainnya adalah pada lingkunganmultiprocessor, kernel dapatmenjadual thread-thread pada processor yang berbeda. Contoh sistem operasi yang mendukung kernel thread
adalah Windows NT, Solaris, Digital UNIX.
Gambar~3.5: Many to one
Many to one Model
Many-to-One model memetakan banyak user-level thread ke satu kernel thread. Pengaturan thread dilakukan di user space, oleh karena itu ia e…sien tetapi
ia mempunyai kelemahan yang sama dengan user thread. Selain itu karena hanya satu thread yang dapat mengakses thread pada suatu waktu makamultiple thread tidak dapat berjalan secara pararel pada multiprocessor. Userlevel thread yang diimplementasi pada sistem operasi yang tidak mendukung kernel thread menggunakan Many-to-One model.
One to one Model
One-to-Onemodel memetakan setiap user thread ke kernel thread. Ia menyediakan lebih banyak concurrency dibandingkan Many-to-One model. Keuntungannya sama dengan keuntungan kernel thread. Kelemahannya model ini adalah setiap pembuatan user thread membutuhkan pembuatan kernel thread. Karena pembuatan thread dapat menurunkan performa dari sebuah
Gambar~3.6: One to one
aplikasi maka implmentasi dari model ini membatasi jumlah thread yang dibatasi oleh sistem. Contoh sistem operasi yang mendukung One-to-One model adalah Windows NT dan OS/2.Many to many Model
Many-to-many model multiplexes banyak user-level thread ke kernel thread yang jumlahnya lebih kecil atau sama banyaknya dengan user-level thread. Jumlah kernel thread dapat spesi…k untuk sebagian aplikasi atau sebagian mesin. Many-to-One model mengizinkan developer ntuk membuat user thread sebanyak yang iamau tetapi concurrency tidak dapat diperoleh karena hanya satu thread yang dapat dijadual oleh kernel pada suatu waktu. One-to-One menghasilkan concurrency yang lebih tetapi developer harus hati-hati untuk tidak menciptakan terlalu banyak thread dalam suatu aplikasi (dalam beberapa hal, developer hanya dapat membuat thread dalam jumlah yang terbatas). Many-to-Many model tidak menderita kelemahan dari 2 model di atas. Developer dapat membuat user thread sebanyak yang diperlukan, dan kernel thread yang bersangkutan dapat bejalan secara pararel pada multiprocessor. Dan juga ketika suatu thread menjalankan blocking system
Gambar~3.7: Many to many
call maka kernel dapat menjadualkan thread lain untuk melakukan eksekusi. Contoh sistem operasi yang mendukung model ini adalah Solaris, IRIX, dan Digital UNIX.3.2.5 Fork dan Exec System Call
Ada dua kemungkinan dalam system UNIX jika fork dipanggil oleh salah satu thread dalam proses:
- Semua thread diduplikasi.
- Hanya thread yang memanggil fork.
fork maka proses yang terpisah tersebut hendaknya menduplikasi seluruh thread.
3.2.6 Cancellation
Thread cancellation adalah tugas untuk memberhentikan thread sebelum ia menyelesaikan tugasnya. Sebagi contohnya jika dalam program java kita hendak mematikan Java Virtual Machine (JVM) maka sebelum JVM-nya dimatikan maka seluruh thread yang berjalan dihentikan terlebuh dahulu. Thread yang akan diberhentikan biasa disebut target thread. Pemberhentian target thread dapat terjadi melalui dua cara yang berbeda:
- Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread.
- Defered cancellation: target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara terurut.
3.2.7 Penanganan Sinyal
Sebuah sinyal digunakan di sistem UNIX untuk notify sebuah proses kalau suatu peristiwa telah terjadi. Sebuah sinyal dapat diterima secara synchronous atau asynchronous tergantung dari sumber dan alasan kenapa peristiwa itu memberi sinyal.
- Semua sinyal (asynchronous dan synchronous) mengikuti pola yang sama:
- Sebuah sinyal dimunculkan oleh kejadian dari suatu persitiwa.
- Sinyal yang dimunculkan tersebut dikirim ke proses.
- Sesudah dikirim, sinyal tersebut harus ditangani.
Setiap sinyal dapat ditangani oleh salah satu dari dua penerima sinyal:
- Penerima sinyal yang merupakan set awal dari sistem operasi.
- Penerima sinyal yang dide…nisikan sendiri ole user.
Secara umum ada empat pilihan kemana sinyal harus dikirim:
- Mengirimkan sinyal ke thread yang dituju oleh sinyal tersebut.
- Mengirimkan sinyal ke setiap thread pada proses tersebut.
- Mengirimkan sinyal ke thread tertentu dalam proses.
- Menugaskan thread khusus untuk menerima semua sinyal yang ditujukan pada proses.
3.2.8 Thread Pools
Pada web server yang multithreading ada dua masalah yang timbul:
- Ukuran waktu yang diperlukan untuk menciptakan thread untuk melayani permintaan yang diajukan terlebih pada kenyataannya thread dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya.
- Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.
pada saat dibutuhkan maka server menunggu sampai ada satu thread yang bebas. Keuntungan thread pool:
- Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat.
- Thread pool membatasi jumlah thread yang ada pada suatu waktu.
makasih bro buat postingannya. ngebantu banget nih buat belajar menjelang UAS :) sukses selalu..
BalasHapusbermanfaat,.. :)
BalasHapusmantappp.. (y)
BalasHapusSangat membantu om, terima kasih atas ilmu nya :)
BalasHapusmantap om, ada pembahasan tentang arsitektur ?
BalasHapusmakasih mas infonya, cocok buat tugas saya
BalasHapus