本讲有两层抽象
每做完一件事,磁盘会中断一次;
磁盘驱动通过out
发给磁盘控制器;
基本概念
磁盘的访问单位是盘块(连续的几个扇区);
扇区大小是512字节;
磁盘的I/O过程
移动磁头,至相应的磁道上;
旋转磁盘,至相应的扇区上;
磁盘与内存缓冲区信息交互;
往控制器中写柱面、柱面(C)、磁头(H)、扇区(S)、缓存位置;
out
指令,
通过盘块号读写磁盘(一层抽象)
磁盘驱动负责从block
计算出cyl
、head
、sec
磁盘驱动通过out
发给磁盘控制器。
Block = C x (Headers + Sectors) + H x Sectors + S
读写速度与山区大小的关系
读写单位是盘块,包括了好几个山区。
多个进程通过队列使用磁盘
SSTF磁盘调度
Shortest-seek-time First
SCAN磁盘调度
SSTF + 中途不回折:每个请求都有机会处理
C-SCAN调度(电梯算法)
SCAN + 直接移动到另一端:两端请求都能很快处理
生磁盘(raw disk)的使用整理
- 进程“得到盘块号”,算出扇区号(sector);
- 用扇区号
make req
, 用电梯算法add_request
; - 进程
sleep on
- 磁盘中断处理;
static void read_intr(void)
{
end_request(1); // 唤醒进程
do_hd_request();
}
do_hd_request
算法cyl
,head
,sector
;hd_out
调用(…)完成端口写。
Reference
:操作系统之外设与文件系统——李治军