北京市网站建设_网站建设公司_API接口_seo优化
2026/1/7 20:03:25 网站建设 项目流程

目录

  • 5.2 I/O软件原理
    • 5.2.1 I/O软件的目标
    • 5.2.2 程序控制I/O
    • 5.2.3 中断驱动I/O
    • 5.2.4 使用DMA的I/O
  • 5.3 ⭐I/O软件层次
    • 5.3.1 中断处理程序
    • 5.3.2 ⭐设备驱动程序(Device Driver)
    • 5.3.3 ⭐Device-Independent的OS软件
    • 5.3.4 功能
    • 5.3.5 总结
  • 5.4 Disks
    • 5.4.1 盘硬件
    • 5.4.2 磁盘格式化
    • 5.4.3 ⭐磁盘臂调度算法

5.2 I/O软件原理

5.2.1 I/O软件的目标

  1. 统一命名

    文件或设备名称是字符串或证书,不依赖具体机器

  2. 设备独立性

    程序可以访问任何I/O设备,无序提前指定

  3. 同步和异步传输

    同步传输(即阻塞):程序等待I/O操作完成

    异步传输(即中断驱动):程序继续执行,I/O完成后通过中断通知

  4. Buffering

    设备产生的数据无法直接存放到目标内存,需要暂存到缓冲区

  5. 错误处理

    尽可能在接近硬件的层面处理

  6. 共享设备和独占设备

    共享设备:磁盘能同时让多个用户使用

    独占设备:磁带机必须由单个用户独占使用

5.2.2 程序控制I/O

  1. CPU直接控制I/O直到I/O完成

    • 适用于单进程系统(MS-DOS、嵌入式系统(Embedded systems)

    • 不适用于多道程序设计和分时系统

  2. 轮询/忙等

    • CPU不断检查设备状态寄存器来检测设备是否准备就绪

    • 三种状态

      • Ready

      • Busy

      • Error

    • 缺点:CPU浪费(CPU需处于忙等来等待I/O)

5.2.3 中断驱动I/O

  1. CPU在发送第一个字符后,不再轮询等待,而是打印机READY时会发送硬件中断,再让CPU处理

  2. 缺点:每次字符输入都会发生中断

5.2.4 使用DMA的I/O

  1. DMA控制器会把内核缓冲区的字符串输给打印机控制器,CPU不参与这个过程

  2. 传输完整个缓冲区(字符串),CPU才会被再次中断

5.3 ⭐I/O软件层次

5.3.1 中断处理程序

  1. 最好隐藏中断处理程序

    • 把启动一个I/O操作的驱动程序阻塞,直至I/O操作完成并产生一个中断

    • 如何阻塞驱动程序

      • 在一个信号量上执行down

      • 在一个条件变量上执行wait

      • 在一个消息上执行receive

  2. 中断处理程序的位置由中断向量确定

  3. 中断处理流程

    • 硬件

      1. 发出中断

      2. 处理器执行完当前指令

      3. 处理器发出中断确认信号

      4. 处理器将PSW和PC推入控制栈

      5. 处理器根据中断加载新PC值

    • 软件

      1. 保存剩余进程状态信息

      2. 进程中断

      3. 恢复进程状态信息

      4. 恢复旧的PSW和PC

  4. 软件中的具体步骤

    1. 保存没被中断硬件保存的所有寄存器

    2. 为中断服务过程设置上下文,如TLB、MMU和页表

    3. 为中断服务过程设置堆栈

    4. 确认中断控制器,重启中断

    5. 将寄存器从它们被保存的地方复制到进程表

    6. 运行中断服务进程

    7. 选择下一次运行哪个进程

    8. 为下一次要运行的进程设置MMU上下文

    9. 装入新进程的寄存器

    10. 开始运行新进程

5.3.2 ⭐设备驱动程序(Device Driver)

  1. 用来控制I/O设备的特定代码

  2. Device driver的逻辑定位

    用户程序 -> 操作系统的其余部分 -> Device driver -> 总线 -> Device controller -> Device

  3. 功能

    • 接收OS抽象的读/写请求

    • 初始化设备

    • 发送硬件命令

    • 请求队列管理

    • 错误处理

  4. 分类

    • 块设备驱动程序:磁盘

    • 字符设备驱动程序:键盘和打印机

5.3.3 ⭐Device-Independent的OS软件

功能

  1. Device driver的统一接口

    • 好处

      1. 驱动开发者知道驱动程序接口是什么样

      2. 操作系统开发者能基于接口编写device-independent的I/O功能

    • 解决给I/O设备命名(以Unix为例)

      • 设备被抽象为特殊文件,需要通过系统调用(如read()等)访问

      • 文件名与每个设备关联,并确定一个包含主设备号和次设备号的i节点

        • 主设备号:定位驱动程序

        • 次设备号:作为参数传递给驱动程序,以指定读/写的单元(区分同一驱动的不同设备)

      • 通常的文件保护规则也适用于I/O设备

  2. 缓冲

  3. 错误报告

    处理层级

    1. Device-controller

      如校验错误

    2. Device driver

      如无法读取磁盘

    3. Device-independent的OS软件层

      • 编程错误(写入只读设备)

      • 实际的I/O错误(摄像头关机)

  4. 分配与释放专用设备

    不允许并发访问

  5. 提供device-independent块大小

    不同磁盘扇区大小可能不同,应由device-independent软件隐藏并向高层提供统一块大小

5.3.4 功能

  1. 封装系统调用

  2. 格式化I/O处理(如printf())

  3. 假脱机管理

5.3.5 总结

流程(双向)

  1. I/O请求

  2. 用户进程

  3. Device-independent软件

  4. Device driver

  5. 中断处理

  6. 硬件

  7. 响应

5.4 Disks

5.4.1 盘硬件

  1. 柱面(cylinder)->磁道(track)->扇区(sector)

  2. 扇区通常512B

  3. 磁盘可能有多个环带

  4. 因为本来每个磁道扇区数相同,越外圈每个扇区越大,会造成浪费。所以在外面的磁道有更多扇区

5.4.2 磁盘格式化

  1. 磁盘使用前要先进行低格式化和高格式化

    • 低格式化

      • 将磁盘分为磁盘控制器可读写的扇区

      • 由供应商完成

      • 磁道格式化方式

        • 分为由inter-sector-gap间隔的扇区

        • 扇区格式:前导码+数据+校验码

  2. 柱面斜进(cylinder skew)

    • 当磁盘读取完一个磁道,磁头需要移动到下一个磁道。在移动过程中,盘面一直在旋转,为保证磁头能从本磁道的末尾恰好移动至下一磁道开头,就需要柱面斜进

    • 目的:改进性能,让磁盘在一次连续的操作中读取多个磁道而不丢失数据

    • :How much cylinder skew is needed for a 7200-RPM disk with a track-to-track seek time of 1 msec? The disk has 200 sectors of 512 bytes each on each track.

      • 7200转/分钟=0.12转/毫秒,磁道间寻道的这1毫秒期间,盘面会转过200*0.12=24个扇区。所以答案是24
  3. 扇区交错(interleaving)

    • 若磁盘控制器只有一个扇区buffer,当一个扇区数据从硬盘传输至buffer后,需要把buffer数据拷贝至内存。此期间磁头将越过下一个扇区起始位置,因此下一个逻辑扇区不应是相邻的物理扇区,所以山区要交错排列

    • 复制快可用单交错,复制慢可用双交错

5.4.3 ⭐磁盘臂调度算法

  1. 决定读写磁盘块时间的因素

    • 寻道时间

      磁盘臂移动至适当柱面的时间

    • 旋转延迟

      等待适当扇区旋转到磁头下所需时间

    • 实际数据传输时间

  2. FCFS

  3. Shortest Seek First(SSF)

  4. Elevator Algorithm


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询