PRAKTIKUM 7: UNIX System Call dan Manajemen Memory

 POKOK BAHASAN: 

  • UNIX System Call 
  • Manajemen Memory 
TUJUAN BELAJAR: 

Setelah mempelajari materi dalam bab ini, praktikan diharapkan mampu: 

  • Menggunakan system call fork, wait dan execl pada Linux. 
  • Menggunakan perintah-perintah untuk manajemen memory. 
DASAR TEORI: 

1 UNIX SYSTEM CALL 

Pada praktikum ini akan dilakukan percobaan menggunakan system call yang berhubungan dengan proses pada system operasi UNIX yang biasa disebut UNIX System Call, yaitu system c fork, execl dan wait. akan dibuat program yang didalamnya terdapat fungsi system call. Untuk menjalankannya pada Linux gunakan g++. 

    System Call Fork 

    System call fork adalah suatu system call yang membuat suatu proses baru pada system operasi UNIX. Pada percobaan ini menggunakan mesin Linux dan beberapa program yang berisi system call fork(). 

    Bila suatu program berisi sebuah fungsi fork(), eksekusi dari program menghasilkan eksekusi dua proses. Satu proses dibuat untuk memulai eksekusi program. Bila system call fork() dieksekusi, proses lain dibuat. Proses asal disebut proses parend 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, dua proses tersebut dapat mengeksekusi secara konkuren. 

    Nilai yang dihasilkan oleh fork() disimpan dalam variable bertipe pid_t, yang berupa nilai integer. Karena nilai dari variable ini tidak digunakan, maka hasil 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 call getpid() Untuk melihat dokumentasi dari getpid(), ketikkan man 2 getpid 
    Perbedaan antara proses parent dan proses child adalah :

  • 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 teta pi setelah itu berbeda. 
  • Setelah fork, kedua proses tersebut tidak menggunakan variable
    System call fork menghasilkan :
  • Pid proses child yang baru ke proses parent, hal ini sama dengan memberitahukan proses parent nama dari child-nya
  •  0 : menunjukkan proses child
  • -1 : 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 system 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. 

    Syst

Uploading: 167277 of 167277 bytes uploaded.

em 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

2 MANAJEMEN MEMORY 

Linux mengimplementasikan sistem virtual memory demand-paged. Proses mempunyai besar memory virtual yang besar (4 gigabyte). dilakukan transfer page antara disk dan memory fisik. Pada virtual memory 

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 lambat dibandingkan mengakses memory fisik. 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.

Jika memory fisik ekstra tidak digunakan, kernel meletakkan kode program sebagai 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 5216 1880 2328 
Swap: 19464 0 19464 

Informasi ditampilkan dalam kilobyte (1024 byte). Memory ”total” adalah jumlah tersedia setelah load kernel. Memory digunakan untuk proses atau disk bufferring sebagai “used”. Memory yang sedang tidak digunakan ditampilkan pada kolom “free”. Memory total sama dengan jumlah kolom ”used” dan ”free”. 

Memory diindikasikan “shared” yaitu berapa banyak memory yang digunakan lebih dari satu proses. Program seperti shell mempunyai lebih dari satu proses yang berjalan. Kode executable read-only dan dapat disharing oleh semua proses yang berjalan pada shell. Kolom "buffering"

Perintah free juga menunjukkan dengan jelas bagaimana swap space dilakukan dan berpa 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 : 


Terdapat free memory (4.4MB) dan sedikit disk buffer (1.1MB). 

2. Situasi berubah setelah menjalankan perintah yang membaca data dari disk 


    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 : 


TUGAS PENDAHULUAN : 

Jawablah pertanyaan-pertanyaan berikut ini : 

1. Apa yang dimaksud dengan system call ? 

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) ? 

3. Apa yang dimaksud sistem virtual memory, proses swapping dan buffer cache pada manajemen memory ? 

4. Apa yang dimaksud perintah free dan cat /proc/meminfo ? 

5. Apa yang dimaksud perintah ps ?  


PERCOBAAN 1 : Melihat proses parent dan proses child

1. Dengan menggunakan editor vi, buatlah file fork1.cpp dan ketikkan program berikut: 


2. Gunakan g++ compiler untuk menjalankan program diatas 

$ g++ -o fork1 fork1.cpp 
$ ./fork 1 

3. Amati output yang dihasilkan 

ANALISA :



   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. 
    Hasil program tersebut adalah memunculkan 3 kali output dan menampilkan 3 kali nomer PID dan parent ID dari proses yang berjalan.

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:


2. Gunakan g++ compiler untuk menjalankan program diatas 

$ g++ -o fork2 fork2.cpp 
$ ./fork2

3. Amati output yang dihasilkan 

ANALISA:



    Dapat dilihat bahwa pada percobaan ini, yang merupakan child process adalah proses dengan pid 7294, sedangkan yang merupakan parent process adalah proses dengan pid 7293. 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+z. 

PERCOBAAN 3 : Membuat dua proses sebanyak lima kali 

1. Dengan menggunakan editor vi, buatlah file fork3.cpp dan ketikkan program berikut:


2. Gunakan g++ compiler untuk menjalankan program diatas 

$ g++ -o fork3 fork3.cpp 
$ ./fork3

3. Amati output yang dihasilkan 

ANALISA:



    Program ini loop yang akan dilakukan dibatasi hingga 5 kali saja, tidak infinite. Pada percobaan ini, dapat dilihat bahwa yang merupakan child process adalah proses dengan pid 6919, sedangkan yang merupakan parent process adalah proses dengan pid 6918

PERCOBAAN 4 : Proses parent menunggu sinyal dari proses child dengan system call wait 

1. Dengan menggunakan editor vi, buatlah file fork4.cpp dan ketikkan program berikut:


2. Gunakan g++ compiler untuk menjalankan program diatas 

$ g++ -o fork4 fork4.cpp 
$ ./fork4

3. Amati output yang dihasilkan 

ANALISA:



    Akan menampilkan nilai child PID dan parent PID dengan bantuan. System call wait akan membuat proses parent behenti sementara dan menunggu hingga proses child selesai dan diterminasi. Setelah proses child diterminasi system call wait akan mengembalikan nilai berupa pid dari proses child yang diterminasi tersebut. Itulah mengapa pada program diatas, wait dilakukan di dalam loop do...while, selama hasil return value dari wait tidak sama dengan pid proses child, maka proses parent akan terus melakukan waiting.

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

1. Dengan menggunakan editor vi, buatlah file fork5.cpp dan ketikkan program berikut:


2. Gunakan g++ compiler untuk menjalankan program diatas 

$ g++ -o fork5 fork5.cpp 
$ ./fork5

3. Amati output yang dihasilkan 

ANALISA:



    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. Namun jika execl gagal dijalankan, maka proses child akan tetap berjalan. Itulah mengapa baris proses child dibawah execl pada percobaan diatas tidak dijalankan. 

PERCOBAAN 6 : System call fork/exec dan wait mengeksekusi program lain 

1. Dengan menggunakan editor vi, buatlah file fork6.cpp dan ketikkan program berikut:


2. Gunakan g++ compiler untuk menjalankan program diatas 

$ g++ -o fork6 fork6.cpp 
$ ./fork6

3. Amati output yang dihasilkan 

ANALISA:



    Hasilnya akan menampilkan status proses parent dan child serta PID dari proses mereka . Lalu child akan di jadikan 2 proses dan akan dijalankan sebanyak 5 kali dan selesai ketika mendisplay " I am a parent and I am quitting" dan keluar program.

PERCOBAAN 7 : Melihat Manajemen Memory

1. Perhatikan dengan perintah dmesg jumlah memory tersedia dan proses swapping 
    $ dmesg | more 
2. Dengan perintah free perhatikan jumlah memory ”free”, ”used”, “share” dan “buffer” . 
    $ free 
3. Dengan perintah dibawah ini apakah hasilnya sama dengan no 2 ? 
    $ cat /proc/meminfo 
4. Gunakan perintah dibawah ini 
    $ ls –lR /. 
5. Perhatikan perubahan manajemen memory 
    $ free 
6. Jalankan sebuah program, misalnya open Office.  Perhatikan perubahan manajemen memory 
    $ free 
7. Dengan perintah ps bagaimana penggunaan memory untuk se tiap proses diatas ? 
    $ ps -uax 

ANALISA:


1. Dengan perintah dmseg dan dikombinasikan dengan more agar menampilkan informasinya layar per layar .


2. Perintah free akan menampilkan informasi tentang memori dan swap dalam kilobyte (1 kilobyte)


3. Hasil yang ditampilkan oleh cat /proc/meminfo hampir sama dengan hasil pada free. Hanya saja bedanya cat /proc/meminfo menampilkan lebih banyak informasi daripada free.


4. Ls -lR /. Menampilkan semua direktori dan file yang ada pada sistem informasi. Karena banyaknya file yang ditampilkan, perintah tersebut akan berjalan secara terus menerus tiada henti.


5. Dapat dilihat bahwa memori yang “free” menjadi berkurang dan penggunaan memori shared dan buff/cache bertambah, sedangkan besar swap masih tetap.


6. Setelah dijalankan minesweeper, memori yang digunakan dan shared memory menjadi lebih besar dan “free” memory menajdi lebih sedikit. Selain itu, ada beberapa swap yang mulai digunakan


7. Penggunaan memori yang paling besar digunakan oleh minesweeper sebanyak 1,8%, sedangkan untuk perintah ls, tidak terlalu banyak.

LATIHAN :

1. Ubahlah program fork5.cpp pada percobaan 5 untuk mengeksekusi perintah yang ekuivalen dengan 

  • ls –al /etc. 



    Dapat menggunakan ls -al /etc yang akan disisipkan di execl ("/bin/ls","ls", "-al", "/etc", NULL) untuk menampilkan direktori dan file yang ada di ls.
  • cat fork2 




    Dapat menggunakan ls -al /etc yang akan disisipkan di execl ("/bin/cat","cat", "fork2.cpp", NULL) untuk menampilkan isi file fork2.cpp.
  • ./fork2 



    Dapat menggunakan ls -al /etc yang akan disisipkan di execl ("./fork2", "fork2", NULL) untuk menjalankan program fork5 dan fork2 yang telah disisipkan.

2. Informasi apa saja mengenai manajemen memory yang ditampilkan pada perintah dmesg pada percobaan Anda ? 

    Informasi yang ditampilkan mengenai manajemen memori pada dmesg adalah banyaknya memori yang tersedia beserta rinician penggunaan memori tersebut seperti kernel code, rwdata (read-write), rodata (read-only), init, bss, reserved (memori cadangan), dan cma-reserved.

3. Bagaimana informasi yang ditampilkan dengan perintah free pada percobaan Anda? 

  • Total : Menampilkan total memori yang ada pada komputer.
  • Used : Menampilkan total memori yang sedang digunakan. 
  • Rumus penghitungannya adalah Total – (Free + Buffers + Cache) 
  • Free : Menampilkan total memori yang tidak digunakan. 
  • Shared : Menampilkan total memori yang digunakan oleh tmpfs (memiliki nama 
  • 4. Apa isi file /proc/meminfo pada percobaan yang Anda lakukan ? 

    shmem pada /proc/meminfo). 
  • Buff/cache : 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. 

    Program /proc/meminfo menampilkan deskripsi memori yang terdapat pada pc. Banyak file yang ditampilkan seperti memori total, memori free, memori available, dan lain lain.

5. Berapa besar memory yang digunakan setelah percobaan 7 dengan perintah ps – uax? 


    Dengan menghitung besar memori yang digunakan secara keseluruhan didapatkan hasil 5,9%-20% memori terpakai.

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 : 

  • Informasi apa saja yang ditampilkan dengan perintah free ?


    Yang ditampilkan pada free adalah total memi, memori yang digunakan, memori yang dibagikan, buffer/cavhe memory, dan memori tersedia. Perintah free juga menunjukkan dengan jelas bagaimana swap space dilakukan dan berpa banyak swapping yang terjadi. 
  • Informasi apa saja yang disimpan file /proc/meminfo ? 

    /proc/meminfo menampilkan informasi/ status memori yang terdapat pada komputer
  • Berapa besar kapasitas memory total ? 

    Memori Total sebesar 1968144 kB
  • Berapa kapasitas memory yang sudah terpakai ? 

    Memory terpakai (memused) sebesar 1218996 kB
  • Berapa kapasitas memory yang belum terpakai ? 

    Memory yang belum terpakai (free) sebesar 392708 kB
  • Berapa kapasitas memory yang digunakan sharing beberapa proses ? 

    Memory yang digunakan untuk sharing sebesar 7640 kB
  • Berapa kapasitas buffer cache ?

    Buffer cache sebesar 353316 kB


KESIMPULAN : 

  • System calls adalah cara terprogram di mana program komputer meminta layanan dari kernel sistem operasi tempat dijalankannya. System calls menyediakan antarmuka antara proses dan sistem operasi

  • Linux mengimplementasikan sistem virtual memory demand-paged

  • 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.

  • kita dapat menggunakan getpid() untuk mendapatkan nila PID sebuah program.

Comments

Popular posts from this blog

PRAKTIKUM 5 : BEKERJA DENGAN BASH SHELL

Praktikum 3 : Operasi File dan Struktur Direktori

PRAKTIKUM 11 : MANAJEMEN USER DAN GROUP