目录
一、相关概念
二.文件分配
三.可用空间一览表
四.多磁盘管理-RAID
五.磁盘调度
另一方面,相关概念文件系统是用于持久性存储的系统抽象。 硬盘是持久性存储介质的一种。 需要管理硬盘等文件系统,管理文件块,哪个块属于哪个文件; 需要管理可用空间和分配策略为了正确保护文件,文件数据的存储必须具有可靠的持久性。 文件属性包括名称、文件类型(后缀)、位置、大小、读写权限、作者、创建日期和时间以及最近的修改日期和时间。 文件头存储文件的控制信息。
文件描述符是操作系统为维护每个进程而维护的打开的文件表的索引。 为了有效管理文件,需要元数据。 元数据包括用于记录上次读写位置的文件指针、文件打开数(文件是共享资源,允许多个进程打开同一文件)、文件磁盘位置)和对缓存数据的访问权限高于操作系统的APP应用程序不需要在意文件在磁盘上的位置。 只需向缓冲区Buffer读取/写入即可。 具体的逻辑存储器和外部存储器的映射关系由操作系统进行。 的读/写单位是页面或字节,外部存储磁盘的读/写是扇区。
如果用户需要读取文件数据,操作系统将获取用户需要访问的字节空间,然后操作系统将根据用户的需要访问和检索字节所在的扇区。
别名和一个文件有多个名称。 通过软连接生成的文件,其内容是另一文件的路径名(指针),通过访问该路径名可以间接访问对应的文件,也称为快捷方式。 如果硬链接生成的文件,则该文件条目指向同一文件的内容。 对于硬链接,有一种特殊的数据结构,用于记录文件被引用的次数。 删除与硬链接对应的文件。 在将计数减少1并减少到0之前,不会完全删除。 删除与软连接对应的文件后,文件将消失,链接也将悬空。 就像c的智能指针和弱指针。 应用别名的潜在风险是循环引用,在遍历路径时可能引起异常,因此需要考虑文件搜索算法的健壮性。
文件系统用于磁盘文件系统、数据库文件系统(WinFs )、日志文件系统(日志文件系统)、文件数据恢复)、网络/分布式文件系统
虚拟文件系统是对所有文件系统的抽象、管理所有文件和与文件系统相关的数据结构、提供统一的高层接口以及对各种文件系统的高效读/写/检索
在基本的文件系统的数据结构中,音量控制块(超块)记录文件系统的特征信息,例如块大小、块数、空块、指针等; 文件控制块用于记录文件的特征信息,包括所有者、文件大小和数据库位置。 每个目录条目一个目录节点。 包括目录条目的数据结构、指定的文件控制块和父节点条目的列表等。
二、文件发布文件发布分为三种:连续发布方式、链式发布方式、索引发布方式。 对于大小不同的文件,考虑到空间效率和时间效率,必须采用适合块分配的方法。 典型的性能指标是访问时间和空间利用率。
连续分配策略是找到并分配满足文件大小的块。 类似于页面内存的连续分配策略。 如果频繁修改/删除文件,则可能存在不可用的空闲块。 当然,这种组织方式很简单,通常会进行最佳分配、最初的适应等。
链分配策略,链表这样的数据结构。 好处是碎片较少,但串行访问可能需要时间。 要访问第三个数据块,必须首先访问第二个数据块;要访问第二个数据库,必须首先访问第一个数据库。 另一个缺点是,链表指针(链接)信息可能由于突然断点而来不及将文件数据写入硬盘,在中途可能丢失修改数据块的链接信息,在“链”断开后
一种多级别索引分配策略,在类似树的数据结构中,除叶以外的每个节点都是索引,并且可以从索引块中找到数据库的位置。 这种方式
可以高效地利用碎片,增删也方便。缺点就是存储小文件也需要为索引块分配空间,不能直接访问。
三、空闲空间列表
文件系统需要把空闲空间组织起来。可以用‘0’ 和 ‘1’ 表示数据块是否为空闲。所以可以用位图来管理文件系统的所有数据块列表的空闲情况。访问文件系统时,数据块空闲列表需要装入到内存中,因此还需要考虑可能因为断电造成内存和硬盘数据信息不一致情况的问题。
四、多磁盘管理-RAID
早期磁盘容易坏,数据容易丢失。为了保持高健壮性,通常用多个便宜的硬盘并行写数据,这样一个硬盘损坏也不至于数据丢失,同时也可以提高磁盘的访问效率。
RAID-0:把数据均匀地放在独立的硬盘里,对硬盘并行的写操作和读操作。对于操作系统来说,访问数据,可以并行地将不同硬盘的数据写入内存中。
RAID-1:如果其中有一个硬盘损坏,那么其他硬盘可以替代损坏的硬盘的工作,提高可靠性。多硬盘起到了镜像作用。
RAID-4:多硬盘中,用一个硬盘用来完成数据纠错功能,称为Parity Disk。此方法考虑到了RAID-0 和RAID-1的高效和高可靠的特点。缺点是Parity Disk 的读写非常频繁。
RAID-5:多硬盘中,选其中用几个或多个硬盘用来完成数据纠错功能。让多个硬盘分摊原先Parity Disk的读写负担。
五、磁盘调度
磁头通过移动来找到扇区具体位置,磁盘通过旋转来寻道找到数据的位置。一个磁盘有多个盘片,每个盘片有一到两个的磁头来读取数据。“旋转”和“移动”都是机械操作,与电子读取的效率相比慢了好几个数量级。
那么有什么调度策略来减少读取磁盘的开销呢?当有一系列寻道请求时,如果采用先来先服务策略,访问数据如果在不同扇区,而扇区在磁盘的物理位置距离过长,那么磁头读取数据时可能会来回“跳动”。造成很大的开销。
最短寻道时间,在系列寻道请求中,找到扇区位置与当前磁头所在扇区的位置的距离最短的请求,先执行。这个可能会造成离磁头的远的寻道请求长时间无法执行,造成饥饿现象。
Scan,又称电梯算法,磁头先往磁盘内环移动接收相应的寻道请求,再往磁盘外环接收相应的寻道请求,像电梯一样。那么所有请求都可以公平地得到访问。
C-Scan,单方向寻道法,磁头从磁盘内环当作起始位置。往磁盘外环移动接收相应的寻道请求,到了外环后迅速回到起始位置。
C-Look, 单方向寻道法,磁头从磁盘内环当作起始位置。往磁盘外环移动接收相应的寻道请求,到了最外环的寻道请求后迅速回到起始位置。
N-step-Scan.将寻道请求队列分成N个子队列,每处理子队列请求都采用Scan算法。
F-Scan。是N-step-Scan的特例,只分成两个子队列,每处理子队列请求都采用Scan算法。
以上是基本的寻道策略,然而现实情况可能根据磁盘的特点指定出特有的策略,有些硬盘的寻道甚至都不需要程序来完成,硬件帮你做了。