Makalah Transaksi dan Pemulihan Sistem Operasi

Makalah Transaksi dan Pemulihan Sistem Operasi :

Makalah Transaksi dan Pemulihan Sistem Operasi
Makalah Transaksi dan Pemulihan Sistem Operasi

Makalah Transaksi dan Pemulihan Sistem Operasi :





BAB II
PEMBAHASAN

A.    TRANSAKSI

Transaksi merupakan sekumpulan instruksi atau operasi yang menjalankan sebuah fungsi logis.
Transaksi merupakan bagian dari pengeksekusian sebuah program yang melakukan pengaksesan basis data dan bahkan juga melakukan serangkaian perubahan data.  DBMS yang kita gunakan harus menjamin bahwa setiap transaksi harus dapat dikerjakan secara utuh atau tidak sama sekali.  Tidak boleh ada transaksi yang hanya dikerjakan sebagian, karena dapat menyebabkan inkonsistensi basis data.  Untuk itu transaksi selalu merubah basis data dari satu kondisi konsisten ke kondisi konsisten lain.
Transaksi harus memiliki sifat-sifat:
1.      Atomik, dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali.
2.      Konsisten, dimana eksekusi transaksi secara tunggal harus dapat menjamin data tetap konsisten setelah transaksi berakhir.
3.      Terisolasi, jika pada sebuah sistem basis data terdapat sejumlah transaksi yang dilaksanakan secara bersamaan, maka semua transaksi yang dilaksanakan pada saat yang bersamaan tersebut harus dapat dimulai dan bisa berakhir.
4.      Bertahan, dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya sistem menjadi mati.

 

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 yang perlu dipahami pengembang adalah atomicity, locking dan isolation, dan model transaction flat.
1.      Atomicity
Transaksi adalah atomic jika terdiri dari sejumlah operasi yang harus berhasil atau gagal sebagai satu unit (tidak setengah berhasil atau setengah gagal).

Karena database relational tidak memiliki konsep mentransfer uang, operasi ini harus diselesaikan dalam dua langkah:
o   Mengurangi jumlah uang di rekening bernama Account1
o   Menambah jumlah uang di rekening bernama Account2
Jika kedua operasi sukses, maka tidak ada alasan untuk menimbulkan persoalan. Jika kedua operasi gagal, maka adalah penyebab untuk timbulnya persoalan, namun data harus berada dalam kondisi yang konsisten. Jika satu operasi berhasil dan operasi lainnya gagal, maka ada kemungkinan akan menjadi persoalan.
Lingkup dari sebuah transaksi berawal mulai dari operasi yang pertama, yang disebut titik mulai, hingga akhir dari operasi terakhir, yang disebut titik komit. Jika ada operasi antara kedua titik tersebut ada yang gagal, maka sistem harus mengembalikan state ke kondisi sebelum titik mulai. Secara internal, database menggunakan mesin untuk menyimpan log untuk menyimpan state original dan memantau keberhasilan operasi. Setiap perubahan yang dibuat pada saat transaksi dicatat, dan jika ada operasi yang gagal, maka pencatatan log operasi dibatalkan dari akhir kembali ke kondisi awal log. Proses ini disebut rolling back.
Dalam prakteknya, beberapa transaksi dibuat sesederhana mungkin seperti contoh mentransfer uang di atas. Dengan mempertimbangkan bahwa operasi untuk mengurangi jumlah uang dalam Account1 itu sendiri tidak atomic. Artinya, ini langkah pertama dalam mentransfer uang yang mungkin terdiri dari sejumlah langkah yang dilaksanakan dalam aplikasi dan sejumlah operasi pada database.
Akibatnya, konsep menentukan lingkup sangat penting karena bila anda menentukan rentang sebuah transaksi, bukan dari segi jumlah operasi, anda akan jauh lebih mudah membuat model pemrograman.
Selain itu, dalam transaksi yang kompleks, tidak setiap operasi yang dilakukan sepanjang satu transaksi adalah kritis. Misalnya, jika transaksi tersebut terdiri dari sepuluh operasi, salah satunya adalah dengan mengirim email pemberitahuan kepada pengguna, tidak selalu bahwa jika terjadi kegagalan di sini harus mengakibatkan kegagalan seluruh transaksi. Meskipun beberapa jenis kegagalan tertentu harus menyebabkan transaksi rollback adalah masalah desain, yang harus diberikan tanda dalam pelaksanaannya.
2.      Penguncian dan Isolasi
Mekanisme penguncian memungkinkan database untuk menanganu beberapa transaksi yang berbarengan, sambil tetap memastikan integritas data dapat dikelola.
Dengan mekanisme penguncian, setelah transaksi tertentu telah melakukan update pada data tertentu, transaksi lainnya dilarang memperbarui atau bahkan membaca kembali sampai item yang pertama menyelesaikan transaksi. Transaksi selanjutnya dipaksa untuk menunggu, dan mereka mengatakan diblokir oleh database. Proses ini disebut dengan isolasi transaksi.
Gambar 9-2 menunjukkan contoh penguncian dalam transaksi.

Transaksi yang ditunjukkan dalam gambar 9-2 memiliki tiga langkah berikut:
o   Transaksi pertama mengupdate Account1 dalam database. Pada saat transaksi yang pertama dalam proses, Account1 terkunci.
o   Transaksi kedua berupaya untuk memperbarui Account1, namun tidak dapat menyelesaikan pembaruan karena account terkunci.

Ketika transaksi pertama selesai, kunci pada Account1 dilepaskan, yang memungkinkan transaksi kedua untuk melanjutkan.

3.      Model Transaksi
Database yang berbeda mendukung implementasi berbagai model manajemen transaksi. Secara umum, pengelolaan transaksi model dapat dibagi menjadi tiga jenis:
§  Model transaksi Nested – transaksi yang terdiri dari subtransactions yang beroperasi secara paralel. Jika transaksi utama gagal, maka semua subtransactions akan di rolled back. Namun, kegagalan dalam subtransaction tidak secara otomatis me-roll-back subtransactions lainnya. Misalnya, jika transaksi 1 membuat transaksi 2, maka dalam model transaksi nested, kegagalan dalam transaksi 1 akan me-roll-back transaksi 1 dan transaksi 2. Namun, kegagalan dalam transaksi 2 tidak secara otomatis me-roll-back transaksi 1, karena transaksi 2 adalah subordinat dari transaksi 1.

§  Model transaksi Chained - transaksi yang terdiri dari subtransactions yang dijalankan secara berurutan. Jika transaksi utama gagal, maka subtransactions akan di-roll-back. Namun, kegagalan dalam subtransaction hanya menyebabkan roll-back ke subtransaction tersebut saja. Misalnya, jika transaksi 1 membuat transaksi 2, dan 2 transaksi membuat transaksi 3, maka dalam chained model, kegagalan dalam transaksi 3 hanya me-roll-back transaksi 3. Sebuah kegagalan dalam transaksi 2 akan meroll- back transaksi 2 dan transaksi 3. Sebuah kegagalan dalam transaksi 1 akan me-roll-back ketiga transaksi.


§  Model transaksi Flat – transaksi yang tidak dapat dibuat dari subtransactions. Dalam urutan tertentu, hanya satu transaksi yang berlaku pada suatu waktu. Spesifikasi Java EE hanya mendukung model transaksi flat karena model ini secara universal didukung oleh semua vendor database. Selain itu, model transaksi flat menggunakan API yang sederhana untuk menentukan rentang sebuah transaksi. Ketika sebuah komponen memanggil method untuk meng-commit sebuah transaksi, komponen tidak harus menentukan transaksi yang mana yang akan di commit karena hanya satu transaksi dapat berlaku pada suatu waktu. Model transaksi flat juga memungkinkan untuk model transaksi secara deklaratif yang sederhana. Model transaksi yang lebih kompleks dapat disimulasikan dalam kode jika diperlukan.

Protokol Kendali Konkurensi Berbasis Lock ( Protokol Penguncian )
Salah satu cara untuk menjamin terjadi serialisasi adalah dengan menerapkan protokol penguncian (locking protocol) pada tiap data yang akan diakses. Ada dua macam cara untuk melakukan penguncian pada data:
  1. Shared . Jika sebuah transaksi Ti melakukan shared-mode lock pada data Q, maka transaksi tersebut dapat melakukan operasi read pada Q tetapi tidak dapat melakukan operasi write pada Q.
  2. Exclusive . Jika sebuah transaksi Ti melakukan exclusive-mode lock pada data Q, maka transaksi tersebut dapat melakukan read dan write pada Q.
Setiap transaksi harus melakukan penguncian pada data yang akan diakses, bergantung pada kebutuhan operasi yang akan dilakukan. Proses pengaksesan data Q sebuah transaksi Ti adalah sebagai berikut:
  1. Menentukan mode penguncian yang akan dipergunakan
  2. Memeriksa apakah data Q sedang dikunci oleh transaksi lain. Jika tidak, Ti dapat langsung mengakses Q, jika ya, Ti harus menunggu (wait).
  3. Bila mode penguncian yang diinginkan adalah exclusive-lock mode, maka Ti harus menunggu sampai data Q dibebaskan.
  4. Bila mode penguncian yang diinginkan adalah shared-lock mode, maka Ti harus menunggu sampai data Q tidak berada dalam exclusive-mode lock oleh data lain. Dalam hal ini data Q bisa diakses bila sedang dalam keadaan bebas atau shared-mode lock.
Sebuah transaksi dapat melakukan pembebasan (unlock) pada suatu data yang telah dikunci sebelumnya setelah data tersebut selesai diakses. Namun, proses pembebasan data tidak langsung dilakukan sesegera mungkin karena sifat serializable bisa tidak terjaga. Oleh karena itu, ada pengembangan lebih lanjut dari protokol penguncian yang disebut two-phase locking protocol. Protokol ini terdiri dari dua fase, yaitu:
  1. Growing phase . Fase dimana sebuah transaksi hanya boleh melakukan penguncian pada data. Pada fase ini, transaksi tidak boleh melakukan pembebasan pada data lain.
  2. Shrinking phase . Fase dimana sebuah transaksi melakukan pembebasan pada data. Pada fase ini, transaksi tidak boleh melakukan penguncian pada data lain.

Gambar 21.1. Two-Phase Locking Protocol

Pada banyak kasus, two-phase locking protocol banyak dipergunakan untuk menjaga sifat serializable dari suatu penjadwalan, namun protokol ini belum dapat menjamin bahwa tidak akan terjadi deadlockkarena masih ada transaksi yang berada dalam status menunggu ( wait()).

Protokol Berbasis Waktu
Pada protokol penguncian, transaksi-transaksi yang mengalami konflik ditangani dengan mengatur transaksi yang lebih dulu melakukan penguncian dan juga mode penguncian yang digunakan. Protokol berbasis waktu merupakan cara lain untuk melakukan pengaturan transaksi agar sifat serializable penjadwalan tetap terjaga.
Pada protokol ini, setiap transaksi diberikan sebuah timestamp yang unik yang diberi nama TS(Ti). Timestamp ini diberikan sebelum transaksi Ti melakukan eksekusi. Bila Ti telah diberikan timestamp, maka bila ada transaksi lain Tj yang kemudian datang dan diberikan timestamp yang unik pula, akan berlaku TS(Ti) < TS(Tj). Ada dua metode yang digunakan untuk melakukan protokol ini:
  1. Gunakan waktu pada clock system sebagai timestamp. Jadi, timestamp sebuah transaksi sama dengan clock system ketika transaksi itu memasuki sistem.
  2. Gunakan sebuah counter sebagai sebuah timestamp. Jadi, timestamp sebuah transaksi sama dengan nilai counter ketika transaksi mulai memasuki sistem.
Timestamp dari transaksi-transaksi akan membuat sifat serializable tetap terjaga. Bila TS(Ti) < TS(Tj), maka Ti akan dilakukan terlebih dahulu, baru kemudian Tj dilakukan. Setiap data item yang akan diakses akan memiliki dua nilai timestamp:
  1. W-timestamp(Q), berisi timestamp terbesar yang berhasil mengeksekusi perintah write().
  2. R-timestamp(Q), berisi timestamp terbesar yang berhasil mengeksekusi perintah read().
Timestamp yang ada akan terus diperbaharui kapan saja instruksi read(Q) atau write(Q) dieksekusi. Berdasarkan protokol berbasis waktu, semua konflik yang ada antara read dan write akan dieksekusi berdasarkan urutan timestamp tiap instruksi.
Protokol pembacaan transaksi:
  • Jika TS(Ti) < W-timestamp(Q), maka Ti perlu membaca data yang sekarang sudah ditulis dengan data lain. Maka, transaksi ini akan ditolak.
  • Jika TS(Ti) >= W-timestamp(Q), maka Ti akan membaca data dan R-timestamp(Q) akan di-set menjadi maksimum, yaitu sesuai timestamp Ti.
Protokol penulisan transaksi:
  • Jika TS(Ti) lebih kecil dari R-timestamp(Q), maka data Q yang akan ditulis oleh Ti diperlukan sebelumnya, sehingga dianggap bahwa Ti tidak perlu melakukan operasi write()(waktu eksekusi transaksi sudah lewat) dan transaksi ini ditolak.
  • Jika TS(Ti) lebih kecil W-timestamp(Q), maka transaksi Ti melakukan operasi write() yang hasilnya tidak diperlukan lagi (waktu Ti melakukan eksekusi sudah lewat) sehingga transaksi ini ditolak.
  • Selain dua point di atas, maka transaksi akan dilakukan
Tabel 21.3. Contoh Penjadwalan dengan PROTOKOL BERBASIS WAKTU
T2
T3
Read (B)


Read (B)

Write (B)
Read (A)


Read (A)

Write (A)

Read (B)

Write (B)

Protokol berbasis waktu juga membantu dalam mengatasi deadlock, karena tidak ada transaksi-transaksi yang melakukan wait().

Mekanisme Penanganan Deadlock
·         Pengabaian.  Ostrich Algorithm.
·         Pencegahan. Mencegah terjadinya salah satu kondisi deadlock.
·         Penghindaran. Memastikan sistem berada pada safe state dan dengan menggunakan deadlock avoidance algorithm.
·         Pendeteksian dan Pemulihan. Mekanisme pendeteksian menggunakan detection algorithm, sedangkan pemulihan dengan cara rollback and restart sistem ke safe state.

A. Penanganan DEADLOCK

Secara umum terdapat 4 cara untuk menangani keadaan deadlock, yaitu:
1.      Pengabaian. Maksud dari pengabaian di sini adalah sistem mengabaikan terjadinya deadlock dan pura-pura tidak tahu kalau deadlock terjadi. Dalam penanganan dengan cara ini dikenal istilah ostrich algorithm. Pelaksanaan algoritma ini adalah sistem tidak mendeteksi adanya deadlock dan secara otomatis mematikan proses atau program yang mengalami deadlock. Kebanyakan sistem operasi yang ada mengadaptasi cara ini untuk menangani keadaan deadlock. Cara penanganan dengan mengabaikan deadlock banyak dipilih karena kasus deadlock tersebut jarang terjadi dan relatif rumit dan kompleks untuk diselesaikan. Sehingga biasanya hanya diabaikan oleh sistem untuk kemudian diselesaikan masalahnya oleh user dengan cara melakukan terminasi dengan Ctrl+Alt+Del atau melakukanrestart terhadap komputer.
2.      Pencegahan. Penanganan ini dengan cara mencegah terjadinya salah satu karakteristik deadlock. Penanganan ini dilaksanakan pada saat deadlock belum terjadi pada sistem. Intinya memastikan agar sistem tidak akan pernah berada pada kondisi deadlock. Akan dibahas secara lebih mendalam pada bagian selanjutnya.
3.      Penghindaran. Menghindari keadaan deadlock. Bagian yang perlu diperhatikan oleh pembaca adalah bahwa antara pencegahan dan penghindaran adalah dua hal yang berbeda. Pencegahan lebih kepada mencegah salah satu dari empat karakteristik deadlock terjadi, sehingga deadlock pun tidak terjadi. Sedangkan penghindaran adalah memprediksi apakah tindakan yang diambil sistem, dalam kaitannya dengan permintaan proses akan sumber daya, dapat mengakibatkan terjadi deadlock. Akan dibahas secara lebih mendalam pada bagian selanjutnya.
4.      Pendeteksian dan Pemulihan. Pada sistem yang sedang berada pada kondisi deadlock, tindakan yang harus diambil adalah tindakan yang bersifat represif. Tindakan tersebut adalah dengan mendeteksi adanya deadlock, kemudian memulihkan kembali sistem. Proses pendeteksian akan menghasilkan informasi apakah sistem sedang deadlock atau tidak serta proses mana yang mengalami deadlock. Akan dibahas secara lebih mendalam pada bagian selanjutnya.

B. Pencegahan Deadlock

Pencegahan deadlock dapat dilakukan dengan cara mencegah salah satu dari empat karakteristik terjadinya deadlock. Berikut ini akan dibahas satu per satu cara pencegahan terhadap empat karakteristik tersebut.
1.      Mutual Exclusion Kondisi mutual exclusion pada sumber daya adalah sesuatu yang wajar terjadi, yaitu pada sumber daya yang tidak dapat dibagi (non-sharable). Sedangkan pada sumber daya yang bisa dibagi tidak ada istilah mutual exclusive. Jadi, pencegahan kondisi yang pertama ini sulit karena memang sifat dasar dari sumber daya yang tidak dapat dibagi.
2.      Hold and Wait Untuk kondisi yang kedua, sistem perlu memastikan bahwa setiap kali proses meminta sumber daya, ia tidak sedang memiliki sumber daya lain. Atau bisa dengan proses meminta dan mendapatkan sumber daya yang dimilikinya sebelum melakukan eksekusi, sehingga tidak perlu menunggu.
3.      No Preemption Pencegahan kondisi ini dengan cara membolehkan terjadinya preemption. Maksudnya bila ada proses yang sedang memiliki sumber daya dan ingin mendapatkan sumber daya tambahan, namun tidak bisa langsung dialokasikan, maka akan preempted. Sumber daya yang dimiliki proses tadi akan diberikan pada proses lain yang membutuhkan dan sedang menunggu. Proses akan mengulang kembali eksekusinya setelah mendapatkan semua sumber daya yang dibutuhkannya, termasuk sumber daya yang dimintanya terakhir.
4.      Circular Wait Kondisi 'lingkaran setan' ini dapat 'diputus' dengan jalan menentukan total kebutuhan terhadap semua tipe sumber daya yang ada. Selain itu, digunakan pula mekanisme enumerasi terhadap tipe-tipe sumber daya yang ada. Setiap proses yang akan meminta sumber daya harus meminta sumber daya dengan urutan yang menaik. Misalkan sumber daya printer memiliki nomor 1 sedangkan CD-ROM memiliki nomor 3. Proses boleh melakukan permintaan terhadap printer dan kemudian CD-ROM, namun tidak boleh sebaliknya.

C. Penghindaran Deadlock
Penghindaran terhadap deadlock adalah cara penanganan yang selanjutnya. Inti dari penghindaran adalah jangan sembarangan membolehkan proses untuk memulai atau meminta lagi. Maksudnya adalah, jangan pernah memulai suatu proses apabila nantinya akan menuju ke keadaan deadlock. Kedua, jangan memberikan kesempatan pada proses untuk meminta sumber daya tambahan jika penambahan tersebut akan membawa sistem pada keadaan deadlock. Tidak mungkin akan terjadi deadlock apabila sebelum terjadi sudah kita hindari.
Langkah lain untuk menghindari adalah dengan cara tiap proses memberitahu jumlah kebutuhan maksimum untuk setiap tipe sumber daya yang ada. Selanjutnya terdapat deadlock-avoidance algorithm yang secara rutin memeriksa state dari sistem untuk memastikan tidak adanya kondisi circular wait serta sistem berada pada kondisi safe stateSafe state adalah suatu kondisi dimana semua proses mendapatkan sumber daya yang dimintanya dengan sumber daya yang tersedia. Apabila tidak bisa langsung, ia harus menunggu selama waktu tertentu, kemudian mendapatkan sumber daya yang diinginkan, melakukan eksekusi, dan terakhir melepas kembali sumber daya tersebut. Terdapat dua jenis algoritma penghindaran yaitu resource-allocation graph untuk single instances resources serta banker's algorithm untukmultiple instances resources.
Algoritma penghindaran yang pertama yaitu resource-allocation graph akan dijelaskan secara mendalam pada bab selanjutnya yaitu Diagram Graf. Untuk algoritma yang kedua yaitu banker's algorithmakan dibahas pada bab ini dan dilengkapi oleh pembahasan di bab selanjutnya.
Dalam banker's algorithm, terdapat beberapa struktur data yang digunakan, yaitu:
  • Available . Jumlah sumber daya yang tersedia.
  • Max . Jumlah sumber daya maksimum yang diminta oleh tiap proses.
  • Allocation . Jumlah sumber daya yang sedang dimiliki oleh tiap proses.
  • Need . Sisa sumber daya yang masih dibutuhkan oleh proses, didapat dari maxallocation.
Kemudian terdapat safety algorithm untuk menentukan apakah sistem berada pada safe state atau tidak.
Contoh 23.2. TestAndSet
       
01 work dan finish adalah vektor yang diinisialisasi:
   work = available
   finish[i] = FALSE untuk i= 1,2,3,..,n-1.
02 cari i yang memenuhi finish[i] == FALSE dan needi <= work
   jika tak ada, ke tahap 04
03 work = work + allocationi
   finish [i] = TRUE
   kembali ke tahap 02
04 jika finish[i]==TRUE untuk semua i, maka sistem safe state.


Terdapat juga algoritma lainnya yang menentukan apakah proses boleh melakukan permintaan terhadap sumber daya tambahan atau tidak. Algoritma yang bertujuan memastikan sistem tetap pada keadaansafe state ini dinamakan resource-request algorithm.
Contoh 23.3. TestAndSet
       
Request = sumber daya yang dibutuhkan proses Pi. Pada request,
Pi membutuhkan k instances dari Rj.

01 Jika Requesti <= Needi, ke tahap 02.
   Selain itu error karena melebihi maximum permintaan
02 Jika Requesti <= Available, ke tahap 03.
   Selain itu Pi harus menunggu karena tidak tersedia
03 Ubah kondisi state setelah request dikabulkan
      Available = Available - Requesti
      Allocationi = Allocationi + Requesti
      Needi = Needi - Requesti

   if safe => sumber daya dialokasikan pada Pi
   if unsafe => Pi menunggu, state kembali sebelumnya
Algoritma-algoritma tersebut bertujuan untuk menghindarkan sistem dari terjadinya deadlock. Keadaan dimana sistem bebas dari deadlock disebut safe state. Jadi, semua kebutuhan proses akan sumber daya terpenuhi. Dampaknya adalah sistem tidak mengalami deadlock. Selain safe state, terdapat pula keadaan unsafe state. Pada keadaan ini, sistem mempunyai kemungkinan untuk berada pada kondisideadlock. Sehingga cara yang paling jitu untuk menghindari deadlock adalah memastikan bahwa sistem tidak akan pernah mengalami keadaan unsafe state.

D. Pendeteksian Deadlock

Pada dasarnya kejadian deadlock sangatlah jarang terjadi. Apabila kondisi tersebut terjadi, masing-masing sistem operasi mempunyai mekanisme penanganan yang berbeda. Ada sistem operasi yang ketika terdapat kondisi deadlock dapat langsung mendeteksinya. Namun, ada pula sistem operasi yang bahkan tidak menyadari kalau dirinya sedang mengalami deadlock. Untuk sistem operasi yang dapat mendeteksideadlock, digunakan algoritma pendeteksi. Secara lebih mendalam, pendeteksian kondisi deadlock adalah cara penanganan deadlock yang dilaksanakan apabila sistem telah berada pada kondisi deadlock. Sistem akan mendeteksi proses mana saja yang terlibat dalam kondisi deadlock. Setelah diketahui proses mana saja yang mengalami kondisi deadlock, maka diadakan mekanisme untuk memulihkan sistem dan menjadikan sistem berjalan kembali dengan normal.
Mekanisme pendeteksian adalah dengan menggunakan detection algorithm yang akan memberitahu sistem mengenai proses mana saja yang terkena deadlock. Setelah diketahui proses mana saja yang terlibat dalam deadlock, selanjutnya adalah dengan menjalankan mekanisme pemulihan sistem yang akan dibahas pada bagian selanjutnya. Berikut ini adalah algoritma pendeteksian deadlock.

E. Pemulihan Deadlock

Pemulihan kondisi sistem terkait dengan pendeteksian terhadap deadlock. Apabila menurut algoritma pendeteksian deadlock sistem berada pada keadaan deadlock, maka harus segera dilakukan mekanisme pemulihan sistem. Berbahaya apabila sistem tidak segera dipulihkan dari deadlock, karena sistem dapat mengalami penurunan performance dan akhirnya terhenti.
Cara-cara yang ditempuh untuk memulihkan sistem dari deadlock adalah sebagai berikut:
1.      Terminasi proses. Pemulihan sistem dapat dilakukan dengan cara melalukan terminasi terhadap semua proses yang terlibat dalam deadlock. Dapat pula dilakukan terminasi terhadap proses yang terlibat dalam deadlock secara satu per satu sampai 'lingkaran setan' atau circular wait hilang. Seperti diketahui bahwa circular wait adalah salah satu karakteristik terjadinya deadlock dan merupakan kesatuan dengan tiga karakteristik yang lain. Untuk itu, dengan menghilangkan kondisi circular wait dapat memulihkan sistem dari deadlock.Dalam melakukan terminasi terhadap proses yang deadlock, terdapat beberapa faktor yang menentukan proses mana yang akan diterminasi. Faktor pertama adalah prioritas dari proses-proses yang terlibat deadlock. Faktor kedua adalah berapa lama waktu yang dibutuhkan untuk eksekusi dan waktu proses menunggu sumber daya. Faktor ketiga adalah berapa banyak sumber daya yang telah dihabiskan dan yang masih dibutuhkan. Terakhir, faktor utilitas dari proses pun menjadi pertimbangan sistem untuk melakukan terminasi pada suatu proses.
2.      Rollback and Restart Dalam memulihkan keadaan sistem yang deadlock, dapat dilakukan dengan cara sistem melakukan preempt terhadap sebuah proses dan kembali ke state yang aman. Pada keadaan safe state tersebut, proses masih berjalan dengan normal, sehingga sistem dapat memulai proses dari posisi aman tersebut. Untuk menentukan pada saat apa proses akan rollback, tentunya ada faktor yang menentukan. Diusahakan untuk meminimalisasi kerugian yang timbul akibat memilih suatu proses menjadi korban. Harus pula dihindari keadaan dimana proses yang sama selalu menjadi korban, sehingga proses tersebut tidak akan pernah sukses menjalankan eksekusi.

B.     PEMULIHAN ( RECOVERY )

Backup : proses secara periodik untuk mebuat duplikat dari database dan melakukan logging file (atau program) ke media penyimpanan eksternal.
Recovery merupakan upaya untuk mengembalikan basis data ke keadaaan yang dianggap benar setelah terjadinya suatu kegagalan.
1.      Pemulihan terhadap kegagalan transaksi
2.      Pemulihan terhadap kegagalan system
3.      Pemulihan terhadap kegagalan media

Jenis – jenis kegagalan :
1.      Kegagalan system
Kegagalan yang mempengaruhi semua transaksi yang sedang berjalan tetapi tidak merusak database secara fisik.
Contoh : system error, software error
2.      Kegagalan media
            Kegagalan yang merusak database dan semua transaksi yang sedang berjalan pada saat itu.
      Contoh : head crash
Berbagai kemungkinan yang harus diantisipasi :
·         Gangguan Listrik
·         Kerusakan Disk
·         Kesalahan Perangkat Lunak
·         Pengaksesan oleh orang yang tidak berhak 
·         Dua Pengguna/ lebih mengubah data yang sama                   

3.   Fasilitas recovery
Fasilitas recovery didalam DBMS :
o   Back up mechanism
Membuat back up database dan log file secara periodic
o   Looging facility
Mencatat semua transaksi yang sedang berjalan
o   Checkpoint facility
Synchronization point antara database dengan transaksi log file
o   Recovery manager
Mengijinkan system untuk merestore database kekondisi yang tepat

Sejumlah control yang disediakan oleh DMBS :
o   Pemulihan (recovery)
o   Pengamanan (security)
o   Integritas (integrity)
o   Konkurensi (concurency)

Teknik Pemulihan
1.      Defered upate / perubahan yang ditunda
Perubahan pada basis data tidak akan berlangsung sampai transaksi ada pada poin disetujui (COMMIT). Jika terjadi kegagalan maka tidak akan terjadi perubahan, tetapi  diperlukan operasi redo untuk mencegah akibat dari kegagalan tersebut.

2.      Immediate Upadte / perubahan langsung
Perubahan pada basis data akan segera tanpa harus menunggu sebuah transaksi tersebut disetujui. Jika terjadi kegagalan diperlukan operasi UNDO untuk melihat apakah ada transaksi yang telah disetujui sebelum terjadi kegagalan.

3.      Shadow Paging
Menggunakan page bayangan dimana pada prosesnya terdiri dari 2 tabel yang sama, yang satu menjadi tabel transaksi dan yang lain digunakan sebagai cadangan. Ketika transaksi mulai berlangsung kedua tabel ini sama dan selama berlangsung tabel transaksi yang menyimpan semua perubahan ke database, tabel bayangan akan digunakan jika terjadi kesalahan. Keuntungannya adalah tidak membutuhkan REDO atau UNDO, kelemahannya membuat terjadinya fragmentasi.

Pemulihan Transaksi
Sebuah transaksi adalah suatu kesatuan prosedur di dalam program yang mungkin memperbaharui data pada sejumlah tabel. Sebuah transaksi dikatakan telah disetujui (committed) kalau seluruh rangkaian proses dalam transaksi tersebut berhasil dilaksanakan. Dalam prakteknya, bisa saja sesuatu proses di dalam sebuah transaksi gagal dilaksanakan.
Keterangan :
a. Mulai   : menyatakan keadaan awal
b. Disetujui sebagian : keadaan setelah suatu pernyataan berhasil dilaksanakan
c. gagal : menyatakan keadaan setelah suatu pernyataan gagal melaksanakan tugas
d. batal : keadaan setelah transaksi dibatalkan. Setelah dibatalkan, keadaan dipulihkan  seperti keadaan awal transaksi.
e. disetujui  : keadaan setelah transaksi berhasil dijalankan 
f. berakhir  : terjadi setelah transaksi disetujui atau dibatalkan
active
partially committed
committed
failed
aborted
 








System mempunyai catatan yang disebut log atau jurnal pada disk, yang dijadikan pedoman untuk membatalkan suatu pengubahan basisdata prosedur konsep pencatatan pada log:
Baca (X, xi) menyatakan prosedur untuk membaca item X dan nilainya berupa xi.
Tulis (Y, yi) menyatakan prosedur untuk menulis item Y dan nilainya berupa yi.
Contoh catatan log :
  mulai>  : ditulis ke dalam log sebelum Ti  dimulai
  : pengubahan item X dengan nilai baru xi  
  : ditulis ke dalam log saat transaksi disetujui
Log Basis Data

Pernyataan pada SQL :
a.    COMMIT  : menyetujui pengubahan data secara permanen dan membawa ke  keadaan  akhir
b.   ROLLBACK  : membatalkan pengubahan data dan membawa ke keadaan akhir .

Pemulihan Terhadap Pembatalan Transaksi (Rollback)
Terdapat dua metode dasar, yaitu :
1.      pendekatan update-in-place.
2.   pendekatan deferred-update

Transaksi pada dasarnya melibatkan empat aksi, yaitu :
1. update – membaca dan memodifikasi sistem.
2. read - hanya membaca sistem.
3. commit - membuat permanent seluruh modifikasi terhadap sistem.
4. abort - membatalkan aksi-aksi yang telah dilakukan.

1.      Pendekatan update – in – place
Pendekatan ini melibatkan pembaharuan sistem sebagaimana transaksi berjalan dan meniadakan pembaruan-pembaruan jika transaksi dibatalkan. Implementasi aksi-aksi transaksi pada pendekatan ini adalah :
1.   Update – merekam  undo terhadap record (contoh nilai lama objek yang  diperbarui) di file log undo dan memperbarui sistem.
2.   Read - membaca nilai objek disistem.
3.   Commit - mengabaikan file log undo.
4.  Abort – menggunkan record-rekord undo di file log undo untuk mengembalikan   system ke kondisi semula sebelum transaksi dengan membalik operasi-operasi yang telah dilakukan.

2.     Pendekatan deferred – update
Melibatkan penyimpanan pembaruan-pembaruan transaksi saat dijalankan dan menggunakan pembaruan-pembaruan yang disimpan untuk memperbarui system saat transaksi di – commit. Implementasi aksi-aksi transaksi pada pendekatan ini adalah :
1. Update – merekam rekor redo ( contoh nilai baru dari objek yang sedang diperbarui) di file log redo (juga disebut intention list).
2.    Read – menggabungkan file log redo dan system untuk menentukan nilai objek.
3.  Commit - memperbarui system dengan menerapkan file log redo secara berurut (dimulai dengan opersi pertama yang dilakukan transaksi).
4.      Abort - mengabaikan file log redo dan transaksi.
    
Pemulihan Sistem     
         Karena gangguan sistem, hang, listrik terputus alirannya. Kegagalan pada system menyebabkan data yang berada dalam RAM hilang. 
Implikasi :
Transaksi tidak selesai  : dibatalkan pada saat system aktif (prosesnya bisa disebut Undo). 
Transaksi yang telah berakhir  (disetujui)  :ditulis ke basis data (prosesnya biasa disebut Redo). 

Pemulihan Media
 Pemulihan karena kegagalan media dengan cara mengambil atau memuat kembali salinan basis data (backup) atau Pemulihan dengan cara restore dari backup Bagian tak terpisah dari sistem basisdata adalah skema pemulihan (recovery). Pemulihhan bertanggung-jawab terhadap pendeteksian kegagalan dan mengembalikan basis data ke keadaan konsisten sebelum terjadinyya kegagalan. Kegagalan media (misalnya disk rusak) dan proses pemulihannya Kegagalan disebabkan penyimpanan permanent adalah jarang terjadi. Meskipun demikian perlu dipersiapkan untuk mengatasi kejadian kegagalan ini. Teknik utama untuk mengatasi ini adalah backup atau dump.

Kegagalan pada media disebabkan data di disk hhilang karena terkorupsi sewaktu sistem crash atau penulisan acak atau karena rusaknya head dari disk. Kalau kejadian ini berlangsung , kita dapat memperoleh data dari penyimpanan stabil (yang berpeluang kecil gagal karena dilakukan secara mirrored disks, atau mempunyai banyak kopian dibanyak lokasi jaringan).Data yang disimpan dipenyimpanan stabil adalah data itu sendiri dan file log. Kapan arsip yang konnsisten sulit dilakukan karena berarti harus menghentikan semua transaksi untuk perekaman kopian arsip. Pendekatan yang lebih baik adalah teknik “fuzzy dump” yaitu perekaman dilakukan secara asinkron selagi aktivitas transaksi berlangsung dilakukan secara konkuren sebagai aktivitas background. Skema dasar untuk mengatasai adalah backup seluruh isi basisdata ke penyimpan stabil (stabile storage) secara periodic. Penyimpan stabil adalah penyimpan yang tak pernah kehilangan isinya. Transfer blok antara memori dan penyimpan disk dapat menghasilkan beberapa kemungkinan hasil berikut :
·           sukses seluruhnya
·           informasi yang ditransfer tiba dengan selamat ditujuan
·           terjadi kegagalan persial
kegagalan. terjadi ditengah-tengah transfer dan blok tujuan memuat informasi yang salah.
·           terjadi kegagalan total

kegagalan terjadi diawal transfer sehingga blok tujuan tidak berubah. Sistem harus dapat mendeteksi terjadinya kegagalan transfer data dan melakukan prosedur pemulihan untuk mengembalikan blok ke keadaan konsisten . untuk melakukan hal ini, system harus mengelola dua blok fisik untuk tiap blok basisdata logik. Operasi penulisan sebagai berikut :
1.    Tulis informasi ke blok fisik pertama.
2.  Saat penulisan pertama sukses secara lengkap, tulis informasi yang sama ke blok fisik kedua.
3.  Penlisan dinyatakan sukses secara hanya setelah penulisan kedua sukses secara lengkap.

Prosedur pemulihan
Selama pemulihan, masing-masing pasangan blok fisik diperiksa. Jika keduanya sama dan tidak terdeteksi kesalahan, maka tak ada aksi yang dilakukan. Jika salah satu blok terdeteksi kesalahan, maka gantikan isisnya dengan blok yang tak terdeteksi kesalahan. Jika kedua blok tak terdeteksi kesalahan tapi berada maka gantikan blok pertama dengan nilai blok kedua.

Pemulihan berbasis log
Bentuk yang palingn sering digunakan untuk merekam mamodifikasi yang dilakukan terhadap basisdata adalah log. Rekaman log mendeskripsikan satu penulisan ke basisdata dan memiliki field-field berikut :
1.    nama transaksi
nama transaksi untuk yang melakukan operasi penulisan.
2. nama item data
nama item data unik yang ditulis.
3. nilai nama
    nilai ite data sebelum penulisan.
4. nilai baru
   nilai item data yang seharusnya terjadi setelah penulisan.

Prosedur pemulihan
Setelah kegagalan maka basisdata dikembalikan ke keadaan terakhir yang di backup. Kemudian barisan transaksi stelah backup terakhir yang tercatat dilog dieksekusi ulang.

Pemulihan dengan checkpoint
Saat terjadi kegagalan system, maka diperlukan mengkonsultasi log untuk menetukan transaksi-transaksi yang perlu dijalankan kembali dan transaksi-trsansaksi yang perlu dijalankan kembali dan transaksi-transaksi yang tak perlu dijalankan ulang. Seluruh log perlu ditelusuri untuk menetukan hal ini. Terdapat dua kesulitan dengan pendekatan ini :
•  Proses pencairan memerlukan banyak waktu.
•  Kebanyakan transaksi yang perlu dilakukan telah dituliskan ke basisdata.

Meskipun menjalankan ulang transaksi-transaksi itu tidak merusak, tapi pemulihan menjadi lebih lama. Meruduksi overhead ini diperlukan checkpoint. System mengelolah log menggunakan salah satu teknik-teknik diatas. Sistem secara periodik membuat checkpoint sebagai berikut :
•  Tulis semua rekaman log yang saat itu berada dimemori utama kepenyimpan stabil.
•  Ttulis semua blok buffer yang telah dimodifikasi ke disk.
•  Tulis record log ke penyimpn stabil.

Terimakasih telah membaca Makalah Transaksi dan Pemulihan Sistem Operasi semoga bermanfaat.


keywords: Makalah Transaksi dan Pemulihan Sistem Operasi, Transaksi dan Pemulihan Sistem Operasi

2 Comments

- Attitude
- No SARA

Thank you for your comments