Sunday, January 28, 2018

Kondisi yang saling berlomba (Race Condition)

Race Condition

Istilah Race Condtion memang sudah banyak dibahas oleh teman-teman yang suka menulis blog. Banyak juga gaya bahasa dan penulisan tentang topik ini coba disajikan oleh teman-teman tersebut. Secara keilmuan, semua yang ditulis mengenai arti dari istilah race condition adalah benar, yaitu kondisi yang saling berlomba (arti secara harafia).

Pada kesempatan ini saya tertarik membahas hal ini dari sudut pandang kelimuan saya yaitu sistem
tertanam, bahasa kerennya adalah embedded system. Baiklah, mari kita mulai.

Pengantar


Dalam beberapa blog dan literatur yang saya baca, menyebutkan bahwa race condition adalah kondisi dimana dua atau lebih proses mengakses satu memori. Mungkin menurut saya lebih tepatnya adalah kondisi dimana ada dua atau lebih proses yang saling berlomba mengakses satu memori yang sama. Mengapa satu memori ini menjadi target dari perlombaan?. Mari kita dekati pemahaman (istilah) tersebut dari kalimat sebelumnya.

Target perlombaan dalam embedded system adalah resource. Resource di sini bisa diartikan memori, atau batasan yang lainnya seperti antarmuka dengan modem gsm atau tampilan OLED dan lain sebagainya. Sebenarnya resource ini tidak harus diperebutkan jika hanya ada satu proses yang menggunakannya pada satu saat.

Hal yang ingin saya sampaikan adalah jika pada umumnya race condition adalah mengakses memori secara bersamaan, dalam embedded system diperluas lagi, yaitu istilah memori menjadi resource. Sehingga resource ini dapat berarti apa saja.

Pembahasan


Pada Embedded system, dampak race condition muncul ketika lebih dari satu proses yang aktif secara bersamaan. Task atau thread berarti proses dalam bidang RTOS. Sementara ISR juga adalah proses yang langsung dieksekusi jika terjadi interupt, disebut juga interupt handler.

Race condition di jelaskan dengan cukup sederhana oleh Miro Samek dalam video youtube pada link ini. Pada video tersebut di jelaskan tentang satu buah led yang diakses oleh dua proses, yaitu proses pertama bertugas untuk mematikan sementara proses kedua yang adalah interupt bertugas untuk menghidupkan. Kedua proses tersebut saling berkopetisi untuk mengakses led tersebut.

Analogi dari contoh proses led tersebut, jika diaplikasikan pada kendali tabung pendingin, Ketika interupt berfungsi untuk menyalakan tabung, sementara fungsi tersebut di nonaktifkan oleh proses pertama. Hal yang akan terjadi adalah karena tabung yang semakin pantas, maka lama kelamaan akan mengakibatkan ledakan.

Berikut ini adalah beberapa cara untuk menghindari race condition, Pertama adalah melihat lebih seksama melihat resource yang digununakan apakah resource yang akan diakses secara bersamaan masi bisa diakses ke bagian yang lebih kecil. Misalnya resource yang yang dimaksud adalah sebuah register, artinya adalah masi hal yang lebih kecil yang dapat diakses yaitu mengakses secara bit. Sehingga Bit yang digunakan oleh proses yang lain tidak terganggu.

Cara menghindar yang lain adalah dengan mutex. Mutex biasanya dijumpai pada sebuah RTOS atau fremework scheduler. Istilah lain dari mutex adalah semaphore bit. Proses yang terjadi pada mutex yaitu membatasi akses resource jika satu proses sedang menggunakannya atau sedang berlansung. Hal ini akan mencegah race condition karena proses yang sedang menggunakan resource tersebut tidak diganggu saat dia sedang berlangsung.

Penutup


Rice condition akan jarang ditemukan pada awal perangkat diaktifkan. Namun, setelah sistem tersebut berjalan cukup lama maka kemungkinan race condition dapat terjadi. Oleh karena itu sebaiknya mengantisipasi sejak awal dari pada terjadi hal hal yang tidak diinginkan.

Race condition juga tidak dapat terdeteksi oleh compiler. Jadi berhati-hati lah dalam membuat program dan ingat. Sesederhana apa pun design awal sistem kita, akan sangat membatu untuk melakukan proses troubleshoting dan debuging dikemudian hari.

Terima kasih untuk kunjuntannya di postingan pertama tahun ini... Salam

No comments:

Post a Comment