OS软件项目课程设计说明书

上传人:无*** 文档编号:108767535 上传时间:2022-06-16 格式:DOC 页数:32 大小:531KB
收藏 版权申诉 举报 下载
OS软件项目课程设计说明书_第1页
第1页 / 共32页
OS软件项目课程设计说明书_第2页
第2页 / 共32页
OS软件项目课程设计说明书_第3页
第3页 / 共32页
资源描述:

《OS软件项目课程设计说明书》由会员分享,可在线阅读,更多相关《OS软件项目课程设计说明书(32页珍藏版)》请在装配图网上搜索。

1、. . . . 摘要计算机发展到今天,从个人计算机到巨型计算机系统,毫无例外都配置一种或是多种操作系统。操作系统管理和控制计算机系统中的所有硬、软件资源,合理地组织计算机工作流程,并且为用户提供一个良好的工作环境和友好的接口。在计算机操作系统的功能中,对文件存储设备的管理是一项非常重要的任务,文件在存储器上按一定的顺序有组织地存放,使得用户访问高效,操作方便。UNIX文件系统采用SFD和BFD方式管理文件:SFD称为符号文文件目录,存放文件名以与致使该文件说明信息表标识符ID;把存放文件说明信息和相应标识符的BFD称为i节点。UNIX文件系统将存储设备分为引导块、超级快、i节点区、目录和数据区

2、四个存储区。引导块主要是为了存储引导系统启动的数据;超级块描述文件系统的状态,包括磁盘空闲块栈,空闲i结点栈;i节点区存放文件说明信息,每项32字节;目录和数据每个目录项16字节,文件名区分大小写。在界面上我们使用MFC可视化设计,将实现的代码加载到MFC界面中,在响应鼠标消息的函数中调用实现模拟系统设计的代码,这样最后的操作是在Windows界面的操作,响应鼠标的命令。界面美好,操作方便。关键词:操作系统,文件系统,UNIX文件系统模拟摘要目录1.概述.32.课程设计任务与要求.4 2.1 设计任务.4 2.2 设计要求.43. 算法与数据结构.5 3.1算法的总体思想(流程).53.2i节

3、点模块.6 3.2.1功能3.2.2 数据结构 3.2.3算法3.3磁盘块管理模块.7 3.3.1功能 3.3.2算法3.4格式化模块.8 3.4.1 功能3.4.2 数据结构与流程图 3.4.3算法3.5装入和退出系统模块.10 3.5.1功能3.5.2 数据结构与流程图 3.3.3算法3.6用户登录注销模块.12 3.6.1功能3.6.2 数据结构与流程图 3.6.3算法3.7用户管理模块.15 3.7.1功能3.7.2 数据结构与流程图 3.7.3算法 3.8目录管理模块.16 3.8.1功能3.8.2 数据结构与流程图 3.8.3算法3.9创建删除文件模块.18 3.9.1功能3.9.

4、2 数据结构与流程图 3.9.3算法3.10打开关闭文件模块.21 3.10.1功能3.10.2 设计思想与流程图 3.10.3算法3.11读写文件模块.22 3.11.1功能3.11.2 设计思想与流程图 3.11.3算法 3.12 界面设计模块.253.12.1 设计思路和方法4. 程序设计与实现.25 4.1 程序流程图 4.2 程序说明 4.3实验结果5.结论.326.参考文献.327.收获、体会和建议.321. 概述UNIX文件系统采用SFD和BFD方式管理文件。SFD称为符号文件目录,存放文件名以与致使该文件说明信息表标识符ID。把存放文件说明信息和相应标识符的BFD称为i节点。i

5、节点又分为磁盘i节点和存i节点。目录表目中仅包含文件名和指向另一个数据块的指针i节点号。就可以通过这些i节点访问文件或是到另一个目录。文件采用二级指针模块,可以存储大文件。超级块结构采用成组块法,管理着磁盘的空闲块。系统启动时的初始化是读磁盘的超级块到存,可以操作和管理目录和文件数据,既是管理了磁盘块,同时读入根目录到存作为当前操作目录,之后就可以访问到其他任意目录树的地方。模拟UNIX文件系统程序设计。首先要了解UNIX文件系统的结构和管理方法,建立数据结构,组织数据,通过概要设计出大体流程,然后细化完善每一个功能模块,先底层后表层,边写代码边测试,保证完成的每一个模块代码的无错性。最后将完

6、成的代码加到界面中。2.课程设计任务与要求2.1 设计任务模拟实现UNIX的文件系统,多用户、多级目录结构文件系统的设计与实现模拟实现UNIX的文件系统2.2 设计要求1、在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理;3、编程序实现系统,要现可视化的运行界面,界面应清楚地反映出系统的运行结果;4、确定测试方案,选择测试用例,对系统进行测试;5、运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并回答指导教师的提问;6、提交课程设计报告。3. 算法与数据结构3.1算法的总体思想

7、(流程)利用存的一段空间模拟unix的文件系统的实现。设计结构体数组存放用户信息。设计文件和目录通用的结构体,用一个字段标识是文件或目录,每个文件均有一个字段对应其所占用的数据块。创建文件时通过搜索数据块位示图查找第一个空闲的数据块供文件使用。建立文件后对占用的数据块对应的位示图的位进行置位操作。删除文件时要释放对应的数据块,对数据块相应的位示图进行清零操作。对文件的容的读写都是对该文件数据块对应的一段存空间容的读写。文件卷的组织:将文件卷分块、用位示图来管理或成组块链;块的大小可设成512字节,i节点区块数为32块;数据区块数为512块。(如下图结构)。引导区:系统的引导位置,在此设计中没有

8、设计对引导区的操作。超级块:描述文件系统的状态,包括磁盘空闲块栈,空闲i结点栈。在程序设计中实质是存储一个数据结构的数据。i节点:存放文件说明信息,每项32字节,这个区域有32块,每块512字节,也就是可以存储512个i节点。在UNIX系统中,索引文件或是目录都是通过先索引i节点,通过i节点找到对应的目录或是文件数据块。目录和文件:每个目录项16字节,文件名区分大小写。3.2i节点模块3.2.1功能i节点模块是是i节点的请求和释放操作。主要的函数有:struct inode * ialloc()从磁盘上申请一个i节点:当需要建立一个目录或是建立一个文件的时候需要新的i节点。一般会在这个时候调用

9、。Void ifree(struct inode* pinode)从磁盘上释放一个i节点:当从文件系统中删除某个文件或是目录的时候,应首先删除它的磁盘i节点项。struct inode * iget (unsigned _int16 dinodeid)从磁盘上读i节点到存。void iput(struct inode * pinode)从存中释放掉i节点,不影响磁盘的i节点。3.2.2 数据结构存i结点结构struct inode struct inode *i_forw; struct inode *i_back; _int16 uf_id; _int8i_flag; unsigned _i

10、nt16 i_ino; unsigned _int16 i_count; unsigned _int16 di_number; unsigned _int16 di_mode;/*存取权限*/ unsigned _int16 di_uid;/*磁盘i节点用户id*/ unsigned _int16 di_gid;/*磁盘i节点组id*/ unsigned _int32 di_size;/*文件大小*/ unsigned _int16 di_addrNADDR;/*物理块号*/ ;磁盘i结点结构(与存i结构的后面部分是完全重合的)struct dinode unsigned _int16 di_

11、number; unsigned _int16 di_mode; unsigned _int16 di_uid; unsigned _int16 di_gid; unsigned _int32 di_size;/*文件大小*/ unsigned _int16 di_addrNADDR;/*物理块号*/;3.2.3算法 函数名:ialloc 功能:申请磁盘i节点 算法:通过超级块的i节点管理数组,查找一个没有被占用的i节点,放回i节点id。 函数名:ifree 功能:释放磁盘i节点 算法:修改超级块的i节点记录数据,释放相应的存i节点。 函数名:iget 功能: 获得磁盘i节点到存 算法:通过i

12、节点的id从磁盘上读i节点数据到存。通过id号找到这个i节点的磁盘地址,之后读出i节点大小的数据到存。 函数名:iput 功能:释放存i节点 算法:根据存中这个i节点的信息做处理,若i节点只被引用一次,没有被修改过则从存中释放,否则存储到磁盘覆盖原来的磁盘i节点,若引用次数大于1则引用次数自减一。3.3数据块管理模块 3.3.1功能数据块管理模块是对数据区的操作,如新建文件新建目录时,这些数据就存放到数据区。此模块的操作函数有:_int16 balloc()请求磁盘块, Void bfree(unsigned _int16)释放磁盘块 3.3.2算法函数名:balloc功能:申请磁盘块,返回可

13、用磁盘块块号算法:通过超级块的磁盘块管理数组来查找一个空的磁盘块。修改超级块的磁盘块管理数组,这个磁盘块被使用。返回磁盘块id。函数名:bfree功能:释放磁盘块算法:修改超级块的磁盘块管理数组表示此磁盘块没有使用过。3.4格式化模块3.4.1 功能格式化是对整个磁盘(除了引导区)分区,并没有擦除原来磁盘上的位置,但是由于重新分区,生成新的超级块,新的i节点,从而并不能访问原来存储于磁盘上的数据,也就导致原磁盘上的数据丢失。在分好区之后先建立一个i节点对应根目录“/”,之后分配了2个i节点,分别指向etc目录,和etc目录下的passwd文件(存储用户id与密码等数据)。当格式完之后,用户就可

14、以启动系统使用一个全新的系统。3.4.2 数据结构与流程图超级快结构struct super_blockunsigned _int8 s_isize;/*i节点块数*/unsigned _int16 s_fsize;unsigned _int16 s_nfree;unsigned _int8 s_pfree;unsigned _int16 s_freeNICFREE+1;unsigned _int16 s_ninode;unsigned _int8 s_pinode;unsigned _int16 s_inodeNICINOD;unsigned _int16 s_rinode;_int8 s_

15、fmod;3.4.3算法格式化算法:在磁盘上建力一个文件,模拟成磁盘来处理。初始化一个根目录与其i节点,还有一个/etc目录和password文件用来存储用户密码等信息的文件。之后初时化超级块。写入到模拟磁盘的文件。完成。3.3 装入和退出系统模块3.3.1功能是读磁盘的相关数据到存,为了用户可以对文件系统的操作。实现函数:void install()启动,安装文件系统 void halt()关闭系统。3.3.2 数据结构与流程图系统装载关闭系统 3.3.3算法函数名:install功能:装载系统数据算法:先将超级块数据读到存,然后初始化系统打开文本表(SOF),读根目录的i节点到存,读根目录

16、到存,设置为当前目录。函数名:halt功能:关闭系统算法:将当前目录写入覆盖到磁盘目录的数据,关闭所有系统打开文件表中的文件。退出文件系统。3.6用户登录注销模块 3.6.1功能此模块处理用户登陆系统和推出系统的管理,涉与到的操作函数主要有login()和logout().3.6.2 数据结构与流程图 数据结构:用户表struct userunsigned _int8 u_uid;/用户idunsigned _int8 u_gid;/用户组id_int8 u_ofileNOFILE;/用户打开文件表;用户登录用户退出3.6.3算法函数名:login功能:用户登录文件系统算法:根据用的输入用户名

17、和密码,从passsword文件中判断是否正确,假如正确则将该用户加入到登录的用户表中,初始化此用户的打开文件表。返回用户的id。函数原型:_int8 logout(_int8 uid)功能:用户退出系统算法 :关闭该用户打开的所有文件,从登录系统的用户表中删除用户id。3.7用户管理模块 3.7.1功能此模块有创建用户和删除用户功能,还有查看用户信息功能。创建和删除用户只有管理员有此功能。此功能的实现在Vc的对话框上实现。主要有创建用户,删除用户,显示用户信息。3.7.2 数据结构与流程图用户密码结构:struct pwdunsigned _int8 p_uid;unsigned _int8

18、 p_gid;char usernameUNAMSIZ;/*用户名 用于登录用*/ char passwordUPWDSIZ; 3.7.3算法函数名:OnNewUser功能:创建新用户算法:查找password文件,读出用户的密码表,查看用户表是否满,没有的话就可以增加新的用户,将新用户信息保持到password文件。函数名:OnDeleteUser功能:删除用户算法:从password 文件中删除该用户的信息。 函数名:listUsers功能:显示所有用户信息算法:将password 文件中所有用户的信息读出显示出来。3.8目录管理模块 3.8.1功能在系统过目录树来管理和操作文件,在目录管

19、理模块中主要是创建目录、删除目录、改变当前目录、为目录重命名:3.8.2 数据结构与流程图目录项结构struct directchard_nameDIRSIZ;/*目录名(14字节)*/_int16 d_ino;/*目录号*/;目录结构struct dirstruct direct directDIRNUM;/*目录项数组*/_int16 size;3.8.3算法函数名:namei功能:查找是否有与name同名的目录或是文件,算法:从当前目录表中查找是否有目录入口参数的目录名,查找成功返回其下标,否则返回1。函数名:iname功能:返回新目录的下标算法:查找当前目录表中一个空的目录位置,返回其

20、下标。函数名:mkdir()功能:创建目录,目录名:dirname算法:申请一个i节点,为新建目录的i节点,新建一个目录,存储初始目录到一个新的磁盘块。函数名:_rmdir功能:删除目录算法:目录下面有子目录则递归调用本身删除子目录,有文件则删除文件。最后删除这个目录的i节点和磁盘块。函数名:chdir功能:改变当前目录,目录名:Dirname算法:将原当前目录写入到磁盘,读出新的当前目录数据到磁盘。函数名:_rename功能:改变当前目录,目录名:dirname算法:当前用户有对该目录的操作权限,之后修改其目录名为新的目录名。函数名:_dir功能:显示当前目录信息算法:或许当前目录下的所有子

21、目录和文件的i节点,显示他们的具体信息。3.9创建删除文件模块 3.9.1功能创建文件:在当前目录下创建文件,为其申请i节点。删除文件:根据文件名删除文件,释放其i节点和文件数据的磁盘块。3.9.2 数据结构与流程图系统打开文件表struct filechar f_mode;_int16 f_count; /计数器struct inode *f_inode;_int32 f_off; 3.9.3算法函数名:create功能:创建文件算法:先判断当前操作用户是否有权限创建文件,有权限之后申请一个i节点,之后在系统打开文件表(SOF)和用户打开文件表(UOF)中查找空区域,将新文件的信息写入SOF

22、和UOF,返回在UOF中的地址。函数名:adelete功能:删除文件算法:先判断当前用户是否有权限删除文件,当有权限之后,释放该文件的磁盘空间,之后删除它的i节点,在其父目录中删除删除该目录名。3.10打开关闭文件模块3.10.1功能打开文件,打开为了读、写、还是追加到最后,在dos状态下这几个功能可以看出是不一样的效果,但是在可视化界面上,看见的效果只有两个,一是只能读,一个修改,修改包括了重写和追加。关闭文件是从用户打开的文件表中删除索引,3.10.2 设计思想与流程图打开文件:通过文件名,找到其i节点,判断用户有权限操作之后在系统打开文件表中存放其存i节点,然后在用户打开文件表(UOF)

23、中添加系统打开文件表(SYSF)中的索引,返回在用户打开文件表中的id.关闭文件:根据文件在用户打开文件表中的id,找到其在系统打开文件表中的id,索引到i节点,从存中删除,在sys_file和user_ofile中删除其索引,关闭文件完成。3.10.3算法函数名:_fopen功能:打开文件算法:根据文件名从当前目录中查找该文件的i节点id,之后读取i节点,打开文件,在SOF和UOF中注册该文件的信息,返回在UOF中的地址。函数名:_fclose功能:关闭系统打开文件表中的文件算法:根据文件在UOF中的地址,删除在SOF和UOF中注册该文件的信息。3.11读写文件模块 3.11.1功能读文件:

24、显示文件容给用户查看,在我们设计中,文件容显示在文本编辑框中,当只是读时,显示的文本框不可编辑。写文件:写文件是将用户输入的数据写入到磁盘。用户在编辑框中编辑容,之后存储到磁盘。3.11.2 设计思想与流程图读文件:根据打开的文件在用户打开文件表中的id,索引到系统打开文件表,找到文件的i节点,之后读取磁盘,将数据读到存,显示到界面上。写文件:根据打开的文件在用户打开文件表中的id,索引到系统打开文件表,找到文件的i节点,之后将用户编辑的数据写到磁盘。写文件完成。3.11.3算法函数名:_fread功能:读文件算法:根据该文件的i节点,从磁盘上读出数据到存。返回读出文件的大小。函数名: wri

25、te功能:写文件算法:将用户输入的数据写到磁盘上去。3.12 界面设计模块3.12.1 设计思路和方法利用VC的MFC,直接建立对话框工程,再假如其他功能的对话框,利用ClassWizard来为对话框建立类,之后直接在对话框上操作进行操作。然而有一个主要的对话框窗口,在资源文件中加入一个菜单,然后添加到主要的那个对话框窗口上,在菜单上添加菜单的响应消息,同时可以操控其他的对话框。4. 程序设计与实现 4.1 程序流程图4.2 程序说明C代码部分先在Win32 console application工程中编写与调试通过,之后将其加入到MFC Appwizard(exe)工程中。经过编译、调试运行

26、通过。不过MFC中使用动态库,从而导致执行文件在没有安装VC的机器上无法执行。只要安装VC就可以为该程序提供动态的库。 软件环境:Windows98/Me/2000/XP操作系统,用Visual C+ 6.0编辑器编程、运行。4.3实验结果程序为用Visual C+ 6.0 编写,在Windows XP2上测试通过。运行结果如下截图:图1 启动程序图2 用户登录图3 系统主操作界面图4 管理菜单功能图5 用户管理图6 目录操作菜单图7 文件操作菜单图8 团队介绍图9 创建目录图10 创建文件图11 创建文件成功和删除目录5. 结论刚得到这个课程设计要求,觉得脑海里一片空白,因为根本就不知道UN

27、IX文件系统的组织结构,经过几天努力,了解了UNIX文件系统的组织形式和管理方式,于是心中就有思路,不过心中还是有些顾虑,觉得有的理论上很合理,但在实践中就不知道了,经过两个星期我们小组5个人的奋战,终于理论联系实践,完成了课程实践,同时也证明了UNIX文件系统的牢固性。在课程设计完成之后参加了Linux基础学习,之后才了解到此文件系统的强大和实用性,一切管理都是交给管理员。6、参考文献1. 徐虹等编著.操作系统实验指导基于Linux核.: 清华大学.2004.2. 向群等编著.Windows核实验教程. : 机械工业.2002.3. 周等编著.操作系统原理实验.: 科学.2003.4. 尧学

28、编著.计算机操作系统教程习题解答与实验指导.: 清华大学.2000.7.收获、体会和建议操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。 在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样

29、去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?老师的那句话,她说:人力有所不能与,然而,人的精神是不会败倒的。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不过设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,再次我表示感!同时,对给过我们帮助的所有同学和各位指导老师再次表示忠心的感!- 31 - / 32

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!