当前位置:首页 > 演讲稿 > 一种模拟文件系统的设计与分析_模拟文件系统的设计与实现
 

一种模拟文件系统的设计与分析_模拟文件系统的设计与实现

发布时间:2019-07-06 03:53:39 影响了:

  摘要:在深入研究了多个实用文件系统的功能和实现原理的基础上,用一个文件模拟硬盘,采用多级目录结构,对文件实行按名存取,利用超级块对系统资源进行管理,利用对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;//取文件属主

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3