Praktikum 7 - Unix System Call dan Manajemen Memory
TUJUAN BELAJAR :
Setelah mempelajari materi dalam bab ini, mahasiswa diharpkan mampu :
- Menggunakan system call fork, wait dan excel pada Linux.
- Menggunakan perintah - perintah untuk manajemen memory.
DASAR TEORI :
UNIX SYSTEM CALL
Pada praktikum ini akan dilakukan percobaan menggunakan system call yang berhubungan dengan proses pada sistem operasi UNIX yang biasa disebut dengan UNIX System Call, yaitu system call fork, exel, dan wait. Pada percobaan yang dilakukan akan dibuat program yang didalamanya terdapat fungsi system call. Untuk menjalankannya pada Linux dapat menggunakan compiler g++.
- SYSTEM CALL FORK
System call fork adalah suatu system call yang membuat suatu proses baru pada sistem operasi UNIX. Pada percobaan ini menggunakan mesin :inux dan beberapa program yang berisi system call fork().
Bila suatu program berisi sebuah fungsi fork(), eksekusi dari program menghasilkan eksekusi dua proses. Satu proses dubuat untuk memulai eksekusi program. Bila system call fork() dieksekusi,proses lain dibuat. Proses asal tersebut proses parent dan proses kedua disebut proses child. Proses child merupakan duplikat dari proses parent. Kedua proses melanjutkan eksekusi dari titik dimana system call fork() menghasilkan eksekusi pada program utama. Karena UNIX adalah system operasi time sharing, fua proses tersebut dapat mengeksekusi secara konkuren.
Nilai yang dihasilkan oleh fork() disimpan dalam variabel bertipe pid_t, yang berupa nilai integer. Karena nilai dari variable ini tidak digunakan, maka hasiil fork() dapat diabaikan.
- Untuk kill proses gunakan Ctrl + C.
- Untuk dokumentasi fork() dapat dilihat dengan ketikkan man 2 fork.
- Untuk melihat id dari proses, gunakan system callgetpid().
- Untuk melihat dokumentasdi dari getpid(), ketikkan man 2 getpid.
Perbedaan anatara proses parent dan proses child :
- Mempunyai PID yang berbeda.
- Pada proses parent, fork() menghasilkan PID dari proses child jika sebuah proses child dibuat.
- Pada proses child, fork() selalu menghasilkan 0.
- Membedakan copy dari semua data, termasuk variable dengan current value dan stack.
- Membedakan program counter (PC) yang menunjukkan eksekusi berikutnya meskipun awalnya keduanya mempunyai nilai yang sama tetapi setelah itu berbeda.
- Stelah fork, kedua proses tersebut tidak menggunakan variable bersama.
- PID proses child yang baru ke proses parent, hal ini sama dengan memberitahukan proses parent nama dari child-nya.
- 0 : menunjukkan proses child
- -l : 1 jika terjadi error,fork() gagal karena proses baru tidak dapat dibuat.
- SYSTEM CALL WAIT
System call wait menyebabkan proses menunggu sinyal (menunggu sampai sembarang tipe sinyal diterima dari sembarang proses). Biasanya digunakan oleh proses parent untuk menunggu sinyal dari sistem operasi ke parent bila child diterminasi. System call wait menghasilkan PID dari proses yang mengirimi sinyal. Untuk melihat dokumentasi wait gunakan perintah man 2 wait.
- SYSTEM CALL EXECL
Misalnya kita ingin proses baru mengerjakan sesuatu yang berbeda dari proses parent, sebutlah menjalankan program yang berbeda. Sistem call execl meletakkan program executable baru ke memory dan mengasosiasikannya dengan proses saat itu. Dengan kata lain, mengubah segala sesuatunya sehingga program mulai mengeksekusi dari file yang berbeda.
MANAJEMEN MEMORY
Linux mengimplementasikan sistem virtual memory demand-paged. Proses mempunya besar memoru virtual yang besar (4 gigabyte). Pada virtual memory dilakukan transfer pager antara disk dan memory disk.
Jika tidak terdapat cukup memory fisik, kernel melakukan swapping beberapa page lama ke disk. DIsk drive adalah perangkat mekanik yang membaca dan menulis ke disk yang lebih lamabr dibandingkan mengakses memory fisik. JIka memory total page lebih dari memory fisik yang tersedia, kernl lebih banyak melakukan swapping dibandingkan eksekusi kode program, sehingga terjadi thrashing dan mengurangi utilitas.
Jika memori fisik ekstra tidak digunakan, kernal meletakkan kode program sebgai disk buffer cache. Disk buffer menyimpan data disk yang diakses di memory; jika data yang sama dibutuhkan lagi dapat dengan cepat diambil dari cache.
Pertama kali sistem melakukan booting, ROM BIOS membentuk memory test seperti terlihat berikut :
ROM BIOS (C) 1990
008192 KB OK WAIT.......
Kemudian informasi penting ditampilkan selama proses booting pada linux seperti terlihat berikut :
Memory: 7100k/8192k available (464k
kernel code, 384k reserved, 244k data) ...
Adding Swap: 19464k swap-space
Informasi diatas menampilkan jumlah RAM tersedia setelah kernel di load ke memory (dalam hal ini 7100K dari 8192K). Jika ingin melihat pesan saat booting kernel yang terlalu cepat dibaca dapat dilihat kembali dengan perintah dmesg. Setiap Linux dijalankan, perintah free digunakan untuk menampilkan total memory yang tersedia. Atau menggunakan cat /proc/meminfo. Memory fisik dan ruang swap ditampilkan disini. Contoh output pada sistem :
total used free shared buffers
Mem: 7096 52161880 2428 2800
Swap:194640 19464
Informasi ditampilkan dalam kilobyte(1024 byte). Memory "total" adalah jumlah tersedia setelah load kernel. Memory digunakan untuk proses atau disk buffering sebagai "used". Memory yang sedang tidak digunakan ditampilkan pada kolom "free". Memory total sama dengan jumlah kolom "used" dan "free". Memory diindikasikan "shared" yaitu beberapa banyak memory yang digunakan lebih dari satu proses. Program seperti shell mermpunyai lebih dari satu proses yang berjalan. Kode executable read-only dan dapat disharing oleh semua proses yang berjalan pada shell. Kolom "buffer" menampilkan beberapa banyak memory digunakan untuk disk buffering.
Perintah free juga menunjukkan dengan jelas bagaimana swap space dilakukan dan berapa banyak swapping yang terjadi.
Percobaan berikut untuk mengetahui manajemen memory:
1. Pada saat bootup, dengan satu user log in, dengan perintah free sistem melaporkan berikut :
2. Situasi berubah setelah menjalankan perintah yang membaca data dari disk (commandls -IR /.)
Disk buffer bertambah menjadi 2 MB. Hal ini berakibat pula pada kolom "used" dan memory "free" juga berkurang.
Perintah top dan ps - u juga sangat berguna untuk menunjukkan bagaimana penggunaan memory berubah secara dinamis dan bagaimana proses individu menggunakan memory. Contoh tampilannya :
Jawablah pertanyaan - pertanyaan berikut ini :
1. Apa yang dimaksud dengan system call ?
System call merupakan penyedia antarmuka dari pelayanan-pelayanan yang tersedia dengan system operasi. Umumnya system call menggunakan bahasa C dan C++, meskipuntugas-tugas seperti hardware yang harus diakses langsung, maka menggunakan bahasa assembly.
2. Apa yang dimaksud dengan sistem call fork(), execl() dan wait(). Jawablah dengan menggunakan perintah man ( contoh : man 2 fork, man 2 execl, dan man 2 wait) ?
Sistem call fork() merupakan system call yang membuat proses baru pada sistem operasi UNIX. Tampilan dari sistem call fork() seperti gambar dibawah ini :
Sistem call wait() merupakan suatu sistem call yang menyebabkan proseFORs menunggu sinyal (menunggu sampai sembarang tipe sinyal dari sembaran proses). Biasanya digunakan oleh proses parent untuk menunggu sinyal dari sistem operasi ke parent bila child diterminasi.
Sistem call execl() merupakan suatu sistem call yang meletakkan program executable baru ke memory dan mengasosiasikannya dengan proses saat itu.
3. Apa yang dimaksud dengan sistem virtual memory, proses swapping dan buffer cache pada management memory ?
Sistem virual memory merupakan suatu teknik utnuk memisahkan antara memori logis dan memori fisiknya. Memori logis berupa keseluruhan halaman dari suatu program. Tanpa adanya memori virtual maka memori logis akan langsung dibawa ke memori fisik ( memori utama). Memori virtual ini akan melakukan pemisahan dengan menaruh memory logis ke secondary storage dan hanya membawa halaman yang diperlukan ke memori utama (memori fisik).
4. Apa yang dimaksud dengan perintah free dan cat /proc/meminfo ?
- Free merupakan perintah yang digunakan untuk mengetahui total memroi yang digunakan dalam proses. Dakam perintah free ditampilkan total kapasitas memori, memori yang terpakai, yang tidak dipakai, yang dibagi, buffer, cache dan juga swap.
- Cat /proc/peminfo merupakan perintah yang digunakan untuk mengetahui isi dari meminfo yang nantinya akan ditampilkan.
5. Apa yang dimaksud perintah ps
Perintah ps merupakan perintah yang digunakan untuk menampilkan informasi proses yang sedang berjalan termasuk juga nomor PID dari proses tersebut.
HASIL PERCOBAAN
PERCOBAAN 1 : Melihat Proses Parent dan Proses Child
1. Dengan menggunakan editor vi, buatlah fork1.cpp dan ketikkan program berikut :
Membuat file fork1.cpp menggunakan perintah editor vi dan menuliskan script tersebut. Isi dari program script tersebut adalah untuk menampilkan proses PID yang dimilikinya, menampilkan parent ID dan juga user ID yang menggunakan model pengulangan for.
2. Gunakan g++ untuk menjalankan program diatas.
Sebelumnya terlebih dahulu install g++ agar perintah bisa berjalan.
Pada gambar tersebut program pada fork1.cpp sudah dapat dijalankan sehingga menghasilkan tiga buah output yaitu proses PID, parent PID, dan user PID. Untuk mendapatkan nilai PID dan PPID dapat dilakukan dengan fungsi getpid() dan getppid() yang dideklarasikan pada unistd.h. kedua fungsi tersebut akan mengembalikan nilai bertipe pid_t yang merupakan sebuah signed integer yang menunjukkan PID. Dapat dilihat dengan menggunakan perintah ps bahwa proses ./fork1 memiliki PID 3293dan PPID adalah 2609 yang merupakan proses bash. Selain itu, pada program ini juga digunakan fungsi getuid() untuk mendapatkan id dari user yang menjalankan dan fungsi sleep() yang menghentikan proses dalam detik.
PERCOBAAN 2 : Membuat Dua Proses Terus Menerus dengan Sebuah System Call Fork()
1. Dengan menggunakan editor vi, buatlah file fork2.cpp dan ketikkan program berikut :
Program script dibuat untuk sytem call fork yang dimana system call tersebut akan membuat proses baru pada system operasi UNIX. Program script tersebut juga akan menampilkan nomor PID yang ada serta nomor perulangan yang dimulai dari variable x = 5 dan increment yang tanpa diberi batas.
2. Gunakan g++ compiler untuk menjalankan program diatas. Pada saat dijalankan, program tidak akan pernah berhenti. Untuk mengentikannya menggunakan ctrl + C dan amati outputnya.
Program di atas bertujuan untuk membuat dua proses secara terus menerus menggunakan system call fork(). Fork adalah suatu system call yang dapat membuat proses baru. Proses asal yang melakukan fork disebut dengan parent process, sedangkan proses baru yang dibuat setelah melakukan fork disebut dengan child process. Nilai yang dikembalikan oleh fork adalah PID dari child process. Dapat dilihat bahwa pada percobaan ini, yang merupakan child process adalah proses dengan PID 3696, sedangkan yang merupakan parent process adalah process dengan PID 3697. x berfungsi untuk menghitung berapa kali loop telah terjadi. Jika dilihat dari urutan cetakannya, dapat dilihat 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 memberhentikannya, maka harus dihentikan secara paksa dengan interupsi menggunakan Ctrl+C.
PERCOBAN 3 : Membuat Dua Proses Sebanyak Lima Kali.
1. Dengan menggunakan editor vi, buatlah file fork3.cpp dan ketikkan program berikut :
Program script diatas merupakan program yang nantinya akan menghasilkan pengualangan dari dua proses sebanyak 5 kali. Pada saat nilai i = 0 dan kondisi berikutnya i kurang dari 5 maka akan menampilkan ouput PID dan kondisi tersebut akan diulang terus menerus hingga kondisi tersebut tidak terpenuhi.
2. Gunakan g++ compiler untuk menjalankan program di atas dan amati output yang dihasilkan.
Ketika program tersebut di running maka akan menghasilkan output status sebanyak 10 kali yang berasal dari 2 proses yang sedang berjalan diulang sebanyak 5 kali.Pada percobaan ini, dapat dilihat bahwa yang merupakan child process adalah proses dengan PID 6675 sedangkan yang merupakan parent process adalah proses dengan PID 6674. Selain itu, disini terbukti kembali bahwa walaupun mereka melakukan proses yang sama, parent process selalu berjalan terlebih dahulu sebelum process jika dilihat dari urutan cetakannya.
PERCOBAAN 4 : Proses Parent Menunggu Sinyal dari Proses Child dengan System Call Wait.
1. Dengan menggunakan editor vi, buatlah file fork4.cpp dak ketikkan program berikut :
Script diatas merupakan script untuk proses parent yang menunggu sinyal dari proses child menggunakan system call wait. Program tersebut nantinya akan menghasilkan stastus dari proses parent maupun proses child dan menampilkan masing - masing PID dari kedua proses tersebut.
2. Gunakan g++ compiler untuk menjalankan program diatas dan amati output yang dihasilkan.
Output yang dihasilkan yaitu menampilkan proses parent dan proses child yang ada. Proses parent ditandai dengan PID yang lebih kecil dan proses child memiliki nomor PID yang lebih besar. Status yang ditampilkan ada yang hanya dieksekusi oleh proses child dan ada yang hanya dieksekusi oleh proses parent, ketika kedua proses tersebut selesai maka akan diterminasi.
PERCOBAAN 5 : System Call Fork/exec dan Wait Mengeksekusi Program Bernama ls, Menggunakan File Executable /bin/ls dengan Satu Parameter -l dengan ekuivales ls-l.
1. Dengan menggunakan editor vi, buatlah file fork.cpp dan ketikkan program berikut:
Pada program script tersebut dibuat perintah untuk menampilkan berbagai status dari proses yang dijalankan beserta nomor PIDnya.
2. Gunakan g++ compiler untuk menjalankan program diatas dan amati output yang dihasilkan.
Output yang dihasilkan menunjukkan bahawa terdapat PID dari proses child dan proses parent sebanyak 4 status yang diikuti dengan hak akses dari owner (rwx) group (rx) other (rx) dan file bertipe directory (d). Kemudian jika proses tersebut sudah selesai langsung akan diterminasi.
PERCOBAAN 6 : System Call Fork/Exec dan Wait Mengeksekusi Program Lain.
1. Dengan menggunakan editor vi, buatlah file fork6.cpp dan ketikkan program berikut:
Pada program script menggunakan system call fork/exec dan wait untuk mengeksekusi program lain.
2. Gunakan g++ compiler untuk menjalankan program diatas dan amati output yang dihasilkan.
Pada program ini, proses child mengeksekusi program lain (fork3) dengan menggunakan system call exec. Pada percobaan diatas, proses dengan PID 7216 adalah proses parent, sedangkan proses dengan PID 7217adalah process child. Namun, saat proses child menjalankan execl dan mengeksekusi fork3, proses dengan PID 7217pada program fork3 akan menjadi proses parent dan ia akan membuat proses child baru dengan PID 7218
PERCOBAAN 7 : Melihat Manajemen Memory
1. Perhatikan dengan perintah dmesg jumlah memory tersedia dan proses swapping.
$ dmesg | more
Perintah $ dmesg | more tersebut menampilkan semua jumlah memory pada saat proses sedang berjalan seperti menampilkan file /var/log/dmesg. Perintah more tersebut berfungsi untuk menampilkan infromasinya layar per layar. Perintah $dmesg tersebut juga dapat melihat proses swapping yang ada.
2. Dengan perintah free perhatikan jumlah memory "free", "used", "share", dan "buffer".
$ free
Ketika menjalankan perintah $ free maka akan diberi tahu jumlah kapasitas memory yang ada seperti katergori free atau jumlah memory yang masuh kosong, kategori used yang berarti sudah digunakan, kategori shared, dan kategory cache yang merupakan jumlah dari cache memory yang ada. Pada perintah free ini juga ditampilkan kapasitas dari swap yang ada.
3. Dengan perintah dibawah ini apakah hasilnya sama dengan nomor 2 ?
$ cat /proc/meminfo
Perintah $ cat /proc.meminfo tersebut akan menampilkan space disk yang sudah terpakai lebih terperinci untuk apa saja digunakannya sedangkan nomor dua hanya menampilkan secara global tidak secara terperinci.
4. Gunakan perintah dibawah ini
$ ls -lR /.
Output yang ditampilkan sangat banyak karena berisi keseluruhan file pada system yang terdeteksi dan akan dicari. Selain itu isi dari suatu direktori juga ditampilkan seperti informasi file tersebut beserta totalnya.
5. Perhatikan perubahan manajemen memory.
$ free
Perintah $ free tersebut untuk menampilkan kapasitas memory dan swap.
6. Jalankan sebuah program misalnya open Office. Perhatikan perubahan manajemen memory.
$ free
Terlihat adanya perubahan pada kapasitas memory yang diman memory used semakin bertambah, free semakin berkurang, shared bertambah , buff/cache memory berkurang, dan kapasitas memory yang tersedia atau available juga berkurang. Pada bagian swap juga terdapat perubahan dimana bagian used menjadi semakin bertambah dan kapasitas freenya menjadi berkurang.
7. Dengan perintah ps bagaimana penggunaan memory untuk setiap proses diatas ?
$ ps -uax
Pada saat menjalankan perintah $ ps -uax maka akan terlihat secara terperinci dari semua proses yang sedang berjalan seperti PID, user , dan juga resource yang digunakan. Perintah ini juga menunjukkan penggunaan memory yang berubah secara dinamis dan bagaimana proses individu dalam penggunaan memory.
LATIHAN
1. Ubahkan program fork5.cpp pada percobaan 5 untuk mengeksekusi perintah yang ekuivalen dengan
a. $ ls -al /etc
b. cat fork2
c. ./fork2ctrl + c.
2. Infromasi apa saja mengenai manajemen memory yang ditampilkan pada perintah dmesg pada percobaan anda ?
Ketika menjalankan perintah $ dmesg tersebut terlihat output yang ditampilkan adalah tampilan dan kontrol dari kernel buffer ring di Linux. Perintah ini berguna untuk memeriksa pesan - pesan terkait boot kernel dan men-debug masalah - masalah yang terkait dengan perangkat keras.
3. Bagaimana informasi yang ditampilkan dengan perintah free pada percobaan Anda ?
Perintah $ free yang dijalankan maka akan menampilkan output jumlah kapasitas memory yang ada dan swap. Kapasitas memory tersebut ditampilkan menjadi beberapa kategori seperti total, used, free, shared, buff/cache, dan available.
4. Apa isi file /proc/meminfo pada percobaan yang Anda lakukan ?
Ketika menjalankan perintah $ /proc/meminfo tersebut menampilkan informasi secara terperinci seperti jumlah RAM fisik dalam kylobyte (MemTotal), julam RAM fisik dalam kylobyte yang tidak digunakan oleh sistem (MemFree), jumlah RAM fisik yang digunakan untuk buffer file (Buffer) dan masih banyak lagi.
5. Berapa besar memory yang digunakan setelah percobaan 7 dengan perintah ps - uax ?
Gambar diatas menunujukkan kapasitas memory yang ada pada saat perintah $ ps - uax sebelum dijalankan. Memory yang terpakai sebesar 851112 kb.
Gambar yang kedua ini menunjukkan kapasitas memory setelah menjalankan perintah $ ps -uax. Dapat dilihat terdapat perubahan jumlah pada memory used menjadi 851104 kb.
6. Lakukan hal yang sama dengan percobaan 7 untuk melihat perubahan memory setelah dilakukan beberapa proses pada shell. Tentukan perintah yang dilakukan misalnya membuka browser dan perhatikan hal - hal berikut :
a. Informasi apa saja yang ditampilkan dengan perintah free ?
Informasi yang ditampilkan dengan perintah free adalah:
· Total: Menampilkan total memori yang ada computer.
· Used: Menampilkan total memori yang sedang digunakan. Rumus perhitungannya adalah Total – (Free + Buffers + Cache).
· Free: Menampilkan total memori yang tidak digunakan.
· Shared: Menampilkan total memori yang digunakan oleh buffers, page cache, dan slabs.
· Available: Menampilkan perkiraan dari total memori yang siap digunakan untuk menjalankan program baru tanpa dilakukannya swapping.
Tampilannya seperti gambar dibawah ini .
Informasi yang disimpan oleh file /proc/meminfo berupa nformasi secara terperinci seperti jumlah RAM fisik dalam kylobyte (MemTotal), julam RAM fisik dalam kylobyte yang tidak digunakan oleh sistem (MemFree), jumlah RAM fisik yang digunakan untuk buffer file (Buffer) dan masih banyak lagi.
Tampilanya seperti ini :
c, Berapa besar kapasitas memory total ?
Untuk kapasitas memory total adalah 3075100 kB.
d. Berapa kapasitas memory yang sudah terpakai ?
Pada percobaan ini saya mencoba menjalankan browser dan membuka youtube. Setelah menjalankan program tersebut saya mengecek kapasitas memory menggunakan perintah $ free terlebih dahulu dan kapasitas memory yang sudah terpakai adalah 853652 kB yang menandakan perubahan dari sebelumnya.
e. Berapa kasitas memory yang belum terpakai ?
Berdasarkan pada gambar diatas memory yang belum terpakai atau memory free adalah 195220 kB.
f. Berapa kasitas memory yang digunakan sharing beberapa proses ?
Memory shared yaang digunakan adalah 40104 kB.
g. Berapakan kapasitas buffer cache ?
Kapasitas buff/cache adalah 2826228 kB.
KESIMPULAN
- System calls adalah cara terprogram di mana program komputer meminta layanan dari kernel sistem operasi tempat dijalankannya.
- System call yang dilakukan ada tiga yitu call fork, wait, dan execl.
- Sistem call execl meletakkan program executable baru ke memory dan mengasosiasikannya dengan proses saat itu.
- System calls wait adalah system call yang digunakan untuk menunggu perubahan status pada child process yang dipanggil, dan mendapatkan informasi tentang child process yang statusnya telah berubah
- Menggunakan perintah - perintah yang digunakan untuk manajemen memory seperti free, dmesg, dan /proc/meminfo.
- Pada virtual memory dilakukan transfer page antara disk dan memory fisik. Jika tidak terdapat cukup memory fisik, kernel melakukan swapping beberapa page lama ke disk. Jika memory total page lebih dari memory fisik yang tersedia, kernel lebih banyak melakukan swapping dibandingkan eksekusi kode program, sehingga terjadi thrashing dan mengurangi utilitas.
- Pada praktikum ini kita membutuhkan compiler g++ untuk menjalankan file tersebut.
- Manajemen memory berfungsi untuk mengetahui jumlah memori yang sedang digunakan atau sedang dibagikan dalam beberapa proses maupun yang tidak digunakan.
- Pada percobaan ini juga dilakukan untuk melihat perbedaan dari adanya proses parent dan proses child
- Pada proses parent, fork() menghasilkan pid dari proses child jika sebuah proses child dibuat, membedakan copy dari semua data, termasuk variable dengan current value dan stack, membedakan program counter yang menunjukkan eksekusi berikutnya meskipun awalnya keduanya mempunyai nilai yang sama tetapi setelah itu berbeda, dan setelah fork, kedua proses tersebut tidak menggunakan variable bersama.
Comments
Post a Comment