Linux文件系统的设计
总论:
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文件系统的设计相关推荐
- linux文件系统的设计,基于Linux的文件系统设计.doc
PAGE PAGE 33 无敌 操作系统课程设计 说 明 书 ? 学 院.系: 软件学院 专 业: 软件工程 学 生 姓 名: 学 号: 设 计 题 目: 基于Linux的模拟文件系统的设计与实现 起 ...
- 模拟linux文件系统的设计及实现_Linux后台服务器开发中,内存池设计与实现(c/c++)...
一.前言 作为C++程序员,想必对于内存操作这一块是比较熟悉和操作比较频繁的: 比如申请一个对象,使用new,申请一块内存使用malloc等等: 但是,往往会有一些困扰烦恼着大家,主要体现在两部分: ...
- linux设计 实现一个模拟的文件系统,模拟Linux文件系统.doc
模拟Linux文件系统 设计五: 设计任务: 模拟Linux文件系统.在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟Linux文件系统 . 在现有机器硬盘上开辟20M的硬盘 ...
- linux文件系统研究与设计,Linux下实时文件系统的设计
刘炜东,张玉生,康卫,胡爱兰 (华北计算机系统工程研究所,北京 100083) 摘要:Linux下常见的十余种文件系统的实时性都不理想.针对归档存储数据的特点,提出一种实时文件系统设计方案,并且设计了 ...
- TQ210 —— 嵌入式Linux根文件系统的设计与实现
嵌入式Linux根文件系统的设计与实现 1.Linux文件系统基本概念 文件系统类型:FAT32.NTFS.EXT2. EXT3. JFFS2. YAFFS2. NFS Linux根文件系统目录结构: ...
- 文件系统加密 嵌入式Linux,基于Linux的NAND Flash加密文件系统的设计与实现
摘要: NAND Flash以其大容量,低成本,低功耗,抗震荡在非易失存储介质中占据重要地位,已经被广泛应用于消费型电子,航空设备等领域.但是由于NANDFlash的物理特性不同于磁盘存储设备,需要为 ...
- linux文件系统dentry_NFS 文件系统源代码剖析
NFS 文件系统概述 NFS(Network File System,网络文件系统)是一种基于网络的文件系统.它可以将远端服务器文件系统的目录挂载到本地文件系统的目录上,允许用户或者应用程序像访问本地 ...
- 低调的 Linux 文件系统家族
在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想. 这些思想中有一些 ...
- 深入理解ext4等Linux文件系统
了解 ext4 的历史,包括其与 ext3 和之前的其它文件系统之间的区别. 目前的大部分 Linux 文件系统都默认采用 ext4 文件系统,正如以前的 Linux 发行版默认使用 ext3.ext ...
最新文章
- 有一份华为荣誉证书等你来拿!网络人工智能硬盘异常预测黑客松比赛火热报名中...
- Github的创建及使用
- PC厂商如何演化移动互联网市场格局?
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
- 数据类型的转换小结 c# 1614092651
- mysql表分区数量限制_MySQL分区表的局限和限制详解
- C++将double类型小数以16进制格式打印出
- 360手机卫士大数据驱动犯罪打击 配合警方破案成果显著
- C++编程语言的应用方向有哪些?
- cmd静默运行_exe、msi、dos、bat等静默运行,后台运行,不弹窗的解决办法
- 计算机二级--java篇
- 三维动画制作软件有哪些?
- 什么思维是计算机科学的基础概念,计算思维的定义和特征是什么
- CodeForces 372A Counting Kangaroos is Fun 动物PK
- 985 211 PHP,部分985、211高校考研报录比汇总!
- json数组删除重复项
- android系统user/userdebug版本设置selinux到SELINUX_PERMISSIVE模式
- 汉王人脸通登陆美国“中国创造”出海
- c#程序连接orace出现驱动程序和应用程序之间的体系结构不匹配
- 【ViewPager的学习】一、简单使用
热门文章
- 哪个充电宝额定容量最高?额定容量高的充电宝盘点
- 腾讯大讲堂ppt全集
- win10电脑打开此电脑、资源管理器、任务管理器软件等突然很慢很慢,cup、内存、磁盘利用率却很低
- python实用的PDF自动化办公:解密、加水印、PPT/Word/TxT转PDF
- Python 实现快排
- parser.add_argument metavar
- Golang信号处理和优雅退出守护进程
- 系统资源严重不足,无法启动API
- div+css静态网页设计 网页设计实例作业 ——中国梦我的梦(3页) 学生HTML个人网页作业作品下载
- 实操笔记02-random.normal函数