上学期有个课程叫做操作系统,期末的时候这课程还有个课程设计,其中有个题目叫做银行家算法。

什么是银行家算法我就不解释了!

看着同学们的设计,大同小异甚至前篇一律。

清一色的控制台程序,清一色的蛋疼输入,甚至提示都是式样的!

然后我的看的淡定了,于是....

银行家算法的JavaScript版出现了...

借助html和css表现,javascript实现逻辑功能

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>银行家算法模拟系统</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7/jquery.min.js"></script>
<script>
var maxn = 101;
var num_process;
var resource;
var bmax=new Array();//最大资源数
var need=new Array();//资源需求数
var work=new Array();//资源可用数
var available=new Array();//总资源数
var allocation=new Array();//已分配资源
var finish=new Array();//是否已完成
var bp=new Array();//安全序列
var l=0; function GetWork()
{
for(j=0;j<num_resource;j++)
{
work[j]=available[j];//=available[j]-allocation[i][j];
}
for(i=0;i<num_process;i++)
{
for(j=0;j<num_resource;j++)
{
work[j]-=allocation[i][j];
}
}
/*for(j=0;j<num_resource;j++)
{
alert(work[j]);//=available[j]-allocation[i][j];
}*/
}
//求安全序列
function GetSequence()
{
l=0;
//alert(l);
GetNeed();//
GetWork();
for(i = 0; i < num_process; i ++)
finish[i] = false;//初始化各进程的分配标志 while(l < num_process)
{
flag = false;
for(i = 0; i < num_process; i ++)
{
if(finish[i])continue;
//alert(need.length);
for( j = 0; j < num_resource; j ++)
{
if(need[i][j] > work[j])break;
}
if(j == num_resource)
{
flag = true;
bp[l] = i;
l++;
finish[i] = true;
for(k = 0; k < num_resource; k ++)
work[k] += allocation[i][k];
}
}
if(!flag) break;
}
} function CreateTable()
{
table="<br/>系统资源量数目依次是:";
for(i=0;i<num_resource;i++)
{
table+=" "+available[i]+"&nbsp;&nbsp;&nbsp;&nbsp;";
};
table+="<p><p/><hr/>";
table+="请输入个进程的最大资源需求数(MAX)和已分配数(Allocation):(Need会自动计算)<br/>";
table+="<table border=0 cellspacing=1 width=100% style='text-align:center'><tr><td>&nbsp;</td><td colspan="+$("#num_resource").val()+">Max</td><td colspan="+$("#num_resource").val()+">Allocation</td colspan="+$("#num_resource").val()+"><td colspan="+$("#num_resource").val()+">Need</td></tr>";
for(i=0;i<$("#num_process").val();i++)
{
table+="<tr><td>进程"+i+"</td>";
for(j=0;j<3;j++)
{
for(x=0;x<$("#num_resource").val();x++)
{
table+="<td><input type=text id=e"+i+j+x;
if(j==2){table+=" readonly=\"readonly\" "}
table+="></td>";
}
}
table+="</tr>";
}
table+="</table>";
$("#table").html(table)
}
function GetInfo()
{
//获取最大资源数
for(i=0;i<num_process;i++)
{
bmax[i]=new Array();
for(x=0;x<num_resource;x++)
{
bmax[i][x]=$("#e"+i+"0"+x).val()
}
} //获取已分配资源数
for(i=0;i<num_process;i++)
{
allocation[i]=new Array();
for(x=0;x<num_resource;x++)
{
allocation[i][x]=$("#e"+i+"1"+x).val()
}
} } function GetNeed()
{
//计算各进程对个资源的需求量
for(i = 0; i < num_process; i ++)
{
need[i]=new Array();
for(j = 0; j < num_resource; j ++)
{
need[i][j] = bmax[i][j] - allocation[i][j];
}
}
for(i=0;i<num_process;i++)
{
//need[i]=new Array();
for(x=0;x<num_resource;x++)
{
//$("#e"+i+"2"+x).val(need[i][x]);
//alert($("#e"+i+"2"+x).val());
$("#e"+i+"2"+x).val(need[i][x]);
}
}
}
function PrintSequence()
{
if(l == num_process)
{
lhtml="该资源是安全的;安全序列为:";
for(i = 0; i < l; i ++)
{
if(i) lhtml+="=>";
lhtml+=bp[i];
} }
else lhtml="对不起,该资源状态不安全!";
lhtml+="<br/>亲,如果有新的进程请求可以直接在上表中修改数据并确定哦!";
$("#l").html(lhtml);
} $(document).ready(function(e) {
$("#ok1").click(function(e) {
num_process=$("#num_process").val();
num_resource=$("#num_resource").val();
alert(num_process+"个进程,"+num_resource+"个资源");
for(i=0;i<num_resource;i++)
{
available[i]= window.prompt("请输入系统总的资源数量:","请输入资源"+i+"的数量:");
}
CreateTable();
$("#h").show();
}); $("#ok2").click(function(e) {
GetInfo();
GetSequence();
PrintSequence();
});
$("#come").click(function(e) {
$(".cover").fadeOut();
});
$("input").change(function(e) {
var reg=new RegExp("^[0-9]*$");
if(!reg.test($(this).val())==true){
alert("对不起,您必须输入数字!");
$(this).addClass("border");
$(this).focus();
}
else{
$(this).removeClass("border");
}
}); });
</script>
<style>
body{ margin:0; text-align:center;}
input{ width:20px;}
table{ background:#999999;}
td{ background:#FFFFFF;}
.cover{ background:#00FFFF; position:absolute; width:100%; height:100%; padding-top:20px; text-align:center;}
.border{ border-bottom:1px solid #F00;}
</style>
</head> <body>
<div class="cover">
<h1>欢迎使用银行家算法模拟系统!</h1>
<input type="button" id="come" value="进入系统" style="height:50px; width:200px;" />
</div>
请输入进程数:
<input type="text" id="num_process" name="num_process" /><br/>
请输入资源数:
<input type="text" id="num_resource" name="num_resource" /><br/>
<input type="button" id="ok1" value="确定" style="width:50px;"/>
<hr/>
<div style="display:none" id="h">
<div class="table" id="table">
s
</div>
<input type="button" id="ok2" value="确定" style="width:50px;" /><br/>
<div class="l" id="l">
</div>
</div> </body>
</html>

银行家算法之JavaScript实现的更多相关文章

  1. c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)

    银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...

  2. Round() 四舍五入 js银行家算法(转)

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  3. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  4. 银行家算法java实现

    关于银行家算法的理论知识,课本或者百度上有好多资料,我就不再多说了,这里把我最近写的银行家算法的实现带码贴出来. 由于这是我们的一个实验,对系统资源数和进程数都指定了,所以这里也将其指定了,其中系统资 ...

  5. 操作系统,银行家算法模拟实现(Windows 环境 C++)

    计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...

  6. JavaScript 排序算法(JavaScript sorting algorithms)

    JavaScrip 排序算法(JavaScript Sorting Algorithms) 基础构造函数 以下几种排序算法做为方法放在构造函数里. function ArrayList () { va ...

  7. c++银行家算法

    #include <iostream> #include<string> #define False 0 #define True 1 using namespace std; ...

  8. 银行家算法C++程序

    此程序在Windows10    CodeBlocks17.12环境下测试运行,其他编程环境未经测试! 作业需求↓↓↓↓↓↓ 运行效果图如下 (codeblocks下载地址http://www.cod ...

  9. python模拟银行家算法

    前言: 大二第一学期学习了操作系统,期末实验课题要求模拟算法.遂根据自己学习的python写下此文.以此锻炼自己编码能力.虽说是重复造轮子,但还是自己的思路体现 代码及注释如下(银行家算法不再赘述): ...

随机推荐

  1. ubuntu 添加新硬盘

    查看硬盘: # fdisk -l ... Disk /dev/sdb: 274.9 GB, 274877906944 bytes 255 heads, 63 sectors/track, 33418 ...

  2. LINUX 命令—netstat [简单实用]

    1.--当我们在检查程序是否启动或者网络状况的时候 会查看本机活跃的端口,就需要这个命令: |--"netstat – Print network connections, routing ...

  3. HDU2032 杨辉三角

    解题思路:不要小看这题水题,如果数据类型没有用long long, 当n开为35时,会出现TLE,而且会报非法内存访问,现在还 不理解为什么,若有高手,请不吝赐教. 上代码: #include< ...

  4. C#操作带名称空间的xml

    以前操作xml一般用下面这种方式: 好处是XDocument 能使用linq xmlPath = “path”; XDocument myXDoc = XDocument.Load(xmlPath); ...

  5. 小而实用的工具插件集锦(JQGrid,zTree)

    jqgrid,JQGrid是一个在jquery基础上做的一个表格控件,看起来感觉还可以,以ajax的方式和服务器端通信 效果图: 这个小东西,多用在在工作流上面. 中文文档: http://blog. ...

  6. 【转】IUSR和IIS_IUSRS

    转自:http://blog.chinaunix.net/uid-20344928-id-3306130.html   概述   在早期的IIS版本中,随着IIS的安装,系统会创建一个IUSR_Mac ...

  7. 给UIButton设置阴影及动画组

    //设置“开启旅程”按钮 UIButton *startBtn = self.startBtn; CGFloat btnW = ; CGFloat btnH = ; CGFloat btnX = (s ...

  8. predis的使用

    predis是PHP连接Redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5.3以上版本,故实测性能一般,每秒25000次读写. 将session数据存放到re ...

  9. Python 函数 -next()

    next() next() 返回迭代器的下一个项目. iterator - 可迭代对象.  default - 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 St ...

  10. 利用脚本启动java程序

    今天在工作中,需要写一个shell脚本,启动一个socket程序,从而模拟短信网关.查了一些资料,终于搞定了,现在记录一下,方便大家查阅. 为了说明使用方法,我们就用最简单的程序来实现,比如我们要运行 ...