UNIX 类文件系统模拟实现

本文档详述了一个UNIX文件系统的模拟实现,包括文件卷结构、I节点、目录结构的设计,以及Ls、Chmod等命令的实现。开发环境为Windows 7上的Visual Studio 2010,文件系统采用位示图法和成组链接法管理盘块,通过超级块、inode和block数据结构存储文件信息。项目实现了文件权限、所有权和时间属性等功能。
摘要由CSDN通过智能技术生成


项目背景

完成一个 UNIX文件系统的子集的模拟实现。
1. 完成文件卷结构设计
2. I节点结构设计
3. 目录结构
4. 用户及组结构
5. 文件树结构
6. 实现功能如下命令:

Ls 显示文件目录
Chmod 改变文件权限
Chown 改变文件拥有者
Chgrp 改变文件所属组
Pwd 显示当前目录
Cd 改变当前目录
Mkdir 创建子目录
Rmdir 删除子目录
Umask 文件创建屏蔽码
Mv 改变文件名
Cp 文件拷贝
Rm 文件删除
Ln 建立文件联接
Cat 连接显示文件内容
Passwd 修改用户口令


开发环境

操作系统 :windows 7 64位
开发工具 :visual studio 2010
程序类型 :win32 控制台应用程序


分析

文件系统特特性

文件数据除了文件的实际内容外,通常还包含很多额外的属性,例如Linux操作系统的文件权限(RWX)与晚间属性(所有者、族群、时间参数等)。文件系统通常会将这两部分数据分别存放在不同的块,权限与属性放置到Inode中,至于时间数据则放置到Data Block中。另外,还有一个超级块 Superblock 会记录整个文件系统的整体信息,包括inode和block的总量、使用量、剩余量。

  • super block:记录此文件系统的整体信息,包括inode/block 的总量,使用情况、剩余量。以及文件系统的格式相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block的号码;
  • block:实际记录文件的内容,若文件太大的时候,会占用多个block

盘块的管理

位示图法

位示图是利用二级制的以为来表示磁盘的中有个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”的时,表示已经分配。

成组链接法

在UNIX系统中,将空闲块分成若干组,每100个空闲块为一组,每组的第一空闲块登记了下一组空闲块的物理盘块号和空闲块总数。如果一个组的第二个空闲块号等于0,则有特殊的含义,意味着该组是最后一组,即无下一个空闲块。

分配空闲块的时候,从前往后分配,先从第一组开始分配,第一组空闲的100块分完了,才进入第二组。

释放空闲块的时候正好相反,从后往前分配,先将释放的空闲块放到第一组,第一组满了,在第一组前再开辟一组,之前的第一组变成第二组。


设计

系统流程

系统流程图

程序开始执行后,程序会先将资源文件读取,并以一文件指针保存在全局变量virtualDisk中。
读取文件成功以后,通过文件指针访问超级块所在盘块,读取内容保存在全局变量super中。
加载超级块以后,程序通过iget操作获取到root节点,保存在全局变量root中。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
1.本题目为模拟UNIX文件系统来设计一个多用户多级目录的文件系统。 1)课程设计所利用的空间为1M的内存(模拟外存文件系统存储空间)或用一个文件模拟一个磁盘分区,模拟外存文件系统存储空间。这1M内存分成512块,每块为512个字节,这512块就是文件系统总共的可用块数,文件系统的分配就是以块为单位来分配的,空闲块的管理利用位示图的方法来管理。申请1M的内存的方法可以利用malloc()等。 2)在构造文件系统空间时,不用做引导块;专用块中只包含对空闲块和空闲磁盘i节点进行管理的信息,即位示图和记录空闲磁盘i节点号的数组(该数组大小可设置为与磁盘i节点总数相等);要做磁盘i节点区和文件存储区;不用做进程对换区。注意:仔细计算,合理分配各区域。 3)磁盘i节点可以利用在内存中生成链表或者数组的方法来生成,并且限制磁盘i节点数的最大值。同样内存活动i节点也可以利用链表的方法在内存中生成。 4)在往文件中写或者读的时候我们都是对内存中内容进行读写。例如你在文件中写的时候,其实是对分配的文件块中对应的内存赋值。当程序运行结束的时候,文件的内容都会丢失。我们这个文件系统只是一个模拟文件系统功能的虚拟文件系统。当然,若用一个文件模拟一个磁盘分区,模拟外存文件系统存储空间,那你在这个模拟系统中建立的文件其内容就不会丢失了 本程序使用txt文件模拟磁盘分区
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值