![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
文件系统
文章平均质量分 94
操作系统
奇小葩
学习,思考,总结
展开
-
文件系统(十二)—伪文件系统
前文中我们已经分析了文件系统,而文件系统的精髓所在是让用户可以通过文件描述符来对指定的进行一系列的操作。本章开始学习伪文件系统,伪文件系统和普通文件系统的区别在于,其对用户不可访问,即仅在内核态可见,从用户层的视角来看该文件系统并不存在。伪文件系统的作用是对一些操作系统中的元素进行封装,和普通的文件统一接口,如块设备,管道文件,套接字等。通过这种方式的统一封装,才实现了Linux一切皆文件的思想。如下图中红色的都应该算是伪文件系统,本章就学习其中的procfs/sysfs/pipefs。proc文件系统由p原创 2022-06-20 23:34:40 · 1538 阅读 · 1 评论 -
文件系统(九)—如何设计一个simplefs
对于Linux延续着Unix的一个哲学思想:一切皆文件,应用看到的所有对象都是文件。应用程序通过系统调用陷入内核中,访问内核的资源,VFS作为通用文件系统接口,通过各种不同文件系统的实现,主要是以块设备为基础的物理文件系统,例如EXT2/EXT3等,对于VFS层通过不断的演变支持了更多的文件系统,其主要是中间层,对上提供POSIX API,对下对接不同的文件系统驱动向上主要是提供file_operations抽象接口,包括文件的打开,读写,mmap映射,ioctl等,用户空间无须考虑具体的文件系统和实原创 2022-06-19 22:49:34 · 758 阅读 · 0 评论 -
文件系统(十二)—图解如何使用fuse文件系统
我们真实的来看怎么实现一个简单的fuse文件系统,我们还是以之前的例子,对于用户空间需要实现基于libfuse实现的应用程序hello原创 2022-06-05 21:24:18 · 1593 阅读 · 0 评论 -
文件系统(十一)—fuse内核实现
用户文件系统会越来越广泛使用,目前andriod12中已经到了fuse的文件系统,Android 实现了自己的 FUSE 守护程序来拦截文件访问,实施额外的安全和隐私功能,并在运行时操作文件。原创 2022-06-03 22:20:26 · 4224 阅读 · 0 评论 -
文件系统(十)—文件系统一致性
文件系统管理一组数据结构以实现预期的抽象:文件,目录,以及所有其他的元数据,以满足我们期望的从文件系统获得的基本抽象。文件系统必须持久化,存储在断电也能保留数据的设备上。所以文件系统面临了一个主要的挑战在于,如何在断电或者系统崩溃的情况下,更新持久化数据。如果在更新磁盘结构的过程中,机器断电,会发生什么?操作系统遇到错误并崩溃,会发生什么?本章中,我们详细探讨这个问题,看看文件系统克服它的一些方法1 背景我们假定磁盘上使用一个标准的简单的文件系统结构,类似于我们之前分析的文件系统,如下图所示原创 2022-05-29 20:56:54 · 2641 阅读 · 0 评论 -
文件系统(七)—图解进程文件操作
文件系统(七)—进程文件操作学习文件系统,我们的目标是如何实现一个简单的文件系统?磁盘上需要什么结构?它们需要记录什么?如何访问?对于这些问题,我们就需要理解文件系统的基本工作原理,可以从以下两个方面着手文件系统的数据结构:文件系统在磁盘上使用哪些类型的结构来组织其数据和元数据?当一个进程打开一个文件时,会发生什么?在读取或写期间会访问哪些磁盘结构?访问方法:如何将进程发出的调用,如open()/write()/read()等,映射到它的结构上?在执行特定系统调用期间读取哪些结构本章就基于以上的原创 2022-05-19 22:43:46 · 1547 阅读 · 0 评论 -
文件系统(六)—文件系统mount过程
前一章学习了虚拟文件系统组成的超级块、索引节点、目录项、文件四个结构体对象,那么就开始看内核是如何建立挂载点目录项与挂载文件系统的?我们接着下面图,学习整个mount的过程。1 数据结构虚拟文件系统通过目录项dentry实例组成的跟文件系统管理内核所有的文件,具体文件系统根目录需要关联到内核跟文件系统中某一目录项**(挂载点)**才能接入跟文件系统,如下图所示将磁盘分区sda1的文件系统根目录与跟文件系统中的/mnt目录项建立关联,称之为挂载,/mnt目录项称之为挂载点根文件系统中的挂载点可以原创 2022-05-15 22:53:43 · 3295 阅读 · 1 评论 -
文件系统(五)—VFS初始化
介绍了内核虚拟文件系统的结构,具体文件系统的挂载,本文介绍虚拟文件系统的初始化。虚拟文件系统初始化工作主要包括各数据结构slab缓存的创建、管理散列表的创建,内核初始根文件系统的创建,以及挂载外部根文件系统等。内核在启动阶段需要对虚拟文件系统进行初始化,内核启动start_kernel函数中调用的与虚拟文件系统初始化相关的函数asmlinkage void __init start_kernel(void){ …… vfs_caches_init_early(); …… vfs_caches_原创 2022-05-08 23:45:12 · 1809 阅读 · 0 评论 -
文件系统(四)—快速文件系统
当Unix操作系统首次引入时,使用了minix文件系统,它非常简单,基本上,它的数据结构在磁盘上看起来像是这样:超级块包括了有关整个文件系统的信息,卷大小,有多少inode,有多少空闲块等等,磁盘的inode区域包括文件系统的所有inode,最后,大部分磁盘都被整个数据块占用。对于非常常见的读操作,每当第一次读取inode,然后读取文件的数据块时,就会导致寻道时间很长更糟糕的是,文件系统最终会变得非常的碎片化,该设计没有对空闲空间的管理,结果导致在磁盘上来回访问逻辑上连续的文件,从而大大的降低了性原创 2022-05-03 12:15:09 · 1337 阅读 · 0 评论 -
文件系统(五) — 图解虚拟文件系统结构
最近一直忙于基于android的动态分区的方案和virtual A/B方案通过rust重写升级的框架,里面有将IO子系统的框架学习了,主要是基于deviceMapper的用法和实现原理,只是学习了基本的原理和如何使用,对于其最底下的IO层基本不知道如何实现,准备放到文件IO章节学习。本周末接着学习文件系统,之前了解了以下文件系统的基本知识,本次开始真正进入到内核的虚拟文件系统学习之旅。1 VFS架构我们从一个简单的问题开始,我们如何访问文件?作为一个普通的使用者,我们不太关系我们如何访问计算机上的数据,原创 2022-04-18 00:03:49 · 3307 阅读 · 0 评论 -
文件系统(三)—老祖宗长的什么样
文件系统(三)—老祖宗长的什么样文件系统已经发展的如此完善,同时文件系统的代码也越来越复杂,我们通过前面两章大致知道了可以如何去设计一个文件系统,所以我们有必要去了解一下linux文件系统的老祖宗长的什么样。一方面,我们可以通过这个可以了解文件系统最初的样子,更加加深的理解文件系统的理念和基础概念;另外一方面是现代的文件系统都比较庞大,不容易理解,而老的文件系统才几千行代码,理解起来比较容易。1 minix文件系统当编写原始Linux内核,Linus Torvalds需要一个文件系统,但是不想开发它。原创 2022-04-04 23:01:39 · 2411 阅读 · 0 评论 -
文件系统(二)—如何设计一个文件系统
前面一章主要学习了文件系统的存储和分配方式的理论知识,本章接着理论知识,如何设计一个文件系统(本章不涉及任何代码实现),其主要的内容包括如下:如何一步步设计一个文件系统,了解文件系统由那些组成当我们读写文件时底层的工作原理是什么,从组成到实现原理1. 文件系统的组成部分对于文件系统我们只需要支持两种最基本的操作:读和写,就可以解决长期的存储问题。不过,这里存在很多不便于实现的操作,特别是有很多程序或者多用户使用着的大型系统上,很容易产生一些问题,例如:如何找到对应的信息?如何防止一个用户读原创 2022-03-29 23:40:34 · 7427 阅读 · 1 评论 -
文件系统(一)---文件系统基础知识
前面主要是学习linux进程管理的调度,其细节越来越多,结合目前移动设备,其调度算法越来越复杂,涉及到芯片涉及,电源管理,多核负载等,这块内容暂时告一段落,本章正式进入到文件系统的学习。现在的磁盘是具有大容量、低成本以及持久化的特点,即使发生断电、磁盘上的数据也不会丢失。但是对于一般用户而言,磁盘的使用是一个非常痛苦的,因为他们不清楚如何驱动一个磁盘,以及计算数据在磁盘上存放的位置。对于操作系统是一个魔术师,它提供用户各种抽象。前面章节我们学习了进程的抽象是CPU,虚拟内存的抽象是内存,对于磁盘来说,操作原创 2022-03-28 23:02:06 · 8690 阅读 · 0 评论 -
深入理解overlayfs(二):使用与原理分析
版权声明:本文为CSDN博主「luckyapple1028」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/luckyapple1028/article/details/78075358在初步了解overlayfs用途之后,本文将介绍如何使用overlayfs以及理解该文件系统所特有的一些功能特性。由于目前主线内核对overlayfs正在不断的开发和完善中,因此不同的内核版本改动可能较大,本文尽量与最新的内核版本保持转载 2022-01-12 19:52:44 · 1596 阅读 · 1 评论 -
深入理解overlayfs(一):初识
版权声明:本文为CSDN博主「luckyapple1028」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/luckyapple1028/article/details/77916194Overlayfs是一种类似aufs的一种堆叠文件系统,于2014年正式合入Linux-3.18主线内核,目前其功能已经基本稳定(虽然还存在一些特性尚未实现)且被逐渐推广,特别在容器技术中更是势头难挡。本系列博文将首先介绍overla原创 2021-10-20 10:23:07 · 1148 阅读 · 1 评论 -
Page Cache性能优化
我们前一章节中学习Linux是用Cache/Buffer缓存数据,提高系统的I/O性能,且有一个回刷任务在适当时候把脏数据回刷到储存介质中。那么本章重点学习优化机制,包括以下内容什么时候触发回刷?脏数据达到多少阈值还是定时触发呢?内核是如何做到回写机制的1. 配置概述Linux内核在/proc/sys/vm中有透出数个配置文件,可以对触发回刷的时机进行调整。内核的回刷进程是怎么运作的呢?这数个配置文件有什么作用呢?root@public-VirtualBox:~# sysctl -a | g原创 2021-04-14 22:56:38 · 1396 阅读 · 0 评论 -
Page Cache
在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,感觉是内存不够用了。其实不然,这是Linux内存管理的一个优秀的特征,主要特点是,物理物理内存有多大,Linux都将其充分利用,将一些程序调用过的硬盘数据读入内存(buffer/Cache),利用内存读写的高速特性来提供Linux系统的数据访问性能高。本章的主要内容学习内容如下:什么是Page cache(what)为什么需要page cache(why)Page cache是如何产生和释放的(how)1. 什么是Page Cac原创 2021-04-13 22:25:06 · 1116 阅读 · 1 评论