Transcript

Bernis Sagita132310499MI2

PendahuluanProses:- Independent- Cooperating → Race Condition

Proteksi dapat dilakukan dengan Sinkronisasi

Sinkronisasi?

Critical Section

KonkurensiJenis:- Pseudo-concurrency- True-concurrency

Penyebab Konkurensi:- Interrupt- Softirqs dan Tasklets- Kernel Preemption- Sleeping dan Synchronization with

user-space- Symmetrical Multiprocessing

Syarat SinkronisasiMutex- Independent- Cooperating → Race Condition

Cara mencapai Mutex:- Processor Synchronous- Memory Synchronous- Instruksi Atomik- Spin Lock- Semaphore- SMP

Instruksi AtomikSalah satu metode dalam kernel LINUX

untuk sinkronisasi adalah instruksi atomikSalah satu jenis dari instruksi atomik adalah

integer atomik

5

TestAndSet()Bersifat atomikJika dua instruksi TestAndSet () dijalankan

secara serentak, kedua instruksi tersebut akan dieksekusi secara sekuensial

TestAndSet()boolean testAndSet(boolean lock){

boolean t = lock;lock = true;return t;

}while (testAndSet(lock)) ;

// Critical SectionLock[0] = false;

7

SemaphoreSemafor adalah sebuah variabel bertipe

integer yang selain saat inisialisasi, hanya dapat diakses melalui dua operasi standar, yaitu increment dan decrement.

Nama asli dari operasi tersebut sebenarnya adalah Proberen (test) dan Verhogen (increment).

Namun, untuk mempermudah pemahaman digunakan nama signal dan wait

8

Semaphore (cont’d)void signal(int sem_value) {

sem_value++;}

void wait(int sem_value) {while(sem_value <= 0);sem_value--;

}

Semaphore (cont’d)Jenis- Binary (primitive semaphore)-0/1- Counting semaphore-0,1,2,3,… (tergantung

usage count)Fungsi

Mutual ExclusionResource ControllerSinkronisasi antar proses

Semaphore (cont’d)Mutual Exclusion

thread A: thread B:wait(mutex); wait(mutex);count = count + 1; count = count + 1;signal(mutex); signal(mutex);

Semaphore (cont’d)Resource Controller

thread A: thread B: thread C:wait(multiplex); wait(multiplex);

wait(multiplex);//critical section //critical section //critical

sectionsignal(multiplex); signal(multiplex);

signal(multiplex);

Semaphore (cont’d)Sinkronisasi Antar-Proses

thread A: thread B:count = count + 1; wait(mutex);signal(mutex); count = count * 2;

Semaphore (cont’d)Dilihat dari operasi wait() nya, semafor dapat

dibedakan menjadi 2:Semaphore spinlockSemaphore sleep locking Pada LINUX, digunakan semaphore sleep

locking

Semaphore (cont’d)void signal(int

sem_value){sem_value++;if(sem_value <= 0){

/*keluarkan satu thread dari waiting queue*/

/*aktifkan thread tersebut*/}

}

void wait(int sem_value){sem_value--;if(sem_value < 0){

/*masukkan thread ke dalam waiting queue*/

/*blok thread tersebut*/}

}

Semaphore (cont’d)Keuntungan

Dari segi programming, penanganan masalah sinkronisasi dengan semafor umumnya rapi dan teratur, sehingga mudah untuk dibuktikan kebenarannya

Semafor diimplementasikan dalam “hard code” sehingga penggunaannya bersifat portabel

Semaphore vs Spin Lock

Berbeda dengan spin lock, semafor

memperbolehkan adanya preemption.

Requirement Recommended

Overhead locking yang rendah Spin lock

Lock hold time yang singkat Spin lock

Lock hold time yang panjang Semaphore

Sleep ketika menunggu lock Semaphore

SMP (Symetric MultiProcessing)Mulai digunakan pada Kernel 2.0Multiprocessing artinya kernel code dapat

dijalankan dalam dua atau lebih processorUntuk menjaga agar dua thread tidak

mengakses resources yang sama dalam waktu yang sama, maka SMP menerapkan aturan dimana hanya ada satu processor yang dapat menjalankan thread dalam kernel mode dengan cara spin lock tunggal

SMPSpin lock tunggal ini tidak memunculkan

permasalahan untuk proses yang banyak menghabiskan waktu untuk menunggu proses komputasi, tapi untuk proses yang banyak melibatkan banyak aktifitas kernel, spin lock menjadi sangat mengkhawatirkan

19

SMPDalam pengembangan kernel LINUX 2.1,

kernel spin lock tunggal menjadi banyak lock yang masing-masing melindungi terhadap masuknya kembali sebagian kecil data struktur kernel sehingga mengizinkan banyak processor untuk dieksekusi oleh kernel mode secara bersamaan.

20

SMPPada Linux 2.6, kernel mendukung adanya

konsep preemptive, scheduler dalam kernel dapat menginterrupt kernel code yang sedang berjalan untuk memberi kesempatan bagi kernel code lain untuk dijalankan.


Top Related