Perkenalan Dengan Operating System

Apakah Sistem Operasi itu? Sistem operasi atau sering disebut OS (Operating System) adalah suatu program yang mengatur pembagian sumber daya. Terdapat beberapa fungsi OS, antara lain : Mengatur eksekusi program lain Sebagai perantara (interface) apikasi dengan hardware

Evolusi Operating System

Seiring dengan perkembangan zaman, OS pun juga harus ikut berkembang atau bervolusi. Mengapa OS harus berevolusi? Inilah alasannya : Munculnya hardware jenis baru Adanya layanan baru yang dibutuhkan pengguna Update atau perbaikan (patches, bug, fixes) Berikut evolusi OS sejak pertama kali para ilmuwan menemukan komputer sampai sekarang. Cekidot!

--

Istilah dalam Operating System

Mau berkenalan lebih dalam dengan operaring system? Pertama-tama,kenalilah apa saja yang dibutuhkan dan istilah apa saja yang biasanya diapakai dalam OS. CEKIDOT!

Multiprocessing Operating System

Seiring dengan berkembangnya zaman, kemajuan teknologi, terutama dalam bidang komputasi, sangatlah pesat. Dari awal di mana prosesor belum mempunyai kemampuan yang optimal , sampai saat ini prosesor sudah bisa melakukan beberapa proses secara bersamaan. CEKIDOT!

Basic Command pada Linux

Apakah Anda sudah pernah memaki Linux pada OS komputer Anda? Kalau belum, pada artikel kali ini, mimin mau ngebahas soal Linux nih. Mulai dari dasar sampai permukaan. CEKIDOT!

Bagaimana cara membuat file archive dalam linux?

Apakah Anda tau apa itu Tar dalam Linux? Tar adalah perintah untuk membuat file archive dalam platform Unix. Dengan kata lain, Tar sama dengan Zip atau Rar dalam Windows. Dalam bash script (terminal linux), terdapat beberapa ketentuan untuk membuat file Tar. Berikut adalah cara-caranya. CEKIDOT!

Jumat, 28 November 2014

Shared Memory


     Shared memory adalah memori yang dapat diakses secara bersamaan oleh beberapa program  dengan maksud untuk menyediakan komunikasi di antara mereka atau menghindari salinan yang berlebihan. Tergantung pada konteks, program dapat berjalan pada satu prosesor atau beberapa prosesor yang terpisah.     Merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh pembuat program. Pada metode ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara efektif.

     Ada 2 cara untuk menggunakan shared memory, yaitu :
  • Menggunakan mmap()
  • Menggunakan shmget() -> lebih populer

Langkah - langkah membuat shared memory :

  1. Membuat segment di memory dengan shmget() 
  2. Mendaftarkan (attach) segment ke data space dari proses dengan shmat() 
  3. Tulis/Baca dari memori 
  4. Detach segment dari data space dari proses dengan shmdt()
Penjelasan fungsi :

1. shmget();
          System call untuk membuat suatu segmen shared memory

#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

2. shmat();
           System call untuk mendaftarkan segment shared memory ke dalam data space dari suatu proses

#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

3. shmdt();
            System call untuk melepaskan shared memory segment dari data space dari proses.

#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

4. shmctl();
           System call untuk mengetahui atau merubah informasi yang berkaitan dgn suatu shared memory

#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 untuk IPC

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

Deadlock

     Deadlock adalah keadaan di mana dua atau lebih proses tidak dapat berjalan karena saling menunggu resources dari yang lainnya.

     Deadlock mungkin terjadi karena :
  • 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.
     Sedangkan penyebab deadlock adalah :
  1. Circular wait 
          Circular wait adalah situasi di mana dua atau lebih proses saling menunggu hasil output dari masing - masing proses. Misal P1 menunggu data dari P2 sedangkan P2 juga menunggu data dari P1. Maka dari itu semua proses tidak bisa berjalan.


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

Semaphore


      Semaphore kurang lebih sama seperti signal. Semaphore adalah sebuah cara komunikasi antar proses dengan menggunakan nilai angka (integer) sebagai signalnya. Semaphore memiliki beberapa kemungkinan nilai :

  1. Inisialisasi, awalnya diisi dengan bilangan integer positif
  2. SemWait mengurangi nilai semaphore dan jika hasilnya negatif maka proses yang memanggil akan diblok
  3. SemSignal, menambah nilai semaphore dan jika hasilnya lebih dari 0, maka proses yang memanggil SemWait bisa masuk ke ready queue lagi

Mutex (Mutual Exclusion)


     Mutex adalah sesuatu yang dibutuhkan untuk memastikan tidak ada proses lain yang menjalankan critical section ketika ada proses lain yang sedang menjalankan. Jadi secara singkat, Mutex bisa dianggap sebagai kunci (lock) dari suatu proses agar tidak disela oleh proses lain.

     Mekanisme dari mutex sendiri adalah :

  • Menggunakan hardware (disable/enable interrupt)
  • Menggunakan software (software object / variabel)
     Berikut adalah contoh penggunaannya :

     mutex_lock(kunci);
     scanf (variabel);
     printf(variabel);
     mutex_unlock(kunci);

     mutex_lock(kunci) adalah fungsi untuk mengaktifkan mutex dengan nama variabel kunci, dan kemudian kita bisa menuliskan kode program yang tidak ingin disela tersebut (disebut dengan critical section). Lalu setelah itu kita memanggil mutex_unclok(kunci) yaitu untuk menonaktifkan mutex dengan nama variabel kunci.

     Kesalahan penggunaan pada mutex dapat mengakibatkan :
  • Starvartion : yaitu situasi di mana suatu proses tidak pernah dijalankan oleh prosesor
  • Deadlock : yaitu situasi di mana dua atau lebih proses tidak dapat berjalan karena saling menunggu resources dari masing-masing proses