Sistem Operasi
Konsep Interaksi
Sinkronisasi diperlukan untuk menghindari
terjadinya ketidakkonsistenan data akibat
adanya akses data secara konkuren.
Proses-proses disebut konkuren jika proses-
proses itu ada dan berjalan pada waktu yang
sama, proses-proses konkuren ini bisa bersifat
independen atau bisa juga saling berinteraksi.
Konsep Interaksi
Proses-proses konkuren yang saling berinteraksi
memerlukan sinkronisasi agar terkendali dan
juga menghasilkan output yang benar.
Komunikasi Antar Proses
Sistem Berbagi Memori
Sistem Berkirim Pesan
Sistem Berbagi Memori
Sistem Berbagi Memori atau yang disebut juga
sebagai Shared Memory System merupakan
salah satu cara komunikasi antar proses dengan
cara mengalokasikan suatu alamat memori
untuk dipakai berkomunikasi antar proses.
Alamat dan besar alokasi memori yang
digunakan biasanya ditentukan oleh pembuat
program.
Sistem Berkirim Pesan
Sistem berkirim pesan adalah proses komunikasi
antar bagian sistem untuk membagi variabel
yang dibutuhkan.
Proses ini menyediakan dua operasi yaitu
mengirim pesan dan menerima pesan.
Ketika dua bagian sistem ingin berkomunikasi
satu sama lain, yang harus dilakukan pertama
kali adalah membuat sebuah link komunikasi
antara keduanya.
Sistem Berkirim Pesan
Sistem berkirim pesan sangat penting dalam
sistem operasi. Karena 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 cara
berkomunikasi
Komunikasi langsung.
Komunikasi tidak langsung.
Komunikasi langsung
Dalam komunikasi langsung, setiap proses yang
ingin berkirim pesan harus mengetahui secara
jelas dengan siapa mereka berkirim pesan.
Hal ini dapat mencegah pesan salah terkirim ke
proses yang lain.
Karakteristik Komunikasi
langsung
Link dapat otomatis dibuat
Sebuah link berhubungan dengan tepat satu
proses komunikasi berpasangan
Diantara pasangan itu terdapat tepat satu link
Link tersebut biasanya merupakan link
komunikasi dua arah
Komunikasi tidak langsung
Berbeda dengan komunikasi langsung, jenis
komunikasi ini menggunakan sejenis kotak
surat atau port yang mempunyai ID unik untuk
menerima pesan.
Proses dapat berhubungan satu sama lain jika
mereka membagi port mereka.
Karakteristik komunikasi
Tidak Langsung
Link hanya terbentuk jika beberapa proses
membagi kotak surat mereka
Sebuah link dapat terhubung dengan banyak
proses
Setiap pasang proses dapat membagi beberapa
link komunikasi
Link yang ada dapat merupakan link terarah
ataupun link yang tidak terarah
Sinkronisasi
Komunikasi antara proses membutuhkan
subroutine untuk mengirim dan menerima data
primitif.
Terdapat desain yang berbeda-beda dalam
implementasi setiap primitif.
Pengiriman pesan mungkin dapat diblok
(blocking) atau tidak dapat dibloking
(nonblocking) - juga dikenal dengan nama
sinkron atau asinkron.
Sinkronisasi
• Ketika dalam keadaan sinkron, terjadi dua
kejadian:
1. Blocking send . Pemblokiran pengirim sampai
pesan sebelumnya diterima.
2. Blocking receive . Pemblokiran penerima sampai
terdapat pesan yang akan dikirim.
Sinkronisasi
• Sedangkan untuk keadaan asinkron, yang terjadi
adalah:
1. Non-blocking send . Pengirim dapat terus
mengirim pesan tanpa memperdulikan apakah
pesan sebelumnya sampai atau tidak.
2. Non-blocking receive . Penerima menerima
semua pesan baik berupa pesan yang valid atau
pesan yang salah (null).
Penyangga
Dalam setiap jenis komunikasi, baik langsung
atau tidak langsung, penukaran pesan oleh
proses memerlukan antrian sementara.
Pada dasarnya, terdapat tiga cara untuk
mengimplementasikan antrian tersebut:
Kapasitas Nol.
Kapasitas Terbatas.
Kapasitas Tak Terbatas.
Kapasitas Nol
Antrian mempunyai panjang maksimum nol,
sehingga tidak ada penungguan pesan
(message waiting).
Dalam kasus ini, pengirim harus memblok
sampai penerima menerima pesan.
Kapasitas Terbatas
Antrian mempunyai panjang yang telah
ditentukan, paling banyak n pesan dapat
dimasukkan.
Jika antrian tidak penuh ketika pesan dikirimkan,
pesan yang baru akan menimpa, dan pengirim
dapat melanjutkan eksekusi tanpa menunggu.
Link mempunyai kapasitas terbatas. Jika link
penuh, pengirim harus memblok sampai
terdapat ruang pada antrian.
Kapasitas Tak Terbatas
Antrian mempunyai panjang yang tak terhingga,
sehingga semua pesan dapat menunggu disini.
Pengirim tidak akan pernah di blok.
Client/Server
Dengan makin berkembangnya teknologi
jaringan komputer, sekarang ini ada
kecenderungan sebuah sistem yang
menggunakan jaringan untuk saling
berhubungan.
Dalam jaringan tersebut, biasanya terdapat
sebuah komputer yang disebut server, dan
beberapa komputer yang disebut client.
1. Karakteristik Server
Pasif
Menunggu request
Menerima request, memproses mereka
dan mengirimkan balasan berupa service
2. Karakteristik Client
Aktif
Mengirim request
Menunggu dan menerima balasan dari
server
Client/Server
Socket adalah sebuah endpoint untuk
komunikasi didalam jaringan.
Sepasang proses atau thread berkomunikasi
dengan membangun sepasang socket, yang
masing-masing proses memilikinya.
Socket dibuat dengan menyambungkan dua
buah alamat IP melalui port tertentu.
Client/Server
Secara umum socket digunakan dalam
client/server system, dimana sebuah server akan
menunggu client pada port tertentu.
Begitu ada client yang menghubungi server
maka server akan menyetujui komunikasi
dengan client melalui socket yang dibangun.
Contoh
sebuah program web browser pada host x (IP
146.86.5.4) ingin berkomunikasi dengan web
server (IP 152.118.25.15) yang sedang
menunggu pada port 80.
Host x akan menunjuk sebuah port. Dalam hal ini
port yang digunakan ialah port 1655.
Sehingga terjadi sebuah hubungan dengan
sepasang socket (146.86.5.4:1655) dengan
(152.118.25.15:80).
RPC
Remote Procedure Call (RPC) adalah sebuah
metode yang memungkinkan kita untuk
mengakses sebuah prosedur yang berada di
komputer lain. Untuk dapat melakukan ini
sebuah server harus menyediakan layanan
remote procedure.
Pendekatan yang dilakuan adalah sebuah server
membuka socket, lalu menunggu client yang
meminta prosedur yang disediakan oleh server.
RPC
Bila client tidak tahu harus menghubungi port
yang mana, client bisa me-request kepada
sebuah matchmaker pada sebuah RPC port
yang tetap.
Matchmaker akan memberikan port apa yang
digunakan oleh prosedur yang diminta client.
Deadlock dan Starvation
Race Condition
Race condition adalah suatu kondisi dimana dua
atau lebih proses mengakses shared
memory/sumber daya pada saat yang
bersamaan dan hasil akhir dari data tersebut
tergantung dari proses mana yang terakhir
selesai dieksekusi sehingga hasil akhirnya
terkadang tidak sesuai dengan yang
dikehendaki.
Race Condition
Critical Section
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.
Prasyarat Solusi Critical Section
Tiga Syarat untuk Solusi dari
masalah critical section :
Mutual Exclusion.
Terjadi kemajuan (progress).
Ada batas waktu tunggu (bounded waiting).
Mutual Exclusion
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.
Mutual Exclusion
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.
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.
Critical Section dalam Kernel
Interupsi
Page Fault.
Kernel code memanggil fungsi penjadwalan
sendiri
Interupsi
adalah suatu masalah bila mengandung critical
section-nya sendiri. Timer interrupt tidak secara
langsung menyebabkan terjadinya penjadwalan
ulang suatu proses; hanya meminta suatu jadwal
untuk dilakukan kemudian, jadi kedatangan
suatu interupsi tidak mempengaruhi urutan
eksekusi dari kernel code.
Page Fault
adalah suatu masalah yang potensial; jika
sebuah kernel routine mencoba untuk membaca
atau menulis ke user memory, akan
menyebabkan terjadinya page fault yang
membutuhkan M/K, dan proses yang berjalan
akan di tunda sampai M/K selesai.
Kernel code memanggil fungsi
penjadwalan sendiri
setiap waktu banyak proses yang berjalan dalam
kernel mode, akibatnya sangat mungkin untuk
terjadi race condition.
Ada 2 kemungkinan
Preemptive kernel
Non preemptive kernel
Solusi Critical Section
Algoritma I
Algoritma II
Algoritma III
Algoritma Tukang Roti
Algoritma I
Algoritma I mencoba mengatasi masalah critical
section untuk dua proses. Algoritma ini
menerapkan sistem bergilir kepada kedua
proses yang ingin mengeksekusi critical section,
sehingga kedua proses tersebut harus
bergantian menggunakan critical section.
Algoritma I
Algoritma II
Algoritma II juga mencoba memecahkan
masalah critical section untuk dua proses.
Algoritma ini mengantisipasi masalah yang
muncul pada algoritma I dengan mengubah
penggunaan variabel turn dengan variabel flag.
Variabel flag menyimpan kondisi proses mana
yang boleh masuk critical section.
Algoritma II
Algoritma III
Algoritma III ditemukan oleh G.L. Petterson pada
tahun 1981 dan dikenal juga sebagai Algoritma
Petterson.
Petterson menemukan cara yang sederhana
untuk mengatur proses agar memenuhi mutual
exclusion.
Algoritma ini adalah solusi untuk memecahkan
masalah critical section pada dua proses.
Algoritma III
Algoritma Tukang Roti
Algoritma Tukang Roti adalah solusi untuk
masalah critical section pada n-buah proses.
Algoritma ini juga dikenal sebagai Lamport's
Baker Algorithm.
Ide algoritma ini adalah dengan menggunakan
prinsip penjadwalan seperti yang ada di tempat
penjualan roti.
• Cari jurnal Deadlock
• Cari jurnal Lamport's Baker Algorithm
Algoritma Tukang Roti
Prinsip algoritma ini untuk menentukan proses
yang boleh mengakses critical section sama
seperti ilustrasi tukang roti diatas.
Proses diibaratkan pelanggan yang jumlahnya n-
buah dan tiap proses yang membutuhkan critical
section diberi nomor yang menentukan proses
mana yang diperbolehkan untuk masuk kedalam
critical section.
Algoritma Tukang Roti
Nomor yang diberikan adalah sekuensial atau
terurut, tapi seperti juga nomor urut yang ada di
tukang roti, tidak ada jaminan bahwa tiap proses
mendapat nomor urut yang berbeda.
Untuk mengatasinya digunakan parameter lain
yaitu proses ID.
Algoritma Tukang Roti
Dikarenakan tiap proses memiliki proses ID yang
unik dan terurut maka dapat dipastikan hanya
satu proses yang dapat mengakses critical
section dalam satu waktu.
Proses yang dapat mengakses critical section
terlebih dahulu adalah proses yang memiliki
nomor urut paling kecil.
Perangkat Sinkronisasi
TestAndSet()
Semafor
Monitor
TestAndSet()
Sebagian besar sistem komputer saat ini
menyediakan instruksi-instruksi perangkat keras
khusus yang mengizinkan kita untuk menguji
dan memodifikasi nilai dari sebuah variabel.
Instruksi ini disebut instruksi TestAndSet().
Instruksi ini bersifat atomik, yaitu instruksi yang
tidak dapat diinterupsi. Kita dapat menggunakan
instruksi khusus ini untuk memecahkan masalah
critical section yang sederhana.
Semafor
adalah sebuah variabel bertipe integer yang
selain saat inisialisasi, hanya dapat diakses
melalui dua operasi standar, yaitu increment dan
decrement.
Sistem sinyal yang digunakan untuk
berkomunikasi secara visual
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.
2 Jenis Semafor
Binary semaphore. Semafor ini hanya memiliki
nilai 1 atau 0. Sering juga disebut sebagai
semafor primitif
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 Semafor
Mutual Exclusion.
Resource Controller.
Sinkronisasi Antar-Proses.
Monitor
Monitor adalah suatu tipe data abstrak yang
dapat mengatur aktivitas serta penggunaan
resource oleh beberapa thread.
Ide monitor pertama kali diperkenalkan oleh
C.A.R Hoare dan Per Brinch-Hansen pada awal
1970-an.
Monitor
Monitor terdiri atas data-data private dengan
fungsi-fungsi public yang dapat mengakses data-
data tersebut.
Method-method dalam suatu monitor sudah
dirancang sedemikian rupa agar hanya ada satu
buah method yang dapat bekerja pada suatu
saat.
Hal ini bertujuan untuk menjaga agar semua
operasi dalam monitor bersifat mutual exclusion.
Monitor
Monitor dikembangkan karena penggunaan
semafor yang kurang praktis.
Hal itu disebabkan kesalahan pada penggunaan
semafor tidak dapat dideteksi oleh compiler.
Keuntungan menggunakan
Monitor
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.
Kompilator bisa memeriksa kemungkinan
adanya deadlock