操作系统——第五章(I/O设备)
一、I/O设备的基本概念与分类
1.知识概览
2.什么是I/O设备
“I/O”就是“输入/输出”(Input/,Output)
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
3.I/O设备的分类——按使用特性
4..I/O设备的分类——按传输速率
5..I/O设备的分类——按信息交换的单位
6.知识回顾
二、I/O控制器
1.知识总览
2.机械部件
I/O设备的机械部件主要用来执行具体I/O操作。
如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏:移动硬盘的磁臂、磁盘盘面。
I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。
3.电子部件(I/O控制器)
CPU无法直接控制/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和/O设备机械部
件之间的“中介”,用于实现CPU对设备的控制。
【注】:①一个I/O控制器可能会对应多个设备;
②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O:另一些计算机则采用I/O专用地址,即寄存器独立编址。
内存映射VS寄存器独立编制
4.知识图谱
三、I/O控制方式
1.知识概览
2.程序直接控制方式
程序直接控制方式是最基础的I/O控制方法,CPU全程参与数据传输过程。该方式完全由程序主动控制I/O操作,通过循环查询设备状态实现同步。
轮询:
CPU持续向I/O设备的状态寄存器发送查询指令,检测设备是否就绪。在设备未准备完成时,CPU会进入"忙等待"状态,不断重复检查状态寄存器的值。
当状态寄存器显示设备就绪后,CPU才会执行实际的数据传输。对于输入操作,CPU从数据寄存器读取数据;对于输出操作,CPU将数据写入数据寄存器。
典型特征
-
同步阻塞:CPU必须等待每个I/O操作完成才能继续后续工作
-
高CPU占用:等待期间CPU不断执行状态检查指令
-
简单实现:不需要额外硬件支持,仅需状态寄存器和基本指令
3.中断驱动方式
引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行。
注意:
①CPU会在每个指令周期的末尾检查中断;
②中断处理过程中需要保存、恢复进程的运行环境,
这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。
4.DMA方式
与“中断驱动方式”相比,DMA方式(Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:
①数据的传送单位是“块”。不再是一个字、一个字的传送;
②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”;
③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
DMA控制器
DR(Data Register,数据寄存器):暂存从设备到内存,或从内存到设备的数据。
MAR(Memory Address Register,.内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置。
DC(Data Counter,数据计数器):表示剩余要读/写的字节数。
CR(Command Register,命令/状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息。
5.通道控制方式
“弱鸡版的CPU”——与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存。
6.知识回顾
四、I/O软件层次结构
1.知识图谱
2.用户层软件
3.设备独立性软件
设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。
【注】不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作。
4.设备驱动程序
主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等不同的O设备有不同的硬件特性,具体细节只有设备的厂家才知道,因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。【一般会以一个独立进程的方式存在】
设备独立性软件不可以直接操作硬件,它必须调用设备驱动程序来实现对硬件的控制。
5.中断处理程序
当/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:
6.知识回顾
直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的。
五、I/O应用程序接口and设备驱动程序接口
1.知识总览
2.I/O应用程序接口
I/O应用程序接口的原理基于用户空间与内核空间的分层协作,通过文件描述符(fd)抽象实现对底层硬件的统一操作:在用户空间,应用程序通过持有socket对应的fd调用write()
/read()
等系统调用发起I/O请求,这些调用触发从用户态到内核态的切换,使内核通过socket内核对象(关联IP、端口等信息)管理数据传输;在数据发送流程中,内核将用户数据拷贝至发送缓冲区,经网络协议栈(TCP/IP)封装后,通过“设备无关软件层”调用网络控制器驱动程序,最终由网卡将数据按TCP/IP格式发送至物理链路;数据接收时,网卡接收数据包并通过中断或DMA唤醒内核,内核协议栈解封装后将数据存入接收缓冲区,若对应socket被read()
监听则唤醒进程,完成用户空间数据获取。这一过程依赖文件描述符的统一抽象(遵循“一切皆文件”设计)、内核缓冲区的中转隔离(避免用户空间直接操作硬件)、中断/异步通知机制(高效处理硬件事件)及端口号的唯一性标识(区分同一主机不同进程),其核心本质是通过分层抽象屏蔽底层硬件与协议细节,为上层应用提供简洁统一的I/O操作接口,在保证跨设备兼容性的同时优化系统性能。
3.阻塞和非阻塞I/O
阻塞I/O:应用程序发I/O系统调进程需转阻塞态筹待。eg:子符设备接口一一从键盘读一个字符get。
非阻塞I/O:应用程序发出I/O系统调用系统调用可迅速返回,进程无需阻塞等待。eg:块设备接口一一往磁盘写数据write。
4.设备驱动程序接口
不同的操作系统,对设备驱动程序接口的标准各不相同。
设备厂商必须根据操作系统的接口要求,开发相应的设备驱动程序,设备才能被使用。
5.I/O核心子系统
操作系统中I/O核心子系统的三个主要组成部分及其功能如下:
设备管理模块
- 负责物理设备的分配与调度
- 维护设备状态表跟踪设备忙闲状态
- 实现设备独立性,提供统一逻辑设备名访问接口
- 处理设备保护与安全控制
缓冲管理模块
- 建立数据缓冲区协调速度差异
- 采用单/双缓冲、循环缓冲等机制
- 实现高速缓存提升访问性能
- 通过预读和延迟写优化I/O效率
设备驱动程序
- 包含设备控制表(DCT)等数据结构
- 实现设备控制寄存器操作指令
- 处理设备初始化/启动/停止等操作
- 转换抽象请求为具体控制信号
// 典型设备驱动结构示例
struct device_driver {void (*init)(struct device*);int (*read)(struct device*, char*, int);int (*write)(struct device*, char*, int);void (*interrupt_handler)(int);
};
这三个模块协同工作,通过层次化设计实现:
- 用户程序与物理设备解耦
- 提高I/O操作可靠性
- 优化系统整体性能
- 支持多种设备类型扩展
下一讲,假脱机技术(SPOOLing技术)I/O调度、设备保护、设备分配与回收、缓冲区管理(即缓冲与高速缓存),敬请期待(* ̄︶ ̄)。