Anda di halaman 1dari 18

LAPORAN RESMI PRAKTIKUM SISTEM OPERASI

MODUL 3 PROCESS

Oleh:

Kelompok 39 Cahya Perdana 5109100025 Vika Fitratunnany I. 5109100133

Asisten: KHARISMA MUCHAMMAD 5108100138

JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INFORMASI INSTITUT TEKNOLOGI SEPULUH NOPEMBER 2010

PENDAHULUAN
1. Sebutkan dan jelaskan faktor-faktor pembeda antara proses dan thread !
- Thread adalah bagian dari proses, dan dia tidak bisa hidup tanpa proses Jadi, sebuah proses memiliki banyak thread (multiple thread) yang menjalankan tugas-tugas untuk membantu proses tersebut. Jika dianalogikan, multiple thread itu seperti banyak koki yang sedang memasak dari satu buku masak yang sama, namun mereka memasak resep pada halaman yang berbeda-beda. - Proses memiliki informasi state, sedangkan multiple threads dalam satu proses memiliki state yang sama karena pada dasarnya, thread adalah bagian dari proses. - Thread memiliki waktu pembuatan, eksekusi, dan pemberhentian yang lebih cepat dari proses Hal ini disebabkan karena ukuran thread yang lebih kecil dari proses - Thread tidak memiliki data segment atau heap, sedangkan proses memiliki kode/data/heap dan segmen lain

2. Jelaskan tentang race condition dan beri contoh studi kasusnya !


Race condition adalah suatu kondisi dimana dua atau lebih proses mengakses shared memory/sumber daya pada saat yang bersamaan dan hasil akhir dari data tersebut tergantung dari proses mana yang terakhir selesai dieksekusi sehingga hasil akhirnya terkadang tidak sesuai dengan yang dikehendaki. Contoh race condition: Slot-slot spooler direktori diberi nomor 0, 1, 2, dan seterusnya. Masing-masing slot tersebut dapat memuat sebuah nama berkas yang akan dicetak. Ada dua variabel: 1) out (pointer berkas berikutnya, dan 2) in (pointer ke slot kosong). Misalkan slot 0, 1, 2, dan 3 kosong (berkas telah selesai dicetak), dan slot 4, 5, 6 sedang terisi (berisi nama dari berkas yang antre untuk dicetak). Proses A dan B sedang menunjuk ke slot yang sama. Situasi seperti ini diperlihatkan oleh gambar di bawah.

Proses A membaca in dan menyimpan nilai 7 di sebuah variabel lokal yang disebut next_free_slot. Sebuah clock interrupt terjadi dan CPU memutuskan bahwa proses A berjalan cukup lama, sehingga digantikan oleh proses B. Proses B juga membaca in, dan juga mengambil nilai 7, sehingga menyimpan nama berkas di slot nomor 7 dan memperbaharui nilai in menjadi 8. Maka proses mati dan melakukan hal lain. Akhirnya proses A berjalan lagi, dimulai dari tempat di mana proses tersebut mati. Hal ini terlihat dalam next_free_slot, ditemukan nilai 7 di sana, dan menulis nama berkas di slot nomor 7, menghapus nama berkas yang bau saja diletakkan oleh proses B. Kemudian proses A menghitung next_free_slot + 1, yang nilainya 8 dan memperbaharui nilai in menjadi 8. Direktori spooler sekarang secara internal konsisten, sehingga printer daemon tidak akan memberitahukan apa pun yang terjadi, tetapi poses B tidak akan mengambil output apa pun. Situasi seperti ini, dimana dua atau lebih proses melakukan proses reading atau writing beberapa shared data dan hasilnya bergantung pada ketepatan berjalan disebut race condition.

3. Jelaskan tentang deadlock dan berikan contohnya !


Deadlock adalah kondisi dimana dua atau lebih proses menunggu satu sama lain untuk menyelesaikan prosesnya/ melepaskan resource untuk dipakai proses yang lain, padahal semuanya saling menunggu, sehingga tidak satupun proses yang akan selesai. Deadlock adalah kasus umum pada multiprocessing dimana ada banyak proses yang berbagi resource yang sama. Ada 4 kondisi yang bisa menyebabkan deadlock: - Mutual exclusion, sebuah resource tidak bisa dipakai oleh lebih dari satu proses - Hold and wait, proses yang memakai sebuah resource mungkin akan meminta resource lain - No preemption, tidak ada resource yang mungkin dilepaskan oleh proses yang memakainya

- Circular wait, dua atau lebih proses membentuk sebuah circular chain, dimana masing-masing saling menunggu untuk melepaskan resource yang sedang dipakai. Ilustrasi deadlock tampak seperti gambar di bawah:

Cara mencegah deadlock: - Mutal exclusion: memperbolehkan satu resource dipakai oleh lebih dari 1 proses, namun hambatannya adalah, hal ini bisa menyebabkan chaos - Hold and wait: meminta sumber daya di awal, namun hambatannya adalah kesulitan untuk memperkirakan di awal dan hal ini tidak optimal - No preemption: mengambil sumber daya di tengah-tengah proses, namun hal ini menyebabkan hasil proses tidak optimal - Circular wait: memberikan penomoran untuk permintaan resource, namun tidak ada penomoran yang bisa memuaskan semua pihak.

4. Jelaskan tentang multithread dan berikan contoh pengaplikasian multithread !


Multithread adalah sistem yang membolehkan adanya banyak thread dalam satu proses. Contoh dari multithread ini terlihat dalam sebuah aplikasi yang diimplementasi sebagai proses yang terpisah dengan beberapa thread yang berfungsi sebagai pengendali. Contohnya sebuah web browser mempunyai

thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network.

5. Jelaskan apa yang dimaksud dengan mutex, sebutkan juga perbedaan dan persamaanya jika dibandingkan dengan semaphore !
Mutex adalah mutual exclusion, adalah sebuah algoritma yang dimanfaatkan untuk mencegah penggunaan suatu resource komputer secara simultan dengan menggunakan kode program yang disebut critical sections. Kondisi ini menyebabkan resource komputer hanya bisa dipakai oleh satu proses pada waktu yang sama. Hal ini dilakukan untuk melindungi resource dari akses proses lain, sehingga tabrakan data bisa dicegah. Semaphore adalah salah satu contoh yang menerapkan mutual exclusion. Namun, penggunaan semaphore memiliki resiko terjadinya deadlock, dimana dua proses atau lebih mendapatkan ijin semaphore untuk mengakses dua resource yang berbeda. Deadlock dapat terjadi jika dua atau lebih proses tersebut saling menunggu satu sama lain untuk melepaskan resource/ semaphorenya. Jadi, persamaan mutex dengan semaphore adalah: mutual exclusion dan semaphore sama-sama membatasi akses proses ke suatu resource. Namun perbedaannya, mutual exclusion hanya membatasi akses satu proses per satu resource, sedangkan semaphore memegang kontrol akses pada lebih dari satu resource untuk dipakai banyak proses.

6. Jelaskan apa yang dimaksud dari :


pthread_t, pthread_mutex_t, pthread_create, pthread_detach, pthread_cancel, pthread_mutex_lock, pthread_mutex_unlock, pthread_mutex_destroy.
Pthread_t : Digunakan untuk mendeklarasikan variabel thread. pthread_mutex_t : Digunakan untuk mendeklarasikan variabel mutex. pthread_create : Fungsi untuk membuat thread yang baru dan bisa dieksekusi. pthread_detach : Fungsi untuk men-detach thread. Mengindikasikan bahwa storage yang digunakan untuk thread yang di-detach bisa digunakan kembali ketika thread berakhir. pthread_cancel : Fungsi untuk membatalkan pengeksekusian sebuah thread. pthread_mutex_lock : Fungsi yang digunakan suatu thread untuk mendapatkan lock dari suatu variabel mutex. Lock adalah sebuah mekanisme sinkronisasi yang membuat batasan terhadap suatu akses pada thread. pthread_mutex_unlock : Fungsi untuk membatalkan lock pada suatu thread. pthread_mutex_destroy : Fungsi untuk menghapus mutex thread

7. Jelaskan permodelan thread dilihat dari levelnya

a. Kernel Level Pada kernel level, operasi thread didukung dan diatur secara langsung oleh sistem operasi. Satu thread akan dipetakan sebagai satu thread di level kernel, sehingga disebut menerapkan one-on-one thread mapping. Namun hal ini mengakibatkan adanya resiko context switching. Selain itu, kernel level akan menciptakan thread baru di kernel tiap ada thread pengguna, sehingga tidak praktis dan memberatkan kerja aplikasi, sehingga kernel-level thread bukanlah selalu menjadi solusi yang paling optimal untuk aplikasi yang menggunakan multithread. b. User Level Pada user level, operasi threading terjadi di space user dan diciptakan oleh runtime library. Threads disediakan oleh kernel namun diatur tanpa dukungan kernel, sehingga thread tidak bisa mengeksekusi instruksi/ kernel primitive secara langsung. User level threading menerapkan many-to-one thread mapping, dimana sistem operasi akan memetakan semua thread dalam proses multithread ke satu kesatuan eksekusi. Keuntungannya: Userlevel library bisa menjadwalkan pengeksekusian thread sehingga bisa mengoptimalkan peforma. Selain itu, proses sinkronisasi berjalan di luar kernel sehingga dapat menghindari adanya context switches. Namun kerugiannya: kernel memperlakukan proses multithread sebagai kontrol thread tunggal, sehingga performa menjadi tidak optimal jika prosesnya menggunakan I/O dan multithread tidak bisa berjalan secara parallel dalam sistem multiprosesor.

c. Hybrid Hybrid adalah kombinasi dari user-level dan kernel-level thread. Metode ini menerapkan many-to-many thread mapping, dimana multithread dalam user space akan dipetakan pada beberapa thread di kernel space (jumlahnya tidak perlu sama, bisa lebih sedikit). Dua model sebelumnya: model many-to-one memungkinkan developer menciptakan thread sebanyak yang diinginkan, namun parallel processing tidak dapat dilaksanakan kernel hanya bisa menjalankan satu thread per satuan waktu. Sedangkan pada model one-to-one, developer harus membatasi jumlah thread yang dibuat. Model many-to-many bisa mengatasi kelemahan di atas, dimana developer bisa membuat banyak thread dan kernel bisa menjalankan multiprocessing.

8. Jelaskan gambar dibawah ini :

Gambar di atas menunjukkan daur hidup sebuah thread. Seteah thread dibuat, ia akan masuk ke ready state (menunggu gilirannya untuk memasuki prosesor). Kemudian, setelah mendapatkan giliran, thread memasuki running state (thread sedang dieksekusi). Jika thread memenuhi syarat kondisi preemptive, maka dari running state, thread tersebut bisa langsung kembali ke ready state. Namun, biasanya dari running state, sebuah thread berpindah menuju salah satu dari empat non-runnable state, yaitu waiting, sleeping, dead, atau blocked. Thread memasuki state waiting ketika thread tersebut menunggu sebuah kejadian (event) tertentu sebelum bisa diproses lagi. Ketika event yang ditunggu selesai berlangsung, thread itu bisa kembali ke ready state.

Jika tidak memasuki waiting state setelah running state, thread mungkin bisa dimasukkan ke sleeping state. Pada sleeping state, CPU menentukan sebuah waktu kuantum dan thread tersebut berada dalam sleeping state hingga waktu kuantum itu selesai, kemudian kembali ke ready state. Dari running state, pemrosesan thread yang dimaksud bisa saja telah selesai, sehingga thread tersebut memasuki dead state. Dari dead state tersebut, thread sudah tidak bisa berjalan lagi (berpindah state). Pilihan terakhir sebuah thread setelah keluar dari running state adalah blocked state. Suatu thread diblok ketika thread tersebut membutuhkan sebuah input atau output sebelum bisa diproses lebih lanjut. Jika sudah menerima input/output tersebut, thread akan kembali ke ready state.

9. Salah satu masalah lain dalam lock file adalah livelock, jelaskan mengenai apa itu livelock!
Livelock adalah kondisi dimana thread (atau beberapa thread) berjalan dalam loop tanpa mempunyai progress apapun, sehingga sistem akan berulang-ulang namun tidak memiliki efek yang berarti. Kondisi ini mengakibatkan task tidak akan dapat diselesaikan karena thread seperti terus-menerus dibebani oleh tugas baru yang tidak mungkin dikejar. Contoh ilustrasi dari livelock adalah saat dua orang berpapasan di sebuah koridor. Masing-masing menawarkan yang lain untuk lewat duluan dengan bergeser ke sebelah, namun keduanya ternyata bergeser kea rah yang sama. Hal ini mengakibatkan mereka tidak akan selesai melewati koridor, meskipun mereka terus bergeser selamanya, dan tidak akan ada progress yang terjadi.

10. Buat program yang menunjukan perbedaan antara pendekatan multi process dan multi threading dengan menyelesaikan problem ini:
-setiap program membuat 10 proses atau 10 thread(1 program 10 thread saja atau 10 proses saja) -setiap thread ataupun proses menyelesaikan fungsi f(n), f(n)=fibonaci ke-n dimana n adalah nomor thread atau nomor proses ulangi (buat program lain) yang membuat 50, dan 100 thread atau proses; maksudnya buat: 1 program yang membuat 50 thread 1 program yang membuat 50 proses 1 program yang membuat 100 thread 1 program yang membuat 100 proses 1. Membuat 10/ 50/ 100 proses untuk menghitung angka fibonaci ke-n 10processs.c/ 50process.c/ 100processs.c
#include #include #include #include #include <sys/types.h> <sys/stat.h> <stdio.h> <time.h> <stdlib.h>

#include #include #include #include #include #include #include

<fcntl.h> <errno.h> <unistd.h> <string.h> <signal.h> <termios.h> <syslog.h>

#define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 #define MAX 10 // untuk membuat 50/ 100 proses, nilai MAX harus dirubah void fibonaci(); int i=0; int fibo[MAX]; int main(void) { int k; pid_t pid; for (k=0; k<MAX; k++) { pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } else if (pid==0) // child process { printf("Fork ke = %d --> ", k); fibonaci(); } else // parent process dari child { wait(NULL); exit(EXIT_SUCCESS); } } return 0; } void fibonaci() { if(i>1) { fibo[i] = fibo[i-1]+fibo[i-2]; } else { fibo[i] = 1; } printf("%d\n", fibo[i]); i++;

Screenshot:

2. Membuat 10/ 50/ 100 thread untuk menghitung angka fibonaci ke-n 10thread.c/ 50thread.c/ 100thread.c
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define MAX 10 // untuk membuat 50/ 100 thread, nilai MAX harus dirubah void *make( void *ptr ); unsigned long fibo[MAX]; int i=0; main() { pthread_t thread; int iret; printf("Fibonaci: ");

int j; for(j=0; j<MAX; j++) { iret = pthread_create( &thread, NULL, make, NULL); pthread_join( thread, NULL); } // } void *make( void *ptr ) { if(i>1) { fibo[i] = fibo[i-1]+fibo[i-2]; } else { fibo[i] = 1; } printf("%lu ", fibo[i]); i++; } printf("\n"); printf("Thread 1 returns: %d\n",iret1); exit(0);

Screenshot:

SHIFT 1
1. Buatlah sebuah program yang mensimulasikan komputasi paralel sederhana, dimana program akan menjumlahkan hasil komputasi dari tiap operasi matematika pada tiap thread. Program akan meminta input berupa jumlah thread, dan operasi matematika pada tiap thread. Hasil akan disimpan dalam file. Misal : Input thread : 2 Operasi thread 1 : 5 * 2 Operasi thread 2 : 3 * 2 * 7 No 1. shift1.1.c
#include <pthread.h> #include <stdio.h> void *thread_f(void *parameter) { FILE *file = (FILE *)parameter; int a,b=0, jumlah = 0; char c,d; scanf ("%d%c",&a,&c); fprintf (file,"%d",a); jumlah = a; while (c!='\n') { d=c; scanf ("%d%c",&b,&c); fprintf (file," %c %d",d,b); if (d=='+' ) jumlah+= b; else if (d=='-') jumlah-= b; else if (d=='*') jumlah*= b; else if (d=='/') jumlah/= b; if (c == '\n') fprintf(file," = %d\n",jumlah); } return (void *)jumlah; } int main() { int a, i, jumlah; printf ("masukkan jumlah operasi : "); scanf ("%d",&a); FILE *file = fopen("hasiljumlah.txt","w"); for (i=0;i<a;i++)

{ pthread_t thr; pthread_create(&thr,NULL,&thread_f,file); pthread_join(thr,(void *)&jumlah); } fclose(file); return 0; }

Screenshot:

Hasil operasi akan disimpan di file hasiljumlah.txt yang berisi operasi dan hasilnya.

2. Buatlah contoh program simulasi penelusuran direktori, dimana program meminta input berupa direktori yang akan ditelusuri, kemudian program akan menelusuri isinya dan tiap kali menemukan suatu direktori, program akan membuat thread baru untuk menelusuri direktori tersebut. Program akan menghasilkan output berupa file dengan nama file berupa direktori yang ditemukan dan isi filenya berupa daftar nama file dan direktori yang ditemukan. Contoh : /home -> ini yang ditelusuri, isinya | >> a.txt >>b.txt >>/aku | >> c.txt Maka akan dibuat 2 file, yaitu file dengan nama home yang berisi a.txt, b.txt, dan aku, dan file dengan nama aku yang berisi c.txt No.2 satu.c
#include #include #include #include #include #include #include #include #include <dirent.h> <sys/types.h> <sys/param.h> <sys/stat.h> <unistd.h> <stdio.h> <stdlib.h> <pthread.h> <string.h>

void start(); void *travdir( void * ); char path[100]; main() { start(); exit(0); } void start() { char folder[100]; char searchpath[100]; getcwd(folder, 100); printf("--------------------------------------\n"); printf("Anda sedang berada di folder: %s\n", folder); printf("Masukkan PATH folder yang akan di-traverse!\nPath: "); scanf("%s", searchpath); // let's dance :) pthread_t threadid; int super;

super = pthread_create( &threadid, NULL, travdir, (void *)searchpath ); pthread_join( threadid, NULL); printf("--------------------------------------\n"); } void *travdir( void *file ) { chdir(file); DIR *d; struct dirent *dir; d = opendir( "." ); char ha[100]; strcpy(ha, file); int i; int count = 0; for (i = 0; i < 100; i++) { if (ha[i]==47) { count++; } } int j; for (j = 0; count > 0; j++) { if (ha[j]==47) { count--; } } char tambahan[100]; int in = 0; int k; for (k = 0; k < 100; k++) { if(k>=j) { tambahan[in] = ha[k]; in++; } } char txtname[100]; strcpy(txtname, tambahan); strcat(txtname, ".txt"); strcat(ha, "/"); strcat(ha, txtname); // ciptakan .txt untuk list file FILE *hasil; hasil = fopen(ha, "w"); printf(" Output: %s\n", ha);

if( d == NULL ) { return; } while((dir = readdir(d))) { if( strcmp( dir->d_name, "." ) == 0 || strcmp( dir->d_name, ".." ) == 0 ) { continue; } // jika yang dibuka itu folder // maka ciptakan thread dan telusuri folder itu if( dir->d_type == DT_DIR ) { // list nama foldernya di file output fprintf(hasil, "%s\n", dir->d_name); // masuk folder itu chdir( dir->d_name ); // menyimpan path folder tersebut char file[100]; getcwd(file, 100); // let's make some recursive thread :) pthread_t childthread; int dirthread; dirthread = pthread_create( &childthread, NULL, travdir, (void *)file ); pthread_join( childthread, NULL); // balik ke folder atasnya chdir( ".." ); } else // jika bukan folder { if(strcmp(dir->d_name, txtname) != 0) { // list filenya di file output fprintf(hasil, "%s\n", dir->d_name); } } } closedir( d ); // tutup dir fclose(hasil); // tutup file }

Screenshots:

Path yang dimasukkan adalah: /home/vikachew/Documents/Sisop Pada folder tersebut terdapat satu subfolder, sehingga akan dibuat 2 file .txt, yaitu 1. File .txt untuk folder itu sendiri 2. File .txt untuk subfolder Coba program

Pada folder /home/vikachew/Documents/Sisop/ terdapat file Sisop.txt yang berisi daftar file-file yang ada di folder tersebut.

Pada folder /home/vikachew/Documents/Sisop/Coba program/ terdapat file Coba program.txt yang berisi daftar file-file yang ada di folder tersebut.

Anda mungkin juga menyukai