操作系统课程设计

上传人:汽*** 文档编号:483400654 上传时间:2023-06-18 格式:DOCX 页数:14 大小:53.31KB
返回 下载 相关 举报
操作系统课程设计_第1页
第1页 / 共14页
操作系统课程设计_第2页
第2页 / 共14页
操作系统课程设计_第3页
第3页 / 共14页
操作系统课程设计_第4页
第4页 / 共14页
操作系统课程设计_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《操作系统课程设计》由会员分享,可在线阅读,更多相关《操作系统课程设计(14页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计一、课程设计目的本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、 I/O操作、存储管理、文件系统等操作系统概念。二、课程设计要求(1)对进行认真分析,列出实验具体步骤,写出符合题目要求的程序清单, 准备出调试程序使用的数据。(2)以完整的作业包的形式提交原始代码、设计文档和可运行程序。提交 的光盘应当包括:设计题目,程序清单,运行结果分析,所选取的算法及其优缺 点,以及通过上机取得了哪些经验。程序清单要求格式规范,注意加注释(包含 关键字、方法、变量等),在每个模块前加注释,注释不得少于20%。课程设计 要求同时上交打印文档,设计报告包括设计题目,算法分析,关

2、键代码及其数据 结构说明,运行结果分析以及上机实践的经验总结。设计一:设计任务:模拟Linux文件系统在任一 OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单 的模拟Linux文件系统。1. 在现有机器硬盘上开辟100M的硬盘空间,作为设定的硬盘空间。2. 编写一管理程序simdisk对此空间进行管理,以模拟Linux文件系统,要求:(1)盘块大小1k(2)空闲盘块的管理:Linux位图法(3)结构:超级块,i结点区,根目录区3. 该simdisk管理程序的功能要求如下:(1)info:显示整个系统信息(参考Linux文件系统的系统信息),文件可以 根据用户进行读写保护。目录名和文

3、件名支持全路径名和相对路径名, 路径名各分量间用“/”隔开。(2) cd:改变目录:改变当前工作目录,目录不存在时给出出错信息。(3) dir:显示目录:显示指定目录下或当前目录下的信息,包括文件名、 物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示 所有子目录)。(4) md:创建目录:在指定路径或当前路径下创建指定目录。重名时给 出错信息。(5) rd:删除目录:删除指定目录下所有文件和子目录。要删目录不空 时,要给出提示是否要删除。(6) newfile: 建立文件。(7) cat:打开文件。(8) copy:拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外, 还

4、支持host文件系统与模拟Linux文件系统间的文件拷贝,host文件系 统的文件命名为 .,如:将windows下D :盘的文件 datasampletest.txt文件拷贝到模拟Linux文件系统中的 /test/data目录,windows下D:盘的当前目录为D: data,则使用命 令:simdisk copy D: datasampletest.txt /test/data或者:simdisk copy D: sampletest.txt /test/data(9) del:删除文件:删除指定文件,不存在时给出出错信息。(10) check:检测并恢复文件系统:对文件系统中的数据一致

5、性进行检测, 并自动根据文件系统的结构和信息进行数据再整理。4. 程序的总体流程为:(1) 初始化文件目录;(2) 输出提示符,等待接受命令,分析键入的命令;(3) 对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新 命令,直到键入EXIT退出为止。设计二设计任务:模拟文件系统的前端操作shell实现一个简单的shell (命令行解释器)。将设计一的管理程序simdisk作为后台进程运行,利用本设计任务的shell 操作 simdisk。本设计任务在于学会如何实现在前端的shell进程和后端的simdisk进程之 间利用共享内存进行进程间通信(IPC)。设计三:设计任务:模拟文件系

6、统的操作管理实现多个进程同时对模拟文件系统进行操作。设计管理程序simdisk的用户 访问权限管理。访问模拟文件系统的每个进程都属于某个用户,管理程序 simdisk根据其访问权限决定其对模拟文件系统的操作。对模拟文件系统的操作要求做到:共享读,互斥写。本设计任务在于学会如何实现信息的安全管理和进程同步。注:要求从课程设计的整体来考虑设计任务一、二、三,并分阶段实现。开发环境Windows 7Microsoft visual studio 2008、主要实现过程1.概要设计对于开闭100MB的使用空间,对此的理解应该是除了磁盘信息描述意外 的数据储存区域都需要1024*1024*100的空间,

7、故需要在主机生成固定大小 的文件来模拟磁盘。Linux的位图法管理空闲的盘块,要求使用以下结构:超级块、inode 结点区、根目录区。同时,对于一个磁盘,肯定需要有一个存储区域来保存 其整体信息,以便统计以及错误修正,而这个区域保存在磁盘起始位置为最 佳。将这些结构存储于文件中,直接想到的方案是建立对应的类,并用二进 制文件直接将整个类写进文件,通过文件指针的移动,可以将所有结构直接 进行保存和读取,相对于按变量保存和读取的出错率将大大降低。如果将这 些内容也保存到文件,则生成的模拟磁盘文件实际大小必定大于100MB。其 文件设计如下:另外,根据题目要求,需要从整体来考虑设计一、二、三,故为了

8、控制 不同的用户访问,定义一个用户类也是必须的。并且要根据不同的用户给予 不同的访问权限。所以整个系统的访问流程如下图所示:开始格式化装载文件系统分析命令退出格式化进行相应的操作, 直到输入exit等待输入命令2.主要算法及数据结构说明一些简单的数据结构:超级块:记录系统的一些重要数据,每个数据块组都有超级块,系统启动时只将第0块的数据块组的超级块读入内存,每次修改时更新所有数据块组并写回硬盘,所以一般不会出错。struct super_block /inode的总数盘块的总数盘块的大小/空闲块的总数空闲inode的总数unsigned int s_inodes_count;unsigned

9、int s_blocks_count;unsigned int s_log_block_size;unsigned int s_free_blocks_count;unsigned int s_free_inodes_count;unsignedint s_first_data_block; /第一个数据块unsigned int s_blocks_per_group; /每组的盘块数unsigned int s_inodes_per_group; /每组的inode数 ;组描述符:描述各个数据块组的信息,和超级块一起构成了数据块组 struct group_desc unsigned lon

10、g 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数目和数 据块数目一样多,即表

11、示如果每个文件都只有一个数据块这么大,则可以有和数 据块一样多的文件存在;不过本系统的inode和Linux的有点不同,就是记录地 址的是文件的首地址,因为本系统的文件在数据区是连续存放的。struct inodeunsignedshort i_mode;unsignedint i_uid;unsignedint i_size;unsignedint i_blocks;longi_block;booli_change;模式文件的用户ID文件的大小分配给该文件的磁盘块的数目指向磁盘块的起始地址/表示该文件是否修改过,true表示修改过,false表示没有;数据块组:由超级块和组描述符组成stru

12、ct block_groupstruct super_block super_block;/超级块struct group_desc group_desc;/组描述符;文件:包括文件名(普通文件或者目录)和inode号struct file_entrychar nameNAME_LEN;/文件名int inode;/inode 号,即在 inode_table 中的数组下标 ;目录:用于存储指定具体目录所包含文件(包括目录)的数目和具体的文件内容(即 dir_entry)struct dirchar dir_nameNAME_LEN;/ 目录名int inode;/inode号int size

13、;/记录该目录下包含多少个文件(包括目录)struct file_entry file_entryFILE_NUM;具体的文件内容;用户:包括用户权限、ID、密码,系统默认最大用户数目为8个struct userunsigned int mode;用户的模式(权限)int uid;/用户的 IDchar password20;密码;命令:用于存储系统命令,共13个命令struct commandchar com10;一些重要的函数说明:(具体的参见源程序)void format();/用于格式化文件系统void display_sys_info();/ / 显示系统信息bool get_dir

14、name(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);/释放数据块int i_alloc();/分配 inodevoid i_free(int inode);/释放 inodebool change_dir(char *path_and_dirname,int len); /根据路径 path 改变到指定 目录void di

15、splay(char*path,int len);/ /显示 path 指定的目录内容void make_dir(char*path_and_dir_name,int path_len);/根据指定路径创建目录void remove_dir(char*path_and_dir_name,int path_len); /根据指定路径删除目录void delete_file(char*path_and_file_name,int path_len); /根据指定路径删除文件 void create_file(char *path_and_file_name,int path_len); /根据指定路径创建文件 void open_file(char*path_and_file_name,i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号