Unix

10

Click here to load reader

Transcript of Unix

Page 1: Unix

Kata Pengantar

Daftar Isi

Bab 1 Pendahuluan

Sistem operasi Unix digunakan secara luas baik sebagai server atau workstation. Arsitektur Unix dan

model client/server merupakan elemen yang paling penting dalam perkembangan internet dan

mengubah proses komputasi secara terpusat dalam jaringan dari pada proses tunggal di komputer.

Linux, merupakan sistem operasi yang diadopsi dari Unix dan tersedia secara bebas mendapat

popularitas sebagai alternatif dari sistem operasi proprietary seperti Microsoft Windows.

UNIX memiliki tujuan dalam Computer Networking, maka kemapuan dari Unix dalam memberikan

jasa internet lebih berkembang dan lebih reliable. Banyak orang mengatakan bahwa ber-network-ria

dengan Unix lebih cepat dibandingkan dengan sistem operasi lainnya. Tetapi hal ini relatif, dikatakan

relatif karena banyak faktor yang menetukkan performasi network dan tidak semudah itu untuk

dibandingkan.

Saat ini Unix sudah tidak terbatas sebagai komputer server / pemberi layanan internet. Sekarang Unix

sudah mampu menggantikan fungsi Windows sebagai komputer Workstation / alat untuk bekerja

sehari-hari, dan lebih stabil. Hal ini disebabkan oleh perkembangan Unix yang mulai terlihat

propeknya sebagai sistem operasi Workstation juga, tanpa meninggalkan arah perkembangan dalam

Computer – Networking.

Unix lebih stabil dibandingkan sistem opersi lainnya, hal ini disebabkan konsep dan proses

pembuatan karnel. Salah satu bukti kestabilan Unix, Unix tidak pernah mengalami kegagalan sistem

yang disebabkan oleh sistem operasi tersebut.

Page 2: Unix

BAB II ISI

2.1 Konsep dasar proses

Prinsip dasar dari manajemen proses UNIX adalah memisahkan dua operasi untuk membuat proses

dan menjalankan program baru. Proses baru dibuat dengan fungsi fork(), sedangkan program baru

dijalankan setelah memanggil fungsi exec(). Model seperti ini memiliki kelebihan yaitu

kesederhanaan dibanding harus menetapkan setiap detail dari lingkungan program baru dalam system

call yang menjalankan program tersebut. Program baru dengan mudah berjalan dalam lingkungannya

sendiri. Jika proses induk mengharapkan untuk memodifikasi lingkungan dimana program baru

berjalan, dia bisa melakukan fork dan tetap menjalankan program asli dalam proses anak. Membuat

beberapa system call membutuhkan modifikasi proses anak sebelum akhirnya mengeksekusi program

baru. Setiap proses memiliki identitas proses yang isinya berupa:

1. PID. PIDs digunakan untuk menetapkan proses ke sistem operasi ketika sebuah aplikasi membuat

System call untuk sinyal, modifikasi, atau menunggu proses lain.

2. Credentials . Setiap proses harus memiliki hubungan antara user ID dengan group ID yang

menentukan hak sebuah proses untuk mengakses sumberdaya sistem dan file.

3. Personality . Dapat sedikit memodifikasi semantics of system calls.

2.1.1 PID

Process ID (PID) adalah pengenal unik untuk proses. Digunakan untuk menentukan proses-proses

mana yang dibawa ke dalam OS saat suatu aplikasi membuat system call2 untuk mengirim sinyal,

mengubah, atau menunggu proses lainnya. PID adalah 32-bit bilangan yang mengidentifikasikan

setiap proses dengan unik.

2.1.2 Mandat (Credentials)

Adalah setiap proses harus memiliki sebuah user ID dan satu atau lebih group ID yang menentukan

hak proses untuk mengakses sumber daya sistem dan file.

2.1.3 Personality

Tidak ditemukan dalam sistem UNIX, namun dalam Linux setiap proses memiliki sebuah pengenal

pribadi (personality) yang dapat (sedikit) mengubah system call tertentu secara semantic. Terutama

digunakan oleh library3 emulation agar system call dapat kompatibel dengan bentuk tertentu.

Page 3: Unix

2.2 Pembuatan Proses UNIX

Saat komputer berjalan, terdapat banyak proses yang berjalan secara bersamaan. Sebuah proses dibuat

melalui system call create-process yang membentuk proses turunan ( child process) yang dilakukan

oleh proses induk ( parent process). Proses turunan tersebut juga mampu membuat proses baru

sehingga semua proses ini pada akhirnya membentuk pohon proses. Ketika sebuah proses dibuat

maka proses tersebut dapat memperoleh sumber-daya seperti waktu CPU, memori, berkas, atau

perangkat M/K. Sumber daya ini dapat diperoleh langsung dari sistem operasi, dari proses induk yang

membagi-bagikan sumber daya kepada setiap proses turunannnya, atau proses turunan dan proses

induk berbagi sumber-daya yang diberikan sistem operasi.

Di dalam UNIX daftar dari proses yang sedang aktif berjalan bisa didapatkan dengan menggunakan

perintah ps, contoh ps -el. Ada dua kemungkinan bagaimana jalannya ( running) proses induk dan

turunan. Proses-proses tersebut berjalan secara konkuren atau proses induk menunggu sampai

beberapa/seluruh proses turunannya selesai berjalan. Juga terdapat dua kemungkinan dalam

pemberian ruang alamat ( address space) proses yang baru. Proses turunan dapat merupakan duplikasi.

Bila UNIX menggunakan kemungkinan pertama (proses baru merupakan duplikasi induknya) maka

sistem operasi DEC VMS menggunakan kemungkinan kedua dalam pembuatan proses baru yaitu

setiap proses baru memiliki program yang di- load ke ruang alamatnya dan melaksanakan program

tersebut. Sedangkan sistem operasi Microsoft Windows NT mendukung dua kemungkinan tersebut.

Ruang alamat proses induk dapat diduplikasi atau proses induk meminta sistem operasi untuk me-

load program yang akan dijalankan proses baru ke ruang alamatnya.

2.2.1 Parent and Child Process

Pada UNIX, parent akan membentuk child dengan menggunakan system call fork. Setelah

pemanggilan fork, parent kembali berjalan secara pararel dengan child. Demikian pula, child dapat

memanggil fork untuk membentuk child lainnya. Sistem call exec digunakan setelah system call fork

mengganti alamat memori proses dengan program baru. Lain halnya dengan DOS, pada MS-DOS,

system call akan memanggil binary file tertentu yang ada pada memori dan mengeksekusinya sebagai

child. Parent akan running kembali setelah child selesai eksekusi. Dengan demikian parent dan child

tidak dapat berjalan secara pararel.

Page 4: Unix

Bentuk pohon proses pada UNIX dapat dilihat pada gambar dibawah ini :

2.2.2 System call fork()

Sistem operasi UNIX mempunyai system call fork yang berfungsi untuk membuat proses baru. Proses

yang memanggil system call fork ini akan dibagi jadi dua, proses induk dan proses turunan yang

identik. Analoginya seperti pembelahan sel, dimana satu sel membelah jadi dua sel yang identik.

Proses induk dan turunan independen satu sama lain dan berjalan bersamaan. Return code dari system

call ini adalah suatu integer. Untuk proses anak return code-nya adalah 0 sementara untuk proses

induk return code-nya adalah nomor identifikasi proses (PID) dari turunannya. Ada juga system call

exec yang berguna untuk membuat proses turunan yang terbentuk memiliki instruksi yang berbeda

dengan proses induknya. Dengan kata lain, proses induk dan proses turunan tidak lagi identik tapi

masing-masing punya instruksi berbeda.

Contoh Penggunaan fork() :

#include <stdio.h> /*standard M/K*/#include <unistd.h> /*fork()*/#include <sys/types.h> /*pid_t*/

int main(){ pid_t pid; pid = fork();

if (pid < 0) { //terjadi error fprintf(stderr,"Fork Gagal"); exit(-1);

Page 5: Unix

} else if (pid == 0) { //proses anak execlp("/bin/ls","ls",NULL); } else { //proses induk wait(NULL); printf("Proses anak selesai"); exit(0); }}Contoh diatas adalah contoh penggunaan fork() dengan menggunakan bahasa C. Tipe data pid_t

merupakan signed integer yang sebenernya dalam pustaka GNU. Tipe ini adalah int, fungsinya adalah

merepresentasikan PID. Program C diatas menggambarkan atau mengilustrasikan UNIX system call.

Didalam UNIX Shell akan membaca perintah dari terminal, kemudian perintah tersebut di fork(), dan

menghasilkan proses anak, proses anak inilah yang akan mengeksekusi perintah dari shell tersebut,

sementara proses induk hanya menunggu dengan menggunakan system call wait() dan mengeksekusi

perintah lain saat proses anak terminasi.

2.2.3 System call exec()

Digunakan untuk me-load program baru. Setelah system call tersebut dieksekusi, proses melanjutkan

eksekusi dengan ruang alamat baru yang berisi program yang telah di-load.

Argunmen untuk exec() :

name : nama untuk mengeksekusi file

argv :

enpv : digunakan Digunakan untuk menyampaikan informasi ke proses baru.

Ketika sebuah proses pertama dijalankan (setelah telah dimulai melalui exec), kode startup untuk

proses melakukan hal berikut:

membuat argumen dikirimkan ke exec dalam bentuk argumen untuk prosedur utama dalam

proses baru.

menempatkan salinan envp di lingkungan variabel global.

Contoh Exec() :

/* myexec.C */#include <iostream>using namespace std;#include <unistd.h>#include <sys/wait.h>extern char **environ; /* environment info */main(int argc, char **argv)/* argc -- number of arguments *//* argv -- an array of strings */{char *argvNew[5];int pid;if ((pid = fork()) < 0) {cerr << "Fork error\n";

Page 6: Unix

exit(1);}else if (pid == 0) {/* child process */argvNew[0] = "/bin/ls";argvNew[1] = "-l";argvNew[2] = NULL;if (execve(argvNew[0], argvNew, environ) < 0) {cerr << "Execve error\n";exit(1);}

2.3 Proses Zombie

System call wait() membiarkan proses untuk menunggu terminasi proses anaknya dan mengembalikan

Process ID (PID) dari proses anak yang diterminasi. Saat mengeksekusi system call wait() tersebut,

kernel memeriksa apakah proses anak telah diterminasi. Keadaaan proses khusus yang disebut zombie

process merepresentasi proses yang diterminasi tersebut. Sebuah proses tetap berada dalam keadaan

tersebut hingga proses induk memanggil system call wait() System call handler kemudian mengambil

beberapa data mengenai penggunaan resource dari process descriptor field kemudian melepaskan data

tersebut ketika berhasil dikumpulkan. Jika tidak terdapat proses anak yang telah diterminasi ketika

wait() dijalankan, kernel menempatkan proses dalam kondisi wait() hingga sebuah proses anak

diterminasi.

Banyak pula kernel yang menimplementasikan system call waitpid() yang membuat sebuah proses

menunggu proses anak tertentu. Jika sebuah proses induk diterminasi tanpa mengeluarkan system call

wait(), informasi proses anak akan menggunakan slot memori yang seharusnya dapat digunakan untuk

proses lain yang sedang berjalan. Solusi dari masalah ini adalah adanya proses sistem khusus yaitu

init yang dibuat ketika inisialisasi sistem. Ketika sebuah proses diterminasi, kernel mengubah semua

pointer proses anak yang masih berjalan sehingga menjadikan mereka anak dari proses init. Proses ini

memonitor eksekusi dari semua anaknya dan mengeluarkan system call wait() secara rutin

dengan tujuan terminasi seluruh proses zombie.

2.4 Process group dan login session

Sistem operasi UNIX modern menggunakan istilah process group untuk merepresentasikan abstraksi

job. Sebagai contoh untuk mengeksekusi perintah

$ ls | sort | more

Sebuah shell yang mendukung process group (misalnya bash) membuat sebuah group baru untuk ls,

sort, dan more. Dengan cara ini shell berfungsi untuk ketiga proses sebagaimana mereka merupakan

sebuah entitas tunggal (job). Setiap process descriptor mengandung field process ID.

Page 7: Unix

Setiap process group dapat mempunyai group leader yaitu proses yang PID-nya sama dengan ID

process group. Sebuah proses yang baru dinisialiasasi dengan dimasukkan ke dalam process group

parentnya.

Kernel UNIX modern juga menggunakan login session. Login session terdiri atas semua proses yang

merupakan turunan dari proses yang telah berjalan pada terminal tertentu (biasanya proses command

shell yang pertama kali dibuat untuk user). Semua proses yang terdapat dalam sebuah process group

harus berada dalam login session yang sama Sebuah login session dapat memiliki beberapa process

group yang aktif secara bersamaan. Salah satu dari process group tersebut selalu berada di foreground

yang berarti memiliki akses ke terminal. Process group yang aktif lainnya berada di background.

Ketika sebuah process group background berusaha untuk mengakses terminal, process group tersebut

menerima signal SIGTTIN atau SIGTTOUT. Pada banyak command shell perintah internal bg dan fg

dapat digunakan untuk meletakkan proses di background atau foreground.

3. Terminasi proses

Ketika proses di terminasi maka OS kernel akan :

1. Membuang semua memori yang digunakan pada proses

2. Menutup semua proses file

3. Menjaga beberapa info minimal (PID, exit status, CPU time usage)

4. memberikan kepada parent ketika parent menunggu

Kondisi terminasi

1. Normal exit

2. Error exit

3. Fatal error

contoh : Illegal Instructions, bad addr, divide by zero

4. Dihancurkan oleh proses lain

Aktifitas terminasi normal

1. Menutup semua file

2. menyimpan usage stats

3. Membuat init proses parent dari childern

4. mengganti state yang berhalan menjadi ZOMBIE

5. rilis memory

6. mengirimkan SIGCHLD ke parent

7. Membangunkan parent jika dalam keadaan sleep