("/").forward(
request,response);
}
else{
for(inti=0;i<();i++){
if(((StoreClass)(i)).getId().equals(id)){
flag=true;
break;
}
}
if(flag){
("/").forward(request,response);
}
else{
(id);
intk=0;
int[]temp=newint[64];
for(inti=0;i<64;i++){
temp[i]=-1;
}
(temp);
for(inti=0;i<=7;i++){
for(intj=0;j<=7;j++){
if(q[i][j]==0){
q[i][j]=1;
()[k]=i*8+j;
k++;
}
if(k==num){orward(request,response);
}
}
分配成功后跳转到页面,即主界面。
、回收空间算法
回收时首先要输入作业名,判断是否存在该作业,若该作业不存在则报错;回收的时候要将作业占用的内存块归还,简单来说就是将分配时的作业块收回,体现在位示图上就是状态由“1”变成“0”。
程序中对应的是从获取id(作业名),再进回收操作,回收算法如下:
Stringid=("id");
booleanflag=false;
inttempi=-1,tempj=-1;
int[][]q=newint[8][8];
q=(int[][])("a");
LinkedListlist=newLinkedList();
list=(LinkedList)("list");
StoreClassstore=newStoreClass();
for(inti=0;i<();i++){
if(((StoreClass)(i)).getId().equals(id)){
store=(StoreClass)(i);
flag=true;
break;
}
}
if(!
flag){
("/").forward(request,response);
}
else{
(store);
for(inti=0;i<=63;i++){if()[i]!
=-1){orward(request,response);
}
回收成功后跳转到页面,即主界面。
、查看位示图信息
输入作业名即可查看作业在位示图中的信息,若不存在该作业则报错;主要查看作业的页号(即作业在位示图中的位置)和块号,块号的计算公式也一并给出。
程序中对应的是从获取id(作业名),再进行查看位示图信息操作,查看算法如下:
Stringid=("id");
booleanflag=false;
intx=0,y=0;
int[][]q=newint[8][8];
q=(int[][])("a");
LinkedListlist=newLinkedList();
list=(LinkedList)("list");
StoreClassstore=newStoreClass();
for(inti=0;i<();i++){
if(i).getId().equals(id)){
flag=true;
store=(StoreClass)(i);
break;
}
}
if(!
flag){
("/").forward(request,response);
}
else{
%>
该作业的页表情况为
页号-----------块号----------详细
<%
for(inti=0;i<=63;i++){
if()[i]!
=-1){
x=()[i]/8;
y=()[i]%8;
(i+"---------------"+()[i]+"--------------8*"+x+"+"+y);%>
<%}
}
}
%>
返回主界面
查看成功后可选择返回到页面,即主界面。
各算法流程图
盘块的分配如下流程图
(2):
否
是
否
是
图
(2)分配流程图
盘块的回收如下流程图(3):
否
是
否是
图(3)回收流程图
查看作业信息如下流程图(4)
否
是
图(4)作业流程图
调试分析以及运行结果
主界面
通过网页我们看到的如下所示,这是程序初始化时出现的界面图(5):
图(5)主界面
测试添加
添加数据作业名os,块数6;如图(6)
添加数据作业o,块数9:
如图(7)
图(6)添加数据1页面
图(7)添加数据2页面
运行结果如图(8)图(9)
图(8)添加结果1
图(9)添加结果2
测试查看
查看数据作业名o;图(10)
图(10)查看数据
运行结果为图(11)
图(11)查看结果
测试删除
测试数据:
作业名o如图(12)
图(12)删除作业
运行结果如图(13)
图(13)删除运行结果
小结:
运行结果和理论结果相同并符合实验要求,结果满足位示图法基本原理。
四实验总结
在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间。
如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半。
做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做。
做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛。
实验的过程全是我们学生自己动手来完成的,这样,我们就必须要弄懂实验的原理。
在这里我深深体会到理论对实践的指导作用:
懂实验原理,而且体会到了实验的操作能力是靠自己亲自动手,亲自开动脑筋,亲自去请教别人才能得到提高的。
我们做实验绝对不能人云亦云,要有自己的看法,这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。
五附录
主要源代码
package;
importclassLoginServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=-827730L;
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
(req,resp);
}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
orward(req,resp);
}
}
package;
publicclassStoreClass{
Stringid;
int[]ye=newint[64];
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
=id;
}
publicint[]getYe(){
returnye;
}
publicvoidsetYe(int[]ye){
=ye;
}
}
<%@pagelanguage="java"import=".*,.*"pageEncoding="UTF-8"%>
<%
Stringpath=();
StringbasePath=()+":
orward(
request,response);
}
else{
for(inti=0;i<();i++){
if(((StoreClass)(i)).getId().equals(id)){
flag=true;
break;
}
}
if(flag){
("/").forward(request,response);
}
else{
(id);
intk=0;
int[]temp=newint[64];
for(inti=0;i<64;i++){
temp[i]=-1;
}
(temp);
for(inti=0;i<=7;i++){
for(intj=0;j<=7;j++){
if(q[i][j]==0){
q[i][j]=1;
()[k]=i*8+j;
k++;
}
if(k==num){orward(request,response);
}
}
%>