生磁盘到文件
认识磁盘
-
扇区 (sector)和 磁道(track):
下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)
-
磁头 (head) 和 柱面(cylinder):
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。 如下图
磁盘的使用
盘块:一层抽象
磁盘驱动负责由 盘块 到 CHS 的转换
磁盘访问时间中一大部分是寻道时间。
很明显如果按照盘块读取,会大大提高读写速度,而盘块就是连续的扇区构成。
Linux 0.11 盘块大小是两个扇区。
请求队列:二层抽象
FCFS
所以为什么不把移动过程中应该把经过的请求处理掉…
SSTF
短寻道优先,容易出现饥饿问题,寻道时间长的可能得不到执行。
SCAN(电梯算法)
SSTF + 中途不回折
C-SCAN(电梯算法)
多个进程共同使用磁盘
add_request()
将请求插入队列中,形成电梯队列:IN_ORDER(s1,s2)
,先比较柱面号,再比较扇区号,s1<s2
为true
。
从前往后扫描:IN_ORDER(temp,req) || !IN_ORDER(tmp,tmp->next) && IN_ORDER(req,temp->next)
拆解为:IN_ORDER(temp,req) && IN_ORDER(req,temp->next)
或 !IN_ORDER(tmp,tmp->next) && IN_ORDER(req,temp->next)
生磁盘的使用总结
怎么得到盘块号?——文件
文件:第三层抽象
文件:建立字符流到盘块集合的映射关系
连续结构:
假如要找第 200 - 212 字符的盘块号,需要知道起始块位置,系统中块大小固定。
映射表:FCB
链式结构:
起始块号为 1找到 10(test.c 的第 0 块) ,读入 10 找到 17(test.c 的第 1 块),读入 17 找到 9 (test.c 的第2块),读入 9 找到 -1结束(test.c 的第3块)。
索引结构
答案是 A