-
Notifications
You must be signed in to change notification settings - Fork 1
9月11日学习笔记
17.6 文件分配
把哪些块分配给一个文件来存它的数据
文件大小:大多数文件都很小,需要对小文件提供很好的支持,块空间不能太大
一些文件非常大,必须支持大文件(64位文件偏移),大文件需要访问高效
文件分配:如何表示分配给一个文件数据块的位置和顺序,连续分配、链式分配、索引分配
连续分配:分配一个起点,然后连续的若干个数据块用来存这个文件
链式分配:在前一块中记当前块的位置,一直到最后一块
索引分配:分配一块里头专门用来存序号,
选择时考虑的因素:存储效率(外部碎片等);读写性能(访问速度)
连续分配:文件头(即文件控制块)指定起始块和长度
分配策略:最先匹配、最佳匹配...
优点:文件读取表现好,高效的顺序和随机访问
缺点:碎片
文件增长问题,预分配?按需分配?
链式分配:文件以数据块链表方式存储,文件头包含了到第一块和最后一块的指针
优点:创建、增大、缩小很容易;没有碎片
缺点:无法实现真正的随机访问;可靠性差,破坏一个链,后面的数据块就丢了
索引分配:为每个文件创建一个索引数据块,里面来存都有哪些数据块我存了数据
索引数据块的内容是指向文件数据块的指针列表
文件头包含了索引数据块指针
优点:创建、增大、缩小很容易;没有碎片;支持直接访问
缺点:当文件很小时,存储索引的开销很大;文件很大时,大到一个索引块存不下了,就要再加索引快
大文件的索引分配
链式索引快:各个索引快之间如何来组织,总体上来说是索引分配方法,指向这里的块,然后这地方是索引块
索引快之间用链式,链式索引块
索引之间再做一个索引,多级索引块
UFS(unix file system)的多级索引分配
文件控制块中,前面10个是直接索引,如果存的数据比较少,只有10块以内,索引直接到文件对应的数据块,大于10,则第11个指针写的是一个一级间接索引,它指向一个索引快,这个索引快再指向实际的数据块,一级索引不够用就加二级索引,如果二级索引仍然不够用,再加一级三级索引
效果:1、提高了文件大小限制阀值;2、动态分配数据块,文件扩展很容易;3、小文件开销小;4、只为大文件分配间接数据块,大文件在访问数据块时需要大量查询
17.7 空闲空间管理和冗余磁盘阵列RAID
空闲空间管理:跟踪记录文件卷中未分配的数据块
采用什么数据结构表示空闲空间列表?
1、位图,Di=0表明数据块i是空闲,否则,表示已分配
使用简单但是可能会有一个大的很大向量表
160GB磁盘,4KB为一块,2的30次方乘以160,然后,4k,2的12次方为1块,这样的话,就有40兆数据块,如果说8位能表示8个数据块,那就是5M字节的位图所占用的存储空间
假定空闲空间在磁盘中分布均匀,则找到“0”之前需要扫描n/r,n=磁盘上数据块的总数,r=空闲块的数目
链表:每一个空闲块中有一个指针指向下一块
链式索引:最底下一层是索引,上边用链表
冗余磁盘阵列RAID:提高文件系统可靠性和读写性能的一组技术,
磁盘分区:通常情况下,我们在访问磁盘的时候,由于磁盘上由磁头的移动,机械运动,性能相对来说是比较慢的
通常情况下,我们会通过磁盘分区来限制这个寻道的时间,从而提高它的性能
分区是一组柱面的集合
每个分区都可视为逻辑上独立的磁盘
一个典型的磁盘文件系统组织
文件卷:一个拥有完整文件系统实例的外存空间通常常驻在磁盘的单个分区上
多磁盘管理
使用多磁盘可改善:1、吞吐量(通过并行);2、可靠性和可用性(通过冗余)
冗余磁盘阵列(RAID,Redundant Array of Inexpensive Disks)
多种磁盘管理技术,它通过条带化、映像、带校验的条带化来实现对磁盘可靠性性能的提升
分类:RAID-0,RAID-1,RAID-5
实现:1、软件:操作系统内核的文件卷管理;2、硬件:RAID硬件控制器(I/O)
RAID-0:磁盘条带化
把数据块分成多个子块,存储在独立的磁盘中
通过独立磁盘上并行数据块访问提供更大的磁盘带宽
RAID-1:磁盘镜像
向两个磁盘写入,从任何一个读取,1、可靠性成倍增长;2、读取性能线性增加;
RAID-4:带校验的磁盘条带化
数据块级的磁盘条带化加专用奇偶校验磁盘,存储容量没有条带化那么高,但是可靠性提高了
允许从任意一个故障磁盘中恢复
RAID-5 带分布式校验的磁盘条带化
校验和不是固定地存放在校验磁盘上
基于位和基于块的磁盘条带化:条带化和奇偶校验按“字节”或者“位”
RAID-0/4/5:基于数据块
RAID-3:基于位
可纠正多个磁盘错误的冗余磁盘阵列
RAID-5:每组条带块有一个奇偶校验块,允许一个磁盘错误
RAID-6:每组条带块有两个冗余块,允许两个磁盘错误
RAID嵌套:RAID 0+1 或者 RAID 1+0