




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 报 告( 2016-2017年度第二学期)课程名称: 操作系统实验 课设题目: 用位示图管理磁盘空间的分配与回收 院 系: 控制与计算机工程学院 班 级: 信安1401 姓 名: 黄竞昶 指导教师: 贾静平 设计周数: 一周 成 绩: 2015年7月9 日一、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图91所示。系
2、统设一个变量S,记录磁盘的空闲块个数。位0123456789101112131415字0111111010011111012. . .39图91 位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号×16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数每柱面的磁道数×每磁道的扇区数4×416,故柱面号相对块号16的商,即柱面号字号磁道号(相对块号16的余数)4的商,即(位号4)的商物理块号(相对块号16的
3、余数)4的余数,即(位号4)的余数(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应位置0。计算公式如下:先由磁盘地址计算相对块号:相对块号柱面号×16+磁道号×4+物理块号再计算字号和位号:字号相对块号16的商,也即字号柱面号位号磁道号×物理块数每磁道+物理块号 (4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。(5)设计一个回收算法,将上述已分配给用户的各盘块释放。并显示系统各表。回收算法框图如图5所示。二、整体功能及设计
4、程序整体主要有四个功能模块,分别是:初始化、分配、单独回收以及全部回收。当点击相应按钮时实现其功能。程序设计了三个方法,分别是初始化init、分配算法dist、单独回收rec、全部回收allrec。磁盘空间分配框图如图1所示, 磁盘空间回收框图如图2所示.开 始由磁盘的三维转为磁盘的相对块号由相对块号转换成对应位示图的字位号置位示图相应位为0空闲盘个数+1输出位示图等返 回释放一个磁盘块开始申请一个磁盘块还有空闲块?申请者等待返 回查位示图找第一个为0的字位号找到了?返回,磁盘已满本次无法分配返 回NYYNN由字位号计算相对块号,柱面号,磁道号,物理记录号,并输出这些参数位置示图相应位为1 图
5、1 磁盘空间分配框图 图2 磁盘空间回收框图三、编程实现import java.awt.*;import java.awt.event.*;import javax.swing.*;public class bitmap extends JFrame implements ActionListenerJTable table;JScrollPane sp1,sp2;JTextArea ta;JLabel l1,l2,l3,l4,l5;JTextField tf1,tf2,tf3;JButton b1,b2,b3,b4;JPanel p1,p2,p3,p4,p5,p6,p7;String dat
6、a ;String colum;int sp;/存放(相对)可用块 int used;/存放(相对)已用块数 int A,H;/S为可用块数,T为已用块数bitmap()super("“位示图管理磁盘空间的分配与回收”系统模拟");data = new String4016;colum = new String16; sp = new int640; used = new int640; A = 0; H = 0; for(int i=0; i<16; i+) columi=""+i; table = new JTable(data,colum);
7、 sp1 = new JScrollPane(table); tf1 = new JTextField(6); tf2 = new JTextField(6); tf3 = new JTextField(6); ta = new JTextArea(10,20); sp2 = new JScrollPane(ta); p1 = new JPanel(new BorderLayout(); p2 = new JPanel(new FlowLayout(); p3 = new JPanel(new BorderLayout(); p4 = new JPanel(new FlowLayout();
8、p5 = new JPanel(new FlowLayout(); p6 = new JPanel(new BorderLayout(); p7 = new JPanel(new FlowLayout(); l1 = new JLabel("位示图如下:"); b1 = new JButton("位示图初始化"); b1.addActionListener(this); b2 = new JButton("回收全部磁盘块"); b2.addActionListener(this); p2.add(b1);p2.add(b2); p1.
9、add(l1,"North"); p1.add(sp1,"Center"); p1.add(p2,"South"); l2 = new JLabel("运行状况: "); l5 = new JLabel("空闲块数量:"); p7.add(l5);p7.add(tf3); p3.add(l2,"North"); p3.add(p7,"South"); p3.add(sp2,"Center"); l3 = new JLabel("
10、;请输入需要分配的块数:"); l4 = new JLabel("请输入要回收的盘块号:"); b3 = new JButton("确认分配"); b3.addActionListener(this); b4 = new JButton("确认回收"); 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,
11、"Center"); this.setLayout(new BorderLayout(); this.add(p1,"West"); this.add(p3,"Center"); this.add(p6,"South"); this.pack(); this.setVisible(true); public void init()/功能:初始化 int k; for(int i=0;i<40;i+) for(int j=0;j<16;j+) k = (int)(Math.random()*2);/0与1
12、两数中进行随机 dataij=""+k; table.setValueAt(""+k,i,j); public void getavail()/功能:得出可用块号与不可用块号的集合 int a; int b=0,c=0; A = 0; H = 0; for(int i=0;i<40;i+) for(int j=0;j<16;j+) if(dataij.equals("0") a = i*16+j;/得到相对块号 spb = a;/写入可用块号集合 A+; b+; else a = i*16+j;/得到相对块号 usedc
13、= a; H+; c+;/写入不可用块号集合 public void allrec()/全部回收 ta.setText(""); String str="回收结果:n" for(int i=0;i<H;i+) int a = usedi/16; int b = usedi%16/4; int c = usedi%16%4; dataa4*b+c="0" table.setValueAt("0",a,4*b+c);/位示图相应位置置零 str+="柱面"+a+"磁道"+b
14、+"扇区"+c+"盘块号:"+usedi+"n" usedi=0;/位示图相应位置置零 for(int i=0;i<40;i+) for(int j=0;j<16;j+) table.setValueAt("0",i,j); H=0; getavail(); ta.append(str); public static void main(String args) new bitmap();public void actionPerformed(ActionEvent e) if(e.getSource(
15、)=b1) init(); getavail(); String str6=""+A; ta.append("初始化完成!n"); tf3.setText(str6);if(e.getSource()=b2) if(A=640) ta.setText(""); String str7="没有资源可回收" ta.append(str7); else allrec(); String str8=""+A; tf3.setText(str8);if(e.getSource()=b3) int n; S
16、ystem.out.println(tf1.getText(); n=Integer.parseInt(tf1.getText(); tf1.setText(""); if(A<n) ta.setText(""); String str1="空闲块不足n" /ta.append(str1); JOptionPane.showMessageDialog(null,"空闲块不足","提示",JOptionPane.PLAIN_MESSAGE); return; else int j,k; ta
17、.setText(""); String str="分配结果n" int x=H; for(int i=0;i<n;i+) j = spi/16; k = spi-j*16; usedx+i=spi;/可用块相对地址转为已用块相对地址 datajk="1" table.setValueAt("1",j,k);/将位示图对应位置写1 str+="柱面"+spi/16+" 磁道"+(spi%16)/4+" 扇区"+(spi%16)%4+"盘块号
18、:"+spi+" n" A-; H+; for(int t=0;t<A;t+) spt=spt+n;/删除可用块中的已用块 ta.append(str); String str2=""+A; tf3.setText(str2); tf1.setText("");if(e.getSource()=b4) int num; num=Integer.parseInt(tf2.getText(); ta.setText(""); String str="" int j,k = 0; in
19、t a=num/16;/柱面 int b=num%16/4;/磁道 int c=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+="柱面"+a+"磁道"+b+"扇区"+c+"盘快号:"+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汉语阅读教程》课件-23汉语阅读教程2上课件L4
- 2025劳动合同风险揭秘:求职者必看
- 煤炭生产经营单位(安全生产管理人员)考试题及答案
- 2025科技创新型中小企业贷款贴息项目合同(官方范本)
- 《2025地板供货合同》
- 2025金融合同资产配置委托代理合同
- 小儿多源性房性心动过速的临床护理
- 2025企业借款合同及借条
- (三模)内江市2025届高三第三次模拟考物理试题(含答案)
- 《企业税收优惠》课件
- (正式版)JBT 6434-2024 输油齿轮泵
- 化工和危险化学品生产经营单位二十条重大隐患判定标准释义(中化协)
- 2023《住院患者身体约束的护理》团体标准解读PPT
- 建筑工地节前停工安全检查表
- 苏科版八年级数学下册题型突破提高类型五、反比例函数与一次函数结合求不等式解集与面积(原卷版+解析)
- 问题解决过程PSP-完整版
- 山西医药投资价值分析报告
- 《影视艺术鉴赏》课件
- 动态血糖管理-动态血糖监测CGM
- 屋面高空作业安全施工方案
- PE管道井房首部工程施工方案(完美格式)
评论
0/150
提交评论