Rabu, 03 Desember 2014



Deadlock dan Shared Memory

          Deadlock adalah situasi dimana dua atau lebih proses tidak dapat berjalan karena saling menunggu resource dari yang lainnya. Penyebab kemungkinan deadlock antara lain;
  1. Mutual Exclusion -> hanya satu proses yang dapat menggunakan sumber daya pada satu kali waktu.
  2. Hold and Wait -> suatu proses dapat menahan sumber daya yang dialokasikan sambil menunggu sumber daya lainnya dapat dipakai.
  3. No preemption -> tidak ada sumber daya yang dapat dilepaskan dari proses yang sedang menggunakannya.
           Penyebab deadlock antara lain adalah karena circular wait.
           Cara - cara pencegahan deadlock antara lain;
  1. Pada Mutual Exclusion -> access hanya untuk write saja, proses - proses lain tetap bisa read.
  2. Pada Hold and Wait -> semua resources yang dibutuhkan diminta sejak awal.
  3. Pada No preemption -> proses melepaskan resource dan nanti memintanya kembali.
  4. Pada circular wait -> membuat urutan pengaksesan resource.

Shared Memory  

             Shared memory merupakan metode IPC tercepat. Tidak ada mekanisme untuk menangani penulisan pada waktu yang bersamaan. Terdapat 2 cara untuk menggunakan shared memory;
  1. Menggunakan mmap()
  2. Menggunakan shmget()  
               Langkah-langkah membuat shared memory adalah;
  • Membuat segment di memory dengan shmget()
  • Mendaftarkan (attach) segment ke data space dari proses dengan shmat()
  • Tulis/baca dari memori
  • Detach segment dari data space dari proses dengan shmdt()
           Shmget() adalah system call untuk membuat suatu segmen shared memory. Definisi dengan : #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflag). shmflag bisa diisi dengan IPC_CREATE, IPC_EXCL.
           Shmat() adalah system call untuk mendaftarkan segment shared memory ke dalam data space dari suatu proses. Definisi dengan : #include <sys/types.h> #include <sys/shm.h>void *shmat(int shmid, const void *shmaddr, int shmflg). Mempunyai parameter :
  • Shmid -> ID dari shared memory
  • Shmaddr -> Lokasi shared memory di main memory. Jika NULL akan dicarikan lokasi pada memory yang ingin ditempati.
          Shmdat() adalah system call untuk melepaskan shared memory segment dari data space dari proses. Definisi dengan : #include <sys/types.h> #include <sys/shm.h> int shmdt(const void *shmaddr). Mempunyai parameter yaitu, shmaddr -> pointer ke lokasi shared memory. Mempunyai return 0 untuk sukses dan (void *) -1 untuk eror
 

  

Tidak ada komentar:

Posting Komentar