1.程序查询方式
①I/O速率 ②缓冲区大小 ③查询一次时间开销
① / ② → ④查询频率;③ * ④ → ⑤查询时间占比
1.scanf函数发出系统调用请求操作系统从键盘等设备读取字符时,是在该进程的时间片内不断while循环轮询,当该进程时间片用完后就会切换进程,即该进程被剥夺处理机的使用权,故不会导致一直占用处理机
2.I/O设备通过USB与主机相连,USB带有I/O接口(I/O设备的软件部分),I/O设备和主机之间发生数据交互时,为了解决两者之间的速度差异,将会把数据先放入I/O接口的缓冲区中
3.不同的I/O接口的缓冲区大小不同(字 / 字节)
4.如果缓冲区的数据不被及时取走,当有新数据不断存入时,旧数据将会被新数据覆盖:I / O设备按照一定的速率将数据写入缓冲区,CPU需要按照一定的频率从缓冲区取出数据,并将其放入主存(数据流向:缓冲区→CPU寄存器→主存),故CPU查询的频率 ≥ I/O设备数据速率
例如:I/O设备数据输入速率为100KB/S,缓冲区大小为4B,则1S内CPU需要查询100/4 = 25次
①I/O设备和I/O接口的传输速率,即I/O设备数据输入速率
②缓冲区的大小(注意单位:字 / 字节)
① / ② = CPU定时查的频率 :若低于频率,则可能发生数据丢失;若高于,则不丢失
5.CPU用于查询的时间占总时间的比例 :
①查一次的时间开销
②一秒钟查询次数
① * ②得到每一秒钟查询的总时间→时间占比
(1)①定时查询I/O方式:即程序轮询
②I/O接口中的缓冲区大小为32位,即4B;I/O设备的数据传输速率为2MB/s
③CPU查询频率 = 2MB/s / 4B = 500 000,1S查询500 000次,需2μs查询一次
④用于设备A输入/输出的时间占比:每次输入 / 输入都要至少执行10条指令,且CPI = 4→每次查询需要10 * 4 = 40个时钟周期;主频为500MHz→时间占比 = 40 * 500 000 / 500 000 000 = 4 %
2.程序中断方式
1.I/O接口的数据缓冲区满,I/O接口给CPU发送I/O中断信号,CPU检测到I/O中断后进行中断处理
①中断响应(中断隐指令) ②中断服务程序
程序中断方式的CPU取数据时间 = ① + ②
2.③I / O 速率 ④缓冲区大小 → ③ / ④ 每隔多久缓冲区满 ⑤→ CPU取数据时间 ① + ② ≤ ⑤
(2)每次中断的时钟周期为400,则① + ②的时间;
40MB/s(B的I/O速率)/ 4B(缓冲区大小)= 10M次中断/s
10M * 400 = 4000M时钟周期,而计算机主频为500MHz < 4000M,即CPU无法满足中断处理次数,将会发生数据覆盖(1)①以32位为传输单位:缓冲区大小为32bit,即4B
②中断服务程序18条指令,中断服务的其他开销相当于2条指令:每次中断处理需要20条指令 + CPI = 5 → 每次中断的时钟周期 = 20 * 5 = 100
③每秒钟需要进行的中断次数 = 0.5MB/s(I/O速率)/ 4B(缓冲区大小)= 125 000次
④占比:125 000 * 100(每秒中断总时钟周期)/ 500 000 000(主频)= 2.5 %
3.DMA方式
1.DMA接口和主机之间的数据传输以块为单位,但DMA接口与I/O设备的传输仍以字为单位
2.①预处理:CPU执行一连串指令告诉DMA接口接下来需要读/写几个字,读/写主存的位置(块)
②数据传输:DMA接口的缓冲区被充满后以字为单位放入主存块中,主存块满后发出中断信号
③后处理:CPU处理DMA中断
3.DMA方式本质上是程序中断方式的扩展:DMA每个块发出中断,程序中断方式每个字发出中断
4.程序查询方式和程序中断方式可能发生数据丢失,但是DMA不可能发生数据丢失
(3) ①每次DMA传送的数据块大小为1000B,即用于DMA传送的主存块大小为1000B
②每秒DMA中断的次数 = 40MB/s / 1000B = 40 000次
③每次DMA中断的时间开销 = 500个时钟周期
④占比 = 40 000 * 5000 / 500MHz = 4%
(2)①每秒DMA中断次数 = 5MB/s / 5 000B = 1 000次
②每次DMA中断的时间开销 = 500次
③占比 = 500 * 1000 / 500M = 0.1%
(1)①异步串行通信需要开始位:1 + 7 + 1 + 1 = 10位
②1 / 0.5ms = 2000个字符
(2)①I/O设备分为两种:1.按自己节奏运行,不听CPU命令的设备 2.听CPU指挥何时运行何时停止的设备;其中第15条指令启动D工作,则说明设备D是后者
②中断响应需要10个时钟周期,设备D在中断服务程序的第15条指令执行后开始工作,即设备D的工作间隔为10 + 15 * 4 = 70个时钟周期
③CPU的时钟周期为 1s / 50MHz = 20ns;字符D每次工作所需的时钟周期为0.5ms / 20ns = 25000
④设备D传输一个字符所需的时钟周期数 = 25 000 + 70 = 25 070→1000个字符所需的时钟周期 = 25 070 * 1 000 = 25 070 000
⑤设备D每次处理完给CPU发出中断请求,CPU处理一次中断请求所需时钟周期数 = 中断响应 + 中断服务程序10 + 20 * 4 = 90;1000个字符所需时钟周期数 = 1 000 * 90 = 90 000
⑥中断响应完成关中断、保护断点、中断服务程序寻址