-
文件是具有符号名的一组相关元素的有序序列,是一段程序或数据的集合。
文件是保存信息的基本结构。
信息包括相关记录或者字符流。
文件通过文件名标识。 -
文件分类
(1)按文件的数据形式分:源文件、目标文件、可执行文件。
(2)按用途分:系统文件、库文件、用户文件。
(3)按存取权限分:只读文件、读写文件、可执行文件。
(4)按保存时间分:临时文件、档案文件、永久文件。
(5)按对文件管理方式分:普通文件、目录文件、特殊文件。 -
文件结构
逻辑结构:用户可见(有结构文件,即记录式文件。无结构文件,即流式文件。)
物理结构:用户不可见(文件的存储结构,在外存上的存储)
(1)顺序(连续)文件:把逻辑上连续的文件信息依次存放到连续的物理块中。文件内容的逻辑顺序与物理存储顺序一致。
(2)串联文件:用非连续的物理块来存放文件信息,可将物理块用链指针相链接。(逻辑结构与物理结构不一致)
(3)索引文件:基于一张索引表,表中每一栏指出文件信息所在的逻辑块号和与之对应的物理块号。索引表的物理位置则由文件说明项给出。(逻辑结构与物理结构不一致)
-
文件系统:操作系统中管理磁盘或磁盘分区上的文件的方法、数据结构和软件。
-
Linux文件类型
-
文件属性用于文件的管理控制和安全保护。
-
磁盘
(1)盘片(Disk)
是硬盘中承载数据存储的介质。
(2)磁头(Head)
是通过磁性原理读取磁性介质上数据的部件。
(3)磁道(Track)
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
(4)扇区(Sector)
将一个盘片划分为若干内角相同的扇形,称为扇区。每个扇区中的数据作为一个单元同时读出或写入。扇区是硬盘数据存储的最小单位。
(5)簇(Clust,或者磁盘块,Block)
相邻的扇区组合在一起,形成一个簇。每个簇可以包括2、4、8、16、32、64个扇区。
簇是属于文件系统层面的概念(一种抽象),是文件系统中数据存储的基本单位。一个簇中只能放置一个文件的内容。
Linux中叫磁盘块(简称为块),大小通常为4KB(8个扇区)。
(6)柱面(Cylinder)
所有盘片上的同一磁道构成一个圆柱,称作柱面。数据的读/写按柱面从外向内进行,而不是按盘片进行。
磁头定位时,首先确定柱面,再确定盘片,最后确定扇区。读写数据时,当前柱面全部写满后,将磁头移动到下一个柱面。 -
文件控制块(File Control Block)是OS用来存放描述文件、管理文件的文件属性信息的数据结构。
文件 = FCB + 文件内容(数据)。
FCB是文件存在的唯一标志。
FCB中包含的内容:基本信息 、存取控制信息、使用信息。
(1)基本信息
① 文件名
② 文件物理地址和文件的长度(字节数或盘块数)
③ 文件逻辑结构
④文件主标识符和组标识符
⑤ 文件物理结构
(2) 存取控制信息类
①文件主的权限
②一般用户的权限
(3) 使用信息类
① 文件建立日期及时间
② 文件最近访问日期及时间
③ 文件最近修改日期及时间
④ 文件链接次数 -
文件名是以目录项的形式存在的。
目录项=文件名+索引节点号
文件名和索引节点分开存储 -
索引节点:是一种数据结构,该结构将目录中的文件名和其余属性信息分离存放,以便分开加载。
OS对文件的操作是通过索引节点(inode)而非文件名来完成的。
索引节点与文件一一对应,每个索引节点都有唯一的编号,称为索引节点号。
目录项中存放文件名和索引节点号,而非索引节点内容。
用户不能直接引用inode,而是通过文件名对文件进行使用 -
文件“按名存取”的实现
第一步,查找目录项,根据文件名找到文件的inode号。(可能完成一个目录树的查找过程)
第二步,根据inode号,访问inode,得到文件的属性信息,然后根据属性信息对权限进行检查。
第三步,验证合法后,系统会计算出文件的物理地址,完成对文件的操作。 -
虚拟文件系统(VFS:虚拟文件系统转换)
(1)VFS支持的文件系统
磁盘的文件系统
网络文件系统
特殊文件系统
(2)理解VFS需注意以下几点:
VFS只存在于内存中,系统启动后才建立。
VFS对逻辑文件(具体文件)系统进行抽象,并没有真正存在于磁盘分区中。
VFS提供一致的接口,统一管理逻辑文件系统。
(3)VFS中的数据结构
1.超级块数据结构
超级块描述已安装的整个文件系统的信息。
是逻辑文件系统在安装时建立的,并在文件系统卸载时被自动删除,只存在于内存中。其数据结构是super_block 。
所有超级块对象以链表的形式链接在一起。
2.索引节点(inode)结构
逻辑文件系统的索引结点是存放在磁盘上的,是一种静态结构。要使用它,必须调入内存,填写VFS的索引结点。因此,VFS索引结点是动态结点。
VFS索引节点存放关于具体文件的一般信息,其数据结构为inode。
3.目录项(dentry)结构
每个文件除了有一个索引节点inode数据结构外,还有一个目录项dentry数据结构。
inode结构记录的是文件物理上的属性,dentry结构描述的是文件逻辑上的属性。
一个dentry只能和一个inode对应。但一个inode可以对应多个dentry。
4.文件(file)结构
Linux所有文件操作都基于文件描述符(file descriptor,简称fd),它是一个整数。
Linux专门定义file数据结构,保存文件打开后文件读写位置(偏移量)等信息。这个结构称为打开的文件描述(open file description)。
每个进程打开文件后都对应一个file结构。
5.小结
超级块是对一个文件系统的描述。
索引节点是对一个文件物理属性的描述。
目录项是对一个文件逻辑属性的描述。
一个进程(或用户)打开的文件是由files_struct来描述。
整个系统所打开的文件是由file结构来描述。