SINKRONISASI PROSES PADA SISTEM OPERASI

 

 SINKRONISASI PROSES YANG ADA PADA SISTEM OPERASI 

Sistem operasi adalah seperangkat program yang mengelola sumber daya perangkat keras komputer atau hardware, dan menyediakan layanan umum untuk aplikasi perangkat lunak. Sistem operasi adalah jenis yang paling penting dari perangkat lunak sistem dalam sistem komputer. Tanpa sistem operasi, pengguna tidak dapat menjalankan program aplikasi pada komputer mereka, kecuali program aplikasi booting.

Critical section adalah segmen kode yang mengakses data yang digunakan proses secara bersama-sama yang dapat membawa proses itu ke bahaya race condition. Biasanya sebuah proses sibuk melakukan perhitungan internal dan hal-hal lainnya tanpa ada bahaya yang menuju ke race condition pada sebagian besar waktu. Akan tetapi, biasanya setiap proses memiliki segmen kode dimana proses itu dapat mengubah variabel, meng-update suatu tabel, menulis ke suatu file, dan lain-lainnya, yang dapat membawa proses itu ke bahaya race condition.

Solusi dari masalah critical section harus memenuhi tiga syarat berikut:

–        Mutual exclusion

Merupakan sebuah jalan yang menjamin jika sebuah proses sedang menggunakan variabel atau berkas yang digunakan bersama-sama, proses lain akan dikeluarkan dari pekerjaan yang sama. Misal proses Pi sedang menjalankan critical section (dari proses Pi), maka tidak ada proses-proses lain yang dapat menjalankan critical section dari proses-proses tersebut. Dengan kata lain, tidak ada dua proses yang berada di critical section pada saat yang bersamaan.

–        Terjadi kemajuan (progress)

Jika tidak ada proses yang sedang menjalankan critical section-nya dan jika terdapat lebih dari satu proses lain yang ingin masuk ke critical section, maka hanya proses-proses yang tidak sedang menjalankan remainder section-nya yang dapat berpartisipasi dalam memutuskan siapa yang berikutnya yang akan masuk ke critical section, dan pemilihan siapa yang berhak masuk ke critical section ini tidak dapat ditunda secara tak terbatas (sehingga tidak terjadi deadlock).

–        Ada batas waktu tunggu (bounded waiting)

Jika seandainya ada proses yang sedang menjalankan critical section, maka terdapat batasan waktu berapa lama suatu proses lain harus menunggu giliran untuk mengakses critical section. Dengan adanya batas waktu tunggu akan menjamin proses dapat mengakses ke critical section (tidak mengalami starvation: proses seolah-olah berhenti, menunggu request akses ke critical section diperbolehkan).

Deadlock

Deadlock adalah keadaan dimana 2 atau lebih proses saling menunggu meminta resources untuk waktu yang tidak terbatas lamanya. Analoginya seperti pada kondisi jalan raya dimana terjadi kemacetan parah.

 Race Condition

Race Condition adalah situasi di mana beberapa proses mengakses dan memanipulasi data bersama pada saat besamaan. Nilai akhir dari data bersama tersebut tergantung pada proses yang terakhir selesai. Unutk mencegah race condition, proses-proses yang berjalan besamaan haus di disinkronisasi.

 Penyelesaian Metode Peterson

Dua proses solusi

Asumsikan instruksi LOAD and STORE adalah atomic, itu tidak di interupsi

Dua proses variabel dishare

Int turn;

Boolean flag[2]

Variabel turn masuk ke critical section. Dua flag digunakan untuk mengindikasikan jika suatu proses siap masuk ke critical section flag[i] = dinyarakan proses Pi siap!!

 Sinkronisasi Hardware

Seperti yang telah kita ketahui bahwa, sinkronisasi haruslah mutual exclusive/harus ada satu atau sekelompok instruksi yang tidak dapat diberhentikan pada waktu eksekusi (sifat mutual exclusive). Jadi, solusi untuk sinkronisasi dengan cara pendekatan hardware lebih menekankan kepada usaha-usaha untuk membuat suatu atau sekelompok instruksi menjadi mutual exclusive.

Pendekatan dari sisi hardware dapat dibagi menjadi dua:

  1. Processor Synchronous
  2. Memory Synchronous

Mutual exclusive = Jika proses Pi sedang mengeksekusi critical section maka tidak ada proses lain yang dapat mengeksekusi dalam critical section mereka.

Semaphores

Semafor adalah sistem sinyal yang digunakan untuk berkomunikasi secara visual. Dalam software, semafor adalah sebuah variabel bertipe integer yang selain saat inisialisasi, hanya dapat diakses melalui dua operasi standar, yaitu increment dan decrement. Semafor digunakan untuk menyelesaikan masalah sinkronisasi secara umum. Berdasarkan jenisnya, semafor hanya bisa memiliki nilai 1 atau 0, atau lebih dari sama dengan 0. Konsep semafor pertama kali diajukan idenya oleh Edsger Dijkstra pada tahun 1967.

Operasi standar pada semafor (dalam bahasa pemrograman C). Nama asli dari operasi tersebut sebenarnya adalah Proberen (test) dan Verhogen (increment). Fungsi wait dipanggil ketika thread akan memasuki critical section-nya atau ketika thread akan memakai resource yang tersedia. Jika sem_value kurang dari sama dengan 0, thread tersebut harus menunggu sampai thread lain memanggil fungsi buka. Fungsi buka dipanggil ketika thread meningggalkan critical section-nya atau ketika melepaskan resource yang telah digunakannya. Tentu saja kedua operasi tersebut harus bersifat atomik karena sem_value dapat diakses oleh beberapa proses (shared resource).

Semafor memiliki dua jenis, yaitu:

  1. Binary semaphore,

Semafor ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai semafor primitif

  1. Counting semaphore

Semafor ini memiliki nilai 0, 1, serta integer lainnya. Banyak sistem operasi yang tidak secara langsung mengimplementasikan semafor ini, tetapi dengan memanfaatkan binary semaphore

Fungsi Semaphore

–        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 semafor digunakan, thread yang akan memasuki critical section-nya akan memanggil fungsi kunci terlebih dahulu. Jika tidak ada thread lain yang sedang berada dalam critical section, thread ini akan memasuki critical section-nya. Jika terdapat thread lain yang sedang berada dalam critical section-nya, thread ini harus menunggu.Setelah thread keluar dari critical section-nya, thread tersebut akan memanggil fungsi buka sehingga sem_value akan naik menjadi lebih dari 0, dan satu (dari beberapa) thread yang sedang menunggu akan mendapatkan giliran untuk memasuki critical section-nya.

–        Sebagai contoh, misalnya terdapat dua buah thread yang sedang berjalan bersamaan:

Thread A: thread B: count = count + 1; count = count + 1; Thread A dan B mengakses variabel yang sama, yaitu count sehingga thread A dan B harus berjalan satu-satu. Untuk itu digunakan semafor mutex yang berupa binary semaphore dengan nilai awal 1.

–        Resource controller

Contoh: bayangkan sebuah restoran yang setiap malamnya ramai dikunjungi pelanggan. Kapasitas restoran terbatas, tetapi pemilik restoran memiliki kebijakan bahwa semua pengunjung yang datang akan mendapatkan kesempatan untuk makan, dengan konsekuensi yaitu pelanggan harus sabar menunggu gilirannya. Oleh karena itu, dikerahkanlah pegawai restoran untuk menahan tamu di luar jika restoran penuh lalu mempersilahkan tamu masuk jika tempat telah tersedia. Dari analogi di atas, pelanggan adalah thread, kapasitas restoran adalah resource, dan pegawai restoran adalah semafor. Semafor menyimpan banyaknya resource yang tersedia. 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.

–        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 semafor.

–        Sebagai contoh, misalnya terdapat dua buah thread yang sedang berjalan bersamaan:

Thread A: thread B: count = count + 1; count = count * 2; Nilai awal dari variabel count adalah 5, nilai akhir yang diinginkan adalah 12, oleh karena itu thread A harus dieksekusi sebelum thread B. Agar hal ini dapat terjadi dibutuhkan suatu semafor mutex yang merupakan sebuah binary semaphore dengan nilai awal 0.

Thread A: thread B: count = count + 1; kunci(mutex); buka(mutex); count = count * 2; Thread B akan menunggu sampai eksekusi thread A selesai sebelum melanjutkan.

Implementasi Semaphore

–        Windows

Fungsi yg dipakai adalah CreateSemaphore biasanya digunakan untuk membatasi jumlah thread yang memakai suatu resource secara bersamaan

–        Java

Semafor di Java bersifat transparan oleh

–        Programmer

Java™ menyembunyikan Semafor dibalik konsep

–        Monitor

Reserved Word yang dipakai Java™ adalah Synchronized

Masalah Klasik Sinkronisasi

–        Bounded buffer problem

Bounded buffer adalah tempat penampung data yang ukurannya terbatas, contohnya pada proses produsen dan konsumen. Beberapa masalah produsen-konsumen : produsen menaruh data pada buffer. Jika buffer tersebut sudah terisi penuh, maka produsen tidak melakukan apa-apa dan menunggu sampai konsumen mengosongkan isi buffer dan konsumen mengambil data dari buffer. Jika buffer tersebut kosong, maka konsumen tidak melakukan apa-apa dan menunggu sampai buffer tersebut diisi oleh produsen.

–        Readers and writers problem

Kedua jenis proses ini berbagai sumber daya penyimpanan yang sama, misalnya basis data. Tujuannya adalah agar data tidak korup dan inkonsisten. Kondisi reader and writers:

1.       Proses-proses pembaca dapat membaca sumber daya secara simultan

2.       Hanya boleh ada satu penulis menulis pada setiap saat

3.       Bila ada yang menulis, tidak boleh ada yang membaca

–        Dining-philosophers problem

Gambar dibawah ini adalah meja makan, kita asumsikan untuk semaphore

–        Mie (data)

–        Sebuah meja bundar

–        N filsuf duduk melingkar di meja bundar

–        Antara dua filsuf terdapat sebuah sumpit

–        Didepan setiap filsuf terdapat semangkuk mie, setiap filsuf hanya dapat berada pada salah satu kondisi berfikir, lapar, makan.


Kelemahan semaphore

–        Termasuk low level

–        Kesulitan dalam pemeliharannya karena tersebar dalam seluruh program

–        Menghapus wait à dapat terjadi non-mutual exclusion

–        Menghapus signal à dapat terjadi deadlock

–        Error yang terjadi sulit untuk dideteksi

Sumber : https://www.academia.edu/search?q=Sinkronisasi

         http://www.mampirlah.com/teknik-informatika/makalah-sinkronisasi-data-dan-deadlock.html

 

 

 

Komentar