第5节 磁盘 磁盘的结构 磁盘的地址 磁盘访问的优化 磁盘使用过程 举例
对我们来说,磁盘无疑是最重要的设备,我们下载的电影放在这里,我们写的论文也放在这里… 磁盘与主机之间的连结 总线控制器 CPU-内存总线 图形控制器 PCI总线 IDE控制器 对我们来说,磁盘无疑是最重要的设备,我们下载的电影放在这里,我们写的论文也放在这里…
认识一下磁盘 画一个示意图: 盘面 看看俯视图: 扇区是磁盘的寻址单位、访问单位 磁道 扇区 磁盘的数据单位是扇区 扇区大小:512字节
磁盘的地址 磁盘访问时间 = 写入控制器时间 + 寻道时间 + 旋转时间 + 传输时间 柱面C ylinder 磁头Head(磁头号、盘面号) 扇区Sector 磁盘访问时间 = 写入控制器时间 + 寻道时间 + 旋转时间 + 传输时间
最直接的使用磁盘地址 磁盘控制器 程序 只要往控制器中写柱面、磁头、扇区、缓存位置 IDE控制器 这个程序就是驱动程序 sec cyl head 程序 sec,head,cyl 只要往控制器中写柱面、磁头、扇区、缓存位置 IDE控制器 这个程序就是驱动程序 三维地址(CHS)可以变为一维地址
从CHS到扇区号 扇区编号,按照(C,H,S)将扇区形成一维扇区数组,数组索引就是扇区编号 磁臂 柱面1 柱面2 柱面n … 整个磁盘 磁道1 磁道2 磁道k … 一个柱面 扇区1 扇区2 扇区p … 一个磁道 kp 扇区编号,按照(C,H,S)将扇区形成一维扇区数组,数组索引就是扇区编号 (k+1)p (k+2)p …
一个柱面上的编号 0号扇区 0号扇区 1号扇区 问题:1号扇区在哪里?
从CHS到扇区号 问题:C、H、S得到的扇区号是? C(HeadsSectors) + HSectors + S 问题:接下来呢? 1 1 6 问题:接下来呢? 6 7号扇区 问题:C、H、S得到的扇区号是? C(HeadsSectors) + HSectors + S
从扇区到盘块 为什么要组块? I/O系统用盘块访问磁盘 每次读写1 K:碎片0.5K;读写速度100K/秒;每次读写1 M:碎片0.5M;读写速度约40M/秒 扇区大小 空间利用率 读写速度 为什么要组块? I/O系统用盘块访问磁盘 扇区大小固定,但是太小了,一次读写一个扇区太费时了,所以操作系统可以每次读/写连续的几个扇区(盘块)
文件的引入 第3层抽象 第2层抽象 第1层抽象 sec cyl head 磁盘 驱动 文件 I/O系统 文件名+偏移 BLOCK CHS
磁盘访问优化 减少访问磁盘的总时间 减少访问磁盘的次数 磁盘调度:移臂调度、旋转调度 缓冲:延迟写、提前读 读写单位:CHS-扇区--磁盘块 虚拟盘:用内存当磁盘用
磁盘访问优化 磁盘访问时间 = 写入控制器时间 + 寻道时间 + 旋转时间 + 传输时间 IDE控制器 旋转时间最短 寻道时间最短
FCFS SSTF SCAN C-SCAN 多个进程通过队列使用磁盘(第二层抽象) 磁盘控制器 进程1 磁盘 驱动 进程2 请求队列 I/O子系统 多个进程通过队列使用磁盘(第二层抽象) 进程1 磁盘控制器 sec cyl head block sec,head,cyl 磁盘 驱动 请求队列 进程2 block 多个磁盘访问请求出现在请求队列怎么办? 磁盘调度 寻道的时间最短 FCFS SSTF SCAN C-SCAN
FCFS磁盘调度 先到达的先访问 FCFS: 磁头共移动640磁道! 一个实例: 磁头开始位置=53; 请求队列=98, 183, 37, 122, 14, 124, 65, 67 14 37 53 65 67 98 122 124 183 199 磁头在长途奔袭!
SSTF磁盘调度(Shortest-seek-time First) 离当前磁头最近的优先访问 SSTF存在饥饿问题 继续该实例: 磁头开始位置=53; 请求队列=98, 183, 37, 122, 14, 124, 65, 67 14 37 53 65 67 98 122 124 183 199 SSTF: 磁头共移动236磁道,要少很多! 如果在处理183之前又来一些中间磁道的请求,则…
这些请求的等待时间较长,只因所在方向不够幸运! SCAN磁盘调度 沿着一个方向移动,遇到请求就处理 继续该实例: 磁头开始位置=53; 请求队列=98, 183, 37, 122, 14, 124, 65, 67 14 37 53 65 67 98 122 124 183 199 SCAN: 磁头共移动236磁道,和SSTF一样! 这些请求的等待时间较长,只因所在方向不够幸运! 根据其特征,SCAN也被称为电梯算法! SCAN导致延迟不均
C-SCAN磁盘调度 SCAN+直接移到另一端:两端请求都能很快处理 继续该实例: 磁头开始位置=53; 请求队列=98, 183, 37, 122, 14, 124, 65, 67 14 37 53 65 67 98 122 124 183 199 CSCAN中的C是环的意思! CSCAN: 磁头共移动188+200磁道! 其中200会较快! 140(183199) 没有必要
还可以考虑: 旋转调度:调度扇区访问的顺序 柱面号 盘面号 扇区号 2 7 7 5 2 1 5 3 8 5 3 5 40 6 3 柱面号 盘面号 扇区号 2 7 7 5 2 1 5 3 8 5 3 5 40 6 3 柱面号 盘面号 扇区号 2 7 7 5 2 1 5 3 5 5 3 8 40 6 3
磁盘的使用整理 磁盘控制器 进程1 磁盘 驱动 进程2 请求队列 (1) 进程“得到盘块号”,算出扇区号(sector) cyl head block sec,head,cyl 磁盘 驱动 进程2 请求队列 block (1) 进程“得到盘块号”,算出扇区号(sector) (2) 用扇区号make req,用电梯算法add_request (3) 进程sleep_on (4) 驱动程序算出cyl,head,sector (5)完成端口写,驱动设备工作 (6)磁盘工作完成,发中断信号,中断处理 唤醒进程!
读磁盘 用户 读test.c 202-212个字节 目录解析找到/,读入/内容找到xx,再找到test.c的inode 数据盘块 open(/xx/test.c) 12 13 14 15 16 17 18 19 20 21 22 23 read(fd,202,10,a) 根据test.c的inode和偏移202-212得到盘块789 写入电梯队列 add_request(789) 磁盘驱动 从队列中取出789,算出cyl,head,sector sec cyl head 写磁盘控制器 outp(cyl,head,sector)
举例:磁盘块VS(柱面、磁道、扇区) 假设一个磁盘由128个柱面组成,每个柱面上有 16个磁道,每个磁道上有8个扇区,一个扇区大小 为512个字节,8个连续扇区组成一块,问这个磁 盘空间有多少个磁盘块?每块大小是多少?
谢谢! 操作系统自己用磁盘可以用磁盘块寻址,操作系 统之上的应用程序用文件名+字节流访问文件。