linux内核之文件系统

linux内核之文件系统

ID:14201333

大小:266.50 KB

页数:8页

时间:2018-07-26

linux内核之文件系统_第1页
linux内核之文件系统_第2页
linux内核之文件系统_第3页
linux内核之文件系统_第4页
linux内核之文件系统_第5页
资源描述:

《linux内核之文件系统》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、linux内核之文件系统作者:harveywang邮箱:harvey.perfect@gmail.com新浪博客地址:http://blog.sina.com.cn/harveyperfect,有关于减肥和学习英语相关的博文,欢迎交流本文主要是基于百度文库的《Linux2.4.30内核文件系统学习(多图).doc》和360doc的《Linux内核虚拟文件系统》修改而来,当然还参考了其他的一些文档,在此就不一一列出了。本来在看到这些文章后,都没有勇气再写点文件系统方面的东西了,这些文章实在太精彩了。最后还是鼓足勇气决定把整理的资料

2、增加了一点自己的理解写下来,主要目的是让各位高手看看我的理解是否正确,另外就是备忘。1、如何描述一个文件我们先看看一个文件在内存和磁盘上是如何描述的。每个文件至少要有一个数据结构存放该文件的信息,包括uid、gid、flag、文件长度、文件内容存放位置的数据结构等。在Linux中这个数据结构被称为inode,本来inode中也应该包括文件名称等信息,但是由于符号链接的存在,导致一个文件可能存在多个文件名称,因此把和文件名称相关的信息从inode中提出,专门放到dentry结构中。dentry通过其成员变量d_inode指向对应的

3、inode数据结构。如下图所示图1另外,inode结构中还包括了成员i_fop,其类型是structfile_operations,其中包括的针对该文件的一些操作接口,如上图所示。2、根据路径名寻找目标文件在Linux中目录也被作为文件看待,只是目录是一种比较特殊的文件。其特殊之处在于文件的内容是该目录中文件和子目录的dentry的描述符,通过这些dentry的描述符可以找到文件或子目录的dentry,进而找到相应的inode。下面我们看看如果根据绝对路径寻找一个文件/tmp/temp/abc的。1、 首先找到根文件系统的根目录

4、文件的dentry和inode2、由这个inode提供的操作接口i_op->lookup(),找到下一层节点‘tmp’的dentry和inode3、由‘tmp’的inode找到‘temp’的dentry和inode4、最后由‘temp’的inode找到‘abc’的dentry和inode可以看到,整个寻找过程是一个递归的过程。我们再看看如何通过相对路径寻找文件/tmp/temp/abc,假如我们目前的工作目录为/tmp/temp/dir_a中,比如我们通过拷贝命令拷贝该文件:cp../abc./如何通过相对路径寻找文件呢?我们来

5、看看dentry这个数据结构的成员,其中有一个是d_parent,数据结构定义如下structdentry{删除了无关的成员structdentry*d_parent;/*parentdirectory*/structinode*d_inode;/*Wherethenamebelongsto-NULLis*negative*/unsignedchard_iname[DNAME_INLINE_LEN];/*smallnames*/}d_parent指向了本目录的父目录的dentry,这样就在通过“..”时就是通过该指针找到的父目录

6、dentry,找到父母inode,进而找到父目录下的所有文件的信息。3、进程中打开的文件一个文件可以被多次打开,并且多个进程对一个文件的访问权限可能不同,因此打开方式就会不同(只读、读写、可执行)。而dentry和inode只能描述一个物理的文件,无法描述“打开”这个概念。因此有必要引入file结构,来描述一个“被打开的文件”。每打开一个文件,就创建一个file结构。file结构中包含以下信息:打开这个文件的进程的uid,pid打开的方式读写的方式当前在文件中的位置实际上,打开文件的过程正是建立file,dentry,inode

7、之间的关联的过程。如下图图2在进程中如何和打开的文件相关联呢?我们来看看进程的数据结构structtask_struct{只保留了相关信息structfiles_struct*files;/*openfileinformation*/}每个进程包括“files”成员,其类型为files_struct。如下图所示图3进程中所有打开的文件的指针都存在了fd_arrary[]数组中。4、虚拟文件系统Linux通过虚拟文件系统(VFS)来支持不同的具体的文件系统,那么VFS到底是什么?从程序员的角度看,VFS就是一套代码框架(frame

8、work),它将用户与具体的文件系统隔离开来。每个要通过mount命令挂接到Linux系统的存储设备,如磁盘、光盘等(它们各自对应具体的文件系统),每个设备对应的文件系统都要按照VFS的要求提供一套统一的接口。这样,用户就可以使用这些统一的接口在不同的文件系统中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。