Deadlock dan Starvation 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