I/0子系统

本文详细介绍了I/O子系统的特性,包括字符设备、块设备和网络设备的访问方式,同步与异步I/O的操作模式,以及CPU与设备控制器的数据传输方式如PIO和DMA。此外,还深入讨论了磁盘调度算法,如FIFO、SSTF、SCAN、C-SCAN等,以及磁盘缓存在提高性能中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.I/O特点

1.设备接口类型
A.字符设备:键盘,鼠标,串口
——访问特征:以字节为单位顺序访问
——I/O命令:get(),put();通常使用文件访问接口和语义
B.块设备:磁盘驱动器,磁带驱动器,光驱
——访问特征:均匀的数据块访问;
——I/O命令:原始I/O或文件系统接口;内存映射文件访问
C.网络设备:以太网,无线,蓝牙
——访问特征:格式化报文交换
——I/O命令:send/receive网络报文;通过网络接口支持多种网络协议
2.同步和异步I/O
A.阻塞I/O:
——读数据时,进程将进入等待状态,直到完成数据读出
——写数据时,进程将进入等待状态,直到设备完成数据写入处理
在这里插入图片描述
B.非阻塞I/O:
——立即从read或write系统调用返回,返回值为成功传输字节数
——read或write的传输字节数可能为0
C.异步I/O:
——读数据时,使用指针标记好用户缓冲区,立即返回;稍后内核将填充缓冲区并通知用户
——写数据时,使用指针标记好用户缓冲区,立即返回;稍后内核将处理数据并通知用户
——驱动里会等待,而应用程序不等待。

二.I/O结构

1.硬件结构举例:
在这里插入图片描述
北桥连高速设备,南桥连I/O设备
2.cpu与设备连接
在这里插入图片描述
3.I/O指令和内存映射I/O
A.I/O指令
——通过I/O端口号访问设备寄存器
——特殊的CPU指令
B.内存映射I/O
——把设备的寄存器或存储映射带内存物理地址空间中
——通过load/store指令完成I/O操作
——MMU设置映射,硬件跳线或程序在启动时设置地址
4…内核I/O结构
在这里插入图片描述
5…I/O请求生存周期
在这里插入图片描述

三.I/O数据传输

1.CPU与设备控制器的数据传输
A.程序控制I/O(PIO,Programmed I/O)
——通过CPU的in/out或者load/store传输所有数据
——特点:硬件简单,编程容易;消耗的CPU时间和数据量成正比
——适用于简单的,小型的设备I/O
B.直接内存访问(DMA)
——设备控制器可直接访问系统总线
——控制器直接与内存互相传输数据
——特点:设备传输数据不影响CPU;需要CPU参与设置
——适用于高吞吐量I/O
C.DMA举例
在这里插入图片描述
2.I/O设备通知操作系统的机制
A.操作系统需要了解设备状态
——I/O操作完成时间
——I/O操作遇到错误
B.两种方式
——CPU主动轮询
I/O设备在特定的状态寄存器中放置状态和错误信息,操作系统定期检查这些状态寄存器
特点:简单;I/O操作频繁或不可预测时,开销大和延时长
——设备中断
设备中断处理流程:CPU在I/O之前设置任务参数;CPU发出I/O请求后,继续执行其他任务;I/O设备处理请求;I/O设备处理完成时,触发CPU中断请求;CPU接收中断,分发到相应中断处理例程
特点:处理不可预测事件效果好;开销相对较高(CPU在每两条指令执行期间会去检查是否有中断请求)
C.一些设备可能结合了轮询和设备中断
——如:高带宽网络设备(第一个传入数据包到达前采用中断;轮询后面的数据包直到硬件缓存为空)
D.设备中断I/O处理流程
在这里插入图片描述

四.磁盘调度

1.磁盘工作机制和性能参数
——读取或写入时,磁头必须被定位在期望的磁道,并从所期望的柱面和扇区开始
——寻道时间:定位到期望的磁道所花费的时间
——旋转延迟:从零扇区开始到达目的地花费的时间
在这里插入图片描述
2.磁盘I/O传输时间
在这里插入图片描述
3.磁盘调度算法
A.通过优化磁盘访问请求顺序来提高磁盘访问性能
——寻道时间是磁盘访问最耗时的部分
——同时会有多个在同一磁盘上的I/O请求
——随机处理磁盘访问请求的性能表现很差
4.先进先出(FIFO)算法
——按顺序处理请求
——公平对待所有进程
——在有很多进程的情况下,接近随机调度的性能
5.最短服务时间优先(SSTF)
——选择从磁臂当前位置需要一定最少的I/O请求
——总是选择最短寻道时间
6.扫描算法(SCAN)
——磁臂在一个方向上移动,访问所有未完成的直到磁臂到达该方向上最后的磁道
——也称电梯算法
7.循环扫描算法(C-SCAN)
——限制了仅在一个方向上扫描
——当最后一个磁道也被访问过了后,磁臂返回到磁盘的另一端再次进行
8.C-LOOK算法
——磁臂先到达该方向上最后一个请求处,然后立即反转,而不是先到最后点路径上的所有请求
9.N步扫描(N-step-SCAN)算法
——磁头粘着(Arm Stickiness)现象
——SSTF,SCAN及CSCAN算法中,可能出现磁头停留在某处不动的情况(进程反复请求某一磁道的I/O操作)
——N步扫描扫描算法(将磁盘请求队列分成长度为N的子队列;按FIFO算法依次处理所有子队列;队列内部用扫描算法)
10.双队列扫描算法(FSCAN)算法
——FSCAN算法是N步扫描算法的简化
——FSCAN只将磁盘请求队列分成两个子队列
——把磁盘I/O请求分成两个队列;交替使用扫描算法处理一个队列;新生的磁盘I/O请求放入另一队列中,所有的新请求都将被推迟到下一次扫描时处理

五.磁盘缓存

放在内存里的磁盘的数据缓存,为了避免对磁盘里同一块数据的多次引用时的反复读取
1.缓存
A.数据传输双方访问速度差异较大时,引入的速度匹配中间层。
B.磁盘缓存是磁盘扇区在内存中的缓存区
——磁盘缓存的调度算法很类似虚拟存储调度算法
——磁盘的访问频率远低于虚拟存储中的内存访问频率
——通常磁盘缓存调度算法很复杂
2.单缓存与双缓存
在这里插入图片描述
单缓存中,往缓存中写时,CPU就不能从缓存中读,效率较低;双缓存中,因为是不同的缓存区,I/O设备的写和CPU的读可以同时进行。
3.访问频率置换算法(Frequency-based Replacement)
A.问题是:在一段密集磁盘访问后,LFU算法的引用计数变化无法反映当前的引用情况
B.算法思路
——考虑磁盘访问的密集特征,对密集引用不计数
——在短周期中使用LRU算法,而在长周期中不使用LFU算法
C.思路图解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值