虚拟文件系统和跨平台文件系统的实现

基于跨平台的文件系统和windows虚拟文件系统

  缘起:这个想法来自于我们学校的一个课程设计,虽然他们做的课程设计要求不是很高,但是却给了我一个提示,就是一个跨平台的文件系统的可实现性和一个虚拟文件系统的开发意义。
 
  首先谈论一个在windows下面的一个虚拟文件系统的作用,我们可以在windows下面,划分一定的存储空间,作为我们的虚拟文件系统,在这个虚拟文件系统中,我们可以自己定义文件的存储格式和文件的管理方式,从目的来说,至少有以下几点:
  1、作为教育的作用。以前,经常有人问我,他想用fdisk分区,可是不知道怎么分区又怕弄坏了,当时我真的没有办法给他说清楚具体怎么分区,我就想,又不能够亲自给他演示,要是有一个虚拟的多好啊,同样,很多操作是影响到我们的数据的,如格式化磁盘,我们需要一个虚拟的东西来代替我们真正的操作,当我们熟悉了操作过后,那么真正对硬盘分区,格式化就可以不会出错,也不会害怕一不小心就成千古错了。现在的教育很多时候也会对这方面比较底层的操作避而不谈,导致很多人认为那些是很难的东西,不要去乱动他,这样就不利于我们的学习和对他的进一步了解,这是原因之一。

 2、作为加密等的作用。大家都知道ntfs格式吧,他是加密格式,很多人都很喜欢,可是由于它与dos的不兼容,所以也有很多人不喜欢它,(当然ntfs的有点不止是这些)现在我们可以有了自己的文件系统,我们想怎么样加密都可以了。比如说我们在每一个文件之前存储相关的用户信息,然后再存储相关的数据,并采用链式存储,就算我

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
目录 1 虚拟文件系统概述 5 1.1 通用文件模型 7 1.2 VFS所处理的系统调用 9 2 虚拟文件系统架构 11 2.1 VFS对象数据结构 11 2.1.1 超级块对象 11 2.1.2 索引节点对象 15 2.1.3 文件对象 18 2.1.4 目录项对象 22 2.2 把Linux中的VFS对象串联起来 24 2.2.1 与进程相关的文件 25 2.2.2 索引节点高速缓存 29 2.2.3 目录项高速缓存 30 2.2.4 VFS对象的具体实现 32 2.3 文件系统的注册与安装 38 2.3.1 文件系统类型注册 38 2.3.2 文件系统安装数据结构 41 2.3.3 安装普通文件系统 52 2.3.4 分配超级块对象 58 2.3.5 安装根文件系统 60 2.3.6 卸载文件系统 65 2.4 路径名的查找 66 2.4.1 查找路径名的一般流程 67 2.4.2 父路径名查找 82 2.4.3 符号链接的查找 84 2.5 VFS系统调用的实现 88 2.5.1 open()系统调用 88 2.5.2 read()和write()系统调用 96 2.5.3 close()系统调用 97 3 第二扩展文件系统 99 3.1 Ext2磁盘数据结构 101 3.1.1 磁盘超级块 102 3.1.2 组描述符和位图 105 3.1.3 磁盘索引节点表 105 3.2 VFS接口数据结构 110 3.2.1 Ext2 超级块对象 110 3.2.2 Ext2 的索引节点对象 121 3.2.3 创建Ext2文件系统 124 3.2.4 Ext2的方法总结 126 3.3 Ext2索引节点分配 129 3.3.1 创建索引节点 130 3.3.2 删除索引节点 143 3.4 Ext2数据块分配 144 3.4.1 数据块寻址 145 3.4.2 文件的洞 147 3.4.3 分配数据块 148 4 页面高速缓存 160 4.1 页高速缓存数据结构 160 4.1.1 address_space对象 161 4.1.2 基树 164 4.2 高速缓存底层处理函数 166 4.2.1 查找页 166 4.2.2 增加页 168 4.2.3 删除页 173 4.3 文件系统与高速缓存 175 4.3.1 缓冲头数据结构 175 4.3.2 分配块设备缓冲区页 178 4.3.3 释放块设备缓冲区页 184 4.4 在页高速缓存中搜索块 185 4.4.1 __find_get_block()函数 185 4.4.2 __getblk()函数 188 4.4.3 __bread()函数 190 4.5 把脏页写入磁盘 191 4.5.1 pdflush内核线程 192 4.5.2 搜索要刷新的脏页 193 4.5.3 回写陈旧的脏页 196 5 文件读写 199 5.1 系统调用VFS层的处理 200 5.2 第二扩展文件系统Ext2层的处理 201 5.2.1 Ext2的磁盘布局 202 5.2.2 Ext2的超级块对象 206 5.2.3 Ext2索引节点对象的创建 210 5.2.4 Ext2索引节点对象的读取 218 5.2.5 Ext2层读文件入口函数 225 5.3 页高速缓存层的处理 237 5.3.1 创建一个bio请求 238 5.3.2 得到文件的逻辑块号 244 5.3.3 普通文件的readpage方法 251 5.3.4 块设备文件的readpage方法 252 5.3.5 文件的预读 260 5.4 通用块层的处理 264 5.4.1 块设备的基础知识 265 5.4.2 通用块层相关数据结构 269 5.4.3 提交I/O传输请求 271 5.4.4 请求队列描述符 273 5.5 块设备I/O调度层的处理 281 5.5.1 块设备的初始化 284 5.5.2 建立块设备驱动环境 288 5.5.3 关联block_device结构 295 5.5.4 为设备建立请求队列 306 5.5.5 块设备I/O调度程序 311 5.5.6 真实的I/O调度层处理 321 5.6 块设备驱动层的处理 330 5.6.1 scsi总线驱动的初始化 330 5.6.2 scsi设备驱动体系架构 342 5.6.3 scsi块设备驱动层处理 347 5.6.4 scsi命令的执行 369 5.6.5 scsi命令的第一次转变 372 5.6.6 scsi命令的第二次转变 380 5.7 写文件 384 5.7.1 generic file_write函数 384 5.7.2 普通文件的prepare_write方法 386 5.7.3 块设备文件的prepare_write方法 387 5.7.4 将脏页写到磁盘 388 6 直接I/O与异步I/O 391 6.1 直接I/O 391 6.2 异步I/O 393 6.2.1 Linux 2.6中的异步I/O 394 6.2.2 异步I/O环境 394 6.2.3 提交异步I/O操作 395
Linux系统中的虚拟文件系统(Virtual File System,简称VFS)是一个抽象层,提供了对不同文件系统的统一接口。它允许用户和应用程序以相同的方式访问不同类型的文件系统,如ext4、NTFS等。VFS的管理机制主要包括以下几个方面: 1. 虚拟文件系统层次结构:VFS提供了一个层次结构来组织各个文件系统的操作。在顶层是通用的VFS接口,下面是具体的文件系统实现,如ext4、FAT等。这种层次结构使得用户和应用程序可以使用相同的API来操作不同类型的文件系统。 2. 文件对象和索引节点:VFS中的文件对象(file object)用于表示打开的文件,而索引节点(inode)用于表示文件在文件系统中的唯一标识。文件对象包含了文件的状态信息和指向索引节点的指针。 3. 虚拟文件系统挂载:VFS支持将不同类型的文件系统挂载到统一的目录结构中。通过挂载,用户可以访问不同文件系统中的文件,就像它们都在同一个文件系统中一样。VFS会根据挂载点来确定应该使用哪个文件系统来处理特定的路径。 4. 虚拟文件系统缓存:VFS维护了一个缓存来存储最近访问的文件数据和元数据。这个缓存可以提高文件系统的性能,避免频繁的磁盘访问。 对于虚拟文件系统本身的评价,可以说它是Linux系统中一个非常重要的组成部分。它提供了一个统一的接口,使得用户和应用程序能够方便地操作不同类型的文件系统,而不需要关心底层的具体实现细节。VFS的设计使得文件系统的添加和移除变得相对容易,也提高了系统的可扩展性和灵活性。此外,VFS还支持文件系统挂载和缓存机制,可以提高系统的性能。 总之,Linux系统中的虚拟文件系统为用户提供了一个高度抽象的接口,使得文件系统的管理变得更加方便和灵活。它是Linux系统中文件系统管理的基础,对于实现跨平台的文件操作具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值