Linux : Unix Sistem Call dan Manajemen Memory

 

Unix System Call dan  Manajemen Memory

 


 

POKOK BAHASAN:

·         UNIX System Call

·         Manajemen Memory

 

TUJUAN BELAJAR:

Setelah mempelajari materi dalam bab ini, mahasiswa 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 call fork, execl dan wait.   Pada percobaan yang dilakukan 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 tetapi setelah itu berbeda.

      Setelah fork, kedua proses tersebut tidak menggunakan variable bersama.

 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.

 

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.

 

2 MANAJEMEN MEMORY

Linux mengimplementasikan sistem virtual memory demand-paged.  Proses mempunyai besar memory virtual yang besar (4 gigabyte).  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.  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 2800

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 “buffers” menampilkan berapa banyak memory digunakan untuk disk 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 :

total

used      

free

shared

buffers 

cached

Mem:   247184

145772

101412

0

10872

57564

-/+ buffers/cache:

77336

169848

 

 

 

Swap:  522072

0

522072

 

 

 

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

2.        Situasi berubah setelah menjalankan perintah yang membaca data dari disk (command ls –lR /.)

total

used      

free

shared

buffers 

cached

Mem:   247184

230604

16580

0

45260

59748

-/+ buffers/cache:

125596

121588

 

 

 

Swap:  522072

308

522072

 

 

 

 

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 :

USER

PID

%CPU

%MEM

VSZ

RSS

TTY

STAT

START

TIME

COMMAND

student

4581

0.0

0.3

4316

856

pts/0

S

10:25

0:00

Bash

student

5669

0.0

0.2

2604

656

Pts/0

R

10:39

0:00

ps -u

 

 

TUGAS PENDAHULUAN:

Jawablah pertanyaan-pertanyaan berikut ini :

1.      Apa yang dimaksud dengan system call ?

System calls adalah sebuah sistem yang menyediakan interface (antar muka) antara program (user program yang berjalan) dan bagian OS. System calls menjadi jembatan antara proses dan OS. System call biasanya tersedia dalam bentuk instruksi 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 adalah suatu system call yang membuat suatu proses baru pada system operasi UNIX. Nilai yang dihasilkan fork() disimpan dalam variable bertipe pid_t, yang berupa nilai integer, karena tidak digunakan, maka hasil fork() dapat diabaikan.

Sistem call execl() adalah suatu sistem call yang meletakkan program executable baru ke memory dan mengasosiasikannya dengan proses saat itu.

Sistem call wait() adalah suatu sistem call yang menyebabkan proses menunggu sinyal (menunggu sampai sembarang tipe sinyal dari sembarang proses). Biasanya digunakan oleh proses parent untuk menunggu sinyal dari system operasi ke parent bila child diterminasi.

 

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

Virtual memory adalah sebuah mekanisme yang digunakan oleh aplikasi untuk menggunakan sebagian dari memori sekunder seolah-olah ia menggunakannya sebagai RAM fisik yang terinstal di dalam sebuah sistem.

Swap merupakan memori backup atau cadangan apabila memori utama sudah kewalahan menangani operasi di komputer kita, dan biasanya Swap ini kita temukan pada waktu instalasi Linux dengan alokasi di hard disk. Pada linux, Swap merupakan partisi yang berbeda untuk selanjutnya juga digunakan sebagai virtual memory dan menyimpan file-file sementara (temporary).

Buffer cache adalah buffer yang dipakai di kernel.

 

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

Perintah free digunakan untuk mengetahui kapasitas memori (RAM), berapa yang kosong dan berapa yang terpakai cat/proc/meminfo: menampilkan memori fisik & ruang swap

 

5.      Apa yang dimaksud perintah ps ?

Perintah atau command ps (process status) di gunakan untuk menampilkan informasi proses yang sedang berjalan termasuk nomor PID (Process Identification Number) dari proses tersebut.

 

PERCOBAAN:

1.     Login sebagai user.

2.     Bukalah Console Terminal dan lakukan percobaan-percobaan di bawah ini kemudian analisa hasil percobaan.

3.     Selesaikan soal-soal latihan.

 

 

 

Percobaan 1 : Melihat proses parent dan proses child

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

#include <iostream>  

using namespace std;  

#include <sys/types.h> 

#include <unistd.h>    

 

/* getpid() adalah system call yg dideklarasikan pada unistd.h.

Menghasilkan suatu nilai dengan type pid_t.

pid_t adalah type khusus untuk process id yg ekuivalen dg int  */

 

int main(void) { 

pid_t mypid;

uid_t myuid;

 

for (int i = 0;  i < 3;  i++) {

mypid = getpid();

cout << "I am process " << mypid << endl;    

cout << "My parent is process " << getppid() << endl;

cout << "The owner of this process has uid " << getuid()l; 

            << endl;

      /* sleep adalah system call atau fungsi library            yang menghentikan proses ini dalam detik

      */

         sleep(1);

}     

return 0;

}


 

2.      Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork1 fork1.cpp

$ ./fork1



 

3.     Amati output yang dihasilkan

Isi program adalah script untuk menampilkan proses dengan PID yang dimilikinya, menampilkan parent id dan juga user ID menggunakan perulangan for. Bila suatu program berisi sebuah fungsi fork(), eksekusi dari programakan menghasilkan eksekusi duaproses. Satu proses dibuat untukmemulai eksekusiprogram.Bila system call fork() dieksekusi,proses lain dibuat. Proses asaldisebut proses parend dan proses kedua disebut proses child. Proses child merupakanduplikat dari proses parent. Kedua proses melanjutkan eksekusi dari titik dimana system call. Hasil programnya 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 Zcall fork()

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

#include <iostream>  

using namespace std;

#include <sys/types.h>

#include <unistd.h>  

 

/* getpid() dan fork() adalah system call yg dideklarasikan      pada unistd.h.

Menghasilkan suatu nilai dengan type pid_t.     

pid_t adalah type khusus untuk process id yg ekuivalen dg int */

 

int main(void) { 

pid_t childpid;

int x = 5;

childpid = fork();

while (1) {

   cout << "This is process " << getpid() << endl;

  cout << "x is " << x << endl;

   sleep(1);

  x++;

}   

return 0;

}

 

2.     Gunakan g++ compiler untuk menjalankan program diatas.  Pada saat dijalankan, program tidak akan pernah berhenti.  Untuk menghentikan program tekan Ctrl+C.

$ g++ -o fork2 fork2.cpp

$ ./fork2

 

3.     Amati output yang dihasilkan

Program berisi perintah untuk menampilkan nomor PID dengan perulangan dimulai pada variabel x= 5 kemudian di increment tanpa di berry batasan. Oleh karena itu, ketika program dieksekusi, program akan terus berulang sampai dihentikan secara manual menggunakan CTRL+C.

 

 

Percobaan 3 : Membuat dua proses sebanyak lima kali 

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

#include <iostream>

using namespace std;

#include <sys/types.h> 

#include <unistd.h>

/* getpid() dan fork() adalah system call yg dideklarasikan      pada unistd.h.

   Menghasilkan suatu nilai dengan type pid_t.

   pid_t adalah type khusus untuk process id yg ekuivalen dg int */

 

int main(void) { 

   pid_t childpid;

     childpid = fork();

   for (int i = 0;  i < 5;  i++) {

        cout << "This is process " << getpid() << endl;             sleep(2);

 }     

return 0;

}


 

2.    Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork3 fork3.cpp

$ ./fork3


 

3.    Amati output yang dihasilkan

Akan menampilkan Status proses dan juga nomor PID sebanyak 2 proses dan Output Status diulang sebanyak 5 kali, yaitu ketika variabel i bernilai 0 sampai kurang dari 5. Maka program akan menampilkan pasangan status proses dan nomor PID sebanyak 5 kali.

 

 

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 :

#include <iostream>

using namespace std;

#include <sys/types.h> 

#include <unistd.h>

#include <sys/wait.h>   

 

/* pid_t fork() dideklarasikan pada unistd.h.

pid_t adalah type khusus untuk process id yg ekuivalen dg int  

*/

 

int main(void) { 

     pid_t child_pid;

      int status;

      pid_t wait_result;       

 

      child_pid = fork();

           if (child_pid == 0) { 

                       /* kode ini hanya dieksekusi proses child */ 

            cout << "I am a child and my pid = " << getpid() << endl;

            cout << "My parent is " << getppid() << endl;

            /* keluar if akan menghentikan hanya proses child */

          }   

      else if (child_pid > 0) {

            /* kode ini hanya mengeksekusi proses parent */

            cout << "I am the parent and my pid = " << getpid() 

                   << endl;

            cout << "My child has pid = " << child_pid << endl;

      }    

      else {

                   cout << "The fork system call failed to create a new        process" << endl;

      exit(1);

      }

    

   /* kode ini dieksekusi baik oleh proses parent dan child */          cout << "I am a happy, healthy process and my pid = " 

       << getpid() << endl;

  

      if (child_pid == 0) {

            /* kode ini hanya dieksekusi oleh proses child */

            cout << "I am a child and I am quitting work now!" << endl;  

          }   

      else {

            /* kode ini hanya dieksekusi oleh proses parent */

            cout << "I am a parent and I am going to wait for my child" << endl;

            do {

                        /* parent menunggu sinyal SIGCHLD mengirim tanda                         bahwa proses child diterminasi */

                   wait_result = wait(&status);

            } while (wait_result != child_pid);

                   cout << "I am a parent and I am quitting." << endl;

      }     

      return 0;

}


2.     Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork4 fork4.cpp

$ ./fork4

 

3.     Amati output yang dihasilkan

Program berisi perintah yang akan menampilkan berbagai status dari proses parent maupun proses child dan menampilkan juga PID dari kedua proses itu. Status yang ditampilkan ada yang hanya dieksekusi oleh proses child dan ada yang hanya dieksekusi oleh proses parent. Setelah kedua proses ini selesai, program akan diterminasi.

 

 

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 :

#include <iostream>

using namespace std;

#include <sys/types.h> 

#include <unistd.h>

#include <sys/wait.h>

 

 

/* pid_t fork() dideklarasikan pada unistd.h.

    pid_t adalah type khusus untuk process id yg ekuivalen dg int

*/   

 

int main(void) { 

   pid_t child_pid;

    int status;

   pid_t wait_result;

  

    child_pid = fork();

   if (child_pid == 0) { 

            /* kode ini hanya dieksekusi proses child */               cout << "I am a child and my pid = " << getpid() << endl;

            execl("/bin/ls", "ls", "-l", "/home",  NULL);

                 /* jika execl berhasil kode ini tidak pernah digunakan */ 

         cout << "Could not execl file /bin/ls" << endl;

         exit(1);

   /* exit menghentikan hanya proses child */

    }   

    else if (child_pid > 0) {

 

         /* kode ini hanya mengeksekusi proses parent */

         cout << "I am the parent and my pid = " << getpid() 

            << endl;

         cout << "My child has pid = " << child_pid << endl;

   }         

  else {

        cout << "The fork system call failed to create a new process" << endl;

     exit(1);

    }

   /* kode ini hanya dieksekusi oleh proses parent karena        child mengeksekusi dari “/bin/ls” atau keluar   */

   cout << "I am a happy, healthy process and my pid = " 

    << getpid() << endl;

    

   if (child_pid == 0) {

      /* kode ini tidak pernah dieksekusi */                  printf("This code will never be executed!\n");

   }

    else {

      /* kode ini hanya dieksekusi oleh proses parent */

        cout << "I am a parent and I am going to wait for my child" << endl;

       do {

          /* parent menunggu sinyal SIGCHLD mengirim tanda bila proses child diterminasi */

         wait_result = wait(&status);   

        } while (wait_result != child_pid);

       cout << "I am a parent and I am quitting." << endl;

   }

     return 0;

}



2.     Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork5 fork5.cpp

$ ./fork5


 

3.     Amati output yang dihasilkan

Output program akan seperti diatas , menampilkan PID dari child dan proses parentsebanyak 4 status dan serta menampilkan hak akses dari owner (rwx) group (rx) other (rx) dan file bertipe directory (d).

 

 

 

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

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

#include <iostream>

using namespace std;

#include <sys/types.h> 

#include <unistd.h>

#include <sys/wait.h>

 

/* pid_t fork() dideklarasikan pada unistd.h.

pid_t adalah type khusus untuk process id yg ekuivalen dg int */

 

int main(void) {

     pid_t child_pid;

    int status;

     pid_t wait_result;

     child_pid = fork();

     if (child_pid == 0) { 

             /* kode ini hanya dieksekusi proses child */

             cout << "I am a child and my pid = " << getpid() << endl;

             execl("fork3", "goose", NULL);

                     /* jika execl berhasil kode ini tidak pernah digunakan */

             cout << "Could not execl file fork3" << endl;

             exit(1);

            /* exit menghentikan hanya proses child */

   }

 

  else if (child_pid > 0) {

            /* kode ini hanya mengeksekusi proses parent */

 

            cout << "I am the parent and my pid = " << getpid() 

                      << endl;

            cout << "My child has pid = " << child_pid << endl;

           }

     else {

           cout << "The fork system call failed to create a new process" << endl;

           exit(1);

      }

    

      /* kode ini hanya dieksekusi oleh proses parent karena child mengeksekusi dari “fork3” atau keluar   */                  cout << "I am a happy, healthy process and my pid = " 

       << getpid() << endl;

   

      if (child_pid == 0) {

            /* kode ini tidak pernah dieksekusi */                      printf("This code will never be executed!\n");

      }

      else {

            /* kode ini hanya dieksekusi oleh proses parent */                cout << "I am a parent and I am going to wait for my child" << endl;

            do {

               /* parent menunggu sinyal SIGCHLD mengirim tanda bila proses child diterminasi */

            wait_result = wait(&status);

                        } while (wait_result != child_pid);

            cout << "I am a parent and I am quitting." << endl;

      }

     return 0;

}



 

2.     Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork6 fork6.cpp

$ ./fork6


 

3.     Amati output yang dihasilkan

Program ini adalah perintah untuk menjalankan fork3 di dalam program fork6. Yaitu menampilkan output yang hanya dieksekusi oleh child maupun parent proses dan juga menampilkan nomor PID nya lalu dua proses child dijadikan 2 proses dan diulang sebanyak 5 kali setelah itu diterminasi.

 

 

Percobaan 7 : Melihat Manajemen Memory

1.        Perhatikan dengan perintah dmesg jumlah memory tersedia dan proses   swapping

$ dmesg | more

 


Perintah ini untuk menampilkan output perintah dmesg dalam bentuk satu layar penuh. Perintah dmesg memungkinkan Anda untuk melihat dan mengontrol kernel ring buffer. Ini bisa sangat berguna ketika memecahkan masalah kernel atau perangkat keras.

 

2.         Dengan perintah free perhatikan jumlah memory ”free”, ”used”, “share” dan  “buffer” .

$ free

 


Perintah $ free adalah perintah yang berisi informasi memory (dalam kilobytes).
-used : memory yang sedang digunakan
-free : memory yang belum digunakan (free space)
-Shared : memory yang digunakan lebih dari satu proses
-buffers : menampilkan berapa banyak memory digunakan untuk disk
--/+ buffers/cache: menampilkan memori yang kosang dan yang terpakai

 

3.        Dengan perintah dibawah ini apakah hasilnya sama dengan no 2 ?

$ cat /proc/meminfo

 


Direktori ini juga berisi beberapa file yang memungkinkan Anda untuk mengakses berbagai informasi tentang sistem. / Proc / meminfo adalah salah satu file tersebut, hal itu memberikan akses ke sebagian besar statistik penggunaan memori. Hasilnya berbeda dengan nomor 2, namun hasil di nomor 2 ada pula pada perintah ini.

-memTotal : jumlah memori dari RAM Fisik yang digunakan

-memFree : jumlah memori dari RAM fisik yang tidak digunakan
sistem(jumlah dari LowFree dan HighFree)

-Buffers : Jumlah memori dari RAM fisik yang digunakan sistem untuk Buffer File.

-Cached : jumlah memori pada PageCache dikurangi SwapCache, digunakan
sebagai memori Cached

-SwapCached : jumlah memori sebagai Swap.

-Inactive : jumlah total dari buffer atau page cache memory, dalam
kilobyte pada penggunaan tidak aktif.

-swap total : jumlah total dari swap yang tersedia, dalam kilobytes.

-swap free : jumlah total dari swap free yang tersedia, dalam kilobytes.

-dirty : jumlah total dari memory, dalam kilobytes, menunggu kembali
untuk ditulisi kembali ke disk.

           

4.        Gunakan perintah dibawah ini

$ ls –lR /.

 


Penggunaan memory berubah secara dinamis dan bagaimana proses individu menggunakan memory. tekan Ctrl+C untuk berhenti.

 

5.        Perhatikan perubahan manajemen memory

$ free

 


Nilainya berubah, ada yang naik ada yang turun. Besar memori shared, buff/cache dan available meningkat sedangkan nilai memori used dan free turun.

 

6.        Jalankan sebuah program, misalnya open Office.  Perhatikan perubahan manajemen memory

$ free

 


Nilainya berubah, ada yang naik ada yang turun. Besar memori used, free dan shared sedangkan nilai memori buff/cache dan available turun.

           

7.        Dengan perintah ps bagaimana penggunaan memory untuk setiap proses diatas ? $ ps -uax

 


Dengan perintah tersebut dapat dilihat perubahan penggunaan memori untuk setiap proses di atas..

 

LATIHAN:

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

a.      ls –al /etc.

 


Kode yang diubah yaitu pada instruksi execl. Outputnya akan menampilkan perintah ls –al /etc.

 

b.     cat fork2

 


Program yang diubah adalah tulisan yang di blok pada gambar di atas. Perintah itu untuk menampilkan isi file fork2.cpp ke layar foreground. Jika sudah selesai maka program akan diterminasi.

 

c.      ./fork2

 


Program yang diubah adalah tulisan yang di blok pada gambar di atas. Perintah itu untuk mengeksekusi file fork2.cpp ke layar foreground. File fork2 baru akan berhenti jika dihentikan secara manual menggunakan CTRL+C.

 

 

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

Perintah dmesg menampilkan informasi boot. Kernel akan boot informasi yang disimpan dalam buffer cincin (ring buffer). Informasi daya juga disimpan di direktori / var / log, nama file dmesg.

 

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

 


Dalam sistem Linux, Anda dapat menggunakan perintah free  untuk mendapatkan laporan terperinci tentang penggunaan memori di sistem. Perintah free akan memberikan informasi tentang jumlah total memory yang ada serta ruang memory dan swap yang tersedia di dalam sistem dalam kibibyte (KiB). 1 kibibyte (KiB) adalah 1024 byte.

 

4.     Apa isi file /proc/meminfo pada percobaan yang Anda lakukan ?

 


Direktori ini juga berisi beberapa file yang memungkinkan Anda untuk mengakses berbagai informasi tentang sistem. / Proc / meminfo adalah salah satu file tersebut, hal itu memberikan akses ke sebagian besar statistik penggunaan memori. Hasilnya berbeda dengan nomor 2, namun hasil di nomor 2 ada pula pada perintah ini.

-memTotal : jumlah memori dari RAM Fisik yang digunakan

-memFree : jumlah memori dari RAM fisik yang tidak digunakan
sistem(jumlah dari LowFree dan HighFree)

-Buffers : Jumlah memori dari RAM fisik yang digunakan sistem untuk Buffer File.

-Cached : jumlah memori pada PageCache dikurangi SwapCache, digunakan
sebagai memori Cached

-SwapCached : jumlah memori sebagai Swap.

-Inactive : jumlah total dari buffer atau page cache memory, dalam
kilobyte pada penggunaan tidak aktif.

-swap total : jumlah total dari swap yang tersedia, dalam kilobytes.

-swap free : jumlah total dari swap free yang tersedia, dalam kilobytes.

-dirty : jumlah total dari memory, dalam kilobytes, menunggu kembali
untuk ditulisi kembali ke disk.

 

 

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

 


Memori yang digunakan sebesar 0.3-20.1% dengan kapasitas CPU yang digunakan sebesar 81%.

 

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 ?

Menampilkan informasi memori dalam kibibyte (KiB).

 

b.     Informasi apa saja yang disimpan file /proc/meminfo ?

Menampilkan informasi tentang sistem, termasuk statistic penggunaan memori.

 

c.      Berapa besar kapasitas memory total ?

Memori total sebesar 985268 KiB.

 

d.     Berapa kapasitas memory yang sudah terpakai ?

Memori used sebesar 695096 KiB.

 

e.      Berapa kapasitas memory yang belum terpakai ?

Free memory sebesar 80852 KiB.

 

f.      Berapa kapasitas memory yang digunakan sharing beberapa proses ?

Shared memory sebesar 9144 KiB.

 

g.      Berapa kapasitas buffer cache ?  

Buffer cache sebesar 209320 KiB.

 

 

KESIMPULAN

 

 

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

- Membedakan copy dari semua data, termasuk variable dengan current value dan stack

- Membedakan program counter yang menunjukkan eksekusi berikutnya meskipun awalnyakeduanya mempunyai nilai yang sama tetapi setelah itu berbeda

- Setelah fork, kedua proses tersebut tidak menggunakan variable bersama.2.

 

2. 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.3.

 

3.Sistem call execl meletakkan program executable baru ke memory dan mengasosiasikannyadengan proses saat itu. Dengan kata lain, mengubah segala sesuatunya sehingga programmulai mengeksekusi dari file yang berbeda.

 

 

 

 

DAFTAR PUSTAKA

 

https://www.linuxid.net/31896/mengenal-perintah-dmesg-di-linux-terminal/#:~:text=Utilitas%20baris%20perintah%20dmesg%20digunakan,yang%20terkait%20dengan%20perangkat%20keras.

http://nipmedia.blogspot.com/2010/01/perintah-dmesg-more.html

http://www.w3big.com/id/linux/linux-comm-dmesg.html

Komentar

Postingan populer dari blog ini

Linux : Proses dan Manajemen Proses

Linux : Operasi File dan Struktur Direktori

Anugerah Pewarta Astra 2022 : PEMANFAATAN KEMAJUAN TEKNOLOGI DALAM MEMBUAT LOBTECH, ALAT BANTU BUDIDAYA LOBSTER