磁盘提供大量的外存空间来维持文件系统。磁盘的下述两个特点使得其成为存储多个文件的方便介质。
①能够原地重写。②能够直接訪问磁盘上的随意一块信息。为了提供对磁盘的高效且便捷的訪问,操作系统通过文件系统来轻松地存储、定位、提取数据。
文件系统有两个设计问题。
①定义文件系统对用户的接口②创建数据结构和算法来将逻辑文件系统映射到物理外存设备上。文件系统本身通常由不同的层组成。例如以下图所看到的的是一个分层设计的简单样例。
I/O控制 由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息传递基本文件系统 向合适的设备驱动程序发送一般命令就可对磁盘上的物理块进行读写文件组织模块 知道文件及其逻辑块和物理块。空暇空间管理器逻辑文件系统 管理元数据:文件系统的全部结构数据。而不包含实际数据(或文件内容)依据给定符号文件名称来管理文件夹结构逻辑文件系统通过文件控制块(FCB)来维护文件结构FCB的典型结构例如以下图所看到的
实现文件系统要使用多个磁盘和内存结构。
尽管这些结构赢操作系统和文件系统而异,可是还是有其规律性的。
实现文件系统的结构和操作例如以下:
磁盘结构。内存中的文件系统结构;分区与安装虚拟文件系统卷控制块(卷)( Volume control block (/volume))
包含卷的具体信息,包含 块数和块的大小;空暇块的数量和指针;空暇FCB的数量和指针。UFS称为超级块 Superblock 。 NTFS 称为 主控文件表master file table 。文件夹结构
用来组织文件UFS 。包含文件名称和关联的inode 号NTFS,主控文件表(master file table );文件控制块(FCB):包含非常多文件信息。如文件许可、拥有者、大小和数据块的位置等,详情见上文演示样例。 UFS中, 索引节点( inode) ;NTFS中,主控文件表; 採用关系数据库结构, 记录/文件下图总结了文件系统实现的 操作结构。
磁盘布局赢操作系统而异。一个磁盘可分成多个分区,或者一个卷能够跨越多个磁盘上的数个分区。
分区能够是“生的”(raw)。即没有文件系统,或是“熟的”(cooked)即含有文件系统。
生的分区用于没有合适文件系统的地方。
如:Unix中的交换区,由于它不使用文件系统而是使用自己的磁盘格式。
引导信息能存在各个分区中。而且有自己的格式。由于在引导时,系统并没有文件系统设配驱动程序,所以不能解释文件系统格式。
它通常为一组有序块而且作为二进制镜像文件读入内存。
引导信息除了包含怎样启动一个特定操作系统外。还能够有其它指令。(如BootManager bootstar 8.3,Linux GRUB, GRUB - GRand Unified Bootloader)
根分区(root partition)包含操作系统内核或其它系统文件,在引导时装入内存。
其它分区依据不同操作系统能够在引导时自己主动装入或在此之后手动装入。
/root, /boot文件系统安装表(file system mount table)第一层为文件系统接口,包含。open()、read()、write()和close()调用以及文件描写叙述符。
第二层称为虚拟文件系统(VFS)层,它有两个目的:
VFS层通过定义一个清晰的VFS接口,以将文件系统的通用操作和具体实现分开。多个VFS接口的实现能够共存在同一台机器上,它同意訪问已经装再本地的多个类型的文件系统VFS提供了在网络上唯一标示一个文件的机制。文件夹分配和文件夹管理算法的选择对文件系统的效率、性能和可靠性有非常大的影响。
最为简单的文件夹实现方法是使用存储文件名称和数据块指针(数组、链表等)的线性列表,这样的方法编程简单可是执行时较为费时。
文件夹条目的线性列表的真正缺点是採用线性搜索来查找特定条目。 其实,很多操作系统採用软件缓存来存储近期訪问过的文件夹信息。缓存命中避免了不断地从磁盘读取信息,排序列表能够使用二分搜索。并降低平均搜索时间。
採用Hash数据结构的线性表
降低了文件夹搜索时间。插入和删除也较为简单。只是须要一些机制来避免碰撞(两个文件名称哈希到同样的位置) 哈希表的最大困难是:其固定的大小和哈希函数对大小的依赖性连续分配方法要求每一个文件占领磁盘上的一组连续的块。
特点:
简单 - 仅仅须要记录文件的起始位置(块号)及长度。訪问文件非常easy,所需的寻道时间也最少 顺序訪问。直接訪问。存在的问题 为新文件找空间比較困难 首次,最佳,最差文件非常难增长逻辑地址到物理地址的映射方法例如以下:
逻辑地址 / 块大小 = 商, 余数 LA512=Q⋅⋅⋅⋅⋅⋅R訪问的块 = Q + 起始地址(base) 块中的位置 = R
基于扩展的连续分配方法:
很多新的文件系统採用一种修正的连续分配方法扩展是一个连续的磁盘块 文件分配时,将扩展分配给文件还有一个大的连续空间一个文件包含一个或多个扩展须要一个指向下一个扩展的指针文件块的位置就成为開始地址、块数、加上一个指向下一扩展的指针。分配磁盘块时。在扩展中进行链接分配攻克了连续分配的全部问题。
採用链接分配。每一个文件是磁盘块的链表:
磁盘块分布在磁盘的不论什么角落。每一个文件夹条目都有一个指向文件第一块的指针。该指针初始化为 nil (表尾指针的值)以标识空文件。 长处: 简单 - 仅仅需起始位置文件创建与增长easy缺点: 不能随机訪问块与块之间的链接指针须要占用空间 簇:将多个连续块组成簇。磁盘以簇为单位进行分配存在可靠性问题每一个分区的開始部分用于存储该FAT表。
每一个磁盘块在该表中有一项,该表能够通过块号来索引。
文件夹条目中含有文件首块的块号码。
依据块号码索引的FAT条目包含文件下一块的地号码。
这样的链会一直继续到最后一块,该块相应FAT条目的值为文件结束值。未使用的块用0值来表示。
为文件分配一个新的块仅仅要简单地找到第一个值为0的FAT条目。用新块的地址替换前面文件结束值。用文件结束值替代0。
假设不正确FAT採用缓存,FAT分配方案可能导致大量的磁头寻道时间。但通过读入FAT信息。磁盘能找到不论什么块的位置,从而实现随机訪问。
第一个空暇块号:
一个字的位数×值为0的字数+第一个值为1的位的偏移 位向量须要额外的空间 设块大小为212 字节磁盘大小为230字节 (1GB)N = 230/212=218 (即32K bytes)easy得到连续的文件分配与回收过程 分配过程回收过程将全部空暇磁盘块用链表连接起来,并将指向第一空暇块的指针保存在磁盘的特殊位置,同一时候也缓存在内存中。
不易得到连续空间
没有空间浪费
成组链接图例如以下所看到的
分组(成组链接) 分配与回收过程分配过程回收过程 所需的保护指向空暇表的指针效率依赖于
磁盘分配与文件夹算法 预分配,簇文件文件夹项中保存的数据的类型 近期写/訪问日期指针大小 212,232,264,2128性能有例如以下几点:
磁盘缓冲 - 将近期使用过的块放在内存的某个地方立即释放与预先读取 - 优化顺序訪问留出一块内存作为虚拟磁盘(或RAM磁盘)来提高个人计算机的性能无统一缓冲缓存的I/O例如以下图所看到的
採用了统一缓冲缓存的I/O则变化例如以下
不同的磁盘缓存位置
转载于:https://www.cnblogs.com/brucemengbm/p/7348857.html
相关资源:各显卡算力对照表!