Sistem Operasi
Konsep
proses: program yang sedang dieksekusi
layout
memory untuk proses
Process
Control Block
Penjadwalan:
Latar
belakang: multiprogramming & multitasking
Elemen:
antrian:
job, ready, device
penjadwal
(scheduler): long, short & medium term
context
switch: membuat CPU idle
Operasi:
creation & termination
Ruang
memory: saling menggunakan (sebagian / seluruhnya), saling
bebas
Eksekusi:
saling tunggu / parallel
Terminasi
proses ! de-alokasi resource
Komunikasi
antar proses yang saling tergantung
Model:
shared memory & message passing
Komunikasi:
langsung & tidak langsung
Sinkronisasi
& Buffer
Client-Server:
Socket, RPC, RMI
Pengertian Thread
Pengertian Thread
Thread adalah sebuah alur kontrol dari sebuah
proses. Suatu proses yang multithreaded mengandung beberapa perbedaan
alur kontrol dengan ruang alamat yang sama. Keuntungan dari
multithreaded meliputi peningkatan respon dari user, pembagian sumber
daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari
arsitektur multiprosesor. User level thread adalah thread yang tampak
oleh programmer dan tidak diketahui oleh kernel. User level thread
secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel
level thread didukung dan dikelola oleh kernel sistem operasi. Secara
umum, user level thread lebih cepat dalam pembuatan dan pengelolaan
dari pada kernel thread. Ada tiga perbedaan tipe dari model yang
berhubungan dengan user dan kernel thread.
- Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread.
- Model one to one: memetakan setiap user thread ke dalam satu kernel thread. Berakhir.
- Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.
Thread
Mempelajari
konsep thread
Mempelajari
berbagai pustaka thread: Pthread, Win32, Java
Mempelajari
berbagai isu terkait thread
Tentang Thread
Lightweight
process: satuan penggunaan CPU
Berbagi
resource dengan thread lain dalam sebuah proses
Proses
(heavyweight process), memilki kontrol tunggal eksekusi
Mutual Exclusion adalah Suatu kondisi dimana setiap
sumber daya diberikan tepat pada satu proses pada suatu waktu
(kondisi-kondisi untuk solusi). Tiga kondisi untuk menentukan mutual
Exclusion diantaranya :
- Tidak ada dua proses yang pada saat bersamaan berada di critical region.
- Tidak ada proses yang berjalan diluar critical region yang bisa menghambat proses lain
- Tidak ada proses yang tidak bisa masuk ke critical region
Race Condition adalah situasi di mana beberapa
proses mengakses dan memanipulasi data bersama pada saat besamaan. Nilai
akhir dari data bersama tersebut tergantung pada proses yang terakhir
selesai. Unutk mencegah race condition, proses-proses yang berjalan
besamaan haus di disinkronisasi.
Sinkronisasi adalah Komunikasi antara proses yang
membutuhkan place by calls untuk mengirim dan menerima data primitive.
Terdapat rancangan yang berbeda-beda dalam implementasi setiap
primitive. Pengiriman pesan mungkin dapat diblok (blocking) atau tidak
dapat dibloking (nonblocking) – juga dikenal dengan nama sinkron atau
asinkron.
Deadlock ialah suatu kondisi permanen dimana proses tidak berjalan lagi ataupun tidak ada komunikasi lagi antar proses. Deadlock
disebabkan karena proses yang satu menunggu sumber daya yang sedang
dipegang oleh proses lain yang sedang menunggu sumber daya yang dipegang
oleh proses tersebut. Atau dengan kata lain setiap proses dalam set
menunggu untuk sumber yang hanya bisa dikerjakan oleh proses lain dalam
set yang sedang menunggu.
Starvation adalah suatu proses meninggalkan critical
section dan lebih dari satu proses menunggu (waiting).Beberapa proses
dapat ditolak aksenya dalam waktu tak terbatas.
Monitor adalah kumpulan prosedur, variabel dan
struktur data di satu modul atau paket khusus. Proses dapat memanggil
prosedur-prosedur kapan pun diinginkan. Tapi proses tak dapat mengakses
struktur data internal dalam monitor secara langsung. Hanya lewat
prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur
internal.
Semaphore adalah pendekatan yang diajukan oleh
Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama
dengan menggunakan penanda-penanda sederhana. Seperti proses dapat
dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda
tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi
dengan struktur penanda yang cocok untuk kebutuhan itu. Variabel khusus
untuk penanda ini disebut semaphore.Semaphore mempunyai dua sifat,
yaitu:
- Semaphore dapat diinisialisasi dengan nilai non-negatif.
- Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan Djikstra adalah operasi P dan V.
Keuntungan Model Multi Thread
Responsif !
web browser
Resource
sharing: aplikasi dengan beberapa thread dapat
menggunakan
lokasi memori yang sama
Ekonomis:
tanpa alokasi dan dealokasi resource ! resource sharing
Skalabilitas:
selain optimasi penggunaan prosesor multicore,
perpindahan
antar thread lebih cepat pada single core daripada proses
Isu Terkait Pemrograman Multi Core
Berbagi
aktifitas
Penyeimbangan
beban
Memecah data
Ketergantungan
data
Pengujian
dan debug
Ilustrasi : Multi Thread Server
Jenis Thread
User thread:
Kernel
thread
Keduanya
meliputi: pembuatan, penjadwalan dan pengelolaan di levelnya
masing-masing
User Thread
Selalu
berasosiasi dengan kernel thread
Pustaka di
level user ! cepat
Salah satu
thread yang melakukan blocking akan mencegah seluruh
proses di
mana thread tersebut berasal untuk ditunda (single thread
kernel) !
SC: read , sleep
Pthread
(POSIX), Win32, Java
Kernel Thread
Pengelolaan
di level kernel
lambat
dianggap
seperti proses
Salah satu
thread yang melakukan blocking, tidak mencegah seluruh
proses
tertunda
Model thread
Many- To - One
Konkurensi
terbatas
Green
(Solaris-2), GNU portable thread
One-To-One
Proses
dicegah tertunda secara total
Mahal, satu
user thread harus diwakili satu kernel thread
Windows NT/XP/2000, Linux, Solaris 9
Many-To-Many
Banyak user
thread dipetakan ke kernel thread
Konkurensi
optimal
Solaris
sebelum versi 9, Windows NT/2000 dengan paket ThreadFiber
Pustaka Thread
Memberikan
API untuk pengembang perangkat lunak mengelola thread
Implementasi:
sepenuhnya
di user level (-to-one)
didukung
oleh kernel level (-to-many)
Posik Thread
Diimplementasi
baik sebagai user maupun kernel level
Standar IEEE
1003.1c: API terkait pembuatan dan sinkronisasi thread
Umum
digunakan pada keluarga UNIX
Ilustrasi : Posik Thread
#include
<stdio.h>
#include
<stdlib.h>
#include
<pthread.h>
int *a,*b;
void
*vector(void *vargp) {
int
temp,counter,start,finish,ptrNumber,*passVal ;
ptrNumber=*((int
*) vargp); free(vargp);
start=(ptrNumber*25000);
finish=start+25000;
temp=0;
for(counter=start;counter<finish;counter++)
temp+=a[counter]*b[counter];
passVal=malloc(sizeof(int));
*passVal=temp;
pthread_exit(passVal);
}
int main() {
pthread_t
tid[4];
int
c=0,c1=0,i,*ptr,*passVal,tmp;
a=malloc(100000*sizeof(int));
b=malloc(100000*sizeof(int));
for(i=0;i<1000;i++)
{
a[i]=1+(rand()%1000);
b[i]=1+(rand()%1000);
c+=(a[i]*b[i]);
}
printf("C
total (Sequential) = %d\n",c);
for(i=0;i<4;i++)
{
ptr=malloc(sizeof(int));
*ptr=i;
pthread_create(&tid[i],NULL,vector,ptr);
}
for(i=0;i<4;i++)
{
if((pthread_join(tid[i],
(void**) &passVal))==0) {
tmp=*passVal;
c1+=tmp;
}
else {
printf("Threads
%d can’t be joined\n",i);
printf("program
terminated\n");
exit(0);
}
}
printf("C
total (Parallel) = %d\n",c1);
printf("\nComparing
sequential and parallel result\n");
if((c-c1)!=0)
printf("pthread
failed...!\n");
else
printf("pthread
success!\n");
return 0;
}
Java Thread
Dikelola JVM
Dibuat
dengan mengimplementasi Runnable
Ilustrasi : Java Thread
class
MutableInteger {
private int
value;
public int
getValue() {
return
value;
}
public void
setValue(int value) {
this.value=value;
}
}
class
Summation implements Runnable {
private int
upper;
private
MutableInteger sumValue;
public
Summation (int upper, MutableInteger sumValue) {
this.upper=upper;
this.sumValue=sumValue;
}
public void
run() {
int sum=0;
Thread
thrd=new Thread();
thrd.start();
for(int i=0;
i<upper; i++) {
sum=sum+2;
}
sumValue.setValue(sum);
}
}
public class
Driver {
public
static void main(String[] args) {
if(args.length
> 0) {
if(Integer.parseInt(args[0])<0)
{
System.err.println(args[0]+"
must be>=0.");
}
else {
MutableInteger
sum=new MutableInteger();
int
upper=Integer.parseInt(args[0]);
Thread
thrd=new Thread(new Summation(upper,sum));
thrd.start();
try {
thrd.join();
System.out.println("The
sum of "+ upper+ " is " + sum.getValue());
}
catch(InterruptedException
e) {
}
}
}
else {
System.err.println("Usage:
Driver <Integer Value>");
}
}
}
S C : fork & exec
Opsi saat
thread dijalankan:
menduplikasi
seluruh thread dalam sebuah proses
menduplikasi
thread yang menjalankan fork
Pembatalan Thread
Terkait
terminasi thread sebelum seharusnya selesai
Opsi:
Asinkron:
langsung melakukan terminasi
Deffered:
safely cancelation,
Penanganan Signal
Digunakan
untuk memberitahu proses bahwa ada sebuah kejadian.
Diterima
secara
sinkron:
dikirimkan ke proses penyebab munculnya SIGNAL (pembaian
dengan nol)
asinkron:
dikirimkan oleh kejadian di luar proses (ctrl C)
Dikelola
oleh:
default
handler
user defined
handler
Beberapa ada
yang diabaikan (mengubah ukuran obyek window), ada
yang
menyebabkan proses harus diterminasi (mengakses memori
secara
ilegal)
Penanganan Signal
Pada thread:
SIGNAL
dikirimkan ke thread yang menyebabkannya
SIGNAL
dikirimkan ke setiap thread pada proses
SIGNAL
dikirimkan ke thread tertentu pada proses
Menugaskan
sebuah thread untuk menangani semua SIGNAL yang
terjadi
Thread Pools
Multithreaded
server: berpotensi membahayakan sistem jika diijinkan
membuat
thread dalam jumlah sangat banyak (tak hingga)
Dibatasi
jumlah thread yang diijinkan (pools)
Saat proses
dijalankan, sejumlah thread telah disiapkan, menunggu
untuk
memberi layanan pada client
Keuntungan:
lebih cepat
daripada konsep on-demand
mencegah
kegagalan operasi karena keterbatasan resource
Thread Specific Data
Memungkinkan
setiap thread memiliki datanya sendiri
for(i=0;i<4;i++)
{
ptr=malloc(sizeof(int));
*ptr=i;
pthread_create(&tid[i],NULL,vector,ptr);
}
WINDOWS XP
One-to-one
mapping
Berisi:
identitas
register,
stack (user & kernel), data khusus 1
Struktur
data utama:
Executive
thread block (ETHREAD)
Kernel
thread block (KTHREAD)
Thread
environment block (TEB)
Linux Thread
Dikenal
sebagai task
Thread
dibuat dengan clone( ) SC
Memungkinkan
berbagi ruang memori antara child-parent, pointer ke
lokasi
memori