![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux内核-IO块_文件系统
针对linux内核IO子系统中的块设备的文件子系统
生活需要深度
这个作者很懒,什么都没留下…
展开
-
Linux块设备软件栈
为达到这个目的,必须初始化结构,并调用add_disk。内核通过设备文件控制磁盘设备,在打开块设备文件时,其文件操作file_operations结构体为def_blk_fops实例,然后调用驱动程序中定义的block_device_operations实例响应的函数,完成对块设备的控制。块设备驱动程序中主要的数据结有:gendisk表示通用的磁盘,hd_struct结构表示分区,request_queue结构表示块设备的请求队列,block_device_operations结构表示磁盘的底层操作。原创 2024-04-18 14:33:34 · 256 阅读 · 0 评论 -
Page Cache性能优化
对于回写方式在之前的2.4内核中,使用 bdflush的线程专门负责writeback的操作,因为磁盘I/O操作很慢,而现代操作系统通常具有多个块设备,如果bdflush在其中一个块设备上等待I/O操作的完成,可能需要很长的时间,此时其他块设备还处于空闲状态,这时候,单线程模式的bdflush就称为了影响性能的瓶颈。这样的配置,通过增大Cache总容量,更加频繁唤醒回刷的方式,解决IO峰值的问题,此时能保证脏数据比例保持在一个比较低的水平,当突然出现峰值,也有足够的Cache来缓存数据。原创 2023-03-11 14:40:48 · 735 阅读 · 0 评论 -
深入理解overlayfs(二):使用与原理分析
版权声明:本文为CSDN博主「luckyapple1028」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/luckyapple1028/article/details/78075358在初步了解overlayfs用途之后,本文将介绍如何使用overlayfs以及理解该文件系统所特有的一些功能特性。原创 2023-03-11 14:39:51 · 1410 阅读 · 0 评论 -
深入理解overlayfs(一):初识
该问题同样源自copy-up机制,当原来在lower dir中的文件触发了copy-up以后,那用户在merge layer见到了将是来自upper dir的新文件,那也就意味着它俩的inode是不同的,虽然inode中很多的attr和xattr是可以copy的,但是st_dev和st_ino这两个字段却具有唯一性,是不可以复制的,所以用户可以通过ls和stat命令看到的该字段将发生变化。在同一个设备上,用户A和用户B有一些共同使用的共享文件(例如运行程序所依赖的动态链接库等),一般是只读的;原创 2023-03-11 14:38:50 · 613 阅读 · 0 评论 -
文件系统(十二)—伪文件系统
proc_fill_super()函数首先对super_block实例进行初始化,设置其超级块操作结构实例为proc_sops,然后调用proc_get_inode()函数创建proc_inode实例,并建立其与proc_root实例的关联,创建文件系统根目录项dentry实例,并关联proc_inode.vfs_inode成员(inode实例),最后在根目录下创建self和thread-self目录项。所以其数据结构如下图所示。管道(pipe)和命名管道是进程间通信的机制,用于进程间的单向数据传输。原创 2023-03-11 11:09:05 · 197 阅读 · 0 评论 -
文件系统(十二)—图解如何使用fuse文件系统
学习完了fuse的内核实现,我们真实的来看怎么实现一个简单的fuse文件系统,我们还是以之前的例子,对于用户空间需要实现基于libfuse实现的应用程序hello,例子可以参考http://fuse.sourceforge.net/helloworld.html。原文链接:https://blog.csdn.net/u012489236/article/details/125124262。libfuse的仓库地址为:https://github.com/libfuse/libfuse。原创 2023-03-11 11:08:47 · 561 阅读 · 0 评论 -
文件系统(十一)—fuse内核实现
下面我们看看整个过程,当用户输入ls -l /tmp/fuse回车后,这个时候ls会调用系统调用,kernel fuse模块接受到用户请求,会进入VFS处理,然后会根据这个分区的文件系统,找到对应文件系统的实现接口,这个时候会调用到内核提供的fuse驱动,具体的调用过程后面详细介绍。为什么要强调用户空间呢?接触过Linux内核的同学大概会知道,文件系统一般是实现在内核里面的,比如,Ext4、Fat32等常见的文件系统,其代码都在内核中,而FUSE特殊之处就是,其文件系统的核心逻辑是在用户空间实现的。原创 2023-03-11 11:05:53 · 1446 阅读 · 0 评论 -
文件系统(十)—文件系统一致性
更新磁盘时,在覆写结构之前,首先写下一个小标记(在磁盘上的其他位置),描述你将要做的事情,写下这个标记就是预写部分,我们把它写入一个结构,并组织成日志。因此,为了对文件系统加检查点(checkpoint,即让它与日志中即将进行的更新一致),我们将 I[v2]、B[v2]和 Db 写入其磁盘位置,如上所示。在这种情况下,文件系统元数据是完全一致的:inode 有一个指向块 5 的指针,位图指示 5正在使用,因此从文件系统的元数据的角度来看,一切看起来都很正常。但是对于用户来说,这是一个问题,丢失了一些数据。原创 2023-03-11 10:59:19 · 559 阅读 · 0 评论 -
文件系统(九)—如何设计一个simplefs
应用程序通过系统调用陷入内核中,访问内核的资源,VFS作为通用文件系统接口,通过各种不同文件系统的实现,主要是以块设备为基础的物理文件系统,例如EXT2/EXT3等,对于VFS层通过不断的演变支持了更多的文件系统,其主要是中间层,对上提供POSIX API,对下对接不同的文件系统驱动。linux系统里一切皆文件,磁盘也不例外。一般需要将需要存储的分区使用格式化的工具格式化成指定的文件系统,例如我们使用的ext4,使用mkfs.ext4工具,而对于simplefs,也提供了mkfs-simplefs的工具。原创 2023-03-11 10:52:20 · 194 阅读 · 0 评论 -
文件系统(七)—图解进程文件操作
file 结构体中比较重要的成员还有f_count,表示引用计数(Reference Count),如dup 、fork 等系统调用会导致多个文件描述符指向同一 个file 结构体,例如有fd1 和fd2 都引用同一个file 结构体,那么它的引用计数就是2,,当close(fd1) 时并不会释放file 结构体,而只是把引用计数减到1,如果再close(fd2) ,引用计数 就会减到0同时释放file 结构体,这才真的关闭了文件。/*文件操作结构指针,通常在打开文件时设为inode->i_fop*/原创 2023-03-10 18:30:50 · 375 阅读 · 0 评论 -
文件系统(八)—文件系统的前世今生
在下次启动时,将检查文件系统是否存在不一致性,然后将journal中剩余的数据提交到磁盘的数据区域以完成对目标文件的更新。线性(传统)目录,示意图如下,ext4默认是ext4_dir_entry_2,ext4_dir_entry_2和ext4_dir_entry的区别主要是因为文件名不超过255,所以不需要16位存储文件名,因此抽出8位用来存储文件类型,inode 2是系统保留的inode号代表根目录,该图是简单的根目录下的文件目录项示意图,可以看到在块内查找一个文件几乎要遍历目录项数组对比文件名。原创 2023-03-10 18:08:21 · 331 阅读 · 0 评论 -
文件系统(六)—文件系统mount过程
关联挂载点do_add_mount:创建挂载点mountpoint结构体实例,并添加到全局散列表,mountpoint实例关联到挂载点dentry实例(跟文件系统中目录项),并将挂载mount实例添加到Mountpoint实例链表和全局散列表中,建立mount实例与挂载断点dentry之间的关联,一个挂载点可以有多个挂载,因此Mountpoint实例包含一个挂载mount实例的链表。可以为一个文件系统创建多个装载实例vfsmount,挂载到不同的挂载点上。di_name定义了挂载点目录;原创 2023-03-10 18:05:56 · 690 阅读 · 0 评论 -
文件系统(一)---文件系统基础知识
但是使用这种方式,就是必须要把整个链表放到内存中,对于1TB的磁盘和1KB的大小块,那么这张表就需要有10亿项,每一项对应于这10亿个磁盘块中的一块,每项至少3个字节,为了提高查找速度,有时需要4个字节,那么这张表就需要3GB或2.4GB的内存。我们比较容易想到的就是,既然一个磁盘块存放不下,那么就使用两块,对的,这种想法是没错的,但是我们要考虑的是在使用多个磁盘块的时候,如果将这多个磁盘块关联起来,同时还能不降低查询效率?索引表存放的磁盘块叫做索引块,文件数据存放的磁盘块叫做数据块。原创 2023-03-10 13:41:59 · 305 阅读 · 0 评论 -
文件系统(二)—如何设计一个文件系统
当系统的存储空间比较少的时候,对于目录项可以与Inode节点公用,但是当系统的存储空间越来越大的时候,为了提高系统的Inode节点的利用率,就需要将目录项独立出去,对于这个方案ext4,采用一个单独的分区,用于存放根节点,然后将根节点下的目录项,随着文件的目录的创建放到数据磁盘块中,也就是说对于上面的FCB数组,值需要存放var,my,data对应的数据节点即可。有了逻辑块之后,磁盘控制器对数据的操作就以逻辑块为单位,一次读写一个逻辑块,磁盘控制器知道如何将逻辑块翻译成对应的扇区并读写数据。原创 2023-03-10 15:38:49 · 912 阅读 · 0 评论 -
文件系统(三)—老祖宗长的什么样
否则就需要从链表的free_list头指针开始搜索,即最近最少使用的缓存块开始,因此最理想的找到一个完全空闲的缓存块,即b_dirt和b_lock标志位均为0的缓存块;对于高速缓冲区,最重要的是getblk()处理过程,函数在每次获取新的空闲缓冲块时,就会把它移到free_list头指针所指链表的最后面,即越靠近链表末端的缓冲块被使用的时间就越近,因此如果Hash表中没有找到对应缓存块,就会在搜索新的空闲缓存块时从free_list链表头开始,内核取得缓存块算法使用以下的策略。原创 2023-03-10 16:01:51 · 286 阅读 · 0 评论 -
文件系统(五) — 图解虚拟文件系统结构
举例来说,我的Linux系统中,划分了3个分区分别挂载在/,/home,/boot目录上,挂载的文件系统都是ext4,因此,这3个ext4文件系统实例都有自己的super_block,它们通过super_block中hlist_node类型的成员s_instances链接成“ext4的super_block链表”。在关闭文件时,内核会释放dentry实例。回顾下上一节介绍的目录结构,在实际的文件系统中,保存文件内容的数据块号等信息不是保存在目录项中,而是保存在被称为节点的结构中,如下图所示。原创 2023-03-10 17:32:17 · 283 阅读 · 0 评论 -
Linux下/proc目录简介
由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。它以文件系统的方式为访问系统内核数据的操作提供接口。/proc/kcore 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb。/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理。原创 2023-03-07 18:09:32 · 831 阅读 · 0 评论 -
制作最简单的根文件系统
555 tar -zxvf gcc-3.4.5.tar.gz 556 ls 557 tar zxvf glibc-2.3.6.tar.gz 558 ls 559 cd /work/ 560 ls 561 cd system/ 562 ls 563 cd ../ 564 ls 565 cd nfs_root/ 566 ls 567 cd ../ 568 ls 569 cd nfs_root/ 570 ls ...原创 2022-04-21 20:51:35 · 984 阅读 · 0 评论 -
arm-linux-gcc交叉工具链
Linux ARM交叉编译工具链制作过程一、下载源文件源代码文件及其版本与下载地址:Binutils-2.19.tar.bz2Index of /gnu/binutilsgcc-4.4.4.tar.bz2Index of /gnu/gcc/gcc-4.4.4/Glibc-2.11.2.tar.bz2Glibc-ports-2.11.tar.bz2http://ftp.gnu.org/gnu/glibc/Gmp-4.2.tar.bz2http://ftp.gnu.o原创 2022-04-21 08:41:20 · 2290 阅读 · 0 评论 -
busybox概述
busybox是什么?(1)busybox是Linux上的一个应用程序(application),即只有一个ELF文件头。 (2)它整合了许多Linux上常用的工具和命令(utilities), 如rm, ls, gzip, tftp等。对于这些工具和命令,busybox中的实现可能不是最全的,但却是最常用的,因此它的特点就是短小精悍,特别适合对尺寸很敏感的嵌入式系统。(3)busybox的官方网站是http://www.busybox.net/,在这里你可以找到与b...原创 2022-04-21 08:25:18 · 14063 阅读 · 0 评论