You are on page 1of 9

SOAL PENDAHULUAN

1. Jelaskan istilah berikut :


a. PID
b. PPID
c. Child Process
d. Parent Process
e. Zombie Process
2. Jelaskan apa yang anda ketahui mengenai daemon kemudian jabarkan tahapan apa
saja yang diperlukan dalam membuat suatu daemon. Sertakan juga source code
sebuah daemon berdasarkan tahapan yang anda jabarkan !
3. Sebutkan perbedaan named pipe dan unnamed pipe, berikan contoh sederhananya !
4. Jelaskan apa itu Process dan IPC, jelaskan juga hubungan diantara keduanya!
5. Berikan pengertian mengenai istilah – istilah berikut dan sertakan pula ilustrasi dari
masing – masing istilah sehingga dapat terlihat perbedaan diantaranya!
a. Shared Memory
b. Pipes
c. Message Queue
d. Semaphore
e. Socket
6. Gambarkan dan jelaskan alur dari proses pada sistem operasi!
7. Proses terdiri atas banyak operasi / fungsi, sebutkan dan jelaskan masing – masing
operasi / fungsi tersebut!
8. Jelaskan alur Message Queue berikut:

alur message queue

9. Jelaskan masing – masing operator dalam fungsi shared memory berikut:


int shmctl(int shmid, int cmd, struct shmid_ds *buf);
10. Jelaskan masing – masing operator dalam fungsi semaphore berikut :
int semctl(int semid, int semnum, int cmd, union semun arg);
JAWABAN

1. Penjelesan istilah :
a. PID : merupakan singkatan daripada Process Identifier. PID ini merupakan
digit angka yang digunakan oleh kernel suatu sistem sebagai acuan untuk
sebuah proses yang berlangsung. Maksudnya, PID ini merupakan “penunjuk”
bagi kernel, yang nantinya bisa digunakan sebagai parameter untuk mengutak-
atik proses tersebut.
b. PPID : merupakan singkatan daripada Parent Process Identifier. Sama halnya
dengan PID, tetapi PPID ini tidak merujuk kepada proses tersebut, melainkan
merujuk kepada proses induk (parent process) suatu proses.
c. Child Process : merupakan istilah untuk sebuah proses yang dibuat oleh
sebuah proses pendahulunya. Pada Unix, child process dibentuk dengan
menggunakan command fork(), sehingga child process pun memiliki berbagai
“sifat” yang sama dengan proses induknya.
d. Parent Process : merupakan istilah untuk sebuah proses yang telah membuat
sebuah proses lainnya atau lebih. Sebuah proses dikategorikan sebagai parent
apabila proses tersebut melakukan system call fork(), dan hasil daripada
system call tersebut adalah sebuah child process. Perlu diingat, sebuah parent
process dapat memiliki banyak child process, tetapi sebuah child process
hanya dapat memiliki sebuah parent process.
e. Zombie Process : merupakan istilah untuk sebuah proses yang telah selesai
tugasnya (telah selesai dijalankan) tetapi masih terdaftar atau memiliki entry
pada process table. Entry ini masih diperlukan agar sistem dapat membaca exit
status daripada process. Untuk menghentikannya, maka harus dikirim sinyal
SIGCHILD ke parent process secara manual.

2. Daemon merupakan background prosess yang didesain agar dapat menjalankan


suatu proses secara otomatis kerena tidak memiliki terminal pengontrol, dengan
sedikit atau tanpa hubungan lansung dengan pengguna (User Interface). Biasanya
daemon bekerja pada waktu yang sangat lama dengan fungsi mendengarkan dan
menunggu request dan menjalankan responnya berupa proses. Misalnya httpd,
daemon apache web server, yakni daemon yang menagani protocol http, httpd
tadi, yang merupakan program yang menangani permintaan http (web), mengirim
isi situs web.
Tahapan membuat daemon yang selanjutnya disebut daemonizing adalah sebagai
berikut:
a. Forking dan Pembunuhan Proses Induk
Langkah pertama dalam pembuatan daemon adalah menspawn proses menjadi
induk dan anak dengan melakukan forking, kemudian mematikan proses
induk. Proses induk yang mati akan membuat sistem operasi mengira bahwa
proses telah selesai sehingga akan kembali ke terminal user. Dari langkah ini
kita telah mendapatkan satu proses yang hampir bekerja di background, yaitu
proses anak yang melanjutkan program setelah kita membunuh induknya.
Contoh source code untuk forking:
pid_t pid;
//Fork off the parent process
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}

//If we got a good PID, then we can exit the parent


process
if (pid > 0) {
exit(EXIT_SUCCESS);
}

b. Membuat Proses Bekerja Secara Independen


Daemon harus bekerja secara independen dari proses lain, termasuk proses
yang menjalankannya. Langkah ini dapat dilakukan dengan cara memanggil
fungsi setsid(), sehingga proses akan mendapatkan session ID yang baru.
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log any failure */
exit(EXIT_FAILURE);
}

c. Menutup Standard I/O Descriptor yang diwarisi


Standard I/O descriptor dan descriptor yang diwarisi dari proses induk harus
ditutup untuk mencegah intervensi dari user serta untuk pengamanan. Ada tiga
jenis standar I/O descriptor, yaitu standard input (STDIN), standard output
(STDOUT), dan standard error (STDERR).
// Close out the standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

d. Melakukan Masking pada File Creation


Sebagian besar daemon bekerja dalam previlege super user. Untuk alasan
keamanan, daemon harus memproteksi setiap file yang dibuat. Fungsi
umask() akan mencegah file previleges yang tidak aman dalam setiap
pembuatan file. Misalnya: 2 umask (027) akan membatasi mode
pembuatan file ke 750 (komplemen dari 027)
//Change the file mode mask
umask(0);
e. Running Directory
Direktori kerja suatu daemon harus berada pada direktori yang selalu hidup.
Bisa saja pada saat starting, working directory berada pada user home. Karena
daemon bekerja hingga sistem reboot, maka file system user directory tidak
akan pernah bisa di unmount.
f. Mendengarkan Signal
Tugas utama dari sebuah daemon sebenarnya adalah mendengarkan request.
Maka di dalam daemon harus terdapat pendengar signal yang akan merespon
ketika daemon dikirimi signal tertentu. Hal ini dapat dilakukan dengan
memanggil fungsi signal() untuk menginstall sebuah signal listener. Perlu
diketahui bahwa signal 15 (SIGTERM) dan signal 9 (SIGKILL) tidak dapat
ditangkap oleh signal handler.
g. Logging
Karena daemon tidak memiliki terminal pengontrol, maka satu-satunya cara
untuk mengetahui apa yang terjadi dengan daemon tersebut adalah dengan
logging. Logging digunakan untuk menulis suatu pesan dari daemon atau
untuk mendebug kesalahan yang terjadi. Logging harus banyak dilakukan oleh
daemon untuk menyediakan informasi sebaik-baiknya baik bagi user maupun
programmer.

3. Named Pipe: merupakan istilah yang digunakan pada pemrograman sistem Unix,
dan bersifat First-in, First-out (FIFO). Named Pipe merupakan salah satu metode
dalam komunikasi antar proses. Named pipe bersifat permanen, sehingga harus
dihapus ketika sudah tidak diperlukan. Contoh named pipe berikut adalah
membuat pipe untuk mengatur gzip untuk mengkompres apapun yang di-pipe
padanya :

mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz

Anonymous Pipe: merupakan istilah yang digunakan dalam pemrograman sistem


Unix, dan bersifat FIFO. Anonymous pipe merupakan “bahasa” yang cukup
primitif. Pipe ini digunakan pada proses yang akan membuat proses baru, dimana
proses baru tersebut mewarisi akhir daripada pipe tersebut. Contohnya adalah
sebagai berikut:

ls –al | awk

4. Proses merupakan sebuah program yang sedang dieksekusi yang mencakup


program counter, register, dan variabel di dalamnya. Proses tidak hanya sekedar
suatu kode program (text section), melainkan meliputi beberapa aktivitas yang
bersangkutan seperti program counter dan stack. Sebuah proses juga melibatkan
stack yang berisi data sementara (parameter fungsi/metode, return address, dan
variabel lokal) dan data section yang menyimpan variabel-variabel global.
Inter-Process Communication (IPC) atau Komunikasi antar proses adalah cara
atau mekanisme pertukaran data antara satu proses dengan proses lainnya, baik itu
proses yang berada di dalam komputer yang sama, atau komputer jarak jauh yang
terhubung melalui jaringan. IPC terdiri atas protokol yang menjamin sebuah
respons dari sebuah permintaan.
Proses yang bersifat simultan (concurrent) dijalankan pada sistem operasi dapat
dibedakaan menjadi yaitu proses independent dan proses kooperatif. Suatu proses
dikatakan independen apabila proses tersebut tidak dapat terpengaruh atau
dipengaruhi oleh proses lain yang sedang dijalankan pada sistem. Berarti, semua
proses yang tidak membagi data apa pun (baik sementara/ tetap) dengan proses
lain adalah independent. Sedangkan proses kooperatif adalah proses yang dapat
dipengaruhi atau pun terpengaruhi oleh proses lain yang sedang dijalankan dalam
sistem. Dengan kata lain, proses dikatakan kooperatif bila proses dapat membagi
datanya dengan proses lain.
IPC memiliki beberapa macam kategori, antara lain pipe, fifo, shared memory,
mapped memory, message queue, semaphore, socket, dan RPC.

5. Shared Memory: merupakan istilah untuk memori yang dialokasikan untuk


beberapa proses, agar dapat diakses secara bersamaan. Maksudnya, proses dapat
melakukan komunikasi dengan proses lainnya lewat READ dan WRITE pada
memori tersebut

Pipe: merupakan cara komunikasi sekuensial atau bertahap antarproses. Artinya


tiap output sebuah proses di depan tanda pipe, akan menjadi input untuk proses
yang berada di belakang tanda pipe.
Message Queue: merupakan istilah dalam software engineering untuk
komunikasi antarproses. Sistem ini menggunakan prinsip FIFO, yang merupakan
antrian. Message Queue juga dapat berbentuk struktur data linked-list dalam
kernel.

Semaphore: merupakan istilah untuk sebuah variabel peubah yang terlindungi,


dan memiliki hak mengendalikan akses daripada beberapa proses.

Socket:
merupakan
istilah untuk
endpoint dari
komunikasi
antarproses dalam sebuah server. Socket menggunakan arsip pada sistem untuk
tempat penyimpanan alamat sementara.

6. Alur suatu proses dapat digambarkan melalui diagram sebagai berikut :

Dari diagram di atas, terdapat keadaan-keadaan dimana proses tersebut berada


(status proses). Proses – proses yang dikelola oleh sistem operasi akan melalui
serangkaian keadaan yang merupakan bagian dari aktivitasnya. Keadaan proses ini
disebut sebagai status proses, yang terdiri dari:
Status New yaitu status dimana proses sedang dibuat.
Status Ready yaitu status dimana proses siap dieksekusi tetapi CPU mengerjakan
proses lain.
Status Waiting yaitu status dimana proses sedang menunggu suatu kejadian
menunggu operasi I/O selesai, menunggu signal dari proses lain, tersedianya
Status Running yaitu status dimana proses dieksekusi. Pada status ini instruksi –
instruksi pada proses.
Status Terminated yaitu status dimana proses diakhiri.
Sebuah proses menjadi Waiting karena proses tersebut menunggu suatu kejadian
tertentu seperti selesainya operasi I/O, misalnya perekaman data ke disk karena
pada saat perekaman dilakukan proses sedang tidak menggunakan CPU maka
scheduler segera mengalokasikan CPU ke proses lain yang telah Ready. Apabila
kejadian yang ditunggu telah selesai maka proses dipindahkan kembali ke antrian
Ready dan siap dijadwalkan.
Sebuah proses dari keadaan Running dapat menjadi Ready kembali karena
diinterupsi oleh proses lain. Interupsi dapat disebabkan karena jatah waktu yang
diberikan CPU ke proses tersebut telah habis sementara proses masih memerlukan
sejumlah waktu untuk selesai. Jatah waktu yang diberikan sering disebut sebagai
quantum time (time slice) yang dapat berkisar antara 1 hingga 100 milidetik.
Interupsi suatu proses terkait erat dengan strategi penjadwalan proses yang
digunakan sistem operasi yaitu strategi preemptive dimana suatu proses dapat saja
disela oleh proses lain pada saat Running.
7. fork():
merupakan perintah untuk membuat sebuah proses daripada proses lain yang
memiliki banyak kesamaan dengan proses yang menggunakan fungsi ini.
ps:
merupakan perintah untuk menampilkan semua proses yang sedang berjalan
kill:
perintah ini dignakan untuk mematikan sebuah proses yang diinginkan. Perintah
ini diikuti dengan PID proses yang ingin dihentikan
top:
merupakan perintah untuk menampilkan proses-proses teratas yang menggunakan
banyak memori, dan di-refresh terus menerus.
fg:
merupakan perintah untuk mengembalikan proses yang berada di belakang layar
ke depan (foreground)
bg:
merupakan perintah untuk menaruh proses yang terletak di foreground ke
belakang layar (background)
nohup:
merupakan perintah agar sebuah proses kebal dari sinyal HANG-UP
nice:
merupakan perintah yang berguna untuk mengatur prioritas-prioritas daripada
proses yang sedang berjalan.
wait:
merupakan perintah untuk menginstruksikan agar proses menunggu hinggas
semua proses pada background selesai.
exit(status):
mengakhiri proses dan mengembalikan nilai daripada status
8. Alur message queue dalam diagram pada soal mengilustrasikan tentang
bagaimana mekanisme dasar dari message queue itu sendiri.
Diagram tersebut menjelaskan bahwa ketika pesan tersebut masuk akan langsung
dikirim ke suatu tempat dan dilakukan mekanisme queue itu sendiri (first in first
out), akan tetapi mekanisme tersebut sedikit dimodifikasi, sehingga pada alur
tersebut pesan terkhir akan langsung dikirim ke queue paling bawah. Pada
akhirnya output yang keluar akan sama seperti pada mekanisme queue biasa.
9. fungsi shmctl() merupakan sebuah operasi yang diperintah oleh cmd pada sebauh
shared memory dimana PIDnya berada dalam fungsi shmid. ID daripada shared
memory sendiri akan di-return oleh fungsi shmget.

fungsi shmid merupakan identifier daripada shared memory tempat proses sedang
berlangsung.

fungsi cmd merupakan operasi kontrol pada shared memory yang akan dijalankan.
Fungsi ini terdiri atas:
 IPC_STAT: digunakan untuk mendapatkan status daripada shared memory
yang teridentifikasi pada parameter shmid.
 IPC_SET: digunakan untuk memberi nilai untuk field-field dalam struktur
data shmid_ds, bersama dengan parameter shmid yang berkorespondensi
dengan nilai yang ditunjukkan oleh parameter buf.
 IPC_RMID: digunakan untuk menghapus ID shared memory (oleh shmid),
parameter shmid, maupun struktur data shmid_ds

fungsi buf merupakan pointer menuju ke struktur data shmid_ds, dan telah
didefinisikan dalam header sys/shm.h

10. int semctl(int semid, int semnum, int cmd, union


semun arg);
Semctl : mengubah akses dan beberapa setting perintah semaphore. Perintah ini
dianalogikan menuju msgctl system calls yang digunakan untuk operasi pada
message queues.
Argumen pertama dari semctl(int semid, int semnum,…..) adalah sebuah nilai
kunci / paramater (untuk menganalisa / mengakses suatu semaphore pada perintah
semget).
Argumen berikutnya semctl(….,union semun arg) adalah nomor dari semaphore
yang operasinya mengarah ke target yang diinginkan. Pada dasarnya, perintah ini
dapat dianggap sebagai indeks untuk set dari semaphore, dengan semaphore awal
diwakili oleh nilai nol (0). semctl(…, int cmd…..) merupakan perintah yang akan
dilakukan terhadap set.

You might also like