Tuesday, 10 November 2015



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.
Dalam concurrency ini, kerap terjadi yang namanya kompetisi antar proses yang konkuren. Nah dalam kompetisi ini ada istilah mutual exclusion(Seperti pengertian diatas). Masalahnya akibat mutual exclusion ini bisa aja terjadi yang namanya deadlock dan starvation. Deadlock maksudnya ada 2 proses yang saling menunggu untuk melakukan 1 eksekusi tertentu. Karena saling tunggu, yang ada akhirnya malah kedua-duanya ga ada yang jalan. Kalo starvation itu adalah situasi dimana 1 proses nunggu terlalu lama buat memakai 1 resource/eksekusi tertentu.
Selain kompetisi, ada juga yang namanya kooperasi. Nah kooperasi ini dibagi jadi 2 macem:
1.     By sharing, nah dalam kooperasi ini, writing harus dilakuin secara mutually exclusive. Supaya integritas datanya terjaga, maka perlu dipake yang namanya critical sections.
2.     By communication, nah dalam kooperasi ini, pesan-pesan yang ada dioper antar 1 proses ke proses yang lain (jadi tidak harus ada mutual exclusion). Karena itu, dalam kooperasi ini ada kemungkinan terjadinya deadlock dan starvation).

Nah tadi kan udah disinggung sedikit soal mutual exclusion. Sekarang bakal dijelasin secara lebih lengkap tentang mutual exclusion. Jadi, mutual exclusion itu adalah Suatu metode yang memungkinkan supaya Cuma ada 1 proses dalam 1 waktu yang berhak berada dalam critical section dari suatu resource. Sebuah proses yang berhenti di non-critical section dari suatu proses harus melakukannya tanpa mengganggu proses-proses yang lain. Karena itu, dalam mutual exclusion ga ada yang namanya deadlock atopun starvation. Dengan metode ini, suatu proses ga boleh terhambat dalam memasuki critical section dari suatu resource kalo critical section itu lagi kosong, tapi setelah ada didalemnya, proses itu terbatas berada disana dalam satu waktu tertentu.
Nah supaya bisa mencapai mutual exclusion ini, ada beberapa cara yang bisa dilakukan:
1.     Dengan men-disable interrupts.
Umumnya, suatu proses berjalan sampai dia memanggil suatu layanan OS ato sampai diinterupsi. Dengan metode ini, kita mencegah munculnya interupsi, sehingga bisa menjamin mutual exclusion. Selain itu, metode ini juga dibatasi kemampuannya dalam meng-interleave program. Tetapi jika kita menggunakan multiprocessing, men-disable interrupt di 1 prosesor ga bakal menjamin mutual exclusion.

2.     Memakai lock variable
Dengan metode ini, kita menggunakan suatu variable yang berperan sebagai kunci (lock). Variable ini diinisialisasi dengan nilai 0. Jika lock = 0, maka proses boleh memasuki critical section, lalu nilai lock diubah menjadi 1. Setelah proses keluar, maka lock akan kembali diberi nilai 0. Jika ada proses yang ingin masuk tapi nilai lock = 1, maka proses itu harus menunggu samapi lock = 0. Permasalahan yang bisa timbul dari metode ini adalah race condition, dimana 2 proses mencapai critical section pada waktu yang hampir bersamaan.

3.     Menggunakan strict alteration
4.     Menggunakan Peterson’s solution
5.     Memakai instruksi TSL
Yang selanjutnya Classical IPC problem:




No comments:

Post a Comment