1 / 33

第 2 讲 磁盘管理

第 2 讲 磁盘管理. CPU- 内存总线. 图形控制器. 总线控制器. PCI 总线. IDE 控制器. 认识计算机外设与计算机 !. 对我们来说,磁盘无疑是最重要的设备,我们下载的电影放在这里,我们写的论文也放在这里 …. 扇区. 画一个示意图 :. 看看俯视图 :. 扇区大小: 512 字节. 扇区的大小是传输时间和碎片浪费的折衷. 所以,磁盘被称为块设备 !. 盘面. 磁道. 磁盘的数据单位是扇区. 认识一下磁盘. 扇区是磁盘的寻址单位、访问单位. 柱面 C ylinder 磁道 Head (磁头号、盘面号) 扇区 Sector.

kirsi
Télécharger la présentation

第 2 讲 磁盘管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2讲 磁盘管理

  2. CPU-内存总线 图形控制器 总线控制器 PCI总线 IDE控制器 认识计算机外设与计算机! 对我们来说,磁盘无疑是最重要的设备,我们下载的电影放在这里,我们写的论文也放在这里…

  3. 扇区 • 画一个示意图: • 看看俯视图: • 扇区大小:512字节 • 扇区的大小是传输时间和碎片浪费的折衷 • 所以,磁盘被称为块设备! 盘面 磁道 • 磁盘的数据单位是扇区 认识一下磁盘 扇区是磁盘的寻址单位、访问单位

  4. 柱面Cylinder 磁道Head(磁头号、盘面号) 扇区Sector  磁盘的结构和布局

  5. 磁盘的结构划分 • 低级格式化 • 划分磁道、扇区 • 高级格式化 • 安装文件系统

  6. 让我们仔细想想磁盘如何读/写1一个字节? 内存缓存 • 磁盘I/O: 缓存队列控制器寻道旋转传输! 磁盘的I/O • 分析磁盘I/O的重点在于第2步! (2) 总线控制器 (1) (3) IDE控制器 磁道 读出了一个字节 写(修改)一个字节

  7. 磁道 Head 扇区 磁盘控制器 磁盘 请求队列 • 我们最关心的磁盘什么时候读/写完? • 关键所在: 最小化寻道时间和旋转延迟! 磁盘I/O的分析 • 可以整理磁盘I/O的过程: 进程 前两项可以忽略! 磁盘访问延迟 = 队列时间 + 控制器时间 + 寻道时间 + 旋转时间 + 传输时间 12 ms to 8 ms (半周): 8 ms to 4 ms 50M/秒 约0.25ms

  8. 磁盘管理 • 减少访问磁盘的总时间 • 磁盘调度:移臂调度、旋转调度 • 减少访问磁盘的次数 • 缓冲 • 延迟写 • 提前读 • 簇 • 虚拟盘

  9. 前两项可以忽略! 磁盘访问延迟 = 队列时间 + 控制器时间 + 寻道时间 + 旋转时间 + 传输时间 12 ms to 8 ms 8 ms to 4 ms 约0.25ms • 多个磁盘访问请求出现在请求队列怎么办? • 调度的目标是什么? 调度时主要考察什么? • 磁盘调度: 输入多个磁道请求,给出服务顺序! I/O过程是解开许多磁盘问题的钥匙 • 磁盘调度: 调度 目标当然是平均访问延迟小! 寻道时间是主要矛盾!

  10. 14 0 37 53 65 67 98 122 124 183 199 • 一个实例: 磁头开始位置=53; • 请求队列=98, 183, 37, 122, 14, 124, 65, 67 FCFS磁盘调度 • 最直观、最公平的调度: FCFS: 磁头共移动640磁道! 在移动过程中把经过的请求处理了! 磁头在长途奔袭!

  11. 14 0 37 53 65 67 98 122 124 183 199 • 继续该实例: 磁头开始位置=53; • 请求队列=98, 183, 37, 122, 14, 124, 65, 67 • SSTF存在饥饿问题 SSTF磁盘调度 • Shortest-seek-time First: SSTF: 磁头共移动236(4+53+169)磁道,要少很多! 如果在处理183之前又来一些中间磁道的请求,则…

  12. 14 0 37 53 65 67 98 122 124 183 199 • 继续该实例: 磁头开始位置=53; • 请求队列=98, 183, 37, 122, 14, 124, 65, 67 • SCAN导致延迟不均 SCAN磁盘调度 • SSTF+中途不回折:每个请求都有处理机会 SCAN: 磁头共移动53+183=236磁道,和SSTF一样! 这些请求的等待时间较长,只因所在方向不够幸运! 根据其特征,SCAN也被称为电梯算法!

  13. 14 0 37 53 65 67 98 122 124 183 199 • 继续该实例: 磁头开始位置=53; • 请求队列=98, 183, 37, 122, 14, 124, 65, 67 • 140(183199) • 没有必要 C-SCAN磁盘调度 • SCAN+直接移到另一端:两端请求都能很快处理 CSCAN中的C是环的意思! CSCAN: 磁头共移动188+200磁道! 其中200会较快!

  14. 14 0 37 53 65 67 98 122 124 183 199 • 继续该实例: 磁头开始位置=53; • 请求队列=98, 183, 37, 122, 14, 124, 65, 67 • LOOK和C-LOOK是比较合理的缺省算法 操作系统中所有的算法都要因地制宜! C-LOOK磁盘调度 • CSCAN+看一看:前面没有请求就回移

  15. 磁盘管理 • 减少访问磁盘的总时间 • 磁盘调度:移臂调度、旋转调度 • 减少访问磁盘的次数 • 缓冲 • 延迟写 • 提前读 • 簇 • 虚拟盘

  16. 实际上就是扇区怎么编址? • 显然这个地址是(盘面?, 磁道?, 扇区?) • 扇区编址(1): CHS(Cylinder/Head/Sector) • 扇区编址(2): 扇区编号 磁臂 • 寻道和旋转费时多花最少时间访问最多扇区的方案: 磁臂不动、磁盘旋转一周,访问磁头遇到的所有扇区。 I/O过程是解开许多磁盘问题的钥匙 柱面! • 磁盘寻址:对于内存,我们往往更关心存放内容的地址 让这些扇区的编址邻近:因为局部性!

  17. 一个柱面 一个磁道 整个磁盘 磁道1 扇区1 柱面1 扇区2 柱面2 磁道2 … … … 磁道k 柱面n 扇区p 磁臂 • 扇区编号,按照(C,H,S)将扇区形成一维扇区数组,数组索引就是扇区编号 扇区编号—现代磁盘的常见寻址方式 0 体现了局部性! kp (k+1)p (k+2)p …

  18. 针对设备特性的调度策略 • 旋转调度 • 对磁盘访问的5个请求应作如下调度 柱面号 盘面号 扇区号 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 13

  19. 磁盘管理 • 减少访问磁盘的总时间 • 磁盘调度:移臂调度、旋转调度 • 减少访问磁盘的次数 • 缓冲 • 延迟写 • 提前读 • 读写单位:扇区、组块 • 虚拟盘

  20. 缓冲读 用户 数据区 磁盘 高速缓冲 用户进程 缓冲写 用户 数据区 磁盘 高速缓冲 用户进程 • UNIX缓冲管理算法 • 缓冲读、写示意图 预先缓存 延迟发送 25

  21. 磁盘管理 • 减少访问磁盘的总时间 • 磁盘调度:移臂调度、旋转调度 • 减少访问磁盘的次数 • 缓冲 • 延迟写 • 提前读 • 读写单位:扇区、组块 • 虚拟盘

  22. 前两项可以忽略! 磁盘访问延迟 = 队列时间 + 控制器时间 + 寻道时间 + 旋转时间 + 传输时间 12 ms to 8 ms 8 ms to 4 ms 约0.25ms • 扇区尺寸为1 byte:没有碎片;传输速度100 byte/秒(寻道时间10ms) • 扇区尺寸1 KByte:碎片0.5K;传输100 KByte/秒 空间利用率 传输速度 • 扇区尺寸1 MByte:碎片0.5M;传输4 Mbyte/秒 扇区大小 I/O过程是解开许多磁盘问题的钥匙 • 分析磁盘扇区尺寸:

  23. 举例:磁盘块VS(柱面、磁道、扇区) • 假设一个磁盘由128个柱面组成,每个柱面上有16个磁道,每个磁道上有8个扇区,一个扇区大小为512个字节,8个连续扇区组成一块,问这个磁盘空间有多少个磁盘块?每块大小是多少?

  24. 磁盘管理 • 减少访问磁盘的总时间 • 磁盘调度:移臂调度、旋转调度 • 减少访问磁盘的次数 • 缓冲 • 延迟写 • 提前读 • 读写单位:扇区、组块 • 虚拟盘:将内存当外存用

  25. 不同的程序员看到的磁盘 • I/O子系统(设备无关层)看到的 • 磁盘块:一个磁盘块=2n个扇区 • 驱动程序看到的: • (柱面、磁道、扇区) • 程序员看到的:文件 文件---------磁盘块----------(柱面、磁道、扇区)

  26. I/O系统的层次及功能

  27. 将整个过程贯穿在一起 获得编号是使用磁盘的关键! • 第1步:得到要访问的扇区的编号;得到读的源(或写的目标)内存地址 算法输入! • 第2步:将扇区编号和内存地址写给DMA;然后阻塞 查手册、写端口! • 第3步:DMA处理完成后中断CPU;中断处理程序唤醒阻塞进程 编写中断处理程序! • 第4步:进程继续…

  28. 直接使用扇区编号寻址磁盘吗?

  29. (3) (2) (1) i (5) (6) 交换出去 (4) • 交换出去的页面放在哪里? 请求调页—页面置换 磁盘 页错误处理程序 页表 load [addr] 物理内存

  30. 问题的关键是写到磁盘的什么位置? • 如果是代码段和数据段,直接写到可执行文件中 • 如果是堆栈段呢? • 应该是直接“页面扇区” • 这样使用的磁盘称为生磁盘(raw disk) PTE 换出地址 P=0 交换分区 • 交换出去的页面显然要写到磁盘上 创建一个文件吗? 变成了页面文件扇区映射关系,显然是低效的 为提高效率,这部分磁盘不存文件,直接用扇区号寻址。(交换分区)

  31. 安装Linux时,需创建一硬盘分区作为交换分区 • 因为交换分区要和内存不断交换,所以是动态变化的 swap分区的大小通常是内存大小的两倍 Linux交换分区 fdisk命令可以查看分区信息

  32. 存在一个定期调度的进程(kswapd) • void kswapd(void) //页面换出的框架 • { for(;;) //daemon进程的基本结构 • {static int refscans=0; • reference_bits_scan(); //clock扫描 • if(refscans++>60) //1分钟启动一次 • {inactive_scan(); refscans=0; • wake_up(&kswap_down);}//唤醒等页面换出的进程 • sleep_on_timeout(HZ);//每HZ(1秒)调度kswapd} • }}//kswapd的间接结果是形成一个inactive页面对列 • inactive_scan()然后调用swap_out()将页面写到交换分区上 Linux内存页面的定期换出 UNIX类OS大都这样!

  33. 谢谢! 操作系统自己用磁盘可以用扇区寻址,操作系统之上的应用程序用文件名+字节流访问文件。下一单元就学习这个

More Related