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.

 Bahan Referensi

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



2. DeadlockSolved.java


IV. Hasil dan Modifikasi

1. TestDeadlockExample1.java




Output:

  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:

  1. Dua sumber daya (resource1 dan resource2) didefinisikan sebagai string.
  2. Dua thread (t1 dan t2) dibuat untuk menunjukkan situasi deadlock.
  3. Thread t1 mengunci resource1 dan kemudian resource2.
  4. 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.


 2. DeadlockSolved.java




Output:




   Kode ini adalah contoh situasi deadlock di Java, dan sepertinya pembuatnya dengan sengaja membuat skenario deadlock.

Berikut penjelasan kode:

  1. Kelas Utama (DeadlockSolved):
    • Metode main membuat instans dari DeadlockSolved.
    • Dua sumber daya (resource1 dan resource2) dibuat.
  2. 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)).
  3. 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

Postingan populer dari blog ini

Modul B

Modul C