位示图实验报告.docx

上传人:b****6 文档编号:7347372 上传时间:2023-05-11 格式:DOCX 页数:23 大小:100.84KB
下载 相关 举报
位示图实验报告.docx_第1页
第1页 / 共23页
位示图实验报告.docx_第2页
第2页 / 共23页
位示图实验报告.docx_第3页
第3页 / 共23页
位示图实验报告.docx_第4页
第4页 / 共23页
位示图实验报告.docx_第5页
第5页 / 共23页
位示图实验报告.docx_第6页
第6页 / 共23页
位示图实验报告.docx_第7页
第7页 / 共23页
位示图实验报告.docx_第8页
第8页 / 共23页
位示图实验报告.docx_第9页
第9页 / 共23页
位示图实验报告.docx_第10页
第10页 / 共23页
位示图实验报告.docx_第11页
第11页 / 共23页
位示图实验报告.docx_第12页
第12页 / 共23页
位示图实验报告.docx_第13页
第13页 / 共23页
位示图实验报告.docx_第14页
第14页 / 共23页
位示图实验报告.docx_第15页
第15页 / 共23页
位示图实验报告.docx_第16页
第16页 / 共23页
位示图实验报告.docx_第17页
第17页 / 共23页
位示图实验报告.docx_第18页
第18页 / 共23页
位示图实验报告.docx_第19页
第19页 / 共23页
位示图实验报告.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

位示图实验报告.docx

《位示图实验报告.docx》由会员分享,可在线阅读,更多相关《位示图实验报告.docx(23页珍藏版)》请在冰点文库上搜索。

位示图实验报告.docx

位示图实验报告

 

合肥学院

计算机科学与技术系

实验报告

2014~2015学年第一学期

 

课程

操作系统原理

实验名称

编写用位示图法管理文件存储

空间的分配与回收程序

学生姓名

侯康康1204013013

章涛1204013015

张德天1204013032

何天龙1204013010

专业班级

12计本(3)

指导教师

屠菁

2014年11月

1实验目的(字体四号,宋体,行距1.2倍,段前段后0.5行)

1.1理解文件存储空间的分配与回收的基本概念,掌握产生文件存储空间的分配与回收的几种方法,体会位示图算法是管理文件存储空间的分配与回收的一种行之有效的方法。

1.2通过编写程序实现位示图算法,进一步理解位示图算法的原理和执行过程,掌握位示图算法的描述和应用,进一步熟练掌握文件存储空间的分配与回收的方法。

2实验内容

2.1程序首先要给出位示图初态。

分配时,参数为文件名及需要分配的块数。

回收时,参数为文件名。

2.2回答信息:

分配时,能够分配时,给出文件名和分配的具体块号。

否则,给出无法分配的信息。

显示位示图。

2.3回收时:

给出回收的具体块号。

显示位示图。

3实验步骤

3.1位示图说明

位示图算法是利用二进制的一位来表示磁盘中的一个盘块的使用情况。

在外存上建立一张位示图(bitmap),记录文件存储器的使用情况。

每一位仅对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用。

文件存储器上的物理块依次编号为:

0、1、2、…。

通常可用m*n个位数来构成位示图,并使m*n等于磁盘的总块数。

位示图也可描述为一个二维数组map[m*n],如图

(1)所示:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

1

1

0

0

0

1

1

1

0

0

1

0

1

1

1

0

1

0

0

0

1

1

1

1

1

1

0

0

0

0

1

1

1

2

1

1

1

0

0

0

1

1

1

1

1

1

0

0

0

0

3

15

(1)位示图

3.2概要设计

3.2.1封装属性

在新建作业时,我们需要知道的是作业名和作业块数。

所以新建一个storeclass.java,里面封装两个属性,一个是作业名id;一个是作业块数,我们定义成一位数组ye.用来记录输入作业块数输入时在位示图中的位置。

3.2.2各功能的实现

3.2.2.1存储空间的分配算法

首先要输入作业名和大小,若作业名已存在则报错;若没有,则比较空闲区中空闲块数是否大于欲分配的块数。

有的话分配;没有的话报错;分配的时候该作业要记录下自己所占盘块的其实盘号和所占用的盘快数。

并修改对应盘块的位示图的值。

程序中对应的addpro.jsp是从add.jsp获取id(作业名)和num(块数),再进行分配操作,分配算法如下:

Stringid=request.getParameter("id");

intnum=Integer.parseInt(request.getParameter("num"));

booleanflag=false;

intn=0;

int[][]q=newint[8][8];

LinkedListlist=newLinkedList();

q=(int[][])session.getAttribute("a");

list=(LinkedList)session.getAttribute("list");

StoreClasssc=newStoreClass();

Stores=newStore();

n=s.surplus(q);

if(n

request.getRequestDispatcher("/error1.jsp").forward(

request,response);

}

else{

for(inti=0;i

if(((StoreClass)list.get(i)).getId().equals(id)){

flag=true;

break;

}

}

if(flag){

request.getRequestDispatcher("/error2.jsp").forward(request,response);

}

else{

sc.setId(id);

intk=0;

int[]temp=newint[64];

for(inti=0;i<64;i++){

temp[i]=-1;

}

sc.setYe(temp);

for(inti=0;i<=7;i++){

for(intj=0;j<=7;j++){

if(q[i][j]==0){

q[i][j]=1;

sc.getYe()[k]=i*8+j;

k++;

}

if(k==num){//跳出循环

break;

}

}

if(k==num){//跳出循环

break;

}

}

list.add(sc);

request.getRequestDispatcher("/main.jsp").forward(request,response);

}

}

分配成功后跳转到main.jsp页面,即主界面。

3.2.2.2、回收空间算法

回收时首先要输入作业名,判断是否存在该作业,若该作业不存在则报错;回收的时候要将作业占用的内存块归还,简单来说就是将分配时的作业块收回,体现在位示图上就是状态由“1”变成“0”。

程序中对应的deletepro.jsp是从delete.jsp获取id(作业名),再进回收操作,回收算法如下:

Stringid=request.getParameter("id");

booleanflag=false;

inttempi=-1,tempj=-1;

int[][]q=newint[8][8];

q=(int[][])session.getAttribute("a");

LinkedListlist=newLinkedList();

list=(LinkedList)session.getAttribute("list");

StoreClassstore=newStoreClass();

for(inti=0;i

if(((StoreClass)list.get(i)).getId().equals(id)){

store=(StoreClass)list.get(i);

flag=true;

break;

}

}

if(!

flag){

request.getRequestDispatcher("/error3.jsp").forward(request,response);

}

else{

list.remove(store);

for(inti=0;i<=63;i++){//将作业占用的内存块归还,将要撤销的进程是经过查找后的“m”.

if(store.getYe()[i]!

=-1){//页表存放的数字是内存块的地址(8*i+j)

tempi=store.getYe()[i]/8;

tempj=store.getYe()[i]%8;

q[tempi][tempj]=0;

}

}

request.getRequestDispatcher("/main.jsp").forward(request,response);

}

回收成功后跳转到main.jsp页面,即主界面。

3.2.2.3、查看位示图信息

输入作业名即可查看作业在位示图中的信息,若不存在该作业则报错;主要查看作业的页号(即作业在位示图中的位置)和块号,块号的计算公式也一并给出。

程序中对应的Findpro.jsp是从Find.jsp获取id(作业名),再进行查看位示图信息操作,查看算法如下:

Stringid=request.getParameter("id");

booleanflag=false;

intx=0,y=0;

int[][]q=newint[8][8];

q=(int[][])session.getAttribute("a");

LinkedListlist=newLinkedList();

list=(LinkedList)session.getAttribute("list");

StoreClassstore=newStoreClass();

for(inti=0;i

if(list.get(i).getId().equals(id)){

flag=true;

store=(StoreClass)list.get(i);

break;

}

}

if(!

flag){

request.getRequestDispatcher("/error3.jsp").forward(request,response);

}

else{

%>

该作业的页表情况为

页号-----------块号----------详细

<%

for(inti=0;i<=63;i++){

if(store.getYe()[i]!

=-1){

x=store.getYe()[i]/8;

y=store.getYe()[i]%8;

out.println(i+"---------------"+store.getYe()[i]+"--------------8*"+x+"+"+y);%>

<%}

}

}

%>

返回主界面

查看成功后可选择返回到main.jsp页面,即主界面。

3.3各算法流程图

3.3.1盘块的分配如下流程图

(2):

 

 

(2)分配流程图

 

3.3.2盘块的回收如下流程图(3):

否是

 

图(3)回收流程图

 

3.3.3查看作业信息如下流程图(4)

图(4)作业流程图

3.4调试分析以及运行结果

3.4.1主界面

通过网页我们看到的如下所示,这是程序初始化时出现的界面图(5):

图(5)主界面

3.4.2测试添加

添加数据作业名os,块数6;如图(6)

添加数据作业o,块数9:

如图(7)

图(6)添加数据1页面

图(7)添加数据2页面

运行结果如图(8)图(9)

图(8)添加结果1

图(9)添加结果2

3.4.3测试查看

查看数据作业名o;图(10)

图(10)查看数据

运行结果为图(11)

图(11)查看结果

3.4.4测试删除

测试数据:

作业名o如图(12)

图(12)删除作业

运行结果如图(13)

图(13)删除运行结果

小结:

运行结果和理论结果相同并符合实验要求,结果满足位示图法基本原理。

四实验总结

在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间。

如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半。

做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做。

做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛。

实验的过程全是我们学生自己动手来完成的,这样,我们就必须要弄懂实验的原理。

在这里我深深体会到理论对实践的指导作用:

懂实验原理,而且体会到了实验的操作能力是靠自己亲自动手,亲自开动脑筋,亲自去请教别人才能得到提高的。

我们做实验绝对不能人云亦云,要有自己的看法,这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。

五附录

主要源代码

LoginServlet.java

packagehkk.domain;

importjava.io.IOException;

importjava.util.LinkedList;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

publicclassLoginServletextendsHttpServlet{

privatestaticfinallongserialVersionUID=-8271620964273835730L;

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

this.doPost(req,resp);

}

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

//跳转到登录页面

LinkedListlist=newLinkedList();

int[][]a=newint[8][8];

for(inti=0;i<=7;i++){

for(intj=0;j<=7;j++){

a[i][j]=0;

}

}

HttpSessionsession=req.getSession();

session.setAttribute("a",a);

session.setAttribute("list",list);

req.getRequestDispatcher("/main.jsp").forward(req,resp);

}

}

StoreClass.java

packagehkk.domain;

publicclassStoreClass{

Stringid;

int[]ye=newint[64];

publicStringgetId(){

returnid;

}

publicvoidsetId(Stringid){

this.id=id;

}

publicint[]getYe(){

returnye;

}

publicvoidsetYe(int[]ye){

this.ye=ye;

}

}

Addpro.jsp

<%@pagelanguage="java"import="java.util.*,hkk.domain.*"pageEncoding="UTF-8"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'AddPro.jsp'startingpage

--

-->

<%

Stringid=request.getParameter("id");

intnum=Integer.parseInt(request.getParameter("num"));

booleanflag=false;

intn=0;

int[][]q=newint[8][8];

LinkedListlist=newLinkedList();

q=(int[][])session.getAttribute("a");

list=(LinkedList)session.getAttribute("list");

StoreClasssc=newStoreClass();

Stores=newStore();

n=s.surplus(q);

if(n

request.getRequestDispatcher("/error1.jsp").forward(

request,response);

}

else{

for(inti=0;i

if(((StoreClass)list.get(i)).getId().equals(id)){

flag=true;

break;

}

}

if(flag){

request.getRequestDispatcher("/error2.jsp").forward(request,response);

}

else{

sc.setId(id);

intk=0;

int[]temp=newint[64];

for(inti=0;i<64;i++){

temp[i]=-1;

}

sc.setYe(temp);

for(inti=0;i<=7;i++){

for(intj=0;j<=7;j++){

if(q[i][j]==0){

q[i][j]=1;

sc.getYe()[k]=i*8+j;

k++;

}

if(k==num){//跳出循环

break;

}

}

if(k==num){//跳出循环

break;

}

}

list.add(sc);

request.getRequestDispatcher("/main.jsp").forward(request,response);

}

}

%>

Deletepro.jsp

<%@pagelanguage="java"import="java.util.*,hkk.domain.*"pageEncoding="UTF-8"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'DeletePro.jsp'startingpage

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2