文件:
一组有意义的信息/数据集合
文件的属性:
1.文件名:同一目录下不允许有重名的文件
2.标识符:操作系统用于区分各个文件的一种内部名称
3.类型:指明文件的类型
4.位置:文件的存放路径(让用户使用);在外存中的地址(操作系统使用),对用户不可见
5.大小:指明文件的大小
6.创建时间和上次修改时间
7.文件所有者信息
8.保护信息:对文件进行保护的访问控制信息
无结构文件是由一些二进制的字符流组成。这种文件没有固定的格式和结构,数据以连续的二进制形式存储。
例如常见的音频文件(如.mp3)、视频文件(如.mp4)等都属于无结构文件。
它们的特点是:
数据完整性 :文件中的数据是一个整体,不能随意拆分。如果对文件进行部分修改或截取,可能会导致文件无法正常播放或打开。
存储方式 :通常以连续的磁盘空间存储,以保证数据的完整性和读取效率。读取时需要从文件的起始位置开始,按照顺序依次读取数据。
处理方式 :对无结构文件的处理通常需要专门的软件或工具。例如,音频编辑软件可以对音频文件进行剪辑、混音等操作;视频编辑软件可以对视频文件进行剪辑、添加特效等操作
有结构文件是由一个个记录组成。每个记录包含多个字段,字段是数据的基本单位,用于存储具体的数值或文本信息。
例如常见的数据库文件(如.db)、电子表格文件(如.xlsx)等都属于有结构文件。
它们的特点是:
数据结构化 :文件中的数据按照一定的结构组织,每个记录都有相同的字段结构。例如,在一个学生信息表中,每个记录可能包含学号、姓名、性别、年龄等字段。
存储方式 :有结构文件通常以表格的形式存储,每个记录占用一行,每个字段占用一列。这种存储方式便于对数据进行查询、排序、统计等操作。
处理方式 :对有结构文件的处理可以通过数据库管理系统(如 MySQL、Oracle 等)或电子表格软件(如 Excel、WPS 表格等)进行。这些工具提供了丰富的功能,如数据查询、筛选、排序、统计等,方便用户对数据进行分析和处理
目录结构是文件系统中用于组织和管理文件的一种方式。它将文件按照一定的层次结构组织起来,方便用户查找和管理文件。
常见的目录结构有以下几种:
树形结构 :这是最常见的目录结构,它以一个根目录为起点,向下分支出多个子目录,每个子目录又可以包含多个子目录和文件。例如,在 Windows 操作系统中,C 盘是一个根目录,它下面有多个子目录,如“Program Files”、“Windows”、“Users”等。这种结构的优点是层次分明,便于查找和管理文件。
线性结构 :这种结构将文件按照线性顺序排列,每个文件都有一个唯一的编号。这种结构比较简单,但不便于查找和管理文件。例如,在一些早期的操作系统中,文件系统采用线性结构,用户需要通过文件编号来查找文件。
网状结构 :这种结构将文件按照网状的方式组织,文件之间可以有多个连接关系。这种结构的优点是灵活性高,但管理起来比较复杂。例如,在一些分布式文件系统中,文件可以分布在多个节点上,节点之间通过网络连接,形成一个网状结构。
创建文件:create
删除:delete
读:read
写:write
打开:open
关闭:close
无结构文件
有结构文件:顺序文件、索引文件、索引顺序文件
无结构文件是流式文件,由二进制或字符流组成。
例如常见的文本文件(.txt)、音频文件(.mp3)、视频文件(.mp4)等都属于无结构文件。
这种文件的特点是:
数据连续性 :文件中的数据是连续的,没有明显的分隔符或结构。例如,一个文本文件中的字符是按照输入的顺序依次存储的,没有固定的记录格式。
读写方式 :无结构文件通常以字节流的方式进行读写。读取时从文件的起始位置开始,按照顺序依次读取数据;写入时也是从文件的末尾开始,按照顺序依次写入数据。
有结构文件是记录式文件,由一组相似的记录组成,记录由若干个数据项组成。
例如常见的数据库表文件、电子表格文件等都属于有结构文件。
这种文件的特点是:
数据结构化 :文件中的数据按照一定的结构组织,每个记录都有相同的字段结构。例如,在一个学生信息表中,每个记录可能包含学号、姓名、性别、年龄等字段。
记录类型 :有结构文件中的记录可以分为可变长记录和定长记录。可变长记录是指每条记录的长度可以不同,例如在文本文件中,每行的长度可能不同;定长记录是指每条记录的长度相同,例如在数据库表文件中,每条记录的长度通常相同。
1.顺序文件
采用顺序存储
用定长记录可以实现随机存取
采用顺序结构可以快速找到某关键字对应记录
2.索引文件
建立一张索引表(定长记录的顺序文件),来记录可变长记录文件
若索引表按关键字顺序排序,则可支持快速检索
可以建立多级索引表提高检索速度
目录本身就是一种有结构的文件,它用于组织和管理文件系统中的文件和子目录。
目录文件中包含了文件和子目录的元数据信息,通过这些信息,用户可以方便地查找和访问文件
目录文件中的一条记录就是一个文件控制块(FCB)。
FCB是文件系统中用于管理文件的重要数据结构,它包含了文件的基本信息、控制信息和使用信息
FCB实现了文件名和文件之间的映射,使用户能够通过文件名来访问文件,即“按名存取”。FCB的有序集合构成了文件目录,一个FCB对应一个文件目录项
FCB的主要内容
文件名 :文件的名称,是用户识别文件的重要标识。
文件类型 :如普通文件、目录文件、设备文件等,用于区分文件的性质。
文件大小 :文件的大小,通常以字节为单位,表示文件占用的存储空间。
文件物理地址 :文件在存储介质上的物理位置,用于文件的存储和访问。
访问权限 :定义了用户对文件的访问权限,如读、写、执行等,用于保护文件的安全性。
时间戳 :记录文件的创建时间、修改时间和访问时间等,用于文件的版本管理和审计。
其他信息 :如文件的链接数、所属用户和用户组等,用于文件的管理和共享
单级目录结构是最简单的目录结构,它将所有文件和目录都放在一个目录中
不允许文件重名
两级目录结构将目录分为两个层次:主文件目录(MFD)和用户文件目录(UFD)
主文件目录 :主文件目录是系统级的目录,包含了所有用户文件目录的索引信息。每个用户文件目录在主文件目录中都有一个对应的目录项。
用户文件目录 :用户文件目录是用户级的目录,包含了该用户的所有文件和子目录的信息。用户可以在这个目录中自由地创建、删除和管理文件。
允许文件重名 :不同用户的文件目录是独立的,因此允许不同用户的文件重名。例如,用户A和用户B都可以有一个名为“file.txt”的文件,但它们分别位于各自的用户文件目录中。
多级目录结构是一种树形目录结构,它将目录和文件组织成一个层次化的树形结构。
这种结构的特点是:
树形结构 :目录和文件以树形结构组织,每个目录可以包含多个子目录和文件,子目录又可以包含更多的子目录和文件。树的根目录是整个文件系统的起点。
绝对路径 :从根目录出发,经过一系列目录到达目标文件或目录的路径称为绝对路径。绝对路径是唯一的,可以唯一地标识文件系统中的任何一个文件或目录。
相对路径 :从当前工作目录出发,到达目标文件或目录的路径称为相对路径。相对路径不是唯一的,它依赖于当前工作目录的位置。
可以用不同的文件名指向同一个文件(目录),需要设置共享计数器
索引结点包含了除文件名外的其他文件信息,如文件类型、文件大小、访问权限、时间戳等。
索引结点分为外存索引结点和内存索引结点
外存索引结点 :存储在磁盘或其他外存设备上,用于持久化保存文件和目录的元数据信息。当文件系统启动时,外存索引结点会被加载到内存中。
内存索引结点 :是外存索引结点在内存中的映像,用于提高文件访问的效率。内存索引结点通常会被缓存起来,以便快速访问文件的元数据信息。
外存与内存的数据交换都是以块为单位进行的
磁盘块(文件块)的大小与内存块、页面大小相同
文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式
要求每个文件在磁盘上占有一组连续的块
FCB中记录起始块号+长度
支持顺序访问和直接访问
连续分配的文件在顺序读/写时速度最快
分为隐式和显式链接
可以为文件分配离散的物理块
1.隐式:每个FCB给出起始和结束块号,方便拓展,不会产生碎片问题
2.显式:将各个物理块的指针显式地存放在一张表中,即文件分配表(FAT),一个磁盘仅需一张FAT,并常驻内存,物理块号可以隐含
为每个文件建立一张索引表,存放索引表的磁盘块称为索引块
文件数据存放的磁盘称为数据块
在FCB中存放索引表
支持随机访问,逻辑块号可以隐含
索引表太大的解决方案:
1.链接方案:可以将多个索引块链接起来存放(每个索引块中存放指向下一个索引块的地址)
2.多层方案:多层索引表(会造成多次I/O操作)
3.混合方案:有直接和间接
存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)。
存储空间初始化时,需要将各个文件卷划分为目录区和文件区。
目录区 :主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息,如空闲表、位示图、超级块等。
文件区 :主要存放文件数据
1.空闲表法
系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息,再将所有空闲区按其起始盘块号递增的次序排列
2.空闲链表法
空闲盘块链:把磁盘上所有空闲块以盘块为单位链成一个链。分配时从链首开始摘下适当的盘块,回收时加入到空闲盘块链链尾
空闲盘区链:把磁盘上所有空闲盘区(每个盘区可包含若干个盘块)链成一个链。在每个盘区上除含有用于指示下一空闲盘区的指针外,还应有指明本盘区大小(盘块数)的信息。分配时可采用首次适应算法
3.位示图法
用一张位图来记录每一个物理块的空闲状态。位图中的每一位代表一个存储块,初始时所有位都为0,表示这些存储块都为空闲状态;当分配一个存储块时,将对应的位置设为1;当回收一个存储块时,将对应的位置重新设为0。这种方法适用于连续分配和离散分配。
4.成组链接法
超级块 :成组链接法必须要有一个超级块,作为硬盘所有物理块的头指针,指向下一组空闲磁盘块。
分配 :分配时,先查看超级块所在的组内是否有足够的空闲盘块。如果有,直接从组内分配;如果没有,将下一组的栈数据更新读入到超级块中,更新对应的指针连接情况。
回收 :如果超级块的栈仍有空位,直接回收,尾插到本组(超级块所在组)中;如果超级块的栈没有空位,新构成的组将自己的相关信息更新到超级块,同时头插到整个成组链表中
1.创建文件
create系统调用
3个参数:所需外存空间大小,文件存放路径,文件名
主要做了两件事:在外存中找到文件所需空间;在目录中创建文件对应的目录项
2.删除文件
delete系统调用
主要参数:文件存放路径、文件名
主要做了几件事:找到文件名对应目录项;回收文件占用的磁盘块;删除目录项
3.打开文件
open系统调用
主要参数:文件存放路径、文件名、对文件的操作类型(只读/读写)
主要做的几件事:找到目录项并检查操作权限;将目录项复制到内存中的“打开文件表”中并返回一个编号
4.关闭文件
close系统调用
主要参数:
主要做了几件事:将进程的打开文件表相应表项删除;回收分配给该文件的内存空间等资源;打开计数器减一,若为0则删除。
5.读文件
read系统调用
指明哪个文件(读指针),读多少,读入的数据存放在哪
6.写文件
write系统调用
指明哪个文件(写指针),写多少数据,写回外存的数据存放在内存中的位置
基于索引结点的共享方式(硬链接)
基于符号链的共享方式(软链接)
多用户同时使用一份文件
1.硬链接
硬链接基于索引节点的文件共享方式,它通过共享同一个索引节点来实现对文件的多重访问。
硬链接是基于索引节点的共享方式。当创建一个硬链接时,文件系统会为该链接分配一个新的文件名,但这个新文件名指向的是同一个索引节点。因此,硬链接和原始文件实际上是同一个文件的两个不同名字,共享相同的索引节点和数据块。
硬链接的特点
共享数据块:硬链接和原始文件共享相同的索引节点和数据块。对文件内容的修改,无论通过原始文件名还是硬链接名进行,都会反映在另一个上。
独立的文件名:硬链接有自己的文件名,但文件名的删除不会影响文件的数据块和索引节点。只有当所有指向该索引节点的文件名都被删除后,文件数据才会被释放。
限制:硬链接不能跨文件系统(分区)创建,也不能链接到目录(只有某些特殊文件系统允许硬链接到目录)
2.软链接
文件中存放文件的指针
Linux类型文件,类似与快捷方式
口令存放在FCB中,进行比较
开销小,不安全
提供“密码”对文件加密
也要用“密码”解密
在每个文件的FCB(或索引结点)中增加一个访问控制列表(ACL),记录该用户可以对该文件进行哪些操作
精简的访问列表:
以“组”为单位,标记各“组”用户可以对文件执行哪些操作。如分为系统管理员、文件主、文件主伙伴、其他用户。
访问类型:读/写/执行/删除……
自上而下:
用户/应该程序
用户接口
文件目录系统
存取控制模块
逻辑文件系统与文件缓冲区
物理文件系统
辅助分配模块、设备管理模块
设备
1.物理格式化:
低级格式化
划分扇区,检测扇区,并用备用扇区替换
2.逻辑格式化
将磁盘分区(卷),完成各分区的文件系统初始化
文件系统在内存中的结构
±----------------------------+
| 超级块(Superblock) | <- 文件系统的全局信息
±----------------------------+
| 索引节点(Inode)表 | <- 文件和目录的元数据
±----------------------------+
| 目录项(Directory Entry) | <- 文件名到索引节点的映射
±----------------------------+
| 数据块(Data Block)缓存 | <- 文件的实际数据
±----------------------------+
| 文件系统缓存(Cache) | <- 缓存的元数据和数据块
±----------------------------+
| 打开文件表(Open File Table)| <- 管理打开文件的状态
±----------------------------+
超级块是文件系统的核心元数据结构,它存储了文件系统的全局信息。超级块通常存储在磁盘的固定位置,并在文件系统挂载时加载到内存中。
索引节点(Inode)是文件系统中用于存储文件和目录元数据的数据结构。每个文件或目录都有一个唯一的索引节点。
目录项是目录文件中的条目,用于将文件名映射到对应的索引节点编号。
数据块是文件系统中用于存储文件实际数据的单位。文件系统将磁盘划分为固定大小的数据块,并通过索引节点中的指针来管理这些数据块。
文件系统缓存是内核在内存中维护的一个区域,用于缓存文件系统中的数据和元数据。缓存可以显著提高文件系统的性能。
操作系统为每个打开的文件维护一个表项,记录文件的当前状态和访问信息。
当用户或应用程序请求访问文件系统时,内核会通过以下步骤处理请求:
/home/user/file.txt
)逐级解析目录项,找到对应的索引节点。特点:
1.向上层用户程序提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
2.要求下层的文件系统必须实现某些规定的函数功能,一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
3.每打开一个文件,VFS就在主存中新建一个Vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统(Vnode只在主存,inode既会调入内存也会在外存中)
用户>>>通过POSIX标准接口>>>VFS>>>UFS,NTFS,FAT
mounting
即文件系统的装载/安装
1.在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息
2.新挂载的文件系统要想VFS提供一个函数地址列表
3.将新文件系统加到挂载点(挂载在某个父目录下)