1 / 15
文档名称:

空闲磁盘存储空间的管理 OS课程设计.doc

格式:doc   大小:55KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

空闲磁盘存储空间的管理 OS课程设计.doc

上传人:慢慢老师 2020/12/28 文件大小:55 KB

下载得到文件列表

空闲磁盘存储空间的管理 OS课程设计.doc

文档介绍

文档介绍:OS课程设计
空闲磁盘存储空间的管理
课程设计任务、要求、目的
我们组选的题目是第17题:空闲磁盘存储空间的管理:简单方法。
具体要求如下:
建立相应的数据结构;
磁盘上建立一个文件,文件长度设为10MB,用该文件来模拟一个磁盘,磁盘的物理块大小为512字节。
建立进程的数据结构;
时间的流逝可以用下面几种方法模拟:(a)按键盘,每按一次可认为过一个时间单位;(b) 响应WM_TIMER;
将一批进程对磁盘的请求的情况存磁盘文件,以后可以读出并重放;
使用两种方式产生进程对磁盘的请求:(a) 自动产生 (b) 手工输入
显示每次磁盘的请求和空间释放后的相关数据结构的状态;
显示每次磁盘的请求和空间释放后状态;
支持的管理方法:空闲表法、空闲链表法、位示图法、UNIX成组链接法。
该课程设计的目的:
磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过这个课程设计可以使我们更好地熟悉掌握磁盘存储管理的原理和分配与回收算法,进一步掌握软件开发方法并提高解决实际问题的能力。
原理与算法描述
我们组将题目中所给的方法分为连续存储空间法和链接存储空间法,并选取其中最具代表性的位示图法和UNIX成组链接法(连续存储与链接存储的结合)来进行代码的编写。
位示图法原理:
位示图用来指出磁盘块的使用情况,位示图中各个元素的取值只有“0”和“1”两种,其中“1”状态表示相应的磁盘块已经被占用,“0”状态表示该磁盘块空闲。申请磁盘块时,分配函数查询第一个空闲块所属的位置,然后从该位置往后选取对应数目的空闲块进行分配,将相应位置的位示图上相应元素置为“1”。为了编程方便,我们查阅资料,假设一个磁盘有8个柱面,每个柱面有2个磁道,每个磁道有4个物理记录。释放磁盘块时与分配磁盘块是相反的操作,由释放函数找到第一个空闲磁盘块,并从该位置往前一单位将被占用的相应数目的磁盘块释放,将位示图上相应元素置为“0”。
成组链接法原理:
成组链接法常应用于UNIX系统中,其主要思想是将结合顺序表和链表进行择优组合,即定义组内为顺序表,最大值为MAXGROUP,大于MAXGROUP的磁盘块另行分组,构成新的顺序表;但是这些顺序表之间用链表的结构进行连接,相当于添加一个新的节点。
开发环境
由于我们只是简单的对磁盘处理进行模拟,所以就在自己的个人PC上进行,用的IDE是DEV C++(Eclipse上JAVA写的界面被老师打回来了。。。)。
重要算法和设计思路描述
设计思路:
对于位示图法,我们就是定义一个矩阵用来可视化磁盘空间的使用情况,出于对控制台界面的考虑,我们将条件简化为:假设一个磁盘有3个柱面,每个柱面有2个磁道,每个磁道有4个物理记录,将矩阵简化为8*3的规模。然后分别建立process顺序表数据结构,存储申请的物理块信息;bitmap位示图类来存储位示图的数据和相应的操作,这些操作包括位示图二维数组bitmap[M][N]来存储位示图信息,Initbitmap()初始化位示图,spaceisok() 判断位示图是否合理,displaybitmap()用来打印位示图信息。
对于成组链接法,我们定义组结构体group和进程结构体process,定义顺序表最大值MAXGROUP为20,大于MAXGROUP的磁盘块另行分组,构成新的顺序表;但是这些顺序表之间用链表的结构进行连接,相当于添加一个新的group节点。用distribute()函数分配内存块,用recycle()函数撤消进程 ,回收内存块 。用·view()函数显示一些进程和数据结构的相应信息。
程序实现—数据结构
我们组选的题目是第17题:空闲磁盘存储空间的管理:简单方法
程序实现—程序清单
位示图法:
#include <iostream>
#include <cstring>
#include <>
using namespace std;
const int cylinder=3,track=2,sector=4;//柱面、磁道、物理块 号
#define SIZE 100//最大块数
const int M=cylinder,N=track*sector;
struct process//process