IO设备的分类

image-20260522085313667

按使用特性分类:

  • 人机交互类IO
  • 存储设备
  • 网络通信设备

按传输速率分类:

  • 低速设备(eg鼠标,键盘)
  • 中速设备(eg激光打印机)
  • 高速设备(eg移动硬盘)

按信息交换设备的单位分类:

  • 块设备:数据传输基本单位是 “ 块 ”,(传输速率高,可寻址)
  • 字符设备:数据传输的基本单位是 字符(传输慢,不可寻址,常采用中断驱动方式)

按共享属性分类:

  • 独占设备:(静态分配方式)
  • 共享设备:必须是可寻址,可随机访问的设备哦。(动态分配方式)
  • 虚拟设备:将独占设备改造成多个逻辑设备

image-20260522085806779

IO接口 / IO控制器

==IO设备的组成:==

  • 机械部件:用来执行具体IO操作(eg键盘,LED显示屏)

  • 电子部件:实现CPU对IO设备的控制。就是**==IO控制器==**。

==IO控制器是CPU和IO设备连接的桥梁==

IO控制器功能

image-20260522090511486

IO控制器的组成

  • ①CPU与控制器之间的接口。(接口包括三类数据线)
  • ②IO逻辑。(用于实现对设备的控制)
  • ③控制器与设备之间的接口。(每个接口可传输三类信号)

image-20260522091105385

image-20260522091206448

IO接口的类型

  • 按数据传输方式:并行接口,串行接口。
  • 按主机访问设备的控制方式:程序查询接口,中断接口,DMA接口。
  • 按功能灵活性 :可编程接口,不可编程接口。
  • 按设备类型的不同:字符设备接口,块设备接口,网络设备接口。

IO端口

IO端口是设备控制器中可被CPU访问的寄存器,主要有三类。

  • 数据寄存器
  • 状态寄存器
  • 控制寄存器

为了使CPU能够访问IO端口,需对各端口进行编址,有两种编址方式:独立编址,统一编址。

统一编址(内存映射方式) VS 寄存器独立编址(IO映射方式)

image-20260522091431995

回顾

image-20260522091511504

IO控制方式(4)

​ – 即用什么样的方式来控制IO设备的数据读/写

image-20260522091744354

程序直接控制方式

Key:CPU==轮询==(控制器状态,IO好了没,好了就能够拿到数据了)

image-20260522092056332

image-20260522092447487

image-20260522092704419

中断驱动方式

引入了==中断==机制。

中断驱动方式的工作流程

因为IO设备速度慢,所以当CPU发出读写命令后,将等待的IO进程阻塞,切换别的进程执行。

当IO完成后,控制器会主动向CPU发出一个中断信号。当CPU检测到中断信号,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。【在每个指令周期的末尾,CPU都会检查中断信号】

处理中断的过程中,CPU从IO控制器读一个字的数据传送到CPU寄存器,再写入主存。==【即由中断服务程序完成数据的输入和输出】==

接着,CPU恢复等待IO的进程(或其他进程)的运行环境,继续执行。

优点:CPU和IO设备可以并行工作。

缺点:每次执行只转存一个字,大量中断会消耗CPU时间。(中断处理需要保存恢复进程的运行环境,是有一定时间开销的。)

image-20260522093438380

==DMA(直接存储器存取 )==

在IO设备和内存之间建立直接数据通路。

DMA不是处理机,是一个控制器

CPU给DMA发出一条命令,同时设置DMA控制器中寄存器的值(来启动DMA)。(值包括:CPU所取数据的地址和长度)

DMA也会使进程阻塞!CPU和数据传送并行。

改进:

  • 数据的传送单位是 “ 块 ”,不是一个字的传送了。(so:DMA主要用于块设备)
  • 数据传输的块必须是连续的,即传送一块或者连续多块。
  • 数据的流向是设备→内存 ,或者内存→设备。(不需要中转站CPU了)
  • 仅在预处理和后处理阶段,才需要CPU干预。

==DMA工作过程==

  • 预处理阶段:由CPU初始化DMA控制器中有关寄存器等等。
  • 数据传输阶段:把数据从外设(eg硬盘)搬到内存。(由DMA控制器负责)
  • 后处理阶段:DMA向CPU发送中断请求(表示事情做完了!)。CPU执行中断服务程序做DMA结束处理。

DMA==控制器==中有4类寄存器:

  • 命令/状态寄存器
  • 内存地址寄存器
  • 数据寄存器
  • 数据计数器

image-20260522094316383

DMA方式的工作流程

1
2
3
4
CPU收到设备DMA请求后,向DMA控制器发送启动命令,并设置MAR和DC的初值,随后启动DMA控制器。
接着,CPU将IO控制器权交予DMA控制器,转而执行其他任务。
DMA控制器接管总线后,以突发方式将整块数据在设备和内存之间直接传输,无需CPU干预。
传输结束后,DMA控制器向CPU发送中断信号,通知操作完成。

image-20260522094636628

通道

是一种硬件,可以理解为 “ 小CPU ”。

通道可以识别并执行一系列通道指令。

CPU仅需向通道发送一条IO指令,指明目标设备 及 通道程序在内存中的起始地址。

CPU,通道和IO设备可以高效地并行工作。

通道控制设备控制器,设备控制器控制设备工作。(CPU要么向通道发出命令,要么直接给设备控制器发出命令)

image-20260522094855622

image-20260522095033327

DMA VS 通道

  • CPU仅需指明目标设备 及 通道程序在内存中的起始地址。通道能自主完成涉及多设备多阶段的复杂IO。
  • 每个DMA控制器仅服务于一台设备。一个通道可同时管理多台设备和内存的数据交换。

==回顾==

image-20260522095216420

IO软件层次结构(4)

image-20260522095430900

用户层软件

向上:实现与用户交互的接口。

向下:通过“系统调用”请求OS内核服务。

将二进制整数转化为ASCII码的格式打印,是通过IO库函数实现的,属于用户层软件。

image-20260522095717773

==设备独立性软件==

​ – 又叫设备无关性软件

==设备独立性==:用户使用设备的透明性。即使用户编程时使用的 逻辑设备 和 实际使用的 物理设备 无关。

目的:①实现各类设备的公共操作。②为上层提供统一、抽象的IO接口。

  • 向上层提供统一调用的接口。
  • 提供对设备的保护。
  • 实现差错处理。
  • 实现设备的分配与回收
  • 实现数据缓存区管理。
  • 建立逻辑设备到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。

逻辑设备表

image-20260522100207755

==设备驱动程序 – IO!==

不同 品牌的设备 需要不同的驱动程序→品牌厂家需提供与设备相对应的驱动程序。(eg打印机)

不同的 系统 也需要不同的驱动程序→驱动程序也需根据操作系统的要求进行定制。

不同的 IO 方式 也需要不同的驱动程序。

Q:判断是不是设备驱动程序要做的:看看功能是否会因为 IO硬件 的不同而不同==!==

EG:计算磁盘所在的磁盘柱面号的程序。

主要任务:

  • ==接受上层软件发出的 抽象IO请求(如read命令),将其转换为 设备控制器 能够识别的 具体操作,==
  • ==之后发送给(写入到)设备控制器,控制设备工作。==

==工作过程==

  • ① 将抽象要求转化为具体要求(才能被设备控制器识别)
  • ② 对服务请求进行校验(是否可执行)
  • ③ 检查设备的状态(设备是否就绪)
  • ④ 传送必要的IO参数
  • ⑤ 启动IO设备

中断处理程序

image-20260522101141523

回顾

  • 没有涉及硬件,对各种设备都需要进行管理的工作,都是在==设备独立性软件层==完成的。
  • 直接涉及到硬件具体细节、且与中断无关的操作,肯定是在==设备驱动程序层==完成的。

image-20260522101248745

IO应用程序接口 & 设备驱动接口

image-20260522101449474

输入输出应用程序接口

字符设备:不可“寻址”。每次读一个字符。

块设备:可以“寻址”,每次读写一个块。

image-20260522102523519

阻塞IO:应用程序发出IO系统调用,进程需转为阻塞态等待。

  • eg字符设备接口 – 从键盘读一个字符get

非阻塞IO:应用程序发出IO系统调用,系统调用可快速返回,进程无需转为阻塞态等待。

  • 块设备接口 – 往磁盘写数据write

设备驱动程序接口

没统一标准的设备驱动程序接口

image-20260522102811294

统一标准的设备驱动程序接口

image-20260522102857977

other

中断处理结束后,是否回到被中断的进程:看是单重中断还是多重中断哦。

中断服务程序(是硬件!)

键盘是典型的通过中断方式工作的IO外设。