4
proses adalah program dalam eksekusi. Suatu proses adalah lebih dari kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada program counter dan isi dari daftar prosesor/ processor's register. Suatu proses umumnya juga termasuk process stack, yang berisikan data temporer (seperti parameter metoda, address yang kembali, dan variabel lokal) dan sebuah data section, yang berisikan variabel global. Ada dua jenis proses, proses berat (heavy-weight) atau biasa dikenal dengan proses tradisional, dan proses ringan (light- weight) atau yang sering disebut THREAD. Merupakan unit dasar dari penggunaan CPU yang terdiri atas ID thread, program counter, himpunan register, dan stack. Sebuah Thread saling berbagi bagian program (code section), bagian data (data section) dan sumber daya sistem operasi dengan thread lain yang mengacu pada proses yang sama. Dengan menggunakan thread maka memungkinkan sebuah proses dapat mengerjakan dua atau lebih task dalam waktu yang hampir bersamaan. Berikut adalah ilustrasi proses dengan thread tunggal (proses tradisional) serta proses dengan multi thread. Thread Linux Ketika pertama kali dikembangkan, Linux tidak didukung dengan threading di dalam kernelnya, tetapi dia mendukung proses- proses sebagai entitas yang dapat dijadwalkan melalui clone() system calls.Sekarang Linux mendukung penduplikasian proses menggunakan system call clone() dan fork(). Clone() mempunyai sifat mirip dengan fork(), kecuali dalam hal pembuatan salinan dari proses yang dipanggil dimana ia membuat sebuah proses yang terpisah yang berbagi address space dengan proses yang dipanggil. Pembagian address space dari parent process memungkinkan cloned task bersifat mirip dengan thread yang terpisah. Pembagian address space ini dimungkinkan karena proses direpresentasikan di dalam Kernel Linux. Di dalam Kernel Linux setiap proses direpresentasikan sebagai sebuah struktur data yang unik. Jadi, daripada menciptakan yang baru maka struktur data yang baru mengandung pointer yang menunjuk ke tempat dimana data berada. Jadi ketika fork() dipanggil, proses yang baru akan tercipta beserta duplikasi dari segala isi di struktur data di parent process, namun ketika clone() dipanggil, ia tidak menduplikasi parent process-nya tetapi

Proses Adalah Program Dalam Eksekusi

Embed Size (px)

Citation preview

Page 1: Proses Adalah Program Dalam Eksekusi

proses adalah program dalam eksekusi. Suatu proses adalah lebih dari kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada program counter dan isi dari daftar prosesor/ processor's register. Suatu proses umumnya juga termasuk process stack, yang berisikan data temporer (seperti parameter metoda, address yang kembali, dan variabel lokal) dan sebuah data section, yang berisikan variabel global.

Ada dua jenis proses, proses berat (heavy-weight) atau biasa dikenal dengan proses tradisional, dan proses ringan (light-weight) atau yang sering disebut THREAD. Merupakan unit dasar dari penggunaan CPU yang terdiri atas ID thread, program counter, himpunan register, dan stack. Sebuah Thread saling berbagi bagian program (code section), bagian data (data section) dan sumber daya sistem operasi dengan thread lain yang mengacu pada proses yang sama. Dengan menggunakan thread maka memungkinkan sebuah proses dapat mengerjakan dua atau lebih task dalam waktu yang hampir bersamaan. Berikut adalah ilustrasi proses dengan thread tunggal (proses tradisional) serta proses dengan multi thread.

Thread LinuxKetika pertama kali dikembangkan, Linux tidak didukung dengan threading di dalam kernelnya, tetapi dia mendukung proses-proses sebagai entitas yang dapat dijadwalkan melalui clone() system calls.Sekarang Linux mendukung penduplikasian proses menggunakan system call clone() dan fork(). Clone() mempunyai sifat mirip dengan fork(), kecuali dalam hal pembuatan salinan dari proses yang dipanggil dimana ia membuat sebuah proses yang terpisah yang berbagi address space dengan proses yang dipanggil. Pembagian address space dari parent process memungkinkan cloned task bersifat mirip dengan thread yang terpisah. Pembagian address space ini dimungkinkan karena proses direpresentasikan di dalam Kernel Linux. Di dalam Kernel Linux setiap proses direpresentasikan sebagai sebuah struktur data yang unik. Jadi, daripada menciptakan yang baru maka struktur data yang baru mengandung pointer yang menunjuk ke tempat dimana data berada. Jadi ketika fork() dipanggil, proses yang baru akan tercipta beserta duplikasi dari segala isi di struktur data di parent process, namun ketika clone() dipanggil, ia tidak menduplikasi parent process-nya tetapi menciptakan pointer ke struktur data pada parent process yang memungkinkan child process untuk berbagi memori dan sumber daya dari parent process-nya.

Project Linux Thread menggunakan system call ini untuk mensimulasi threaddi user space. Sayangnya, pendekatan ini mempunyai beberapa kekurangan, khususnya di area signal handling, scheduling, dan interprocess synchronization primitive. Untuk meningkatkan kemampuan Thread Linux, dukungan kernel dan penulisan ulang pustaka thread sangat diperlukan. Dua project yang saling bersaing menjawab tantangan ini. Sebuah tim yang terdiri dari pengembang dari IBM membuat NGPT (Next Generation POSIX Threads). Sementara pengembang dari Red Hat

Page 2: Proses Adalah Program Dalam Eksekusi

membuat NPTL (Native POSIX Thread Library). Sebenarnya Linux tidak membedakan antara proses dan thread. Dalam kenyataannya, Linux lebih menggunakan istilah task dibandingkan proses dan thread ketika merujuk kepada pengaturan alur pengontrolan di dalam program. Pada sistem operasi lain seperti Mac OS X, terdapat lima thread API yang berbeda, yaitu: Mach thread, POSIX thread (pthreads), Cocoa threa (NSThreads), Carbon MP tasks, dan Carbon Thread Manager.POSIX Thread LibraryOperasi thread menggunakan POSIX Thread Library (pthread) melibatkan proses pembuatan, terminasi, sinkronisasi (join, blocking), penjadwalan, manajemen data dan interaksi proses. Berikut adalah beberapa rutin yang digunakan untuk melaksanakan operasi diatas;

1. pthread_create (thread,attr,start_routine,arg)Pada dasarnya fungsi main() terdiri dari thread tunggal (default thread), dan semua thread lainnya harus didenisikan secara eksplisit oleh programmer. Rutin pthread_create digunakan untuk membuat thread baru dan rutin ini dapat dipanggil berulang kali (namun sesuai dengan limit dari Lingkungannya- OS) pada bagian kode program. thread merupakan parameter penampung dari threadid setelah thread berhasil dibuat. start_routine merupakan fungsi yang akan dieksekusi oleh thread, sedangkan arg merupakan argumentasi dari fungsi thread tersebut.2. pthread_exit (status)Rutin pthread_exit digunakan untuk menghentikan jalannya sebuah thread. Terdapat beberapa cara dimana sebuah thread akan berhenti (terminated), diantaranya :(a) Thread secara normal telah selesai mengerjakan eksekusi programnya(b) Thread secara eksplisit memanggil pthread_exit meskipun kode program belum selesai dieksekusi(c) Sebuah Thread dibatalkan oleh thread lain menggunakan pthread_cancel(d) Proses yang membuat thread berhenti karena pemanggilan perintah exec() atau exit().(e) Jika fungsi main() selesai terlebih dahulu, tanpa memanggil perintah pthread_exit() secara eksplisit3. pthread_cancel (thread)Rutin pthread_cancel digunakan untuk membatalkan eksekusi dari sebuah thread. Berfungsinya rutin ini tergantung dari cancelation state thread yang akan dibatalkan. Jika statusnya ON, maka perintah ini akan berjalan. 4. pthread_join (threadid,status)Rutin pthread_join digunakan untuk menunda eksekusi thread pemanggil sebelum thread yang ditentukan threadid selesai dijalankan (terminated). Sebuah thread hanya bisa di-join sekali, dan akan terjadi logical error jika lebih dari itu. Jika thread target secara eksplisit memanggil perintah pthread_exit, maka status terminasi bisa didapatkan melalui parameter status.

Dalam POSIX Thread, terdapat tiga cara yang bisa digunakan untuk sinkronisasi antar thread:

Page 3: Proses Adalah Program Dalam Eksekusi

1. Mutex : Mutual Exclusion lock, menghalangi akses shared resources dari thread lain sampai thread yg bersangkutan selesai menggunakan shared resources tersebut. Hal ini menjamin akses secara eksklusif oleh sebuah thread. dalam POSIX Thread Library, rutin yang digunakan adalah pthread_mutex_lock, pthread_mutex_unlock dan pthread_mutex_trylock.2. Join : membuat sebuah thread menunggu sampai target thread yang ditentukan selesai (terminated). Dalam POSIX Thread Library, rutin yang digunakan adalah pthread_join.3. Condition Variable dengan menggunakan tipe data pthread_cond_t

Several examples of compile commands used for pthreads codes are listed in the table below.

Compiler / Platform Compiler Command Description

INTELLinux

icc -pthread C

icpc -pthread C++

PGILinux

pgcc -lpthread C

pgCC -lpthread C++

GNULinux, Blue Gene

gcc -pthread GNU C

g++ -pthread GNU C++

IBM Blue Gene

bgxlc_r  /  bgcc_r C (ANSI  /  non-ANSI)

bgxlC_r, bgxlc++_r C++

https://computing.llnl.gov/tutorials/pthreads/Last Modified: Fri, 11 Jan 2013 23:15:49 GMT [email protected]

POSIX Threads ProgrammingAuthor: Blaise Barney, Lawrence Livermore National Laboratory UCRL-MI-133316

Table of Contents

Blaise Barney, Lawrence Livermore National Laboratory.2013.,POSIX Threads Programming. https://computing.llnl.gov/tutorials/pthreads/. Diakses pada tanggal 27 Januari 2013.