文章目录
第8章 输入输出系统
8.6 通道处理机
8.6.1 通道的作用和功能
程序控制、中断和DMA方式管理外围设备会引起两个问题:
- 所有外设的输入/输出工作均由CPU承担,CPU的计算工作经常被打断而去处理输入/输出的事务,不能充分发挥CPU的计算能力。
- 大型计算机系统的外设虽然很多,但同时工作的机会不是很多。
解决上述问题的方法:采用通道处理机
通道处理机(简称通道)
- 通道处理机能够负担外围设备的大部分I/O工作
- 专门负责整个计算机系统的输入/输出工作。通道处理机只能执行有限的一组输入/输出指令。
大型计算机系统可以有多个通道
,每个通道可以连接多个设备控制器
,而每个控制器又可以管理一台或多台外设
。这样就形成了一个典型的由CPU、通道、设备控制器、外设构成的4级层次结构
的输入输出系统。
通道的8个功能:
-
接收CPU发来的I/O指令,并根据指令要求选择指定的外设与通道相连接。
-
执行通道程序
从主存中逐条取出通道指令,对通道指令进行译码,并根据需要向被选中的设备控制器发出各种操作命令。
-
给出外设中要进行读/写操作的数据所在的地址
如磁盘存储器的柱面号、磁头号、扇区号等。
-
给出主存缓冲区的首地址
该缓冲区存放从外设输入的数据或者将要输出到外设中去的数据。
-
控制外设与主存缓冲区之间的数据传送的长度
对传送的数据个数进行计数,并判断数据传送是否结束。
-
指定传送工作结束时要进行的操作
例如:将外设的中断请求及通道的中断请求送往CPU等。
-
检查外设的工作状态是否正常,并将该状态信息送往主存指定单元保存。
-
在数据传输过程中完成必要的格式变换
例如:把字拆分为字节,或者把字节装配成字等。
通道的主要硬件
寄存器
- 数据缓冲寄存器
- 主存地址计数器
- 传输字节数计数器
- 通道命令字寄存器
- 通道状态字寄存器
控制逻辑
- 分时控制
- 地址分配
- 数据传送、装配和拆分等
通道对外设的控制通过输入/输出接口和设备控制器进行
- 通道与设备控制器之间一般采用标准的输入/输出接口来连接。
- 通道通过标准接口把操作命令送到设备控制器,设备控制器解释并执行这些通道命令,完成命令指定的操作。
设备控制器能够记录外设的状态,并把状态信息送往通道和CPU。
8.6.2 通道的工作过程
通道完成一次数据输入/输出的工作过程主要分为三步:
-
在用户程序中使用
访管指令
进入管理程序,由管理程序
生成一个通道程序
,并启动通道
。- 用户在目标程序中设置一条广义指令,通过调用操作系统的管理程序来实现。
- 管理程序根据广义指令提供的参数来编制通道程序。
启动输入/输出设备指令
是一条主要的输入/输出指令,属于特权指令。
-
通道处理机执行通道程序,完成指定的数据输入/输出工作。
- 通道处理机执行通道程序与CPU执行用户程序是并行的。
-
通道程序结束后向CPU发
中断
请求。
CPU执行程序和通道执行通道程序的时间关系
8.6.3 通道的种类
根据信息传送方式的不同,将通道分为三种类型
字节多路通道
选择通道
数组多路通道
三种类型的通道与CPU、设备控制器和外设的连接关系
字节多路通道
- 为多台低速或中速的外设服务。
- 以
字节交叉
的方式分时轮流
地为它们服务。 - 字节多路通道可以包含多个子通道,每个子通道连接一台设备控制器。
选择通道
-
为多台高速外围设备服务。
-
在一段时间内只为一台高速外设
独占使用
。 -
选择通道的硬件
-
5个寄存器
数据缓冲寄存器、设备地址寄存器、主存地址计数器、交换字节数计数器、设备状态/控制寄存器
-
格式变换部件
用于在主存和设备之间进行字与字节的拆分和装配
-
通道控制部件
-
数组多路通道
- 适用于高速设备。
- 每次选择一个高速设备后传送一个数据块,轮流为多台外围设备服务。
数组多路通道之所以能够并行地为多台高速设备服务,是因为:
- 虽然其所连设备的传输速率很高,但寻址等辅助操作时间很长。
实例:以从磁盘存储器读出一个文件的过程为例:
- 数据读出过程可以分为3个步骤:磁头定位,找扇区和读出数据。
- 磁盘的寻址时间 :磁头定位和找扇区的时间加起来
- 磁盘存储器的寻址时间要比数据传输时间长两个数量级以上。
- 选择通道不适合,数组通道适合。
8.6.4 通道流量分析
通道流量
- 一个通道在数据传送期间,单位时间内能够传送的数据量。所用单位一般为
B/s
。 - 又称为通道吞吐率、通道数据传输率等。
通道最大流量
- 一个通道在满负荷工作状态下的流量 。
为了分析的方便,下面给出一些参数的定义:
-
T
S
T_{S}
TS:
设备选择时间
。从通道响应设备发出的数据传送请求开始,到通道实际为这台设备传送数据所需要的时间。 -
T
D
T_{D}
TD:
传送一个字节
所用的时间。 -
p
p
p:在一个通道上连接的
设备台数
,且这些设备同时都在工作。 -
n
n
n:
每台设备传送的字节数
,这里假设每台设备传送的字节数都相同。 -
k
k
k:
数组多路通道
传输的一个数据块中包含的字节数
。在一般情况下,k<n
。对于磁盘、磁带等磁表面存储器,通常k=512。 - T T T:通道完成全部数据传送工作所需要的时间。
8.6.4.1 字节多路通道流量分析
字节多路通道数据传送过程
- 通道每连接一台个外设,只传送一个字节,然后又与另一台设备连接,并传送一个字节。
p
台设备每台传送n
个数据总共所需的时间为
T B Y T E = ( T S + T D ) × p × n T_{BYTE} = (T_{S} + T_{D}) \times p \times n TBYTE=(TS+TD)×p×n
⚠️在这里每个字节传输都需要重新选择设备
最大流量
f
M
A
X
−
B
Y
T
E
=
p
×
n
(
T
S
+
T
D
)
×
p
×
n
=
1
T
S
+
T
D
f_{MAX-BYTE} = \frac{p \times n}{(T_{S} + T_{D}) \times p \times n} = \frac{1}{T_{S} + T_{D}}
fMAX−BYTE=(TS+TD)×p×np×n=TS+TD1
实际流量
- 连接在这个通道上的所有设备的数据传输率之和。
f B Y T E = ∑ i = 1 p f i f_{BYTE} = \sum_{i=1}^{p} f_{i} fBYTE=i=1∑pfi
- 其中, f i f_{i} fi:第 i i i台设备的实际数据传输率
8.6.4.2 选择通道流量分析
在一段时间内只能单独为一台高速外设服务,当这台设备的数据传送工作全部完成后,通道才能为另一台设备服务。
选择通道数据传送过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-moN27Kmy-1619877669465)(/Users/luomingkai/Desktop/选择通道数据传送过程.png)]
其中:
D
i
D_{i}
Di表示通道正在为第
i
i
i台设备服务
T
D
1
=
T
D
2
=
⋯
=
T
D
n
=
T
D
T_{D1} = T_{D2} = \cdots = T_{Dn} = T_{D}
TD1=TD2=⋯=TDn=TD
p
台设备每台传送n
个数据总共所需的时间
T S E L E C T = ( p T S + p n T D ) = ( T s n + T D ) p n T_{SELECT} = (pT_{S} + pnT_{D}) = (\frac{T_{s}}{n} + T_{D})pn TSELECT=(pTS+pnTD)=(nTs+TD)pn
⚠️每台设备传送完数据需要进行p次选择,即 p T S pT_{S} pTS
最大流量
T
M
A
X
−
S
E
L
E
C
T
=
p
n
(
T
s
n
+
T
D
)
p
n
=
1
T
s
n
+
T
D
T_{MAX-SELECT} = \frac{pn}{(\frac{T_{s}}{n} + T_{D})pn} = \frac{1}{\frac{T_{s}}{n} + T_{D}}
TMAX−SELECT=(nTs+TD)pnpn=nTs+TD1
8.6.4.3 数组多路通道流量分析
数组多路通道数据传送过程
p
台设备每台传送n
个数据总共所需的时间
T B L O C K = ( T S k + T D ) × p × n T_{BLOCK} = (\frac{T_{S}}{k} + T_{D}) \times p \times n TBLOCK=(kTS+TD)×p×n
最大流量
f
M
A
X
−
B
L
O
C
K
=
p
n
(
T
S
k
+
T
D
)
p
n
=
1
T
S
k
+
T
D
f_{MAX-BLOCK} = \frac{pn}{(\frac{T_{S}}{k} + T_{D})pn} = \frac{1}{\frac{T_{S}}{k} + T_{D}}
fMAX−BLOCK=(kTS+TD)pnpn=kTS+TD1
8.6.4.4 说明
- 选择通道和数组多路通道的实际流量就是连接在这个通道上的所有设备中数据流量最大的那一个
{ f B L O C K ≤ max i = 1 p f i f S E L E C T ≤ max i = 1 p f i \left\{\begin{array}{c} f_{BLOCK} \leq \max_{i=1}^{p} f_{i} \\ f_{SELECT} \leq \max_{i=1}^{p} f_{i} \end{array}\right. {fBLOCK≤maxi=1pfifSELECT≤maxi=1pfi
- 各种通道的实际流量应该不大于通道的最大流量
{ f B Y T E ≤ f M A X − B Y T E f B L O C K ≤ f M A X − B L O C K f S E L E C T ≤ f M A X − S E L E C T \left\{\begin{array}{lc} f_{BYTE} \leq f_{MAX-BYTE} \\ f_{BLOCK} \leq f_{MAX-BLOCK} \\ f_{SELECT} \leq f_{MAX-SELECT} \end{array}\right. ⎩⎨⎧fBYTE≤fMAX−BYTEfBLOCK≤fMAX−BLOCKfSELECT≤fMAX−SELECT
- 两边的差值越小,通道的利用率就越高。
- 当两边相等时,通道处于满负荷工作状态。
8.7 I/O与操作系统
-
操作系统的作用之一是在多进程之间进行进程保护,这种保护包括存储器访问和I/O操作两个方面。
-
I/O操作主要是在外设和存储器之间进行,所以操作系统必须保证这些I/O操作的安全性。
8.7.1 DMA和虚拟存储器
考虑的问题:DMA是使用虚拟地址还是物理地址?
- 使用物理地址进行
DMA
传输,存在以下两个问题:- 对于超过一页的数据缓冲区,由于缓冲区使用的页面在物理存储器中不一定是连续的,所以传输可能会发生问题。
- 如果
DMA
正在存储器和缓冲区之间传输数据时,操作系统从存储器中移出(或重定位)一些页面,那么,DMA
将会在存储器中错误的物理页面上进行数据传输。
解决问题的方法
- 使操作系统在I/O的传输过程中确保DMA设备所访问的页面都位于物理存储器中,这些页面被称为是钉在了主存中。
“虚拟DMA”技术
- 允许DMA设备直接使用虚拟地址,并在DMA期间由硬件将虚拟地址转换为物理地址。
- 在采用虚拟DMA的情况下,如果进程在内存中被移动,操作系统应该能够及时地修改相应的DMA地址表。
虚拟DMA的I/O连接
8.7.2 I/O和Cache数据一致性
Cache会使一个数据出现两个副本:
- 一个在Cache中,另一个在主存中。
I/O设备可以修改存储器中的内容
- 把I/O连接到存储器上,会出现以下情况:
- CPU修改了Cache的内容后,由于存储器的内容跟不上Cache内容的变化,I/O系统进行输出操作时所看到的数据是旧值。(写直达Cache没有这样的问题)
- I/O系统进行输入操作后,存储器的内容发生了变化,但CPU在Cache中所看到的内容依然是旧值。
举例:假设Cache采用写回法,并且A’是A的副本,B’是B的副本。
- 把I/O直接连接到Cache上
-
不会产生由I/O导致的
数据不一致
的问题。所有I/O设备和CPU都能在Cache中看到最新的数据。
-
I/O会跟CPU竞争访问Cache,在进行I/O时,会造成
CPU的停顿
。 -
I/O还可能会破坏Cache中CPU访问的内容,因为I/O操作可能导致一些新数据被加入Cache,而这些新数据可能在近期内并不会被CPU访问。
-
解决内容一致性问题的方法
- 不管Cache是采用写直达法还是写回法
软件的方法
- 设法保证
I/O缓冲器
中的所有各块都不在Cache中。 - 具体做法有两种
- 把I/O缓冲器的页面设置为不可进入Cache的,在进行输入操作时,操作系统总是把输入的数据放到该页面上。
- 在进行输入操作之前,操作系统先把Cache中与I/O缓冲器相关的数据“赶出”Cache,即把相应的数据块设置为
“无效”状态
。
硬件的方法
- 在进行输入操作时,检查相应的
I/O地址
(I/O缓冲器中的单元)是否在Cache中(即是否有数据副本)。 - 如果发现I/O地址在Cache中有匹配的项,就把相应的Cache块设置为
“无效”
。