Rabu, 25 November 2020

Sistem File : Praktikum 8

 

PRAKTIKUM 8 
Sistem File


  File : Praktikum 8

Pokok Bahasan :

- Sistem File


Tujuan Belajar

- Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:

- Memahami atribut file dan ijin akses

- Memahami perintah untuk mengubah ijin akses suatu file

- Menggunakan perintah-perintah untuk mengubah ijin akses


Dasar Teori

1. ATRIBUT FILE

File mempunyai beberapa attribute, antara lain :

a. Tipe file : menentukan tipe-tipe dari file, antara lain :


b. Ijin akses         : menentukan hak user terhadap file ini.

c. Jumlah link         : jumlah link untuk file ini.

d. Pemilik (owner) : menentukan siapa pemilik file ini.

e. Group         : menentukan group yang memiliki file ini.

f. Jumlah karakter : menentukan ukuran file dalam byte.

g. Waktu pembuatan   : menentukan kapan file terakhir dimodifikasi.

h. Nama file : menentukan nama file yang dimaksud.

Contoh:


2. IJIN AKSES

Setiap obyek pada Linux harus mempunyai pemilik, yaitu nama pemakai Linux (account) yang terdaftar pada /etc/passwd.

Ijin akses dibagi menjadi 3 peran yaitu :

Pemilik (Owner)

Kelompok (Group)

Lainnya (Others)

Setiap peran dapat melakukan 3 bentuk operasi yaitu:

Pada File

        R (Read)               = Ijin untuk membaca.

        W (Write)             = Ijin untuk mengubah/membuat.

        X (Execute)          = Ijin untuk menjalankan program.


Pada Direktori

        R (Read)              = Ijin untuk membaca daftar file dalam direktori.

        W (Write)             = Ijin untuk mengubah/membuat file di direktori.

        X (Execute)          = Ijin untuk masuk ke direktori (cd).

Pemilik File/Direktori dapat mengubah ijin akses sebagai berikut :


Format untuk mengubah ijin akses :

chmod [ugoa] [= + -] [rwx] File(s)

chmod [ugoa] [= + -] [rwx] Dir(s)

dimana :

u = user (pemilik)

g = group (kelompok)

o = others (lainnya)

a = all

Format lain dari chmod adalah menggunakan bilangan octal sebagai berikut :

                             r    w    x

              4    2    1    =    7


3. USER MASK

Untuk menentukan ijin akses awal pada saat file atau direktori yang dibuat digunakan perintah umask. Untuk menghitung nilai default melalui umask pada file, maka dapat dilakukan kalkulasi sebagai berikut :

Kreasi file (biasa)             622

Nilai umask                      022

                                         ----- -

                                          644


 Kreasi direktori                777

Nilai umask                      022

                                         ----- -

                                         755


Tugas Pendahuluan

1. Apa saja atribut file? Berikan contoh file dengan tipe file yang disebutkan pada dasar teori.

Jawab : 

File mempunyai beberapa atribut, antara lain :

a. Tipe file

b. Ijin akses = menentukan hak user terhadap file ini.

c. Jumlah link = jumlah link untuk file ini.

d. Pemilik (owner) = menentukan siapa pemilik file ini.

e. Group = menentukan group yang memiliki file ini.

f. Jumlah karakter = menentukan ukuran file dalam byte.

g. Waktu pembuatan`= menentukan kapan file terakhir dimodifikasi.

h. Nama file = menentukan nama file yang dimaksud

Contoh:


2. Apa yang dimaksud ijin akses? Bagaimana contoh penggunaan perintah chmod untuk mengubah ijin akses.

Jawab:

Ijin akses adalah Setiap obyek pada Linux harus mempunyai pemilik, yaitu nama pemakai Linux (account) yang terdaftar pada /etc/passwd.

Format untuk mengubah ijin akses :

chmod [ugoa] [= + -] [rwx] File(s)

chmod [ugoa] [= + -] [rwx] Dir(s)

dimana :

u = user (pemilik)

g = group (kelompok)

o = others (lainnya)

a = all

Format lain dari chmod adalah menggunakan bilangan octal sebagai berikut :

                          r    w    x

            4    2    1    =    7


 3. Berilah contoh penggunaan perintah umask untuk mengubah ijin akses.

Jawab:

Untuk menentukan ijin akses awal pada saat file atau direktori dibuat digunakan perintah umask. Untuk menghitung nilai default melalui umask pada file, maka dapat dilakukan kalkulasi sebagai berikut :

Kreasi file (biasa)             622

Nilai umask                      022

                                         ----- -

                                         644


Kreasi direktori                777

Nilai umask                      022

                                         ----- -

                                         755


Percobaan 1: Ijin Akses

1. Melihat identitas diri melalui etc/passwd atau etc/group, informasi apa ditampilkan ?

Analisa : 

Perintah diatas ini dapat melihat identitas diri yang sedang aktif  dengan perintah $ id yang mengakses file /etc/passwd. Pada perintah tersebutterlihat id yaitu 1000 dengan id group 1000.

2. Memeriksa direktori home

Analisa:

Perintah diatas ini menampilkan informasi jenis direktori /home/adhila yaitu drwxr-----. D untuk direktori, R read, W untuk write, dan X untuk eksekusi dengan nilai oktal 1. Perintah tersebut menandakan bahwa user/ pemiliki direktori/ home/adhila dapat melakukan akses read write dan eksekusi

3. Mengubah ijin akses (chmod). Perhatikan ijin akses setiap perubahan!

Analisa:

Pada percobaan tersebut ditampilkan cara mengubah izin akses dengan perintah chmod

4. Mengganti kepemilikan digunakan perintah Chown. Masuk ke root untuk mengganti kepemilikan tersebut

Analisa:

Perintah su root yaitu masuk menggunakan sistem pc sebagai root, lalu membuat sebuah user baru dengan nama adhila1, dan mengubah adhila sebagai adhila1.

5. Ubahlah ijin akses home directory <user> (student) pada root sehingga <userbaru> (student1) pada satu group dapat mengakses home directory <user>. Hal ini dimaksudkan agar file f1 yang sudah diubah kepemilikannya dapat diakses <user baru>. Perubahan ijin akses home directory <user> hanya dapat dilakukan pada root.

Analisa:

Perintah diatas merubah izin akses agar bisa diakses 1 group dengan menambahkan izin read dan write pada /home/adhila. 

6. Sekarang cobalah untuk subtitute user ke <user-baru> (student1). Cobalah untuk mengakses file f1

Analisa:

Perintah diatas menujukan bahwa user baru bernama adhila1 dapat mengakses file f1 dan dapat memodifikasinya karena perintah ijin sebelumnya.

7. Mengubah group dengan perintah chgrp

Analisa:

Perintah diatas dapat membuat dan mengubah grup baru seperti membuat user baru yaitu dengan add group <group_name>. Sedangkan untuk mengubah grup dapat menggunakan perintah chgrp.


Percobaan 2: User Mask

1. Menentukan ijin akses awal pada saat file atau direktori dibuat

Analisa:

Perintah diatas dapat menentukan ijin akses awal file yang baru dibuat dengan perintah

touch myfile, sehingga info filetersebut mempunyai hak akses – rw-r — r —.

2. Melihat nilai umask

Analisa:

Perintah diatas untuk melihat nilai umask (user mask)setelah myfile pertama kali dibuat , dengan perintah umask, kita dapat menentukan sendiri atribut default untuk file/direc yang dibuat. Nilai umask dari file myfile yaitu 0022.

3. Modifikasi nilai umask


Analisa:

Perintah diatas dapat melihat nilai umask dan dapat merubah atau menentukan sendiri nilai umask file/direktori yang pertama kita buat dengan $ umask <nilai umask>.


LATIHAN

1. Lakukan tiga cara berbeda untuk setting ijin akses ke file atau direktori menjadi r — r  — r  — . Buatlah sebuah file dan lihat apakah yang anda lakukan benar.

Cara 1 dengan menggunakan mode numeric


Analisa:

Hak akses file latihan1 user hanya dapat membaca dan mengubah, agar bisa menjadi read semua maka saya menggunakan perintah chmod 444 latihan1

Cara 2 dengan menggunakan mode symbol


Analisa:

Menggunakan perintah chmod u=r--,g=r--,o=r--.

Cara 3 dengan menggunakan perintah umask


Analisa:

Nilai umask pada file latihan_1 awalnya 0022.

2. Buatlah kelompok. Copykan bin/sh ke home directory. Ketik “chmod +s sh. Cek ijin akses sh pada daftar direktori. Sekarang tanyakan keteman satu kelompok anda untuk mengubah ke home direktori andadan menjalankan program.

Analisa:

Perintah chmod +s sh adalah perintah untuk mengubah file sh yang tadinya executable file menjadi socket link yang dapat dilihat perbedaannya saat kita lakukan perintah ls –l sh. Selain itu perintah diatas juga menentukan hak izin akses untuk pengguna lain yang menggunakan file ini. Sedangkan perintah ./sh memberikan izin layaknya pemilik untuk dapat menjalankannya dan untuk mengakhiri menggunakan perintah exit .

3. Hapus sh dari home directory (atau setidaknya kerjakan perintah chmod – s sh).

Analisa:

Perintah chmod –s sh ini dapat menghapus atau mengembalikan bentuk file yang telah diubah menjadi socket link ke mode sebelumnya, yang mana kita menghapus hak izin akses kepada pengguna lain untuk file ini .

4. Modifikasi izin akses ke home direktori anda sehingga sangat privat. Cek apakah teman anda tidak dapat mengakses direktori anda. Kemudain kembalikan ijin akses ke semula.


Analisa:

Perintah chmod 000 tersebut merupakan perintah untuk menghapus/menghentikan semua izin akses yang ada pada home directory. Untuk membuktikannya dapat dilakukan dengan perintah ls –l /home/ . Sedangkan cara mengembalikannya ke mode semula yaitu dengan perintah chmod 755.

5. Ketikkan umask 000 dan kemudian buatlah file yang bernama world.txt yang berisi beberapa kata “hello world”. Lihat izin akses file, apa yangterjadi ? sekarang ketikkan umask 022 dan buatlah file bernama world2.txt apakah perintah tersebut lebih berguna ?


Analisa:

Perintah mask 000 berfungsi untuk mengatur izin akses file yang akan dibuat setelahnya dengan format pemberian izin akses untuk dapat membaca dan menulis atau melakukan perubahan yang ditandai dengan format –rw-rw-rw-. Sedangkan untuk perintah umask 022 dilihat dari nomor octalnya maka dapat ditentukan file izin akses menjadi –rw-r—r. Karena 2 adalah bilangan octal dari read (r)

6. Buatlah file yang bernama “Hello.txt” pada home direktori menggunakan perintah cat –u > hello.txt. tanyakan ke teman anda untuk masuk ke home direktori anda dan menjalankan tail –f hello.txt sekarang ketikkan beberapa baris dalam hello.txt apa yang terjadi ?


Analisa:

Perintah diatas merupakan perintah standar input dan output . Misalnya perintah cat –u > hello.txt ini merupakan perintah pembelokkan standar output ke file hello.txt


KESIMPULAN

Pada kedua praktikum kali ini terbagi menjadi 3 bagian. Atribut File, Ijin Akses, dan User Mask yang ada pada Sistem Operasi Linux yang bila disimpulkan didapatkan hasil :

1. Pada Ijin akses setiap obyek pada Linux harus mempunyai pemilik, yaitu nama pemakai Linux(account) yang terdaftar pada /etc/passwd.

2. Pada User Mask, untuk menentukan ijin akses awal pada saat file atau direktori dibuat. 

3. Sebuah file dapat kita manajemen atau dapat kita atur sesuai dengan tingkat keamanan yang ingin kita tentukan pada file


 






Minggu, 22 November 2020

Unix System Call dan Manajemen Memory : Praktikum 7

 

PRAKTIKUM 7 
Unix System Call dan Manajemen Memory


  File : Praktikum 7

Pokok Bahasan :

  UNIX System Call

 Manajemen Memori 


Tujuan Belajar :

Setelah mempelajari materi dalam bab ini, praktikan diharapkan mampu:

Menggunakan system call fork, wait dan execl pada Linux.

Menggunakan perintah-perintah untuk manajemen memory.


Dasar Teori :

1. UNIX SYSTEM CALL 

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


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

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

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

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

1. Apa yang dimaksud dengan system call ?

Jawab:

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

Jawab:

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 ?

Jawab: 

Virtual memory adalah suatu teknik penggunaan disk memori sebagai ekstensi RAM sehingga ukuran memori RAM bertambah. Kernel akan menulis isi blok memori yang saat ini tidak digunakan ke hard disk sehingga memori dapat digunakan untuk tujuan lain. Ketika memori diperlukan lagi, maka memori tersebut dikembalikan fungsinya.

Swapping adalah suatu metode pengalihan proses yang bersifat sementara dari memori utama ke suatu tempat penyimpanan sementara (disk) dan dipanggil kembali ke memori jika akan melakukan eksekusi. 

Buffer cache adalah memori yang digunakan untuk menyimpan informasi yang hanya bersifat sementara (temporary).

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

Jawab:

Perintah free digunakan untuk menampilkan total memory yang tersedia.

Cat /proc/meminfo memiliki fungsi yang sama dengan perintah free, hanya saja informasi yang ditampilkan lebih lengkap.

5. Apa yang dimaksud perintah ps ?

Jawab:

Perintah ps adalah perintah yang digunakan untuk menampilkan proses yang sedang aktif dan berjalan di sistem.


Percobaan 1: Melihat proses parent dan proses child

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

Analisa : 

Proses child merupakan duplikat dari proses parent. Nilai yang dihasilkan fork() disimpan dalam variable pid_t yang berupa nilai integer. Pada proses parent, fork() menghasilkan pid dari proses child jika sebuah proses child dibuat. Pada proses child, fork() selalu menghasilkan 0. 

Perintah getpid() adalah system call yg dideklarasikan pada unistd.h. Menghasilkan suatu nilai dengan type pid_t. pid_t adalah type khusus untuk process id yang ekuivalen dengan integer. Sleep adalah system call atau fungsi library yang menghentikan proses ini dalam detik

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

$ g++ -o fork1 fork1.cpp

$ ./fork 1

Analisa : 

Perintah tersebut untuk melihat proses parent dan proses child pada fork(). Output yang dihasilkan adalah program akan melakukan perulangan output sebanyak tiga kali karena i dimulai dari 0 dan kurang dari 3 sehingga (0, 1, 2 menjadi tiga ouput).

3. Amati output yang dihasilkan.

Analisa:

Program diatas adalah program yang bertujuan untuk melihat proses parent dan proses child. Salah satu cara melihatnya yaitu dengan melihat pid (process identifier) dan ppid (parent process identifier) dari proses. Untuk mendapatkan nilai pid dan ppid, maka menggunakan fungsi getpid() dan getppid() yang dideklarasikan pada unistd.h. Kedua fungsi tersebut akan mengembalikan nilai bertipe pid_t yang merupakan sebuah type khusus untuk process id yang ekuivalen dengan integer.

Dapat dilihat dengan menggunakan perinth ps bahwa proses ./fork1 memiliki pid 2457 dan ppid nya adalah 1792 yang merupakan proses bash. Selain itu, pada program ini juga digunakan fungsi getuid() untuk mendapatkan id dari user yang menjalankan dan fungsi sleep() yang menghentikan proses dalam detik.


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 :

Analisa:

    Perintah tersebut membuat dua proses terus menerus dengan sebuah system call fork(). System call fork adalah suatu system call yang membuat suatu proses baru pada system operasi UNIX. 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 parent 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.

    Perintah getpid() adalah system call yg dideklarasikan pada unistd.h. Menghasilkan suatu nilai dengan type pid_t. pid_t adalah type khusus untuk process id yang ekuivalen dengan integer. Sleep adalah system call atau fungsi library yang menghentikan proses ini dalam detik.

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 fork2 fork2.cpp

$ ./fork2

Analisa:

Output yang dihasilkan adalah a program akan melakukan perulangan output sebanyak tak terhingga dimana nilai x dimulai dari 5 dan nilai x akan terus bertambah dikarenakan x++

3. Amati output yang dihasilkan:

Analisa:

Dapat dilihat bahwa pada percobaan ini, yang merupakan child process adalah proses dengan pid 2598, sedangkan yang merupakan parent process adalah proses dengan pid 2597. x berfungsi untuk menghitung berapa kali loop telah terjadi. Jika dilihat dari urutan cetakannya, dapat dlihat bahwa walaupun mereka melakukan proses yang sama, parent process selalu berjalan terlebih dahulu sebelum child process. Program ini akan melakukan loop secara terus menerus tanpa henti. Untuk menghentikannya, maka harus dihentikan secara paksa dengan interupsi menggunakan ctrl+c.


 Percobaan 3: Membuat dua proses sebanyak lima kali

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

Analisa:

Perintah tersebut untuk membuat dua proses sebanyak lima kali. Perintah getpid() adalah system call yg dideklarasikan pada unistd.h. Menghasilkan suatu nilai dengan type pid_t. pid_t adalah type khusus untuk process id yang ekuivalen dengan integer. Sleep adalah system call atau fungsi library yang menghentikan proses ini dalam detik.

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 fork3 fork3.cpp

$ ./fork3

Analisa:

Output yang dihasilkan adalah program akan melakukan perulangan output sebanyak lima kali karena i dimulai dari 0 dan kurang dari 5 sehingga (0, 1, 2, 3, 4 menjadi lima ouput). Nomor pid akan dipanggil pada baris program “cout << "This is process " <<

getpid() << endl;”.

3. Amati output yang dihasilkan:

Analisa:

Program ini hampir sama dengan program fork1, hanya saja bedanya pada program ini loop yang dilakukan dibatasi hingga 5 kali saja, tidak infinite. Pada percobaan ini, dapat dilihat bahwa yang merupakan child process adalah proses dengan pid 2697, sedangkan yang merupakan parent process adalah proses dengan pid 2696. Selain itu, disini terbukti kembali bahwa walaupun mereka melakukan proses yang sama, parent process selalu berjalan terlebih dahulu sebelum child process jika dilihat dari urutan cetakannya.


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 :

Analisa:

Perintah ini untuk proses parent menunggu sinyal dari proses child dengan 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. pid_t fork() dideklarasikan pada unistd.h. pid_t adalah type khusus untuk process id yang ekuivalen dengan integer.

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 fork4 fork4.cpp

$ ./fork4


Analisa:

Dari baris program dan output di atas dapat dilihat bahwa program akan memeriksa kondisi child_pid dimana child_pid adalah nomor pid id proses dan jika kondisi memenuhi maka proses akan dieksekusi dan jika kondisi tidak memenuhi maka akan muncul sebuah output yaitu "The fork system call failed to create a new process”

3. Amati output yang dihasilkan 

Analisa:

Jika pada program-program sebelumnya proses child dan parent menjalankan baris yang sama, maka pada program ini kedua proses tersebut menjalankan baris yang berbeda. Hal ini dapat dilakukan dengan pengondisian if...else pada hasil pengembalian system call fork. Pada child process, fork akan mengembalikan nilai 0, sedangkan pada parent process, fork akan mengembalikan nilai bilangan positif berupa pid dari process child. Namun, jika process child, gagal terbentuk, fork akan mengembalikan nilai -1. Dengan mengetahui return value dari fork, maka kita bisa membagi pengerjaan proses parent dan child menggunakan pengondisian if...else. Karena parent process akan berjalan terlebih dahulu sebelum child process, maka kita harus membuat parent process untuk berhenti sementara hingga child process selesai berjalan. Disitulah kegunaan system call wait() dibutuhkan. Wait dilakukan di dalam loop do...while, selama hasil return value dari wait tidak sama dengan pid proses child, maka proses parent akan terus melakukan waiting.


Percobaan 5: System call fork/exec dan wait mengeksekusi program bernama ls, menggunakan file executable /bin/ls dengan satu parameter –l yang ekuivalen dengan ls –l

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

Analisa:

Perintah tersebut menggunakan 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. Gunakan g++ compiler untuk menjala nkan program diatas. Pada saat dijalankan, program tidak akan pernah berhenti. Untuk menghentikan program tekan Ctrl+C.

$ g++ -o fork5 fork5.cpp

$ ./fork5

Analisa:

Dari baris program dan output di atas dapat dilihat bahwa program akan memeriksa kondisi child_pid dimana child_pid adalah nomor pid id proses. Dan jika kondisi pada if pertama memenuhi maka output akan menampilkan direktori beserta waktu dan user pengguna.

3. Amati output yang dihasilkan 

Analisa:

Program ini akan melakukan forking dan proses child akan menjalankan perintah ls -l. Hal ini dapat dilakukan dengan menjalankan system call execl pada proses child. Execl merupakan system call yang berfungsi untuk mengeksekusi file. Pada kasus ini, child process mengeksekusi perintah ls yang filenya berada di /bin/ls dengan argumen -l dan /home. Fungsi execl dapat dimasukkan banyak paremeter. Namun, parameter utama yang harus dimasukkan ada 3, yaitu path dari file yang akan dieksekusi, argumen perintah (bisa lebih dari satu), dan NULL (sebagai penanda akhiran dari argumen). System call execl akan mengganti process image sebelumnya dengan process image yang baru. Sehingga jika execl berhasil dijalankan oleh proses child dan diterminasi, proses child tersebut juga akan ikut diterminasi. Namun jika execl gagal dijalankan, maka proses child akan tetap berjalan. Itulah mengapa baris proses child dibawah execl pada percobaan diatas tidak dijalankan.


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

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

Analisa:

Perintah ini untuk System call fork/exec dan wait mengeksekusi program lain. 

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 fork6 fork6.cpp

$ ./fork6

Analisa:

Dari baris program dan output di atas dapat dilihat bahwa program akan memeriksa kondisi child_pid dimana child_pid adalah nomor pid id proses. Dan jika kondisi pada if pertama memenuhi maka output akan menampilkan file fork3.cpp dan melanjutkan pemeriksaan pada kondisi if lalu dieksekusi untuk ditampilkan pada output.

3. Amati output yang dihasilkan 

Analisa:

Pada program ini, proses child mengeksekusi program lain (fork3) dengan menggunakan

system call execl. Pada percobaan diatas, proses dengan pid 3200 adalah proses parent, sedangkan proses dengan pid 3201 adalah proses child. Namun, saat proses child menjalankan execl dan mengeksekusi fork3, proses dengan pid 3201 pada program fork3 akan menjadi proses parent, dan ia membuat proses child baru dengan pid 3202. Selain itu, system calls execl diberi argumen “goose”, itulah mengapa pada saat dijalankan ps, proses fork3 bernama goose.


Percobaan 7: Melihat Manajemen Memory

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

$ dmesg | more

Analisa :

dmesg digunakan untuk mencetak atau mengontrol buffer ring kernel. Di dalam informasi yang dicetak oleh dmesg, terdapat jumlah RAM tersedia setelah kernel di-load ke memory. Dapat dilihat diatas bahwa jumlah memori yang tersedia 4002016K (kilobyte) dari total memori 4193848K (kilobyte).

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

$ free

Analisa :

Perintah free digunakan untuk menampilkan total memory yang tersedia. Memory fisik dan ruang swap ditampilkan disini. 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 diindikasikan “shared” yaitu berapa banyak memory yang digunakan lebih dari satu proses. Kolom “buffers” menampilkan berapa banyak memory digunakan untuk disk buffering.

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

$ cat /proc/meminfo

Analisa :

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

4. Gunakan perintah dibawah ini

$ ls –lR /. 

Analisa :

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

5. Perhatikan perubahan manajemen memory

$ free

Sebelum:


Sesudah:


Analisa :

Perubahan yang terjadi ada pada Memory “Used” yang berkurang, Memory “Free” yang berkurang, Memory “buffer” yang bertambah dan Memory “Available” yang bertambah.

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

$ free

Analisa :

Saya menjalankan program “Firefox”. Perubahan yang terjadi adalah Memori “Used” menjadi lebih besar. Memori “Free” menjadi lebih kecil, Memori “shared”’ menjadi lebih besar, Memori “buffer” menjadi lebih besar, dan Memori “available” menjadi berkurang.

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

$ ps –uax

Analisa :

Penggunaan memory terbesar saat membuka firefox yaitu 6,4%. Sedangkan untuk perintah yang lain tidak sampai 1%. 


LATIHAN

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

a. ls –al /etc.


Hasil:


Analisa:

Setelah program dijalankan, Perintah untuk menampilkan ls-al atau melihat seluruh isi file pada direktori aktif beserta file hidden dijalankan

b. cat fork2


Hasil:

Analisa:

Setelah program dijalankan, Perintah untuk menampilkan cat fork2 yang dimana file fork2.cpp dicopy kedalam file fork5.cpp.

c. ./fork2


Hasil:


Analisa:

Setelah program dijalankan, Perintah untuk menampilkan hasil dari fork2.cpp dimana Output yang dihasilkan adalah a program akan melakukan perulangan output sebanyak tak terhingga dimana nilai x dimulai dari 5 dan nilai x akan terus bertambah dikarenakan x++ pada program fork2.cpp.

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


Analisa:

Informasi yang ditampilkan mengenai manajemen memori pada dmesg adalah

banyaknya memori yang tersedia adalah 4002016K (kilobyte) dari total memori 4193848K(kilobyte). Beserta rinician penggunaan memori tersebut seperti kernel code, rwdata (read-write), rodata (read-only), init, bss, reserved (memori cadangan), dan cma-reserved.

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


Analisa:

Total : Adalah jumlah memori yang tersedia setelah load kernel.

Used : Adalah memory digunakan untuk proses atau disk bufferring atau yang sudah terpakai

Free : Adalah memory yang sedang tidak digunakan

Shared : Adalah seberapa banyak memory yang digunakan lebih dari satu proses

Buff/cache : Adalah menampilkan berapa banyak memory digunakan untuk disk buffering

Available : Menampilkan perkiraan dari total memori yang siap digunakan untuk menjalankan            program baru tanpa dilakukannya swapping.

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

Analisa:

Perintah /proc/meminfo hampir sama dengan hasil pada free. Hanya saja bedanya cat /proc/meminfo menampilkan lebih banyak informasi daripada free.

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

Analisa:

Penggunaan memory terbesar saat membuka firefox yaitu 6,4%. Sedangkan untuk perintah yang lain tidak sampai 1%. Yang jika ditotal sekitar 10 – 20%.

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 :

Saya membuka firefox pada linux :

a. Informasi apa saja yang ditampilkan dengan perintah free ?

Analisa:

Informasi yang ditampilkan yaitu ada total, used, free, shared, buff/cache dan available dari memori itu sendiri

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



c. Berapa besar kapasitas memory total ?

Jawab:

Kapasitas memory total adalah 4041712K (kilobyte)

d. Berapa kapasitas memory yang sudah terpakai ?

Jawab:

Kapasitas memory yang sudah terpakai adalah 612108K (kilobyte)

e. Berapa kapasitas memory yang belum terpakai ?

Jawab:

Kapasitas memory yang belum terpakai adalah 2153704K (kilobyte)

f. Berapa kapasitas memory yang digunakan sharing beberapa proses ?

Jawab:

Kapasitas memori yang digunakan sharing beberapa proses adalah 39368K (kilobyte)

g. Berapa kapasitas buffer cache ?

Jawab:

Kapasitas dari buffer cache adalah 1021180K (kilobyte)



KESIMPULAN

Pada kedua praktikum kali ini terbagi menjadi 2 bagian. Bagian pertama Unix System Call yang  terdapat System Call Fork, System Call Wait, dan System Call Execl. Bagian kedua Manajemen Memory yang ada pada Sistem Operasi Linux yang bila disimpulkan didapatkan hasil :

1. System call fork adalah suatu system call yang membuat suatu proses baru pada system operasi UNIX. Pada percobaan menggunakan program fork().

2. Program yang berisi fungsi fork() menghasilkan 2 proses. Proses yang memanggilnya atau proses asal disebut proses parent. Proses baru atau proses kedua disebut sebagai proses child.

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

4. System Call Execl berfungsi untuk mengekseskusi sebuah file dengan memberi parameter berupa path file dan argumen-argumen perintah file. Dengan kata lain, mengubah segala sesuatunya sehingga program mulai mengeksekusi dari file yang berbeda.

5. Pada 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. 

6. Pada Manajemen Memory, jika tidak terdapat cukup memory fisik, kernel melakukan swapping beberapa page lama ke disk. 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.