跳到主要内容

磁盘里的文件和文件系统

文件就是字节序列,仅此而已。

每个 I/O 设备,包括磁盘、键盘、显示器、网络,都可以看成是文件。

逻辑结构

  1. 流式文件:无结构文件

  2. 顺序文件:记录定长,效率最快,顺序存储和链表存储。串结构,无序,费时顺序结构:折半查找

  3. 索引文件:记录不定长,建立索引表,每个记录设置一个索引表项,包括指向变长记录的指针和记录长度。提高了查找效率,增加了空间

  4. 索引顺序文件:先索引再顺序查找,提高了查找效率,增加了空间

  5. hash文件:键值直接决定记录物理位置,存取速度很高,但是会引起冲突

物理结构

  1. Continuous Allcation(连续分配):快速,无法动态增减,定期紧缩。逻辑文件中的记录顺序存储在相邻的块中,一个文件的目录项中物理地址字段包括:第一块的地址和该文件所分配的区域长度简单,快;长度不宜动态增加,保持有序性付出的代价,外部碎片

  2. Linked Allocation(离散分配,链接分配):

  3. 隐式链接:目录项中含有第一个和最后一个盘块的指针,每个盘块含有下一个盘块的指针,对用户透明,只适合顺序访问,稳定性也差。每个盘块都下一个盘块的指针,访问效率低,可靠性差

  4. 优点:消除了外部碎片,提高了磁盘的利用率,可以动态分配

  5. Cluster(簇)的使用:几个盘块组成cluster,增加了内部碎片,改善了磁盘访问时间

  6. 显式链接:磁盘中设置一张FAT(文件分配表),每个表项存放链接指针。文件的第一个盘号记录在目录项的物理地址中。FAT在系统启动时会读入内存,查找的过程在内存中进行,显著提高了检索速度,明显的减少了访问磁盘的次数。链接每个物理快的指针显式的存放在内存一张表中,每个磁盘设置一张链接表,文件分配表

  7. Index Allocation(混合索引分配)检索分配:每个文件设置一个索引块,索引块存放索引表,索引表每个表项对应分配一个物理块。支持直接访问,不产生外部碎片,文件长度不限。增加系统存储开销,两次访问外存,降低了存取速度

  8. FAT太大,只需将文件对应盘块的编号调入内存即可,为此,索引分配将每个文件所有的盘块号集中放在一起构成了索引块(索引表),是一个磁盘块地址的数组。直接访问,没有外部碎片,占用系统存储空间

  9. 混合索引:小文件地址,将每个盘块地址直接放入FCB中,直接从FCB中读取; 中型文件单级索引,FCB中找到索引表,从中获得该文件的盘块地址,一次间址;大型文件:二级三级索引

FCB

用来存放控制文件需要的各种信息的数据结构,FCB的有序集合称为文件目录,一个FCB就是一个文件目录项

文件名和文件描述信息分开,使文件描述信息单独形成一个称为索引结点的数据结构,简称i结点,inode。在文件目录中每个目录项仅由文件名和指向该文件所对应的索引结点的指针构成,大大节省系统开销

{
"host": "文件主标识符",
"type": "文件类型:普通文件,目录文件,特别文件",
"auth": "各类用户存取权限",
"es_ad": "外存物理地址-盘块编号",
"len": "文件长度",
"link": "本文件系统中所有指向该文件的文件名的指针数",
"time": "各类时间",
"count":"访问计数器",
"status":"是否上锁或被修改",
...
}

文件系统

文件系统格式分为FATEXTNTFS等,每种类型的文件系统,都规定了文件的组织形式,文件系统格式与相对应,而不是与相对应,一个硬盘在存放文件前必须要规定文件的组织形式,即规定该分区或硬盘的文件系统格式,所以硬盘需要先分区、然后格式化成指定文件系统后才可使用。文件管理系统提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。

  1. 文件目录系统:查找目录,获取inode等

  2. 存取控制验证:auth确认

  3. 逻辑文件系统:获取文件逻辑地址

  4. 物理文件系统:由逻辑地址到物理地址的转化

组织结构

MBR:Master Boot Record硬盘:MBR是一种硬盘划分规范,其规定了硬盘扇区的组织方式,遵循该规范的硬盘称作MBR硬盘,与传统Legacy BIOS配合使用;MBR引导扇区中的硬盘分区表DPT以特定标识符区分active Partition有操作系统的扇区。活动扇区的第一个扇区叫PBR分区引导记录,记录Loader操作系统引导程序的位置。

GPT:GUID Partition Table硬盘:GPTIntel公司开发的一种硬盘划分规范,规定了硬盘扇区的组织方式,是UEFI规范中的一部分,遵循该划分规范的硬盘称作GPT硬盘,配合UEFI BIOS使用,逐渐替代Legacy BIOS+MBR硬盘的使用方式;

UEFI操作系统:按照GPT硬盘划分规范进行操作的称作UEFI操作系统,UEFI操作系统必须在磁盘中开辟一个ESP分区,用于存放操作系统启动文件,该分区的格式为FAT文件系统格式;

ESP:UEFI System Partition分区:UEFI操作系统必须在磁盘中开辟一个ESP分区(安装操作系统前会对磁盘进行分区操作),用于存放启动文件,且格式化为FAT格式,以便UEFI BIOS能够获取该分区中的启动文件,从而加载操作系统;

VFS

采用标准的系统调用读写位于不同物理介质上的不同文件系统

为用户程序提供了文件系统操作的统一接口,屏蔽了不同文件系统的差异和操作细节,同时提高了系统进程

抽象出一个通用的文件 系统类型,定义了通用文件都支持的接口,新得文件系统只要支持并实现这些接口,即可安装使用。

  1. 超级对象

  2. 索引结点对象

  3. 目录项对象

  4. 文件对象

mounting挂载是指由操作系统使一个存储设备上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。额外的一个文件系统与根文件系统的某个现存目录建立关系,使得该目录成为其他文件的访问入口

文件接口

进程读、排序、写文件过程:通过read系统调用完成。创建一条消息包含文件描述符fd ,缓冲区buffer,大小nbytes等参数,以及表示read类型的消息码。然后将这条消息送给文件系统,并阻塞该进程以等待文件系统的响应。文件系统在收到消息后,以消息类型为下标,查找过程表,调用响应的过程处理读请求,数据输入完成后,操作系统切换到排序进程进行排序工作。完成后调用write系统调用。

  1. create:分配外存空间,目录中创建目录项

  2. write:执行系统调用,维护写指针

  3. read:执行系统调用,维护和更新读指针

  4. locate:搜索目录找到适当条目,当前文件位置指针重新定位到给定值

  5. delete:目录中检索目录项并释放,count == 0 删除

  6. cut:文件所有属性不变,删除文件内容,将其长度置0,释放空间

  7. open

  8. 系统打开文件表复制FCB副本和其他信息(打开计数器open count

  9. 进程打开文件表指向系统打开文件表中该文件的指针

  10. 打开文件的关联信息:文件指针,文件打开计数器,文件磁盘位置,访问权限

内存映射文件MMF

因为常规文件操作需要从磁盘到页缓存再到用户主存的两次数据拷贝。而mmap操控文件,只需要从磁盘到用户主存的一次数据拷贝过程。说白了,mmap的关键点是实现了用户空间和内核空间的数据直接交互而省去了空间不同数据不通的繁琐过程。因此mmap效率更高。

文件共享

  1. 硬链接(inode)静态共享:FCB不放在目录块中,放在索引结点中。文件目录只设置文件名和指向相应的索引结点的指针。count链接计数器,表示链接到本索引结点即文件上的用户目录项的数目。基于inode的共享,两个不同的目录项指向相同的inode

  2. 快捷方式:实际上是一个后缀.link的文件,这个文件只有在windows图形界面下点击才能到达目标文件路径,在命令行下仅是一个文件而已无快捷效果

  3. 软链接(含路径名的LINK类型)静态共享:LINK文件记录被链接文件的路径名,不拥有指向其索引结点的指针,不会发生空指针问题.也是一个目录文件但是携带链接属性(l),这个文件在图形界面与快捷方式无异,但在命令行下,程序会把它当做一个目录。只有文件拥有者拥有指向inode的指针,其他共享该文件的用户只有该文件的路径名

  4. 动态共享:两个进程同时对文件进行操作

文件保护

  1. 访问控制表(矩阵)ACL:某种记录每个用户(组)对于每个文件的操作权限。

  2. 口令:创建文件时附在FCB上,访问时需要。不够安全。

  3. 密码:对文件进行加密,访问时需要密钥,保密性极强,但编译和破译需要时间。

目录结构

FCB的有序集合称为文件目录。本质是一个外存文件

目录项:文件名和指向该文件inode的指针构成

  1. 单级目录结构:整个文件系统只建立一张目录表,查找速度慢,不允许重名

  2. 两级目录结构:主文件目录MFD(master file directory)UFD(user file directory),不能分类,用户内不能重名

  3. 树型目录结构:/分隔符,根目录出发的绝对路径,进程对个文件的访问都是相对于当前目录进行的,每个用户都有一个自己的当前目录,明显提高了对目录的检索速度和文件系统的性能

  4. 无环图目录结构(文件共享):每个共享结点设置一个共享计数器,仅当共享计数器为0时,才可以真正的删除该结点

空间管理

  1. 空闲表法不适用于大型文件系统:连续分配 表项:空闲区第一个空闲盘块号|空闲盘块数目

  2. 空闲链表法不适用于大型文件系统:空闲盘块链,空闲盘区链(一个盘区可能包括多/个)空闲块链接成链表

  3. 位示图法:每一位代表一个盘块的状态

  4. 成组链接法unix:用来存放一组空闲盘块号

  5. 分配:超级块不止一块,出栈;超级块就剩下一个索引块,则将索引块调入主存超级块中,把该索引块分配

  6. 回收:超级块没满,则入超级块栈;超级块满了,内存超级块写入该回收块,内存超级块入栈该回收块

Loading Comments...