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
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值