Sitemap

SEMAPHORE (signaling) & MUTEX PADA XINU

3 min readNov 20, 2025

--

SEMAPHORE

semaphore adalah mekanisme sinkronisasi untuk mengontrol akses proses ke sumber daya bersama dan mencegah kondisi balapan (race condition), dengan cara menggunakan variabel integer dan operasi “wait” (down) dan “signal” (up) untuk mengatur urutan eksekusi.

Cara Kerja Semaphore pada XINU:

  1. Variabel Integer: Semaphore dimulai dengan nilai tertentu (bisa 0 atau lebih). Inisialisasi semaphore menggunakan fungsi semcreate(nilai_inisiasi). Contoh: s1 = semcreate(3); untuk nilai awal 3.
  2. Operasi wait() (atau down()/P()): Ketika proses ingin mengakses sumber daya, ia memanggil wait(). Jika nilai semaphore > 0, nilainya dikurangi 1 dan proses lanjut; jika 0, proses diblokir (menunggu).
  3. Operasi signal() (atau up()/V()): Setelah selesai menggunakan sumber daya, proses memanggil signal(), yang menambah nilai semaphore, memberi tahu proses lain yang menunggu bahwa sumber daya kini tersedia.
  4. Jenis Semaphore:
  • Binary Semaphore: Nilai hanya 0 atau 1, digunakan untuk eksklusivitas (hanya satu proses boleh masuk).
  • Counting Semaphore: Nilai bisa 0 atau lebih, digunakan untuk mengelola akses ke sejumlah sumber daya yang terbatas (misalnya, buffer).

Implementasi pada xinu :

Press enter or click to view image in full size

masuk ke directory xinu, lalu input kode signaling.c yang ingin kalian buat atau bisa menggunakan kode dari link github berikut:
wget https://raw.githubusercontent.com/ramandarafky/implementation-practicum/refs/heads/main/signaling.c

ketik gedit signaling.c untuk mengecek isi/kodenya, kemudian copy semuanya.

masuk ke directory system → gedit main.c → paste kode yang sudah dicopy dari file signaling.c tadi → masuk ke directory compile → make clean → make → ketik sudo minicom → masukkan password: xinurocks → aktifkan backend → kembali ke devsystem lagi.

Maka akan muncul output seperti ini.

Get Ahmad Diqri Wirayudha’s stories in your inbox

Join Medium for free to get updates from this writer.

MUTEX

Mutex adalah pola semaphore yang digunakan untuk memastikan sebuah sumber daya (resource) hanya diakses oleh satu proses pada satu waktu (mutual exclusion).

  1. Inisiasi Mutex:
  • Deklarasikan variabel (misal: mutex) dengan tipe sid32.
  • Inisialisasi selalu dengan nilai 1 menggunakan semcreate(1).

2. Penerapan pada Critical Section:

  • Letakkan wait(mutex) tepat sebelum kode yang mengakses sumber daya bersama.
  • Letakkan signal(mutex) segera setelah kode critical section selesai mengeksekusi.

Implementasi pada xinu:

Lakukan hal yang sama seperti pada semaphore. Berikut link kode seperti gambar di bawah ini:
wget https://raw.githubusercontent.com/ramandarafky/implementation-practicum/refs/heads/main/mutex.c

jangan lupa paste ke directory system main.c seperti sebelumnya.

berikut output dengan menggunakan pola mutex.

ANALISIS

SEMAPHORE : variabel akan jalan secara urut apabila variabel sebelumnya sudah berangkat & memberi signal (tanpa melihat aktivitas variabel pertama sudah selesai atau belum).

MUTEX : variabel akan jalan secara urut apabila variabel sebelumnya sudah berangkat & selesai melakukan aktivitasnya (dilanjutkan dengan memberi signal).

--

--