磁盘物理
磁头径向移动不能过快(磁头的径向运动,的平均加速度 有上限, )
过大的径向加速度 可能导致 磁头垂直运动 从而撞毁盘片的磁化涂层,导致磁盘报废
磁头径向运动的平均加速度如果过大, 所产生的过大动能的释放 可能导致磁头承载装置不稳, 最有可能的是导致磁头产生 垂直方向运行, 从而撞毁盘片的磁化涂层,导致磁盘报废
磁头的径向运动 , 总是 从初速度0 先加速 再减速 到末速度0,
起伏: 先加速再减速,
这个起伏可以是多次的, 也可以是一次的. 多次的更平稳,
正向加速度使得磁头积累动能, 积累的总动能 被负向加速度消耗,
如果一次起伏的动能过大 有可能负向加速度有一部分被垂直运动承担, 从而导致磁头发生垂直运动,
垂直运动如果向下 撞到盘片磁化层 则磁盘报废。
因此 磁头径向加速度 不能过大,必须有上限。
主线
driver层提供扇区
fs层基于driver层,提供文件管理 (包装多个连续扇区为一个簇)
作图演示 文件 到 簇 的过程
路数
fattools_maxpat78 (fat文件系统实现), 在其代码中插入生成dot graphviz作图,用以展现此时簇们怎么表示(构成)文件(目录)的
空fat文件系统的样子
有一个小文件的fat文件系统的样子
有一个稍大文件的fat文件系统的样子
删掉一个文件后 fat文件系统的样子
有一个目录的fat文件系统的样子
一个目录下有多个文件的fat文件系统的样子
记住这个自制程序只做读动作 ,会简单很多
fattools_maxpat78 源码分析
FATtools.vhdutils.Image
FATtools.vhdutils.Image : 表示整个磁盘
- 字段: FATtools.vhdutils.Image:_pos
记录本次读取,从磁盘上哪(物理字节位置)开始读取
主线
#FATtools.Volume.vopen
def vopen(path, mode='rb', what='auto'):
if path.lower().endswith('.vhd'): # VHD image
diskPhysical:vhdutils.Image = vhdutils.Image(path, mode)
diskPhysical.seek(0)#磁盘位置到起始位置
mbr:partutils.MBR = partutils.MBR(diskPhysical.read(512), disksize=diskPhysical.size) #解析MBR以获得分区表:读磁盘前512字节(第一个扇区:mbr)
读主线, 三步:
- 解析成 part:disk.Partition
- 将part解析成 v目录表:FAT.DirTable
- v目录表.iterator的元素是FAT.DirEntry