Concurency
Concurency merupakan
landasan umum perancangan sistem operasi.
Proses-proses
disebut concurrency jika proses-proses (lebih dari satu proses) berada pada
saat yang sama.
Proses-proses
yang mengalami kongkuren dapat berdiri sendiri (independen) atau dapat saling
berinteraksi, sehingga membutuhkan sinkronisasi atau koordinasi proses yang
baik. Untuk penanganan kongkuren, bahasa pemograman saat ini telah memiliki
mekanisme kongkurensi dimana dalam penerapannya perlu dukungan sistem operasi dimana bahasa berada.
Syncronization
Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat
yang bersamaan. Tujuan utama sinkronisasi adalah menghindari terjadinya
inkonsitensi data karena pengaksesan oleh beberapa proses yang berbeda
(mutual exclusion) serta untuk mengatur urutan jalannya proses-proses
sehingga dapat berjalan dengan lancar dan terhindar dari deadlock dan
starvation. Sinkronisasi umumnya dilakukan dengan bantuan perangkat
sinkronisasi. Penyelesaian terhadap masalah ini sangat penting karena
perkembangan teknologi sistem komputer menuju ke sistem multiprocessing,
terdistribusi dan paralel yang mengharuskan adanya proses-proses kongkuren.
Pengertian Semaphore
Semaphore adalah sebuah variabel bertipe integer yang selain saat
inisialisasi.
Dalam kehidupan nyata, semaphore adalah sistem sinyal yang digunakan
untuk berkomunikasi secara visual. Dalam software, semaphore adalah sebuah
variabel bertipe integer yang selain saat inisialisasi, hanya dapat diakses
melalui dua operasi standar, yaitu increment dan decrement.
Semaphore digunakan untuk menyelesaikan masalah sinkronisasi secara umum.
Berdasarkan jenisnya, semaphore hanya bisa memiliki nilai 1 atau 0, atau
lebih dari sama dengan 0. Konsep semaphore pertama kali diajukan idenya oleh
Edsger Dijkstra pada tahun 1967.
Operasi standar pada semaphore (dalam bahasa pemrograman C):
void
kunci(int sem_value)
{
while(sem_value
<= 0);
sem_value–;
}
void
buka(int sem_value)
{
sem_value++;
}
Nama asli dari operasi tersebut sebenarnya adalah Proberen (test) dan
Verhogen (increment). Namun, sebutan untuk 2 method ini sangat beragam,
antara lain sering dikenal dengan nama :release dan acquire, P dan V , serta
kunci dan buka. Dalam penjelasan ini akan digunakan istilah buka dan kunci.
Fungsi wait dipanggil ketika thread akan memasuki critical section-nya
atau ketikathread 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).
Semaphore memiliki dua jenis, yaitu:
Binary semaphore. Semaphore ini hanya memiliki nilai 1 atau 0. Sering
juga disebut sebagai semaphore primitif
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
Fungsi Semaphore
Seperti telah disebutkan sebelumnya, semaphore berfungsi untuk menangani
masalah sinkronisasi secara umum, seperti
: Mutual Exclusion.
Mutual Exclusion adalah
suatu cara yang menjamin jika ada sebuah proses yang menggunakan variabel
atau berkas yang sama (digunakan juga oleh proses lain), maka proses lain
akan dikeluarkan dari pekerjaan yang sama. Jadi, Mutual
Exclusive terjadi ketika hanya ada satu proses yang boleh memakai sumber
daya, dan proses lain yang ingin memakai sumber daya tersebut harus menunggu
hingga sumber daya tadi dilepaskan atau tidak ada proses yang memakai sumber
daya tersebut.
Pengertian
lain Mutual exclusion adalah jaminan hanya satu proses yang mengakses sumber
daya pada suatu interval waktu tertentu, sedangkan proses lain dilarang
mengerjakan hal yang sama.
Contoh :
Sumberdaya
printer hanya bisa diakses 1 proses, tidak bisa bersamaan.
Sumber
daya ini disebut sumber daya kritis dan bagian program yang menggunakan
sumber daya kritis disebut critical region / section.
Hanya satu
program pada satu saat yang diijinkan masuk ke critical region. Pemrogram
tidak dapat bergantung pada sistem operasi untuk memahami dan memaksakan
batasan ini, karena maksud program tidak dapat diketahui oleh sistem operasi.
Hanya
saja, system operasi menyediakan layanan (system call) yang bertujuan untuk
mencegah proses lain masuk ke critical section yang sedang
digunakan proses tertentu.
Pemrograman
harus menspesifikasikan bagian-bagian critical section, sehingga sistem
operasi akan menjaganya. Pentingnya mutual exclusion adalah jaminan hanya
satu proses yang mengakses sumber daya pada suatu interval waktu.
Pemaksaan
atau pelanggaran mutual exclusion menimbulkan :
· Deadlock
· Starvation
· Deadlock
(buntu)
· Sinkronisasi
Contoh
masalah Concurrency:
|
void echo()
{
chin = getchar();
chout = chin;
putchar(chout);
}
Process
P1
Process P2
.
.
in = getchar();
.
.
in = getchar();
chout = chin; chout = chin;
putchar(chout);
.
.
putchar(chout);
Kalo kita liat
contoh diatas, bisa terjadi masalah buat proses 1 kalo nilai yang ditampung
sama in di proses 1 ke-overwrite sama in di proses 2, sehingga hasilnya bisa
ga reliable. Untuk mengatasi masalah-masalah semacem ini, ada beberapa cara
yang bisa kita lakuin (bakal dibahas selanjutnya).
Nah, berhubungan
sama concurrency ini, O/S punya beberapa concern, diantaranya:
1. Mentrack
proses-proses yang sedang aktif
2. Mengalokasi dan
mendealokasi resource-resource semacem processor time, memory, file, dan I/O
devices
3. Melindungi data dan
resource
4. Hasil dari proses
harus independen terhadap kecepatan eksekusi dari proses-proses lain yang
concurrent.
|
|
No comments:
Post a Comment