操作系统(12) 文件管理

1. 概述

1.1 文件和文件系统

  • 文件File:存储在外存上具有标识名的一组字符流或记录的集合。可长期保存和共享
  • 文件系统File System:OS中负责存储、管理、和操作文件的一组实用程序及其所需数据结构
  • 文件系统的功能:从用户角度来看
    • 创建、删除、打开、关闭、读、写文件和目录
    • 维护文件属性:文件名、所有者、创建/修改时间、访问权限、长度、外存地址等
    • 文件的透明存取(按名存取)、共享与保护

1.2 文件结构

  • 记录式文件中,数据的4个结构层次
    • 域fidld(字段):包含一个数值,如学号、姓名等
    • 记录:一组相关域的集合,如一条学生记录
    • 文件:一组相似记录的集合,如数据库中的表
    • 数据库DataBase:可由多个相关文件(表)组成,如学生学籍管理
  • 流式文件:UNIX将所有文件都看作由字节流组成,如源程序、目标代码等

1.3 文件系统功能

  • 文件系统功能:目录管理、访问(权限)控制、访问方法、文件操作函数、记录组块、文件分配、磁盘管理和调度
  • 以写磁盘文件为例
    在这里插入图片描述

1.4 文件夹

1.4.1 内容(目录的内容)

  • 每个文件有一个目录项(文件控制块FCB),保存它的属性
  • 每个目录本身也是一个文件。目录文件是占据整数个磁盘块的记录式文件,内容是该目录下所有文件目录项的集合

例如:一个磁盘块1024B,新建一个目录,该目录文件长1024B, 每个目录项32B,则该目录可以有32个文件。

  • 每个目录至少包含两项:当前目录 . 和父目录 .

1.4.2 结构

  • 目录:树型结构
  • 文件由文件路径名和文件名标识
    在这里插入图片描述

1.4.3 命名

  • 文件的命名:文件名.扩展名
  • 扩展名用来反映文件的类型
  • 在同一目录下文件名必须唯一
  • 绝对路径,相对路径,当前目录
    • 绝对路径:/Li/D/H
    • 相对路径:/Li
    • 相对路径:D/H

2. 文件共享

  • 访问权限
    • 对一个文件的访问权限层次
      • 无权限、知道该文件存在、执行、读、在文件尾追加、写、更加其他用户的访问权限、删除文件
      • 权限是依次递增的,每项权限都隐含前面的那些权限
    • 创建文件的用户是文件的所有者,拥有全部权限,可以向其他用户授予权限
  • 同时访问
    • 多个用户可以同时读文件
    • 用户在修改文件时,对整个文件或相关记录加锁,实现互斥写,防止死锁

1、用户删除某文件时,OS不可能执行的操作是(A)
A.删除此文件所在的目录
B. 删除与此文件关联的目录项
C. 删除与此文件对应的文件控制块
D. 释放与此文件关联的内存缓冲区

2、一个文件被打开时,OS首先要做的是 。(B)
A. 将文件内容读到内存
B.将文件控制块读到内存
C. 修改文件控制块中的读写权限
D. 将文件的数据缓冲区首指针返回给用户进程

3. 记录组块-3三种方式

  • 磁盘I/O以块(如扇区)为单位,字节流式文件可以直接I/O,但记录式文件需要将多条记录组装成块才能进行I/O
  • 3种记录组块的方法
    • 固定组块:记录长度固定,若干完整的记录放在一块,块后部可能有内碎片
    • 可变长度跨越式组块: 记录长度可变,尽量占满一块,有些记录可能跨越两块,则用指针连接
    • 可变长度非跨越式组块:记录长度可变,但不跨块,有块的内碎片,一条记录的长度不能超过块的尺寸

4. 辅助存储管理

4.1 文件分配-为文件分配磁盘空间

  • 预分配(声明文件最大尺寸),动态分配
  • 给文件分配磁盘空间时:
    • 如果分配连续磁盘块,则访问时不需要移动磁头,速度快;但磁盘利用率低,碎片多,文件扩充困难
    • 如果离散分配磁盘块,则磁盘空间利用率高,但访问时磁头移动使得访问速度变慢
  • 所以,可以离散分配磁盘块,但最好是连续分配。 于是现代OS以磁盘块(簇cluster)为单位分配磁盘, 每个文件至少占一个单独的磁盘块。1簇=2n扇区。
  • 3种文件分配方法:连续分配链接分配索引分配

4.2 文件分配-连续分配方法

  • 为每个文件分配一组相邻的盘块。(FF,BF,WF)
  • 文件属性简单:(起始块号,块数);
  • 顺序访问和随机访问都方便;寻道少,I/O快
  • 磁盘外碎片多,需紧缩;文件不能动态增长。
    在这里插入图片描述

4.3 文件分配-链接分配

  • 每个盘块有一链接指针,将该文件的多个离散的盘块链接成一个链表
  • 动态分配,没有外碎片,寻道多,I/O慢,适合顺序访问,随机访问比较困难(链表的特性)
    在这里插入图片描述

4.4 文件分配-索引分配

  • 把所有盘块的地址集中到索引块中
  • 没有外碎片,是随机访问的(O(1)),但增加索引块的开销
  • 基于单个索引盘块进行索引分配:
    在这里插入图片描述
  • 基于长度可变的(盘块)分区进行索引分配:
    同样一个索引块的开销,可为文件分配更多盘块

1、如果磁盘块长4KB(即索引块和数据块均长4KB), 每个盘块指针4B,则采用基于单个盘块的索引分配时,允许的文件最大尺寸是多少?
一个索引快和数据块均为4KB,一个盘块指针长4B,那么索引块中就能够指向(4KB/4B) = 1K个指针,1K个指针就对应着1K个数据块,1K*4KB = 4MB,因此文件尺寸为4MB

2、基于大小可变的分区的索引分配,假设索引块中“长度” 域占1B、2B,文件最大尺寸分别是多少?
在这里插入图片描述
当长度域为1B时,索引块有(4KB/5B=819个指针),而长度是1B,1Byte代表8个bit,8个bit可以代表(2^8-1) = 255个地址,因此文件的最大尺寸可以是8192554KB = 815.8MB
同理可以计算出68264K4KB = 170.5GB
3.设一个文件由100个磁盘块组成,则对于连续文件、 链接文件和索引文件,当在文件中间增加一块(原50#块 后面)和删除一块(删掉51#块)时需要的磁盘I/O次数是 多少?设头指针和索引表已在内存。(设块号从1开始计数)
在这里插入图片描述
如何理解:连续分配可以理解成静态数组(内存中连续分配),连接分配就是链表了(寻找节点开销大),索引分配就是打表O(1)

5.磁盘空闲空间的管理

5.1 位表(位图、位视图)

1bit => 1块的状态,0:空闲1:已分配
在这里插入图片描述
这个就相当于是数组的寻址方式,字号可以看成是行,位号可以看成是列,要找到某一个元素的地址那就是行*每一行的元素个数+所在列数即可寻址

  • 易于分配连续空间。位图可(部分)复制到内存,加快磁盘分配回收。位图本身需占用 n 个磁盘块:磁盘容量 = 2^30 字节 (1 GB),盘块大小 = 2 ^12 字节 (4 KB),则位示图占 2 ^ 30/2 ^ 12 = 2 ^ 18 bits = 2 ^ 15 B (32KB),n =8个磁盘块。

5.2 空闲块链

  • 将所有空闲盘块区形成一个链表
    在这里插入图片描述

5.3 索引表

  • 将所有空闲盘块区的“首块号+块数”放在一个索引表中

5.4 空闲块列表

将所有空闲盘块号放在磁盘一个保留区里。 此表可部分复制到内存,可排序以 实现连续分配。

6. UNIX文件管理

6.1 文件管理类型与链接

  • UNIX区分6种文件:普通文件目录文件特殊文件 (设备)命名管道链接文件(硬链接)符号链接
  • UNIX通过链接共享文件:ln [-s] 原名 新名
  • ln /Liu/A /Li/D/F 创建 硬链接
    • 文件名/Li/D/F和/Liu/A指向同一个i-node索引节点
    • 不能链接目录或跨文件系统创建链接
  • ln -s /Liu/A /Li/D/F 创建 符号链接(快捷方式)
    • 文件/Li/D/F中只包含原文件/Liu/A的路径名,而原文件
      /Liu/A指向一个 i-node,才能找到文件的其它属性。
    • 文件主删除文件/Liu/A后,符号链接访问将失败。
    • 可以链接目录或跨文件系统创建链接。

6.2 访问权限

$ ls –l
drwxr-xr-x  3 sww staff  4096 Dec 14 17:03 test      目录文件 
-rw-r--r--     1 sww staff  43     Dec 12 10:45 hello.c 普通文件 
-r-xr-xr-x    2 sww staff  985   Dec 14 17:03 exea     硬链接 
l--x--x--x     1 sww staff  6       Dec 12 10:45 aa->/bin/x 符号链接
  • UNIX:三类用户,权限(读/写/执行)以3位八进制表示。

6.3 索引节点 i-node

  • UNIX中的文件控制块:索引节点 i-node。
  • 创建文件时,在磁盘上建立一个磁盘i-node。
    • 文件名和i-node号保存在目录项中
    • 除文件名外,所有其它属性都保存在 i-node 中。
      在这里插入图片描述
      目录文件中存储的是唯一的文件名,文件名后还有一个2B的域用来存储i-node在i-node表的地址

6.4 UNIX混合索引

  • FreeBSD(一种UNIX的变种):设1块为4KB,8B/块地址,则512地址/块。
  • 直接地址:i 节点的前12项是文件前12个数据块的盘块号。
  • 一次间址:i 节点的第13项中存放一个盘块号,这个盘块(索引表)中存放该文件的另外512个数据盘块的盘块号。
  • i 节点的第14、15项用于二次和三次间接寻址。
  • 则文件大小从 48KB 可扩大到 2MB+、1GB+、512GB+。
  • 这样做的好处是在动态分配内存空间,根据文件大小的实际需要对内存进行分配。
    在这里插入图片描述
    可以这样理解:所谓一、二、三次简址就是采用了多少级缓存,一次间址就是直接放一个索引表,二次间址就是建立一个索引表的索引表,三次简址类似

6.5 UNIX磁盘文件布局

在这里插入图片描述

  • 超级块:文件系统大小、空闲磁盘块数 目、空闲盘块表、索引节点表 大小、空闲索引节点数目、空闲索引节点表等
  • i-node: 记录每个文件的属性(除了文件名)。 inode表长度固定。创建文件系统 时,默认根据磁盘块数量确定inode数量。

6.6 Linux文件系统

  • Linux:访问文件系统前,它必须被安装到一个安装点\
$ fdisk  -l
查看已有分区(文件系统)
$ mkdir  /aa ;  mount  /dev/sda6  /aa      挂载Linux分区, 
该/aa目录的原有内容将暂时不可见,直到卸载分区 
$ umount  /aa  或    umount  /dev/sda6    卸载Linux分区

在这里插入图片描述

7. Linux虚拟文件系统

  • 虚拟文件系统VFS: 同时支持多种文件 系统(如VFAT、NTFS、UFS、NFS、 EXT2、EXT3、光盘 的ISO9660等)。
  • 通过VFS的转换,用户使用同一组系统调用对不同文件系统中的文件进行操作,而不需要关心不同文件系统的实现细节。
    在这里插入图片描述

8. Windows文件系统

  • Windows支持传统的FAT16、FAT32文件系统
    • 文件分配表 File-Allocation Table
    • FAT32下,FAT有两个副本,更可靠。磁盘分区最长2TB(XP下最长32GB),文件最长4GB。
  • 自Windows NT开始使用、不断增加新特性的文件系统NTFS:
    • 写文件操作被记录在事务日志中。系统崩溃后,根据日 志对那些部分完成的事务进行重做或撤销,保证磁盘上文件的一致性。可恢复性
    • 为文件分配磁盘空间时,以簇(2^n个连续扇区,一簇至多 2 ^16B)为单位离散分配,最大文件为2 ^ 32簇。
    • 磁盘逻辑分区称为卷volume,卷最大2 ^ 64B。

9. NTFS卷结构

  • NTFS的卷布局:
    • 分区引导扇区:启动代码、卷布局信息、文件系统信息等。
    • 主文件表MFT:NTFS的核心。
      • 被组织成一个表,表内每行长1024B(称为一条记录)。 每行描述一个文件或文件夹的属性和文件 (部分)内容。
      • 若文件内容足够小,则整个文件位于MFT的一行中; 否则,该行包含文件的部分信息,其余部分放到卷的 其它可用簇,同时在该行中保存指向这些簇的指针。
    • 系统文件:MFT2(MFT前几行的镜像备份)、事务日志、簇位图(簇的分配/空闲状况)、坏簇记录等。
      在这里插入图片描述

10. FAT文件结构

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值