linux实验五: 磁盘管理含源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五:磁盘管理
实验学时:2学时
实验类型:设计
实验要求:必修
一、实验目的
怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。
二、实验内容
模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。
本实习模拟用位示图管理磁盘存储空间的管理方法。设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。
假定已有如表1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,显示或打印运行的结果。然后再归还如表2的空间,运行回收程序,显示或打印运行结果。
表1
表2
三、实验原理、方法和手段
磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。
为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。位示图的形式与实习四中的位示图一样,但要注意,对于主存储空间和磁盘存储空间应该用不同的位示图来管理,绝不可混用。
当申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。假设现在有一个盘组共80个柱面,每个柱面有两个磁道,每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号磁道号=[位数/4] 物理记录号={位数/4} 当归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。归还块在
位示图中的位置计算如下:
字节号=柱面号
位数=磁道号 4+物理记录号
四、实验组织运行要求
该实验采用集中授课形式。
1.学生在进行实验前必须进行充分的预习,熟悉实验内容,
写出实验步骤,特别是算法流程;
2.学生严格遵守实验室的各项规章制度,注意人身和设备安
全,配合和服从实验室人员管理;
3.教师在学生实验过程中予以必要的辅导,独立完成实验;
4.教师审查、分析学生实验方案和实验结果;
5.综合评定学生的实验成绩。
五、实验条件
实验机器要求安装Visual C++ 6.0编程平台;实验要求一人一机。
六、实验步骤
本实验在Visual C++ 6.0编程平台下进行编程实现,详见实验内容。
1.按照学生自行设计的算法流程,进行编程;
2.编译、调试程序;
3.运行程序,记录结果。
七、思考题
1. 磁盘调度哪些算法?
八、实验报告
1.实验预习
在实验前每位学生都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,实验步骤、算法流程,形成一个操作提纲。
2.实验记录
学生开始实验时,应该将记录本放在近旁,按照自行设计的实验方案和步骤进行编程,记录结果。
实验记录中应有指导教师的签名。
3.实验报告
(1) 实习题目、实验目的、实验要求。
(2) 程序中使用的数据结构及符号说明。
(3) 流程图。
(4) 打印一份源程序并附上注释。
(5) 要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。
假定已有如表6-1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,按(4)中要求显示或打印运行的结果。然后再归还如表6-2的空间,运行回收程序,按(4)中的要求显示或打印运行结果。
表6-1
表6-2
九、其它说明
学生在实验过程中应遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理。
源程序:
#include
#include
#include
#define A 10
#define B 2
#define C 4
int koko[A][B][C];
int M,N;
int i,j,k;
char ch;
void i_koko()
{