操作体统课程设计模拟二级文件管理系统c++.docx
《操作体统课程设计模拟二级文件管理系统c++.docx》由会员分享,可在线阅读,更多相关《操作体统课程设计模拟二级文件管理系统c++.docx(48页珍藏版)》请在冰豆网上搜索。
操作体统课程设计模拟二级文件管理系统c++
操作系统课程设计报告
一、课程设计目的
通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。
进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。
同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
二、课程设计内容
1、设计目的:
通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统。
2、设计要求:
1)能够实现下列命令:
●Login用户登录
●Dir列文件目录
●Create创建文件
●Delete删除文件
●Open打开文件
●Close关闭文件
●Read读文件
●Write写文件
●Bit显示外部存储空间的位示图(按16*16的形式显示)
2)系统能检查键入命令的正确性,出错时应能显示出错原因
3)列目录时要列出文件目录、文件名和文件长度,以及系统总容量,占用容量、空闲容量(容量以字节为单位)
4)不允许对打开的文件执行重复打开操作或执行删除操作
5)外部存储空间的大小为256个Block,每个Block的大小为512字节,盘块号从1开始编号
6)文件系统对外部存储空间采用连续分配的方式
7)控制块的大小为32字节,其中文件名字占8个字节,参照MS-DOS设计文件控制块的数据结构;FAT由文件名、起始盘块号,长度、最后一块字节数四部分组成,占12个字节,磁盘的目录最大能存放256个目录项。
目录固定放在外部存储器的1-6号盘块(12*256/512=6)。
三、系统分析与设计
1、系统分析
本次设计的“模拟二级文件管理系统”利用的是二级目录管理方式,分别由用户文件目录(UserFileDirectory)、主文件目录构成。
主文件目录有用户文件目录组成,之间相互独立,分别存放不同用户文件目录的链接信息。
用户文件目录详细存储本用户的所有文件以及文件的相关信息。
2、系统设计
系统设计为多用户系统,多个用户的问价共享同一块磁盘空间,用户的文件系统相互独立,本用户的文件不允许其他用户访问和修改。
总体设计如下
文件系统中文件管理的基本操作:
创建文件:
创建一个新文件时,系统首先要为新文件申请必要的外存空间,并检查将要新建的文件是否已存在,并在用户文件目录中为文件分配一个目录项。
目录项中应记录新建文件的文件名、文件大小、文件类型、文件创建时间,文件在磁盘中的起始位置。
删除文件:
当已不在需要某文件时,可将它从文件系统中删除。
在删除时,首先确认文件是否处于关闭状态,然后在用户目录的文件链表中找到与该文件对应的文件结点,若以上条件都满足,则系统就可以把结点从文件链表中删除,然后回收为此文件分配的磁盘空间。
打开文件:
只有处于打开状态的文件才能被读取、写入、关闭且不能被删除也不能重复打开。
关闭文件:
只有处于关闭状态的文件才能被删除,且不能被重复关闭。
列文件目录:
用户只能获取自己建立的文件及文件夹和其中的文件,当调用命令时列出当前路径下的文件信息。
写文件:
用户可以把相关数据写入到用户自定义的文件中(磁盘上);待写文件必须处于打开状态,写入数据不能超过文件剩余容量否则空间不足将拒绝写入。
读文件:
用户可以把文件中存储的数据读取出来;待读文件必须处于打开状态。
创建文件夹:
用户可以在当前路径下创建文件夹实现多级文件的管理,在此基础上允许不同名文件夹中存储同名文件,其读写,打开,关闭等操作彼此互不干扰。
目录跳转:
用户可以从当前目录跳转到上一级目录,也可以跳转到下一级目录。
文件系统中用户管理的基本操作:
创建用户:
用户可以创建自己的账号,用户名、密码(用户名不超过10个字符,密码不超过20个字符)。
用户登录:
若登录时输入的密码有误,最大重试次数为3次,若连续错误三次,管理系统会自动退出。
数据结构设计:
structmemoryNode//模拟外存空间
{
charcontent[512];
intused;
};
structFileOpen
{
charfile_name[8];
unsignedcharfirstBlock;//首块地址
unsignedcharfileLen;//块数
intlastsize;
charstatus;//状态
};
structFileControlBlocks//文件控制块
{
charfilename[8];
charfstyle;//类型,文件或者文件夹
unsignedcharaddr;//文件地址
intsize;//文件大小
charpriority;
charctime[17];
FileControlBlocks*front;
FileControlBlocks*parent;
FileControlBlocks*next;
FileControlBlocks*child;
};
structUser
{
charname[10];
charpasswd[20];
FileControlBlocks*UFD;
intused;
};
3、模块设计:
主程序模块关系:
各模块流程图:
1.创建文件2.打开文件
3.关闭文件4.写文件
5.读文件6新建文件夹
7.删除目录
8.重命名9.列文件目录
四、系统测试与调试分析
1、系统测试
●测试方法:
黑盒
●测试技术:
单元测试
●测试数据:
有实际意义的一些测试用例,如下面所列的“读者-写者”问题的测试用例描述。
●测试报告:
必须包含最终测试结果:
列出你的测试结果,包括输入和输出。
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于系统登录的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
用户登录功能——用户名--密码
测试步骤
输入正确的用户名与密码
输入正确用户名与错误密码
输入错误用户名与密码
测试数据
正确用户名,正确密码
正确用户名,错误密码
错误用户名、密码
预期结果
正常进入系统
显示密码错误,并提示重试和还允许的次数
显示用户不存在
测试结果
与预期相符
与预期相符
与预期相符
创建文件
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于文件管理的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
文件管理功能——创建文件
测试步骤
输入文件名,正常文件大小
输入文件名,最大文件长度131072
输入文件名,大小超过存储区
测试数据
a,2
a,131072
a,1500000
预期结果
提示创建成功
创建成功,全部存储块分配给文件
提示错误:
内存不足,创建失败
测试结果
与预期相符
与预期相符
与预期相符
打开文件
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于文件管理的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
文件管理功能——打开文件
测试步骤
打开不存在的文件
打开存在的且处于关闭状态的文件
打开已经处于打开状态的文件
测试数据
不存在的文件名
正确文件名
已打开的文件名
预期结果
提示未找到文件
提示打开文件成功
提示文件已打开
测试结果
与预期相符
与预期相符
与预期相符
关闭
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于文件管理的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
文件管理功能——关闭文件
测试步骤
关闭不存在的文件
关闭存在的且处于打开状态的文件
关闭已经处于关闭状态的文件
测试数据
不存在的文件名
正确文件名
已关闭且存在的文件名
预期结果
提示文件未打开
提示文件关闭成功
提示文件未打开
测试结果
与预期相符
与预期相符
与预期相符
列文件目录
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于文件管理的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
文件管理功能——列文件目录
测试步骤
以普通用户A身份列举文件目录
以普通用户B身份列举文件目录
测试数据
用户A创建的文件,
用户B创建的文件,
预期结果
列出用户A的当前工作路径下的文件
列出用户A的当前工作路径下的文件
测试结果
与预期相符,用户之间,通用户不同文件夹不会相互干扰
与预期相符,用户之间,通用户不同文件夹不会相互干扰
删除文件
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于文件管理的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
文件管理功能——删除文件
测试步骤
删除自己建立的处于关闭状态的文件
删除自己建立的处于打开状态的文件
删除不存在的文件
测试数据
正确输入
正确输入,但一打开的
错误输入
预期结果
提示删除成功
提示该文件打开状态,请关闭后再删除
提示文件不存在
测试结果
与预期相符
与预期相符
符合预期
写文件
测
试
说
明
测试名称
模拟二级文件管理系统程序
测试目的
验证系统对于文件管理的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测
试
用
例
测试内容
文件管理功能——写文件
测试步骤
向不存在的文件里写字符串
向已关闭的文件里写字符串
向已打开的文件里写超出文件最大长度的字符串
向已打开的文件里写小于文件最大长度的字符串
测试数据
不存在的文件名
未打开的文件名
正确的文件名,超过文件最大长度的内容
正确的文件名,超过文件最大长度的内容
预期结果
提示文件不存在
提示文件未打开,写入失败
提示超出文件最大长度,放弃写入并推出
提示写入成功
测试结果
与预期相符
与预期相符
与预期相符
与预期相符
2、调试分析:
整个程序的主体存储算法包括文件空间的连续分配算法由于写代码前设计时间长并且反复检查后才动手写代码,基本没出现什么错误。
初步完成时主要功能bug以及解决办法:
命令解析错误(不能过滤多余的空格登):
主要原因是字符串的处理问题,比较简单,因为命令主要分两种带参数的和不带参数的,分析完命令后统计一下参数个数,然后再提示并处理相应错误即可
不同用户和不同文件夹下的文件操作会用不同程度的干扰:
主要原因是每次对文件的操作都是用的文件的相对路径,即只是对单纯的文件名做标记来操作文件,处理过程每次用户推出登陆时随机关闭本用户的所有文件,另外,操作文件的内部实现用文件的绝对路径名,