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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

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

课程名称:操作系统实验

课设题目: 用位示图管理磁盘空间的分配与回收

院系:控制与计算机工程学院

班级:信安1401

姓名:黄竞昶

指导教师:贾静平

设计周数: 一周

成绩:

2015年7月9 日

一、需求分析

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

(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为

(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所示.

JLabel l1,l2,l3,l4,l5;

JButton b1,b2,b3,b4;

JPanel p1,p2,p3,p4,p5,p6,p7;

String data [][];

String colum[];

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

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

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

bitmap(){

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

data = new String[40][16];

colum = new String[16];

sp = new int[640];

used = new int[640];

A = 0;

H = 0;

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

{

colum[i]=""+i;

}

table = new JTable(data,colum);

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());

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.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("请输入需要分配的块数:"); 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,"Center"); this.setLayout(new BorderLayout());

this.add(p1,"West");

this.add(p3,"Center");

this.add(p6,"South");

this.pack();

this.setVisible(true);

}

相关文档
最新文档