【OS】L28 生磁盘的使用

本讲有两层抽象
每做完一件事,磁盘会中断一次;
磁盘驱动通过out发给磁盘控制器;

基本概念

磁盘的访问单位是盘块(连续的几个扇区);
扇区大小是512字节;

磁盘的I/O过程

移动磁头,至相应的磁道上;
旋转磁盘,至相应的扇区上;
磁盘与内存缓冲区信息交互;

往控制器中写柱面、柱面(C)、磁头(H)、扇区(S)、缓存位置;
out指令,

通过盘块号读写磁盘(一层抽象)

磁盘驱动负责从block计算出cylheadsec
磁盘驱动通过out发给磁盘控制器。
在这里插入图片描述
Block = C x (Headers + Sectors) + H x Sectors + S

读写速度与山区大小的关系

读写单位是盘块,包括了好几个山区。
在这里插入图片描述

多个进程通过队列使用磁盘

在这里插入图片描述

SSTF磁盘调度

Shortest-seek-time First

SCAN磁盘调度

SSTF + 中途不回折:每个请求都有机会处理

C-SCAN调度(电梯算法)

SCAN + 直接移动到另一端:两端请求都能很快处理

生磁盘(raw disk)的使用整理

  1. 进程“得到盘块号”,算出扇区号(sector);
  2. 用扇区号make req, 用电梯算法add_request
  3. 进程sleep on
  4. 磁盘中断处理;
static void read_intr(void)
{
		end_request(1);		// 唤醒进程
		do_hd_request();
}
  1. do_hd_request算法cylheadsector;
  2. hd_out调用(…)完成端口写。

Reference:操作系统之外设与文件系统——李治军

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值