-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_fcfs.js
More file actions
64 lines (52 loc) · 2.08 KB
/
Copy pathtest_fcfs.js
File metadata and controls
64 lines (52 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Test FCFS algorithm manually
const processes = [
{ pid: 'P1', arrivalTime: 0, burstTime: 5, priority: 2 },
{ pid: 'P2', arrivalTime: 1, burstTime: 3, priority: 1 },
{ pid: 'P3', arrivalTime: 2, burstTime: 8, priority: 4 },
{ pid: 'P4', arrivalTime: 3, burstTime: 6, priority: 3 },
];
// Manually trace FCFS
const results = {};
processes.forEach(p => {
results[p.pid] = {
arrivalTime: p.arrivalTime,
burstTime: p.burstTime,
completionTime: 0,
turnaroundTime: 0,
waitingTime: 0,
responseTime: -1,
};
});
// Sort by arrival
const arrivals = [...processes].sort((a, b) => a.arrivalTime - b.arrivalTime);
console.log('Arrival order:', arrivals.map(p => `${p.pid}: ${p.arrivalTime}`));
let time = 0;
let completed = 0;
const ganttChart = [];
// FCFS execution
for (let i = 0; i < arrivals.length; i++) {
const proc = arrivals[i];
// If process arrives after current time, advance time
if (time < proc.arrivalTime) {
time = proc.arrivalTime;
}
const ganttStart = time;
results[proc.pid].responseTime = time - proc.arrivalTime;
// Execute
time += proc.burstTime;
ganttChart.push({ pid: proc.pid, start: ganttStart, end: time });
results[proc.pid].completionTime = time;
results[proc.pid].turnaroundTime = time - proc.arrivalTime;
results[proc.pid].waitingTime = results[proc.pid].turnaroundTime - proc.burstTime;
console.log(`${proc.pid}: Start=${ganttStart}, End=${time}, Response=${results[proc.pid].responseTime}, Turnaround=${results[proc.pid].turnaroundTime}, Waiting=${results[proc.pid].waitingTime}`);
}
console.log('\nGantt Chart:', ganttChart);
console.log('Total Time:', time);
// Calculate averages
const avgTurnaround = Object.values(results).reduce((sum, p) => sum + p.turnaroundTime, 0) / 4;
const avgWaiting = Object.values(results).reduce((sum, p) => sum + p.waitingTime, 0) / 4;
const avgResponse = Object.values(results).reduce((sum, p) => sum + p.responseTime, 0) / 4;
console.log('\nAverages:');
console.log('Avg Turnaround:', avgTurnaround);
console.log('Avg Waiting:', avgWaiting);
console.log('Avg Response:', avgResponse);