0% found this document useful (0 votes)
61 views

First Come First Serve (FCFS) Source Code:: C. Algorithm Simulation

The document provides source code and flowcharts for two CPU scheduling algorithms: First Come First Serve (FCFS) and Shortest Job First (SJF). For FCFS, it takes processes in the order of their arrival time and allocates CPU to the first waiting process. For SJF, it allocates CPU to the process with the shortest burst time among the processes waiting in the queue. Both algorithms calculate turnaround time, waiting time, and average times.

Uploaded by

joyce potter
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views

First Come First Serve (FCFS) Source Code:: C. Algorithm Simulation

The document provides source code and flowcharts for two CPU scheduling algorithms: First Come First Serve (FCFS) and Shortest Job First (SJF). For FCFS, it takes processes in the order of their arrival time and allocates CPU to the first waiting process. For SJF, it allocates CPU to the process with the shortest burst time among the processes waiting in the queue. Both algorithms calculate turnaround time, waiting time, and average times.

Uploaded by

joyce potter
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 25

C.

Algorithm Simulation

 First Come First Serve (FCFS)


 Source Code :
package osfinals;
import java.util.Scanner;
public class Fcfs {

public static void main(String[] args) {


// TODO Auto-generated method stub
System.out.print("Enter Number of Process : ");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int pd[] = new int [n];
int at[] = new int[n];
int bt[] = new int [n];
int ct[] = new int [n];
int tat[] = new int [n];
int wt[] = new int [n];
float tatave = 0, wtave = 0;

for (int i = 0; i < n; i++) {


System.out.println("Enter Arrival Time");
System.out.print("P" + (i+1) + ":");
at[i] = in.nextInt();
System.out.println("Enter Burst Time");
System.out.print("P" + (i+1) + ":");
bt[i] = in.nextInt();
pd[i] = i + 1;
}

int temp;
for (int j = 0; j < n; j++) {
for (int k = j+1; k < n; k++) {
if (at[j] > at[k]) {
temp = pd[j];
pd[j] = pd[k];
pd[k] = temp;

temp = at[j];
at[j] = at[k];
at[k] = temp;

temp = bt[j];
bt[j] = bt[k];
bt[k] = temp;
}
}
}

for (int i = 0; i < n; i++) {


if (i == 0) {
ct[i] = at[i] + bt[i];
}
else {
if(at[i] > ct[i-1]) {
ct[i] = at[i] + bt[i];
}
else {
ct[i] = ct[i-1] + bt[i];
}
}

tat[i] = ct[i] - at[i];


wt[i] = tat[i] - bt[i];
wtave += wt[i];
tatave += tat[i];
}

System.out.println("Process \t Arrival Time \t Burst


Time \t Completion Time \t Turn-Around Time \t Waiting Time");

for(int z = 0; z < n; z++) {


System.out.println(" " + pd[z] + "\t\t\t" + at[z]
+ "\t \t" + bt[z] + "\t\t" + ct[z] + "\t \t\t" + tat[z] + "\t\t\t" + wt[z]);
}

System.out.println("Gantt Chart");

for (int y = 0; y < n; y++) {


System.out.print("P" + pd[y] + "\t");
}

System.out.println();
System.out.println("Turn-Around Time : " + (tatave));
System.out.println("Average Turn-Around Time : " +
(tatave/n) + "ms");
System.out.println("Waiting Time : " + (wtave));
System.out.println("Average Waiting Time : " + (wtave/n) +
"ms");
}

}
 FCFS Flowchart

Start

int pd [ ] = 0
int at [ ] = 0
int bt [ ] = 0
int ct [ ] = 0
int ta [ ] = 0
int wt [ ] = 0
int f [ ] = 0
int st [ ] = 0

int tot [ ] = 0

float avg wt = 0

float avg ta = 0

Input n

i=0

i<n

Enter burst time i=i+1

bt = [ i ]

Enter arrival time


at = A[ i ]

Display pid at bt ct ta wt

i=0 i = i + tt

Display

pid [ i ] + “\t” + at [ i ] + “\t” + bt [ i ] + “\t” + ct [ i ] + “\t” +


ta [ i ] + “\t” + wt [ i ] );

avg wt /n
avg ta /n

Display

avg wt

avg ta

STOP
 Shortest Job First (SJF)
 Source Code :
package osfinals;
import java.util.Scanner;
public class Sjf {

public static void main(String[] args) {


// TODO Auto-generated method stub
Scanner in = new Scanner (System.in);
System.out.print("Enter Number of Process : ");
int n = in.nextInt();
int pd[] = new int [n];
int at[] = new int [n];
int bt[] = new int [n];
int ct[] = new int [n];
int tat[] = new int [n];
int wt[] = new int [n];
int f[] = new int [n];
int st = 0, tot = 0;
float tatave = 0, wtave = 0;

for(int i = 0; i < n; i++) {


System.out.println("Enter Arrival Time");
System.out.print("P" + (i+1) + ":");
at[i] = in.nextInt();
System.out.println("Enter Burst Time");
System.out.print("P" + (i+1) + ":");
bt[i] = in.nextInt();
pd[i] = i + 1;
f[i] = 0;
}
boolean a = true;
while(true) {
int c = n, min = 9999;
if(tot == n)
break;
for(int i = 0; i < n; i++) {
if((at[i] <= st) && (f[i] == 0) && (bt[i] <
min)) {
min = bt[i];
c = i;
}
}
if(c == n)
st++;
else {
ct[c] = st + bt[c];
st += bt[c];
tat[c] = ct[c] - at[c];
wt[c] = tat[c] - bt[c];
f[c] = 1;
tot++;
}
}
System.out.println("Process \t Arrival Time \t Burst
Time \t Completion Time\t Turn-Around Time\t Waiting Time");
for(int i = 0; i < n; i++) {
wtave += wt[i];
tatave += tat[i];
System.out.println(" " + pd[i] + "\t\t\t" + at[i]
+ "\t\t" + bt[i] + "\t\t" + ct[i] + "\t\t\t" + tat[i] + "\t\t\t" + wt[i]);
}

System.out.println("Turn-Around Time :" + (tatave));


System.out.println("Average Turn-Around Time : " +
(tatave/n) + "ms");
System.out.println("Waiting Time :" + (wtave));
System.out.println("Average Waiting Time : " + (wtave/n) +
"ms");
}

}
 SJF Flowchart

Start

int pid [ ] = 0
int ar [ ] = 0
int bt [ ] = 0
int ct [ ] = 0
int ta [ ] = 0
int wt [ ] = 0
float avg wt = 0
float avg ta = 0

Input n

i=0

i=i+1
i<n

Enter arrival time

ar =1 ;

Enter burst time

bt = 1;
A

temp = ar [ j ];
ar [ j ] = ar [ j + 1 ];
ar[ j + 1] = temp;
temp = b[ j + 1 ];
bt [ j ] = bt [ j + 1 ];
bt [ j + 1 ] = temp;
temp = pid [ j ];
pid [ j ] = pid [ j + 1 ];
pid [ j + 1 ] = temp;

i=0 i = i++

c t [ i ] = ar [ i ] + bt [ i ];

ar [ i ] > ct [ i – 1] c t [ i ] =ct [ i - 1] + bt [ i ];

c t [ i ] = ar [ i ] + bt [ i ]

ta [ i ] = ct [ i ] – ar [ i ];
wt [ i ] = at [ i ] – bt [ i ];
avgwt + = wt [ i ];
avgta + = ta [ i ];

pid [ i ] = i + 1;
f [ i ] = 0;

ct [ a ] = st + bt [ a ];
a=n min = 999
st = bt [ a ];

ta [ a ] = ct [ a ] – at [ a ];

wt [ a ] = ta [ a ] – bt [ a ];

f[a]=1
atA[ i ] < =st &&
f [i] ==0 && bt [ i ] < min

pid at BT CT WT

avg wt + = wt [ i ]
i++
avg ta + = ta [ i ]

pid [ i ] + at [ i ] + bt [ i ] + ct [ i ] + ta [ i ] + wt [ i ]

avg ta\n
avg wt \n

Display avgta , avg wt


 Preemptive
 Source Code
package osfinals;
import java.util.*;

public class Preemptive {

public static void main(String[] args) {

int aa, b, c, i, ii, iii, iiii;


int no_Process, total_Burst_Time = 0;
int totalwaitingTime = 0, totalturnaroundtime = 0;;
int count = 0;
double large = 0, averagewaitingTime = 0,
averageturnaroundtime = 0;
double num;
Scanner in = new Scanner(System.in);
System.out.print("Enter the number of process = ");
no_Process = in.nextInt();
ArrayList<process> process = new ArrayList<>();
for (i = 0; i < no_Process; i++) {
process.add(new process());
}

System.out.println("Enter the number");


for (ii = 0; ii < no_Process; ii++) {
total_Burst_Time += process.get(ii).burstTime;
process.get(ii).burstTime1 =
process.get(ii).burstTime;
process.get(ii).completion = 0;
}
while (count <= total_Burst_Time) {
b = 0;
large = 0;
for (aa = 0; aa < no_Process; aa++) {
if (process.get(aa).arrivalTime > count||
process.get(aa).burstTime<=0) {
b++;
}
}

if (b == no_Process) {
count++;
continue;
}

for (iii = 0; iii < no_Process; iii++) {


if (process.get(iii).arrivalTime > count ||
process.get(iii).burstTime <= 0) {
continue;
}
else {

if (process.get(iii).priorityvalue > large) {


large = process.get(iii).priorityvalue;
}
}
}
for (int iiiii = 0; iiiii < no_Process; iiiii++) {
if (large == process.get(iiiii).priorityvalue) {
process.get(iiiii).burstTime =
process.get(iiiii).burstTime - 1;
count++;
System.out.println(" this one
"+process.get(iiiii).processName);

if (process.get(iiiii).burstTime <= 0) {
process.get(iiiii).completion = count;
System.out.println(" this one
"+process.get(iiiii).processName+""+process.get(iiiii).completion);
}
}
}
}

for (int tt = 0; tt < no_Process; tt++) {


process.get(tt).waitingTime =
process.get(tt).completion - process.get(tt).burstTime1 -
process.get(tt).arrivalTime;
System.out.println(" waiting time of " +
process.get(tt).processName + " = " + process.get(tt).waitingTime);
System.out.println(" completion time of " +
process.get(tt).processName + " = " + process.get(tt).completion);
process.get(tt).turnaroundtime = process.get(tt).completion -
process.get(tt).arrivalTime;
System.out.println(" turnaround time of " +
process.get(tt).processName + " = " + process.get(tt).turnaroundtime);
}

for (int ttt = 0; ttt < no_Process; ttt++) {


totalwaitingTime = +totalwaitingTime +
process.get(ttt).waitingTime;
totalturnaroundtime = totalturnaroundtime +
process.get(ttt).turnaroundtime;
}
averagewaitingTime = totalwaitingTime / no_Process;
averageturnaroundtime = totalturnaroundtime / no_Process;

System.out.println("Average waiting time = " +


averagewaitingTime);
System.out.println("Average turnaround time = " +
averageturnaroundtime);

}
static class process {

String processName;
int arrivalTime;
int burstTime;
int burstTime1;
int completion;
int waitingTime;
int startTime;
double ratio;
double num;
int turnaroundtime;
int priorityvalue;
Scanner input = new Scanner(System.in);

process() {
System.out.print("Enter the name of the
process = ");
processName = input.next();
System.out.print("Enter the Arrival time of
the process = ");
arrivalTime = input.nextInt();
System.out.print("Enter the Burst time of
the process = ");
burstTime = input.nextInt();
System.out.print("Enter the pririty value of
the process = ");
priorityvalue = input.nextInt();
System.out.println();
}
}
}
 Non-Preemptive
 Source Code

package osfinals;
import java.util.Scanner;

public class Nonpreemptive{

public static void main(String args[]) {


Scanner s = new Scanner(System.in);

int x,n,p[],pp[],bt[],w[],t[],i;
float awt = 0;
float atat = 0;

p = new int[10];
pp = new int[10];
bt = new int[10];
w = new int[10];
t = new int[10];

System.out.print("Enter the number of process : ");


n = s.nextInt();
System.out.print("\n\t Enter burst time : time
priorities \n");

for(i=0;i<n;i++){
System.out.print("\nProcess["+(i+1)+"]:");
bt[i] = s.nextInt();
pp[i] = s.nextInt();
p[i]=i+1;
}

//sorting on the basis of priority


for(i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(pp[i]>pp[j]){
x=pp[i];
pp[i]=pp[j];
pp[j]=x;
x=bt[i];
bt[i]=bt[j];
bt[j]=x;
x=p[i];
p[i]=p[j];
p[j]=x;
}
}
}
w[0]=0;
awt=0;
t[0]=bt[0];
atat=t[0];
for(i=1;i<n;i++){
w[i]=t[i-1];
awt+=w[i];
t[i]=w[i]+bt[i];
atat+=t[i];
}

//Displaying the process

System.out.print("\n\nProcess \t Burst Time \t Wait


Time \t Turn Around Time Priority \n");
for(i=0;i<n;i++){
System.out.print("\n "+p[i]+"\t\t "+bt[i]
+"\t\t "+w[i]+"\t\t "+t[i]+"\t\t "+pp[i]+"\n");
awt/=n;
atat/=n;
System.out.print("\n Average Wait Time : "+awt);
System.out.print("\n Average Turn Around Time :
"+atat);

}
}
}
 NPP Flowchart

Start

int pid [ ]
int at [ ]
int bt [ ]
int ct [ ]
int ta [ ]
int wt [ ]
int f [ ]
int st = 0
int tot = 0
float avg wt = 0
float avg ta = 0

i=0

i<=n i=i+2

print enter process for arrival time


print enter process for burst time

pid a [ i ] = i + 1
f[i]=0
A

c = n min = 999
i=0

tot = = 0
i ++ i<n

at [ i ] < = st &&

f [ i ] == 0 &&

bt [ i ] < min

min = bt [ i ]
c=1

c==n

c++

ct [ c ] = st + bt [ c ];

st [ ] = bt [ c ]

ta [ c ] = ct [ c ] – at [ c ];

wt [ c ] = ta [ c ] – bt [ c ];

f[c]=1

tot ++

Print pi arrival burst complete turn


waiting
i=0
A

i<n i=0

avg wt = wt [ i ]

avg tat = ta [ i ]

Print pi [ i ] + at[ i ] + bt [ i ] + ct [ i ] + ta [ i ] + wt [ i ]

Display “ average turn around time is :’’ + avg ta /n


“ average wt is “ + avg wt /n

Stop
 Round Robin
 Source Code
package osfinals;
public static void roundRobin(String p[], int a[],

int b[], int n){

// result of average times

int res = 0;

int resc = 0;

// for sequence storage

String seq = new String();

// copy the burst array and arrival array

// for not effecting the actual array

int res_b[] = new int[b.length];

int res_a[] = new int[a.length];

for (int i = 0; i < res_b.length; i++) {

res_b[i] = b[i];

res_a[i] = a[i];

// critical time of system

int t = 0;

// for store the waiting time

int w[] = new int[p.length];

// for store the Completion time


int comp[] = new int[p.length];

while (true) {

boolean flag = true;

for (int i = 0; i < p.length; i++) {

// these condition for if

// arrival is not on zero

// check that if there come before qtime

if (res_a[i] <= t) {

if (res_a[i] <= n) {

if (res_b[i] > 0) {

flag = false;

if (res_b[i] > n) {

// make decrease the b time

t = t + n;

res_b[i] = res_b[i] - n;

res_a[i] = res_a[i] + n;

seq += "->" + p[i];

else {

// for last time

t = t + res_b[i];

// store comp time

comp[i] = t - a[i];

// store wait time


w[i] = t - b[i] - a[i];

res_b[i] = 0;

// add sequence

seq += "->" + p[i];

else if (res_a[i] > n) {

// is any have less arrival time

// the coming process then execute them

for (int j = 0; j < p.length; j++) {

// compare

if (res_a[j] < res_a[i]) {

if (res_b[j] > 0) {

flag = false;

if (res_b[j] > n){

t = t + n;

res_b[j] = res_b[j] - n;

res_a[j] = res_a[j] + n;

seq += "->" + p[j];

else {

t = t + res_b[j];

comp[j] = t - a[j];

w[j] = t - b[j] - a[j];

res_b[j] = 0;

seq += "->" + p[j];

}
}

// now the previous porcess according to

// ith is process

if (res_b[i] > 0) {

flag = false;

// Check for greaters

if (res_b[i] > n) {

t = t + n;

res_b[i] = res_b[i] - n;

res_a[i] = res_a[i] + n;

seq += "->" + p[i];

else {

t = t + res_b[i];

comp[i] = t - a[i];

w[i] = t - b[i] - a[i];

res_b[i] = 0;

seq += "->" + p[i];

// if no process is come on thse critical

else if (res_a[i] > t) {

t++;

i--;
}

// for exit the while loop

if (flag) {

break;

System.out.println("name ctime wtime");

for (int i = 0; i < p.length; i++) {

System.out.println(" " + p[i] + " " + comp[i]

+ " " + w[i]);

res = res + w[i];

resc = resc + comp[i];

System.out.println("Average waiting time is "

+ (float)res / p.length);

System.out.println("Average compilation time is "

+ (float)resc / p.length);

System.out.println("Sequence is like that " + seq);

// Driver Code

public static void main(String args[])

// name of the process

String name[] = { "p1", "p2", "p3", "p4" };

// arrival for every process


int arrivaltime[] = { 0, 1, 2, 3 };

// burst time for every process

int bursttime[] = { 10, 4, 5, 3 };

// quantum time of each process

int q = 3;

// cal the function for output

roundRobin(name, arrivaltime, bursttime, q);

You might also like