linux系统是如何管理文件的
本篇内容主要讲解“linux系统是如何管理文件的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux系统是如何管理文件的”吧!
创新互联,专注为中小企业提供官网建设、营销型网站制作、响应式网站、展示型成都网站设计、成都网站制作等服务,帮助中小企业通过网站体现价值、有效益。帮助企业快速建站、解决网站建设与网站营销推广问题。
一、什么是文件系统?
在这之前,我们有必要了解一下文件系统的概念----它是操作系统用于明确存储设备或分区上的文件的方法和数据结构;也就是说,在存储设备上组织文件的方法。所以在操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统(文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。专业的讲,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等;打个非常不切当的比喻,只是为了好理解,莫见怪,哈哈哈-----比如我们在建房子的时候,你首先得设计结构来,然后分配好任务来,要准备哪些材料来;房子建好了的时候,你搬进来住的时候,你得考虑空间大小等方面,这里的文件系统就是你自己的各方面考虑的想法。)
二、inode结构体:
1、在讲这个之前,我想接触过Linux的好友,都会听过这句话:在linux系统下,一切都是文件。这个确实是,怎么讲,不知道你有没有注意,在windows下,我们可以看到硬盘分区:C盘、D盘、E盘等,但是你在linux下,你是看不到这样的分盘标识符的。但是它是需要硬盘来提供存储管理的(这句话感觉说完,自己有点傻,是人都知道要物理内存)。在一块物理硬盘中可以分为两大区域:一个是硬盘内容存储管理表项,另一个是真正存储内容的区域。操作系统访问硬盘时是先去读取硬盘内容管理表(作为搜找一个文件存储路径的索引),从中找到我们要访问的那个文件的扇区级别的信息,然后再通过这个信息去查询真正存储内容的区域,最后得到我们要的文件。
2、什么是inode呢? 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫扇区(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。这种由多个扇区组成的块是文件存取的最小单位,块的大小,最常见的是4KB,即连续八个sector组成一个block,文件数据都储存在块中,那么很明显,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创年日期、文件的大小等等。这种储存元信息的区域叫做inode,中文译名为”索引节点”。inode (index node) 表中包含文件系统的所有文件列表
3、在linux系统下,操作系统最初拿到的信息是文件名,最终得到的是文件内容。第一步就是去查询硬盘内容管理表,这个管理表中以文件为单位记录了各个文件的各种信息,每一个文件有一个信息列表数据结构(我们叫inode结构体,i节点,其实质是一个结构体,这个结构体有很多元素,每个元素记录了这个文件的一些信息,其中就包括文件名、文件在硬盘上对应的扇区号、块号那些东西·····)
注意:硬盘管理的时候是以文件为基本单位的,每个文件一个inode结构体,每个inode有一个数字编号,对应一个结构体,结构体中记录了各种信息。(我们操作系统拿到一个文件名后就会在硬盘内容管理表中利用文件名循环匹配硬盘内容管理表中的文件信息节点inode,怎么匹配呢?我觉得应该是拿文件名去匹配节点里的一个结构体指向元素,差不多和c语言里面构建了一个结构变量,然后通过这个结构体变量来访问结构体内的内容原理是一样的)。
4、小结:i节点就是我们操作系统中用来记录文件各种信息(存储、大小之类)的一种数据结构,这种数据结构能够让我们去管理硬盘上的存储文件。
三、vnode结构体:
1、在讲这之前,我们还是要讲一下什么是文件描述符,前面的文章我只是简单的讲了一下,这里还是补充一下:
a、文件描述符(fd)的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表。
b、操作系统规定,fd从0开始依次增加。fd也是有最大限制的,在linux的早期版本中(0.11)fd最大是20,所以当时一个进程最多允许打开20个文件。linux中文件描述符表是个数组(不是链表),所以这个文件描述符表其实就是一个数组,fd是index,文件表指针是value
c、fd中0、1、2已经默认被系统占用了,因此用户进程得到的最小的fd就是3了。linux内核占用了0、1、2这三个fd是有用的,当我们运行一个程序得到一个进程时,内部就默认已经打开了3个文件,这三个文件对应的fd就是0、1、2。这三个文件分别叫stdin、stdout、stderr。也就是标准输入、标准输出、标准错误,因此用户进程得到的最小的fd就是3了。
2、一个程序的运行就是一个进程,我们在该程序中打开的文件就属于某个进程。每个进程都有一个数据结构用来记录这个进程的所有信息(叫进程信息表),进程信息表中有一个指针,该指针会指向一个文件管理表,文件管理表中记录了当前进程打开的所有文件及其相关信息。文件管理表中用来索引各个打开的文件的index就是文件描述符fd,我们最终找到的就是一个已经被打开的文件的管理结构体vnode(也就是说vnode就是专门用来管理已经被打开的文件的);一个vnode中就记录了一个被打开的文件的各种信息(比如文件大小,文件在内存中的位置),而且我们只要知道这个文件的fd,就可以很容易的找到这个文件的vnode进而对这个文件进行各种操作。
3、小结:
在我们的动态文件中,我们的内存中有一个所有的进程管理表,我们打开一个文件的时候就要去这个进程管理表中找到对应的一个进程,这个进程里有一个该进程的信息管理表,其实是一个结构体,这个结构体中其中有一个元素指针指向保存着所有的打开的文件信息的表,叫做文件管理表,文件管理表通过文件描述符fd来找到某一个具体打开的文件,对于一个具体打开的文件,该文件的各种信息(在内存中存储位置、存储大小等)由vnode管理,vnode就是一个结构体,里面有文件指针这个元素,这个指针表示当前我们正在操作文件流的哪个位置。
到此,相信大家对“linux系统是如何管理文件的”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
分享标题:linux系统是如何管理文件的
文章地址:http://ybzwz.com/article/ieicci.html