一种模拟文件系统的设计与

摘 要 :在深入研究了多个实用文件系统的功能和实现原理的基础上,用一个文件模拟硬盘,采用多级目录结构,对文件实行按名存取,利用超级块对系统资源进行管理,利用对i节点的操作来实现对文件的各种操作,从而实现了一个小型文件系统.

关 键 词 :文件系统;索引节点;超级块

中图分类号:TP319文献标识码:A文章编号:16727800(2012)008008103


作者简介:何俊(1982-),男,硕士,中国船舶重工集团公司第七一二研究所助理工程师,研究方向为计算机控制和电力电子技术;李松谭(1985-),男,硕士,中国船舶重工集团公司第七一二研究所工程师,研究方向为计算机控制和单片机程序开发.

1系统设计的基本思想

如同一般的文件系统,这个模拟的文件系统也由一个超级块(super_block)来管理.超级块包含文件系统中的基本信息,如系统的容量,数据块的大小,文件名的最大长度,可用块表,可用i节点表,省去了一些不重要的数据成员,如超级块上锁标志等.超级块用来管理文件系统资源,而i节点则使用这些资源,每个文件或目录都对应一个i节点,但两者的i节点属性并不完全相同,鉴于此,系统并没有把文件和目录区别对待,在i节点的属性中有文件类型这一数据成员,对于类型为目录的文件,只需简单地将其数据块地址设为空.显然,这样简化了系统的设计.每个文件或目录都对应一个系统中独一无二的i节点编号.有了超级块和i节点,就可以在此基础上实现用户的操作命令,例如创建目录,只需超级块为之分配一个可用的i节点,并在当前工作目录的文件入口栏一项中添加这个i节点编号.文件系统的工作流程与流程描述如图1所示.

图1文件系统的工作流程

2文件系统的具体设计

2.1超级块的设计与实现

超级块的数据结构设计如下:

超级块(super_block)

class super_block{

public:

super_block(),

~super_block(),

const int get_fs_size() const,//返回文件系统大小,即“硬盘”大小

const int get_block_size() const,//返回块的大小

const int get_max_file_num() const,//返回最大文件数

const int get_max_fn_len() const,//返回文件名的最大长度

int get_free_block(),//取一个未用块

int get_free_inode() ,//分配一个i节点

const bool get_modified() const,//超级块是否被修改,本系统未用

void change_modified(),//设置修改标志

const bool get_lock() const,//超级块是否上锁,本系统未用

void change_lock(),//改变上锁标志

void add_free_inode(int inode_num),//回收i节点

void add_free_block(int block_num),//回收块

int get_bt_size(),//返回系统中可用块的数目

int get_it_size(),//返回系统中未用i节点的数目

void print(),//显示文件系统相关信息,供调试用

private:

const intFS_SIZE,//文件系统的容量,即“硬盘”大小

const intBLOCK_SIZE,//块(用于存放文件数据)大小

const intMAX_FILE_NUM,//最多可容纳的文件数

const intMAX_FN_LEN,//文件名的最大长度

vector<int>free_block_table,//存储可用的块编号

vector<int>free_inode_table,//存储可用的i节点号

boolis_modified,//文件系统修改标志

boolsuper_lock,//文件系统上锁标志}

超级块中包含了文件系统的基本信息,如文件系统的容量、块大小、最多可容纳的文件数等.磁盘空间的管理也是通过超级块来实现的,当新建一个文件或者目录时,超级块为新建的文件或目录分配一个新的i节点号,如果是正规文件,还要为其分配一定的数据块,而如果是目录则不用分配数据块.分配过后,从vector中删除已经分配的i节点号与数据块编号.删除文件或目录时则刚好与其相反,收回原有文件或目录的i节点号与数据块编号,这样就完成了简单的磁盘管理.

超级块作为系统资源的管理者,包含了文件系统的基本信息:如表1所示.

2.2i节点的设计与实现

本文件系统包含的文件分为两类,正规文件与目录文件.

表1超级块属性

为了对文件实现良好的操作,在设计时决定了为每个文件都分配一个独一无二的i节点项,这个i节点项中包含了两个大的方面即:i节点号与文件属性.

i节点项的数据结构设计如下:

i节点(inode)

class inode{

public:

inode(),

inode(const inode& in),

~inode(),

const int get_id() const,//获取i节点号

void set_id(int new_id),//设置i节点号

const string get_owner() const,//取文件属主

类似论文

一种高效文件传输系统的设计与实现

【摘 要 】本文就企业集约化管理的需求,信息化集成平台的应用推广,使用集成平台处理业务、数据、信息已经渗透到企业安全、生产各个环节。
更新日期:2024-2-9 浏览量:10697 点赞量:4169

一种仓库管理系统设计

[摘 要]本文以某企业的仓库管理系统的开发为背景,在分析了企业仓库管理现状的基础上,提出了该企业的仓库。
更新日期:2024-12-21 浏览量:154999 点赞量:32813

基于PLC的三人抢答器模拟控制系统程序设计

【摘 要】本文主要是采用S7-200系列PLC设计一梯形图程序,来实现对三人抢答器模拟控制系统的控制 【关 键 词】S7-200系列P。
更新日期:2024-10-16 浏览量:133186 点赞量:29389

一种工厂太阳光照明系统的设计

【摘 要】目前,为了达到节能减排、保护环境的目的,工厂照明系统已从白炽灯慢慢过渡到节能灯 但是现。
更新日期:2024-2-15 浏览量:32773 点赞量:8419

一种车辆自动监测与识别系统的设计方案

摘 要 :通过对所设计的车辆自动监测与识别系统的组成、作用、原理进行分析,详细介绍了系统的图象采集、车牌定位、车。
更新日期:2024-7-6 浏览量:17165 点赞量:5689

一种松耦合的资信评级信息系统的设计

摘 要 : 如何建设高效的资信评级信息系统是当今信用评级行业的研究热点 针对我国资产信用评级体系的建设现状,ಮ。
更新日期:2024-4-7 浏览量:13220 点赞量:4775