一、 课程设计目的。
本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、i/o操作、存储管理、文件系统等操作系统概念。
二、 课程设计要求。
1)对进行认真分析,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据。
2)以完整的作业包的形式提交原始**、设计文档和可运行程序。提交的光盘应当包括:设计题目,程序清单,运行结果分析,所选取的算法及其优缺点,以及通过上机取得了哪些经验。
程序清单要求格式规范,注意加注释(包含关键字、方法、变量等),在每个模块前加注释,注释不得少于20%。课程设计要求同时上交打印文档,设计报告包括设计题目,算法分析,关键**及其数据结构说明,运行结果分析以及上机实践的经验总结。
在任一os下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟linux文件系统。
1. 在现有机器硬盘上开辟100m的硬盘空间,作为设定的硬盘空间。
2. 编写一管理程序simdisk对此空间进行管理,以模拟linux文件系统,要求:
1) 盘块大小1k
2) 空闲盘块的管理:linux位图法。
3) 结构:超级块, i结点区, 根目录区。
3. 该simdisk管理程序的功能要求如下:
1) info: 显示整个系统信息(参考linux文件系统的系统信息),文件可以根据用户进行读写保护。目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。
2) cd …:改变目录:改变当前工作目录,目录不存在时给出出错信息。
3) dir …:显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。
4) md …:创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。
5) rd …:删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。
6) newfile …:建立文件。
7) cat …:打开文件。
8) copy …:拷贝文件,除支持模拟linux文件系统内部的文件拷贝外,还支持host文件系统与模拟linux文件系统间的文件拷贝,host文件系统的文件命名为…,如:将windows下d:
盘的文件\data\sample\文件拷贝到模拟linux文件系统中的/test/data目录,windows下d:盘的当前目录为d:\data,则使用命令:
simdisk copy d:\data\sample\ /test/data
或者:simdisk copy d:sample\ /test/data
9) del …:删除文件:删除指定文件,不存在时给出出错信息。
10) check: 检测并恢复文件系统:对文件系统中的数据一致性进行检测,并自动根据文件系统的结构和信息进行数据再整理。
4. 程序的总体流程为:
1) 初始化文件目录;
2) 输出提示符,等待接受命令,分析键入的命令;
3) 对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入exit退出为止。
实现一个简单的shell(命令行解释器)。
将设计一的管理程序simdisk作为后台进程运行,利用本设计任务的shell操作simdisk。
ipc)。实现多个进程同时对模拟文件系统进行操作。设计管理程序simdisk的用户访问权限管理。
访问模拟文件系统的每个进程都属于某个用户,管理程序simdisk根据其访问权限决定其对模拟文件系统的操作。
对模拟文件系统的操作要求做到:共享读,互斥写。
本设计任务在于学会如何实现信息的安全管理和进程同步。
注:要求从课程设计的整体来考虑设计任务。
一、二、三,并分阶段实现。
三、 开发环境。
windows 7
microsoft visual studio 2008
四、 主要实现过程。
1. 概要设计。
对于开闭100mb的使用空间,对此的理解应该是除了磁盘信息描述意外的数据储存区域都需要1024*1024*100的空间,故需要在主机生成固定大小的文件来模拟磁盘。
linux的位图法管理空闲的盘块,要求使用以下结构:超级块、inode结点区、根目录区。同时,对于一个磁盘,肯定需要有一个存储区域来保存其整体信息,以便统计以及错误修正,而这个区域保存在磁盘起始位置为最佳。
将这些结构存储于文件中,直接想到的方案是建立对应的类,并用二进制文件直接将整个类写进文件,通过文件指针的移动,可以将所有结构直接进行保存和读取,相对于按变量保存和读取的出错率将大大降低。如果将这些内容也保存到文件,则生成的模拟磁盘文件实际大小必定大于100mb。其文件设计如下:
另外,根据题目要求,需要从整体来考虑设计。
一、二、三,故为了控制不同的用户访问,定义一个用户类也是必须的。并且要根据不同的用户给予不同的访问权限。
所以整个系统的访问流程如下图所示:
2. 主要算法及数据结构说明。
一些简单的数据结构:
超级块:记录系统的一些重要数据,每个数据块组都有超级块,系统启动时只将第0块的数据块组的超级块读入内存,每次修改时更新所有数据块组并写回硬盘,所以一般不会出错。
struct super_block
unsigned int s_inodes_countinode 的总数。
unsigned int s_blocks_count盘块的总数。
unsigned int s_log_block_size盘块的大小。
unsigned int s_free_blocks_count; /空闲块的总数。
unsigned int s_free_inodes_count; /空闲inode的总数。
unsigned int s_first_data_block; /第一个数据块。
unsigned int s_blocks_per_group; /每组的盘块数。
unsigned int s_inodes_per_group; /每组的inode数。
组描述符:描述各个数据块组的信息,和超级块一起构成了数据块组。
struct group_desc
unsigned long bg_block_addr本组数据块在数据区的首地址。
unsigned int bg_block_bitmap本组数据块位图所在的块号。
unsigned int bg_inode_bitmap本组inode 位图所在的块号。
unsigned int bg_inode_table本组inode 表所在的块号。
unsigned int bg_free_blocks_count; /组中空闲块的数目。
unsigned int bg_free_inodes_count; /组中空闲inode 的数目。
inode节点:描述文件的属性,一个文件对应一个inode,inode数目和数据块数目一样多,即表示如果每个文件都只有一个数据块这么大,则可以有和数据块一样多的文件存在;不过本系统的inode和linux的有点不同,就是记录地址的是文件的首地址,因为本系统的文件在数据区是连续存放的。
struct inode
unsigned short i_mode模式。
unsigned int i_uid文件的用户id
unsigned int i_size文件的大小。
unsigned int i_blocks分配给该文件的磁盘块的数目。
long i_block指向磁盘块的起始地址。
bool i_change表示该文件是否修改过,true表示修改过,false表示没有。
数据块组:由超级块和组描述符组成。
struct block_group
struct super_block super_block超级块。
struct group_desc group_desc组描述符。
文件:包括文件名(普通文件或者目录)和inode号。
struct file_entry
char name[name_len文件名。
int inodeinode号,即在inode_table中的数组下标。
目录:用于存储指定具体目录所包含文件(包括目录)的数目和具体的文件内容(即dir_entry)
struct dir
char dir_name[name_len目录名。
int inodeinode号。
int size记录该目录下包含多少个文件(包括目录)
struct file_entry file_entry[file_num具体的文件内容。
用户:包括用户权限、id、密码,系统默认最大用户数目为8个。
struct user
unsigned int mode用户的模式(权限)
int uid用户的id
char password[20密码。
命令:用于存储系统命令,共13个命令。
struct command
char com[10];
一些重要的函数说明:(具体的参见源程序)
void format用于格式化文件系统。
void display_sys_info显示系统信息。
bool get_dirname(char*path,int len,int pos,char*name); 根据路径path分解出路径第pos处的文件(或目录)名。
long block_alloc(int len,int *b_index); 分配数据块,返回成功分配的首地址。
void block_free(int len,int pos释放数据块。
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....