I/O管理子系统==Linux操作系统2

本文详细介绍了操作系统的I/O管理子系统,包括用户层I/O软件、设备独立性软件、设备驱动程序、中断处理程序和硬件层面。强调了设备驱动程序在操作系统中的作用以及中断处理的上下部概念,解释了中断上下部如何处理不同紧急程度的任务。此外,还深入探讨了DMA技术,解释了其如何允许设备直接访问内存,减少了CPU的干预,以及DMA传输的完整流程。
摘要由CSDN通过智能技术生成
一、I/O 管理子系统的五个层次

1.用户层 I/O 软件

  • (1)即应用程序与设备 I/O 相关的部分。

2、设备独立性软件

  • (1)用于实现用户程序与设备驱动程序的统一接口、设备命令、设备保护及设备分配与释放等,同时为设备管理和设备传输提供必要的存储空间。
  • (2)主要功能
    • ①向用户层提供统一的接口,如 read()/write()。
    • ②执行所有设备的公共操作,包括对设备的分配与回收、将逻辑名映射成物理设备名、对设 备进行保护、禁止用户直接访问设备、缓存管理、差错控制、提供独立于设备的大小统一 的逻辑块、屏蔽设备之间信息交换单位大小和传输速率的差异。

3、设备驱动程序

  • (1)硬件相关,具体实现 OS 对设备发出的操作指令,驱动 I/O 设备工作,通常以进程形式存在。
  • (2)每一类设备有一个设备驱动程序,比如 U 盘这一类设备就有一个设备驱动程序。

4、中断处理程序

  • (1)进行上下文任务的切换、测试中断信号、读取设备状态、修改进程状态。
  • (2)通常以进程形式工作。

5、硬件

  • (1)分为机械部分和电子部分。
  • (2)机械部分:设备本身。
  • (3)电子部分:设备控制器,也称适配器。
    • ①通常是印刷电路板,通过插入主板进行工作,其中包含有寄存器,通过寄存器与 CPU 通 信。
    • ②这些寄存器要收编到内存地址空间,就是内存映像 I/O,统一编制。也有的是 I/O 专用地址,称为独立编址。
    • ③设备控制器是一种抽象的概念,具体实施中,有程序直接控制、中断驱动方式、DMA、通道。
二、DMA(直接存储器访问)

1.什么是 DMA

  • (1)DMA 技术使得外围设备可以通过 DMA 控制器直接访问内存,与此同时 CPU 可以继续 执行程序。(一旦配置完成后无须cpu直接干预)

2.DAM 过程

  • (1)请求:CPU 对 DMA 控制器初始化后,向 I/O 接口发出操作指令,I/O 接口提出 DMA 请 求
  • (2)响应:
    • ①DMA控制器对DMA请求进行优先级判别及屏蔽,向总线裁决逻辑提出总线请求。
    • ②当CPU执行完当前总线周期即可释放总线控制权,此时总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知 I/O接口开始DMA传输。
  • (3)传输
    • ①DMA 控制器获得总线控制权后,CPU 即刻挂起或只执行内部操作,由 DMA 控制器输出读 写命令,直接控制 RAM 与 I/O 接口进行 DMA 传输。
    • ②在 DMA 控制器的控制下,存储器与外设直接进行数据传输,不需要 CPU 的参与,开始时 需要提供传输的数据起始位置和和数据长度。
  • (4)结束
    • ①完成数据传输后,DMA 释放总线控制权,并向 I/O 接口发出结束信号。
    • ②I/O 接口收到结束信号后,一方面停止 I/O 设备的工作,另一方面向 CPU 提出中断请求, 使 CPU 从不介入状态解脱,并执行一段检查本次 DMA 传输操作正确性的代码,最后带着 本次操作结果及状态继续执行原来的程序。
三、中断

1、什么是中断的上下部

  • (1)两个原因:
    • ①中断处理程序处于中断上下文,而中断上下文是不参与调度的,所以中断上下文不能出现 可能睡眠的操作,因为一旦睡眠就回不来了。这也就决定了中断不能和用户空间进行数据 交互,因为这种交互可能会引起睡眠。
    • ②为了尽量提高系统的响应速度,中断程序运行的时间应该尽可能短。
  • (2)有些中断处理没能很快处理完,于是 Linux 内核提供中断上下部。上半部就是中断处 理函数,它能最快地响应中断,并且做一些必须在中断响应之后马上要做的事情,而 一些需要在中断处理函数后继续执行的操作,内核建议把它放在下半部执行。
  • (3)中断的下半部有两种实现方式:tasklet(小任务)、workqueue(工作队列)。:
    • ①tasklet 也工作在中断上下文,只是在执行完上半部之后不会立即执行下半部,此时的空隙 可以被系统调度,但一旦执行了下半部就不能被系统调度了。
    • ②workqueue 则工作在进程上下文,进程上下文是可以被调度的。

2、中断上下部的适用场景

  • (1)必须立即进行紧急处理的极少量任务放在中断的顶半部中。此时屏蔽了与自己同类型 的中断,可以迅速不受打扰地完成紧急任务。
  • (2)急迫的需要较少量时间的中等数量的任务放在 tasklet 中。此时不会屏蔽任何中断(包 括与自己顶半部同类型的中断),所以不影响顶半部对紧急事务的处理;同时又不会进 行用户进程调度,从而保证了自己急迫的任务得以完成。
  • (3)不紧迫的需要较多时间的大量任务放在 workqueue 中。此时操作系统会尽快处理这个 任务,但如果任务量太大,期间也会调度别的用户进程运行,从而保证不会因为这个 任务而导致其他用户进程无法推进。
  • (4)可能引起睡眠的任务放在 workqueue 中。因为在 workqueue 中睡眠是安全的,在需要 获得大量内存时、在需要获取信号量时、在需要进行阻塞式的 I/O 操作时,用 workqueue 很合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值