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 copy 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
processnya tetapi menciptakan pointer ke struktur data pada parent process yang
memungkinkan child process untuk berbagi memori dan sumber daya dari parent processnya.
Project LinuxThread menggunakan
system call ini untuk mensimulasi thread di 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 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.
Penjadwalan CPU
Penjadwalan CPU adalah pemilihan proses dari
antrian ready untuk dapat dieksekusi. Penjadwalan CPU juga merupakan konsep
dari multiprogramming, dimana CPU digunakan secara bergantian untuk proses yang
berbeda. Suatu proses terdiri dari dua siklus yaitu Burst I/O dan Burst CPU
yang dilakukan bergantian hingga proses selesai. Penjadwalan CPU mungkin
dijalankan ketika proses:
1. running ke waiting time
2. running ke ready state
3. waiting ke ready state
4. terminates
Proses 1 dan 4 adalah proses Non Preemptive,
dimana proses tersebut tidak bisa di- interrupt, sedangkan 2 dan 3 adalah
proses Preemptive, dimana proses boleh di interrupt.
Pada saat CPU menganggur, maka sistem operasi
harus menyeleksi proses-proses yang ada di memori utama (ready queue) untuk
dieksekusi dan mengalokasikan CPU untuk salah satu dari proses tersebut.
Seleksi semacam ini disebut dengan shortterm scheduler (CPU scheduler).
·
Kriteria Penjadwalan
Algoritma penjadwalan CPU yang berbeda
mempunyai property yang berbeda. Dalam memilih algoritma yang digunakan untuk
situasi tertentu, kita harus memikirkan properti yang berbeda untuk algoritma
yang berbeda. Banyak kriteria yang dianjurkan utnuk membandingkan penjadwalan CPU
algoritma. Kriteria yang biasanya digunakan dalam memilh adalah :
1. CPU Utilization
Kita ingin menjaga CPU sesibuk mungkin. CPU
utilization akan mempunyai range dari 0 ke 100 persen. Di sistem yang
sebenarnya seharusnya ia mempunyai range dari 40 persen samapi 90 persen
2. Throughput
Jika cpu sibuk mengeksekusi proses, jika
begitu kerja telah dilaksanakan. Salah satu ukuran kerja adalah banyak proses
yang diselesaikan per unit waktu, disebut througput. Untuk proses yang lama
mungkin 1 proses per jam ; untuk proses yang sebentar mungkin 10 proses
perdetik.
3. Turnaround time
Dari sudur pandang proses tertentu, kriteria
yang penting adalah berapa lama untuk mengeksekusi proses tersebut. Interval
dari waktu yang dijinkan dengan waktu yang dibutuhkan untuk menyelesaikan
sebuah prose disebut turn around time. Trun around time adalah jumlah periode
untuk menunggu untuk bisa ke memori, menunggu di ready queue, eksekusi di CPU,
dan melakukan I/O.
4. Waiting time
Algoritma penjadwalan cpu tidak mempengaruhi
waktu untuk melaksanakan proses tersebut atau I/O; itu hanya mempengaruhi
jumlah waktu yang dibutuhkan proses di antrian ready. Waiting time adalah
jumlah periode menghabiskan di antrian ready.
5. Response time
Di sistem yang interaktif, turnaround time
mungkin bukan waktu yang terbaik untuk kriteria. Sering sebuah proses bisa
memproduksi output diawal, dan bisa meneruskan hasil yang baru sementara hasil
yang sebelumnya telah diberikan ke user. Ukuran yang lain adalah waktu dari
pengiriamn permintaan sampai respon yang pertama di berikan. Ini disebut
response time, yaitu waktu untuk memulai memberikan respon, tetapi bukan waktu
yang dipakai output untu respon tersebut.
Biasanya yang dilakukan adalah memaksimalkan
CPU utilization dan throughput, dan minimalkan turnaround time, waiting time,
dan response time dalam kasus tertentu kita mengambil rata-rata.
Konsep Thread
Thread merupakan unit dasar dari penggunaan
CPU, yang terdiri dari Thread_ID, program counter, register set,danstack
. Sebuah thread berbagi code section, datasection, dan sumber daya sistem
operasi dengan Thread lain yang dimiliki oleh prosesyang sama dan Thread juga
sering disebut lightweight process.
Keuntungan Thread :
- -
Responsif
- -
Berbagai
sumber daya
- -
Ekonomis
- -
Utilisasi
arsitektur multiprosessor
Thread kernel :
Thread kernel didukung langsung oleh sistem
operasi. Pembuatan,penjadwalan, dan manajemen thread dilakukan oleh
kernel pada kernel space
Thread diatur oleh kernel,
karena itu jika sebuah thread menjalankan blocking system
call maka kernel dapat menjadwalkan thread lain diaplikasi untuk
melakukan eksekusi.
Pada lingkungan multiprocessor, kernel dapat
menjadwal thread-thread pada processor yang berbeda. Contoh sistem operasi yang
mendukung kernel thread adalah Windows NT, Solaris, Digital UNIX.
Thread Cancellation :
Thread cancellation adalah pemberhentian
thread sebelum tugasnya selesai.Pemberhentian target
thread dapat terjadi melalui dua cara yang
berbeda:
1. Asynchronous cancellation : suatu thread
seketika itu juga memberhentikan target thread
2. Defered cancellation : target thread
secara perodik memeriksa apakah dia harusberhenti, cara ini memperbolehkan
target thread untuk memberhentikan dirinya sendirisecara terurut.
Thread Kernel Linux :
Linus Torvalds mendefinisikan bahwa sebuah
thread adalah Context of Execution (COE),yang berarti bahwa hanya ada sebuah
Process Control Block (PCB) dan sebuahpenjadwal yang diperlukan. Linux tidak
mendukung multithreading, struktur data yangterpisah, atau pun rutin kernel.
Linux menyediakan 2 system call yaitu :
1.Fork memiliki fungsi untuk
menduplikasi proses dimana proses anak yang dihasilkanbersifat
Independent.
2. Clone memiliki sifat yang mirip dengan
fork yaitu sama-sama membuat duplikat dariproses induk.
Berikut
langkah-langkah ringkas untuk membuat thread sederhana pada linux:
1. Pastikan telah ada include dan id dari thread
sudah dicantumkan dalam kode.
contoh:
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
Catt: pthread_tid adalah untuk membuat thread id
contoh:
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
Catt: pthread_tid adalah untuk membuat thread id
2. Buatlah thread pada inti program (int main)
dengan menggunakan fungsi pthread_create.
contoh:
pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
catt:
tid[i] adalah id thread yang dibuat pada langkah 1
&doSomeThing adalah
fungsi yang dijalankan oleh thread
3. Pastikan thread mempunyai fungsi yang
dijalankan.
contoh:
void* doSomeThing(void
*arg) {
unsigned long i =
0;
pthread_t id =
pthread_self();
if(pthread_equal(id,tid[0]))
{
printf("\n First
thread processing\n");
}
else {
printf("\n Second thread processing\n");
}
for(i=0; i<(0xFFFFFFFF);i++);
return NULL;
}
Catt: Fungsi ini berkaitan dengan langkah 2.
fungsi ini yang dipassing pada pthread_create.
4. Jika ingin antar thread mengetahui satu sama
lain (satu thread mengetahui ada thread lain, sehingga dalam berproses tidak
error) gunakan fungsi pthread_join.
contoh:
pthread_join(th1, NULL);
pthread_join(th2, NULL);
Catt: contoh ini jika misalnya ada dua thread bernama th1 dan th2 yang akan di-join.
Catt: contoh ini jika misalnya ada dua thread bernama th1 dan th2 yang akan di-join.
5. Untuk menghindari race condition thread dapat
digunakan pthread_mutex.
sumber :
http://karinaarimukti.blogspot.com/2016/10/contoh-thread-pada-linux.html
http://bagas97ug.blogspot.com/2016/10/thread-pada-linux.html
http://karinaarimukti.blogspot.com/2016/10/contoh-thread-pada-linux.html
http://bagas97ug.blogspot.com/2016/10/thread-pada-linux.html
Komentar
Posting Komentar