1、 课课 程程 设设 计计 ( 操 作 系 统 )( 操 作 系 统 ) 题 目: 磁盘空间管理 / Disk allocation 班 级: 计算机科学与技术 姓 名: 指导教师: 系 主 任 : 2017 年 09 月 01 日 I 目目 录录 1 题目分析 .1 2 数据结构及函数 .2 1.1 主要变量参数 2 1.2 文件数据结构 2 1.3 主要函数 2 3 流程图 .3 4 实现技术 .4 4.1 命令行程序 4 4.2 图形界面程序 8 5 设计结论和心得 .12 1 1 题目分析 磁盘空间管理在操作系统中地位至关重要,由于磁盘具有可直接访问的特性 ,故当 利用磁盘来存放文件时,
2、具有很大的灵活性。在为文件分配外存空间时所要考虑的主要问 题是:怎样才能有效的利用外村空间和如何提高对文件的访问速度。目前,常用的外存分 配方法有连续分配、 链接分配和索引分配三种。通常,在一个系统中, 仅采用其中的一 种方法来为文件分配外存空间。在本次课程设计中,主要是针对连续分配和链接分配两种 方式设计程序模拟磁盘空间的管理。 文件的物理结构与外存分配方式有关。不同的分配方式会形成不同的文件结构,连续 分配会形成顺序式的文件结构,而链接分配则会形成链接式文件结构。 本次课程设计将主要采用 C+语言和 C#语言,同时运用文件物理结构和磁盘空间管 理的相关知识,开发出两个版本的磁盘空间管理模拟
3、软件。实现连续分配、链接分配两种 外存分配方式,能够显示文件的逻辑块地址和物理块地址映射关系,能够实时的显示文件 空间占用情况和磁盘空间的使用情况。同时为了处理好连续分配可能带来的磁盘碎片话问 题,为了尽可能最大化的利用磁盘空间,将构造磁盘紧凑函数用来模拟磁盘紧凑功能的实 现。其中 C+语言将开发出简单的命令行程序,然后用 C#语言转成有图形界面的完整模 拟程序。 2 2 数据结构及函数 1.1 主要变量参数 int disksum; /磁盘空间大小 int diskrem; /磁盘剩余空间大小 int firesum; /文件占据空间大小 int fireid; /存储文件个数 int wa
4、y; /存储方式 int disk10240; /模拟磁盘存储块 string run=“1“; /操作选项 1.2 文件数据结构文件数据结构 struct Fire string name; /文件名 int _size; /文件大小 int st,en; /连续文件首位地址 int loc100; /存储文件物理地址 ; 1.3 主要函数主要函数 存储文件函数:void storefire(); 删除文件函数:void storefire(); 磁盘紧凑函数:void compactdisk(); 显示地址函数:void adressshow(); 显示空间占用函数:void show()
5、; 打印初始化函数:void prin(); 3 3 流程图 图 1 总流程图 图 2 存储文件流程图 图 3 删除文件流程图 4 4 实现技术 4.1 命令行程序 为实现简单命令行程序设计,采用C+语言,VS2017开发环境。 具体采用的技术如下:具体采用的技术如下: (1)字典树存储查找算法。在进行存储文件、删除文件、显示映射地址时,需要查 询文件名是否存在,当文件数量特别大时,如果采用顺序查找,效率十分低,采用字典树 查找算法就能快速高效的查询文件是否存在; (2)线段树算法。进行连续存储时,需要判断磁盘是否存在连续的空间能够存储下 当前文件,采用顺序查找判断同样是效率低下,采用线段树算
6、法优化可以很大程度上节省 程序运行时间; (3)链表。进行链接存储文件时,采用链表存储更方便,删除文件时操作更加便捷。 实现步骤如下:实现步骤如下: (1)程序初始化,设置磁盘空间大小,选择文件存储方式; (2)选择执行的操作,存储、删除、紧凑及各种信息显示; (3)执行操作,输入需要的相关信息,如存储文件时需要输入文件名和文件大小; (4)程序内部运行完成后返回(2) ,直至选择退出系统。 运行结果如下:运行结果如下: (1)以下给出多种功能演示的正常情况的运行情况,截图如下: 图 4 存储操作 5 图 5 删除文件 图 6 磁盘使用情况(删除文件前) 图 7 磁盘使用情况(删除文件后) 图 8 磁盘紧凑处理 图 9 地址映射显示(紧凑处理前) 6 图 10 地址映射显示(紧凑处理后) 图 11 链接存储后的地址映射 (2)除了以上正常情况输入输出外,考虑到本程序设计大量的输入操作,为了避免 人为操作的失误,导致程序意外终止崩溃的情况发生,程序内部还增加了大量的容错机 制,即使输入错误的数据类