第六章、输入输出系统
说明:IO系统所含设备类型繁多,差异大,所以IO系统成为操作系统中最繁杂且与硬件最紧密相关的部分。
一、I/O系统的功能,模型和接口
1.1 I/O的基本功能
1. 隐藏物理设备的细节。
2. 与设备的无关性
3. 提高处理机和I/O设备的利用率。或者说让处理机与I/O设备并行操作。
4. 对I/O设备进行控制
5. 确保对设备的共享。
分为:独占设备和共享设备。
6. 错误处理
分为临时性错误和持久性错误。
临时性错误采用重试操作方式;持久性错误向上层报告。
第四点说明:
I/O设备的四种控制方式 | ||||
名称 | 采用轮询的可编程I/O方式 | 采用中断的可编程I/O方式 | 直接存储器访问方式(DMA) | i/O通道方式 |
传输数据的单位 |
| 字节(字) | 数据块 |
|
速度类型 |
| 低速 | 高速 |
|
设备举例 |
| 打印机,键盘等终端设备 | 磁盘,光盘 |
|
1.2I/O系统的层次结构图
名称 | 简介 | I/O应答 |
|
用户层软件 | 实现与用户交互的接口 | 产生I/O请求,格式化I/O,spooling |
|
设备独立性软件 | 实现用户程序与设备驱动器统一接口等的分配与释放等。 | 映射,保护,分块,缓冲,分配 |
|
设备驱动程序 | 与硬件直接相关,用于具体实现系统对设备发出的操作指令。 | 设置设备寄存器,检查状态 |
|
中断处理程序 | 保存被中断进程的CPU环境,转入中断处理程序处理,处理完后再恢复被中断进程的现场,返回被中断进程。 |
|
|
硬件 |
| 执行I/O操作。 |
|
1.3I/O系统接口
名称 | 说明 | 使用设备定义 | 设备举例 | 特征 |
块设备接口 | 块设备管理程序与高层之间的接口 | 块设备:数据的存取,传输是以数据块为单位的设备 | 磁盘,采用DMA方式 | 1. 传输速率高 2. 可寻址 3. 可随机读写 |
流设备接口 | 流设备管理程序与高层之间的接口 | 字符设备:数据的存取,传输是以数据块为单位的设备 | 类型多,差异大 | 1. 不可寻址 2. 采用顺序存取方式 |
网络通信接口 |
|
|
|
|
二、I/O设备和设备控制器
2.1 I/O设备
分类:
设备与控制器之间的接口
设备与CPU之间通过设备控制器进行间接通信
I/O设备与控制器接口通过信号线进行通信,有三条信号线:
1. 数据信号线
2. 控制信号线
3. 状态信号线
设备控制器的基本功能:
2.2I/O通道
在cpu和设备控制器之间增加I/O通道
使用目的:使一些原来由cpu处理的任务转由I/O通道承担,从而把CPU从繁杂的任务中解脱出来。
说明:I/O通道使一种特殊的处理机,具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。通道与cpu共享内存。
通道的类型:
1. 字节多路通道
2. 数组选择通道
3. 数组多路通道
一、中断机构和中断处理程序
3.1中断简介
1.中断和陷入
中断:中断是指CPU对I/O设备发来的中断信号的一种相响应。
陷入:由cpu内部事件所引起的中断。比如程序错误,非法指令,地址越界等。
2.中断向量表
中断向量表是实现了中断向量的数据结构
中断向量表中存放各个设备的中断处理程序,并把程序入口地址放在中断向量表中。为每个设备的中断请求规定一个中断号,对应于中断向量表中的字段。
3.对多中断源的处理方式
1.屏蔽(禁止)中断
当处理机正在处理中断时,对所有新的中断都予以屏蔽。
2.嵌套中断
当有多个不同优先级的中断请求时,CPU响应高优先级的中断请求。
高优先级的中断可以抢占正在运行的低优先级的中断的处理机。
3.2中断处理程序的处理过程
1.测定是否有未响应的中断信号。
2.保护被中断进程的CPU环境
3.转入相应的设备处理程序
4.中断处理
5.恢复CPU的现场并退出中断。
四、设备驱动程序
4.1设备驱动程序的功能
1.接收与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的底层操作序列。
2.检测用户I/O请求的合法性,了解IO设备的工作状态,传递与IO设备操作有关的参数,设置设备的工作方式。
3.发出IO命令,或者将请求者的请求块挂在设备队列上等待。
4.及时响应由设备控制器发来的中断请求。
4.2设备驱动程序的特点
说明:设备驱动程序属于低级的系统例程。
1. 驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序。
2. 驱动程序与设备控制器以及IO设备的硬件特性紧密相关,不同类型的设备配置不同的驱动程序。
3. 驱动程序与IO设备所采用的IO控制方式紧密相关,常用的IO控制方式是中断驱动和DMA方式。
4. 驱动程序的一部分必须使用汇编语言书写,很多驱动程序的基本部分已经固化在ROM中了。
5. 驱动程序允许可重入,
4.3对IO设备的控制方式
1.使用轮询的可编程IO方式(效率较低)
2.使用中断的可编程IO方式
3.直接存储器访问方式
4.IO通道方式
五、与设备无关的IO软件
5.1逻辑设备名与物理设备名
说明:为了实现与设备无关性而引入逻辑设备和物理设备的概念。
1. 逻辑设备是抽象设备名,如/dev/printer,说明该设备用打印机输出,未说明是哪一台打印机。
2. 与设备无关性的软件可以实现IO重定向:用于IO操作的设备可以更换。
3. 逻辑设备名称到物理设备名称的转换是通过系统中的逻辑设备表。
5.2设备分配
系统为实现对独占设备的分配,要在系统中配置相应的数据结构。
1. 设备分配中的数据结构
1. 设备控制表(DCT)
2. 控制器控制表(COCT)
3. 通道控制表(CHCT)
4. 系统设备表(SDT)
5.3独占设备程序分配的步骤
1.分配设备
2.分配控制器
3.分配通道
六、用户层的IO软件
6.1系统调用与库函数
1.系统调用
用户进程通过系统调用获取os服务。
2 .库函数
程序员利用库函数调用OS服务。存在于C,liunx系统中,windows是API,形式不一样而已。
6.2假脱机技术
假脱机技术可以将一台物理IO设备虚拟为多台逻辑IO设备,这样就可以允许多个用户共享一台物理IO设备。
假脱机技术的特点
1. 提高IO的速度
2. 将独占设备改为共享设备
3. 实现了虚拟设备的功能
七、缓冲管理
说明:现在大多数Os中都有缓冲区,更多的是利用内存作为缓冲区,缓冲区管理的主要功能是组织好这些缓冲区。
7.1缓冲的引入
1.引入原因
1.缓和CPU与IO设备间速度不匹配的矛盾。
2.减少对CPU中断的频率,放宽对CPU中断的响应时间的限制。
3.解决数据粒度不匹配问题。
4.提高CPU与IO设备的并行性
2.缓冲区与缓冲池
专用缓冲区:单缓冲区,双缓冲区,环形缓冲区。
公用缓冲区:也就是缓冲池
3.缓冲池技术
说明:缓冲池中是多个可供若干个进程共享的缓冲区。
缓冲池与缓冲区的区别:缓冲区仅仅是一组内存块的链表,而缓冲池则是包含了一个管理的数据结构以及一组操作的函数的管理机制。
缓冲池中三种类型的队列
1. 空白缓冲队列
2. 输入队列
3. 输出队列
八、磁盘存储器的性能和调度
8.1磁盘的使用
1.为了在磁盘上存储数据,必须先将磁盘低级格式化。
2.磁盘格式化完后,一般要对磁盘进行分区。
3.在真正使用磁盘前必须对磁盘进行一次高级格式化。
8.2磁盘的类型:
1.固定头磁盘
2.移动头磁盘
8.3磁盘访问时间
1.寻道时间
说明:寻道时间是把磁头移动到指定磁道上所经历的时间。
该时间是启动磁头的时间s与磁头移动n条磁道所花费的时间之和。
Ts = m * n+s;
M是常数,与磁盘驱动器有关,一般磁盘m=0.2,高速磁盘,m<=0.1。磁头的启动时间约为2ms.
2.旋转延迟时间Tm.
指定扇区移动到磁头下面所经历的时间,不同磁盘类型中,旋转速度相差很多。
3.传输时间Tt;
传输时间是指把数据从磁盘读出或者向磁盘写入数据所经历的时间。
Tt的大小与每次所读/写的字节数b和旋转速度有关:
Tt = b / rN;
r:磁盘每秒钟的转数。
N:一条磁道上的字节数。
说明:当一次读/写的字节数相当于半条磁道上的字节数时,Tm与Tt相同,可以将访问时间Ta 表示为:
Ta = Ts + 1 / 2*r+ b / r*N;
说明:寻道时间和旋转延迟时间基本上都与所读/写的数据的多少无关。
适当地集中数据传输,有利于提高传输效率。
8.4磁盘调度算法(常用):
说明:这四种算法都是从当前磁道为准的。
算法名称 | 说明 | 优点 | 缺点 | 使用情况 |
先来先服务(FCFS) | 根据进程请求访问磁盘的先后次序进行调度 | 公平,简单,每个进程都能依次得到处理 | 没有对寻道进行优化,导致平均寻道时间可能较长 | 适用于请求磁盘IO的进程数目较少的场合。 |
最短寻道时间优先(SSTF) | 要求访问的磁道与当前磁头所在的磁道距离最近 | 比FCFS有更好的寻道性能 | 不能保证有最短的寻道时间 | 不常用 |
扫描算法(SCAN) | 基于优先级的调度算法,每次扫描从当前磁道向外扫描,然后再从最外面向内扫描 | 避免了进程“饥饿”现象。 | 向外扫描的时候不能处理刚请求里面磁道的进程,或者向内扫描时,外面磁道上的进程请求得不到处理 | 广泛应用于大中小型机器和网络的磁盘调度中。 |
循环扫描(CSCAN)算法 | CSCAN规定磁头单向移动,每次扫描都从里向外,或者都从外向里 | 保持了SCAN算法的优点,也解决了SCAN算法的缺点 |
| 将请求的时间由2T减少到T+Smax, T是一次从里向外单向扫描的时间,Smax是将磁头从外向里或者相反直接移动到最里面欲访问的磁道。 |
另外还有些针对更复杂的请求的算法,这里就不一一列举了。
从100号磁道开始 | |
被访问的下一个磁道号 | 移动距离(磁道数) |
53 | 47 |
12 | 41 |
48 | 36 |
90 | 42 |
78 | 42 |
72 | 6 |
190 | 78 |
160 | 30 |
134 | 26 |
平均寻道长度:38.7 |
FCFS调度算法
从100号磁道开始 | |
被访问的下一个磁道号 | 移动距离(磁道数) |
90 | 10 |
78 | 12 |
72 | 6 |
53 | 19 |
48 | 5 |
12 | 36 |
134 | 122 |
160 | 26 |
190 | 30 |
平均寻道长度:29.5 |
SSTF调度算法
从100号磁道开始(向磁道号增加的方向访问) | |
被访问的下一个磁道号 | 移动距离(磁道数) |
134 | 34 |
160 | 26 |
190 | 30 |
90 | 100 |
78 | 12 |
72 | 6 |
53 | 19 |
48 | 5 |
12 | 36 |
平均寻道长度:29.8 |
SCAN调度算法
从100号磁道开始(向磁道号增加的方向访问) | |
被访问的下一个磁道号 | 移动距离(磁道数) |
134 | 34 |
160 | 26 |
190 | 30 |
12 | 178 |
48 | 36 |
53 | 5 |
72 | 19 |
78 | 6 |
90 | 12 |
平均寻道长度:38.4 |
CSCAN算法
这里有两个公式:
移动距离 = |当前磁道号– 下一个磁道号|
平均寻道长度= 移动距离之和/ 某时间段内请求磁道的数目。