Akhirnya setelah beberapa hari tidak mengupdate blog ini, saya menyempatkan diri di tengah kesibukkan untuk berbagi kepada pembaca,
Concurency
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