生磁盘到文件

生磁盘到文件

认识磁盘

生磁盘到文件
生磁盘到文件

  • 扇区 (sector)和 磁道(track):
    下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)
    生磁盘到文件
  • 磁头 (head) 和 柱面(cylinder):
    硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。 如下图
    生磁盘到文件
    生磁盘到文件

磁盘的使用

生磁盘到文件

盘块:一层抽象

生磁盘到文件
生磁盘到文件
磁盘驱动负责由 盘块 到 CHS 的转换
生磁盘到文件
磁盘访问时间中一大部分是寻道时间。
很明显如果按照盘块读取,会大大提高读写速度,而盘块就是连续的扇区构成。
生磁盘到文件
Linux 0.11 盘块大小是两个扇区。

请求队列:二层抽象

生磁盘到文件

FCFS

生磁盘到文件
所以为什么不把移动过程中应该把经过的请求处理掉…

SSTF

短寻道优先,容易出现饥饿问题,寻道时间长的可能得不到执行。
生磁盘到文件

SCAN(电梯算法)

SSTF + 中途不回折
生磁盘到文件

C-SCAN(电梯算法)

生磁盘到文件

多个进程共同使用磁盘

生磁盘到文件
add_request()将请求插入队列中,形成电梯队列:
IN_ORDER(s1,s2),先比较柱面号,再比较扇区号,s1<s2true
从前往后扫描:
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