Sabtu, 06 Desember 2014

Deadlock


Penyebab Kemungkinan Deadlock
*Mutual Exclusion
*Hanya satu proses yang dapat menggunakan sumber daya pada satu kali waktu.
*Hold-and-wait
*Suatu proses dapat menahan sumber daya yang dialokasikan sambil menunggu sumber daya lainnya dapat dipakai.
*No preemption

*Tidak ada sumber daya yang dapat dilepaskan dari proses yang sedang menggunakannya.


Pencegahan Deadlock
*Pada Mutual Exclusion
*Exclusive access hanya untuk write saja, proses-proses lain tetap bisa read
*Pada Hold and Wait
*Semua resource yang dibutuhkan diminta sejak awal
*Pada No Preemption
*Proses melepaskan resource dan nanti memintanya kembali
*Pada Circular Wait

*Membuat urutan pengaksesan resource


Shared Memory

*Ada 2 cara untuk menggunakan shared memory :
*Menggunakan mmap()
*Menggunakan shmget()
*Metode IPC tercepat

*Tidak ada mekanisme untuk menangani penulisan pada waktu yang bersamaan

Langkah-langkah Membuat Shared Memory
*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()
*System call untuk membuat suatu segmen shared memory
*Definisi :
*#include <sys/ipc.h>
*#include <sys/shm.h>
*int shmget(key_t key, size_t size, int shmflg);
*shmflg bisa diisi dengan :

*IPC_CREATE, IPC_EXCL, permission

shmat()
*System call untuk mendaftarkan segment shared memory ke dalam data space dari suatu proses
*Definisi :
*#include <sys/types.h>
*#include <sys/shm.h>
*void *shmat(int shmid, const void *shmaddr, int shmflg);
*Parameter :
*Shmid → ID dari shared memory
*Shmaddr → Lokasi shared memory di main memory
*jika NULL akan dicarikan lokasi pada memory yang ingin ditempati
*Return :
*Pointer ke lokasi shared memory


shmdt()
*System call untuk melepaskan shared memory segment dari data space dari proses.
*Definisi :
*#include <sys/types.h>
*#include <sys/shm.h>
*int shmdt(const void *shmaddr);
*Parameter :
*Shmaddr → pointer ke lokasi shared memory
*Return :
*0 → sukses
*(void *) -1 → error

shmctl()
*System call untuk mengetahui atau merubah informasi yang berkaitan dgn suatu shared memory
*Definisi :
*#include <sys/ipc.h>
*#include <sys/shm.h>
*int shmctl(int shmid, int cmd, struct shmid_ds *buf);

*Argument cmd bisa berisi :
*IPC_STAT : mengambil informasi ttg shared memory segment
*IPC_SET : mengubah informasi ttg shared memory segment
*IPC_RMID : menandai suatu segment untuk dibuang ketika semua process yang menggunakannya sudah melepasnya
*SHM_LOCK : Lock suatu segment, membuatnya tidak bisa di-swap
*SHM_UNLOCK : Unlock suatu segment

Program Tambahan

*Ada 2 program yang berguna untuk melihat apa yang terjadi pada IPC yang dibuat, yaitu :
*ipcs
*Menyediakan informasi yang berkaitan dengan IPC yang sedang digunakan (message queue, shared memory, semaphore)
*ipcrm
*Menghapus IPC tertentu (message queue, shared memory, semaphore)


0 komentar:

Posting Komentar