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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计报告(2016--2017年度第二学期)课程名称:操作系统实验课设题目:用位示图管理磁盘空间的分配与回收院系:控制与计算机工程学院班级:信安1401姓名:黄竞昶指导教师:贾静平设计周数:一周成绩:2015年7月9日一、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图9—1所示。系统设一个变量S,记录磁盘的空闲块个数。位0123456789101112131415字0111111010011111012....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.*;import.*;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;开始由磁盘的三维转为磁盘的相对块号由相对块号转换成对应位示图的字位号置位示图相应位为0空闲盘个数+1输出位示图等返回释放一个磁盘块开始申请一个磁盘块还有空闲块?申请者等待返回查位示图找第一个为0的字位号找到了?返回,磁盘已满本次无法分配返回NYYNN由字位号计算相对块号,柱面号,磁道号,物理记录号,并输出这些参数位置示图相应位为1Stringdata[][];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;i16;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;i40;i++)for(intj=0;j16;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;i40;i++)for(intj=0;j16;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;iH;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;i40;i++)for(intj=0;j16;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);}elseallrec();Stringstr8=+A;tf3.setText(str8);}if(e.getSource()==b3){intn;(tf1.getText());n=Integer.parseInt(tf1.getText());tf1.setText();if(An){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;in;i++){j=sp[i]/16;k=sp[i]-j*16;used[x+i]=sp[i];//可用块相对地址转为已用块相对地址data[j][k]=1;table.setValueAt(1,j,k);//将位示图对应位置写1str+=柱面+sp[i]/16+磁道+(sp[i]%16)/4+扇区+(sp[i]%16)%4+盘块号:+sp[i]+\n;A--;H++;}for(intt=0;tA;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;iH;i++){if(used[i]==num){k=i;break;}}for(j=k;jH;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 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功