Deadlock adalah penganalisa statis untuk mendeteksi kebuntuan potensial dalam program C yang diimplementasikan sebagai plugin platform Frama-C.
Algoritma inti didasarkan pada alat pembalap yang ada. Analisis Lockset yang disebut melintasi grafik aliran kontrol dan menghitung set kunci yang dipegang pada titik program apa pun. Ketika Lock B diperoleh dengan Lockset saat ini sudah mengandung kunci A, ketergantungan A -> B ditambahkan ke LockGraph. Setiap siklus dalam grafik ini kemudian dilaporkan sebagai kebuntuan potensial.
Plugin ini menggunakan EVA (plugin analisis nilai Frama-C) untuk menghitung informasi Mei-titik-ke untuk parameter operasi penguncian. Karena EVA tidak dapat secara native menganalisis program bersamaan, pertama -tama kami mengidentifikasi semua utas dalam suatu program dan kemudian menjalankannya untuk setiap utas secara terpisah dengan konteks titik program, di mana utas tersebut dibuat. Hasilnya kemudian di bawah aproksimasi, yang tidak memperhitungkan interleavings Thread.
Contoh ini menunjukkan output untuk program dengan kebuntuan sederhana. Contoh yang lebih kompleks dapat ditemukan di sini.
void * thread1 ( void * v )
{
pthread_mutex_lock ( & lock1 );
pthread_mutex_lock ( & lock2 );
...
pthread_mutex_unlock ( & lock2 );
pthread_mutex_unlock ( & lock1 );
}
void * thread2 ( void * v )
{
pthread_mutex_lock ( & lock2 );
pthread_mutex_lock ( & lock1 );
...
pthread_mutex_unlock ( & lock1 );
pthread_mutex_unlock ( & lock2 );
} [kernel] Parsing simple_deadlock.c (with preprocessing)
[Deadlock] Deadlock analysis started
[Deadlock] === Assumed threads: ===
[Deadlock] main
[Deadlock] thread1
[Deadlock] thread2
[Deadlock] === Lockgraph: ===
[Deadlock] lock1 -> lock2
[Deadlock] lock2 -> lock1
[Deadlock] ==== Results: ====
[Deadlock] Deadlock between threads thread1 and thread2:
Trace of dependency (lock2 -> lock1):
In thread thread2:
Lock of lock2 (simple_deadlock.c:20)
Lock of lock1 (simple_deadlock.c:21)
Trace of dependency (lock1 -> lock2):
In thread thread1:
Lock of lock1 (simple_deadlock.c:10)
Lock of lock2 (simple_deadlock.c:11)
Versi saat ini kompatibel dengan vanadium Frama-C, panduan instalasi terperinci dapat ditemukan dalam manual pengguna dan membutuhkan versi OCAML setidaknya 4.12. Selain Frama-C, Deadlock membutuhkan paket OPAM berikut untuk diinstal:
ounit2
containers
Setelah memasang dependensi dan mengkloning repositer ini, kebuntuan dapat dipasang sebagai berikut:
cd Deadlock
make setup
make
make install
Anda juga dapat menjalankan Deadlock di Docker baik dengan menggunakan docker run -it tdacik/deadlock atau dengan menjalankan make docker untuk membangun gambar versi terbaru.
Cara paling sederhana untuk menjalankan plugin adalah:
frama-c -deadlock source_file1.c source_file2.c ...
Untuk penggunaan yang lebih lanjut, lihat daftar opsi baris perintah untuk menyetel analisis dan manual GUI untuk visualisasi hasil dalam aplikasi GUI Frama-C.
Dacík T. Deteksi Deadlock Statis di Frama-C Dalam Prosiding Excel@Fit'20 . Universitas Teknologi Brno, Fakultas Teknologi Informasi. 2020
Analisis Statis Dacík T. di lingkungan Frama-C yang berfokus pada tesis Sarjana Deteksi Kebuntuan. Universitas Teknologi Brno, Fakultas Teknologi Informasi. 2020-07-10. Diawasi oleh Vojnar Tomáš.
Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi penulis/metode penulis:
Plugin tersedia di bawah lisensi MIT.