本章内容:
文件与文件系统
文件的存储介质
磁盘空间管理
文件控制块及文件目录
文件的结构管理
文件的系统实现
文件系统实例——UNIX
文件 是对磁盘的抽象,是指一组带标识(标识即为文件名)的、逻辑上有完整意义的信息项的序列
信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系
文件内容的意义:由文件建立者和使用者解释
操作系统中管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并方便用户使用
文件系统所承担的任务:
管理磁盘空间,实施磁盘空间的分配回收
实现文件的按名存取
名字空间→磁盘空间(映射)
实现文件信息共享,并提供文件的保护、保密手段
向用户提供一个方便使用、易于维护的接口,并向用户提供有关统计信息
提高文件系统的性能
当文件从磁盘读入内存时或写入磁盘时,需要与I/O系统的统一接口
UNIX的文件分类(按文件的性质和用途划分):
普通文件、目录文件、特殊文件(设备文件)、管道文件、套接字
普通文件(regular):
包含了用户的信息,一般为ASCII或二进制文件
目录文件(directory):
管理文件系统的系统文件
特殊文件(special file):
字符设备文件:和输入输出有关,用于模仿串行I/O设备,例如终端,打印机,网卡等
块设备文件:磁盘
所谓的文件的逻辑结构,是指从用户的角度怎么看一个文件,它是由用户的访问方式确定的。
文件逻辑结构的种类:
左边是以一个字节为单位,把文件看成是一个字节的序列,即流式文件
中间的是以记录为单位,该文件由若干记录组成
右边的是把文件组织成树形结构
此外,还可以把文件的逻辑结构组织成堆、顺序、索引、索引顺序、散列等结构
一般操作系统所采用的典型的文件结构:
**流式文件:**构成文件的基本单位式字符
文件是有逻辑意义、无结构的一串字符集合
**记录式文件:**文件由若干个记录组成,可以按记录进行读、写、查找等操作
每条记录有其内部结构
文件存取:
顺序存取/访问
随机存取/访问:要提供当前读写位置(当前位置),要用指针定位到读写处,如:UNIX的seek操作
典型的存储介质:
磁盘、磁带、光盘、U盘、……
物理块:
物理块是存储介质中的一个独立单位
文件信息保存在存储介质上,通常以独立单位来进行信息的存储、传输、分配。
存储设备划分为大小相等的物理块,统一编号
一次访盘请求所需要的参数:
读操作/写操作、磁盘地址【设备号、柱面号(磁道号)、磁头号(盘面号)、扇区号】、内存地址(源地址/目的地址)
完成过程由三个动作组成:
**寻道(时间):**磁头移动定位到指定的磁道
**旋转延迟(时间):**等待指定扇区从磁头下旋转经过
**数据传输(时间):**数据在磁盘与内存之间的实际传输
位图
用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配出去的物理块为0,否则(空闲)为1
申请物理块时,可以在位图中查找为1的位,返回对应物理块号
归还时,将对应位转至1
空闲块表
将所有空闲块记录在一个表中,即空闲块表
主要两项内容:起始块号,块数
空闲块表
将所有空闲块链成一个链
扩展:成组链接法
已知块号→磁盘地址为:
柱面号=[块号/(磁头数×扇区数)]
磁头号=[(块号mod(磁头数×扇区数))/扇区数]
扇区号=(块号mod(磁头号×扇区数))mod 扇区数
已知磁盘地址→块号:
块号=柱面号×(磁头数×扇区数)+磁头号×扇区数+扇区号
位图与块号互换:
已知字号i、位号j:块号=i×字长+j
已知块号:字号=[块号/字长] 位号=块号 mod 字长
操作系统为了管理文件会把文件的各种属性都记录下来
反过来,这些属性是操作系统管理文件所需要的信息
文件控制块(FCB):
是文件属性中存放的信息,操作系统为了管理文件设计的数据结构,保存文件管理所需的所有有关信息
常用属性:
各种指令:Delect,copy,seek……
文件目录
统一管理每个文件的元数据,以支持文件名到文件物理地址的转换
将所有文件的管理信息组织在一起,即构成文件目录
目录文件
将文件目录以文件的形式存放在磁盘上
目录项
构成文件目录的基本单元
目录项可以是FCB,目录是文件控制块的有序集合
一级目录结构→二级目录结构→树形目录结构
路径名(文件名)
绝对路径名:从根目录开始
相对路径名:从当前目录开始
当前目录/工作目录
进程读写的目录?
目录操作
创建目录、删除目录
读目录、写目录、改名、复制
文件在存储介质上的存放方式
主要解决两个问题:
假设一个文件被划分成N块,这N块在磁盘上是怎么存放的?
其地址(块号或簇号)在FCB中是怎样记录的?
FAT文件系统:把所有物理块的链指针集中存放在一张表中,FAT表,文件分配表
文件A的起始块号4,记录在FCB
一个文件的信息存放在若干不连续物理块中
系统为每个文件建立一个专用数据结构——索引表,并将这些物理块的块号存放在该索引表中
索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块
索引表会放到某一个物理块里面,这个物理块就叫索引块
索引块里存放着文件对应的物理块块号
索引块的块号放在FCB里,通过查找到FCB就可以得到索引表,然后就可以知道文件的每一块放在什么地方了
优点:
保持了链接结构的优点,又解决了其缺点
既能顺序存取,又能随机存取
满足了文件动态增长、插入删除的要求
充分利用磁盘空间
缺点:
较多的寻道次数和寻道时间
索引表本身带来了系统开销
如:内存、磁盘空间,存取时间
问题:索引表很大,需要多个物理块存放时怎么办?
链接方式:一个盘块存一个索引表,多个索引表链接起来
多级索引方式:将文件的索引表地址放在另一个索引表中
综合模式:直接索引方式 与 间接索引方式结合
UNIX文件系统采用的是多级索引结构(综合模式)
每个文件的主索引表有15个索引项(在FCB中),每项两个字节
前12项直接存放文件的物理块号(直接寻址)
如果文件大于12块,则利用第13项指向一个物理块,在该块中存放的是一级索引表
假设扇区大小为512字节,物理块等于扇区块大小,一级索引表可以存放256个物理块号
对于更大的文件还可以利用第14和第15项作为二级三级索引表
提问:采用三级索引结构,一个文件最大可以达到多少个物理块?
实现文件系统需要考虑
磁盘上 与 内存中 的 内容布局
磁盘上
如何启动操作系统?
磁盘是怎样管理的?怎样获取磁盘的有关信息?
目录文件在磁盘上怎么存放?普通文件在磁盘上怎么存放?
内存中
当进程使用文件时,操作系统是如何支持的?在内存当中提供怎么样的数据结构
**磁盘分区:**把一个物理磁盘的存储空间划分为几个相对独立的部分,称为分区
**文件卷:**磁盘上的逻辑分区,由一个或多个物理块(簇)组成
一个文件卷可以是整个磁盘 或 部分磁盘 或跨盘(RAID)
同一个文件卷中使用同一份管理数据进行文件分配和磁盘空闲空间管理,不同的文件卷中的管理数据是相互独立的
一个文件卷上:包括文件系统信息、一组文件(用户文件、目录文件)、未分配空间
**格式化:**在一个文件卷上建立文件系统,即建立并并初始化用于文件分配和磁盘空闲空间管理的管理数据——元数据
引导区
包括了该卷引导操作系统所需要的信息
每个卷(分区)一个,通常为第一个扇区
卷(分区)信息
包括该卷(分区)的块(簇)数、块(簇)大小、空闲块(簇)数量和指针、空闲FCB数量和指针……
目录文件(根目录文件及其他目录文件)
用户文件
系统打开文件表
整个系统一张
放在内存:用于保存已打开文件的FCB
用户文件表
每个进程一个
进程的PCB中记录了用户打开文件表的位置
——如何加快目录检索?
一种解决方案:
目录项分解法:即把FCB分解成 两部分
符号目录项:文件名,文件号
基本目录项:除文件名外所有字段
例子:UNIX的i节点(索引节点或inode)
FCB=目录项 + i节点
目录项:文件名+i节点号
目录文件由目录项构成
i节点:描述文件的相关信息
每个文件由一个目录项、一个i节点和若干磁盘块构成