Laporan Tugas Scheduling Pengantar Sistem Operasi Kelas E Anggota Kelompok: Cindy Alicia Sahara (5214100172) Ratih Kinanti A (5214100174) Patricia Hanna S (5214100177) Indriarti Kusumanita (5214100178) Institut Teknologi Sepuluh Nopember Jurusan Sistem Informasi Materi ke-3: Semaphor Semaphore adalah sebuah konsep kodingan yang dibentuk oleh E.W Djikstra pada tahun 1960an. Model Dijkstra adalah operasi dari rel kereta api: anggap saja ada sebuah rel kereta terbentang dimana pada rel itu hanya boleh ada satu kereta yang lewat pada satu waktu. Yang mengatur pekerjaan rel ini adalah Semaphore. Sebuah kereta harus menunggu sampai sebuah Semaphore memberi sinyal bahwa kereta tersebut bisa lewat. Ketika kereta sedang berada di rel tersebut, Semaphore kemudian akan menghindari kereta lain agar tidak masuk ke dalam rel selama masih ada kereta yang menggunakan rel tersebut. Kereta yang telah meninggalkan rel kemudian akan merubah status Semaphore agar dapat mengizinkan kereta lain lewat rel tersebut. Jadi, Semaphore pada dasarnya adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Semaphore diperiksa oleh semua kernel thread sebelum kernel thread tersebut mencoba untuk mengakses struktur data. Semaphore mempunyai dua sifat, yaitu: 1. Semaphore dapat diinisialisasi dengan nilai non-negatif. 2. Terdapat dua operasi terhadap semaphore, yaitu Wait dan Signal. Terdapa dua jenis Semaphore, yaitu: 1. Binary semaphore. Semaphore ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai semaphore primitif 2. Counting semaphore. Semaphore ini memiliki nilai 0, 1, serta integer lainnya. Banyak sistem operasi yang tidak secara langsung mengimplementasikan semaphore ini, tetapi dengan memanfaatkan binary semaphore Prinsip semaphore : – Dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana – Proses dipaksa berhenti sampai proses memperoleh penanda tertentu – Variabel khusus untuk penandaan ini disebut Semaphore Keuntungan menggunakan Semaphore: 1. Dari segi programming, penanganan masalah sinkronisasi dengan Semaphore umumnya rapi dan teratur, sehingga mudah untuk dibuktikan kebenarannya 2. Semaphore diimplementasikan dalam hard code sehingga penggunaannya bersifat portabel Kerugian menggunakan Semaphore: Busy waiting. Apabila suatu proses menempati critical section, dan ada proses lain yang ingin masuk critical section, maka akan terjadi iterasi secara terus-menerus pada entry section. Hal ini akan menimbulkan masalah pada sistem yang menggunakan konsep multiprogramming. Contoh Semaphore Terdapat 2 buah thread seperti dibawah ini : thread A : count = count+2 thread B : count = count-1 Thread A dan B mengakses variabel yang sama, yaitu variabel count sehingga kedua thread tersebut harus berjalan secara bergantian. Karena itulah digunakan binary semaphore dengan nilai awal 1. thread A : kunci (mutex); count = count+2 buka (mutex) thread B : kunci (mutex); count = count-1 buka(mutex) Thread yang mengeksekusi kunci terlebih dahulu akan berjalan terus, sedangkan thread yang selanjutnya akan menunggu sampai thread yang berjalan terlebih dahulu mengeksekusi buka, setelah itu kedua thread berjalan lagi dengan normal. Monitor Monitor adalah suatu tipe abstrak yang memiliki tugas untuk mengatur aktivitas serta managemen resource oleh beberapa thread. Monitor pertama kali dikenalkan pada tahun 1970. Monitor terdiri atas data-data private dengan fungsi public yang dapat mengakses data tersebut. Method yang terdapat dalam suatu monitor sudah dibuat sedemikian rupa agar hanya ada satu method yang dapat bekerja dalam suatu waktu. Hal ini dilakukan untuk menjaga agar semua operasi dalam monitor bersifat mutual exclusion. Monitor memiliki beberapa status, yaitu 1. Enter : Kondisi dimana thread memasuki monitor 2. Acquire : Kondisi dimana thread memasuki ruang kontrol 3. Owning : Kondisi dimana thread menyelesaikan tugasnya dengan membagi resource yang berada di ruang kontrol 4. Release : Kondisi dimana thread belum menyelesaikan tugasnya namun waktunya sudah habis, maka thread melepaskan kendali atas monitor 5. Waiting queue : Tempat thread menunggu thread lain selesai 6. Release and exit : Kondisi dimana thread sudah menyelesaikan tugasnya dan keluar dari monitor Karena masalah sinkronisasi begitu rumit dan beragam, monitor menyediakan tipe data condition untuk programmer yang ingin menerapkan sinkronisasi yang sesuai untuk masalah yang dihadapinya. Condition memiliki operasi-operasi: 1. Wait, sesuai namanya thread yang memanggil fungsi ini akan dihentikan kerjanya. 2. Signal, jika suatu thread memanggil fungsi ini, satu (dari beberapa) thread yang sedang menunggu akan dibangunkan untuk bekerja kembali. Operasi ini hanya membangunkan tepat satu buah thread yang sedang menunggu. Jika tidak ada thread yang sedang menunggu, tidak akan terjadi apa-apa (bedakan dengan operasi buka pada semaphore). Monitor juga dapat disebut sebagai mini-OS, karena konsep monitor sangat mirip dengan sebuah sistem operasi. Satu dapat mempertimbangkan inisialisasi sebagaimana data yang diinisialisasi ketika sistem boot up, data pribadi dan kode sebagai struktur data internal dan fungsi dari sebuah sistem operasi, dan prosedur monitor sebagai panggilan sistem. Program-program, tentu saja, benang yang membuat permintaan layanan. Oleh karena itu, monitor bisa dianggap sebagai miniOS dengan layanan terbatas. Kelebihan monitor 1. Dapat mengatasi sinkronisasi tanpa perlu melibatkan programmer. 2. Kompilator pada bahasa pemrograman yang telah mengimplementasikan monitor akan memastikan bahwa resource yang dapat diakses oleh beberapa thread dilindungi oleh monitor, sehingga prinsip mutual exclusion tetap terjaga. 3. Kompilator bisa memeriksa kemungkinan adanya deadlock. 4. Pengecekan error yang berhubungan dengan mutex dapat dilakukan secara terpusat hanya pada modul monitor saja sehingga lebih efisien. 5. Ketika program monitor sudah benar tanpa error maka akses terhadap critical resource oleh berbagai macam proses akan selalu benar. Kelemahan monitor 1. Bila setiap signal csignal (fungsi sinkronisasi dalam monitor) selalu hilang maka proses yang ada dalam antrian juga akan di blok. 2. Kurang efisien dalam mengembalikan proses yang sudah di blok. 3. Memerlukan mekanisme penjadwalan proses yang benar-benar handal karena pengaturan proses dalam monitor yang sangat ketat. Bentuk dasar monitor: monitor example i : integer; c : condition; Procedure producer(x); . . End; Procedure consumer(x); . . End; End monitor; Contoh penggunaan monitor pada Java Virtual Machine (JVM), Java Virtual Machine memakai monitor untuk sinkronisasi thread. Synchronized Statements. Untuk membuat sebuah synchronized statement, gunakan keyword synchronized dengan ekspresi yang me-refer ke suatu object contoh: void reverseOrder() { synchronized(this) { /*ekspresi method*/ } } Synchronized Methods. untuk membuat suatu synchronized methods, cukup dengan menambahkan keyword synchronized di depan nama method tersebut pada deklarasinya contoh: synchronized void reverseOrder() { /*ekspresi method*/ } Implementasi monitor dengan semaphore: Message Passing Message passing adalah model programming parallel dimana pesan yang disampaikan untuk dapat berhungan dengan mengirimkan dan menerima pesan satu sama lainnya. Sebuah pesan yang dikirim akan disampaikan ke penerima dan kemudian memproses request tersebut dan dikirimkan pesan balasan. Pesan balasan akan memicu request lainnya dan berlanjut ke pesan berikutnya dan seterusnya. Sistem ini disebut juga sebagai proses berkomunikasi antar bagian sistem untuk membagi variable yang dibutuhkan. Ini menyediakan dua operasi yaitu mengirim dan menerima pesan. Agar kedua sistem dapat berkomunikasi, maka harus dibuat sebuah link komunikasi antar keduanya. Sistem berkirim pesan sangat penting dalam sistem operasi dan dapat diimplementasikan dalam banyak hal seperti pembagian memori, pembagian bus, dan melaksanakan proses yang membutuhkan pengerjaan bersama antara beberapa bagian sistem operasi. Terdapat dua macam jenis komunikasi yang dapat dilakukan yaitu: Komunikasi langsung Setiap proses yang ingin berkomunikasi harus memiliki nama yang bersifat eksplisit baik penerimaan atau pengirim. Dalam konteks ini, pengiriman dan penerimaan pesan secara primitivedijabarkan sebagai : – Send (P, message) – mengirim sebuah pesan ke proses P. – Receive (Q, message) – menerima sebuah pesan dari proses Q. Komunikasi langsung memiliki sifat: 1. Sebuah jaringan didirikan secara otomatis diantara setiap pasang dari proses yang ingin dikomunikasikan. Proses tersebut harus mengetahui identitas dari semua yang ingin dikomunikasikan. 2. Sebuah jaringan adalah terdiri dari penggabungan dua proses. 3. Diantara setiap pesan dari proses terdapat tepat sebuah jaringan. Komunikasi tidak langsung Pada komunikasi tidak langsung, pesan akan dikirimkan pada dan diterima dari/ melalui mailbox (kotak surat) atau terminal-terminal. Sebuah mailbox dapat dilihat secara abstrak sebagai sebuah objek didalam setiap pesan yang dapat ditempatkan dari proses dan dari setiap pesan yang bisa dipindahkan. Setiap mail box memiliki sebuah identifikasi (identitas) yang unik, sebuah proses dapat berkomunikasi dengan beberapa proses lain melalui sebuah nomor dari mailbox yang berbeda. Pengirim dan penerima dijabarkan sebagai berikut: – Send (A, message) – mengirim pesan ke mailbox A. – Receive (A, message) – menerima pesan dari mailbox A. Komunikasi tidak langsung mempunyai sifat: 1. Sebuah link dibangun diantara sepasang proses dimana kedua proses tersebut membagi mailbox. 2. Sebuah link mungkin dapat berasosiasi dengan lebih dari dua proses. 3. Diantara setiap pasang proses komunikasi, mungkin terdapat link yang berbeda-beda, dimana setiap link berhubungan pada satu mailbox. Mailbox mungkin dapat dimiliki oleh sebuah proses atau sistem operasi. Jika mailbox dimiliki oleh proses, maka kita mendefinisikan antara pemilik (yang hanya dapat menerima pesan melalui mailbox) dan pengguna dari mailbox (yang hanya dapat mengirim pesan ke mailbox). Selama setiap mailbox mempunyai kepemilikan yang unik, maka tidak akan ada kebingungan tentang siapa yang harus menerima pesan dari mailbox. Ketika proses yang memiliki mailbox tersebut diterminasi, mailbox akan hilang. Semua proses yang mengirim pesan ke mailbox ini diberi pesan bahwa mailbox tersebut tidak lagi ada. Dengan kata lain, mempunyai mailbox sendiri yang independent, dan tidak melibatkan proses yang lain. Maka sistem operasi harus memiliki mekanisme yang mengizinkan proses untuk melakukan hal-hal dibawah ini: – Membuat mailbox baru. – Mengirim dan menerima pesan melalui mailbox. – Menghapus mailbox. SEMAPHORE Cindy Alicia Sahara (5214100172) Ratih Kinanti A (5214100174) Patricia Hanna S (5214100177) Indriarti Kusumanita (5214100178) ASAL USUL -Dibentuk oleh E.W Djikstra pada tahun 1960-an - Dibuat berdasarkan pengaturan rel kereta api dengan penggunaan semaphore. - Ketika kereta sedang berada di rel tersebut, Semaphore kemudian akan menghindari kereta lain agar tidak masuk ke dalam rel selama masih ada kereta yang menggunakan rel tersebut PENGERTIAN SEMAPHORE adalah alat untuk sinkronisasi yang tidak membutuhkan busy waiting. Semaphore S berupa variable integer. Semaphore hanya dapat diakses melalui operasi atomic yang tak dapat diinterupsi sampai kode selesai. Operasi dari semaphore S adalah wait dan signal berikut : wait (S ): while S 0 do no-op; S--; signal (S ): S++; SIFAT Semaphore mempunyai dua sifat, yaitu: 1. Semaphore dapat diinisialisasi dengan nilai nonnegatif. 2. Terdapat dua operasi terhadap semaphore, yaitu Wait dan Signal. JENIS 1.1. Binary semaphore. Semaphore ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai semaphore primitif 2. Counting semaphore. Semaphore ini memiliki nilai 0, 1, serta integer lainnya. Banyak sistem operasi yang tidak secara langsung mengimplementasikan semaphore ini. PRINSIP – Dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Variabel untuk penandaan ini disebut semaphore. – Proses dipaksa berhenti sampai proses memperoleh penanda tertentu FUNGSI 1. Mutual Exclusion. Sesuai dengan prinsip mutual exclusion, jika suatu thread sedang berada dalam critical section-nya, thread lain harus menunggu thread tersebut keluar dari critical section-nya sebelum dapat memasuki critical section-nya sendiri. Di sinilah semaphore digunakan, thread yang akan memasuki critical section-nya akan memanggil fungsi kunci terlebih dahulu. FUNGSI 2. Resource Controller. Saat thread ingin memakai resource ia akan memanggil fungsi kunci. Jika resource masih tersedia, thread bisa langsung menggunakannya, sebaliknya jika semua resource sedang dipakai, thread tersebut harus menunggu. Setelah resource selesai dipakai thread akan memanggil fungsi buka sehingga resource yang bebas bertambah. FUNGSI 3. Sinkronisasi Antar-Proses. Ada kalanya suatu thread memerlukan resource yang dihasilkan oleh thread lainnya. Oleh karena itu dibutuhkan suatu mekanisme untuk mengatur urutan eksekusi thread. Mekanisme ini dilakukan dengan memanfaatkan semaphore. KEUNTUNGAN 1. Dari segi programming, penanganan masalah sinkronisasi dengan Semaphore umumnya rapi dan teratur, sehingga mudah untuk dibuktikan kebenarannya 2. Semaphore diimplementasikan dalam hard code sehingga penggunaannya bersifat portabel KERUGIAN Busy waiting. Apabila suatu proses menempati critical section, dan ada proses lain yang ingin masuk critical section, maka akan terjadi iterasi secara terus-menerus pada entry section. Hal ini akan menimbulkan masalah pada sistem yang menggunakan konsep multiprogramming. IMPLEMENTASI Terdapat 2 buah thread yang berjalan bersamaan Thread A dan B mengakses variabel yang sama, yaitu count sehingga thread A dan B harus berjalan satu-satu. Untuk itu digunakan semaphore mutex yang berupa binary semaphore dengan nilai awal 1. IMPLEMENTASI Thread manapun yang mengeksekusi kunci terlebih dahulu akan jalan terus, sedangkan thread yang tiba belakangan akan menunggu sampai thread yang sudah berjalan terlebih dahulu mengeksekusi buka, setelah itu kedua thread berjalan lagi dengan normal. TERIMA KASIH