命令包括读取、写取、查找13.1概述
计算机的两个主要工作:
I/O(输入/输出)
处理
对连接到计算机上的设备的控制是操作系统设计者关注的一个主要问题。
I/O设备技术出现两个相矛盾的趋势:
硬件和软件接口日益增长的标准化。
I/O设备日益增长的多样性。
操作系统内核设计成使用设备驱动程序模块的结构。
设备驱动程序为I/O子系统提供了统一接口。
12.2输入输出硬件
I/O系统的组成:
PC BUS I/O系统 (Fig )
主机I/O系统(Fig )
Common concepts
Port ,端口
Bus (daisy chain or shared direct access),总线
Controller (host adapter),控制器
I/O instructions control devices
Devices have addresses(寻址方式), used by
Direct I/O instructions
Memory-mapped I/O
一个典型的PC总线结构
Mainframe Systems 大型机(主机)系统
这类计算机以存储器为中心,CPU和各种通道都与存储器相连
PCs上的设备I/O端口位置(部分)
I/O方式
一、Polling轮询
确定设备的状态
命令-准备就绪
忙的
错误
等待来自设备的I/O的繁忙等待周期
二、中断
CPU硬件有一条中断请求线(interrupt-request line, IRL),由I/O设备触发
设备控制器通过中断请求线发送信号而引起中断,CPU捕获中断并派遣到中断处理程序,中断处理程序通过处理设备来清除中断。
两种中断请求
非屏蔽中断:主要用来处理如不可恢复内存错误等事件
可屏蔽中断:由CPU在执行关键的不可中断的指令序列前加
以屏蔽
中断向量
中断优先级:能够使CPU延迟处理低优先级中断而不屏蔽所有中
断,这也可以让高优先级中断抢占低优先级中断处理。
中断的用途
中断机制用于处理各种异常,如被零除,访问一个受保护的或不存
在的内存地址
系统调用的实现需要用到中断(软中断)
中断也可以用来管理内核的控制流
中断驱动的输入输出循环
英特尔奔腾处理器事件-向量表
Linux中的中断向量
对I/O设备的IRQ(中断请求)分配的一个示例
三、直接内存访问(DMA)
用于避免大数据移动的编程I/O
需要DMA控制器
绕过CPU,直接在I/O设备和内存之间传输数据
执行DMA传输的六步过程
13.3应用I/O接口
核I/O结构
输入输出设备的特点
Block and Character Devices(块和字符设备)
Block devices(块设备)包括磁盘驱动器
命令包括读取、写取、查找
原始I/O或文件系统访问
内存映射文件访问
Character devices(字符设备)包括键盘、鼠标、串行端口
Commands include get(), put()
在顶部分层的库允许进行行编辑
Network Devices(网络设备)
从块和字符的变化足以有自己的接口
Unix和Windows NT/9x/2000包含套接字接口
分离网络协议和网络操作
Includes select() functionality
方法差异很大(管道、fifo、流、队列、邮箱)
Clocks and Timers(时钟和定时器)
提供以下三个基本函数
获取当前时间
获取已经逝去的时间
设置定时器以在T时触发操作X
测量逝去时间和触发器操作的硬件称为可编程间隔定时器(programmable interval timer)
可被设置为等待一定的时间,然后触发中断
也可设置成做一次或重复多次以产生定时中断
Blocking and Nonblocking I/O(阻塞和非阻塞I/O)
Blocking - process suspended until I/O completed ,进程挂起直到I/O完成为止
易于使用和理解
不足以满足一些需求
Nonblocking - I/O call returns as much as available,I/O调用立刻返回
用户界面、数据副本(缓冲I/O)
通过多线程实现
使用读取或写出的字节数快速返回
OAsynchronous(异步)
Asynchronous(异步) - process runs while I/O executes,进程与I/O同时运行
使用困难
输入输出完成后处理输入输出子系统信号处理
非阻塞与异步系统调用的差别是:
非阻塞read调用会马上返回,其所读取的数据可以等于或少于所要求的,或为零;
异步read调用所要求的传输应完整地执行,其具体执行可以是将来某个特定时间。
两种输入输出方法
13.4内核输入/输出子系统
内核与I/O有关服务:I/O scheduling、buffering、caching、spooling(
虚拟化)、device reservation、and error handling.
内核I/O子系统负责:
文件和设备命名空间的管理
文件和设备访问控制
操作控制(for example,a moderm cannot seek())
文件系统空间的分配
设备分配
缓冲、高速缓存、假脱机
I/O调度
设备状态监控、错误处理、失败恢复
设备驱动程序的配置和初始化
I/O调度
Scheduling(I/O调度)调度一组I/O请求就是确定一个好的顺序来执行这些请求。
某些I/O需要按设备队列的顺序–先来先服务
某些操作系统尝试着公平–优先级高者优先
磁盘I/O调度
实现
OS通过为每个设备维护一个请求队列来实现调度。
可以试图公平,也可以根据不同的优先级进行I/O调度。
其他方法:缓冲、高速缓冲、假脱机
缓冲buffer
缓冲 Buffering—-store data in memory while transferring between devices,用来保存在两设备之间或在设备和应用程序之间所传输数据的内存区域。。
缓冲作用:
解决设备速度不匹配
解决设备传输块的大小不匹配
为了维持拷贝语义“copy semantics”要求
缓冲区管理:为了解决CPU与I/O之间速度不匹配的矛盾,在它们之间配置了缓冲区。这样设备管理程序又要负责管理缓冲区的建立、分配和释放。
单缓冲、双缓冲、多缓冲、缓冲池
设备状态表
内核输入输出子系统
Caching (高速缓存)- fast memory holding copy of data
缓冲与高速缓存的差别是缓冲只是保留数据仅有的一个现存拷贝,而高速缓存只是提供了一个驻留在其他地方的数据的一个高速拷贝。
高速缓存和缓冲是两个不同的功能,但有时一块内存区域也可以同时用于两个目的。
当内核接收到I/O请求时,内核首先检查高速缓存以确定相应文件的内容是否在内存中。如果是,物理磁盘I/O就可以避免或延迟。
假脱机技术
SPOOLing(Simultaneous Peripheral Operation On Line)称为假脱机技术。:用来保存设备输出的缓冲,这些设备如打印机不能接收交叉的数据流。
操作系统通过截取对打印机的输出来解决这一问题。应用程序的输出先是假脱机到一个独立的磁盘文件上。当应用程序完成打印时,假脱机系统将相应的待送打印机的假脱机文件进行排队
Printing:打印机虽然是独享设备,通过SPOOLing技术,可以将它改造为一台可供多个用户共享的设备。
设备保留和错误处理
Device reservation(设备预定) - provides exclusive access to a device提供对设备的独占访问
System calls for allocation and deallocation分配和再分配的系统调用
Watch out for deadlock有可能产生死锁
Error Handling(错误处理)
OS can recover from disk read, device unavailable, transient write failures。操作系统可以恢复磁盘读,设备无效,暂时的失败
Most return an error number or code when I/O request fails 当I/O失败时,大多数返回一个错误码
System error logs hold problem reports系统日志记录了出错报告
输入输出保护
用户进程可能会意外地或故意地试图通过非法的I/O指令中断正常操作
定义为享有特权的所有I/O指令
I/O必须通过系统调用来执行
内存映射的和I/O端口的内存位置也必须得到保护
使用系统调用来执行I/O
内核数据结构
Kernel keeps state info for I/O components, including open file tables, network connections, character device state。内核需要保存留I/O组件使用的状态信息,包括打开文件表,网络连接,字符设备状态等
Many, many complex data structures to track buffers, memory allocation, “dirty” blocks。许多复杂的数据结构用来跟踪缓冲,内存分配,及“脏”块
Some use object-oriented methods and message passing to implement I/O。某些OS用面向对象的方法和消息传递的方法来实现I/O
UNIX I/O内核结构
13.5对硬件操作的I/O请求
考虑从磁盘读取进程的文件:
确定保存文件的设备
转换名字到设备的表示法
把数据从磁盘读到缓冲区中
通知请求进程数据现在是有效的
把控制权返回给进程
输入/O请求的生命周期
13.6流
流——Unix System V及其中用户级进程和设备之间的全双工通信通道
流包括:
与用户进程的头接口
驱动程序终端与该设备的接口
它们之间有零个或多个流模块
每个模块都包含一个读队列和一个写队列
消息传递用于队列之间的通信
流的结构
13.7性能
I/O是影响系统性能的一个主要因素:
要求CPU执行设备驱动程序,内核I/O代码
由于中断而导致的上下文切换
数据拷贝
网络流量尤其紧张
计算机间的通信
提高性能
减少上下文切换的数量
减少数据复制
通过使用大型传输、智能控制器、轮询来减少中断
使用DMA
平衡CPU、内存、总线和I/O性能,以获得最高的吞吐量