操作系统笔记—文件篇

本文详细介绍了文件在操作系统中的管理,包括文件的基本知识、逻辑结构、目录结构、物理结构、存储空间管理、基本操作和文件共享。重点讲解了连续分配、链接分配(隐式和显式)、索引分配等文件分配方式,以及文件目录的单级、两级和多级结构。文件保护措施如口令保护、加密保护和访问控制也进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件的基本知识

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

文件的属性:文件名(同一目录下不允许有重名文件),标识符(一个系统内的各个文件标识符唯一,是操作系统用于区分各个文件的内部名称),类型(指明文件的类型),位置(文件存放路径(用户使用),在外存中的地址(操作系统使用,对用户不可见)),大小,创建时间,上次修改时间,文件所有者信息,保护信息(对文件进行保护的访问控制信息)

无结构文件(流式文件):有二进制或字符流组成;

有结构文件(记录式文件):由一组相似的记录(记录是一组相关数据项的集合)组成,一般来说,每条记录有一个数据项作为关键字,根据记录的长度是否相等,又可分为定长记录项可变长记录项

文件之间的组织方式:树状组织形式,通过目录(一种特殊的有结构文件,由记录组成)组织起来

操作系统对上层提供的功能:创建文件(调用了create系统调用),读文件(read系统调用),写文件(调用write系统调用)删除文件(调用了delete系统调用),打开文件(open系统调用),关闭文件(close系统调用)

操作系统以‘块’(磁盘块/物理块)为单位分配储存空间,外存中的数据读入内存同样以块为单位。每个块的大小相等

文件的逻辑结构

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

有结构文件的逻辑组织形式

顺序文件

顺序文件:文件中的记录会一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的,各个记录在物理上可以顺序存储或链式存储。顺序文件又可以分为串结构(记录之间的顺序与关键字无关)和顺序结构(记录之间的顺序按关键字排列)

链式存储和顺序记录中的可变长记录一定无法实现随机读取,每次只能从第一个开始向后查找;

顺序存储中的定长记录可以实现随机存取,其中串结构无法快速查找;顺序结构可以快速查找

顺序文件的缺点是增加,删除一个记录比较困难(串结构会相对简单)

索引文件

建立一张索引表(定长记录的顺序文件)以加快文件检索速度,每一条记录对应一个索引项,文件中这些记录在物理上可以离散地存放。每当要增加或删除一个记录时,需要对索引表进行修改,而索引表有很快的检索速度,因此主要用于信息处理及时性要求比较高的场合

另外,可以用不同的数据项建立多个索引表

索引顺序文件

同样为文件建立一张索引表(定长记录的串结构的顺序文件),但一组记录对应一个索引表项,索引顺序文件的索引项也不需要按关键字排序,这样可以极大地方便新表项的插入。

文件目录

文件控制块

目录文件中的一条记录就是一个文件控制块(FCB),FCB的有序集合称为‘文件目录’,一个FCB就是一个文件目录项,FCB中包含了文件的基本信息(文件名,物理地址,逻辑结构,物理结构等),存取控制信息(是否可读,可写,禁止访问的用户名单等),使用信息(文件的建立时间,修改时间等),其中最重要的是文件名和物理地址

需要对目录进行的操作:搜索,创建文件,删除文件,显示目录,修改目录,

目录结构

单级目录结构

整个系统只建立一张目录表,每个文件占一个目录项。实现了“按名存取”,但不允许文件重名,因此创建文件时要首先检查是否重名;

两级目录结构

分为主文件目录(记录了用户名以及相应用户目录存放的位置)和用户文件目录(用户文件和FCB组成),允许不同用户的文件重名(实际对应的文件不同)

多级目录结构(树形目录结构)

用户或用户进程要访问某个文件时要用文件路径标识文件名,文件路径名是字符串,各级目录中用“/”隔开,从根目录出发的路径称为绝对路径

每读一级目录都要从外存中调取目录表,进行I/O操作

树形目录结构的缺点:不便于实现文件共享

无环图目录

在树形目录结构的基础上,增加了指向同一节点的有向边,使整个目录称为一个有向无环形图

可以用不同的文件名指向同一个文件,甚至可以指向同一个目录

每一个共享节点有一个共享寄存器,用于记录有多少地方指向该节点,用户提出删除节点的请求时,只是删除了该用户的FCB,并使共享计数器减一,不会直接删除共享节点,只有共享计数器为0时才会删除该节点(注意共享文件不等于复制文件,一方更改共享文件,另一方面也会同步更改)

索引节点(FCB的改进)

查找各级目录的过程中只需要用到“文件名”,只有文件名匹配时,才需要读出文件的其他信息,因此可以对目录表进行简化,将除文件名以外的文件描述信息都放到索引节点中去

在外存中的索引节点称为磁盘索引节点,当索引节点放入内存后称为内存索引节点,内存索引节点需要增加一些信息,比如:文件是否有被修改,此时有几个进程正在访问该文件等

文件的物理结构(文件的分配方式)

连续分配

外存管理当中,文件的大小也会被划分成一个个大小相等的文件块,文件的逻辑地址也可以表现为(逻辑块号,块内地址),操作系统为文件分配存储空间都是以块为单位进行的

连续分配方式要求每个文件在磁盘上占有一组连续的块,文件目录中记录存放了起始块号和长度

用户给出逻辑块号,操作系统找到该文件对应的目录项(FCB),物理块号 = 起始块号 + 逻辑块号

连续分配方式支持顺序访问和随机访问

连续分配方式要求,每个文件在磁盘上占有一组连续的块

`读取某个磁盘块时,需要移动磁头,访问的两个磁盘块相隔越远,移动磁头所需的时间就越长`

连续分配的文件在顺序读/写时速度最快,但物理上采用连续分配的文件不方便拓展,且存储空间利用率低,会产生难以利用的磁盘碎片(可以用紧凑来解决)

链接分配

采用离散分配的方式,可以为文件分配离散的磁盘块,分为隐式链接和显式链接两种

隐式链接

目录中记录了文件的起始块号和结束块号,除文件的最后一个磁盘块以外,每个磁盘块都会保留指向下一个盘块的指针,这些指针对用户是透明的。

隐式链式分配只支持顺序访问,不支持随机访问(读入i号逻辑块,总共需要i+1次磁盘操作),查找效率低,指向下一个盘块的指针也会占据空间,但很方便进行拓展,且不会产生碎片问题,文件利用率很高

显式链接

把用于链接文件各物理块的指针显式地存放在一张表里(会记录链接关系),即文件分配表

一张磁盘仅设置一张FAT,开机时,将FAT读入内存,并常驻内存(因此查询FAT不需要读磁盘操作),FAT的各个表项在物理上连续存储,且每一个表项的长度相同

采用显式链接,支持随机访问,,且不需要访问磁盘,访问速度会快很多,且不会产生外部碎片

索引分配

允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为**‘索引块’,文件数据存放的磁盘块称为数据块**。

显式链接分配方式中,FAT是一个磁盘对应一张。而索引分配方式中,索引表是一个文件对应一张表。
####实现从逻辑块到物理块的转化
从目录项中找到索引表的存放位置,将索引表从外存读入内存,并查找索引表中的某个逻辑块号对应的物理块号
(支持随机访问,且容易拓展,但索引表需要占用空间)

对文件过大而导致的磁盘无法装下所有索引表问题的解决方案

1.链接方案:如果文件的索引表过大,可以为索引表分配多个索引块,并将他们链接起来存放。

2.多层索引:建立多层的索引表,使第一层索引块指向第二层索引块,还可以根据文件大小要求再建立第三层,第四层索引块。(FCB中仅存放顶层的索引块号),若采取多层索引,则各层索引表大小不能超过一个磁盘块。

3.混合索引4多种索引分配方式的结合。例如一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级简介索引(指向单层索引),还包含两级间接索引(指向两层索引表),对于小文件来说访问磁盘的次数少,对于大文件来说,可以用多级索引合理保存数据。

文件存储空间管理

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

存储空间的初始化:将各个文件卷划分为目录区(主要存放FCB,用于磁盘存储空间管理的信息)和文件区(存放普通的文件数据)

空闲表法

适用于“连续分配方式”,会生成一个色空闲表,每个开头的空闲盘号对应一个空闲盘块数

分配磁盘块的方式:可采用首次适应,最佳适应,最坏适应等算法进行分配

回收磁盘块,会合并相邻的空闲区

空闲链表法

空闲盘块链:以盘块为单位组成一条空闲链,每一个盘块中存放着指向下一个盘块的指针,操作系统保存着链头链尾的指针,回收时,回收的盘块一次挂到链尾

空闲盘区链:以盘区(连续的空闲盘块)为单位组成一条空闲链,

位示图法

用每个二进制位对应一个磁盘块(是否已分配),形成一个矩阵表,横坐标为位号,纵坐标为字号,横长为字长

分配方式:若文件需要K个块,顺序扫描位示图,找到K个相邻或不相邻的空闲块(0),根据字号,位号算出对应的盘块号,将相应盘块分配给文件。最后将相应位设置为“1”

回收方式:根据回收的盘块好的字号和位号计算出对应的字号,位号;将相应的二进制位设置为0

成组链接法

文件卷的目录区中专门用一个磁盘作为“超级块”,当系统启动时需要将超级块读入内存,并且保证内存与外存中的超级块的数据一致。超级块中每组空闲块号记录了它的子组块号的起始值。

如果没有下一组空闲块,需要设置特殊值

分配方式:检查第一个分组的块数是否足够,如果足够则分配,但如果这个块内存放着下一组的信息,则需要将其中的数据复制到超级块中

文件的基本操作

创建文件

进行create系统调用时需要提供的参数:

  • 1.所需外存空间的大小
  • 2.文件存放路径
  • 3.文件名

系统在处理create系统调用时所做的事情:

  • 1.在外存中找到所需空间
  • 2.创建该文件对应的目录项

删除文件

进行Delete系统调用时需要提供的参数:

  • 1.文件存放路径
  • 2.文件名

系统在处理Delete系统调用时所做的事情:

  • 1.根据文件存放路径找到对应的目录文件,从目录表中找到文件名对应的目录项
  • 2.根据该目录项记录的文件存放的位置,文件大小等信息,回收文件占用的磁盘块
  • 3.从目录表中删除文件对应的目录项

打开文件

进行open系统调用时需要提供的参数:

  • 1.文件存放路径
  • 2.文件名
  • 3.要对文件进行的操作类型(r只读,rw读写等)

系统在处理open系统调用时所做的事情:

  • 1.根据文件存放路径找到对应的目录文件,从目录表中找到文件名对应的目录项,检查用户是否拥有操作权限
    1. 将目录项复制到内存中的“打开文件表”中,并将对应表目的的编号返回给用户,之后用户使用打开文件表的编号来指明要操作的文件(不会重复访问目录,系统(拥有打开计数器)与进程(拥有读写指针和访问权限)各有一张打开文件表)

关闭文件

系统在处理open系统调用时所做的事情:

  • 1.将进程文件的打开文件表的相应项删除
    1. 回收分配给这个文件的内存空间等资源

读文件

进行read系统调用时需要提供的参数:

    1. 指明文件,可以提供打开文件表中的索引号
  • 2.读入多少数据
    1. 读入的数据放在内存中的位置

系统在处理read系统调用时所做的事情:

  • 从读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中

写文件

进行write系统调用时需要提供的参数:

    1. 指明文件,可以提供打开文件表中的索引号
  • 2.写出多少数据
    1. 写出的数据放在内存中的位置

系统在处理write系统调用时所做的事情:

  • 从用户的内存区域中,将指定大小的数据写回用户指针指向的外存

文件共享

硬链接:各个目录项指向同一个索引节点,索引节点中有一个链接计数count,每个用户删除时只删除用户目录项,然后count减一,只有count为0时文件才会真正被删除

软连接(符号链接):每个link型文件保存了一个共享文件的存放路径(windows的快捷方式),使用软连接会多次产生I/O操作,如果共享文件被删除,link文件虽然存在,但会失效
##文件保护

口令保护

为文件设置一个口令,用户请求访问必须提供"口令",口令一般存放在文件对应的FCB或索引节点中,访问时操作系统会对用户提供的口令与存放的口令进行对比。

优点:保存和验证的开销少,缺点:保存在内部,不够安全

加密保护

使用密码对文件进行加密,在访问文件时需要提供正确的密码进行解密

优点:保密性强,不需要储存密码;缺点:加密解密会花费时间

访问控制

在每个FCB或索引节点中增加一个访问控制列表,该表记录了各个用户可以对该文件进行那些操作

精简的访问控制表:以组为单位,标记各组(管理员,用户等)可以对文件指向哪些操作

文件系统的结构层次

  • 用户接口(提供功能接口(read,write,open等)),
  • 文件目录系统(用于访问,查找文件),
  • 存取控制系统(保护数据安全,验证访问权限,完成文件保护等功能),
  • 逻辑文件系统与文件信息缓冲区(将用户想要访问文件的记录号转化为逻辑地址),
  • 物理文件系统(将逻辑地址转化为物理地址),
  • 辅助分配模块(负责文件存储空间的管理,即负责分配空间和回收储存空间),
    *( 设备管理模块(与设备直接进行交互,包括磁盘调度,分配设备,启动设备)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值