完整word版用位示图管理磁盘空间的分配与回收.docx
- 文档编号:7650108
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:19
- 大小:457.76KB
完整word版用位示图管理磁盘空间的分配与回收.docx
《完整word版用位示图管理磁盘空间的分配与回收.docx》由会员分享,可在线阅读,更多相关《完整word版用位示图管理磁盘空间的分配与回收.docx(19页珍藏版)》请在冰豆网上搜索。
完整word版用位示图管理磁盘空间的分配与回收
课程设计报告
(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所示.
开始
由磁盘的三维转为磁盘的相对块号
由相对块号转换成对应位示图的字位号
置位示图相应位为0
空闲盘个数+1
输出位示图等
返回
释放一个磁盘块
开始
申请一个磁盘块
还有空闲块?
申请者等待
返回
查位示图
找第一个为0的字位号
找到了?
返回,磁盘已满本次无法分配
返回
N
Y
Y
N
N
由字位号计算相对块号,柱面号,磁道号,物理记录号,并输出这些参数
位置示图相应位为1
图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++; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 版用位示图 管理 磁盘空间 分配 回收