Senin, 24 November 2014

Akhirnya setelah beberapa hari tidak mengupdate blog ini, saya menyempatkan diri di tengah kesibukkan untuk berbagi kepada pembaca, 


Concurency

-Situasi di mana dua atau lebih sesuatu terjadi saat waktu yang sama.(Merriam Webster)

Masalah yang sering dihadapi :
-Bahayanya berbagai global resources
-Sulitnya OS mengatur alokasi resource
-Sulitnya mencari kesalahan programming

Istilah dalam Concurrency

Atomic Operation
*Fungsi (action) yang diimplementasikan sebagai rangkaian instruksi yang 'tampaknya' tidak dapat dibagi
*Dieksekusi semua atau tidak sama sekali
*Bagian program yang tidak dapat di-interrupt

Critical Section
*Bagian tertentu dari code yang membutuhkan akses ke shared resources
*Tidak boleh dijalankan ketika ada proses lain yang sedang menjalankan bagian tersebut

Race Condition

*Hasil eksekusi dari beberapa thread/proses yang tergantung dari siapa yang berjalan duluan



Mutual Exclusion (Mutex)

Illustrasi

Mutual Exclusion merupakan sesuatu yang dibutuhkan untuk memastikan tidak ada proses lain yang menjalankan critical section, ketika ada proses yang sedang menjalankan.

Singkatnya :
*KUNCI/LOCK
Mekanisme :
-Menggunakan hardware (disable/enable interrupt)
-Menggunakan software (software object/variable)

Kesalahan penggunaan dapat menyebabkan :

-Starvation
Situasi dimana suatu proses tidak pernah dijalankan oleh prosesor

-Deadlock
Situasi dimana dua atau lebih proses tidak dapat berjalan karena saling menunggu resource dari yang lainnya

Semaphore 

Illustrasi

*Kurang/lebih sama dengan sinyal
*Memiliki beberapa kemungkinan nilai
*Awalnya diisi dengan bilangan integer non-negatif
*SemWait mengurangi nilai semaphore dan jika hasilnya minus, maka proses yang memanggil akan diblok
*SemSignal menambah nilai semaphore dan hasilnya lebih dari 0, maka proses yang memanggil semWait bisa masuk ke ready queue lagi.



File Descriptor :
*Sebuah integer yang digunakan sebagai identifier dari file-file yang dibuka oleh setiap proses
*File Descriptor Standar :
*0 → stdin
*1 → stdout
*2 → stderr

System Call
*Cara program untuk memanggil fungsi-fungsi yang disediakan oleh kernel dari sistem operasi
*Contoh :
*open()
*close()
*fork()
*dll.

Umask
*umask / mode_t umask(mode_t mask)
*Mendefinisikan mask untuk file permission yang dibuat oleh suatu proses
*Bisa berupa command line program, bisa berupa system call
*Contoh :
*umask(S_IWGRP | S_IWOTH)

System Call open()
*#include <sys/types.h>
*#include <sys/stat.h>
*#include <fcntl.h>
*int open(const char *pathname, int flags).
*int open(const char *pathname, int flags, mode_t mode);

close()
*Menutup file yang sudah dibuka
*Definisi :
*#include <unistd.h>
*int close(int fd);

read() & write()
*Definisi read() :
*#include <unistd.h>
*ssize_t read(int fd, void *buf, size_t count);
*Definisi write() :
*#include <unistd.h>
*ssize_t write(int fd, const void *buf, size_t count);

Inter Process Communication
(IPC)
*Mekanisme komunikasi antar proses yang berjalan pada satu komputer.
*Ada 4 macam, yaitu :
*Pipe
*Message Queues
*Shared Memory
*Semaphores

Unnamed Pipe
*Contoh Unnamed Pipe :
*Buat pipe-nya :
*int file_descriptors[2];
*pipe(file_descriptors);
*Buat process baru :
*pid_t spawned_process_pid = fork();
*Process anak menulis pesan :
*#define INPUT 0
*#define OUTPUT 1
*close(file_descriptors[INPUT]);
*write(file_descriptors[OUTPUT], “test data”, strlen(“test data”));


*Process parent membaca pesan
*close(file_descriptors[OUTPUT]);
*returned_count = read(file_descriptors[INPUT], buf, sizeof(buf));

Named Pipes

*Digunakan untuk 2 proses yang berjalan sendiri-sendiri
*Hanya bisa digunakan pada proses-proses yang menggunakan filesystem yang sama
*Membutuhkan file yang dibuat terlebih dahulu dengan menggunakan mknod
*Contoh :
*mknod pipe_file p


Sekian update-an kali ini selamat membaca.

0 komentar:

Posting Komentar