PromleeBlog
网站地图
关于博客
菜单
loading..🐩🐩🐩🐩
学习
Operating System
Ten Min Operating System
输入输出系统的工作原理——每天 10 分钟操作系统,第 12 天
输入输出系统的工作原理——每天 10 分钟操作系统,第 12 天
📅
开始之前
什么是输入输出硬件?
内核的输入输出子系统
组成部分
示例流程
应用程序与 I/O 接口
什么是 STREAMS?
输入输出与性能
输入输出调度层示例
总结
参考资料
开始之前
🔗
没有输入设备(鼠标、键盘)和输出设备(显示器、打印机),计算机就无法正常工作。负责在这些设备与操作系统之间交换信息的,就是
输入输出系统(I/O System)
。
本文将结合示例,逐一介绍输入输出硬件的结构,以及操作系统如何处理和管理这些硬件。
什么是输入输出硬件?
🔗
输入输出硬件是指计算机与外部交流所使用的所有设备。典型设备包括:
输入设备:键盘、鼠标、扫描仪
输出设备:显示器、打印机、扬声器
存储设备:硬盘、SSD、USB
通信设备:网卡、蓝牙模块
这些设备都通过*控制器(controller)*连接到操作系统。控制器负责控制设备的实际操作,充当在 CPU 与内存之间交换数据的中间管理者。
内核的输入输出子系统
🔗
操作系统内核并不直接操作每一种输入输出设备,而是通过
驱动程序(driver)
和
输入输出子系统
间接管理它们。
组成部分
🔗
设备驱动程序
:控制特定硬件的程序,例如打印机驱动。
缓冲与缓存
:在内存中存储、整理数据,以加快处理。
中断处理
:向 CPU 传递设备已完成任务的信号。
DMA(Direct Memory Access,直接内存访问)
:无需 CPU 参与,即可在设备与内存之间直接传输数据。
示例流程
🔗
用户通过打印机打印文档时:
程序通过系统调用发出请求。
内核将请求交给打印机驱动。
驱动向打印机控制器发送命令。
打印完成时产生中断 → 通知 CPU。
应用程序与 I/O 接口
🔗
应用程序不会直接处理输入输出,而是向操作系统提出请求。这些请求以*系统调用(System Call)*的形式传递。
read()、write()、open()、close() 等都是典型的系统调用。
操作系统接收请求,将其交给适当的驱动程序,再把结果返回给应用程序。因此,开发者即使不了解设备的详细结构,也能执行 I/O 操作。
什么是 STREAMS?
🔗
UNIX 类系统使用名为
STREAMS
的结构来组织输入输出流程。
将多个输入输出模块像“流(stream)”一样连接起来。
模块之间交换数据,每个模块都可以独立处理。
用于网络通信、终端输入输出等场景。
就像在水管上连接多个过滤器一样,可以灵活地组织输入输出处理流程。
输入输出与性能
🔗
输入输出对整个系统的速度有很大影响。以下技术可用于提升性能:
异步 I/O
:发出请求后不等待,立即执行下一项任务。
缓冲/缓存
:弥补输入输出速度与 CPU 处理速度之间的差距。
基于中断的处理
:由设备发送完成信号,代替轮询。
块输入输出
:一次处理多项数据。
输入输出调度层示例
🔗
为了高效处理输入输出请求,操作系统会使用不同层次的队列:
请求队列(Request Queue)
:在设备驱动前等待处理的请求。
调度算法
:使用 FIFO、SSTF、LOOK、C-LOOK 等磁盘相关算法。
合并(Merging)
:将相邻请求组合起来,提高处理速度。
这些技术可以让系统资源得到有效利用。
总结
🔗
本文介绍了输入输出硬件的基本结构,以及操作系统如何控制这些硬件。理解系统调用、驱动、DMA、STREAMS 等概念在实际工作中的联系,并在脑中形成清晰的图景,非常重要。
下一篇将介绍
文件系统接口
。
参考资料
🔗
Operating System Concepts(第 10 版)
https://en.wikipedia.org/wiki/I/O_scheduling↗
https://www.geeksforgeeks.org/i-o-scheduling-in-operating-systems/↗
数据流
输入输出系统的工作原理——每天 10 分钟操作系统,第 12 天 | PromleeBlog