9.1文件与文件系统
文件:是对磁盘的抽象(进程是对CPU的抽象,地址是对内存的抽象),是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项(构成文件内容的基本单位(单个字节或多个字节),各信息项之间有顺序关系)的序列。
文件内容的意义:由文件建立者和使用者解释。
文件系统:操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用。主要完成以下任务:
- 统一管理磁盘空间,实施磁盘空间的分配与回收;
- 实现文件的按名存取:名字空间——>磁盘空间
- 实现文件信息的共享,并提供文件的保护、保密手段;
- 向用户提供一个方便使用、易于维护的接口,并向用户提供有关统计信息;
- 提高文件系统的性能;
- 提供与I/O系统的统一接口。
设计文件系统的步骤:
- 文件管理的需求分析
- 从操作系统角度(怎样组织、管理文件?)a.文件的描述、分类;b.文件目录的实现;c.存储空间的管理;d.文件的物理地址;e.磁盘实际运作方式(与设备管理的接口);f.文件系统性能。
- 从用户角度(文件系统如何呈现在用户面前)a.一个文件的组织;b.如何命名;c.如何保护文件;d.可以实施的操作。
Unix中,文件按文件性质和用途分为:普通文件(regular,包含了用户的信息,一般为ASCII或 二进制文件);目录文件(directory,管理文件系统的系统文件);特殊文件(设备文件)(special file,字符设备文件:和输入输出有关,用于模仿串行I/O设备,例如终端、打印机、网卡等。块设备文件:磁盘);管道文件;套接字。
文件的逻辑结构是指从用户的角度如何看文件,由用户的访问方式确定。典型的文件逻辑结构有:
- 流式文件:构成文件的基本单位是字符,文件是有逻辑意义的无结构的一串字符的集合;
- 记录式文件:文件由若干个记录组成,可以按记录进行读、写、查找等操作,每条记录有其内部结构。
文件的存取:
- 顺序存取(访问);
- 随机存取(访问),需提供读写位置。例如Unix中的seek操作,将指针定位到某个位置。
9.2文件的存储介质
典型的存储介质:磁盘(包括固态盘SSD)、磁带、光盘、U盘。。。
文件的信息保存在存储介质上通常以独立单位来进行信息存储传输和分配的,我们称此独立单位为物理块(信息存储、传输、分配的独立单位,存储设备划分为大小相等的物理块,统一编号),又称为块、簇。
在磁盘中,任何时刻只有一个磁头处于活动状态:输入输出数据流以位串形式出现。
物理地址形式:磁头号(盘面号)、磁道号(柱面号)、扇区号。
扇区:标题(10字节)、数据(512字节)、ECC纠错信息(12-16字节)
磁盘访问中的一次访盘请求,需要给出以下信息:读/写,磁盘地址(设备号,柱面号,磁头号,扇区号),内存地址(源/目)。磁盘访问具体有以下三个动作组成:
- 寻道(时间):磁头移动定位到指定磁道;
- 旋转延迟(时间):等待指定扇区从磁头下旋转经过;
- 数据传输(时间):数据在磁盘与内存之间的实际传输。
9.3磁盘空间管理
磁盘空间管理中采用的数据结构:
- 位图
- 用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配的物理块为0,否则为1,;
- 申请物理块时,可以在位示图中查找为1的位,返回对应物理块号;
- 归还时,将对应位转置1。
- 空闲块表
- 将所有空闲块记录在一个表中,即空闲块表;
- 主要两项内容:起始块号,块数。
- 空闲块链表
- 把所有空闲块链成一个链;
- 扩展:成组链接法。
9.4文件控制块及文件目录
文件控制块(file control block):为管理文件而设置的数据结构,保存管理文件所需要的所有有关信息(文件属性或元数据)。
其中常用属性有:文件名,文件号,文件大小,文件地址,创建时间,最后修改时间,最后访问时间,保护,口令,创建者,当前拥有者,文件类型,共享技术,各种标志(只读、隐藏、系统、归档、ASCII/二进制、顺序/随机访问、临时文件、锁)。
基本文件操作有:create delete open close read write append seek get attributes set attributes rename .
文件目录:操作系统中统一管理每个文件的元数据,以支持文件名到文件物理地址的转换,即将所有文件的管理信息组织在一起,即构成文件目录。
目录文件:将文件目录以文件的形式存放在磁盘上。
目录项:构成文件目录的基本单位,目录项可以是FCB,目录是文件控制块的有序集合。
与目录相关的概念有:
- 路径名(文件名)。绝对路径名:从根目录开始;相对路径名:从当前目录开始。
- 当前目录/工作目录
9.5文件的物理结构——文件在存储介质上的存放方式
文件的物理结构主要解决两个问题:
- 如果一个文件被划分成N块,这N块如何在磁盘上存放?
- 其地址(块号或簇号)在FCB中是怎么记录的?
文件的典型物理结构有以下三种:
- 连续(顺序)结构:文件的信息存放在若干连续的物理块中。其优点在于:简单,支持顺序存取和随机存取,所需的磁盘寻道次数和寻道时间最少,可以同时读入多个块,检索一个块也很容易。缺点是文件不能动态增长(可以通过预留空间或重新分配和移动的方法解决,但预留空间较为浪费,后者带来新的开销),不利于文件插入和删除,会产生外部碎片(采取紧缩技术整理碎片)。
- 链接结构:一个文件的信息存放在若干不连续的物理块中,各块之间通过指针链接,前一个物理块指向下一个物理块。其优点在于:提高了磁盘空间利用率,不存在外部碎片问题,有利于文件插入和删除,有利于文件动态扩充。缺点是存取速度慢,不适于随机存取。存在可靠性问题(如指针出错),并且需要更多的寻道次数和寻道时间,链接指针占用一定的空间。文件分配表(FAT):链接结构的一个变形,并不是用物理块的一部分字段存储链指针,而是将所有的物理块链接指针存放在文件分配表中。其表项的值有0(未使用的空闲块)、下一块块号、-1(表示此块为文件最后一块)三种。
- 索引结构:一个文件的信息存放在若干不连续物理块中,系统为每个文件建立一个专用数据结构——索引表,并将这些物理块的块号存放在该索引表中,索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块。 其优点在于:保持了链接结构的优点,又解决了其缺点,既能顺序存取,又能随机存取,满足了文件动态增长、插入删除的要求,能充分利用磁盘空间。缺点是较多的寻道次数和寻道时间,索引表本身带来了系统开销如内存、磁盘空间、存取时间。
通常在FCB中派生出一个字段记录索引表的位置。
当索引表很大,需要多个物理块存放时可以:
- 链接方式,一个盘块存放一个索引表,多个索引表链接起来
- 多级索引方式:将文件的索引表地址放在一另一个索引表中
- 综合模式:直接索引方式与间接索引方式结合。
Unix文件系统采用多级索引结构(综合模式):
- 每个文件的主索引表有15个索引项(FCB中),每项2个字节
- 前12项直接存放文件的物理块号(直接寻址)
- 如果文件大于12块,则利用第13项指向一个物理块,在该块中存放的是一级索引表;假设扇区大小为512字节,物理块等于扇区块大小,一级索引表可以存放256个物理块号
- 对于更大的文件可以利用第14项和第15项作为二级和三级索引表。
9.6文件系统的实现
实现文件系统需要考虑磁盘上与内存中的内容布局,其中:
- 磁盘上:
- 如何启动操作系统;
- 磁盘是怎样管理的,怎样获取磁盘的有关信息;
- 目录文件在磁盘上怎么存放,普通文件在磁盘上怎么存放。
- 内存中
- 当进程使用文件时,操作系统如何支持,即内存当中提供什么样的数据结构。
磁盘分区(partition):把一个物理磁盘的存储空间划分为几个相互独立的部分,称为分区。
文件卷(volume):磁盘上的逻辑分区,由一个或多个物理块(簇)组成:
- 一个文件卷可以是整个磁盘或部分磁盘或跨盘(raid);
- 同一个文件卷中使用同一份管理数据进行文件分配和磁盘空闲空间管理,不同的文件卷中的管理数据是相互独立的;
- 一个文件卷上:包括文件系统信息、一组文件(用户文件、目录文件)、未分配空间;
- 块或簇:一个或多个(2的幂)连续的扇区,可寻址数据块。
格式化(format):在一个文件卷上建立文件系统,即建立并初始化用于文件分配和磁盘空闲空间管理的管理数据。
磁盘上存储了:
- 引导区:包括了从该卷引导操作b系统所需要的信息,每个卷(分区)一个,通常为第一个扇区b;
- 卷(分区)信息:包括该卷(分区)的块(簇)数、块(簇)大小,空闲块(簇)的数量和指针,空闲FCB数量和指针;
- 目录文件(根目录文件和其他目录文件);
- 用户文件。