
fs
文章平均质量分 85
qwaszx523
努力成长的小菜鸟
展开
-
linux文件系统的系统分析--(五)路径名的查找
do_path_lookup是文件系统中最基本的函数,也是非常重要的,里面各种情况,各种goto,总之各种坑爹。。 没能把所有的goto都理清,只看了标准情况下的路径查找,但主要的关键点都是一样的,弄清了关键点,心中对文件系统的路径名查找就有了概念。不管绝对路径名,相对路径名,还是带符号链接的,又有什么质的区别呢? do_path_lookup分为转载 2017-06-06 16:14:28 · 550 阅读 · 0 评论 -
linux文件系统的系统分析--(七)sysfs下属性文件的创建
属性文件的建立和目录的建立相差不大,因为不管目录还是普通文件,都由一个sysfs_dirent代表sysfs_create_file-->sysfs_add_file-->sysfs_add_file_mode[cpp] view plain copyintsysfs_add_file_mode(struct sysfs_diren转载 2017-06-06 16:19:31 · 454 阅读 · 0 评论 -
linux文件系统的系统分析--(八)sysfs中sysfs_dirent与inode dentry的关系
对于具体的文件系统,因为在vfs层下,所以必须有inode和dentry才能用,但从前两篇中我们只看到了sysfs中的sysfs_dirent搭建起来的目录树,通过sysfs_dirent与kobject的紧密关系,也可看到kobject的层次关系。 但前面的创建目录和创建文件,都没有inode和dentry,下面我们就看看sysfs中sysfs_dirent与inode d转载 2017-06-06 16:21:35 · 536 阅读 · 0 评论 -
linux文件系统的系统分析--(九)sysfs下属性文件的读写
sysfs的属性文件的读写,我们先看下open,open系统调用最终会调用sysfs_open_file struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; //获取sysfs_dirent结构struct kobject *kobj = attr_sd->s_parent->s_dir.转载 2017-06-06 16:23:14 · 828 阅读 · 0 评论 -
linux文件系统的系统分析--(六)sysfs下目录的创建
对sysfs和设备模型有了解的都会知道sysfs实际是为了将设备模型导出到用户空间的一个内存文件系统。 设备模型的关键结构体kobject会组成设备模型的树形结构,而sysfs的关键结构体sysfs_dirent也是类似的树形的结构,vfs中的dentry同样是类似的树形结构。 sysfs目录文件的创建都是由设备模型的上层构件(bus device dr转载 2017-06-06 16:17:16 · 490 阅读 · 0 评论 -
Linux VFS文件系统之rootfs注册与挂载
------------------------------------------------#纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang-------------------------------------------------一: 序言 文件系统在linux这个“阿房宫”转载 2017-06-07 14:47:42 · 972 阅读 · 0 评论 -
Linux VFS文件系统之创建文件
----------------------------#纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang----------------------------一: 概述 在上文中分析了VFS根目录是如何创建的;既然有了根VFS这棵树就能开枝散叶,在内存中慢慢发展壮大;本文将介绍如何在VFS中建立一个目转载 2017-06-07 15:07:21 · 1847 阅读 · 0 评论 -
Linux VFS文件系统之打开(Open)文件
------------------------------------------------#纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang-------------------------------------------------一: 概述 文件的打开读写操作是一项复杂的工作, 本文只讨论转载 2017-06-07 15:09:12 · 1502 阅读 · 0 评论 -
Linux VFS文件系统之读写(read/write)文件
------------------------------------------------ #纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang-------------------------------------------------一: 概述 在上文中讨论了VFS层是如何打开一个文件的,本文就转载 2017-06-07 15:11:06 · 3016 阅读 · 0 评论 -
Linux文件系统之proc文件系统
----------------------------------------------- #纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang-------------------------------------------------一: 概述 Proc文件系统是一个虚拟文件系统, 它是一转载 2017-06-07 15:12:29 · 579 阅读 · 0 评论 -
sysfs文件系统之初始化
------------------------------------------------ #纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang------------------------------------------------- sysfs文件系统和procfs类似,也是一种内存文件系统转载 2017-06-07 15:13:41 · 567 阅读 · 0 评论 -
sysfs文件系统之建立文件
------------------------------------------------ #纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang-------------------------------------------------在linux内核fs/sysfs目录下面dir.c是建立目录的文件,转载 2017-06-07 15:14:54 · 587 阅读 · 0 评论 -
Linux内核查找文件操作函数的过程
先根据路径找到父目录项,然后找到对应的i_node,i_ndoe的成员 file_operations * i_fop是指向文件操作函数集的指针。在创建文件的i_node时会设定 file_operations * i_fop的值。一般默认使用init_special_inode()函数进行设置,其代码如下:void init_special_inode(struct inode原创 2017-06-07 11:32:48 · 948 阅读 · 0 评论 -
sysfs文件系统之读写文件
------------------------------------------------ #纯属个人理解,如有问题敬请谅解!#kernel version: 2.6.26#Author: andy wang------------------------------------------------- 上面的文章分析了sysfs中文件的创建过程, 既然文件已经建立起转载 2017-06-07 15:16:10 · 1942 阅读 · 0 评论 -
进程中保存文件信息的方法
下图可以很直观的说明进程保存文件信息的方法:: 在进程结构体struct task_struct中有两个变量fs_truct * fs和files_struct *files保存了文件相关的信息。其中fs_truct * fs保存了文件系统的相关信息,比如文件系统挂载的根目录和当前目录以及对应的目录项。files_struct *files保存了进程打开的文件的信息原创 2017-06-14 17:51:47 · 921 阅读 · 0 评论 -
linux文件系统的系统分析--(四)sysfs的安装和挂载
在上一次分析rootfs的安装时,其实是不准确的,应该称为安装根文件系统。 安装根文件系统分为两个阶段: 1、内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录。 2、内核在空目录上安装实际根文件系统。比如pc上的ext4,比如嵌入式中用到的各种flash的根文件系统。 这一次分析sysfs,转载 2017-06-06 16:12:22 · 748 阅读 · 0 评论 -
linux文件系统的系统分析--(三)rootfs的安装
在《linux文件系统的系统分析--(一)文件系统类型的注册》我们以rootfs为例分析了文件系统是如何注册的,接着我们就分析rootfs的安装。 在mnt_init-->init_mount_tree:[cpp] view plain copystatic void __init init_mount_tree(转载 2017-06-06 16:06:29 · 576 阅读 · 0 评论 -
Mount挂载
挂载的概念 :当要使用某个存储设备时,必须先把这个设备映射到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备,而这些对应的动作就是“挂载”。 Mount命令可以实现挂载,命令格式: mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文原创 2017-05-24 14:23:01 · 486 阅读 · 0 评论 -
Linux底层文件系统实现
1、引言Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录,而末端的叶子为包含数据的文件。当我们给出一个文件的完整路径时,我们从根目录出发,经过沿途各个目录,最终到达文件。我们可以对文件进行许多操作,比如打开和读写。在Linux文件管理相关命令中,我们看到许多对文件进行操作的命令。它们大都基于对文件的转载 2017-05-26 09:53:41 · 989 阅读 · 0 评论 -
Linux下磁盘分区和目录的关系
1、任何一个分区都必须挂载到某个目录下(我安装双系统的时候,将一个分区挂载在/目录下); 2、目录是逻辑上的区分,分区是物理上的区分; 3、磁盘Linux分区都必须挂载到目录树中某个具体的目录上才能进行读写操作(这点在安装Linux系统的时候,需要你手动选择挂载,这也是和安装Windows系统不同的地方); 4、根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分原创 2017-05-26 10:20:35 · 5724 阅读 · 0 评论 -
存储设备格式化
建立文件系统,一个分区只有建立了某种文件系统后,这个分区才能使用,建立文件系统过程就是用相应格式化工具格式化分区的过程,你格式化硬盘或U盘,都要求你指定一个文件系统格式。 在Linux操作系统中,几乎支持目前主流的文件系统,包括Windows的文件系统,但是Windows就不支持ext2,3,4系列的文件系统格式,这也就是为什么在Linux系统下为什么可以看到Windows下的分区,而原创 2017-05-26 10:21:59 · 582 阅读 · 0 评论 -
元数据
元数据被定义为:描述数据的数据,对数据及信息资源的描述性信息。元数据(Metadata)是描述其它数据的数据(data about other data),或者说是用于提供某种资源的有关信息的结构数据(structured data)。原创 2017-05-26 10:26:52 · 342 阅读 · 0 评论 -
vfs中的dentry、inode、super_block概念
首先vfs是内存中维护的虚拟数据,是对各种fs的高层次的抽象,一般主要包括:dentry、inode、super_block这几个真实的文件系统物理信息的内存表示,通过管理这些数据结构,就完成了对该文件系统的操作。 对于一个文件系统而言,super_block是最关键的数据,它代表了这个文件系统自身,它存有fs中文件块的大小,超级块的操作函数等,超级块的内转载 2017-05-26 10:32:04 · 658 阅读 · 0 评论 -
Linux 文件系统(结构篇)
文件系统是对一个存储设备上的数据和元数据进行组织的机制(教材式还是需要的),在前面的概念篇有说到,Linux支持大多数文件系统,可以预料到Linux文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。Linux源码(Linux/fs文件夹下)下会有Linux支持的各种文件系统的代码实现,每种文件系统之间肯定是存在差异的,应用层上层总不能为了支转载 2017-05-26 11:07:19 · 583 阅读 · 0 评论 -
Linux 内核文件系统(进阶篇)
要访问一个文件就得先访问一个目录,才能根据文件名从目录中找到该文件的目录项,进而找到其inode节点。这里我们以绝对路径访问方式来具体看看其流程是如何的:假如根据绝对路径寻找文件/tem/temp/wenqian的:1、首先找到根文件系统的根目录文件“/”的dentry和inode(通过dentry找到对应的inode); 2、通过这个inode提供的操作接口i_op->loo转载 2017-05-26 11:08:37 · 371 阅读 · 0 评论 -
Linux 内核文件系统关键数据结构
1、超级块 super block超级块(super block)代表了整个文件系统本身,代表一个具体的已安装文件系统,通常。超级块是对应文件系统自身的控制块结构,超级块保存了文件系统设定的文件块大小,超级块的操作函数,文件系统内所有的inode也都要链接到超级块的链表头,当然还包括其余的信息,通过超级块对象,我们可以找到这些必要的信息。超级块是文件系统的心脏,是与文件系统相关的,转载 2017-05-26 11:10:03 · 1282 阅读 · 0 评论 -
VFS文件系统结构分析
VFS是Linux非常核心的一个概念,linux下的大部分操作都要用到VFS的相关功能。这里从使用者的角度,对VFS进行了简单说明。使用者不但需要知道Linux下有哪些文件操作的函数,还需要对VFS的结构有一个比较清晰的了解,才能更好的使用它。例如hard link 与symbolic,如果没有VFS结构的相了解,就无法搞清楚如何使用它们。本文首先是建立了一个简单的目录模型,然后介转载 2017-06-06 09:24:54 · 489 阅读 · 0 评论 -
Linux VFS分析(一)
首先介绍VFS的数据结构VFS抽象数据结构- 超级块(superblock): 存放文件系统控制信息- 索引节点(inode): 存放具体文件的一般信息,用来标识存储介质上的文件- 文件(file): 存放已打开的文件和进程之间交互的信息- 目录项(dentry): 存放文件的名称和文件的路径 其他重要数据结构包括转载 2017-06-06 10:10:38 · 612 阅读 · 0 评论 -
Linux VFS分析(二)
4.对文件系统的管理inode的管理:Inode-cache hash表inode_hashtable索引节点缓存dentry的管理:我们知道,若干dentry描绘了一个树型的目录结构,这就是用户所看到的目录结构,每个dentry指向一个索引节点(inode)结构然而,这些dentry结构并不是常驻内存的,因为整个目录结构可能会非常大,以致于内存根本装不下。Linux的转载 2017-06-06 10:12:42 · 597 阅读 · 0 评论 -
从文件 I/O 看 Linux 的虚拟文件系统
Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。本文在简要介绍 VFS 的相关数据结构后,以文件 I/O 为切入点深入 Linux 内核源代转载 2017-06-06 11:00:47 · 459 阅读 · 0 评论 -
linux文件系统的系统分析--(一)vfs和数据结构
Linux的虚拟文件系统层的特点在于把很多不同种类文件系统的共同信息放入内核;可以通过vfs的转换来利用linux所支持挂载的实际文件系统。实际上,因为有了vfs,也可以较为方便的按照vfs的一些接口将文件系统移植过来,比如win下的ntfs和fat32就是如此。在open read等系统调用之后就是到vfs_read 等式样的函数,在vfs层做些处理后,再根据当前操作的路径所挂载在转载 2017-06-06 15:56:24 · 454 阅读 · 0 评论 -
linux文件系统的系统分析--(二)文件系统类型的注册
因为Linux支持模块机制,所以我们可以将文件系统编译为模块,所以文件系统系统类型的注册的注册有多种方式:要么已经包含在内核映像中,要么作为一个模块被动态加载。我们关注的重点是rootfs和sysfs,他们其实在系统初始化的时候就注册并安装好了,没有rootfs,linux就没法玩了。以rootfs的注册为例,来分析一下文件系统类型的注册: 在start_kernel-转载 2017-06-06 16:02:55 · 368 阅读 · 0 评论 -
字符设备文件的打开
打开字符设备文件,还是通过 sys_open() 系统调用。在经过一连串的调用后,nameidata_to_filp, 内核会走到 __dentry_open() 函数。在这个函数中,执行了以下代码片段:f->f_mapping = inode->i_mapping;f->f_path.dentry = dentry;f->f_path.mnt = mnt;f->f_pos = 0;f转载 2017-11-23 20:21:43 · 608 阅读 · 0 评论