存档

  • 使用 fuse 编写文件系统 (2)

    读写文件

    在第一个程序的基础上增加读写 hello-world 的功能:

    #define FUSE_USE_VERSION 26
    
    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    #include <fuse.h>
    
    #define BUFFSIZE 8192
    
    static int content_size;
    static char content[BUFFSIZE];
    static const char* fname = "hello-world";
    
    static int ou_readdir(const char* path, void* buf, fuse_fill_dir_t filler,
                          off_t 

    阅读全文…

    2013年1月26日 | 归档: 文件系统 | 标签:
  • 使用 fuse 编写文件系统 (1)

    FUSE 的全称是“Filesystem in Userspace”,即“用户空间的文件系统”,这是一个内核模块,能够让用户在用户空间实现文件系统并且挂载到某个目录,就像在内核实现的文件系统一样。使用 FUSE 有几个好处:一是因为在用户空间实现,开发和调试都比较方便;二是可以把一些常用的服务以文件系统的形式展现,方便操作,如 ftpfs,sshfs,mailfs 等;另外可以避免一些版权问题,如 Linux 上对 ntfs,zfs 的操作都是通过 FUSE 实现的。当然用户空间的实现也有缺点,最明显的就是由多次在用户态/内核态切换带来的性能下降。

    根据参考资料 [1] 的介绍,用户通过 FUSE 和内核的通信过程如下:

                       +----------------+
                       | myfs /tmp/fuse |
                       +----------------+
                              |   ^
    +--------------+          v   |
    | ls /tmp/fuse |    +--------------+
    +--------------+    |    libfuse   |
          ^  

    阅读全文…

    2013年1月5日 | 归档: 文件系统 | 标签:
  • linux 文件系统之 vfs (1)

    unix 有一句口号“一切都是文件”,说的是普通文件,外设甚至网络都可以当成一个文件来看待:从磁盘上的文件中读取数据,从鼠标/键盘等外设获得输入,接收网络信息等就是从“文件”中读取数据;把数据保存到文件,将文字显示在屏幕上,播放音乐和电影,发送网络信息等可以认为向“文件”写入数据。这个高度统一的接口为操作提供了巨大的便利,用户不需知道实际的对象是什么,只使用系统提供的 read/write 接口就能完成几乎所有的 IO 操作。

    既然所有的设备都能被抽象成文件并且用统一的接口进行操作,而且个人觉得在操作系统的几个组成部分(内存管理,进程调度等)中文件系统是相对简单的部分,从这个统一的接口开始了解其内部工作机制或许是个不错的选择。

    虚拟文件系统(Virtual Filesystem Switch)

    早在 1985 年 SUN 发表了一篇论文(参考资料 [1]),提出了一个用于 Sun OS 的文件系统接口。论文开头说明了设计的目的:

    • 将与文件系统实现相关的部分和与实现无关的部分分开,两者之间由一个经过良好设计的接口连接;
    • 这些接口需要支持 unix 文件系统的操作原语(如创建/删除文件和目录等操作),并且支持各种各样的文件系统;
    • 接口要满足远程文件系统对于 client 的请求操作(例如一些连接/断开的操作,对应于 open/close);
    • 接口提供的操作都是原子性的,锁操作留给具体实现。

    整个接口所在的位置和提供的功能如下:

                                +--------------+
                                | System Calls |
                                +--------------+
                                       |
                                +--------------+
                                | Vnode Layer  

    阅读全文…

    2012年4月26日 | 归档: 文件系统 | 标签:
  • 以前写的一个玩具文件系统

    这是大三小学期的时候做的,不知不觉快 3 年了,转过来留个纪念。

    发信人: Xer (小x|SL小分队), 信区: Linux
    标  题: [分享][操作系统小学期]模拟文件系统
    发信站: 北邮人论坛 (Sat Sep  5 21:41:41 2009), 站内
    
    ============
    写在前面的话
    ============
    
    这个程序是我的操作系统小学期做的文件管理部分,磁盘布局是抄minix的,但是内存数据结构是自己想的(越往下写越感觉自己设计的不对)。从8月24号到熄灯前的那段时间基本是每天晚上2点上床7点起床,其它时间除了吃饭上厕所基本就是在查资料写代码,整个疯狂的程序员。既然抄了GPL的东西,就遵循GPL的规定开源了。
    
    数据结构跟vfs的出入挺大,所以写出来的东西不是很好,大牛们轻拍~
    
    ====
    简介
    ====
    
    文件系统用一个文件模拟,默认大小是32M(由ofs.h中的OFS_SIZE定义),默认块大小为4K(由ofs.h中的PAGE_SIZE定义)。程序由ANSI C写成,可以在Windows和Linux上运行。
    
    模拟文件系统总共分六大部分,分别是引导块(MBR),超级块(super block),索引节点位图(inode bitmap),数据块位图(data block bitmap),索引节点表(inode table)和数据区(data area)。各个部分的大致情况如下图所示:
    
    +-------------+
    |     MBR     | 

    阅读全文…

    2012年4月25日 | 归档: 文件系统 | 标签:
‘文件系统’ 分类的存档