1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-06-16 06:56:54 +08:00

更新输入输出

This commit is contained in:
Didnelpsun
2021-09-11 23:52:59 +08:00
parent 8af646e48f
commit a882ae2614
2 changed files with 162 additions and 66 deletions

View File

@@ -134,7 +134,7 @@ $D.$通用寄存器和$I/O$端口之间
每秒需要对鼠标进行$30$次查询,所以一秒内查询鼠标的时间为$30\times2000=60000ns$。
所以查询鼠标所花费的时间比率为$60000ns÷1s=0.006\%$。
所以查询鼠标所花费的时间比率为$60000ns\div1s=0.006\%$。
从而对鼠标的查询基本上不影响$CPU$性能。
@@ -168,6 +168,66 @@ $CPU$的时钟频率为$50MHz$,即每秒需要$50\times10^6$个时钟周期。
### 程序中断方式
#### 中断类型
**例题** 当有中断源发出请求时,$CPU$可执行相应的中断服务程序,可以提出中断的有()。
.外部事件
Ⅱ.$Cache$
Ⅲ.浮点数运算下溢
Ⅳ.浮点数运算上溢
$A.$Ⅰ、Ⅱ
$B.$Ⅱ、Ⅱ、Ⅳ
$C.$Ⅰ、Ⅳ
$D.$Ⅰ、Ⅲ、Ⅳ
解:$C$。外部事件是可以提出中断请求的,如通过敲击键盘来终止现在正在运行的程序就可视为一个中断,因此Ⅰ正确。$Cache$属于存储设备,不能提出中断请求,因此Ⅱ错误。浮点数运算下溢,可以当作机器零处理,不需要中断来处理,而浮点数运算上溢时,必须中断来做相应的处理,因此Ⅲ错误、Ⅳ正确。
**例题** 主存故障引起的中断是()。
$A.I/O$中断
$B.$程序性中断
$C.$机器校验中断
$D.$外中断
解:$C$。主存故障引起的中断是机器校验中断,属于内中断,而外中断一般指主存和$CPU$外的中断,如外设引起的中断等。
**例题** 在配有通道的计算机系统中,用户程序需要输入/输出时,引起的中断是()。
$A.$访管中断
$B.I/O$中断
$C.$程序性中断
$D.$外中断
解:$A$。用户程序需要输入/输出时,需要调用操作系统提供的接口(请求操作系统服务),此时会引起访管中断,系统由用户态转为核心态。$I/O$中断不存在这种中断。
#### 中断优先级
**例题** 中断响应由高到低的优先次序宜用()。
$A.$访管→程序性→机器故障
$B.$访管→程序性→重新启动
$C.$外部→访管→程序性
$D.$程序性→$I/O$→访管
解:$B$。硬件故障中断属于最高级,其次是软件中断,所以机器故障最高。重新启动应该等待其他任务全部完成,所以优先级最低。访管指令是软件指令中最紧急的,所以软件中断中优先级最高。程序性中断要高于重新启动。所以次序为机器故障→访管→程序性→重新启动。
#### 多重中断技术
**例题** 设某机有$4$个中断源$A$、$B$、$C$、$D$,其硬件排队优先次序为$A>B>C>D$,现要求将中断处理次序改为$D>A>C>B$。
@@ -195,3 +255,79 @@ A|35
C|60
解:首先$B$在时刻$5$进入,开始执行,执行到时刻$10$时$D$进入,而$D$的优先级高于$B$,所以时刻$10$开始执行$D$,时刻$30$此时$D$结束,开始重新执行$B$,直到时刻$35A$进入,此时$B$已经执行了$10$个时间单位,$A$优先级高于$B$,所以$A$开始执行,时刻$55$时$A$完成,$B$开始执行,直到时刻$60$时$C$进入,而$C$优先级大于$B$,所以$C$开始执行,$B$此时已经执行了$15$个单位,$80$时$C$结束,$B$开始,时刻$85$时$B$完成,整个结束。
#### 程序中断方式实现
**例题** 假定$CPU$主频为$50MHz$$CPI$为$4$。设备$D$采用异步串行通信方式向主机传送$7$位$ASCII$字符,通信规程中有$1$位奇校验位和$1$位停止位,从$D$接收启动命令到字符送入$I/O$端口需要$0.5ms$。请回答下列问题,要求说明理由。
1每传送一个字符在异步串行通信线上共需传输多少位在设备$D$持续工作过程中,每秒钟最多可向$I/O$端口送入多少个字符?
解:需要注意的是,在总线那一章说过,数据传输时会隐藏一位起始位,所以一共有$1+7+1+1=10$位数据。
每$0.5ms$送入一个字符,所以每秒送入$1s\div0.5ms=2000$个字符。
2设备$D$采用中断方式输入输出,$I/O$端口每收到一个字符申请一次中断,中断响应需$10$个时钟周期,中断服务程序共有$20$条指令,其中第$15$条指令启动$D$工作。若$CPU$需从$D$读取$1000$个字符,则完成这一任务所需时间大约是多少个时钟周期?$CPU$用于完成这一任务的时间大约是多少个时钟周期?在中断响应阶段$CPU$进行了哪些操作?
解:因为$I/O$端口每收到一个字符申请一次中断,所以外设$D$每一次工作$0.5ms$。然后中断响应$10$个时钟周期,启动$D$需要$15$条指令,$5$条恢复现场指令。
因为主频$50MHz$,所以时钟周期为$20ns$,工作时间为$0.5ms\div20ns=25000$个时钟周期。
然后中断响应需要$10$个时钟周期,然后启动$D$需要$15$条指令,根据$CPI$是$4$,所以每一条指令需要$4$个时钟周期,从而启动$D$需要$15\times4=60$个时钟周期。由于最后五条指令是用来恢复现场的,所以不算在完成读取字符任务所需的时间内。
从而传输一个字符需要时钟周期$25000+10+60=25070$个。所以传输$1000$个字符需要$25070000$个时钟周期。
而$CPU$完成这个任务的时间就需要加上恢复现场的$5$个时钟周期,且是关于$CPU$所需要的时间,所以同时要去掉外设工作的$0.5ms=25000$个时钟周期。
所以对于一个字符,一共就是请求的$10$个时钟周期,加上$20$条指令所需要$20\times4=80$个时钟周期,从而$CPU$完成任务的时间为$1000\times(10+80)=90000$个时钟周期。
$CPU$进行的操作为:关中断、保存断点、引出中断服务程序。
### DMA方式
**例题** 某计算机的$CPU$主频为$500MHz$$CPI$为$5$(即执行每条指令平均需$5$个时钟周期)。假定某外设的数据传输率为$0.5MB/s$,采用中断方式与主机进行数据传送,以$32$位为传输单位,对应的中断服务程序包含$18$条指令,中断服务的其他开销相当于$2$条指令的执行时间。请回答下列问题,要求给出计算过程。
1在中断方式下$CPU$用于该外设$I/O$的时间占整个$CPU$时间的百分比是多少?
2当该外设的数据传输率达到$5MB/s$时,改用$DMA$方式传送数据。假定每次$DMA$传送块大小为$5000B$,且$DMA$预处理和后处理的总开销为$500$个时钟周期,则$CPU$用于该外设$I/O$的时间占整个$CPU$时间的百分比是多少?(假设$DMA$与$CPU$之间没有访存冲突)
解:
1$CPU$用于该外设$I/O$的时间包括$CPU$响应中断时间与$CPU$处理中断服务程序时间。
所以每传送一次数据,一共需要$18+2=20$条指令,占用$CPU$时间为$20\times5=100$个时钟周期。
外设准备一次$32$位数据的时间为$32bit\div0.5MB/s=8\mu s$。
从而外设每一秒可以准备$1s\div8\mu s=125000$个。从而一秒就需要$125000$次中断。
则$1$秒内$CPU$用于处理中断的时钟周期个数为$125000\times100=12.5M$个。
又主频为$500MHz$,所以$CPU$用于该外设$I/O$的时间占整个$CPU$时间的百分比$=12.5M\div500M=2.5\%$。
2当外设数据传输率提高到$5MB/s$时改用$DMA$方式传送,每次$DMA$传送一个数据块,大小为$5000B$,则$1s$内需产生的$DMA$次数为$5MB\div5000B=1000$次。
$CPU$用于$DMA$处理的总开销为$1000\times500=0.5M$个时钟周期。
$CPU$用于外设$I/O$的时间占整个$CPU$时间的百分比为$0.5M\div500M=0.1\%$。
### 程序中断与DMA
**例题** 下列说法中,错误的是()。
.程序中断过程是由硬件和中断服务程序共同完成的
Ⅱ.在每条指令的执行过程中,每个总线周期要检查一次有无中断请求
Ⅲ.检测有无$DMA$请求,一般安排在一条指令执行过程的末尾
Ⅳ.中断服务程序的最后指令是无条件转移指令
$A.$Ⅲ、Ⅳ
$B.$Ⅱ、Ⅲ、Ⅳ
$C.$Ⅱ、Ⅳ
$D.$Ⅰ、Ⅱ、Ⅲ、Ⅳ
解:$B$。程序中断过程是由硬件执行的中断隐指令和中断服务程序共同完成的,因此Ⅰ正确。每条指令周期结束后,$CPU$会统一扫描各个中断源,然后进行判优来决定响应哪个中断源,而不是在每条指令的执行过程中这样做,因此Ⅱ错误。$CPU$会在每个存储周期结束后检查是否有$DMA$请求,而不是在指令执行过程的末尾这样做,因此Ⅲ错误。中断服务程序的最后指令通常是中断返回指令,该指令在中断恢复后,即$CPU$中的所有寄存器都已恢复到了中断前的状态因此该指令不需要进行无条件转移因此IⅣ错误。

File diff suppressed because one or more lines are too long