Praktikum 7 Unix System Call dan Manajemen Memory

Praktikum 7

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 teta pi 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 terlih at 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 useddan 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 :

 

Mem:

total

247184

used

145772

free

101412

shared   buffers  cached

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 /.)

Mem:

total

247184

used

230604

free

16580

shared

0

buffers  cached

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 freejuga 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

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

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

      Jawaban :

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

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

     c. 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 ?

      Jawaban :

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

    b. 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).

    c. Buffer cache adalah buffer yang dipakai di kernel.

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

      Jawaban :

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

     Jawaban : 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()

<< endl;

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

*/

sleep(1);

}

return 0;

}


 

Analisa : Jika suatu program berisi sebuah fungsi fork(), eksekusi dari program akan menghasilkan eksekusi dua proses. Satu proses dibuat untuk memulai eksekusi program. Bila system call fork() dieksekusi,proses lain dibuat. Proses asal disebut proses parent dan proses kedua disebut proses child. Proses child merupakan duplikat dari proses parent. Kedua proses melanjutkan eksekusi dari titik dimana system call.

2. Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork1 fork1.cpp

$ ./fork1

 


 3.  Amati output yang dihasilkan

Analisa : Isi program merupakan  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 call 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;

 

}

 


Analisa: Menuliskan script seperti diatas pada program fork2.cpp yang telah dibuat denganeditor vi. System call fork adalah suatu system call yang membuat suatu proses barupada system operasi UNIX. 

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

$ g++ -o fork 2 fork 2.cpp

$ ./fork 2


3.  Amati output yang dihasilkan

Analisa:  Compile file fork2.cpp yang sudah kita buat dengan menggunakan perintah g++ -o fork2fork2.cpp, lalu jika tidak ada file yang eror, maka ketikkan ./fork2 untuk menjalankan programfork2 . Output dari program ini adalah membuat dua proses terus menerus yang dimulai dengan x = 5 dengan sebuah system call fork().

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 padaunistd.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;
}

 

Analisa :   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 diatas

$ g++ -o fork 3 fork 3.cpp

$ ./fork 3

 

3.  Amati output yang dihasilkan

Analisa:  Percobaan ini membuat dua proses dalam satu terminal, yang dapat berjalan sebanyak 5 kali dengan file fork3.cpp. Untuk mendapatkan hasil seperti itu kita menggunakan perulangan for yang akan menampilkan this is process (pid).



 
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;
}
 


 Analisa:  File fork4.cpp berisi untuk membuat script yang nantinya akan digunakan untuk proses par ent menunggu sinyal dari proses child dengan system call wait

2.  Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork 4 fork 4.cpp

$ ./fork 4





3.  Amati output yang dihasilkan

Analisa : 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 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);

}

 



Analisa: Membuat script file fork5.cpp yang akan digunakan untuk mengeksekusi ls.

2.  Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork 5 fork 5.cpp

$ ./fork 5  

3.  Amati output yang dihasilkan

Analisa : 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 




int main(void) { pid_t chil d_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;

}

 



Analisa:  Membuat program fork6.cpp yang akan digunakan untuk menggunakan system call fork/exec dan wait untuk mengeksekusi program lain.

2.  Gunakan g++ compiler untuk menjalankan program diatas

$ g++ -o fork 6 fork 6.cpp

$ ./fork 6

 


3.  Amati output yang dihasilkan

Analisa : 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 


Percobaan 7 : Melihat Manajemen Memory

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

$ dmesg | more 

  

Analisa: Perintahmesg digunakan untuk melihat jumlah memory tersedia dan proses swapping.

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

$ free

Analisa:  Free digunakan untuk mengetahui total memori yng digunakan dalam proses. Dalam perintah free ditampilkan total kapasitas memori, memori yang terpakai,yang tidak sedang dipakai, yang dibagi,buffer, cache dan juga swap.

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

$ cat /proc/meminfo


Analisa:  Dalam percobaan dengan perintah cat /proc/meminfo berbeda dengan nomer 2 dengan perintah free karena disini disk yang terpakai lebih terperinci dengan jelas, dan informasi memori total dan swab total sama, untuk yang lain sedikit berbeda dengan perintah free. sedangkan perintah free hanya secara global bukan secara khusus.

4. Gunakan perintah dibawah ini

$ ls –lR /.

Analisa:  Perintah ls –lR /. digunakan untuk menampilkan isi dari suatu direktori dengan menampilkan informasi file tersebut,

5. Perhatikan perubahan manajemen memory

$ free

Analisa:  Perubahan terjadi pada memory used, shared, dan buff/cache menjadi bertambah, sedangkan memory free dan available menjadi berkurang.

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

$ free


Analisa:  Perubahan terjadi pada memory shared menjadi bertambah, sedangkan memory used, free, buff/cache, dan available menjadi berkurang.

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

$ ps-uax

Analisa:  Perintah ps -uax digunakan untuk menunjukkan bagaimana penggunaan memory berubah secara dinamis dan bagaimana proses individu menggunakan memory.





LATIHAN:

 

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

a.     ls –al /etc.






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

b.     cat fork2



Analisa : 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



Analisa : 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 ?

Analisa : 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 ?

Analisa : 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 ?



Analisaa : 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 ?

Analisa :Besar memory yang digunakan setelah percobaan 7 dengan perintah ps – uax ialah 0,3 %

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 apasaja yang ditampilkan dengan perintah free ?

Jawaban : Menampilkan informasi memori dalam kibibyte (KiB).

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

Jawaban : Menampilkan informasi tentang sistem, termasuk statistic penggunaan memori.

c.      Berapa besar kapasitas memory total ?

Jawaban : Besar kapasitas memory total adalah  3552756 KiB

d.     Berapa kapasitas memory yang sudah terpakai ?

Jawaban : Besar kapasitas memori yang terpakai adalah 690096 KiB

e.      Berapa kapasitas memory yang belum terpakai  ?

Jawaban :Besar kapasitas memory yang belum terpakai adalah  1856208 KiB

f.      Berapa kapasitas memory yang digunakan sharing beberapa proses ?

Jawaban : Besar kapasitas yang digunakan sharing beberapa proses adalah  13072 KiB

g.      Berapa kapasitas buffer cache ?

Jawaban : Besar kapasitas buffer cache adalah 1006452 KiB 



KESIMPULAN

- System call merupakan penyedia antarmuka dari pelayanan-pelayanan yang tersedia dengan system operasi. Umumnya system call mnggunakan bahasa C dan C++, meskipun tugas-tugas seperti hardware yang harus diakses langsung, maka menggunakan bahasa assembly. 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(). Sistem call execl adalah peletakkan 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. 

- System call wait dapat menyebabkan proses menunggu sinyal (menunggu sampai sembarang tipe sinyal diterima dari sembarang proses). System call wait menghasilkan pid dari proses yang mengirimi sinyal. 

- Untuk merunning file pada praktikum ini dibutuhkan compiler g++.

- Swapping adalah manajemen memori dengan pemindahan proses antara memori utama dan disk selama eksekusi. Buffer cache dapat dianggap sebagai sumber daya memori, terutama sumber daya I/O karena penggunaanya dalam mediasi transfer.


DAFTAR PUSTAKA

https://www.linuxid.net/30460/tutorial-penggunaan-perintah-free-di-linux-terminal/#:~:text=Dalam%20sistem%20Linux%2C%20Anda%20dapat,yang%20tersedia%20di%20dalam%20sistem ( DIAKSES PADA TANGGAL 23 NOVEMBER 2021 )
https://www.academia.edu/9730693/Laporan_praktikum_7_sistem_operasi_linux( DIAKSES PADA TANGGAL 23 NOVEMBER 2021 )

Komentar

Postingan populer dari blog ini

Praktikum 6-A Pemrograman Shell

Praktikum 4B Proses dan Manajemen Proses

Praktikum 12 Manajemen Aplikasi