Selasa, 29 November 2022

Praktikum 11 Manajemen User dan Group

Judul Laporan

"Praktikum 11 Manajemen User dan Group"

Pokok Bahasan

- Manajemen User
- Manajemen Group

Tujuan Belajar

Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
- Menambah, memodifikasi, dan menghapus user
- Menambah dan menghapus group

Abstrak

Dalam era perkembangan teknologi seperti saat ini, dunia memerlukan teknologi informasi yang dapat memudahkan kehidupan masyarakat. Untuk mencapai tujuan tersebut, Linus Torvalds mengembangkan sistem operasi yang secara umum merupakan sistem operasi sumber terbuka (open source). Sistem operasi yang dikembangkan itu ialah Linux. Linux merupakan sistem operasi yang bersifat open source, maksudnya ialah setiap pengguna Linux dapat menggunakannya tanpa menggunakan lisensi apapun dan juga dapat mengembangkannya menjadi distro (distribusi) Linux baru. Oleh karena itu, pada praktikum ini dilakukan percobaan menggunakan perintah-perintah untuk manajemen user dan group seperti menambah, memodifikasi, dan menghapus user serta menambah dan menghapus group. Praktikum dilakukan dengan menggunakan software virtualbox dari Oracle yang dijalankan di atas sistem operasi Windows 10. Dari percobaan mengeksekusi perintah-perintah untuk manajemen user dan group, diperoleh hasil percobaan yang sesuai dengan panduan praktikum yang telah disediakan.

Kata kunci : Sistem operasi, Linux, manajemen user, manajemen group, root user.

Teori Singkat

Pada Linux Red Hat, informasi tentang user account dan groups disimpan dalam beberapa  file  teks  dalam  direktory /etc/.    Jika  sistem  administrator  membuat  user  baru, file tersebut harus diedit atau aplikasi harus digunakan untuk perubahan tersebut.

1. File /etc/passwd
    File /etc/passwd  adalah  file  yang  berisi  daftar  user  yang  dipisahkan  dengan baris.  Setiap baris  berisi  informasi  mengenai:
- Username — nama user yang diketik saat login sistem
- Password  —  berisi  pasword  yang  di-enkripsi   (atau   x   bila   shadow  password digunakan)
- User  ID  (UID) —    bilangan  numerik  yang  ekuivalen  dengan  username  yang menjadi acuan sistem.
- Group ID (GID) —  bilangan  numerik  yang  ekuivalen  dengan  nama  group  primer  yang menjadi acuan sistem.
- GECOS —  nama  histori,  kolom  GECOS[1]  bersifat  opsional  dan  digunakan  untuk  menyimpan informasi tambahan (seperti nama lengkap user).
- Home directory — path absolut untuk home directory dari user.
- Shell —  program  yang  otomatis  dijalankan  bila  user  login.   Berupa  command intepreter (biasanya disebut shell)

Contoh isi file /etc/passwd:
root:x:0:0:root:/root:/bin/bash

    Baris diatas menunjukkan root user mempunyai shadow password, UID dan GID nya 0. User root mempunyai home directory /root/dan menggunakan shell /bin/bash.

2. FILE /etc/group
    File /etc/group adalah file yang berisi daftar group yang dipisahkan per baris.  Setiap  baris  terdiri  dari  4  kolom,  yang  berisi  informasi  mengenai:
- Group name —nama group.
- Group password —Bila  di-set,  mengijinkan  user  yang  bukan  bagian  dari  group bergabung  ke  dalam  group  dengan  menggunakan  printah  newgrp  dan  mengetikkan  password.  Jika lebih kecil dari x, maka shadow group password digunakan.
- Group ID (GID) —Bilangan numerik yang ekuivalen dengan group name.
- Member list —daftar user yang menjadi milik group.

Contoh baris pada file /etc/group:
general:x:502:juan,shelley,bob

    Baris  diatas  menunjukkan,  group  general  menggunakan  password  shadow,  mempunyai  GID 502 dan anggota juan, shelley dan bob.

3. APLIKASI USER ACCOUNT DAN GROUP
    Terdapat  dua  tipe  dasar  aplikasi  yang  digunakan  untuk  mengatur  user  account  dan group pada sistem Linux Red Hat : 
- Aplikasi Graphical User Manager
- Perintah pada virtual console
    
Baik  aplikasi  User  Manager  dan  utilitas  perintah  membentuk  task  yang  sama,  perintah  mempunyai kelebihan dalam skrip yang lebih mudah diotomatisasi. Tabel   berikut berisi   beberapa perintah   yang   umum   untuk   membuat   dan mengatur user command dan group:

Tabel berikut berisi beberapa perintah untuk membuat dan mengatur group :

Jawaban Pertanyaan Pendahuluan

1. Apakah dari file /etc/passwd ? Jelaskan isi dari satu baris pada file ini.

/etc/passwd berisi :
- Username — nama user yang diketik saat login system
- Password — berisi pasword yang di-enkripsi (atau x bila shadow password digunakan)
- User ID (UID) — bilangan numerik yang ekuivalen dengan username yang menjadi acuan sistem.
- Group ID (GID) — bilangan numerik yang ekuivalen dengan nama group primer yang menjadi acuan sistem.
- GECOS — nama histori, kolom GECOS[1] bersifat opsional dan digunakan untuk menyimpan informasi tambahan (seperti nama lengkap user).
- Home directory — path absolut untuk home directory dari user.
- Shell — program yang otomatis dijalankan bila user login. Berupa command intepreter (biasanya disebut shell)


2. Apakah dari file /etc/group ? Jelaskan isi dari satu baris pada file ini.

/etc/group berisi :
- Group name — nama group.
- Group password — Bila di-set, mengijinkan user yang bukan bagian dari group bergabung ke dalam group dengan menggunakan printah newgrp dan mengetikkan password. Jika lebih kecil dari x, maka shadow group password digunakan.
- Group ID (GID) — Bilangan numerik yang ekuivalen dengan group name.
- Member list — daftar user yang menjadi milik group.


3. Sebutkan   perintah   yang   digunakan   untuk   membuat   user   baru   dan   berikan contohnya.

Perintah untuk membuat user  baru  adalah useradd. Contohnya:
# useradd –g friend bob
# grep bob /etc/passwd
# useradd lili
# passwd lili
# grep lili /etc/passwd
# ls –l /home


4. Sebutkan   perintah   yang   digunakan   untuk   membuat   group   baru   dan   berikan contohnya.

Perintah untuk membuat group  user  baru  adalah  groupadd.    Contohnya  informasi  group user baru pada file /etc/group.
# groupadd friend
# groupadd classmate
# groupadd neighbour
# cat /etc/group


5. Sebutkan  perintah  yang  digunakan  untuk  menghapus  user  dan  group. Berikan contohnya.

1. Userdel. Perintah  yang  digunakan  untuk  menghapus  user adalah userdel. Contohnya:
# userdel –r bob
# userdel –r lili
# userdel –r jane
# userdel –r diane

2. Groupdel. Perintah  yang  digunakan  untuk  menghapus  user adalah groupdel. Contohnya:
# groupdel friend
# groupdel classmate
# groupdel neighbour


6. Apa yang dimaksud dengan perintah usermod dan groupmod?
1. Usermod. Perintah  usermod digunakan untuk   memodifikasi   group   dari   suatu   user.
# usermod –g classmate -G friend,neighbour bob
# usermod –g friend -G classmate lili

2. Groupmod. Perintah ini tidak terdapat di linux. Tetapi jika yang ditanya perintah groupadd maka perintah ini adalah  perintah untuk membuat/menambahkan group.

Percobaan dan Hasil serta Analisanya

Percobaan 1 : Melihat file /etc/passwd dan /etc/group

1. Lihatlah  isi  file  /etc/passwd  dan  sebutkan  kolom  apa  saja  yang  terdapat  pada setiap baris.

# cat /etc/passwd | more


2. Lihatlah isi file /etc/group dan sebutkan  kolom  apa  saja  yang  terdapat  pada  setiap baris.

# cat /etc/group | more


Percobaan 2 : Menambah group user

1. Buatlah  3  group  user  baru  dengan  perintah  groupadd.    Perhatikan  informasi  group user baru pada file /etc/group.

# groupadd friend

# groupadd classmate

# groupadd neighbour

# cat /etc/group



Percobaan 3 : Menambah User

1. Buatlah  user  baru  dengan  perintah  useradd.    Perhatikan  perubahan  isi  file /etc/passwd  setelah  pembuatan  user  baru.    Juga  perhatikan  apakah  home direktory setiap user juga dibuat pada saat pembuatan user baru

# useradd –g friend bob

# grep bob /etc/passwd

# useradd lili

# passwd lili

# grep lili /etc/passwd

# ls –l /home


2. Opsi –g pada perintah useradd untuk menentukan group dari user yang dibuat.

# useradd –g neighbour jane

# ls –l /home


Percobaan 4 : Memodifikasi group dari user

1.Dengan perintah  usermod,  modifikasi  group  dari  Setiap  user  merupakan  milih  suatu    group    primer    dan    kemungkinan    juga    bagian    dari    group    lain (supplementary   group). Untuk   memodifikasi   group   dari   suatu   user   dapat  digunakan  perintah  usermod.

# usermod –g classmate -G friend,neighbour bob

# usermod –g friend -G classmate lili


Percobaan 5 : Melihat group dari user

1. Lihat group dari seorang user dengan perintah groups.

# groups bob

# groups lili

# groups jane


Percobaan 6

1. Root dapat mengubah password dari user.

# passwd bob


2. Password  yang  diubah  dengan  perintah usermodmerupakan  file  enkripsi,  sehingga tidak dapat digunakan sebagai passwrod pada saat login.

# useradd –g friend diane

# usermod –p diane diane


3. Cobalah login sebagai diane, apakah anda dapat login ?

Analisa: Tidak dapat login sebagai diane, karena password diane diatur menggunakan usermod yang merupakan file enksripsi, sehingga tidak dapat digunakan sebagai password untuk login.

 

4. Cobalah  mengubah  password  user  dengan  login  pada  user  yang  bersangkutan. Login sebagai user, dan ubahlah password user.

$ passwd


Percobaan 7 : Melihat group dari user

1. Lihat group dari seorang user dengan perintah groups.

# userdel –r bob
userdel –r lili
userdel –r jane
userdel –r diane


Percobaan 8 : Menghapus group

1. Hapus  group dengan menggunakan perintah userdel.

# groupdel friend

# groupdel classmate

# groupdel neighbour


Percobaan 9 : Menghapus home directory

1. Hapus home direktory.

# rmdir /home/bob

# rmdir /home/lili

# rmdir /home/jane

# rmdir /home/diane



LATIHAN:

1. Buatlah tiga group “parent”, “children” dan “soho”. Perhatikan anggota dari setiap grup berikut: 
Parents    Children    Soho
Paul       Alice       Accounts
Jane       Derek       Sales


2. Buatlah user account untuk setiap anggota  group  sesuai  tabel  diatas.


3. Cek apakah home direktory yang terbentuk sesuai dengan  tabel  diatas


4. Ubahlah password Paul dan Derek melalui root.


5. Cobalah mengubah password Alice dengan login sebagai Alice


6. Lihat keanggotaan dari setiap user.


7. Hapuslah user Account dan Sales.


Kesimpulan

Sistem operasi Linux merupakan sistem operasi open source yang dapat digunakan dan dikembangkan secara bebas tanpa lisensi. Bagi sebagian orang, Linux terasa lebih sulit daripada Windows karena kurang familiar di kalangan masyarakat umum. Meski begitu, sistem operasi Linux tetap banyak digemari khususnya oleh para pegiat teknologi, misalnya system administrator, developer, devops engineer, network engineering, dan cyber security. Pada praktikum 11 ini telah dilakukan percobaan menggunakan perintah-perintah untuk manajemen user dan group seperti menambah, memodifikasi, dan menghapus user serta menambah dan menghapus group. Untuk dapat menambah, menghapus atau mengelompokkan user baru harus login sebagai root (#) , jadi seorang user tidak dapat memodifikasi user lain, begitu pula dengan group. Dengan dilaksanakannya praktikum ini diharapkan dapat menambah pemahaman dan keterampilan dalam manajemen user dan group.

Daftar Pustaka / Referensi





Senin, 07 November 2022

Praktikum 7 Unix System Call dan Manajemen Memori

Judul Laporan

"Laporan Praktikum 7 Unix System Call dan Manajemen Memori"

Pokok Bahasan

- UNIX System Call
- Manajemen Memori

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 memori

Abstrak

Dalam era perkembangan teknologi seperti saat ini, dunia memerlukan teknologi informasi yang dapat memudahkan kehidupan masyarakat. Untuk mencapai tujuan tersebut, Linus Torvalds mengembangkan sistem operasi yang secara umum merupakan sistem operasi sumber terbuka (open source). Sistem operasi yang dikembangkan itu ialah Linux. Linux merupakan sistem operasi yang bersifat open source, maksudnya ialah setiap pengguna Linux dapat menggunakannya tanpa menggunakan lisensi apapun dan juga dapat mengembangkannya menjadi distro (distribusi) Linux baru. Oleh karena itu, pada praktikum ini dilakukan percobaan menggunakan perintah-perintah untuk system call dan manajemen memori. Praktikum dilakukan dengan menggunakan software virtualbox dari Oracle yang dijalankan di atas sistem operasi Windows 10. Dari percobaan mengeksekusi perintah-perintah untuk system call dan manajemen memori, diperoleh hasil percobaan yang sesuai dengan panduan praktikum yang telah disediakan.

Kata kunci : Sistem operasi, Linux, system call, memory management, C++.

Teori Singkat

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.

Jawaban Pertanyaan Pendahuluan

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 dan Hasil serta Analisanya

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



 2. Gunakan g++ compiler untuk menjalankan program diatas

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

3. Amati output yang dihasilkan


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



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

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


2. Gunakan g++ compiler untuk menjalankan program diatas

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

3. Amati output yang dihasilkan

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

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

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



2. Gunakan  g++  compiler  untuk  menjalankan  program  diatas.   

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

3. Amati output yang dihasilkan


Percobaan 7 : Melihat Manajemen Memory
1. Perhatikan   dengan   perintah dmesg   jumlah   memory   tersedia   dan   proses  swapping

$ dmesg | more

2. Dengan perintah freeperhatikan 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 setiap proses diatas ?

$ ps-uax


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

a. ls –al /etc.

b. cat fork2

c. ./fork2


2. Informasi  apa  saja  mengenai  manajemen  memory  yang  ditampilkan  pada  perintah dmesg pada percobaan Anda? 
Perintah dmesg digunakan untuk melihat jumlah memory tersedia dan proses swapping.

3. Bagaimana  informasi  yang  ditampilkan  dengan  perintah  free  pada  percobaan Anda ?
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.

4. Apa isi file /proc/meminfo pada percobaan yang Anda lakukan ?
Dalam percobaan dengan perintah cat /proc/meminfo berbeda dengan nomer 2 percobaan 7 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.

5. Berapa  besar  memory  yang  digunakan  setelah  percobaan  7  dengan  perintah  ps –uax ? 
Berdasarkan hasil yang ditunjukkan pada gambar dibawah, dapat diketahui besar memori yang digunakan setelah percobaan 7 dengan perintah ps -uax yaitu sebesar 0,2%

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 ? 1519192 kB atau 1,5 GB.

d. Berapa kapasitas memory yang sudah terpakai ? 124232 kB.

e. Berapa kapasitas memory yang belum terpakai ? 655416 kB.

f. Berapa kapasitas memory yang digunakan sharing beberapa proses ? 5412 kB.

g. Berapa kapasitas buffer cache ? 54836 kB.

Kesimpulan

Sistem operasi Linux merupakan sistem operasi open source yang dapat digunakan dan dikembangkan secara bebas tanpa lisensi. Bagi sebagian orang, Linux terasa lebih sulit daripada Windows karena kurang familiar di kalangan masyarakat umum. Meski begitu, sistem operasi Linux tetap banyak digemari khususnya oleh para pegiat teknologi, misalnya system administrator, developer, devops engineer, network engineering, dan cyber security. Pada praktikum 7 ini telah dilakukan percobaan menggunakan perintah-perintah system call dan manajemen memori. 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. 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). 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. Dengan dilaksanakannya praktikum ini diharapkan dapat menambah pemahaman mengenai system call dan manajemen memori.

Daftar Pustaka/Referensi