Jumat, 08 Juni 2012

Sistem Operasi

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
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 :
  1. Tidak ada dua proses yang pada saat bersamaan berada di critical region.
  2. Tidak ada proses yang berjalan diluar critical region yang bisa menghambat proses lain
  3. 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:
  1. Semaphore dapat diinisialisasi dengan nilai non-negatif.
  2. 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


Tidak ada komentar:

Poskan Komentar