Unix System Call dan Manajemen
Praktikum7
Unix System Call dan Manajemen Memory
Pokok Bahasan:
- Unix
System Cell
- 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 52161880 2328 2800
Swap: 194640 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 :
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 /.)
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 cell?
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. Pada sistem operasi UNIX akan menggunakan UNIX
system call yaitu call fork, excel, dan wait.
2. Apa yang
dimaksud dengan system call fork(), execl() dan wait(). Jawablah dengan
menggunakan perintah man (contoh : man 2 fork, man 2 execl dan man 2 wait)?
- System call
fork adalah suatu system call yang
membuat suatu proses baru pada system
operasi UNIX.
- 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.
- 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.
3. Apa yang
dimaksud dengan virutal memory, proses swapping dan buffer cache pada manajemen
memory?
Virtual memory adalah suatu teknik memisahkan antara memori logis dan
memori fisiknya. Memori logis merupakan kumpulan keseluruhan halaman dari suatu
program. Tanpa memori virtual, memori logis akan langsung dibawa ke memori
fisik (memori utama). Disinilah memeori virtual melakukan pemisahan dengan
menaruh memori logis ke secondary storage (disk sekunder) dan hanya membawa
halaman yang diperlukan ke memori utama (memori fisik). 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.
4. Apa yang
dimaksud dengan perintah free dan cat /proc/meminfo?
Free digunakan untuk mengetahui total memori yang digunakan dalam proses.
Dalam perintah free ditampilkan total kapasitas memori, memori yang terpakai,
yang tidak sedang dipakai, yang dibagi, buffer, cache dan juga swap. Cat
/proc/meminfo digunakan untuk mengetahui isi dari meminfo kemudian ditampilkan.
5. Apa yang
dimaksud dengan perintah ps?
Perintah ps digunakan untuk menampilkan informasi proses yang sedang
berjalan termasuk nomor PID dari proses tersebut.
PERCOBAAN:
- Login sebagai user.
- Bukalah Console Terminal dan
lakukan percobaan-percobaan di bawah ini kemudian analisa hasil percobaan.
- 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 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 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;
}
Analisis:
Bila 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
Analisis:
Setelah scipt program file fork1.cpp telah dibuat maka untuk menjalankannya
menggunakan g++compailer. Tetapi jika pada laptop g++ belum terinstall, maka
harus melakukan penginstallan terlebih dahulu dengan ketikkan pada terminal
sudo apt-get install g++.
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 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;
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 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
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:
Menggunakan editor vi untuk membuat file fork3.cpp. Isi dari file fork3.cpp
ialah untuk membuat dua proses sebanyak lima kali.
2. Gunakan
g++ compiler untuk menjalankan program diatas
$ g++ -o
fork3 fork3.cpp
$ ./fork3
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 parent menunggu sinyal dari proses child dengan system call wait
2.
Gunakan g++ compiler untuk menjalankan
program diatas.
$ g++ -o fork4
fork4.cpp
$ ./fork4
3. Amati
output yang dihasilkan
Analisa:
Digunakan untuk mencompile fork4.cpp yang dipakai untuk proses parent menunggu
sinyal dariproses child dengan system call wait. Dan outputnya seperti gambar
diatas.
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;
}
Analisa:
Membuat script file fork5.cpp yang akan digunakan untuk mengeksekusi ls.
2.
Gunakan g++ compiler untuk menjalankan
program diatas.
$ g++ -o fork5
fork5.cpp
$ ./fork5
3. Amati
output yang dihasilkan
Analisa:
Compile program fork5.cpp dan program ini digunakan untuk mengeksekusi program
bernama ls, menggunakan file executable /bin/ls dengan satu parameter –l yang
ekuivalen dengan ls –l.
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 tandabila 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
fork6 fork6.cpp
$ ./fork6
3. Amati
output yang dihasilkan
Analisa:
Compile file fork6.cpp untuk menjalankan program system call fork/exec dan wait
yang nantinya akan digunakan untuk mengeksekusi program lain. Yang isinya dalam
program ini seperti diatas. Dan disana juga menampilkan 2 proses yang berbeda.
Percobaan
7 : Melihat Manajemen Memory
1. Perhatikan dengan
perintah dmesg jumlah memory
tersedia dan proses
swapping
$ dmesg | more
Analisa:
Perintah dmesg digunakan untuk melihat jumlah memory tersedia dan proses
swapping.
2. 2.Dengan perintah freeperhatikan jumlah
memory ”free”, ”used”, “share” dan “buffer” . $ free
Analisa: Free
digunakan untuk mengetahui total memori yang 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. 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.
$ ls –lR /.
Analisa:
Perintah ls –lR /. digunakan untuk menampilkan isi dari suatu direktori
dengan menampilkan informasi file tersebut,
5. 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. 6. Jalankan
sebuah program, misalnya
open Office. Perhatikan perubahan manajemen memory
$ free
7. 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.
Program yang diubah adalah tulisan yang di blok pada gambar di atas.
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.1-12.1% dengan
kapasitas CPU yang digunakan sebesar 90.5%.
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 ?
b.
Informasi apa saja yang disimpan file /proc/meminfo
?
c. Berapa besar kapasitas
memory total ? 2035472 kB atau 2 GB.
d.
Berapa kapasitas memory yang sudah terpakai ? 210636
kB.
e.
Berapa kapasitas memory yang belum terpakai ? 477904
kB.
f. Berapa
kapasitas memory yang digunakan sharing beberapa proses ? 41416kB.
g.
Berapa kapasitas buffer cache ? 17740 kB.
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
http://nipmedia.blogspot.com/2010/01/perintah-dmesg-more.html
http://www.w3big.com/id/linux/linux-comm-dmesg.html
Komentar
Posting Komentar