总论:

linux的文件系统设计非常优秀,总的来讲有两大部分,第一部分就是树形的组织结构,第二部分就是vfs,树形的组织结构组织了文件系统的表象,用户很方便的使用,而vfs是文件系统的实现机理,它处于内核态,不但实现了树形结构的mount机制,而且还提供了一个统一的接口用来访问设备。
一、Linux文件系统概述 
1、Linux文件系统组织 
Linux中使用树来组织文件系统。整个文件系统构成了一颗树,这棵树以/为根。整个系统有且只有这一颗文件树。这棵树描述了文件系统的拓扑结构,没有任何文件系统的类型信息。
2、mount机制 
linux使用mount机制扩展文件系统,使不同类型的文件系统可以挂载在系统的文件树的任何位置。mount机制使文件树有了类型属性,支持了不同类型的文件系统的挂载。
如图所示。
 
可以看到如果不考虑挂载点,整个文件系统就是一棵树,如果考虑了挂载点,这棵树原来是嫁接而成的,可以包含各种不同种类的文件系统。正如桥片扩展了总线一样,挂载点扩展了文件树,和扩展总线不同的是,任意目录都可以是挂载点,但是不是任意芯片都是可以作为桥的。(网桥/交换机扩展以太网也是一样的道理,和mount机制更加类似一些,因为你只需要插入一个多端口网卡就可以作为一个网桥了。)
3、mount机制的好处 
mount可以屏蔽文件系统的类型,所有类型的文件系统共享一棵树,但是实现却可以不相同。用户进程可以使用相同的系统调用接口访问所有的文件系统,而不必在意访问的文件是什么类型的。mount机制使一棵文件树得以多样化,然而又可以向用户屏蔽这种多样化。这种多样化是通过vfs实现的。
4、单棵树组织+mount扩展 
Linux的文件系统和磁盘并不绑定,文件系统就是一棵树,是一个虚拟的概念,没有介质,没有容量,没有读写规则,只有在挂载(mount)发生的时候,也就是具体的文件系统挂载的时候,某个挂载点才和介质建立联系,然而此时对于文件系统来讲仍然没有容量的概念,容量仅仅是挂载于此目录的磁盘设备的属性,如果磁盘空间满了,仍然可以通过在此磁盘的一个目录上mount一个新的文件系统来解决,而新的文件系统在一块新的磁盘上。
5、和Windows文件系统的对比 
Windows显式的分离了各种文件系统,虽然Windows在操作接口上也吸取了Unix中“一切皆文件”的思想。在接口级别,windows也使用相同的API来访问各类文件,比如ReadFile,WriteFile等,然而在操作级别,windows却没有实现一致性,在操作级别,windows的文件系统主要指以磁盘为介质的文件系统,因此windows没有必要用一棵树包含所有的文件,而是区分成了各个盘符,然而这种方式有个弊端,那就是不易扩展,因为单个盘符限制了容量,磁盘直接和文件系统绑定。因此,Windows不以单棵树树来组织文件系统,windows很难用mount来扩展文件系统。
二、VFS概述 
1、VFS 
虚拟文件系统或者虚拟文件插口,叫做插口更合适,也是官方的叫法,vfs向上和用户进程文件访问系统调用接口,如open,read,write等,向下和具体不同文件系统的实现接口,如read,write的不同实现。如下图所示:

2、VFS的重要性 
VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。在操作系统内核中,vfs是对离用户态最近的一层,因为它的存在,linux的使用才变得方便。实际上,正是vfs实现了树形的文件系统组织,然而vfs的作用还不止这些,设备的文件抽象也是通过vfs来实现的。
3、VFS举例 
3.1、procfs
3.2、sysfs
3.3、cpusetfs
3.4、ntfs
3.5、extX
3.6、任意你想实现的。
需要做什么呢?只需要在一大堆switch函数例程中实现你的逻辑即可,就是说实现file_operations函数集合即可。注意,在linux中,文件和存储没有必然关系,实际上没有任何关系,也就是说linux中的文件有的不需要被存储,比如proc目录中的文件,只有在你read它的时候,数据才从内核出来,这个数据是内核逻辑提供的,而是可能实时变化,linux根本没有必要在另一个地方再存储它。
4、一个重要结论 
由于linux的树形文件系统是完全抽象的,因此它不和任何介质进行绑定,仅存在于内核当中,内核只要起来,这个虚拟的树就存在了,只是此时只有树根,然而linux此时却可以挂载任意类型的文件系统到这个树根,这样就可以实现很方便的定制,linux可以在initrd中挂载任意文件系统到树根,这是因为内核和文件系统是分离的概念,内核启动并不依赖任何文件系统

Linux文件系统的设计相关推荐

  1. linux文件系统的设计,基于Linux的文件系统设计.doc

    PAGE PAGE 33 无敌 操作系统课程设计 说 明 书 ? 学 院.系: 软件学院 专 业: 软件工程 学 生 姓 名: 学 号: 设 计 题 目: 基于Linux的模拟文件系统的设计与实现 起 ...

  2. 模拟linux文件系统的设计及实现_Linux后台服务器开发中,内存池设计与实现(c/c++)...

    一.前言 作为C++程序员,想必对于内存操作这一块是比较熟悉和操作比较频繁的: 比如申请一个对象,使用new,申请一块内存使用malloc等等: 但是,往往会有一些困扰烦恼着大家,主要体现在两部分: ...

  3. linux设计 实现一个模拟的文件系统,模拟Linux文件系统.doc

    模拟Linux文件系统 设计五: 设计任务: 模拟Linux文件系统.在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟Linux文件系统 . 在现有机器硬盘上开辟20M的硬盘 ...

  4. linux文件系统研究与设计,Linux下实时文件系统的设计

    刘炜东,张玉生,康卫,胡爱兰 (华北计算机系统工程研究所,北京 100083) 摘要:Linux下常见的十余种文件系统的实时性都不理想.针对归档存储数据的特点,提出一种实时文件系统设计方案,并且设计了 ...

  5. TQ210 —— 嵌入式Linux根文件系统的设计与实现

    嵌入式Linux根文件系统的设计与实现 1.Linux文件系统基本概念 文件系统类型:FAT32.NTFS.EXT2. EXT3. JFFS2. YAFFS2. NFS Linux根文件系统目录结构: ...

  6. 文件系统加密 嵌入式Linux,基于Linux的NAND Flash加密文件系统的设计与实现

    摘要: NAND Flash以其大容量,低成本,低功耗,抗震荡在非易失存储介质中占据重要地位,已经被广泛应用于消费型电子,航空设备等领域.但是由于NANDFlash的物理特性不同于磁盘存储设备,需要为 ...

  7. linux文件系统dentry_NFS 文件系统源代码剖析

    NFS 文件系统概述 NFS(Network File System,网络文件系统)是一种基于网络的文件系统.它可以将远端服务器文件系统的目录挂载到本地文件系统的目录上,允许用户或者应用程序像访问本地 ...

  8. 低调的 Linux 文件系统家族

    在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想. 这些思想中有一些 ...

  9. 深入理解ext4等Linux文件系统

    了解 ext4 的历史,包括其与 ext3 和之前的其它文件系统之间的区别. 目前的大部分 Linux 文件系统都默认采用 ext4 文件系统,正如以前的 Linux 发行版默认使用 ext3.ext ...

最新文章

  1. 有一份华为荣誉证书等你来拿!网络人工智能硬盘异常预测黑客松比赛火热报名中...
  2. Github的创建及使用
  3. PC厂商如何演化移动互联网市场格局?
  4. MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
  5. 数据类型的转换小结 c# 1614092651
  6. mysql表分区数量限制_MySQL分区表的局限和限制详解
  7. C++将double类型小数以16进制格式打印出
  8. 360手机卫士大数据驱动犯罪打击 配合警方破案成果显著
  9. C++编程语言的应用方向有哪些?
  10. cmd静默运行_exe、msi、dos、bat等静默运行,后台运行,不弹窗的解决办法
  11. 计算机二级--java篇
  12. 三维动画制作软件有哪些?
  13. 什么思维是计算机科学的基础概念,计算思维的定义和特征是什么
  14. CodeForces 372A Counting Kangaroos is Fun 动物PK
  15. 985 211 PHP,部分985、211高校考研报录比汇总!
  16. json数组删除重复项
  17. android系统user/userdebug版本设置selinux到SELINUX_PERMISSIVE模式
  18. 汉王人脸通登陆美国“中国创造”出海
  19. c#程序连接orace出现驱动程序和应用程序之间的体系结构不匹配
  20. 【ViewPager的学习】一、简单使用

热门文章

  1. 哪个充电宝额定容量最高?额定容量高的充电宝盘点
  2. 腾讯大讲堂ppt全集
  3. win10电脑打开此电脑、资源管理器、任务管理器软件等突然很慢很慢,cup、内存、磁盘利用率却很低
  4. python实用的PDF自动化办公:解密、加水印、PPT/Word/TxT转PDF
  5. Python 实现快排
  6. parser.add_argument metavar
  7. Golang信号处理和优雅退出守护进程
  8. 系统资源严重不足,无法启动API
  9. div+css静态网页设计 网页设计实例作业 ——中国梦我的梦(3页) 学生HTML个人网页作业作品下载
  10. 实操笔记02-random.normal函数