用位示图管理磁盘空间的分配与回收_第1页
用位示图管理磁盘空间的分配与回收_第2页
用位示图管理磁盘空间的分配与回收_第3页
用位示图管理磁盘空间的分配与回收_第4页
用位示图管理磁盘空间的分配与回收_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告(2016-2017年度第二学期)课程名称:操作系统实验课设题目:用位示图管理磁盘空间的分配与回收院系:控制与计算机工程学院班级:信安1401姓名:黄竟昶指导教师:贾静平设计周数:一周成绩:2015、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图9-1所示。系统设一个变量S,记录磁盘的空闲块个数。位01234567891

2、01112131415字0111111010011111012.39图91位小图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号x16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数=每柱面的磁道数x每磁道的扇区数=4x4=16,故柱面号=相对块号/16的商,即柱面号=字号磁道号=(相对块号/16的余数)/4的商,即(位号/4)的商物理块号=(相对块号/16的余数)/4的余数,即(位号/4)的余数(3)当释放一个相对物理块时,运行回收程

3、序,计算该块在位示图中的位置,再把相应位置00计算公式如下:先由磁盘地址计算相对块号:相对块号=柱面号X16+磁道号X4+物理块号再计算字号和位号:字号=相对块号/16的商,也即字号=柱面号位号=磁道号x物理块数/每磁道+物理块号(4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。(5)设计一个回收算法,将上述已分配给用户的各盘块释放。并显示系统各表。回收算法框图如图5所示。二、整体功能及设计程序整体主要有四个功能模块,分别是:初始化、分配、单独回收以及全部回收。当点击相应按钮时实现其

4、功能。程序设计了三个方法,分别是初始化init、分配算法dist、单独回收rec、全部回收allrec磁盘空间分配框图如图1所示,磁盘空间回收框图如图2所示.图1磁盘空间分配框图图2磁盘空间回收框图三、编程实现importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassbitmapextendsJFrameimplementsActionListenerJTabletable;JScrollPanesp1,sp2;JTextAreata;JLabel11,12,13,14,15;JTextFieldtf1,tf2

5、,tf3;JButtonb1,b2,b3,b4;JPanelp1,p2,p3,p4,p5,p6,p7;Stringdata;Stringcolum口;intsp口;存放(相对)可用块intused口;存放(相对)已用块数intA,H;/S为可用块数,T为已用块数bitmap()super("“位示图管理磁盘空间的分配与回收”系统模拟");data=newString4016;colum=newString16;sp=newint640;used=newint640;A=0;H=0;for(inti=0;i<16;i+)columi=""+i;tab

6、le=newJTable(data,colum);sp1=newJScrollPane(table);tf1=newJTextField(6);tf2=newJTextField(6);tf3=newJTextField(6);ta=newJTextArea(10,20);sp2=newJScrollPane(ta);pl=newJPanel(newBorderLayout();p2=newJPanel(newFlowLayout();p3=newJPanel(newBorderLayout();p4=newJPanel(newFlowLayout();p5=newJPanel(newFlow

7、Layout();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");

8、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("请输入需要分配的块数:II);l4=newJLabel("请输入要回收的盘块号:II);b3=newJButton("确认分配&q

9、uot;);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

10、.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两数中进行随机dataij=""+k;table.setValueAt(""+k,i,j);publicvoidgetavail()/功能:得出可用块号与不可用块号的集合inta;intb=0,c=0;A=0;H=0;for(inti=

11、0;i<40;i+)for(intj=0;j<16;j+)(if(dataij.equals("0")(a=i*16+j;/得到相对块号spb=a;/写入可用块号集合A+;b+;else(a=i*16+j;/得到相对块号usedc=a;H+;c+;/写入不可用块号集合publicvoidallrec()/全部回收(ta.setText("");Stringstr="回收结果:n"for(inti=0;i<H;i+)(inta=usedi/16;intb=usedi%16/4;intc=usedi%16%4;dataa

12、4*b+c="0"table.setValueAt("0",a,4*b+c);位示图相应位置置零str+="柱面"+a+"磁道"+b+"扇区"+c+"盘块号:"+usedi+"n"usedi=0;/位示图相应位置置零for(inti=0;i<40;i+)for(intj=0;j<16;j+)table.setValueAt("0",i,j);H=0;getavail();ta.append(str);publicstatic

13、voidmain(Stringargs)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);)elseallrec();S

14、tringstr8=""+A;tf3.setText(str8);)if(e.getSource()=b3)intn;System.out.println(tf1.getText();n=Integer.parseInt(tf1.getText();tf1.setText("");if(A<n)ta.setText("");Stringstr1="空闲块不足n"/ta.append(str1);JOptionPane.showMessageDialog(null,"空闲块不足","

15、;提示”,JOptionPane.PLAIN_MESSAGE);return;)elseintj,k;ta.setText("");Stringstr="分配结果n"intx=H;for(inti=0;i<n;i+)(j=spi/16;k=spi-j*16;usedx+i=spi;/可用块相对地址转为已用块相对地址datajk="1"table.setValueAt("1",j,k);/将位示图对应位置写1str+="柱面"+spi/16+”磁道"+(spi%16)/4+”扇区”

16、+(spi%16)%4+"盘块号:"+spi+"n"A-;H+;for(intt=0;t<A;t+)(spt=spt+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;in

17、ta=num/16;/柱面intb=num%16/4;/磁道intc=num%16%4;/扇区if(dataa4*b+c.equals("0")(JOptionPane.showMessageDialog(null,"不可回收空闲块","提示",JOptionPane.PLAIN_MESSAGE);/tf2.setText("");return;else(dataa4*b+c="0"table.setValueAt("0",a,4*b+c);str+="柱面&quo

18、t;+a+"磁道"+b+"扇区"+c+”盘快号:"+num+"'n"A+;H-;for(inti=0;i<H;i+)(if(usedi=num)(k=i;break;for(j=k;j<H;j+)usedj=usedj+1;/将回收的块号从“已用"中删除ta.append("回收结果:n");ta.append(str);getavail();Stringstr5=""+A;tf3.setText(str5);tf2.setText("");)四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击“初始化”按扭初使化程序。初使化后位示图分配情况图如图4所小。图4初使化后位示图分配情况图输入所需分配的块数并

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论