Resource Controller. Bayangkan sebuah restoran yang setiap malamnya ramai dikunjungi Sinkronisasi Antar-Proses. Ada kalanya suatu thread memerlukan resource yang dihasilkan

[Downey2005] Allen B. Downey. 2005. The Little Book of Semaphores. Second Edition. Green Tea Press. [Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005. Operating Systems Concepts. Seventh Edition. John Wiley Sons. [Venners2000] Bill Venners. 2000. Inside the Java Virtual Machine. Second Edition. McGraw-Hill Companies. [WEBJAVA] Sun Microsystems. 1995. Synchronized methods The Java TM ; Tutorials Essential Classes Concurrency http:java.sun.comdocsbookstutorialessentialconcurrencysyncmeth.html . Diakses 8 Maret 2007. [WEBJAVA] Sun Microsystems. 1995. Thread Interference The Java TM ; Tutorials Essential Classes Concurrency http:java.sun.comdocsbookstutorialessentialconcurrencyinterfere.html . Diakses 8 Maret 2007. [WEBWIKI] Wikipedia. 2007. Test-and-set - Wikipedia, the free encyclopedia http:en.wikipedia.orgwikiTest-and-set . Diakses 8 Maret 2007. 143 144

Bab 21. Transaksi Atomik

21.1. Pendahuluan

Transaksi merupakan sekumpulan instruksi atau operasi yang menjalankan sebuah fungsi logis. Salah satu sifat yang harus dimiliki oleh transaksi adalah keatomikan. Sifat ini menjadikan suatu transaksi sebagai suatu kesatuan sehingga pengeksekusian instruksi-instruksi di dalamnya harus dijalankan secara keseluruhan atau tidak dijalankan sama sekali. Hal ini dilakukan untuk menghindari terjadinya kesalahan hasil eksekusi bila operasi-operasi yang ada dijalankan hanya sebagian saja. Transaksi atomik dapat diilustrasikan pada kasus transfer uang antar rekening. Pada kasus ini, setidaknya akan dilakukan dua buah operasi, yaitu debit pada rekening pengirim dan kredit pada rekening penerima. Kedua buah operasi tersebut harus dijalankan keseluruhan untuk menjaga agar data pada penerima dan pengirim uang konsisten. Bila hanya salah satu operasi saja yang dilakukan, misalnya hanya dilakukan operasi debit pada rekening pengirim, maka pada sisi pengirim akan merasa bahwa ia telah melakukan transfer uang padahal di sisi penerima merasa belum menerima uang yang ditransfer. Dengan demikian, akan terjadi kesalahpahaman di antara kedua pihak. Untuk mempertahankan sifat keatomikan suatu transaksi, maka operasi-operasi yang sudah dijalankan hasilnya harus disimpan sementara agar bila terjadi kegagalan sistem, transaksi dapat dibatalkan belum ada data yang berubah. Bab ini akan membahas mengenai bagaimana sistem operasi mempertahankan sifat atomik dari transaksi, yaitu mengenai proses penyimpanan hasil eksekusi instruksi dan mengenai transaksi-transaksi atomik yang dijalankan secara bersamaan agar tetap bersifat atomik.

21.2. Model Sistem

Sebuah transaksi harus memenuhi beberapa syarat. Syarat-syarat ini biasa disebut ACID properties dan harus terpenuhi agar pada saat terjadi system crash, pemulihan pada transaksi tersebut dapat dilakukan. ACID properties terdiri dari: • Atomicity. Sebuah transaksi dijalankan secara keseluruhan atau tidak dijalankan sama sekali. • Consistency. Sebuah transaksi mengubah sistem dari sebuah state yang konsisten menjadi state konsisten yang lain. • Isolation. Transaksi yang belum selesai tidak dapat menunjukkan hasilnya ke transaksi yang lain sebelum transaksi tersebut commit. • Durability. Ketika sebuah transaksi commit, sistem akan menjamin hasil dari operasi akan tetap, bahkan ketika terjadi kegagalan pada suatu subsequent. Dengan sifat atomicity, sebuah transaksi dapat dipastikan dijalankan secara keseluruhan atau jika terjadi system crash seluruh data yang telah diubah oleh transaksi tersebut dikembalikan ke state awal sebelum transaksi dilakukan. State awal yang konsisten akan diubah menjadi state lain yang juga konsisten setelah sebuah transaksi sukses dijalankan dengan asumsi tidak terjadi interleave antar transaksi. Oleh karena itu diperlukan consistency pada transaksi. Dengan sifat isolation dapat juga dikatakan setiap schedule rangkaian beberapa transaksi bersifat serializable, yang akan dibahas pada bagian serialisasi. Setiap kali transaksi telah berhasil dijalankan akan dijamin bahwa hasil update data akan terjaga.

21.3. Pemulihan Berbasis Log

Log merupakan sebuah struktur data yang dibuat sistem di stable storage. Seperti telah dijelaskan, atomicity merupakan salah satu komponen penting dalam sebuah transaksi. Sebuah transaksi secara 145 sederhana merupakan serangkaian operasi read dan write yang diakhiri dengan sebuah operasi commit atau abort. Sebuah operasi commit menandakan bahwa transaksi tersebut telah berakhir dengan sukses, sedangkan operasi abort menandakan bahwa transaksi tersebut telah berakhir karena adanya logical error atau kegagalan sistem. Ada kemungkinan sebuah transaksi yang abort telah memodifikasi data yang diaksesnya, sehingga state datanya tidak sama jika transaksi berhasil dijalankan secara atomik. Dengan sifat keatomikan, diharapkan transaksi yang abort tidak mengubah state dari data yang telah dimodifikasinya. Oleh karena itu, diperlukan rolled-back ke kondisi sebelum transaksi dijalankan untuk menjamin keatomikan suatu transaksi. Untuk menentukan bagaimana sistem menjamin keatomikan, kita perlu mengetahui perangkat yang digunakan untuk menyimpan data yang diakses transaksi tersebut. Media penyimpanan berdasarkan kecepatan relatif, kapasitas dibagi menjadi: • Volatile storage. Jika terjadi system crashes, informasi yang ada di volatile storage biasanya tidak dapat diselamatkan. Tetapi, akses ke volatile storage sangat cepat. Contohnya main memory dan cache memory. • Non-volatile storage. Jika terjadi system crashes, informasi yang ada di non-volatile storage biasanya masih dapat diselamatkan. Tetapi, akses ke non-volatile storage tidak secepat volatile storage. Contohnya disk dan magnetic tape. • Stable storage. Informasi yang ada di stable storage biasanya tidak pernah hilang. Untuk mengimplementasikan penyimpanan seperti itu, kita perlu mereplikasi informasi yang dibutuhkan ke beberapa non-volatile storage biasanya disk dengan failure modes yang independen.

21.4. Checkpoint

Salah satu cara untuk menjamin keatomikan suatu transaksi adalah adanya rolled-back ke kondisi sebelum transaksi. Untuk melakukan rolled-back tersebut, kita harus menyimpan semua informasi yang berkaitan dengan modifikasi data pada transaksi tersebut di stable storage. Metode yang sering digunakan untuk menyimpan hal tersebut adalah write-ahead logging. Dengan metode ini, setiap log menyimpan setiap operasi write dari sebuah transaksi dan terdiri dari: • Transaction name. Nama yang unik dari transaksi yang menjalankan operasi write. • Data item name. Nama yang unik dari data item yang ditulis. • Old value. Nilai data item sebelum operasi write dilakukan. • New value. Nilai yang akan dimiliki data item setelah dilakukan operasi write. Selain untuk menyimpan operasi write, ada log lain yang menyimpan informasi-informasi penting lainnya seperti start dari sebuah transaksi dan commit atau abort sebuah transaksi. Sebelum transaksi mulai dilaksanakan, log menyimpan operasi start dan selama transaksi dijalankan, log mencatat setiap operasi write yang terjadi. Ketika terjadi commit, log menyimpan operasi commit. Dengan menggunakan log, sistem dapat menangani kegagalan yang terjadi, sehingga tidak ada informasi yang hilang pada non-volatile storage. Algoritma pemulihan menggunakan dua buah prosedur: • Undo. Mengembalikan nilai semua data yang telah di-update oleh transaksi tersebut ke nilai sebelum transaksi dijalankan. Undo dilakukan ketika log menyimpan operasi start, tetapi tidak ada catatan operasi commit. • Redo. Nilai semua data yang di-update oleh transaksi tersebut diubah menjadi new value nilai yang akan dimiliki data item setelah dilakukan operasi write. Redo dilakukan ketika didalam log tersimpan operasi start dan juga commit.

21.5. Serialisasi

Ketika kegagalan sistem terjadi, kita harus melihat ke log terlebih dahulu untuk memutuskan transaksi mana yang harus dilakukan redo atau undo. Oleh karena itu kita harus mencari ke seluruh 146