oleh : Endy Hardy , Abdul Hakim , dan Andri Julianda
Komunikasi Antar Proses (Inter-Process Communication)
Yaitu suatu cara atau mekanisme pertukaran data, antara satu proses dengan proses lainnya, baik di dalam komputer yang sama, maupun antar beberapa komputer yang terhubung dalam suatu jaringan. IPC biasanya terjadi secara otomatis oleh program, namun user juga dapat melakukan IPC secara interaktif, misalnya dengan menggunakan clipboard dengan perintah cut, copy dan paste.
Adapun masalah-masalah yang dapat terjadi pada Komunikasi Antar Proses, antara lain: Dining Philosophers Problem, Readers-Writers Prxoblem dan Sleeping Barber Problem.
Dining Philosophers Problem
Pada tahun 1965, Edsger Dijkstra membuat sebuah eksperimen, dimana terdapat 5 komputer yang berlomba untuk mengakses 5 shared tape drive. Kemudian masalah pada percobaan ini diangkat oleh Tony Hoare dengan nama Dining Philosophers Problem.
Masalah
Pada masalah Dining Philosophers ini, beberapa proses dianalogikan sebagai 5 orang yang berkumpul pada sebuah meja makan dengan masing-masing makanan mereka yang telah disediakan. Pada dasarnya, setiap orang hanya dapat melakukan dua hal dan hanya satu pada satu waktu, memakan dan/atau menunggu. Terdapat pula 5 buah sumpit (bukan 5 pasang) diantara setiap piring makanan, yang merupakan analogi dari shared resources.
Agar seseorang dapat makan, ia membutuhkan sepasang sumpit, dan hanya dapat mengambilnya dari sisi kiri atau sisi kanannya. Setiap orang tak pernah berbicara pada orang-orang yang lainnya, maka ada peluang yang sangat besar akan terjadi deadlock. Apabila seseorang telah mengambil sebuah sumpit, dan menunggu sumpit kedua yang sedang dipakai oleh orang lain, dan orang itu pula menunggu sumpit kedua yang sedang dipakai, dan seterusnya, hingga terjadi sebuah rantai dimana setiap keingingan orang-orang tersebut tidak dapat terpenuhi.
Masalah yang dihadapi oleh orang-orang di meja makan menjadi analogi masalah-masalah pada pemrograman komputer secara nyata, ketika program-program membutuhkan akses eksklusif kepada shared resources.
Solusi
A. Solusi Waiter: solusi sederhana ini dilakukan dengan mengadakan seorang waiter yang senantiasa mengawasi penggunaan sumpit di meja makan. Ketika empat buah (dua pasang) sumpit sedang dipakai, orang berikutnya yang ingin memakai sumpit harus meminta izin kepada sang waiter, yang hanya dapat diberi ketika salah satu sumpit telah selesai terpakai.
Contoh: Misalkan ke-lima orang tersebut dinamakan dari A sampai E secara berurutan. Ketika A dan C sedang makan, 4 buah sumpit sedang terpakai. B tidak memiliki kedua sumpit, dan D dan E memiliki satu buah sumpit diantara mereka. Apabila D ingin makan dan mengambil sumpit ke-lima, deadlock sangat mungkin terjadi. Maka waiter akan meminta D untuk menunggu, hingga pada saat salah satu sumpit telah selesai dipakai.
B. Solusi Hirarki Resource: pada intinya, resources (sumpit) di meja makan telah diberi susunan hirarki. Setiap permintaan orang terhadap sebuah sumpit harus dilakukan pada susunan tertentu, dan dikembalikan pada susunan sebaliknya. Dalam hal ini, setiap orang dapat mengambil sumpit dimanapun diatas meja. Misalkan setiap sumpit diberi nomor sebagai tingkat hirarki dari 1 sampai 5, seseorang hanya dapat mengambil sumpit dengan nomor yang paling rendah, kemudian mengambil sumpit yang setingkat lebih tinggi. Ketika ia hendak mengembalikannya, orang itu harus meletakkan sumpit dengan nomor yang lebih tinggi terlebih dahulu, lalu yang lebih rendah.
Contoh: Apabila empat dari lima orang ingin makan pada saat yang bersamaan dan mengambil sumpit ‘bernomor rendah’ mereka, hanya akan ada satu buah sumpit yang tersisa dengan nomor tertinggi, sehingga orang kelima tak dapat mengambil sumpit itu. Dari keempat orang yang memegang sumpit, hanya satu (pemegang sumpit nomor 4) yang memiliki akses ke sumpit nomor 5. Ketika ia telah selesai memakan, ia akan mengembalikan sumpit nomor 5 terlebih dahulu, kemudian sumpit nomor 4, hingga memberi kesempatan bagi orang lain untuk makan.
Readers-Writers Problem
Pada IPC, masalah readers-writers merupakan contoh masalah komputasi, berkaitan dengan kondisi-kondisi dimana terdapat banyak thread yang ingin mengakses shared memory yang sama, ada yang melakukan operasi reading, ada pula yang writing. Shared memory tidak memungkinkan threads untuk melakukan operasi reading atau writing, pada saat suatu thread sedang melakukan proses writing terlebih dahulu.
Masalah Pertama
Ketika sebuah proses R1 melakukan proses reading, dan proses R2 menginginkan akses ke shared memory yang sama, akan menjadi tidak efisien jika R2 menunggu R1 menyelesaikan proses reading-nya terlebih dahulu sebelum mengakses. Maka, R2 harus langsung memulai prosesnya. Ini adalah alasan dibalik masalah readers-writers yang pertama, dimana terbentuk syarat baru yaitu “tak ada reader yang harus menunggu apabila shared memory terbuka untuk proses reading”. Syarat ini juga disebut sebagai ‘Reader’s Preference’.
Masalah Kedua
Berdasarkan syarat yang dikembangkan dari masalah diatas, solusi tersebut belum optimal. Misalkan proses R1 sedang melakukan reading, proses W menunggu R1 selesai untuk melakukan operasi writing, dan proses R2 meminta akses. Sangat tidak efisien jika R2 langsung melakukan reading sebelum W melaksanakan proses writing-nya. Jika kasus ini terjadi berulang kali, W akan mengalami starvation. Oleh karena itu, W harus segera melakukan prosesnya apabila sudah ditambah di queue. Syarat baru yang dihasilkan yaitu “setiap writer yang telah masuk kedalam queue, tidak boleh dibiarkan menunggu lebih lama dari yang dibutuhkan”. Juga disebut sebagai ‘Writer’s Preference’.
Masalah Ketiga
Ternyata, kedua syarat hasil dari kedua masalah tidak menjamin bahwa starvation tak akan terjadi. Dari syarat pertama, memungkinkan writers untuk starve, dan syarat kedua dapat menyebabkan starvation untuk readers. Oleh karena itu, syarat ketiga sering diterapkan, yaitu “tak ada thread yang boleh mengalami starvation”. Hal ini dilakukan dengan menambahkan status pada setiap thread di queue. Status ini berubah menjadi ‘starving’, apabila thread di queue telah menunggu lebih lama dari waktu yang telah ditentukan. Jadi, mungkin terdapat reader yang harus menunggu walau memory telah terbuka untuk reading, dan mungkin pula writer harus menunggu lebih lama dari yang dibutuhkan. Pada dasarnya, solusi ini merupakan sebuah kompensasi dari kedua solusi diatas.
Sleeping Barber Problem
Masalah sleeping barber menganalogikan proses dimana seorang barber bertugas menggunting rambut pelanggan, dan beristirahat jika tak ada pelanggan yang menunggu.
Masalah
Sleeping barber problem berdasar pada suatu barber shop dan barber-nya. Si barber hanya memiliki satu buah kursi untuk menggunting rambut dan beberapa kursi di ruang tunggu. Pada saat si barber telah selesai menggunting rambut seorang pelanggan, ia akan berjalan menuju ruang tunggu untuk melihat keadaannya. Jika ada pelanggan yang menunggu, ia akan membawanya ke kursi dan memotong rambutnya. Jika tidak, ia akan kembali ke ruangannya, dan beristirahat.
Setiap pelanggan ketika datang ke barber shop tersebut, harus melihat keadaan si barber terlebih dahulu. Jika si barber sedang tidur, ia akan membangunkannya dan duduk di kursi. Jika si barber sedang memotong rambut, ia akan berjalan menuju ruang tunggu, duduk dan menunggu gilirannya.
Berdasarkan penjelasan sleeping barber diatas, kita dapat langsung berasumsi analogi tersebut bebas masalah dan barber shop milik si barber berfungsi sebagaimana mestinya. Namun masalah itu pun berasal baik dari barber, maupun pelanggan, yang melakukan task dengan durasi yang tak tentu.
Contoh: Apabila seorang pelanggan tiba di barber shop, ia akan melihat barber. Ternyata si barber sementara menggunting rambut pelanggan lainnya, maka pelanggan tersebut menuju ke ruang tunggu. Pada saat yang bersamaan, si barber selesai dan menuju ke ruang tunggu (si pelanggan belum sampai di ruang tunggu) dan melihat tak ada pelanggan yang menunggu. Ia akan kembali beristirahat. Si barber akhirnya menunggu pelanggan, dan si pelanggan menunggu si barber.
Contoh: Dua pelanggan tiba secara bersamaan, melihat si barber sedang bekerja dan melihat hanya ada satu kursi yang tersisa di ruang tunggu. Kedua pelanggan akan berlomba mendapatkan kursi tersebut.
Solusi
Semua contoh permasalahan diatas dapat di dipecahkan oleh adanya mutex (mutual exclusion) yang memberi sebuah batasan dimana hanya satu unsur (si barber, atau satu pelanggan) yang dapat berubah status pada satu waktu. Si barber harus mendapatkan mutex sebelum melihat keadaan ruang tunggu, dan melepaskannya sebelum menggunting rambut dan istirahat. Setiap pelanggan wajib mendapatkan mutex sebelum masuk ke barber shop, dan melepaskannya ketika ia duduk di ruang tunggu dan kursi barber.
Penjadwalan Batch (Batch/Job Scheduling)
Scheduling merupakan konsep utama dalam multitasking, sistem operasi multiprosesor dan sistem operasi real-time. Scheduling adalah cara/metode berbagai proses dilaksanakan pada CPU, dimana biasanya terdapat lebih banyak proses yang dijalankan daripada jumlah CPU yang tersedia. Hal ini diatur oleh software scheduler dan dispatcher.
Three-Level Scheduler
Sistem operasi biasanya memiliki 3 macam scheduler yang berbeda, berdasarkan frekuensi pengoperasian ketiga jenis scheduler tersebut.
Long-Term Scheduler
Long-term scheduler, atau admission scheduler , berfungsi menentukan jobs atau proses apa yang akan dimasukkan ke ‘ready queue’. Pada saat sebuah program hendak di-execute dan diletakkan dalam queue, scheduler ini dapat memilih untuk mengizinkannya, atau menundanya. Oleh karena itu, scheduler ini memutuskan proses-proses yang dapat jalan pada sistem, dan jumlah proses yang dapat berjalan pada satu waktu.
Pada sistem operasi modern, long-term scheduler digunakan untuk memastikan suatu proses ‘real-time’ mendapatkan perhatian cukup dari CPU untuk melaksanakan tugasnya. Tanpanya, GUI (Graphic User Interface) modern akan tampak sangat lamban.
Mid-Term Scheduler
Tugas mid-term scheduler yaitu mengambil suatu proses dari memory utama dan meletakkannya pada secondary memory (atau sebaliknya), secara temporary. Biasa juga dikenal dengan proses ‘swapping out’ dan ‘swapping in’. Ada beberapa alasan scheduler ini melakukan swapping, antara lain karena adanya: sebuah proses yang telah lama inactive; sebuah proses dengan prioritas rendah; proses yang sering ‘page faulting’; atau proses yang memerlukan memory yang banyak, kemudian mengembalikannya ketika memory telah mencukupi.
Short-Term Scheduler
Short-term scheduler (atau CPU scheduler) inilah yang menetukan proses apa, yang telah diletakkan di memory ready queue, yang akan di-execute berikutnya. Maka, scheduler ini jauh lebih sering membuat keputusan dibandingkan mid-term dan long-term scheduler.
Kriteria Penjadwalan
Algoritma penjadwalan CPU yang berbeda, memiliki property yang berbeda pula. Pemilihan algoritma penjadwalan harus berdasarkan pertimbangan pada property masing-masing algoritma. Karakteristik property tiap algoritma-lah yang menentukan algoritma yang mana yang terbaik dan cocok untuk suatu sistem. Kriteria-nya sebagai berikut:
A. CPU Utilization: CPU harus sesibuk mungkin;
B. Throughput: banyaknya proses yang dapat terselesaikan per suatu unit waktu;
C. Turnaround Time: durasi pemrosesan data, dimulai dari masuknya ke queue, hingga proses terselesaikan;
D. Waiting Time: durasi suatu proses menunggu dalam ready queue;
E. Response Time: durasi proses dimulai dari masuknya ke queue, hingga dihasilkannya sebuah respon.
Idealnya, suatu algoritma harus memaksimalkan penggunaan CPU, menghasilkan throughput yang banyak per waktu yang sedikit, dan memiliki durasi turnaround, waiting dan response yang pendek.
Algoritma Penjadwalan
Algoritma digunakan untuk mendistribusikan resource yang ada kepada proses yang datang secara bersamaan dan asinkron. Fungsi utama algoritma yaitu untuk meminimalisir starvation akan resources.
Beberapa jenis algoritma antara lain:
A. First In First Out: algoritma yang paling sederhana. Pada dasarnya adalah sebuah queue, proses dilaksanakan berdasarkan urutan masuk mereka kedalam queue.
B. Shortest Job First: scheduler mengatur queue agar proses dengan perkiraan durasi yang paling pendek dilaksanakan terlebih dahulu.
C. Fixed Priority Pre-emptive Scheduling: sistem operasi memberikan urutan prioritas untuk setiap proses. Suatu proses dalam queue yang memiliki prioritas rendah dapat didahului oleh proses dengan prioritas yang lebih tinggi.
D. Round-Robin Scheduling: scheduler menentukan waktu maksimum untuk suatu proses, dan melaksanakan proses-proses dalam bentuk siklus.
E. Multilevel Queue Scheduling: digunakan apabila setiap proses dalam queue dapat dengan mudah dikelompokkan dalam grup yang berbeda.
Karakteristik Algoritma