JAVA后端开发知识总结(持续更新…)
I/O管理
参考文档
B站:《王道考研 操作系统》
《现代操作系统》
文章目录
- I/O管理
- 参考文档
-
- 一、I/O设备的基本概念
- 二、I/O控制器
- 三、I/O控制方式
- 四、I/O软件层次
一、I/O设备的基本概念
- I/O
是输入/输出,I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备。在UNIX操作系统中将外部设备抽象为一种特殊的文件,使用Read和Write对外部设备进行操作。
- I/O设备
- I/O 设备大致可以分为两类:块设备和字符设备。
- 块设备把信息存储在固定大小的块上,每个块有自己独立的地址,块的大小在512~65536 字节之间。块设备的基本特征在于每个块都能够独立于其它块进行读写。
- 硬盘、蓝光光盘和 USB 是最常见的块设备。磁盘是公认的可寻址的设备,因为无论磁盘臂处于什么位置,它总能够寻址到其它柱面并且等待所需要的磁盘块旋转到磁头下面。
- 字符设备以字符为单位发送或者接收一个字符流,不考虑任何块结构。字符设备是不可寻址的,也没有任何寻道操作。鼠标、键盘等和磁盘不同的设备大都是字符设备。
二、I/O控制器
I/O设备的电子部件用于实现CPU对I/O设备的控制,被称为I/O控制器,CPU就是通过控制它来控制I/O设备的机械部件。有以下功能:
- 接受和识别CPU发出的命令:I/O控制器中的控制寄存器来存放CPU发来的Read/Write指令。
- 向CPU 告设备状态:I/O控制器中的状态寄存器记录I/O设备的当前状态。
- 数据交换:I/O控制器中设置相应的数据寄存器,类似于数据缓冲区与CPU交互,暂存各项数据。
- 地址识别(由I/O逻辑实现):类似于内存的地址,为各个寄存器设置一个特定的地址,区分各个寄存器。
I/O控制器的组成:
CPU轮询(完成一次读/写操作流程)检查I/O控制器的状态,循环处理,直到I/O准备就绪。CPU干预很频繁,需要不断轮询,导致长时间处于忙等状态。CPU与I/O设备串行工作。
引入中断机制,CPU在对I/O设备发出读/写指令后,将等待I/O的进程阻塞。当I/O完成后,控制器向CPU发出一个中断信 ,CPU 检测到中断信 后,会转去执行相应的中断处理程序。CPU从I/O控制器读取一个字的数据传送到CPU寄存器,再写入内存。最后,CPU恢复等待I/O的进程运行环境,并继续执行。CPU和I/O设备可并行工作,但频繁的中断处理影响性能。
DMA方式的数据传输以块为单位,CPU干预频率低,数据直接由设备写入内存,其传输效率进一步增加。但是CPU每发出一条I/O指令,只能读/写一个或多个连续的块。
- 通道控制方式
“通道”是一种硬件,CPU向通道发出通道指令,指明通道程序在内存中的位置和所要操作的I/O设备,之后CPU切换到其它进程。
总结对比
- 用户层软件调用库函数,通过系统调用请求操作系统内核服务,例如用户层软件的printf代码在设备独立性软件层被翻译成write系统调用。
- 设备独立性软件向用户层提供统一的调用接口(系统调用),并实现设备保护(设备被看作特殊文件)等功能,其基本功能就是对所有设备执行公共的 I/O 功能。
- 设备驱动程序主要负责对硬件设备的具体控制,将上层发出的指令转换成一系列设备的操作,比如,设置设备寄存器,检查设备状态等。
- 设备驱动程序和中断处理程序是直接和硬件打交道的。
- 中断处理程序由硬件中断、软件中断或者是软件异常活动产生的中断组成,用于实现设备驱动程序或者受保护的操作模式(如:系统调用)之间的转换。
- 完整的中断处理程序步骤如下图所示:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!