操作系统课程设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统

课程设计报告

学院:

班级:

学生姓名:

学号:

指导老师:

提交日期:

一、实验目的

本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储管理、文件系统等操作系统概念。

二、实验要求

在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux 文件系统。具体见附表

三、实验环境

Windows 、VC

三、实验思想

1、整体思路

实验可分为三个大模块:文件组织结构、目录结构、磁盘空间管理。编写时,先定义重要的数据结构,整理好各个模块的思路,列出程序清单。接着编写一些对系统进行基本操作的函数,然后利用这些函数实现各种功能。

2、盘块大概分布(分了128块,每块64字节)

盘块0 1 2 3 4 5 6 (127)

用途FAT表FAT表根目录目录数据数据数据...... 数据

盘块与盘块之间的链接,是利用FAT表项,(使用数组结构),并用它记录了所有盘块的使用信息。

优点:可以利用FAT信息,迅速查找、打开各个目录,进行创建、修改文件。

3、目录组成

为了简单,构思目录时,每个目录只有8字节,每盘存放最多8个目录。其中,目录名、文件名最多只能为3字节,如果是文件的话,类型名也最多为2字节。区分目录名和文件名的方法是:设计一个属性项(1个字节),为8时表示纯目录,为4时表示文件目录。具体分布如下图:

用途目录名或文件名文件类型属性文件起始盘

文件长度

大小3(字节) 2 1 1 1

优点:属性可以区分纯目录、文件目录;文件起始盘块可以记录文件的存放位置;文件长度,,在读文件时控制指针,是否到了文件末尾。

缺点:为了简单,对文件名、目录名、类型名都作了限制。最大分别为:3,3,2字节。

说明:调试时,目录名、文件名、类型名一定不能超过限制,否则出现非预期的结果

4、FAT 、磁盘管理

实验中,将磁盘分为128块,每块大小64字节。为了方便对空间管理,利用教材提到的方法,把每块的块号(指针)提取出来,形成FAT表:

若某文件的一个盘块号为i ,则这个文件的下一个盘块为表中的第i项,其中0表示此盘块空闲,-1表示结束。

另一个重要的表是已打开文件表,用来记录打开或建立的内容,表如下:

5、重要数据结构

用户结构:

typedef struct //用户定义

{

Int uid;

char name[20];

char password[20];

}user;

目录结构:

typedef struct //定义目录结构

{

char name[3];//文件或目录名为了简单只是取3字节

char type[2];//文件类型名

char attribute; //属性

char address; //文件或目录的起始盘块号

char length; //文件长度,为了简单实验是用盘块为单位

}content; //定义为目录结构

打开文件的数据结构:

typedef struct

{

int dnum;//磁盘块的块号

int bnum;//块内的第几个字节

}pointer;//读写指针结构

#define n 5 //定义打开文件的最大个数;

打开文件表项结构:

typedef struct

{

char name[20];//模拟绝对路径

char attribute;//文件属性1个字节

int number;//文件的起始盘的块号

int length ;//文件长度,字节为单位

int flag;//操作类型“0”以读方式打开“1”以写方式打开

pointer read,write;//读写指针

}OFILE;//已经打开文件表项的定义

struct

{

OFILE file[n];//已经打开文件表

int length;//表中文件的数量;

}openfile;//表的定义

这里定义了一个本次实验中最为重要的结构:打开文件项结构,它记录了所有打开文件的信息,各种操作,如newfile、read_file、wirte_file 等都是通过该文件项表来记录读写指针的,同时它还可以实现设计三中的对用户权限进行管理功能。

6、编写基本函数时按照上面的思想,会变得比较简单。

7、主要算法

为了简单,实验时主要的算法,都是建立在数组的基础上,所以比较简单。例如:search (),查找目录时,使用到了树的结构,利用递归,遍历目录树。其他基本是使用链表的方法。

8、由于初始设计时没有考虑到界面,有些功能参数,没有模仿LINUX:copy 、md、dir 说明如下:dir ,不带参数时表示显示当前目录,带时显示给出目录;copy,要按提示选择内部或外部复制;md,按提示选择时在当前目录创建或绝对路径创建,选择当前目录时,不能带‘/‘

四、重要函数流程图和思路(包括优缺点)

1、all ocate()

Newfile、md等需要空间,模拟系统就要调用allocate()按块来一块一块的分配,当一块写

2、search(char *name,int flag,int *dnum,int *bnum)

查找路径名为name的文件或目录,返回该目录的起始盘的块号,该函数是各种操作时用于检查路径是否存在,是否重复,还可以通过dnum,bnum返回查找路径的盘块和盘块内的地址,从而可以打开其所在的目录,进行读写操作。流程图如下:

相关文档
最新文档