Modul D
Laporan Tugas Sistem Operasi
MODUL D
Disusun untuk memenuhi
Tugas Sistem Operasi
Oleh:
M.Taris Rizki
2208107010047
JURUSAN INFORMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SYIAH KUALA
DARUSSALAM, BANDA ACEH
2023
I. Pendahuluan
Sistem operasi memainkan peran krusial dalam pengelolaan
sumber daya komputer, termasuk penjadwalan dan sinkronisasi proses. Dalam
laporan tugas sistem operasi ini, kita akan membahas aspek sinkronisasi, yang
merupakan strategi penting untuk menghindari deadlock dan konflik dalam
eksekusi program multithreading.
Silakan merujuk pada bahan praktikum di https://www.javatpoint.com/synchronization-in-java untuk pemahaman yang lebih mendalam.
II. Tujuan Praktikum
Sistem operasi memainkan peran krusial dalam pengelolaan sumber daya komputer, termasuk penjadwalan dan sinkronisasi proses. Dalam laporan tugas sistem operasi ini, kita akan membahas aspek sinkronisasi, yang merupakan strategi penting untuk menghindari deadlock dan konflik dalam eksekusi program multithreading.
III. Bahan Praktikum
Program Modul D
1. TestDeadlockExample1.java
IV. Hasil dan Modifikasi
1. TestDeadlockExample1.java
Kode Java tersebut mengilustrasikan contoh klasik dari situasi deadlock. Deadlock terjadi ketika dua atau lebih thread terblokir selamanya, masing-masing menunggu yang lain untuk melepaskan suatu kunci. Berikut adalah penjelasan singkatnya:
- Dua
sumber daya (resource1 dan resource2) didefinisikan sebagai
string.
- Dua
thread (t1 dan t2) dibuat untuk menunjukkan situasi
deadlock.
- Thread
t1 mengunci resource1 dan kemudian resource2.
- Thread
t2 mengunci resource2 dan kemudian resource1.
Berikut adalah rangkuman dari eksekusi kode:
- t1
dimulai dan mengunci resource1.
- t2
dimulai dan mengunci resource2.
Sekarang, t1 ingin mengunci resource2 (yang
sudah dikunci oleh t2), dan t2 ingin mengunci resource1 (yang
sudah dikunci oleh t1). Kedua thread menunggu satu sama lain untuk
melepaskan kunci, menyebabkan deadlock.
Pernyataan Thread.sleep(100) ditambahkan untuk
memperjelas situasi deadlock. Dalam skenario dunia nyata, waktu dan urutan
eksekusi dapat bervariasi, dan deadlock mungkin tidak selalu terjadi.
Untuk menghindari deadlock, penting untuk menetapkan urutan yang konsisten dalam mengakuisisi dan melepaskan sumber daya. Dalam contoh ini, kedua thread harus mengikuti urutan yang sama saat mengunci resource1 dan resource2 untuk mencegah deadlock.
Berikut penjelasan kode:
- Kelas
Utama (DeadlockSolved):
- Metode
main membuat instans dari DeadlockSolved.
- Dua
sumber daya (resource1 dan resource2) dibuat.
- Thread-1
(b1):
- Thread
ini mengunci resource2 (synchronized(b)) dan kemudian
memasukkan penundaan (Thread.sleep(100)) untuk meningkatkan
kemungkinan deadlock.
- Kemudian
mencoba mengunci resource1 (synchronized(a)).
- Thread-2
(b2):
- Thread
ini mengunci resource1 (synchronized(a)) dan kemudian
mencoba mengunci resource2 (synchronized(b)).
Permasalahannya muncul karena Thread-1 mengunci resource2
dan menunggu resource1, sementara Thread-2 mengunci resource1 dan
menunggu resource2. Ini menciptakan ketergantungan siklik, menyebabkan
deadlock. Kedua thread tidak dapat melanjutkan karena keduanya menunggu satu
sama lain untuk melepaskan sumber daya.
Jika ingin mengatasi deadlock ini, Anda perlu memastikan bahwa kedua thread mengikuti urutan yang sama saat mengunci. Misalnya, jika Thread-1 mengunci resource1 terlebih dahulu dan kemudian resource2, Thread-2 juga harus mengikuti urutan yang sama. Hal ini menghilangkan kemungkinan adanya siklus tunggu dan mengatasi deadlock.
VI. Kesimpulan
Laporan tugas sistem operasi ini membahas aspek
sinkronisasi, sebuah strategi penting untuk menghindari deadlock dan konflik
dalam eksekusi program multithreading. Contoh deadlock diilustrasikan melalui
program Java yang mengunci dua sumber daya, menciptakan situasi di mana dua
thread saling menunggu satu sama lain untuk melepaskan kunci. Solusi untuk
mengatasi deadlock juga dijelaskan, menekankan pentingnya mengikuti urutan yang
konsisten saat mengunci sumber daya.







Komentar
Posting Komentar