bankers algorithm

HTML
<!DOCTYPE html> <html> <head> <title>Banker's Algorithm</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" /> <script type="text/javascript" src="banker.js"></script> </head> <body> <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> <a class="navbar-brand" href="../Index/index.html#bankers">Home</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation" style=""> <span class="navbar-toggler-icon"></span> </button> </nav> <br> <div class="container"> <div class="jumbotron"> <h1 class="display-3">Banker's Safety Algorithm</h1> <p class="lead">Detection algorithm to avoid deadlock</p> <hr class="my-4"> <p>Banker's Algorithm is a resource allocation and deadlock avoidance algorithm that tests for safety by simulating the allocation of predetermined maximum possible amounts of all resources, and then makes an "safe-state" check to test for possible deadlock conditions for all other pending activities, before deciding whether allocation should be allowed to continue.</p> </div> <div class="jumbotron"> <form name = "resource"> <div class = "form-group" style="margin-left:50px; float:left;"> <label>Number of Resource types:</label><input class="form-control" type="Number" onkeyup="BuildFormFields(parseInt(this.value, 10));" /> <div id="FormFields" style=""></div> </div> </form> <form name = "Need"> <div class = "form-group" style="margin-left:50px;float:left;"> <label>Number of Processes:</label> <input class="form-control" type="Number" onkeyup="BuildFormFields2(y = parseInt(this.value, 10));" /> <div id="FormFields1"></div> </div> </form> <form name = "Alloc"> <div class = "form-group" style="margin-left:50px;float:left;margin-top:60px;"> <div id="FormFields2"></div> </div> </form> <table id="tab_need" class="table table-striped table-hover"> </table> <table id="tab_alloc" class="table table-striped table-hover"> </table> <ul id = "printing"> </ul> </div> <div class="panel-footer"> <button class="btn btn-primary btn-success" onclick="banker()">Run</button> </div> </div> </body> </html>
CSS
h1, h2{ text-align: center; } table, td { border: 1px solid black; } th, td { padding: 25px; text-align: center; } ul { font-family: Arial, Helvetica, sans-serif; font-size: 30px; } .form-control { width: 100%; } thead{ text-align: center; } .table{ width:80%; margin-left: 150px; }
JAVASCRIPT
var res,pro; var resource; function BuildFormFields($amount) // For Resorce allocation { res = $amount; if(res<0) alert("Invalid Inputs"); var $container = document.getElementById('FormFields'), $item, $field, $i; $container.innerHTML = ''; for ($i = 0; $i < $amount; $i++) { $item = document.createElement('div'); $item.style.margin = '10px'; $field = document.createElement('label'); $field.innerHTML = 'Resource '+$i; $item.appendChild($field); $field = document.createElement('input'); $field.name = 'Design[' + $i + ']'; $field.type = 'text'; $field.setAttribute("class","form-control"); $item.appendChild($field); $container.appendChild($item); } } function BuildFormFields2($amount) //For Allocation { pro = $amount; if($amount<0) alert("Invalid Inputs"); console.log(res); var $container = document.getElementById('FormFields1'), $item, $field, $i; $container.innerHTML = ''; for ($i = 0; $i < $amount; $i++) { for($j = 0; $j < res; $j++) { $item = document.createElement('div'); $item.style.margin = '10px'; $field = document.createElement('label'); $field.innerHTML = 'Need for process '+$i+' Res: ' +$j; $item.appendChild($field); $field = document.createElement('input'); $field.name = 'Design[' + $i + ']'; $field.type = 'text'; $field.setAttribute("class","form-control"); $item.appendChild($field); $container.appendChild($item); } } BuildFormFields3($amount); } function BuildFormFields3($amount) //For Allocation { if($amount<0) alert("Invalid Inputs"); console.log(res); var $container = document.getElementById('FormFields2'), $item, $field, $i; $container.innerHTML = ''; for ($i = 0; $i < $amount; $i++) { for($j = 0; $j < res; $j++) { $item = document.createElement('div'); $item.style.margin = '10px'; $field = document.createElement('label'); $field.innerHTML = 'Allocation for process '+$i+' Res: ' +$j; $item.appendChild($field); $field = document.createElement('input'); $field.name = 'Design[' + $i + ']'; $field.type = 'text'; $field.setAttribute("class","form-control"); $item.appendChild($field); $container.appendChild($item); } } } var y; function banker() { var res_form = document.resource; var resource = []; for(var i = 1;i <= res; i++) { resource[i-1] = Number(res_form[i].value); } console.log(resource); var form = document.Need; var ned = []; var i,j; console.log("PRO: "+pro+"RES: "+res); for(i = 1; i <= pro*res; i++) { ned[i-1] = Number(form[i].value); } var needy = []; for(var i = 0; i<pro;i++) { needy[i] = []; for(var j=0;j<res;j++) { needy[i][j] = ned[i*res+j]; } } console.log(ned); console.log(needy); var alloc_form = document.Alloc; var alloc = []; for(var i = 0; i < pro; i++) { alloc[i] = []; for(var j = 0;j < res;j++) { alloc[i][j] = Number(alloc_form[i*res+j].value); console.log(alloc[i][j]); } } console.log(alloc); var avail = []; for(var i = 0; i < res; i++) avail[i] = resource[i]; for(var i = 0; i < pro; i++) { for(var j = 0; j < res; j++) { avail[j] = avail[j] - alloc[i][j]; needy[i][j] = needy[i][j] - alloc[i][j]; } } console.log('avail: ' + avail); //TABLE for NEED var tab_need = document.getElementById("tab_need"); var row = tab_need.insertRow(0); var cell = row.insertCell(0); cell.innerHTML = "<b>Need</b>"; var pro_head = tab_need.insertRow(1); var cell = pro_head.insertCell(0); cell.innerHTML = "<b>Process</b>"; for(i=1;i<=res;i++) { cell = pro_head.insertCell(i); cell.innerHTML = "<b>Res "+(i-1)+"</b>"; } for(i=0;i<pro;i++) { var row = tab_need.insertRow(i+2); var cell = row.insertCell(0); cell.innerHTML = "<b>P"+i+"</b>"; for(j=0;j<res;j++) { var cell = row.insertCell(j+1); cell.innerHTML = ned[res*i+j]; } } //TABLE for ALLOC var tab_alloc = document.getElementById("tab_alloc"); var row = tab_alloc.insertRow(0); var cell = row.insertCell(0); cell.innerHTML = "<b>Allocation</b>"; var alloc_head = tab_alloc.insertRow(1); var cell = alloc_head.insertCell(0); cell.innerHTML = "<b>Process</b>"; for(i=1;i<=res;i++) { cell = alloc_head.insertCell(i); cell.innerHTML = "<b>Res "+(i-1)+"</b>"; } for(i=0;i<pro;i++) { var row = tab_alloc.insertRow(i+2); var cell = row.insertCell(0); cell.innerHTML = "<b>P"+i+"</b>"; for(j=0;j<res;j++) { var cell = row.insertCell(j+1); cell.innerHTML = alloc[i][j]; } } var prints = document.getElementById("printing"); var i,j; var exec = 0; //Number of executed processes var ex = [0,0]; for(var i = 0; i < pro; i++) { ex[i] = 0; } var iter = 1; while(1) { var exec1 = exec // exec1 is compared with exec at the end of the while loop to check for deadlock var li = document.createElement("li"); li.appendChild(document.createTextNode("Iteration "+ iter)); prints.appendChild(li); var ul1 = document.createElement("ul"); for (i = 0; i < pro; i++) { var flag = 0 if(ex[i] == 0) { var li = document.createElement("li"); li.appendChild(document.createTextNode("Process "+ i+": ")); ul1.append(li); prints.appendChild(ul1); var ul2 = document.createElement("ul"); for (var j = 0; j < res; j++) { if((avail[j]) < needy[i][j]) { flag = 1; break; } } if(flag) { console.log("Process " + i + " doesn't have enough resources"); console.log("Need: " + needy[i]); console.log("Current resources available: " + avail); var li = document.createElement("li"); li.appendChild(document.createTextNode("Process " + i + " doesn't have enough resources")); ul2.append(li); ul1.append(ul2); prints.appendChild(ul1); var li = document.createElement("li"); li.appendChild(document.createTextNode("Need: " + needy[i])); ul2.append(li); ul1.append(ul2); prints.appendChild(ul1); var li = document.createElement("li"); li.appendChild(document.createTextNode("Avail: " + avail)); ul2.append(li); ul1.append(ul2); prints.appendChild(ul1); } else { exec = exec + 1 console.log("Process " + i + " has enough resources"); var li = document.createElement("li"); li.appendChild(document.createTextNode("Process " + i + " has enough resources")); ul2.append(li); ul1.append(ul2); prints.appendChild(ul1); ex[i] = 1; for(var j = 0;j < res; j++) { avail[j] = avail[j] + alloc[i][j]; } console.log("Current resources available: " + avail); var li = document.createElement("li"); li.appendChild(document.createTextNode("Avail: " + avail)); ul2.append(li); ul1.append(ul2); prints.appendChild(ul1); } } } iter++; if(exec1 == exec && exec != pro) // Checks for deadlock { console.log("Deadlock"); var li = document.createElement("li"); li.appendChild(document.createTextNode("Deadlock")); prints.appendChild(li); break; } if(exec == pro) { console.log("Safe State"); var li = document.createElement("li"); li.appendChild(document.createTextNode("Safe State")); prints.appendChild(li); break; } } }
Expand for more options Login