操作系统复习06-文件管理

文件就是一组有意义的信息/数据集合

文件系统概述

操作系统复习06-文件管理

文件系统是操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法。

文件系统面向用户的功能:
+ 文件按名存取
+ 文件目录建立和维护
+ 实现逻辑文件到物理文件的转换
+ 文件存储空间的分配和管理
+ 提供合适的文件存取方法
+ 实现文件的共享、保护和保密
+ 提供一组可供用户使用的文件操作

文件系统优点:
+ 用户使用方便
+ 文件安全可靠
+ 实现文件共享

文件系统的分层结构:
+ 文件管理层:实现文件的逻辑结构,为用户提供各种文件系统调用,及文件访问权限的设置等工作;
+ 目录管理层:负责查找文件描述符,进而找到需要访问的文件,及进行访问权限检查等工作;此外,还需完成目录的添加、删除、重排等操作。
+ 磁盘管理层:将文件的逻辑地址转换成磁盘的物理地址,即由逻辑块号找到柱面号、磁道号和扇区号,具体的数据传输操作由设备管理实现。

操作系统向上提供的几个最基本的功能:
+ 创建文件(create系统调用)
+ 删除文件(delete系统调用)
+ 读文件(read系统调用)
+ 写文件(write系统调用)
+ 打开文件(open系统调用)
+ 关闭文件(close系统调用)

文件

操作系统复习06-文件管理

文件概念和命名

文件是由文件名字标识的一组信息的集合。 文件是一个抽象机制,提供了把文件保存在磁盘上,用户不必了解信息存储细节且便于读取的方法,这一抽象机制中最重要的是文件命名。

文件类型和属性

一个文件有哪些属性?

  • 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。
  • 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
  • 类型:指明文件的类型
  • 位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
  • 大小:指明文件大小
  • 创建时间、上次修改时间
  • 文件所有者信息
  • 保护信息:对文件进行保护的访问控制信息

文件保护属性用于防止文件被破坏,称为文件保护。包括两个方面:
1. 防止系统崩溃所造成的文件破坏;防止方法:
+ 定时转储
+ 多副本
2. 防止文件主和其他用户有意或无意的非法操作所造成的文件不安全性。防止方法:
+ 访问控制——防止文件主和其他用户有意或无意的非法操作所造成的文件不安全性,基本思想是建立三元组:(用户、对象、存取权限)。Linux把用户分为文件主、同组用户、其他用户三类,定义存取权限可读r、可写w、可执行x,文件属性共有10位:-rwxrwxrwx

类型:

操作系统支持不同类型文件:
+ 普通文件
+ 目录文件
+ 特别文件:块设备文件、字符设备文件、管道文件。

文件目录

操作系统复习06-文件管理

文件控制块和文件目录

目录本身就是一种有结构文件,由一条条记录组成。每条记录对应一个在该放在该目录下的文件。目录文件中的一条记录就是一个“文件控制块(FCB)”(或者说FCB的有序集合称为“文件目录”)。FCB实现了文件名和文件之间的映射。使用户(用户程序)可以实现“按名存取”。FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。最重要、最基本的还是文件名、文件存放的物理地址。

Linux中的inode

Linux系统的FCB中的文件名和其他管理信息分开,其他信息单独组成一个数据结构,称为索引节点inode。目录项中只保留文件名(最长256个字节)和inode号(4个字节)。

索引节点:为了减小目录表大小,将FCB中除了文件名之外的描述信息都都放索引节点中。由于目录项长度减小,因此每个磁盘块可以存放更多个目录项,因此检索文件时磁盘I/O的次数就少了很多。 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。

文件组织与数据存储

操作系统复习06-文件管理

卷是存储介质的物理单位(例如Windows系统上的C盘、D盘、E盘,通常是把一个磁盘分成多个卷,有的技术也可以将多个磁盘合为一个卷使用),磁盘上的最小存储单位称为扇区。(体现在磁盘上就是盘面上的扇形区域)

类似于内存分为一个个“内存块”,外存会分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同(通常为4KB),每块一般包含2的整数次幂个地址。 同样类似的是,文件的逻辑地址也可以分为(逻辑块号,块内地址),操作系统同样需要将逻辑地址转换为外存的物理地址(物理块号,块内地址)的形式。块内地址的位数取决于磁盘块的大小。

扇区和磁盘块的区别:扇区是物理设备的概念,磁盘块是文 件系统中的概念。

操作系统以“块”为单位为文件分配存储空间,因此即使一个文件大小只有10B,但它依然需要占用1KB的磁盘块。外存中的数据读入内存时同样以块为单位。

所谓的“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的。

文件的逻辑结构

按文件是否有结构分类,可以分为无结构文件、有结构文件两种:

  • 无结构文件(如文本文件)——由一些二进制或字符流组成,又称 “流式文件”
  • 有结构文件(如数据库表)——由一组相似的记录组成,又称 “记录式文件”每条记录又若干个数据项组成。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)。 根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。

文件的物理结构

操作系统对非空闲磁盘块的管理

文件分配方式:
+ 连续分配方式要求每个文件在磁盘上占有一组连续的块。这种方式只需转换块号就行,块内地址保持不变。用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB),物理块号=起始块号+逻辑块号当然,还需要检查用户提供的逻辑块号是否合法(逻辑块号≥长度就不合法)。
+ 优点:连续分配的文件在顺序读/写时速度最快
+ 缺点:物理上采用连续分配的文件不方便拓展。存储空间利用率低,会产生难以利用的磁盘碎片。
+ 链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
+ 隐式链接:文件目录中记录了文件存放的起始块号和结束块号。当然,也可以增加一个字段来表示文件的长度。除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,这些指针对用户是透明的。
+ 优点:采用隐式链接的链接分配方式,很方便文件拓展。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。
+ 缺点:采用链式分配(隐式链接)方式的文件,只支持顺序访问,不支持随机访问,IO访问较频繁,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。
+ 显式链接:文件目录中只需记录文件的起始块号,把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT,File Allocation Table)。一个磁盘仅设置一张FAT。开机时,将FAT读入内存,并常驻内存。
+ 优点:很方便文件拓展,不会有碎片问题,外存利用率高,并且支持随机访问(给定一个逻辑块号,可直接转换为物理块号)。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
+ 缺点:文件分配表的需要占用一定的存储空间。
+ 索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表, 索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。 索引表中的表项是连续存储的,因此,索引表中的逻辑块号可以是隐含的。若每个磁盘块1KB,一个索引表项4B(块号大小),则一个磁盘块只能存放256个索引项,如果一个文件的大小超过了256块,那么一个磁盘块是装不下文件的整张索引表的。为了解决这个问题,可以使用三种方式:
+ 链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。但链接结构不能随机访问,效率很低。
+ 多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。
+ 混合索引:(Linux采用的多级索引的结构)多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。

构造文件物理结构的方法

  • 顺序文件:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储链式存储。(物理上可以连续存放也可以离散存放)
    • 链式存储(使用链式存储的顺序文件又称为连接文件):无论是定长/可变长记录,都无法实现随机存取,每次只能从第一个记录开始依次往后查找。
    • 顺序存储:
      • 可变长记录:无法实现随机存取。每次只能从第一个记录开始依次往后查找。
      • 定长记录:
        • 可实现随机存取。记录长度为L,则第i个记录存放的相对位置是i*L
        • 若采用串结构(记录的物理顺序和关键字顺序没有关系),无法快速找到某关键字对应的记录
        • 若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)
  • 索引文件:建立一张索引表以加快文件检索速度。每条记录对应一个索引项。文件中的这些记录在物理上可以离散地存放。索引表本身是定长记录的顺序文件。因此可以快速找到第i个记录对应的索引项。可将关键字作为索引号内容,若按关键字顺序排列,则还可以支持按照关键字折半查找。每当要增加/删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。另外,可以用不同的数据项建立多个索引表。如:学生信息表中,可用关键字“学号”建立一张索引表。也可用“姓名”建立一张索引表。这样就可以根据“姓名”快速地检索文件了。
    • 索引文件可以利用分组、多级索引的方式来减小索引的大小。

文件系统功能及实现

操作系统复习06-文件管理

文件共享

操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件。

基于索引结点的共享方式(硬链接):索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。
+ 若count= 2,说明此时有两个用户目录项链接到该索引结点上,或者说是有两个用户在共享此文件。若某个用户决定“删除”该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count值减1。
+ 若count>0,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
+ 当count=0时系统负责删除文件。

基于符号链的共享方式(软链接):是一种特殊类型的文件(Link类型),记录了指向文件的存放路径,类似于Windows操作系统的“快捷方式”。当原文件删除,链接文件仍可以存在,但使用link文件已经找不到原文件了。

在linux中创建硬链接:ln source target,创建软链接:ln -s source target

文件空间管理

管理磁盘中的空闲块的方式:

  • 位示图:每个二进制位对应一个盘块。例如,“0” 代表盘块空闲,“1”代表盘块已分配。位示图一般用连续的“字”来表示,如一个字的字长是16位,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。
  • 空闲区表:使用一张空闲表,每条记录中含有第一个空闲盘块号和空闲盘块数两个信息(即起始位置和大小)。 它的分配方式与内存管理中的动态分区分配很类似,为一 一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
  • 空闲块链:以盘块为单位组成一条空闲链。若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。
  • 空闲块列表
  • 成组空闲块链:假设将存储空间分成512字节一块,每100块划分一组。文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。超级块和每组第一块登记下一组空闲块的盘物理块号和所有空闲块号。

空闲区表法、空闲块链法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组空闲块链法对磁盘空闲块进行管理。

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%a4%8d%e4%b9%a006-%e6%96%87%e4%bb%b6%e7%ae%a1%e7%90%86/

发表评论

电子邮件地址不会被公开。