Skip to content

Instantly share code, notes, and snippets.

@daovietanh190499
Last active March 26, 2020 03:14
Show Gist options
  • Save daovietanh190499/5f9d6cf25340bc136829e32df27b5062 to your computer and use it in GitHub Desktop.
Save daovietanh190499/5f9d6cf25340bc136829e32df27b5062 to your computer and use it in GitHub Desktop.
<script>
let schedule = (array, type, quantum) => {
let sum = 0;
for(let i =0; i < array.length; i ++) {
sum += array[i][2];
}
let cloneArray = JSON.parse(JSON.stringify(array));
let time = -1;
let result = [];
let totalBurst = 0;
let currentProcess = 0;
let arrivalProcess = [];
let timeOld = 0;
while(true) {
time ++;
let isEmpty = false;
if(arrivalProcess.length == 0) isEmpty = true;
for(let i = 0; i < cloneArray.length; i ++) {
if(time == cloneArray[i][1]){
if(arrivalProcess.length == 0) currentProcess = i;
arrivalProcess.push(i);
}
}
switch(type){
case "fcfs":
if(cloneArray[currentProcess] && cloneArray[currentProcess][2] == 0) {
arrivalProcess = arrivalProcess.splice(1, arrivalProcess.length - 1);
result.push({"Process": cloneArray[currentProcess][0], "Burst time": cloneArray[currentProcess][3], "Remain time": cloneArray[currentProcess][2]});
totalBurst += cloneArray[currentProcess][3];
cloneArray[currentProcess][3] = 0;
currentProcess = arrivalProcess[0];
}; break;
case "stf":
if(isEmpty && arrivalProcess.length > 1) {
let min = 0;
for(let i = 0; i < arrivalProcess.length; i ++) {
if(cloneArray[arrivalProcess[i]][2] < cloneArray[arrivalProcess[min]][2]) min = i;
}
let temp = arrivalProcess[min];
arrivalProcess[min] = arrivalProcess[0];
arrivalProcess[0] = temp;
currentProcess = arrivalProcess[0];
}
if(cloneArray[currentProcess] && cloneArray[currentProcess][2] == 0) {
arrivalProcess = arrivalProcess.splice(1, arrivalProcess.length - 1);
result.push({"Process": cloneArray[currentProcess][0], "Burst time": cloneArray[currentProcess][3], "Remain time": cloneArray[currentProcess][2]});
totalBurst += cloneArray[currentProcess][3];
cloneArray[currentProcess][3] = 0;
if(arrivalProcess.length > 1) {
let min = 0;
for(let i = 0; i < arrivalProcess.length; i ++) {
if(cloneArray[arrivalProcess[i]][2] < cloneArray[arrivalProcess[min]][2]) min = i;
}
let temp = arrivalProcess[min];
arrivalProcess[min] = arrivalProcess[0];
arrivalProcess[0] = temp;
}
currentProcess = arrivalProcess[0];
};
break;
case 'srtf':
let temp = currentProcess;
for(let i = 0; i < arrivalProcess.length; i ++) {
if(cloneArray[currentProcess][2] == 0 && cloneArray[arrivalProcess[i]][2] > 0) currentProcess = arrivalProcess[i];
if((cloneArray[arrivalProcess[i]][2] < cloneArray[currentProcess][2]) && cloneArray[arrivalProcess[i]][2] !==0) currentProcess = arrivalProcess[i];
}
if((currentProcess !== temp && cloneArray[temp][3] !== 0) || (cloneArray[currentProcess][2] == 0 && cloneArray[temp][3] !== 0)) {
result.push({"Process": cloneArray[temp][0], "Burst time": cloneArray[temp][3], "Remain time": cloneArray[temp][2]});
totalBurst += cloneArray[temp][3];
cloneArray[temp][3] = 0;
};
break;
case 'rr':
if((time - timeOld == quantum) || cloneArray[currentProcess][2] == 0) {
timeOld = time;
if(cloneArray[currentProcess][3] !== 0) {
result.push({"Process": cloneArray[currentProcess][0], "Burst time": cloneArray[currentProcess][3], "Remain time": cloneArray[currentProcess][2]});
totalBurst += cloneArray[currentProcess][3];
cloneArray[currentProcess][3] = 0;
}
let circle = 1;
while(cloneArray[arrivalProcess[(arrivalProcess.indexOf(currentProcess) + circle)%arrivalProcess.length]][2] === 0) {
if (((arrivalProcess.indexOf(currentProcess) + circle)%arrivalProcess.length == (arrivalProcess.indexOf(currentProcess) + 1)%arrivalProcess.length) && circle !== 1) break;
circle ++;
}
currentProcess = arrivalProcess[(arrivalProcess.indexOf(currentProcess) + circle)%arrivalProcess.length];
};
break;
}
if(totalBurst === sum) break;
if(cloneArray[currentProcess] && cloneArray[currentProcess][2] > 0) {
if(!cloneArray[currentProcess][3]) cloneArray[currentProcess][3] = 0;
cloneArray[currentProcess][3] ++;
cloneArray[currentProcess][2] --;
}
}
console.table(result);
}
//[["P1", 0, 12], ["P2", 0, 13], ["P3", 0, 14]]
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment