操作系统课程设计

发布 2022-10-05 11:03:28 阅读 9458

一个多用户多级目录结构文件系统设计与实现。

课程设计的环境是linux 操作系统。 设计时可利用linux 提供的文件管理的功能调用,建立一个模拟的文件系统。基本思想是,在linux 系统中创建一个较大容量的文件,作为所设计的文件系统的“文件卷”,并利用linux 系统的功能调用,编写各程序模块。

以 1m 的存储器空间作为文件空间,空间“分块”,编号为 0#~(blkmax-1)# 。“分块”就是规定对文件卷的读/写以块为单位,每次读/写的起点为块大小的整倍数。分块主要体现在文件卷的读/写模块上。

# define bsize 512 /*512bytes/块 */

# define blkmax 2048 /*共2048 块 */

#块的作用: 0# 块是专用块(超级块)。前半部用于存放文件卷空间的位示图(bitmap),位状态='0'表示对应块空闲,状态='1'表示已分配。

后半部的最后32 个字节用于存放根目录的目录结构。0#块不参与文件空间的动态分配。1#~(blkmax-1)#块用于存放文件(普通文件和子目录文件)的信息。

本文件管理系统分为五层,上层调用下层,下层为上层服务。以下为各层(由低到高)的简要说明:

1、块管理层,通过tblock类实现。

设下列主要函数:

balloc()-块分配函数。

brelse()-块释放函数。

bread()—读一块函数。

bwrite()—写一块函数。

2、fcb管理层,通过tfcb类实现。

功能涉及到fcb结构的操作,定义了一些与fcb操作相关的函数。

3、打开文件管理层,通过tofile类实现。

功能为涉及ofile结构的操作。

4、命令解释层,通过tenter类和torder类实现。

功能为接受来自用户的命令,并解释、执行用户提出的文件访问操作。按系统的的功能要求,可以open(),close(),read(),write();等函数。

用户信息的存储结构:

struct usernode//注册用户信息。

char d_flag; /标识该用户信息是否有效,超级用户为用户数目,-1表示无效。

char d_uid; /用户标识,为0时表示是超级*/

char d_gid; /同组用户标识*/

char d_name[8];/用户名,但不超过八个字节,超过八位自动截取*/

char password[8];/用户密码但不超过八位,超过八位自动截取*/

目录文件结点信息存储结构:

struct dir

unsigned short d_mode; /文件属性及访问权限,<=0时为空结构。

char d_uid文件主标识。

char d_gid文件主同组用户标识。

int d_fsize文件大小(字节),作为目录结构时为该目录下文件个数。

char d_name[8文件名。

int d_add[10存放文件信息的空间地址(块号)

fcb在内存中的结构:

struct sfcb

char f_count; /文件访问计数*/

char f_flag; /标志字*/

int f_blkno; /存放本文件目录结构的块号*/

int f_number; /文件目录结构所在块内偏移序号*/

unsigned short f_mode; /文件属性*/

*以下各项信息在文件打开时从struct dir获取*/

char f_uid;

char f_gid;

int f_fsize;

char f_name[8];

int f_add[10];

文件目录存储位置存储结构:

struct hfcb//用于namei函数,返回文件目录结构存储位置。

int blkno存放本文件目录结构的块号。

int offset文件目录结构所在块内偏移序号。

打开文件结构:

struct hofile

char o_flag标志字。

int o_count访问计数。

struct sfcb* o_fcbp对就打开文件fcb结构指针。

int o_offset文件当前读/写指针。

内存中的用户结点结构:

struct tuser

char u_name[8]; 用户名,登录时使用。

char u_uid用户标识,文件创建时的文件主。

char u_gid同组用户标识。

struct sfcb *u_cdir; /现行工作目录标识。

int u_error执行文件管理函数时返回的错误**,创建文件时被用来存储文件设置。

char*u_base读/写文件时信息存储区始址。

int u_count读/写文件时信息字节数。

int u_offset读/写文件的相对位移量。

char u_obuf[8文件路径名分量暂存区(查找文件时用)

struct sfcb* u_pdir; /新文件父目录fcb指针(文件创建时用)

struct hofile *u_ofile[5];/本用户打开文件表。

1、 以下为的内容:

#include

#include<>

#include

#include<>

#include

#include

using namespace std;

#define block 512

#define blocknum 2048

#define dn 8

#define usernum 10 //最大用户数。

#define filenum 9每个块能存储的文件目录结构数量。

*fcb标志字(f_flag)的各种标志定义为:*/

#define flock 01 /*fcb访问互斥标志*/

#define fupd 02 /*本fcb代表的文件已修改*/

#define fchg 04 /*本fcb结构中某些信息已被修改*/

#define fcbflag 05 //本fcb结构未被使用。

#define fcbuse 07 //本fcb结构已被使用。

#define offlag 06 //本hofile结构未被使用。

#define ofuse 03 //本hofile结构已被使用。

/文件属性及文件访问权限(即d_mode和f_mode)定义:

#define root 111

#define ifroot 011子目录中存储父目录的结构。

#define ifmt 0070000 //文件类型屏蔽字。

#define ifdir 0010000 //子目录文件。

#define ifreg 0020000 //普通文件。

#define iread 0400文件主”读"权限。

#define iwrite 0200文件主“写”权限。

#define iexec 0100文件主“执行”权限。

#define gread 040同组用户“读”权限。

#define gwrite 020同组用户“写”权限。

操作系统课程设计

课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...

操作系统课程设计

银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...

操作系统课程设计

学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....