操作系统课程设计报告磁盘空间管理.docx
《操作系统课程设计报告磁盘空间管理.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告磁盘空间管理.docx(15页珍藏版)》请在冰豆网上搜索。
![操作系统课程设计报告磁盘空间管理.docx](https://file1.bdocx.com/fileroot1/2022-10/26/e84b8d7f-79ec-4146-a5ab-c00009e8b6bd/e84b8d7f-79ec-4146-a5ab-c00009e8b6bd1.gif)
操作系统课程设计报告磁盘空间管理
哈尔滨理工大学
课 程 设 计
(操作系统)
题 目:
磁盘空间管理/Diskallocation
班 级:
计算机科学和技术
姓 名:
指导教师:
系主任:
2017年09月01日
1题目分析
磁盘空间管理在操作系统中地位至关重要,由于磁盘具有可直接访问的特性,故当利用磁盘来存放文件时,具有很大的灵活性。
在为文件分配外存空间时所要考虑的主要问题是:
怎样才能有效的利用外村空间和如何提高对文件的访问速度。
目前,常用的外存分配方法有连续分配、链接分配和索引分配三种。
通常,在一个系统中,仅采用其中的一种方法来为文件分配外存空间。
在本次课程设计中,主要是针对连续分配和链接分配两种方式设计程序模拟磁盘空间的管理。
文件的物理结构和外存分配方式有关。
不同的分配方式会形成不同的文件结构,连续分配会形成顺序式的文件结构,而链接分配则会形成链接式文件结构。
本次课程设计将主要采用C++语言和C#语言,同时运用文件物理结构和磁盘空间管理的相关知识,开发出两个版本的磁盘空间管理模拟软件。
实现连续分配、链接分配两种外存分配方式,能够显示文件的逻辑块地址和物理块地址映射关系,能够实时的显示文件空间占用情况和磁盘空间的使用情况。
同时为了处理好连续分配可能带来的磁盘碎片话问题,为了尽可能最大化的利用磁盘空间,将构造磁盘紧凑函数用来模拟磁盘紧凑功能的实现。
其中C++语言将开发出简单的命令行程序,然后用C#语言转成有图形界面的完整模拟程序。
2数据结构及函数
主要变量参数
intdisksum;//磁盘空间大小
intdiskrem;//磁盘剩余空间大小
intfiresum;//文件占据空间大小
intfireid;//存储文件个数
intway;//存储方式
intdisk[10240];//模拟磁盘存储块
stringrun="1";//操作选项
文件数据结构
structFire{
stringname;//文件名
int_size;//文件大小
intst,en;//连续文件首位地址
intloc[100];//存储文件物理地址
};
主要函数
存储文件函数:
voidstorefire();
删除文件函数:
voidstorefire();
磁盘紧凑函数:
voidcompactdisk();
显示地址函数:
voidadressshow();
显示空间占用函数:
voidshow();
打印初始化函数:
voidprin();
3流程图
图1总流程图
图2存储文件流程图图3删除文件流程图
4实现技术
第1章
第2章
第3章
命令行程序
第1章
第2章
第3章
为实现简单命令行程序设计,采用C++语言,VS2017开发环境。
具体采用的技术如下:
(1)字典树存储查找算法。
在进行存储文件、删除文件、显示映射地址时,需要查询文件名是否存在,当文件数量特别大时,如果采用顺序查找,效率十分低,采用字典树查找算法就能快速高效的查询文件是否存在;
(2)线段树算法。
进行连续存储时,需要判断磁盘是否存在连续的空间能够存储下当前文件,采用顺序查找判断同样是效率低下,采用线段树算法优化可以很大程度上节省程序运行时间;
(3)链表。
进行链接存储文件时,采用链表存储更方便,删除文件时操作更加便捷。
实现步骤如下:
(1)程序初始化,设置磁盘空间大小,选择文件存储方式;
(2)选择执行的操作,存储、删除、紧凑及各种信息显示;
(3)执行操作,输入需要的相关信息,如存储文件时需要输入文件名和文件大小;
(4)程序内部运行完成后返回
(2),直至选择退出系统。
运行结果如下:
(1)以下给出多种功能演示的正常情况的运行情况,截图如下:
图4存储操作
图5删除文件
图6磁盘使用情况(删除文件前)
图7磁盘使用情况(删除文件后)
图8磁盘紧凑处理
图9地址映射显示(紧凑处理前)
图10地址映射显示(紧凑处理后)
图11链接存储后的地址映射
(2)除了以上正常情况输入输出外,考虑到本程序设计大量的输入操作,为了避免人为操作的失误,导致程序意外终止崩溃的情况发生,程序内部还增加了大量的容错机制,即使输入错误的数据类型也能使程序正常运行,以下仅给出几例输入错误截图:
图12存储方式选择错误示例
图13操作方式选择错误示例
图14存储文件输入重名文件
图15存储文件超出剩余空间大小
图形界面程序
为了完成本次课程设计的任务要求,实现用图形界面演示,本人又重新采用C#语言,在VS2017开发环境下,开发出第二个版本的磁盘管理系统。
具体采用的技术如下:
(1)采用Lable控件用作显示文字标签,显示程序中需要的一些文字提示;
(2)采用TextBox控件用作输入输出的接口,输入一些信息或者显示输出的信息;
(3)采用Button控件用作选择执行操作的按钮;
(4)采用RadioButton控件用来选择连续存储或者链接存储;
(5)具体算法运用和上述C++程序基本一致。
以下是程序运行的部分截图:
图16登录界面(密码:
password)
图17初始化界面
图18操作主界面
图19存储界面
图20删除界面
图21显示地址映射
对于本程序,同样也进行了容错处理,对于输入错误的数据也会给出相应的提示,具体的示例如下截图所示:
图22输入错误的用户名
图23输入错误密码
图24文件名重名
图25删除不存在文件
5设计结论和心得
通过课程设计得到如下结论:
(1)深入理解了磁盘存储文件两种方式不同的内部机制,也理解了为什么不同的外存方式会形成不同物理结构的文件,同时也对连续存储和链接存储的优缺点有所了解,如连续存储容易使磁盘碎片化的问题更加严重,不能充分的利用磁盘的空间,而链接存储能有效的解决磁盘碎片化的问题,但却影响了磁盘的访问速度,两种方式各有长短,在实际生活中,应该根据文件的不同类型采用相应的外存分配方式;
(2)在算法优化方面,测试程序时由于数据量相对较小并不能体现出所用到的字典树查找、线段树等算法的优势,但在实际生活中需要处理的数据往往特别大,所以对算法的优化还是十分有必要的,这次的课程设计也是综合考察了以前的课程《数据结构预算法分析》,能够将学过的知识加以运用才是学习的最终目的。
有如下几点心得体会:
(1)本次课程设计中,除了运用了之前学习过的C++语言,还边看边学边用地挑战了一下一门新语言C#语言,也提高了自主学习的能力,同时也理解到了编程的精髓所在,只要认真地学好了一门编程语言,打好基础,以后在入门其他编程语言的时候效率就会非常高,所以说基础知识非常重要,在学习的过程中千万不能眼高手低,一定要脚踏实地的静下心来学习,才能得到质的提升;
(2)在开始本次课程设计之前,得知需要实现图形界面操作,内心其实是有一些畏惧的,因为以前做的课程设计和实验并没有要求实现图形界面,一直都是用命令行窗口运行演示的。
由于没有做过图形界面,就下意识的以为会非常困难复杂,畏难情绪油然而生,但通过几天的了解和学习,发现并没有想象中的那么复杂,只要沉下心好好学,选对适合做图形界面的语言,完成课程设计所需要的简单界面也没有想象中那么难,这也给我本人一个启示,凡事不能还没开始就被自己的畏难情绪打败了,只有敢于开始才会发现也许事实上并没有那么复杂。