Pada saat suatu
proses dilakukan maka sebuah program akan mengeksekusi thread, dikarenakan
sebuah thread lebih kecil dari pada sebuah proses, pembuatan thread biasanya
menggunakan lebih sedikit sumber daya dibandingkan dengan pembuatan proses.
Perbedaan lain dari pembuatan proses dengan pembuatan thread adalah pembuatan
proses membutuhkan pengalokasian Prosses Control Block (PCB), yang merupakan
struktur data yang agak besar. Dimana di dalam PCB tersebut terdapat peta
memori (memory map) yang biasanya paling memakan waktu. Penciptaan proses juga
sangat berat karena selalu membutuhkan ruang alamat baru yang akan dibuat dan
bahkan jika proses berbagi memori maka proses komunikasi antar proses akan
lebih berat dan mahal dibandingkan dengan komunikasi antar thread. Pembuatan
thread pada sistem operasi, baik pada user level maupun pada kernel hanya
melibatkan pengalokasian struktur data kecil untuk menangani suatu set
register, stack dan priority[4].
Seperti yang
telah di jelaskan sebelumnya, sebuah
proses dapat terdiri dari program yang mengeksekusi hanya thread tunggal
ataupun banyak thread. Thread tunggal hanya dapat mengerjakan sebuah tugas
dalam satuan waktu, dan banyak thread dapat mengerjakan banyak tugas dalam
satuan waktu. Proses dengan banyak thread dan mengerjakan banyak tugas dalam
satuan waktu inilah yang disebut dengan multithreading. Multithreading mengizinkan beberapa thread terjadi dalam sebuah proses dan saling berbagi
sumber daya tetapi dapat dijalankan secara independen. Ada 4 keuntungan dari
multithreading yaitu, responsif, berbagi sumber daya, ekonomis dan utilisasi
arsitektur multiprosesor. Pada multithreading terdapat pemrograman-pemrograman
yang dapat maupun tidak dapat meningkatkan sebuah solusi thread tunggal. Sebuah
web server yang melayani setiap permintaan layanan di thread yang terpisah,
sehingga web server tersebut dapat mempunyai banyak pengguna yang mengaksesnya
secara bersamaan serta sebuah program aplikasi paralel seperti perkalian
matriks dimana bagian berbeda dari matriks dapat dikerjaan secara paralel
merupakan contoh pemrograman multithreading yang dapat meningkatkan sebuah
thread tunggal. Adapun contoh dari pemrograman yang tidak meningkatkan kinerja
dari thread tunggal diantaranya adalah setiap program sekuensial contohnya
sebuah program yang digunakan untuk menghitung pengembalian pajak individu[3,6].
Terdapat tiga
model multithreading, yaitu one to one, many to many dan one to many. Pada one
to one setiap user-level thread akan di petakan ke setiap thread. Keuntungan
dari model ini adalah sama dengan keuntungan thread kernel. Sedangkan kelemahan
dari model ini ialah setiap pembuatan thread pengguna memerlukan tambahan
thread kernel. Karena itu, jika mengimplementasikan sistem ini maka akan
menurunkan kinerja dari sebuah aplikasi sehingga biasanya jumlah thread
dibatasi dalam sistem. Pada model many to many, akan memultipleks banyak
user-level thread ke kernel thread yang jumlahnya sedikit atau sama dengan
user-lvl. Model ini mengizinkan developer membuat thread sebanyak yang ia mau
tetapi concurrency tidak dapat diperloleh karena hanya satu thread yang dapat
dijadwalkan oleh kernel pada suatu waktu. Keuntungan dari sistem ini ialah
kernel thread yang bersangkutan dapat berjalan secara paralel pada
multiprosesor[2].
Pada umumnya saat
ini setiap sistem operasi moderen telah mendukung proses multithreading. Setiap
sistem operasi memiliki konsep tersendiri dalam pengimplementasiannya. Sebuah
sistem operasi dapat mendukung thread pada kernel maupun pada
user-level(tinggat pengguna). Terdapat tida perbedaan antara kernel thread dan
user-level thread yaitu, user-level thread tidak dikenali atau tidak di ketahui
oleh sebuah kernel sedangkan kernel hanya mengenali kernel thread, user-level thread
diimplementasikan dengan pustaka (library) thread sedangkan kernel thread di
dukung langsung oleh sistem operasi dan dijadwalkan oleh kernel, serta sebuah kernel
thread tidak dikaitkan dengan proses sedangkan setiap user-lever thread terkait
dengan proses[5]. Pada user-lever thread pustaka(library) thread menyediakan
fasilitas untuk pembuatan thread, penjadwalan thread, dan manajemen thread
tanpa dukungan dari kernel. Semua pembuatan dan penjadwalan tersebut dilakukan
dalam ruang pengguna tanpa campur tangan dari kernel. Thread ini biasanya dapat
cepat dibuat dan dikendalikan. Selain didukung langsung oleh sistem operasi,
pembuatan, penjadwalan dan manajemen kernel thread dilakukan kernel pada kernel
space. Pengaturan kernel thread yang dilakukan oleh sistem operasi,
mengakibatkan pembuatan dan pengaturan kernel thread lebih lambat dibandingkan
dengan user-level thread. Kernel thread lebih baik dibandingkan user-level
thread ketika thread melakukan blocking system call dan lebih baik ketika di
dalam lingkungan multiprosesor. User-level thread biasanya lebih cepat untuk
membuat dan mengelola, thread ini lebih baik dari kernel thread apabila tidak
ada blocking system call[1,5].
Telah dijelaskan
sebelumnya bahwa user-level thread dijadwalkan dengan pustaka (library thread)
sedangkan kernel thread di dukung langsung oleh kernel (sistem operasi). Oleh
karena itu pada saat context switch antara user level thread sebuah library
thread akan mengambil user-level thread dan menggantinya dengan thread yang
lain. Tindakan ini biasanya melibatkan penyelamatan dan pemulihan keadaan
register. Sedangkan pada saat contect switch antara kernel thread sebuah kernel
akan melakukan penyimpanan nilai register CPU dari thread yang di pindahkan dan
melakukan pemulihan register CPU dari thread baru yang telah dijadwalkan[1,5].
Setelah membahas
mengenai proses akan dibahas pula mengenai penjadwalan (scheduling).
Penjadwalan berkaitan dengan permasalahan memutuskan proses mana yang akan
dilaksanakan dalam suatu sistem. Proses yang belum mendapat jatah alokasi dari
CPU akan mengantri di ready queue. Algoritma penjadwalan berfungsi untuk
menentukan proses manakah yang ada di ready queue yang akan dieksekusi
oleh CPU. Bagian berikut ini akan memberikan ilustrasi beberapa algoritma
penjadwalan. FCFS (First Come First Serve) merupakan algoritma penjadwalan yang
paling sederhana yang digunakan CPU. Dengan menggunakan algoritma ini setiap
proses yang berada pada status ready dimasukkan kedalam FIFO queue atau
antrian dengan prinsip first in first out, sesuai dengan waktu
kedatangannya. Proses yang tiba terlebih dahulu yang akan dieksekusi. Kemudian
algoritma SJF (Shortes Job First), pada algoritma ini setiap proses yang ada di
ready queue akan dieksekusi berdasarkan burst time terkecil. Hal
ini mengakibatkan waiting time yang pendek untuk setiap proses dan
karena hal tersebut maka waiting time rata-ratanya juga menjadi pendek,
sehingga dapat dikatakan bahwa algoritma ini adalah algoritma yang optimal.
Algoritma ini dapat dibagi menjadi dua bagian. Pertama Preemptive Shortes Job First, jika ada proses
yang sedang dieksekusi oleh CPU dan terdapat proses di ready queue dengan burst
time yang lebih kecil daripada proses yang sedang dieksekusi tersebut, maka
proses yang sedang dieksekusi oleh CPU akan digantikan oleh proses yang berada
di ready queue tersebut. Preemptive
SJF sering disebut juga Shortest Remaining Time First scheduling.
Kedua Non-preemptive
Shortes Job First, CPU tidak memperbolehkan proses yang ada di ready
queue untuk menggeser proses yang sedang dieksekusi oleh CPU meskipun
proses yang baru tersebut mempunyai burst time yang lebih kecil[2].
No comments:
Post a Comment