Ujian 2 MK SO FCFS Sinkronisasi java
-
Upload
arie-budiansyah -
Category
Education
-
view
84 -
download
1
Transcript of Ujian 2 MK SO FCFS Sinkronisasi java
Materi Penjadwalan dan Sikronisasi (FCFS-CubbyHole) - 21 Mei 2014|Hal 1 dari 3
Ujian 2
Matakuliah: Sistem Operasi
Jurusan: Informatika - Universitas Syiah Kuala
Semester Genap 2013/2014 - Pengajar: Arie Budiansyah, M.Eng.
--------------------------------------------------------------------------------------------------------------
Dibawah ini ada sebuah program penjadwalan FCFS dan sinkronisasi yang masih perlu
diperbaiki. Tugas anda adalah menyempurnakan program ini agar berjalan sesuai dengan konsep
penjadwalan dan sinkronisasi. *good luck.
“Bersemangatlah melakukan hal-hal yang bermanfaat bagimu dan jangan malas (putus asa)”
###############
import java.util.*;
class fcfs_sinkronisasi {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print("enter no. of processes : ");
int n=sc.nextInt();
int[] process = new int[n+1];
int[] burst = new int[n+1];
int[] waiting = new int[n+1];
int[] turn =new int[n+1];
for(int m=1; m<=n; m++){
process[m]=m;
System.out.print("enter burst time of process "+m+": ");
burst[m]=sc.nextInt();
//System.out.println("");
}
turn[1]=burst[1]; // turnaround time of first process is equal to its burst time.
for(int i=2; i<=n; i++) {
turn[i]=burst[i]+turn[i-1];
waiting[i]=turn[i]-burst[i];
}
for (int i=1; i<=n; i++) {
System.out.print("Burst Time "+i+": "+burst[i]+" --> ");
System.out.println("Waiting Time "+i+": "+waiting[i]);
}
for (int i=1; i<=n; i++) {
CubbyHole ch = new CubbyHole();
//ch[0] = new CubbyHole();
Materi Penjadwalan dan Sikronisasi (FCFS-CubbyHole) - 21 Mei 2014|Hal 2 dari 3
Petugas pgs = new Petugas(ch, n, burst[i]);
//pgs[0] = new Petugas();
Kendaraan kdr = new Kendaraan(ch, n);
//kdr[0] = new Kendaraan();
//System.out.print("jumlah Process: "+process.length);
//System.out.println("burstTime: "+burst[i]);
//System.out.println("Process ke: "+i+" --> Burst Time: "+burst[i]);
//ch[i] = new CubbyHole();
//Petugas(ch, n, burst);
//kdr[i] = new Kendaraan(ch[i], n);
//System.out.print("ch: "+ch[i]);
//System.out.print("pgs: "+pgs[i]);
//System.out.println("kdr: "+kdr[i]);
pgs.start();
kdr.start();
}
}
}
class CubbyHole {
private int contents;
private boolean available = false;
public synchronized int get() {
while (available == false) {
try {
wait();
} catch (InterruptedException e) { }
}
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value) {
while (available == true) {
try {
wait();
} catch (InterruptedException e) { }
}
contents = value;
available = true;
Materi Penjadwalan dan Sikronisasi (FCFS-CubbyHole) - 21 Mei 2014|Hal 3 dari 3
notifyAll();
}
}
class Petugas extends Thread {
private CubbyHole cubbyhole;
private int processLength;
private int burstTime;
public Petugas(CubbyHole c, int processLength, int burstTime) {
cubbyhole = c;
this.processLength = processLength;
this.burstTime = burstTime;
//System.out.println("jmlh Proses: "+ processLength);
}
public void run() {
for (int i = 1; i < this.processLength; i++) {
//System.out.print("BurstTime: "+ burstTime);
cubbyhole.put(i);
System.out.println("Petugas memberi tiket: " + i);
try {
sleep((int)(burstTime * 1000));
} catch (InterruptedException e) { }
}
}
}
class Kendaraan extends Thread {
private CubbyHole cubbyhole;
private int processLength;
public Kendaraan(CubbyHole c,int processLength) {
cubbyhole = c;
this.processLength = processLength;
}
public void run() {
int value = 0;
for (int i = 0; i < this.processLength; i++) {
value = cubbyhole.get();
System.out.println("Kendaraan mengambil tiket: " + value);
}
}
}
D:\Bahan mengajar\Genap20132014\SO\QUIS-SO_1208107010012_PerbaikanProgramFCFS\fcfs_sinkronisasi.java 02 June 2014 16:10
/* NAMA : CUT DIRAYATI SAFIRA * NIM : 1208107010012 * quis sistem operasi */
import java.util.*;
public class fcfs_sinkronisasi{
public static void main(String args[]) {System.out.println("====================================================");System.out.println("\t\tFCFS & SINKRONISASI\t\t");System.out.println("By: CUT DIRAYATI SAFIRA - 1208107010012");System.out.println("====================================================\n");Scanner sc = new Scanner(System.in);System.out.print("Masukkan Banyak Kendaraan (n) : ");int n=sc.nextInt();System.out.print("\n");int[] process=new int[n+1];int [] burst=new int[n+1];int [] waiting=new int[n+1];int[] turn=new int[n+1];
for(int m=0;m<n;m++){process[m]=m;System.out.print("Masukkan Burst Time dari Proses ke-"+(m+1)+" : ");burst[m]=sc.nextInt();System.out.print("\n");
}
turn[0]=burst[0]; // turnaround time of first process is equal to its burst time.
for(int i=1;i<n;i++) {turn[i]=burst[i]+turn[i-1];waiting[i]=turn[i]-burst[i];
}
for(int i=0; i<n; i++){System.out.print("Burst Time ke-"+(i+1)+" adalah "+burst[i]+" & ");System.out.println("Waiting Time ke-"+(i+1)+" adalah "+waiting[i]);
}
System.out.print("\n");//ch[0]=new CubbyHole();CubbyHole ch = new CubbyHole();Petugas pgs = new Petugas(ch, n, burst);//pgs[0] = new Petugas();Kendaraan kdr = new Kendaraan(ch,n);//kdr[0] = new Kendaraan();
//System.out.println("Jumlah Proses : "+process.length);//System.out.println("burst time : "+burst[i]);//System.out.println("Process ke : "+i+"--> Burst Time : "+burst[i]);
//ch[i] = new CubbyHole();//Petugas(ch, n, burst);//kdr[i]=new Kendaraan(ch[i],n);
-1-
D:\Bahan mengajar\Genap20132014\SO\QUIS-SO_1208107010012_PerbaikanProgramFCFS\fcfs_sinkronisasi.java 02 June 2014 16:10
//System.out.println("ch: "+ch[i]);//System.out.println("pgs: "+pgs[i]);//System.out.println("kdr: "+kdr[i]);
pgs.start();kdr.start();
}//}/*int tot_turn=0,tot_wait=0;
for(int i=1;i<=n;i++){ tot_turn+=turn[i]; tot_wait+=waiting[i]; }
float avg_turn=(float)tot_turn/n; float avg_wait=(float)tot_wait/n;
for(int m=1;m<=n;m++){ System.out.println("\nprocess "+process[m]); System.out.print("turn around time : "+turn[m]); System.out.print(" waiting time : "+waiting[m]); } System.out.println("\ntotal turn around time : "+tot_turn); System.out.println("\ntotal waiting time : "+tot_wait); System.out.println("\navg turn around time : "+avg_turn); System.out.println("\navg waiting time : "+avg_wait);*/
int i;}
/* NAMA : CUT DIRAYATI SAFIRA * NIM : 1208107010012 * quis sistem operasi */public class Petugas extends Thread{
private CubbyHole cubbyhole;private int processLength;private int[] burstTime;
public Petugas(CubbyHole c, int processLength, int[] burstTime ){cubbyhole=c;this.processLength = processLength;this.burstTime = burstTime;/*for(int i=0; i<processLength;i++){
System.out.println("burst "+i+": "+burstTime[i]); }*/
//System.out.println("jumlah proses : "+processLength);}
public void run(){synchronized(cubbyhole){for(int i=0; i<this.processLength; i++){
//System.out.print("Burst Time :+burstTime");cubbyhole.put(i);System.out.print("Petugas memberi tiket ke-"+(i+1)+" dengan Burst Time adalah "+
burstTime[i]);
-2-
D:\Bahan mengajar\Genap20132014\SO\QUIS-SO_1208107010012_PerbaikanProgramFCFS\fcfs_sinkronisasi.java 02 June 2014 16:10
try{sleep((int)((burstTime[i])*100));
}catch(InterruptedException e){System.out.println(e);
}}
}}
}
class Kendaraan extends Thread{private CubbyHole cubbyhole;private int processLength;
public Kendaraan(CubbyHole c, int processLength){cubbyhole=c;this.processLength=processLength;
}
public void run(){int value=0;synchronized(cubbyhole){for(int i=0; i<this.processLength; i++){
value=cubbyhole.get();System.out.print(" dan Kendaraan mengambil tiket ke-"+(value+1)+"\n");
}}
}}
/* NAMA : CUT DIRAYATI SAFIRA * NIM : 1208107010012 * quis sistem operasi */public class CubbyHole{
private int contents;private boolean available = false;
public synchronized int get() {
while (available == false) {try {
wait();} catch (InterruptedException e) { }
}available = false;notifyAll();return contents;
}
public synchronized void put(int value) {while (available == true) {
try {wait();
-3-
D:\Bahan mengajar\Genap20132014\SO\QUIS-SO_1208107010012_PerbaikanProgramFCFS\fcfs_sinkronisasi.java 02 June 2014 16:10
} catch (InterruptedException e) { }}contents = value;available = true;notifyAll();
}
}
-4-