《操作系统课程设计计算机07级》由会员分享,可在线阅读,更多相关《操作系统课程设计计算机07级(26页珍藏版)》请在金锄头文库上搜索。
1、课 程 设 计 报 告课程名称课程名称 数据库原理课程设计数据库原理课程设计 课题名称课题名称 高校科研管理系统高校科研管理系统 专专 业业 计算机科学与技术计算机科学与技术 班班 级级 计算机计算机 0781 学学 号号 200713030129 姓姓 名名 熊材盛熊材盛 指导教师指导教师 陈华光陈华光 谭小兰谭小兰 2010 年年 3 月月 1-13 日日湖南工程学院课 程 设 计 任 务 书课程名称 数据库原理课程设计 课 题 高校科研管理系统 专业班级 计算机 0781 学生姓名 熊材盛 学 号 200713030129 指导老师 周铁山 审 批 任务书下达日期 2009 年 12 月
2、 20 日任务完成日期 2010 年 3 月 14 日一、课程设计的性质和目的操作系统课程设计是计算机专业的专业课程,通过课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握操作系统的基本设计方法和技巧,进一步提高分析问题、解决问题及上机操作能力,为将来从事计算机工作打下一定的专业基础。二、设计课题 模拟实现单级目录、单级索引的索引文件系统 基本思路: 使用链接域将同一文件的各索引块按顺序连接起来。 基本设计要求:1、实现如下文件系统功能(过程或函数): a、 打开文件系统 FILE *OPENSYS(char *filename); b、 关闭文件系统 int CLOSESYS(FILE *
3、stream); c、 显示目录 void LISTDIR(void); d、 建立文件 int FCREATE(char *filename); e、 删除文件 int FDELETE(char *filename); f、 打开文件 int FOPEN(char *filename); g、 关闭文件 int FCLOSE(int fileid); h、 文件块读 int FREAD(void *ptr, int n, int fileid); i、 文件块写 int FWRITE(void *ptr, int n, int fileid); j、 判断文件结束 int FEOF(int
4、fileid); k、 获取文件指针 long FGETPOS(int fileid); l、 设置文件指针 int FSETPOS(int fileid, long offset); m、 取得文件长度 long FGETLEN(char *filename); 2、提供文件系统创建程序 3、有功能检测模块 4、为简化程序设计,假定目录区域大小固定。 文件系统空间划分: 保留扇区FAT 表区 (或字节映像图区)根目录区 文件分区可以使用的 C 语言文件操纵函数: FILE *fopen(const char *filename, const char *mode); int fclose(F
5、ILE *stream); int fseek(FILE *stream, long offset, int whence); long ftell(FILE *stream); size_t fread(void *ptr, size_t size, size_t n, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);三、课程设计报告要求 1、 设计报告要求 A4 纸打印成册; 2、 使用学院统一的封面; 3、 课程设计报告每人一份,必须包含如下几个方面的内容: 1)基本设计
6、思想; 2)主要数据结构; 3)主要实施流程; 4)所有源代码; 5)课程设计总结与体会。四、分组及选题办法 1、 按学号顺序一人一组,学号为奇数者为课题一,偶数者为课题二。 2、 成绩考核按个人课题完成情况、设计报告质量及对课程设计的态度等综合评定。五、设计进度安排 1、 讲课及上机调试时间安排:上课时间: 未定上机时间: 2、 其余时间:查阅资料,确定方案,设计课题相关程序。 3、 个人答辩,交课程设计报告。附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4 大小的图纸及程序清单) 。 正文的格式:一级标题用 3 号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为
7、22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图) ;三、主要功能的实现(至少要有一个主要模块的流程图) ;四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释) 。正文总字数要求在 5000 字以上(不含程序原代码) 。目录一一 准备知识准备知识.11、目录管理.12、可能用到的编程技术.23、用内存模拟外存.3二二 文件系统的数据结构文件系统的数据结构.3三三 程序设计思想程序设计思想.41、程序流程.42、文件系统的设计思想.5四四 几个重要算法几个重要算法.5五五 程序说明程序说明.71、源文件的简要说明.72、程序操作界面.7六六
8、 参考文献参考文献.7评分评分.8附件附件.9一 准备知识1 1、目录管理、目录管理(1)管理结构在现代计算机系统中,一般需要存储大量的文件。为了能有效的管理这些文件,必须对它们加以妥善的组织,以便做到用户只需要向系统提供所要访问的文件的名字,就能够快速、准确地找到指定文件。目录管理涉及到文件控制块(File Control Block)和索引节点,目录管理可以分为单级目录结构、两级目录结构和树型目录结构。文件控制块通常包含:基本信息、存取控制信息和使用信息三部分。索引节:在文件目录中的每个目录项由文件名以及指向该文件所对应 inode 的指针所共同构成。单级目录结构是最简单的目录结果。整个系
9、统当中只建立一张目录表,为系统中每一个文件分配一个目录项。本课设使用的是单击目录结构。在单级目录结果的基础上,为每个用户建立一个单独的用户文件目录 UFD(User File Directory),此外在系统中再建立一个主文件目录 MFD(Master File Directory),里面放有每个用户的目录项;该目录项中包含也难用户名和指向该用户目录的指针。如下图用户名指向子目录的指针BillStephen(2)两级目录结构树型目录机构:在两级目录结果中,再进一步允许用户创建自己的子目录,组织自己的文件,形成三级或者三级以上的文件目录结构,这就被称作树型目录结构。(3)文件系统的接口文件系统作
10、为一个高效管理文件的程序,其运行更多的是在系统内部进行,而用户所Hello.c1.asma.oHappy.cWork.gz需要关心的只是它的接口。文件系统通常向用户提供两种接口;命令接口:这是用户与文件系统之间进行交互的接口。用户可以通过键盘终端键入命令来实现与文件系统的交互。程序接口:这是用户程序与文件系统之间的接口,用户程序可以通过系统调用取得系统文件的服务,完成自己需要的功能。(4)Fat 文件系统见任务书2 2、可能用到的编程技术、可能用到的编程技术(1)Fopen:打开文件格式:FILE *fopen(const char *filename,const char *mode)需要头
11、文件 stdio.hfilename:待打开的文件名,如果不存在就创建该文件。mode:打开方式,常用的有“w”写方式打开,文件不存在就被创建,否则清除原来的内容;“r”读写方式打开,文件必须存在;“a”添加方式打开;“w+”读写方式打开,有清除功能;“r+”读写方式打开,文件必须存在;“a+”“t”TEXT 方式打开;“b”二进制方式打开(2)fwhite 和 fread:读写文件size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream);size_t fread(void *buffer,size_t siz
12、e,size_t count,FILE *stream);buffer:待读写的内容;size:一次读写量;count:需读写 buffer 的次数;stream:打开文件的指针(3)fseek:定位文件int fseek(FILE *stream,long offset,int origin);stream:文件指针;offset:偏移量;origin:初始位置,有三个常量,SEEL_CUR 是当前位置,SEEK_SET 文件开头,SEEK_END 文件尾。3 3、用内存模拟外存、用内存模拟外存真正的文件系统在对外存进行管理时,会涉及到许多有关硬件、设备管理方面的底层技术。一方面这些技术不属
13、于操作系统核心内容,另一方面过的内容容易造成实验者顾此失彼。所以在这里我们推荐一种使用内存来模拟外存的方式,这样就可以跳过这些硬件技术而把精力直接放在数据结构设计和操作算法实现上面。假定 pInode 是一个指向 inode 结构指针,而且它已经放入了需要的数值,现在需要将其写入到特定位置。可用如下代码实现:fd=fopen(“filesystem”,”w+b”); /fd 是 FILE 指针类型,w 写方式,b 表二进制fseek(fd,specific_area,SEEK_SET); /fd 是文件指针;specific_area 为整形fwrite(pInode,1,sizeof(ino
14、de),fd); /写入 pInode 信息二 文件系统的数据结构1)常量 #define BlockSize 512 #define DirSize 32 2)保留扇区结构 struct ReserveBlockint sysblocknum; /*文件系统总扇区数*/ int resblocknum; /*保留扇区扇区数*/int mapblocknum; /*字节映像图扇区数*/int rootblocknum; /*根目录区扇区数*/char fillcharBlockSize-4*sizeof(int); /*填充字节*/ ; 3)目录结构struct DirBlockchar filenam