操作系统概念(十一)——I/O系统

写在前面:这一章似乎并不是很重要。当然,坐等打脸
OS内核通过设备驱动程序(模块)与I/O子系统链接,驱动为I/O子系统提供了统一设备访问接口,与系统调用API为应用程序与OS之间提供了统一的标准接口一样。

一、I/O硬件

1、端口:PC与设备的连接点
2、总线(PCI):一组线和一组严格定义的可以描述在线上传输信息的协议
3、扩展总线:连接串行、并行端口和相对较慢的设备
4、控制器:用于操作端口、总线或设备的一组电子器件,是PC上的一块芯片或者部分芯片,有一个或多个用于数据和控制信号的寄存器,,处理器通过读写这些寄存器的位模式来与控制器通信,控制控制器,即特殊I/O指令
5、设备具有地址,用于:
①直接I/O通信,I/O指令触发总线线路来选择设备并传入寄存器
②内存映射I/O,设备控制寄存器映射到处理器的地址空间,此时设备控制寄存器相当于一块内存
6、I/O端口:通常由如下几种寄存器:
①数据输入寄存器:被主机读出,设备控制器进行写入
②数据输出寄存器:被设备控制器读出,主机进行写入
③状态寄存器:包含主机可读取的位信息
④控制寄存器:主机用来向设备发送指令或改变状态
7、轮询:主机与控制器之间的交互过程,适用于快I/O
①主机不断地读取忙位,直到该位被清除 (这个过程称为轮询,亦称忙等待-busy waiting)
②主机设置命令寄存器中的写位并向数据输出寄存器中写入一个字节。
③主机设置命令就绪位
④当控制器注意到命令就绪位已被设置,则设置忙位。
⑤控制器读取命令寄存器,并看到写入命令。它从数据输出寄存器中读取一个字节,并向设备执行I/O操作。
⑥控制器清除命令就绪位,清除状态寄存器的故障位以表示设备I/O成功,清除忙位以表示完成。
8、中断:CPU硬件有一条中断请求线IRL,由I/O设备触发,CPU执行完每条指令后都会检查IRL,当有时则进入中断处理程序,即设备控制器通过IRL发送信号引起中毒案,CPU捕获中断并发送到中断处理程序,程序处理设备请求来清除中断
9、要求中断:
①关键处理时可以延迟中断处理
②能有效将中断分发到中断处理程序
③有多级中断
10、有两种中断请求:
①非屏蔽中断:主要用来处理如不可恢复内存错误等事件
②可屏蔽中断:由CPU在执行关键的不可中断的指令序列前加以屏蔽
11、中断接收一个地址,从小集合内选择特定的中断处理程序
12、DMA直接内存访问:用来避免处理大量数据移动时按字节来向控制器送入数据的问题。需要DMA控制器。绕过CPU直接在内存与I/O设备之间进行数据传输
13、DMA的六个步骤:
①设备控制器接受到向地址X的缓冲区传送数据
②设备控制器告诉磁盘控制器从哪里拿数据放到哪里
③磁盘控制器初始化DMA传输
④磁盘控制器向DMA控制器发送每个字节的数据
⑤DMA控制器向磁盘缓冲区X发送数据
⑥C=0是,数据传输完毕,DMA控制器中断CPU

二、I/O应用接口

1、使I/O设备可用统一的标准对待
2、块与字符设备:包括磁盘驱动器、键盘、鼠标、串行口,内存映射文件访问是建立在块设备驱动程序之上的。内存映射接口不是提供read和write操作,而是提供通过内存中的字节数组来访问磁盘存储。
3、网络设备:绝大多数操作系统所提供的网络I/O接口也不同于磁盘的read-write-seek接口。许多OS所提供的是网络套接字接口。
4、时钟与定时器:需要提供以下三个基本函数:
①获取当前时间
②获取已经逝去的时间
③设置定时器以在T时触发操作X
5、阻塞与非阻塞I/O:
①阻塞:进程悬挂直到I/O完成为止,容易使用与理解,对某些需求难以满足
②非阻塞:I/O调用立刻返回,用户接口,数据复制(缓冲I/O),通过多线程实现,立刻返回读或写的字节数
③异步:进程与I/O同时运行,难以使用,当I/O完成时,I/O系统发送信号通知进程
6、非阻塞与异步系统调用的差别是非阻塞read调用会马上返回,其所读取的数据可以等于或少于所要求的,或为零。异步read调用所要求的传输应完整地执行,其具体执行可以是将来某个特定时间。

三、I/O内核子系统

1、I/O调度:OS通过为每个设备维护一个请求队列实现调度,也可以通过缓冲,高速缓冲,假脱机实现

(一)、缓冲

1、用来保存在两设备之间或在设备和应用程序之间所传输数据的内存区域。
2、采用缓冲的三个理由:
①处理设备速度的差异。如调制解调器的速度与硬盘的速度的差异。
②处理设备传输大小的差异。如计算机网络中,缓冲常常用来处理消息的分段和重组。
③维护应用程序的“拷贝语义”

(二)、高速缓存

1、是可以保留数据拷贝的高速内存。
2、缓冲只是保留数据仅有的一个现存拷贝,而根据定义高速缓存只是提供了一个驻留在其他地方的数据的一个高速拷贝。
3、高速缓存和缓冲是两个不同的功能,但有时一块内存区域也可以同时用于两个目的。

(三)、假脱机与设备预留

1、假脱机:用来保存设备输出的缓冲,这些设备如打印机不能接收交叉的数据流。
2、设备预留:提供设备的互斥访问
3、预留:为某进程保留该设备的使用权,在该进程获得运行之前,其他申请该设备的进程将得不到使用权。

(四)、错误处理

1、OS可以对短暂出错进行弥补
2、当I/O请求失败后,多数返回一个错误号或错误码
3、系统错误日志保存问题的详细报告

(五)、内核数据结构

1、内核需要保存留I/O组件使用的状态信息,包括打开文件表,网络连接,字符设备状态等
2、许多复杂的数据结构用来跟踪缓冲,内存分配,及“脏”块
3、某些OS用面向对象的方法和消息传递的方法来实现I/O

(六)、I/O系统服务

1、文件和目录的命名空间的管理
2、文件和目录的访问控制
3、操作控制(例如,modem不能使用seek)
4、文件系统空间分配
5、设备分配
6、缓冲、高速缓存和假脱机
7、I/O调度
8、设备状态监控、错误处理、失败恢复
9、设备驱动程序的配置和初始化

四、把I/O操作转换成硬件操作

1、从磁盘读文件到进程的过程:
①找到包含文件的设备
②将文件名转换成设备实现
③从磁盘上读数据至缓冲区
④通知进程数据可用
⑤将控制返回给进程
2、I/O请求的生命周期:
①请求I/O调用系统调用
②系统调用判断是否可以满足请求,如果可以转到③,如果不可以转到④
③可以满足I/O请求的时候,内核子系统传输数据到晋城,返回完成或者错误代码,转到⑤
④不可满足I/O请求的时候,内核子系统向设备驱动发送请求,如果合适则阻塞进程,转到⑥
⑤内核子系统完成I/O请求后,从系统调用返回,I/O完成,输入数据可用,或者输出完毕,终止
⑥如果进程已经被阻塞,则设备驱动器发送请求,向控制器发送命令,设备控制器阻塞直到被中断,转到⑦
⑦设备控制器命令监视设备,直到设备I/O完成,进行中断,转到⑧
⑧中断处理程序会接收到设备产生的中断,如果输入则存储数据到设备驱动器缓冲区,发送信号来阻塞设备驱动器,转到⑨
⑨设备驱动器会决定哪个I/O完成,向I/O子系统指示状态转换,转到③
如图:
在这里插入图片描述

发布了205 篇原创文章 · 获赞 110 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/103631407