函授本科班《操作系统》实验报告表

上传人:飞*** 文档编号:3554087 上传时间:2017-08-07 格式:DOC 页数:14 大小:226.50KB
返回 下载 相关 举报
函授本科班《操作系统》实验报告表_第1页
第1页 / 共14页
函授本科班《操作系统》实验报告表_第2页
第2页 / 共14页
函授本科班《操作系统》实验报告表_第3页
第3页 / 共14页
函授本科班《操作系统》实验报告表_第4页
第4页 / 共14页
函授本科班《操作系统》实验报告表_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《函授本科班《操作系统》实验报告表》由会员分享,可在线阅读,更多相关《函授本科班《操作系统》实验报告表(14页珍藏版)》请在金锄头文库上搜索。

1、1操作系统实验报告上机实验室:IT 网络实验室 2012 年 5 月 3 日班级: 09 级函授本科 学号: 姓名: 周静 课程名称 操作系统 实验名称 Linux 二级文件系统设计指导教师 实验成绩一、实验目的(1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。(2)结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。(3)通过分对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力二实验要求:理解 Linux 的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对应于用户账号,第二级对应于用

2、户帐号下的文件;使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容) 。要求:1、对程序的每一部分要有详细的设计分析说明2、程序执行的每个步骤要有具体的提示内容或输出3、源代码格式规范,注释不少于三分之一4、设计合适的测试用例,对得到的运行结果要有分析5、提交完整程序代码、课程设计报告及相关文档6、三相关基础知识; Linux 是一个性能稳定、功能强大、效率高的操作系统。它在功能特性方面与 Unix 系统相似,同时又具有多任务、多用户、多平台等若干特性。Linux 的源代码是

3、开放的,阅读 Linux 源代码,无疑是深入学习 Linux 的最好方法。 文件系统是 Linux 操作系统的重要组成部分,Linux 文件具有强大的功能。文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有 Linux 用户和程序15看到的文件、目录、软连接及文件保护信息等都存储在 其 中四试验环境:实现平台(环境):visual C+、window xp、VMware Workstation(虚拟机) V6.0.2、Red Hat Enterprise Linux os、office 2003五实验程序结构:初始化文件目录表初始化已打开文件表输入用户名主

4、文件目录中又该用户?输入文件操作命令分析命令建立子程序打开子程序关闭子程序读子程序写子程序删除子程序开始无此用户名否是createopenclosereadwritedelete六实验步骤:为 Linux 系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录142列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护七实验分析本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户

5、帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。外存管理文件系统是一个含有大量的文件及其属性,对文件进行操作、管理的软件,以及向用户提供使用文件的接口的一个集合。在逻辑上它的层次结构是这样的:文件系统接口逻辑文件系统基本 I/O 管理程序(文件组织模块)基本文件系统(物理 I/O 层)对对象的操作和管理的软件集合I

6、/O 控制层(设备驱动程序)对象及其属性说明作为产品的操作系统有各自的文件系统。比如 MS 的 WINDOWS 系列使用的是 FAT16、FAT32 或NTFS 的文件系统、LINUX 使用的是 EXT2、EXT3 文件系统等等。linux 的 EXT2 文件系统linux 使用一个叫虚拟文件系统的技术从而可以支持多达几十种的不同文件系统,而EXT2 是 linux 自己的文件系统。它有几个重要的数据结构,一个是超级块,用来描述目录和文件在磁盘上的物理位置、文件大小和结构等信息。inode 也是一个重要的数据结构。文件系统中的每个目录和文件均由一个 inode 描述。它包含:文件模式(类型和存

7、取权限) 、数据块位置等信息。如果希望详细学习 EXT2 文件系统可以参看 linux 内核代码 include/linux/ext2_fs.h、include/linux/ext2_fs_sb.h 等文件 。一个文件系统除了重要的数据结构之外,还必须为用户提供有效的接口操作。比如 EXT2 提供的OPEN/CLOSE 接口操作。用内存来模拟外存真正的文件系统对外存进行管理,涉及到许多硬件、设备管理方面的底层技术,一方面这些技术不属于操作系统核心内容,一方面过多的内容不免造成实验者顾此失彼,所以这里推荐一种使用内存14来模拟外存的方式,可以跳过这些硬件技术而直接把精力放在数据结构设计和操作算法

8、设计上面。假定 pInode 是一个指向 inode 结构的指针,而且它已经放入的需要放入的数值了,现在需要将其写入到特定位置。可用如下代码:fd=fopen(“filesystem”,”w+b”); /fd 是 FILE 指针类型,w 便是写方式,b 表示二进制fseek(fd, specific_area,SEEK_SET);/ fd 是文件指针;specific_area 为整形,/ 为需要入 pInode 的位置fwrite(pInode,1,sizeof(inode),fd); / 写入 pInode 信息编码#include #include #include #define DI

9、R_LENGTH 1024 /*路径最长可达 100字节*/ #define MAX_WRITE 1024*128 /*写入文字可达 128k字节*/ #define MEM_D_SIZE 1024*1024 /*1M磁盘空间*/ #define DISKSIZE 1024 /*磁盘块的大小 1K*/ #define MSD 5 /*最大子目录数 5 */ #define DISK_NUM MEM_D_SIZE/DISKSIZE /*磁盘块数目 1024=1M/1K*/ #define FATSIZE DISK_NUM*sizeof(struct fatitem) /*FAT表大小 */ #d

10、efine MOFN 5 /*最大文件打开数 5 (即除根以外最大深度为 5)*/ #define ROOT_DISK_NO FATSIZE/DISKSIZE+1 /*根目录起始盘快号 9*/ #define ROOT_DISK_SIZE sizeof(struct direct)/*根目录大小 196*/ /*-FAT表项结构-*/ struct fatitem /* size 8*/ int item; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位 0 空闲*/ ; /*-目录项结构-*/ struct direct /*-文件控制快信息-*/ s

11、truct FCB char name9; /*文件/目录名 8 位*/ char property; /*属性 1 位目录 0 位普通文件*/ int size; /*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录 起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录 0 不是根目录*/ directitemMSD+2; ; 14/*-文件打开表项结构-*/ struct opentable struct openttableitem char name9; /*文件名*/ int firstdisk; /*起始盘块号

12、*/ int size; /*文件的大小*/ openitemMOFN; int cur_size; /*当前打文件的数目*/ ; /*-*/ struct fatitem *fat; /*FAT表*/ struct direct *root; /*根目录*/ struct direct *cur_dir; /*当前目录*/ struct opentable u_opentable; /*文件打开表*/ int fd=-1; /*文件打开表的序号*/ char *bufferdir; /*记录当前路径的名称*/ char *fdisk; /*虚拟磁盘起始地址*/ int create(char

13、 *name); int open(char *name); int close(char *name); int write(int fd,char *buf,int len); int read(int fd,char *buf); int del(char *name); int mkdir(char *name); int rmdir(char *name); void dir(); int cd(char *name); /*-创建文件-*/ int create(char *name) int i,j; if(strlen(name)8) /*文件名大于 8 位*/ return(

14、-1); for(j=2;jdirectitemj.name,name) break; if(jdirectitemi.firstdisk=-1) break; if(i=MSD+2) /*无空目录项*/ return(-2); if(u_opentable.cur_size=MOFN) /*打开文件太多*/ return(-3); for(j=ROOT_DISK_NO+1;j=DISK_NUM) return(-5); fatj.em_disk = 1; /*将空闲块置为已经分配*/ /*-填写目录项-*/ strcpy(cur_dir-directitemi.name,name); cur_dir-directitemi.firstdisk = j; cur_dir-directitemi.size = 0; cur_dir-directitemi.next = j; cur_dir-directitemi.property = 0; /*-*/ fd = open(name); return 0; /*-打开文件-

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 总结/报告

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