Unix
Click here to load reader
-
Upload
saeful-millah -
Category
Documents
-
view
30 -
download
2
Transcript of 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.
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.
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.
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);
} 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";
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.
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