🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶
🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆
- 1 I/O设备的基本概念与分类
- 1.1 总览
- 1.2 什么是IO设备
- 1.3 IO设备的分类
- 1.3.1 按使用特性
- 1.3.2 按传输速率
- 1.3.3 按信息交换的单位
- 1.4 总结
- 2 I/O控制器
- 2.1 什么是IO控制器?
- 2.2 IO控制器的功能
- 2.3 IO控制器的组成
- 2.3.1 CPU与控制器的接口
- 2.3.2 IO逻辑
- 2.3.3 控制器与设备机器设备的接口
- 2.3.4 总体示意图
- 注意
- 编址方式
- 2.4 总结
- 3 I/O控制方式
- 3.1 总览
- 3.2 程序直接控制方式
- 3.2.1 什么是程序直接控制方式?
- 3.2.2 完成一次读写操作的流程
- 3.2.3 CPU干预的频率
- 3.2.4 数据传送的单位?
- 3.2.5 数据的流向?
- 3.2.6 优缺点
- 3.3 中断驱动方式
- 3.3.1 什么是中断驱动方式
- 3.3.2 注意
- 3.3.3 完成一次读写操作的流程
- 3.3.4 CPU干预的频率
- 3.3.5 数据传送的单位
- 3.3.6 数据的流向
- 3.3.7 主要优缺点
- 3.4 DMA控制器方式
- 3.4.1 DMA控制器的基本组成
- 3.4.2 DMA方式的工作流程
- 3.4.3 完成一次读/写操作的流程
- 3.4.4 CPU干预的频率
- 3.4.5 数据传送的单位
- 3.4.6 数据的流向
- 3.4.7 主要优缺点
- 3.4.8 注意
- 3.5 通道控制方式
- 3.5.1 基本工作流程
- 3.5.2 通道程序的基本组成
- 3.5.3 完成一次读/写操作的流程
- 3.5.4 CPU干预的频率
- 3.5.5 数据传送的单位
- 3.5.6 数据的流向
- 3.5.7 优缺点
- 3.6 总结
- 4 I/O软件基本层次结构
- 4.1 基本架构
- 4.2 用户层软件
- 4.2.1 主要的功能
- 4.2.2 例子
- 4.3 设备独立性软件
- 4.3.1 解释
- 4.3.2 主要的功能
- 4.4 设备驱动程序
- 4.4.1 什么是驱动程序?
- 4.4.2 为什么要有驱动程序?
- 4.4.3 驱动程序的功能
- 4.4.4 注意
- 4.5 中断处理程序
- 4.5.1 解释
- 4.5.2 处理流程
- 4.6 总结
- 5 输入输出应用接口与设备驱动接口
- 5.1 总览
- 5.2 输入输出应用程序接口
- 5.2.1 为什么要有应用程序接口?
- 5.2.2 字符设备接口
- 5.2.3 块设备接口
- 5.2.4 网络设备接口
- 5.3 阻塞与非阻塞I/O
- 5.3.1 阻塞I/O
- 5.3.2 非阻塞I/O
- 5.4 设备驱动程序接口
- 5.4.1 解释
- 6 总结
1 I/O设备的基本概念与分类
1.1 总览
1.2 什么是IO设备
注意:
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用文件操作相同的方式对外部设备进行操作
1.3 IO设备的分类
1.3.1 按使用特性
1.3.2 按传输速率
1.3.3 按信息交换的单位
1.4 总结
2 I/O控制器
2.1 什么是IO控制器?
2.2 IO控制器的功能
2.3 IO控制器的组成
2.3.1 CPU与控制器的接口
(1)该部分实现的功能
用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输 入)数据,或放入(输出)数据
(2)基本组成
①数据寄存器
当设备输入时,存放设备输入的数据(比如键盘键入的字符);当CPU对设备输出时,存放CPU输入的数据。是双向的。
②控制寄存器
CPU发出的IO指令中可能包含一些其他的参数,放在控制寄存器中。是单向的。
③状态寄存器
存放各设备的状态,比如1表示空闲,0表示忙碌,CPU从其中读取。是单向的。
2.3.2 IO逻辑
(1)该部分实现的功能
负责接收和识别CPU 的各种命令(如地址译码),并负责对设备发出命令
2.3.3 控制器与设备机器设备的接口
(1)该部分实现的功能
用于实现控制器与设备之间的通信
(2)基本组成
①与各设备连接的接口
各接口都要实现传输
Ⅰ 数据信息(传送输入/ 输出数据)
Ⅱ 状态信息(设备向控制器反馈自己的状态)
Ⅲ 控制信息(控制器向设备发出控制信息)。
2.3.4 总体示意图
注意
编址方式
(1)内存映像编址
①解释
内存映射 I/O。控制器中的寄 存器与内存地址统一编址
②优点
简化了指令。可以采用对内存进行操作的指令来对控制器进行操作
(2)寄存器独立编址
①解释
寄存器独立编制。 控制器中的寄存器使用单独的地址
②缺点
需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号
2.4 总结
3 I/O控制方式
3.1 总览
3.2 程序直接控制方式
3.2.1 什么是程序直接控制方式?
已键盘向CPU键入数据为例:
(1)CPU向控制器发出读指令。 于是设备启动,并且状态寄存器设为 1(未就绪)
(2)CPU轮询检查控制器的状态 (其实就是在不断地执行程序的循环,若 状态位一直是 1,说明设备还没准备好要输入的数据, 于是CPU会不断地轮询,知道状态为为0(设备已经完成输入)
(3)输入设备准备好数据后将数据传给控制器,并报告自身状态(已就绪)
(4)控制器将输入的数据放到数据寄存器中, 并将状态改为0 (已就绪)
(5)CPU发现设备已就绪,即可将数据寄存器中的内容读入CPU的寄存器中,再把CPU寄存器中的内容放入内存
(6)若还要继续读入数据,则CPU 继续发出读指令
3.2.2 完成一次读写操作的流程
3.2.3 CPU干预的频率
3.2.4 数据传送的单位?
每次读写一个字
3.2.5 数据的流向?
3.2.6 优缺点
3.3 中断驱动方式
3.3.1 什么是中断驱动方式
3.3.2 注意
3.3.3 完成一次读写操作的流程
3.3.4 CPU干预的频率
3.3.5 数据传送的单位
每次读/写一个字
3.3.6 数据的流向
与程序直接控制方式类似
3.3.7 主要优缺点
3.4 DMA控制器方式
3.4.1 DMA控制器的基本组成
DR、MAR、DC、CR都是操作系统中的寄存器:
3.4.2 DMA方式的工作流程
以键盘键入数据为例:
CPU将数据存放在内存中的地址存入MAR,DMA负责读取键盘键入的字符,将其存放在DR中,待键入结束后,再将DR中的数据存入MAR中显示的内存地址,并发出中断请求,使CPU进行处理。
3.4.3 完成一次读/写操作的流程
3.4.4 CPU干预的频率
仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
3.4.5 数据传送的单位
3.4.6 数据的流向
不再经过CPU
3.4.7 主要优缺点
3.4.8 注意
(1)DMA读取数据的过程中,是一次读入一个字,再将读取的字存入DR中,但对于CPU来说,好像是一次读入了一块的数据。
(2)每次读写的只可以是连续的块,如果想读写离散的块,就必须发送多次中断。
3.5 通道控制方式
3.5.1 基本工作流程
(1)CPU向通道发出I/O指令。指明通道程序(可以理解为CPU下派的任务清单)在内存中的位置,并指明要操作的是哪个I/O设备。之后CPU就切换到其他进程执行了。
(2)通道执行内存中的通道程序,它其中指明了要读入/写出多少数据,读/写的数据应放在内存的什么位置等信息
(3)通道执行完规定的任务后,向CPU发出中断信号,之后 CPU对中断进行处理
3.5.2 通道程序的基本组成
在通道程序中,CPU可以指派一堆任务,同时读/写的数据也不必是连续的,只要指定了内存中的位置就可以。这是对DMA控制方式的改进。
3.5.3 完成一次读/写操作的流程
3.5.4 CPU干预的频率
3.5.5 数据传送的单位
每次读/写一组数据块
3.5.6 数据的流向
数据是在通道的控制下进行的。
3.5.7 优缺点
3.6 总结
4 I/O软件基本层次结构
4.1 基本架构
4.2 用户层软件
4.2.1 主要的功能
(1) 实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
(2)用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务
4.2.2 例子
例如C语言中的"printf(“Hello\n”)",printf就是方便用户使用的库函数,而它会被翻译成write系统调用。
对于一些需要参数的系统调用,用户在使用库函数时显然也应该填入相应的参数。
4.3 设备独立性软件
4.3.1 解释
这一层会向用户层提供系统调用的接口,所以有时候也被成为系统调用层。
4.3.2 主要的功能
(1)向上层(用户层)提供统一的调用接口
比如read、write系统调用
(2)设备的保护
原理类似于文件保护。设备被看做是一种特殊的文件(UNIX系统中),不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。
(3)差错处理
设备可能会出错,因此设备独立性软件需要对一些设备的错误进行处理
(4)设备的分配与回收
设备属于一种临界资源,对临界资源的分配和回收是相当重要的。
(5)数据缓冲区管理
通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
(6)建立逻辑设备名到物理设备名的映射关系
①解释
②逻辑设备表的基本结构
③管理逻辑设备表的方法
根据设备类型选择调用相应的驱动程序
驱动程序的说明见下第四大点
4.4 设备驱动程序
4.4.1 什么是驱动程序?
简单来说,就是驱动计算机里软件的程序
4.4.2 为什么要有驱动程序?
不同设备的内部结构也不同,其内部硬件特性也不同。而这些特性、结构只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作,程序才可以正常运行。
4.4.3 驱动程序的功能
4.4.4 注意
驱动程序一般会以一个独立进程的方式存在。
4.5 中断处理程序
4.5.1 解释
4.5.2 处理流程
4.6 总结
5 输入输出应用接口与设备驱动接口
5.1 总览
5.2 输入输出应用程序接口
5.2.1 为什么要有应用程序接口?
不同类型设备的I/O操作的细节是不同的,因此无法使用一个统一的接口对所有的设备进行调用。
我们之前已经学习过I/O软件的层次结构,设备独立软件层的任务之一就是给用户层提供标准的接口。
5.2.2 字符设备接口
比如:键盘
5.2.3 块设备接口
5.2.4 网络设备接口
(1)解释
(2)主机之间通信过程描述
①主机1、主机2中的一个进程使用socket系统调用,创建一个网络套接字(可以理解为在内核区申请一片空间)。套接字会绑定主机的一个端口(bind系统调用)。
②发送方主机1中使用write系统调用向内存中写入一些数据。并将数据移入网卡进行发送,这个过程需要 “设备无关性软件” 调用 “网络控制器驱动程序”
③主机1在发送之前显然已经知道主机2的socket套接字绑定的端口(可以通过一些协议实现)。结合IP地址及端口,主机1的数据就可以精确发送到主机2中。
④主机2收到数据后通过网卡将其存在内存中,这个过程需要“中断处理程序”调用“网络控制器驱动程序”。进程使用read系统调用进行读取。
(3)示意图
5.3 阻塞与非阻塞I/O
5.3.1 阻塞I/O
应用程序发出I/O系统调用,进程需转为阻塞态等待。比如说:C语言中的scanf函数,只要键盘没有输入字符,那么程序就不会往下继续执行,也就是被阻塞了。
5.3.2 非阻塞I/O
应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。比如说:在块设备接口往磁盘写数据的过程中,只要块设备将数据复制到内核中去了,那么就可以交给内核执行,而自己就可以进行其他的工作。
5.4 设备驱动程序接口
5.4.1 解释
不同厂商生产的I/O设备的结构不同,其驱动程序也不同。可能相同的系统调用但是其参数又不一致。这样,设备独立层软件在享受驱动程序提供的服务时就会出现问题。
操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序。
6 总结
本文PDF文件下载链接:提取码:ikun
操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。
它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。
操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。
在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。
渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍