22.11.4938 Azkazhafifhidayat Praktikum4
22.11.4938 Azkazhafifhidayat Praktikum4
(REPORT OF ACTIVITY)
SISTEM OPERASI
INFORMATIKA
Oleh:
NIM : 22.11.4933
Materi:
Operasi Input/Output
PRODI S1 –INFORMATIKA
FAKULTAS ILMU KOMPUTER UNIVERSITAS AMIKOM
YOGYAKARTATAHUN 2022
OPERASI INPUT & OUTPUT
A. Tuju
an
B. Peralat an
Praktikum
C. Prakti
kum
Paraf Dosen /
Asisten Praktikum
1. ANALISA PERCOBAAN 1: MELIHAT PROSES PARENT DAN
PROSES CHILD
Perintah tersebut untuk melihat proses parent dan proses child pada fork().
Output yang dihasilkan adalah program akan melakukan perulangan output sebanyak
tiga kali karena i dimulai dari 0 dan kurang dari 3 sehingga (0, 1, 2 menjadi tiga
ouput).
Output yang dihasilkan:
Program diatas adalah program yang bertujuan untuk melihat proses parent
dan proses child. Salah satu cara melihatnya yaitu dengan melihat pid (process
identifier) dan ppid (parent process identifier) dari proses. Untuk mendapatkan nilai
pid dan ppid, maka menggunakan fungsi getpid() dan getppid() yang dideklarasikan
pada unistd.h. Kedua fungsi tersebut akan mengembalikan nilai bertipe pid_t yang
merupakan sebuah type khusus untuk process id yang ekuivalen dengan integer
Dapat dilihat bahwa pada percobaan ini, yang merupakan child process
adalah proses dengan pid 118462, sedangkan yang merupakan parent process
adalah proses dengan pid 118461. x berfungsi untuk menghitung berapa kali loop
telah terjadi. Jika dilihat dari urutan cetakannya, dapat dlihat bahwa walaupun
mereka melakukan proses yang sama, parent process selalu berjalan terlebih dahulu
sebelum child process. Program ini akan melakukan loop secara terus menerus
tanpa henti. Untuk menghentikannya, maka harus dihentikan secara paksa dengan
interupsi menggunakan ctrl+c.
3. Percobaan 3 : Membuat dua proses sebanyak lima kali
Program ini hampir sama dengan program fork1, hanya saja bedanya pada
program ini loop yang dilakukan dibatasi hingga 5 kali saja, tidak infinite. Pada
percobaan ini, dapat dilihat bahwa yang merupakan child process adalah proses
dengan pid 118496, sedangkan yang merupakan parent process adalah proses
dengan pid 118495. Selain itu, disini terbukti kembali bahwa walaupun mereka
melakukan proses yang sama, parent process selalu berjalan terlebih dahulu
sebelum child process jika dilihat dari urutan cetakannya.
Dari baris program dan output di atas dapat dilihat bahwa program akan
memeriksa kondisi child_pid dimana child_pid adalah nomor pid id proses dan jika
kondisi memenuhi maka proses akan dieksekusi dan jika kondisi tidak memenuhi
maka akan muncul sebuah output yaitu "The fork system call failed to create a new
process”
Jika pada program-program sebelumnya proses child dan parent menjalankan baris
yang sama, maka pada program ini kedua proses tersebut menjalankan baris yang
berbeda. Hal ini dapat dilakukan dengan pengondisian if...else pada hasil
pengembalian system call fork. Pada child process, fork akan mengembalikan nilai 0,
sedangkan pada parent process, fork akan mengembalikan nilai bilangan positif
berupa pid dari process child. Namun, jika process child, gagal terbentuk, fork akan
mengembalikan nilai -1.
5. Percobaan 5 : System call fork/exec dan wait mengeksekusi
program bernama ls, menggunakan file executable /bin/ls
dengan satu parameter –l yang ekuivalen dengan ls –l
Dari baris program dan output di atas dapat dilihat bahwa program akan
memeriksa kondisi child_pid dimana child_pid adalah nomor pid id proses. Dan jika
kondisi pada if pertama memenuhi maka output akan menampilkan direktori beserta
waktu dan user pengguna.
Program ini akan melakukan forking dan proses child akan menjalankan
perintah ls -l. Hal ini dapat dilakukan dengan menjalankan system call execl pada
proses child. Execl merupakan system call yang berfungsi untuk mengeksekusi file.
Pada kasus ini, child process mengeksekusi perintah ls yang filenya berada di /bin/ls
dengan argumen -l dan /home. Fungsi execl dapat dimasukkan banyak paremeter.
Namun, parameter utama yang harus dimasukkan ada 3, yaitu path dari file yang
akan dieksekusi, argumen perintah (bisa lebih dari satu), dan NULL (sebagai
penanda akhiran dari argumen). System call execl akan mengganti process image
sebelumnya dengan process image yang baru. Sehingga jika execl berhasil
dijalankan oleh proses child dan diterminasi, proses child tersebut juga akan ikut
diterminasi. Namun jika execl gagal dijalankan, maka proses child akan tetap
berjalan. Itulah mengapa baris proses child dibawah execl pada percobaan diatas
tidak dijalankan.
Dari baris program dan output di atas dapat dilihat bahwa program akan
memeriksa kondisi child_pid dimana child_pid adalah nomor pid id proses. Dan jika
kondisi pada if pertama memenuhi maka output akan menampilkan file fork3.cpp dan
melanjutkan pemeriksaan pada kondisi if lalu dieksekusi untuk ditampilkan pada
output.
Pada program ini, proses child mengeksekusi program lain (fork3) dengan
menggunakan system call execl. Pada percobaan diatas, proses dengan pid 118714
adalah proses parent, sedangkan proses dengan pid 118715 adalah proses child.
Namun, saat proses child menjalankan execl dan mengeksekusi fork3, proses
dengan pid 118715 pada program fork3 akan menjadi proses parent, dan ia membuat
proses child baru dengan pid 118714. Selain itu, system calls execl diberi argumen
“goose”, itulah mengapa pada saat dijalankan ps, proses fork3 bernama goose.