用位示图管理磁盘空间的分配与回收.docx

上传人:b****6 文档编号:6161356 上传时间:2023-01-04 格式:DOCX 页数:18 大小:489.03KB
下载 相关 举报
用位示图管理磁盘空间的分配与回收.docx_第1页
第1页 / 共18页
用位示图管理磁盘空间的分配与回收.docx_第2页
第2页 / 共18页
用位示图管理磁盘空间的分配与回收.docx_第3页
第3页 / 共18页
用位示图管理磁盘空间的分配与回收.docx_第4页
第4页 / 共18页
用位示图管理磁盘空间的分配与回收.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

用位示图管理磁盘空间的分配与回收.docx

《用位示图管理磁盘空间的分配与回收.docx》由会员分享,可在线阅读,更多相关《用位示图管理磁盘空间的分配与回收.docx(18页珍藏版)》请在冰豆网上搜索。

用位示图管理磁盘空间的分配与回收.docx

用位示图管理磁盘空间的分配与回收

 

课程设计报告

(2016--2017年度第二学期)

 

课程名称:

操作系统实验

课设题目:

用位示图管理磁盘空间的分配与回收

院系:

控制与计算机工程学院

班级:

信安1401

姓名:

黄竞昶

指导教师:

贾静平

设计周数:

一周

成绩:

2015年7月9日

一、需求分析

要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。

(1)假定现有一个磁盘组,共40个柱面。

每个柱面4个磁道,每个磁道又划分成4个物理记录。

磁盘的空间使用情况用位示图表示。

位示图用若干个字构成,每一位对应一个磁盘块。

1表示占用,0表示空闲。

为了简单,假定字长为16位,其位示图如图9—1所示。

系统设一个变量S,记录磁盘的空闲块个数。

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

字0

1

1

1

1

1

1

0

1

0

0

1

1

1

1

1

0

1

2

....

39

图9—1位示图

(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。

由位示图计算磁盘的相对块号的公式如下:

相对块号一字号×16+位号

之后再将相对块号转换成磁盘的物理地址:

由于一个柱面包含的扇区数=每柱面的磁道数×每磁道的扇区数=4×4=16,故柱面号=相对块号/16的商,即柱面号=字号

磁道号=(相对块号/16的余数)/4的商,即(位号/4)的商

物理块号=(相对块号/16的余数)/4的余数,即(位号/4)的余数

(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应位置0。

计算公式如下:

先由磁盘地址计算相对块号:

相对块号=柱面号×16+磁道号×4+物理块号

再计算字号和位号:

字号=相对块号/16的商,也即字号=柱面号

位号=磁道号×物理块数/每磁道+物理块号

(4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。

然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。

(5)设计一个回收算法,将上述已分配给用户的各盘块释放。

并显示系统各表。

回收算法框图如图5所示。

二、整体功能及设计

程序整体主要有四个功能模块,分别是:

初始化、分配、单独回收以及全部回收。

当点击相应按钮时实现其功能。

程序设计了三个方法,分别是初始化init、分配算法dist、单独回收rec、全部回收allrec。

磁盘空间分配框图如图1所示,磁盘空间回收框图如图2所示.

 

图1磁盘空间分配框图图2磁盘空间回收框图

三、编程实现

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

publicclassbitmapextendsJFrameimplementsActionListener{

JTabletable;

JScrollPanesp1,sp2;

JTextAreata;

JLabell1,l2,l3,l4,l5;

JTextFieldtf1,tf2,tf3;

JButtonb1,b2,b3,b4;

JPanelp1,p2,p3,p4,p5,p6,p7;

Stringdata[][];

Stringcolum[];

intsp[];//存放(相对)可用块

intused[];//存放(相对)已用块数

intA,H;//S为可用块数,T为已用块数

bitmap(){

super("“位示图管理磁盘空间的分配与回收”系统模拟");

data=newString[40][16];

colum=newString[16];

sp=newint[640];

used=newint[640];

A=0;

H=0;

for(inti=0;i<16;i++)

{

colum[i]=""+i;

}

table=newJTable(data,colum);

sp1=newJScrollPane(table);

tf1=newJTextField(6);

tf2=newJTextField(6);

tf3=newJTextField(6);

ta=newJTextArea(10,20);

sp2=newJScrollPane(ta);

p1=newJPanel(newBorderLayout());

p2=newJPanel(newFlowLayout());

p3=newJPanel(newBorderLayout());

p4=newJPanel(newFlowLayout());

p5=newJPanel(newFlowLayout());

p6=newJPanel(newBorderLayout());

p7=newJPanel(newFlowLayout());

l1=newJLabel("位示图如下:

");

b1=newJButton("位示图初始化");

b1.addActionListener(this);

b2=newJButton("回收全部磁盘块");

b2.addActionListener(this);

p2.add(b1);p2.add(b2);

p1.add(l1,"North");

p1.add(sp1,"Center");

p1.add(p2,"South");

l2=newJLabel("运行状况:

");

l5=newJLabel("空闲块数量:

");

p7.add(l5);p7.add(tf3);

p3.add(l2,"North");

p3.add(p7,"South");

p3.add(sp2,"Center");

l3=newJLabel("请输入需要分配的块数:

");

l4=newJLabel("请输入要回收的盘块号:

");

b3=newJButton("确认分配");

b3.addActionListener(this);

b4=newJButton("确认回收");

b4.addActionListener(this);

p4.add(l3);p4.add(tf1);p4.add(b3);

p5.add(l4);p5.add(tf2);p5.add(b4);

p6.add(p4,"North");p6.add(p5,"Center");

this.setLayout(newBorderLayout());

this.add(p1,"West");

this.add(p3,"Center");

this.add(p6,"South");

this.pack();

this.setVisible(true);

}

publicvoidinit()//功能:

初始化

{

intk;

for(inti=0;i<40;i++)

for(intj=0;j<16;j++)

{

k=(int)(Math.random()*2);//0与1两数中进行随机

data[i][j]=""+k;

table.setValueAt(""+k,i,j);

}

}

publicvoidgetavail()//功能:

得出可用块号与不可用块号的集合

{

inta;

intb=0,c=0;

A=0;

H=0;

for(inti=0;i<40;i++)

for(intj=0;j<16;j++)

{

if(data[i][j].equals("0"))

{

a=i*16+j;//得到相对块号

sp[b]=a;//写入可用块号集合

A++;

b++;

}

else

{

a=i*16+j;//得到相对块号

used[c]=a;

H++;

c++;//写入不可用块号集合

}

}

}

publicvoidallrec()//全部回收

{

ta.setText("");

Stringstr="回收结果:

\n";

for(inti=0;i

{

inta=used[i]/16;

intb=used[i]%16/4;

intc=used[i]%16%4;

data[a][4*b+c]="0";

table.setValueAt("0",a,4*b+c);//位示图相应位置置零

str+="柱面"+a+"磁道"+b+"扇区"+c+"盘块号:

"+used[i]+"\n";

used[i]=0;//位示图相应位置置零

}

for(inti=0;i<40;i++)

for(intj=0;j<16;j++)

{

table.setValueAt("0",i,j);

}

H=0;

getavail();

ta.append(str);

}

publicstaticvoidmain(String[]args){

newbitmap();

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==b1){

init();

getavail();

Stringstr6=""+A;

ta.append("初始化完成!

\n");

tf3.setText(str6);

}

if(e.getSource()==b2){

if(A==640)

{

ta.setText("");

Stringstr7="没有资源可回收";

ta.append(str7);

}

else

allrec();

Stringstr8=""+A;

tf3.setText(str8);

}

if(e.getSource()==b3){

intn;

System.out.println(tf1.getText());

n=Integer.parseInt(tf1.getText());

tf1.setText("");

if(A

{

ta.setText("");

Stringstr1="空闲块不足\n";

//ta.append(str1);

JOptionPane.showMessageDialog(null,"空闲块不足","提示",JOptionPane.PLAIN_MESSAGE);

return;

}

else

{

intj,k;

ta.setText("");

Stringstr="分配结果\n";

intx=H;

for(inti=0;i

{

j=sp[i]/16;

k=sp[i]-j*16;

used[x+i]=sp[i];//可用块相对地址转为已用块相对地址

data[j][k]="1";

table.setValueAt("1",j,k);//将位示图对应位置写1

str+="柱面"+sp[i]/16+"磁道"+(sp[i]%16)/4+"扇区"+(sp[i]%16)%4+"盘块号:

"+sp[i]+"\n";

A--;

H++;

}

for(intt=0;t

{

sp[t]=sp[t+n];//删除可用块中的已用块

}

ta.append(str);

}

Stringstr2=""+A;

tf3.setText(str2);

tf1.setText("");

}

if(e.getSource()==b4){

intnum;

num=Integer.parseInt(tf2.getText());

ta.setText("");

Stringstr="";

intj,k=0;

inta=num/16;//柱面

intb=num%16/4;//磁道

intc=num%16%4;//扇区

if(data[a][4*b+c].equals("0"))

{

JOptionPane.showMessageDialog(null,"不可回收空闲块","提示",JOptionPane.PLAIN_MESSAGE);

//tf2.setText("");

return;

}

else

{

data[a][4*b+c]="0";

table.setValueAt("0",a,4*b+c);

str+="柱面"+a+"磁道"+b+"扇区"+c+"盘快号:

"+num+"\n";

A++;

H--;

for(inti=0;i

{

if(used[i]==num)

{

k=i;

break;

}

}

for(j=k;j

used[j]=used[j+1];//将回收的块号从“已用”中删除

ta.append("回收结果:

\n");

ta.append(str);

}

getavail();

Stringstr5=""+A;

tf3.setText(str5);

tf2.setText("");

}

}

}

四、使用说明

程序运行后的运行界面如图3所示:

图3程序运行界面

单击“初始化”按扭初使化程序。

初使化后位示图分配情况图如图4所示。

图4初使化后位示图分配情况图

输入所需分配的块数并单击“确认分配”按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示(以分配量20为例)。

图5点击分配按钮后信息

输入回收的盘块号,单击“确认回收”按钮,系统回收已分配给用户的盘块,如图6所示

图6回收的提示信息

当空闲块不足时,会弹出提示信息,如图7所示。

图7提示信息

单击“全部回收”按钮,所有盘块在位示图上位置置“0”,表示已经回收,如图8所示

单击“确认回收”,若该块已经处于回收状态,则弹出对话框进行提醒,如图9所示

五、结果分析

基本满足要求,位示图初始化、单个分配、单个回收、全部回收等功能均可实现。

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

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1