文件管理

文件管理

文件系统主要做了什么?

文件系统主要负责管理和组织计算机存储设备上的文件和目录,其功能包括以下几个方面:

  1. 存储管理:将文件数据存储到物理存储介质中,并且管理空间分配,以确保每个文件都有足够的空间存储,并避免文件之间发生冲突。
  2. 文件管理:文件的创建、删除、移动、重命名、压缩、加密、共享等等。
  3. 目录管理:目录的创建、删除、移动、重命名等等。
  4. 文件访问控制:管理不同用户或进程对文件的访问权限,以确保用户只能访问其被授权访问的文件,以保证文件的安全性和保密性。

目录项,索引节点和数据块的关系

目录项是文件系统中的一个记录,它包含了文件或目录的名称和对应的inode号码。每个目录项都与一个特定的inode相关联,用于标识文件或目录的元数据。

索引节点(inode)是文件系统中的一个数据结构,用于存储文件或目录的元数据信息。每个文件或目录都有一个唯一的inode,通过inode可以查找和访问文件的元数据,如文件的所有者、权限、时间戳等。

数据块(Data Block)是文件系统中存储文件实际数据的单位。当文件被创建时,它的数据被分割成固定大小的数据块,并存储在不同的数据块中。数据块的大小可以根据文件系统的设置而有所不同。

image-20240311003253767

文件数据块FCB

操作系统为每个文件建立的唯一数据机构,用于管理和存储文件的元数据和数据块的信息。,方便操作系统对文件的管理、控制和存取,可以实现文件的按名存取。

包括:文件名,类型,大小,位置,保护信息。

Linux中:FCB = 文件名 + 索引节点inode

索引节点:不包括文件名的文件属性信息的数据结构。

文件的逻辑结构

(无结构文件)流式文件:文件的数据是二进制流或字符流。

(有结构文件)记录式文件:有结构,包含若干逻辑记录。

记录式顺序文件:文件的记录逻辑上顺序排列,而且是定长记录,可快速定位逻辑地址。

记录式索引顺序文件:索引结构使用一个索引表来记录文件中数据项的位置或关键字信息。索引表中的每个项包含关键字和对应数据项的位置指针。通过索引表,可以快速定位和访问文件中的数据项,而不需要顺序扫描整个文件。常见的索引结构包括顺序索引、散列索引和倒排索引等。

文件的物理结构

逻辑文件在物理存储空间中的存放方法和组织关系

顺序存储结构(Sequential Storage Structure):顺序存储结构是最简单的物理结构,文件中的数据按照顺序存储在存储介质上,例如磁带或硬盘。数据项依次存储在存储介质上的连续区域,访问数据需要按照顺序进行。

优点:顺序存取时速度较快,对于定长记录文件支持随机访问。

缺点:不方便文件拓展,存储利用率低,会产生磁盘碎片。

链接存储结构(Linked Storage Structure):链接存储结构使用指针或链接字段将文件中的数据项连接起来。每个数据项包含指向下一个数据项的指针,形成一个链表。通过遍历链表,可以访问文件中的所有数据项。

隐式链接

使用连接字(指针)来表示各条记录之间的关系,文件离散的分配在磁盘物理块上。一个物理块的地址由FCB给出,每块的连接字指向下一个块的物理地址。

优点:便于文件拓展,存储利用率高。

缺点:只支持顺序存取,不支持随机存取,查找效率低。

显示链接:系统设置一张文件分配(FAT)表,开机时读入内存,将连接文件的物理块指针显示的存放在一张表上

优点:方便文件拓展,存储利用率高,支持随机存取。

缺点:需要额外的FAT表

image-20240311002615214

索引存储结构(Indexed Storage Structure):索引存储结构使用一个索引表来记录文件中数据项的位置或关键字信息。索引表中的每个项包含关键字和对应数据项的位置指针。通过索引表,可以快速定位和访问文件中的数据项。

image-20240311002649914

硬链接和软链接有什么区别?

在 Linux/类 Unix 系统上,文件链接(File Link)是一种特殊的文件类型,可以在文件系统中指向另一个文件。常见的文件链接类型有两种:

1、硬链接(Hard Link)

  • 在 Linux/类 Unix 文件系统中,每个文件和目录都有一个唯一的索引节点(inode)号,用来标识该文件或目录。硬链接通过 inode 节点号建立连接,硬链接和源文件的 inode 节点号相同,两者对文件系统来说是完全平等的(可以看作是互为硬链接,源头是同一份文件),删除其中任何一个对另外一个没有影响,可以通过给文件设置硬链接文件来防止重要文件被误删。
  • 只有删除了源文件和所有对应的硬链接文件,该文件才会被真正删除。
  • 硬链接具有一些限制,不能对目录以及不存在的文件创建硬链接,并且,硬链接也不能跨越文件系统。
  • ln 命令用于创建硬链接。

2、软链接(Symbolic Link 或 Symlink)

  • 软链接和源文件的 inode 节点号不同,而是指向一个文件路径。
  • 源文件删除后,软链接依然存在,但是指向的是一个无效的文件路径。
  • 软连接类似于 Windows 系统中的快捷方式。
  • 不同于硬链接,可以对目录或者不存在的文件创建软链接,并且,软链接可以跨越文件系统。
  • ln -s 命令用于创建软链接。

内存映射文件(MMF)

内存映射文件(Memory-mapped File,MMF)是一种将文件映射到进程的虚拟内存空间的技术。它允许进程像访问内存一样直接访问文件的内容,而无需进行显式的文件读写操作。

通过内存映射文件,文件的内容被映射到进程的虚拟内存地址空间中的一个或多个区域。进程可以通过读取和写入这些内存区域来访问文件的内容,就像在访问内存中的数据一样。当进程修改了内存映射区域的内容后,这些修改也会反映到原始文件中。

内存映射文件的主要优点包括:

  1. 性能:内存映射文件可以提供快速的文件访问性能。由于数据直接映射到内存中,读取和写入文件的操作可以通过内存访问来完成,避免了频繁的系统调用和数据复制操作。
  2. 共享内存:多个进程可以将同一个文件映射到它们的地址空间中,实现共享内存的效果。这样,多个进程可以直接在内存中读取和写入文件的内容,而无需进行进程间的数据传输。
  3. 大文件支持:内存映射文件允许处理大文件,因为它只需要将文件的部分或全部内容映射到内存中,而不需要一次性将整个文件读入内存。
  4. 简化文件访问:通过内存映射文件,进程可以使用内存指针和标准的内存操作函数(如memcpy、memset等)来访问文件的内容,简化了文件访问的编程操作。
image-20240311003003259

常见的磁盘调度算法有哪些?

磁盘调度算法是操作系统中对磁盘访问请求进行排序和调度的算法,其目的是提高磁盘的访问效率。

一次磁盘读写操作的时间由磁盘寻道/寻找时间、延迟时间和传输时间决定。磁盘调度算法可以通过改变到达磁盘请求的处理顺序,减少磁盘寻道时间和延迟时间。

常见的磁盘调度算法有下面这 6 种(其他还有很多磁盘调度算法都是基于这些算法改进得来的):

先来先服务算法(First-Come First-Served,FCFS):按照请求到达磁盘调度器的顺序进行处理,先到达的请求的先被服务。FCFS 算法实现起来比较简单,不存在算法开销。不过,由于没有考虑磁头移动的路径和方向,平均寻道时间较长。同时,该算法容易出现饥饿问题,即一些后到的磁盘请求可能需要等待很长时间才能得到服务。

最短寻道时间优先算法(Shortest Seek Time First,SSTF):也被称为最佳服务优先(Shortest Service Time First,SSTF)算法,优先选择距离当前磁头位置最近的请求进行服务。SSTF 算法能够最小化磁头的寻道时间,但容易出现饥饿问题,即磁头附近的请求不断被服务,远离磁头的请求长时间得不到响应。实际应用中,需要优化一下该算法的实现,避免出现饥饿问题。

扫描算法(SCAN):也被称为电梯(Elevator)算法,基本思想和电梯非常类似。磁头沿着一个方向扫描磁盘,如果经过的磁道有请求就处理,直到到达磁盘的边界,然后改变移动方向,依此往复。SCAN 算法能够保证所有的请求得到服务,解决了饥饿问题。但是,如果磁头从一个方向刚扫描完,请求才到的话。这个请求就需要等到磁头从相反方向过来之后才能得到处理。

循环扫描算法(Circular Scan,C-SCAN):SCAN 算法的变体,只在磁盘的一侧进行扫描,并且只按照一个方向扫描,直到到达磁盘边界,然后回到磁盘起点,重新开始循环。

边扫描边观察算法(LOOK):SCAN 算法中磁头到了磁盘的边界才改变移动方向,这样可能会做很多无用功,因为磁头移动方向上可能已经没有请求需要处理了。LOOK 算法对 SCAN 算法进行了改进,如果磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向,依此往复。也就是边扫描边观察指定方向上还有无请求,因此叫 LOOK。

均衡循环扫描算法(C-LOOK):C-SCAN 只有到达磁盘边界时才能改变磁头移动方向,并且磁头返回时也需要返回到磁盘起点,这样可能会做很多无用功。C-LOOK 算法对 C-SCAN 算法进行了改进,如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。


文件管理
http://example.com/2023/02/24/计算机基础/操作系统/文件管理/
作者
PALE13
发布于
2023年2月24日
许可协议