操作系统(第四章)

操作系统(第四章)

一、文件的属性

文件:

一组有意义的信息/数据集合

文件的属性:

1.文件名:同一目录下不允许有重名的文件

2.标识符:操作系统用于区分各个文件的一种内部名称

3.类型:指明文件的类型

4.位置:文件的存放路径(让用户使用);在外存中的地址(操作系统使用),对用户不可见

5.大小:指明文件的大小

6.创建时间和上次修改时间

7.文件所有者信息

8.保护信息:对文件进行保护的访问控制信息

二、数据的组织

1、无结构文件

无结构文件是由一些二进制的字符流组成。这种文件没有固定的格式和结构,数据以连续的二进制形式存储。

例如常见的音频文件(如.mp3)、视频文件(如.mp4)等都属于无结构文件。

它们的特点是:
数据完整性 :文件中的数据是一个整体,不能随意拆分。如果对文件进行部分修改或截取,可能会导致文件无法正常播放或打开。
存储方式 :通常以连续的磁盘空间存储,以保证数据的完整性和读取效率。读取时需要从文件的起始位置开始,按照顺序依次读取数据。
处理方式 :对无结构文件的处理通常需要专门的软件或工具。例如,音频编辑软件可以对音频文件进行剪辑、混音等操作;视频编辑软件可以对视频文件进行剪辑、添加特效等操作

2、有结构文件

有结构文件是由一个个记录组成。每个记录包含多个字段,字段是数据的基本单位,用于存储具体的数值或文本信息。

例如常见的数据库文件(如.db)、电子表格文件(如.xlsx)等都属于有结构文件。

它们的特点是:
数据结构化 :文件中的数据按照一定的结构组织,每个记录都有相同的字段结构。例如,在一个学生信息表中,每个记录可能包含学号、姓名、性别、年龄等字段。
存储方式 :有结构文件通常以表格的形式存储,每个记录占用一行,每个字段占用一列。这种存储方式便于对数据进行查询、排序、统计等操作。
处理方式 :对有结构文件的处理可以通过数据库管理系统(如 MySQL、Oracle 等)或电子表格软件(如 Excel、WPS 表格等)进行。这些工具提供了丰富的功能,如数据查询、筛选、排序、统计等,方便用户对数据进行分析和处理

3、目录结构

目录结构是文件系统中用于组织和管理文件的一种方式。它将文件按照一定的层次结构组织起来,方便用户查找和管理文件。

常见的目录结构有以下几种:
树形结构 :这是最常见的目录结构,它以一个根目录为起点,向下分支出多个子目录,每个子目录又可以包含多个子目录和文件。例如,在 Windows 操作系统中,C 盘是一个根目录,它下面有多个子目录,如“Program Files”、“Windows”、“Users”等。这种结构的优点是层次分明,便于查找和管理文件。
线性结构 :这种结构将文件按照线性顺序排列,每个文件都有一个唯一的编号。这种结构比较简单,但不便于查找和管理文件。例如,在一些早期的操作系统中,文件系统采用线性结构,用户需要通过文件编号来查找文件。
网状结构 :这种结构将文件按照网状的方式组织,文件之间可以有多个连接关系。这种结构的优点是灵活性高,但管理起来比较复杂。例如,在一些分布式文件系统中,文件可以分布在多个节点上,节点之间通过网络连接,形成一个网状结构。

三、操作系统向上提供的功能

创建文件:create

删除:delete

读:read

写:write

打开:open

关闭:close

四、文件的逻辑结构

无结构文件

有结构文件:顺序文件、索引文件、索引顺序文件

1.无结构文件

无结构文件是流式文件,由二进制或字符流组成。

例如常见的文本文件(.txt)、音频文件(.mp3)、视频文件(.mp4)等都属于无结构文件。

这种文件的特点是:
数据连续性 :文件中的数据是连续的,没有明显的分隔符或结构。例如,一个文本文件中的字符是按照输入的顺序依次存储的,没有固定的记录格式。
读写方式 :无结构文件通常以字节流的方式进行读写。读取时从文件的起始位置开始,按照顺序依次读取数据;写入时也是从文件的末尾开始,按照顺序依次写入数据。

2.有结构文件

有结构文件是记录式文件,由一组相似的记录组成,记录由若干个数据项组成。

例如常见的数据库表文件、电子表格文件等都属于有结构文件。

这种文件的特点是:
数据结构化 :文件中的数据按照一定的结构组织,每个记录都有相同的字段结构。例如,在一个学生信息表中,每个记录可能包含学号、姓名、性别、年龄等字段。
记录类型 :有结构文件中的记录可以分为可变长记录和定长记录。可变长记录是指每条记录的长度可以不同,例如在文本文件中,每行的长度可能不同;定长记录是指每条记录的长度相同,例如在数据库表文件中,每条记录的长度通常相同。

1.顺序文件

采用顺序存储

用定长记录可以实现随机存取

采用顺序结构可以快速找到某关键字对应记录

2.索引文件

建立一张索引表(定长记录的顺序文件),来记录可变长记录文件

若索引表按关键字顺序排序,则可支持快速检索

可以建立多级索引表提高检索速度

五、文件目录

目录本身就是一种有结构的文件,它用于组织和管理文件系统中的文件和子目录。

目录文件中包含了文件和子目录的元数据信息,通过这些信息,用户可以方便地查找和访问文件

1.文件控制块FCB

目录文件中的一条记录就是一个文件控制块(FCB)。

FCB是文件系统中用于管理文件的重要数据结构,它包含了文件的基本信息、控制信息和使用信息

FCB实现了文件名和文件之间的映射,使用户能够通过文件名来访问文件,即“按名存取”。FCB的有序集合构成了文件目录,一个FCB对应一个文件目录项

FCB的主要内容

文件名 :文件的名称,是用户识别文件的重要标识。
文件类型 :如普通文件、目录文件、设备文件等,用于区分文件的性质。
文件大小 :文件的大小,通常以字节为单位,表示文件占用的存储空间。
文件物理地址 :文件在存储介质上的物理位置,用于文件的存储和访问。
访问权限 :定义了用户对文件的访问权限,如读、写、执行等,用于保护文件的安全性。
时间戳 :记录文件的创建时间、修改时间和访问时间等,用于文件的版本管理和审计。
其他信息 :如文件的链接数、所属用户和用户组等,用于文件的管理和共享

2.单级目录

单级目录结构是最简单的目录结构,它将所有文件和目录都放在一个目录中

不允许文件重名

3.两级目录结构

两级目录结构将目录分为两个层次:主文件目录(MFD)和用户文件目录(UFD)

主文件目录 :主文件目录是系统级的目录,包含了所有用户文件目录的索引信息。每个用户文件目录在主文件目录中都有一个对应的目录项。
用户文件目录 :用户文件目录是用户级的目录,包含了该用户的所有文件和子目录的信息。用户可以在这个目录中自由地创建、删除和管理文件。
允许文件重名 :不同用户的文件目录是独立的,因此允许不同用户的文件重名。例如,用户A和用户B都可以有一个名为“file.txt”的文件,但它们分别位于各自的用户文件目录中。

4.多级目录文件

多级目录结构是一种树形目录结构,它将目录和文件组织成一个层次化的树形结构。

这种结构的特点是:
树形结构 :目录和文件以树形结构组织,每个目录可以包含多个子目录和文件,子目录又可以包含更多的子目录和文件。树的根目录是整个文件系统的起点。
绝对路径 :从根目录出发,经过一系列目录到达目标文件或目录的路径称为绝对路径。绝对路径是唯一的,可以唯一地标识文件系统中的任何一个文件或目录。
相对路径 :从当前工作目录出发,到达目标文件或目录的路径称为相对路径。相对路径不是唯一的,它依赖于当前工作目录的位置。

5.无环图目录结构

可以用不同的文件名指向同一个文件(目录),需要设置共享计数器

6.索引结点:

索引结点包含了除文件名外的其他文件信息,如文件类型、文件大小、访问权限、时间戳等。

索引结点分为外存索引结点和内存索引结点

外存索引结点 :存储在磁盘或其他外存设备上,用于持久化保存文件和目录的元数据信息。当文件系统启动时,外存索引结点会被加载到内存中。

内存索引结点 :是外存索引结点在内存中的映像,用于提高文件访问的效率。内存索引结点通常会被缓存起来,以便快速访问文件的元数据信息。

六、文件的物理结构

外存与内存的数据交换都是以块为单位进行的

磁盘块(文件块)的大小与内存块、页面大小相同

文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式

1.连续分配方式

要求每个文件在磁盘上占有一组连续的块

FCB中记录起始块号+长度

支持顺序访问和直接访问

连续分配的文件在顺序读/写时速度最快

2.链接分配方式

分为隐式和显式链接

可以为文件分配离散的物理块

1.隐式:每个FCB给出起始和结束块号,方便拓展,不会产生碎片问题

2.显式:将各个物理块的指针显式地存放在一张表中,即文件分配表(FAT),一个磁盘仅需一张FAT,并常驻内存,物理块号可以隐含

3.索引分配方式

为每个文件建立一张索引表,存放索引表的磁盘块称为索引块

文件数据存放的磁盘称为数据块

在FCB中存放索引表

支持随机访问,逻辑块号可以隐含

索引表太大的解决方案:

1.链接方案:可以将多个索引块链接起来存放(每个索引块中存放指向下一个索引块的地址)

2.多层方案:多层索引表(会造成多次I/O操作)

3.混合方案:有直接和间接

七、文件存储空间管理

1、存储空间的划分和初始化

存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)。

存储空间初始化时,需要将各个文件卷划分为目录区和文件区。

目录区 :主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息,如空闲表、位示图、超级块等。

文件区 :主要存放文件数据

2、几种管理方法:

1.空闲表法

系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息,再将所有空闲区按其起始盘块号递增的次序排列

2.空闲链表法

空闲盘块链:把磁盘上所有空闲块以盘块为单位链成一个链。分配时从链首开始摘下适当的盘块,回收时加入到空闲盘块链链尾

空闲盘区链:把磁盘上所有空闲盘区(每个盘区可包含若干个盘块)链成一个链。在每个盘区上除含有用于指示下一空闲盘区的指针外,还应有指明本盘区大小(盘块数)的信息。分配时可采用首次适应算法

3.位示图法

用一张位图来记录每一个物理块的空闲状态。位图中的每一位代表一个存储块,初始时所有位都为0,表示这些存储块都为空闲状态;当分配一个存储块时,将对应的位置设为1;当回收一个存储块时,将对应的位置重新设为0。这种方法适用于连续分配和离散分配。

4.成组链接法

超级块 :成组链接法必须要有一个超级块,作为硬盘所有物理块的头指针,指向下一组空闲磁盘块。
分配 :分配时,先查看超级块所在的组内是否有足够的空闲盘块。如果有,直接从组内分配;如果没有,将下一组的栈数据更新读入到超级块中,更新对应的指针连接情况。
回收 :如果超级块的栈仍有空位,直接回收,尾插到本组(超级块所在组)中;如果超级块的栈没有空位,新构成的组将自己的相关信息更新到超级块,同时头插到整个成组链表中

八、文件的基本操作

1.创建文件

create系统调用

3个参数:所需外存空间大小,文件存放路径,文件名

主要做了两件事:在外存中找到文件所需空间;在目录中创建文件对应的目录项

2.删除文件

delete系统调用

主要参数:文件存放路径、文件名

主要做了几件事:找到文件名对应目录项;回收文件占用的磁盘块;删除目录项

3.打开文件

open系统调用

主要参数:文件存放路径、文件名、对文件的操作类型(只读/读写)

主要做的几件事:找到目录项并检查操作权限;将目录项复制到内存中的“打开文件表”中并返回一个编号

4.关闭文件

close系统调用

主要参数:

主要做了几件事:将进程的打开文件表相应表项删除;回收分配给该文件的内存空间等资源;打开计数器减一,若为0则删除。

5.读文件

read系统调用

指明哪个文件(读指针),读多少,读入的数据存放在哪

6.写文件

write系统调用

指明哪个文件(写指针),写多少数据,写回外存的数据存放在内存中的位置

九、文件共享

基于索引结点的共享方式(硬链接)

基于符号链的共享方式(软链接)

多用户同时使用一份文件

1.硬链接

硬链接基于索引节点的文件共享方式,它通过共享同一个索引节点来实现对文件的多重访问。

硬链接是基于索引节点的共享方式。当创建一个硬链接时,文件系统会为该链接分配一个新的文件名,但这个新文件名指向的是同一个索引节点。因此,硬链接和原始文件实际上是同一个文件的两个不同名字,共享相同的索引节点和数据块。

硬链接的特点
共享数据块:硬链接和原始文件共享相同的索引节点和数据块。对文件内容的修改,无论通过原始文件名还是硬链接名进行,都会反映在另一个上。
独立的文件名:硬链接有自己的文件名,但文件名的删除不会影响文件的数据块和索引节点。只有当所有指向该索引节点的文件名都被删除后,文件数据才会被释放。
限制:硬链接不能跨文件系统(分区)创建,也不能链接到目录(只有某些特殊文件系统允许硬链接到目录)

2.软链接

文件中存放文件的指针

Linux类型文件,类似与快捷方式

十、文件保护

1.口令保护

口令存放在FCB中,进行比较

开销小,不安全

2.加密保护

提供“密码”对文件加密

也要用“密码”解密

3.访问控制

在每个文件的FCB(或索引结点)中增加一个访问控制列表(ACL),记录该用户可以对该文件进行哪些操作

精简的访问列表:

以“组”为单位,标记各“组”用户可以对文件执行哪些操作。如分为系统管理员、文件主、文件主伙伴、其他用户。

访问类型:读/写/执行/删除……

十一、文件系统的层次结构

自上而下:

用户/应该程序

用户接口

文件目录系统

存取控制模块

逻辑文件系统与文件缓冲区

物理文件系统

辅助分配模块、设备管理模块

设备

十二、文件系统的布置

1.物理格式化:

低级格式化

划分扇区,检测扇区,并用备用扇区替换

2.逻辑格式化

将磁盘分区(卷),完成各分区的文件系统初始化

文件系统在内存中的结构
±----------------------------+
| 超级块(Superblock) | <- 文件系统的全局信息
±----------------------------+
| 索引节点(Inode)表 | <- 文件和目录的元数据
±----------------------------+
| 目录项(Directory Entry) | <- 文件名到索引节点的映射
±----------------------------+
| 数据块(Data Block)缓存 | <- 文件的实际数据
±----------------------------+
| 文件系统缓存(Cache) | <- 缓存的元数据和数据块
±----------------------------+
| 打开文件表(Open File Table)| <- 管理打开文件的状态
±----------------------------+

1.1 超级块(Superblock)

超级块是文件系统的核心元数据结构,它存储了文件系统的全局信息。超级块通常存储在磁盘的固定位置,并在文件系统挂载时加载到内存中。

  • 内容
    • 文件系统的类型(如ext4、NTFS、FAT32等)。
    • 文件系统的大小(总块数、可用块数等)。
    • 索引节点(Inode)表的位置和大小。
    • 数据块的大小和数量。
    • 文件系统的状态(是否已挂载、是否需要检查等)。
    • 其他系统级信息(如日志信息、时间戳等)。
  • 作用
    • 提供文件系统的整体视图。
    • 用于文件系统的初始化和状态管理。
    • 在文件系统挂载时加载到内存中,供内核快速访问。

1.2 索引节点(Inode)

索引节点(Inode)是文件系统中用于存储文件和目录元数据的数据结构。每个文件或目录都有一个唯一的索引节点。

  • 内容
    • 文件类型(普通文件、目录、设备文件等)。
    • 文件权限(读、写、执行权限)。
    • 所有者和所属用户组。
    • 文件大小。
    • 时间戳(创建时间、修改时间、访问时间)。
    • 数据块的指针(指向文件的实际数据)。
  • 作用
    • 提供文件和目录的详细信息。
    • 通过索引节点,文件系统可以快速定位文件的实际数据。
    • 索引节点独立于文件名,支持硬链接和软链接。

1.3 目录项(Directory Entry)

目录项是目录文件中的条目,用于将文件名映射到对应的索引节点编号。

  • 内容
    • 文件名。
    • 索引节点编号(指向该文件或目录的Inode)。
  • 作用
    • 提供文件名到索引节点的映射。
    • 支持文件的查找和路径解析。
    • 目录本身也是一个文件,其内容由多个目录项组成。

1.4 数据块(Data Block)

数据块是文件系统中用于存储文件实际数据的单位。文件系统将磁盘划分为固定大小的数据块,并通过索引节点中的指针来管理这些数据块。

  • 内容
    • 文件的实际数据。
    • 数据块的大小通常为512字节、1KB、2KB或4KB。
  • 作用
    • 存储文件的内容。
    • 通过索引节点的指针访问数据块。
    • 支持高效的数据读写操作。

1.5 文件系统缓存(Filesystem Cache)

文件系统缓存是内核在内存中维护的一个区域,用于缓存文件系统中的数据和元数据。缓存可以显著提高文件系统的性能。

  • 内容
    • 缓存的文件数据块。
    • 缓存的索引节点和目录项。
    • 缓存的超级块信息。
  • 作用
    • 减少磁盘I/O操作,提高读写性能。
    • 缓存频繁访问的数据,减少磁盘访问延迟。
    • 支持写回缓存(Write-back Caching),将数据暂存到内存中,再批量写入磁盘。

1.6 打开文件表(Open File Table)

操作系统为每个打开的文件维护一个表项,记录文件的当前状态和访问信息。

  • 内容
    • 文件描述符(File Descriptor)。
    • 当前文件偏移量(记录文件读写的位置)。
    • 文件的索引节点指针。
    • 文件的访问模式(读、写、追加等)。
    • 文件的引用计数(记录有多少进程打开了该文件)。
  • 作用
    • 管理打开文件的状态。
    • 支持多进程共享文件访问。
    • 提供文件的读写操作上下文。

文件系统在内存中的工作流程

当用户或应用程序请求访问文件系统时,内核会通过以下步骤处理请求:

  1. 路径解析
    • 根据路径名(如/home/user/file.txt)逐级解析目录项,找到对应的索引节点。
    • 如果路径名在缓存中存在,则直接从缓存中获取索引节点。
  2. 索引节点访问
    • 通过索引节点获取文件的元数据和数据块指针。
    • 如果索引节点不在缓存中,则从磁盘加载到内存。
  3. 数据块读写
    • 根据索引节点中的数据块指针,从磁盘读取或写入数据块。
    • 数据块优先从缓存中读取或写入缓存,减少磁盘I/O操作。
  4. 更新缓存
    • 将访问的索引节点、目录项和数据块更新到缓存中。
    • 如果数据块被修改,则标记为“脏块”(Dirty Block),等待写回磁盘。
  5. 同步操作
    • 定期将缓存中的脏块写回磁盘,确保数据的一致性。
    • 在文件关闭时,将所有相关数据同步到磁盘。

十三、虚拟文件系统VFS

特点:

1.向上层用户程序提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异

2.要求下层的文件系统必须实现某些规定的函数功能,一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求

3.每打开一个文件,VFS就在主存中新建一个Vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统(Vnode只在主存,inode既会调入内存也会在外存中)

用户>>>通过POSIX标准接口>>>VFS>>>UFS,NTFS,FAT

十四、文件系统挂载

mounting

即文件系统的装载/安装

1.在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息

2.新挂载的文件系统要想VFS提供一个函数地址列表

3.将新文件系统加到挂载点(挂载在某个父目录下)

你可能感兴趣的:(操作系统,linux,windows,centos,笔记)