Mutual Exclusion: Hardware Support

Monday, April 19, 2010


Seperti yang telah kita ketahui bahwa, sinkronisasi haruslah mutual exclusive, atau dengan kata lain, 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.

Processor Synchronous

Central Processing Unit, CPU, mempunyai suatu mekanisme yang dinamakan interrupt. Di dalam sistim operasi, mekanisme ini digunakan secara intensif, atau dengan kata lain, banyak konsep-konsep sistim operasi yang menggunakan mekanisme ini. Sebagai contoh : system call, process scheduling, dsb.

Berbicara mengenai sinkronisasi berarti kita mengasumsikan bahwa akan ada 2 atau lebih proses yang sedang berjalan di komputer secara concurrent, atau dengan kata lain konsep time-shared sudah diimplementasikan di sistim operasi.

Sistim time-shared yang sering diimplementasikan dengan algoritma RR (Round Robin), memanfaatkan mekanisme interrupt di CPU. Jadi di dalam RR ada suatu satuan waktu yg dinamakan quantum yang mana setiap quantum dibatasi oleh satu software interrupt.

Teknisnya, akan ada suatu interrupt - yang biasanya adalah timer interrupt - yang secara berkala akan menginterrupt sistim. Pada saat interrupt dilakukan sistim operasi akan segera melakukan proses pergantian dari proses yang satu ke proses yang lainnya sesuai dengan algoritma.

Seperti yang telah dikatakan di atas, isu yang ada di sini adalah, ada satu atau sekelompok instruksi yang tidak dapat diberhentikan sampai satu atau sekelompok instruksi tersebut selesai.

Adalah sangat jelas bahwa yang membuat suatu instruksi diberhentikan adalah mekanisme yang di sistim operasi (baca mengenai process scheduling ). Mekanisme ini sangat bergantung kepada mekanisme interrupt dari hardware. Jadi, jika kita dapat menon-aktifkan interrupt pada saat critical section tersebut, maka masalah sinkronisasi dapat terselesaikan.

Ternyata para designer komputer melihat celah ini, dan sekarang ini sudah hampir semua komputer yang ada telah mengimplementasi instruksi mesin yang mana instruksi ini akan menon-aktifkan serfis interrupt, dan ada instruksi yang lain yang akan mengaktifkan interrupt tersebut.

Sebagai contoh sederhana, kita akan melihat contoh program dari prosesor Atmel ARM tm (contoh ini diambil karena prosesor ini mudah didapatkan dan harganya tidak terlalu mahal, serta ada dev-kitnya, silahkan merujuk ke http://www.atmel.com ).

mainModul :
00 CLI ' masuk ke Critical Section dengan cara
' men-disable interrupt
01 ADD r1,r2 ' Critical Section
02 .... ' Critical Section
03 SBI ' pergi dari Critical Section dengan cara
' men-enable interrupt
04 .. ' Remainder Section
Pada baris ke 0, prosesor akan menon-aktifkan interrupt, instruksi - instruksi selanjutnya tidak akan diganggu oleh interrupt. Selanjut setelah keluar dari critical section, pada baris 3, prosesor akan mengaktifkan kembali interrupt sehingga mekanisme scheduling di sistim operasi dapat berjalan kembali.

Bila kita melihat dari yang di atas, terlihat bahwa dengan mekanisme ini saja sudah cukup mengatasi isu yang ada. Tetapi ternyata mekanisme ini tidak terlalu berhasil di dalam lingkungan multiprocessor. Jikalau kita menon-aktifkan interrupt, maka yang dinon-aktifkan hanya satu prosesor, hal ini dapat mengakibatkan hal - hal yang tidak diinginkan.


Memory Synchronous

Dilihat dari nama mekanismenya, maka kita sudah dapat memprediksi bahwa mekanisme ini akan menggunakan jasa memori. Memang hal tersebut benar, mekanisme memory synchronous memakai suatu nilai yang disimpan di memori, dan jikalau suatu proses berhasil mengubah nilai ini, maka proses ini akan meneruskan ke instruksi selanjutnya, jika tidak, maka proses ini akan berusaha terus untuk dapat mengubahnya.

Jika dilihat dari paragraf di atas, mekanisme ini lebih cocok dikategorikan sebagai pendekatan dari software. Tetapi, jika kita perhatikan lebih lanjut, ternyata mekanisme ini memerlukan jasa hardware. Syarat yang harus dipenuhi agar mekanisme ini dapat berjalan adalah perlunya hardware mempunyai kemampuan untuk membuat suatu instruksi dijalankan secara atomic. Pengertian dari instruksi atomic adalah satu atau sekelompok instruksi yang tidak dapat diberhentikan sampai instruksi tsb selesai. Detil mengenai hal ini akan dibicarakan di bagian - bagian selanjutnya.

Sebagai contoh, kita dapat memperhatikan contoh program Javatm yang ada di bawah ini:

00 boolean testAndSet( boolean variable[] )
01 {
02 boolean t = variable[0];
03 variable[0] = true;
04 return t;
05 }
.....
56 while (testAndSet(lock)) { /* do nothing */ }
57 // Critical Section
58 Lock[0] = false;
59 // Remainder Section
method testAndSet haruslah bersifat atomic , sehingga method ini dianggap sebagai satu instruksi mesin. Perhatikan pada baris 56 dimana method ini dipakai. Pada baris ini proses berusaha untuk mengubah nilai dari variable reference lock. Jikalau ia tidak berhasil maka akan terus mencoba, tapi jika berhasil maka proses akan masuk ke bagian kritis dan setelah ini proses akan mengubah nilai dari lock sehingga memberikan kemungkinan proses lain untuk masuk.

Janganlah bingung dengan lock, boolean [], yang terkesan aneh. Hal ini bukanlah bagian dari sinkronisasi tetapi hanyalah suatu bagian dari konsep pass-by-reference dan pass-by-value dari Javatm, untuk lebih lanjut mengenai konsep ini dapat dibaca buku - buku programming javatm. Satu catatan di sini adalah, contoh ini hanyalah sebuah ilustrasi dan tidak dapat dicompile dan dijalankan, karena Javatm konsep atomic instruction di Javatm bersifat transparan dari sisi programmer (akan dijelaskan pada bagian-bagian selanjutnya).

Keunggulan dari memory synchronous adalah pada lingkungan multiprocessor, semua processor akan terkena dampak ini. Jadi semua proses yang berada di processor, yang ingin mengakses critical section, meskipun berada di processor yang berbeda - beda, akan berusaha untuk mengubah nilai yang dimaksud. Sehingga semua processor akan tersinkronisasi.

0 comments:

Post a Comment