IO设备是操作系统的中断源之一,IO设备包括磁盘,时钟,中断源,显示器,按照数据传送的基本单元分为块设备和字符设备。本文从磁盘这一个IO设备来归纳操作系统中IO设备从硬件到软件的工作方式。

硬件水平观察(hardware-level observation)

关于所有的描述我都会给出一个具体的规格来说明。
磁盘IO与操作系统的交流是通过叫做适配器或者设备控制器的电子器件完成的,磁盘驱动程序对磁盘控制器进行编程。

磁盘是由多个柱面组成的机械装置,如果你搜索磁盘结构,每个圆片就是一个柱面。
柱面通常会被分成多个磁道,每个磁道被切分成多个扇区。以下给出的磁盘参数以WD 18300
中的为主。
----------WD 18300参数Start-----------

参数 数据
每柱面磁道数 12
每个磁道扇区数 281
每个扇区字节数 512
寻道时间 6 ms
RPM 10000
设备控制器与设备接口 SATA
ECC 海明码
柱面数 10601
内存写入方式 DMA

----------WD 18300参数End-----------

设备控制器通常以芯片或者PCI插槽形式出现,主要功能为将串行的位流转换成字节块。
磁盘块读通常数据格式如下:

前导符(preamble) 4096bit ECC 校验码位
28 4096 12

前导符:14位柱面号,4位扇区号,9位扇区号,1位同步信息
校验码:12位的校验码可以根据海明码的生成方法计算得出。
现在我们已经了解了磁盘进入控制器前的封装了!

磁盘控制器内部的优化:
磁盘坏块重映射和数据高速缓存是控制器需要做的一些必要的额外工作。数据高速缓存消除了对总线时间上的精确要求,简化了控制器设计,另一点是计算校验和需要。

坏块重映射是对磁盘的坏块用磁盘格式化时备用块代替。

DMA控制数据传送(Direct Memory Access)

DMA创造的初衷是希望摆脱程序控制IO,即由CPU完成对数据传送。这样使用DMA完成数据传送,
操作系统转入进程调度,让CPU完成其他的工作。但是DMA的传送效率相比CPU控制下传送效率要低。
因此,大批数据处理且CPU空闲可以选择CPU进行传送。

DMA的组成:
IO设备中寄存器被分配唯一的地址,就像内存地址一样,称为IO端口,端口集合组成的地址空间称为IO端口空间。CPU通过IO端口与设备寄存器进行通信。IO端口的地址我们选择内存映射IO的方式。
DMA的寄存器分为三个:

地址寄存器:磁盘读取的起始地址
计数寄存器:读取的传送单位数
控制寄存器:本寄存器的IO端口地址,传送方向(IO W/R)传送单位(字/字节)

DMA工作方式:
1.CPU在上述DMA寄存器写入数据
2.DMA向磁盘控制器中的寄存器中写入请求位
(DMA通道的概念由此产生,每个不同的IO设备都有这样的一组寄存器,通过控制参数选择设备)
3.DMA在占用总线不定期传送数据
4.DMA计数寄存器为0,产生中断,移交中断控制器。

这就是IO中一个特例--磁盘IO中的基本过程,中断是执行IO时的重要过程,我将在稍后的文章中整理。

IO设备在OS中的权衡相关推荐

  1. rtt面向对象oopc——3.对官方IO设备模型框架图的补充绘图

    该补充图有幸得到rt thread官方认可,gitee上已提交PR,且通过了官方评审,已被合并到<IO设备模型>章节末尾的<补充说明>小节里了rt-thread官方文档gite ...

  2. Android 与 Chrome OS 中针对大屏幕设备的更新

    随着智能终端硬件的不断革新,大尺寸设备的种类越来越丰富,比如手机.折叠屏设备.平板电脑.ChromeBook.外接显示器的 ChromeBox 和集成屏幕的 Chromebase 等.Google 团 ...

  3. KVM中的网络IO设备虚拟化方式

    在KVM虚拟化的架构里,对CPU的虚拟化采用的是硬件辅助的方式(Intel VT-x,AMD-V),效率比较高,内存的虚拟化有Intel EPT技术的支持,效率也没有问题:那么对于像磁盘驱动器,网卡等 ...

  4. [Chromium中文文档]Chrom{e,ium}{,OS}中的硬件视频加速

    Chrom{e,ium}{,OS}中的硬件视频加速 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_ ...

  5. 【Chromium中文文档】Chrom{e,ium}{,OS}中的硬件视频加速

    Chrom{e,ium}{,OS}中的硬件视频加速 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_ ...

  6. 移动磁盘由于IO设备错误,要怎样寻回文件

    J盘打不开由于IO设备错误,是因为这个I盘的文件系统内部结构损坏导致的.要恢复里面的数据就必须要注意,这个盘不能格式化,否则数据会进一步损坏.具体的恢复方法看正文 工具/软件:流星数据恢复软件 步骤1 ...

  7. 如何找回由于IO设备错误移动磁盘的文件

    由于IO设备错误说明这个盘的文件系统结构损坏了.在平时如果数据不重要,那么可以直接格式化就能用了.但是有的时候里面的数据很重要,那么就必须先恢复出数据再格式化.具体恢复方法可以看正文了解(不格式化的恢 ...

  8. OS中阻塞与挂起的区别sleep()的实现原理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xpy870663266/article ...

  9. 移动硬盘由于IO设备错误,无法运行此项请求文件怎样恢复

    由于IO设备错误,无法运行此项请求说明这个盘的文件系统结构损坏了.在平时如果数据不重要,那么可以直接格式化就能用了.但是有的时候里面的数据很重要,那么就必须先恢复出数据再格式化.具体恢复方法可以看正文 ...

最新文章

  1. 【ACM】LightOJ - 1010 Knights in Chessboard(不是搜索...)
  2. IntentService
  3. c#编码规范【转载】
  4. IT十八掌作业_java基础第二天_进制转换原理和补码存储方式
  5. mysql全表重命名备份_MySQL数据库重命名的快速且安全方法(3种)
  6. python 会增加内存吗,Python+不断增加的内存分配
  7. JavaScript中一个对象数组按照另一个数组排序
  8. win8解决“telnet不是内部或外部命令”问题
  9. TensorFlow 2.0要来了,tf.contrib要砍了 | 有什么意见你说啊
  10. json.parser性能_Jackson JSON Java Parser API示例教程
  11. 编程实现strcpy函数
  12. “FreeTextBox”控件使用——Word编辑器
  13. 计算机主板别称是什么城,上海别称什么城?
  14. 理正深基坑弹性计算方法_理正深基坑软件应用全参数说明书
  15. C++ 使用replace()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
  16. PHP经典实例读书笔记--变量
  17. Introduce·艺术学核心期刊推荐之《文艺争鸣》
  18. 实验一 机械臂正逆运动学
  19. 纯函数和副作用(大白话)
  20. Nvidia Summer Camp Day34 个人心得

热门文章

  1. expect无密码登陆
  2. ASP.NET 2.0中CSS失效解决方案
  3. 零基础Java学习之构造器
  4. 进程和线程的区别?什么时候用进程?什么时候用线程?
  5. python 实现双端队列
  6. (一)python简单应用
  7. H5 新标签用法及解释
  8. (九)洞悉linux下的Netfilteramp;iptables:网络地址转换原理之DNAT
  9. ubuntu-10.04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版
  10. MS SQL SERVER 中几个函数的用法