跳到正文

5.1_3_IO控制方式

32 分钟

新困难:DMA 搬数据不占 CPU 指令时间,但块级设置和中断仍占用 CPU

设备持续产生100 MiB/s,DMA 每块4 KiB。CPU 每块设置描述符耗2 μs,完成中断耗3 μs;DMA 数据阶段由控制器直接占用内存总线。求每秒块数、CPU 管理开销占比,并比较若改为16 KiB块。

def dma_cpu_fraction(rate_bytes_s,block_bytes,setup_us,irq_us):
    blocks=rate_bytes_s/block_bytes
    cpu_seconds=blocks*(setup_us+irq_us)*1e-6
    return blocks,cpu_seconds,cpu_seconds

rate=100*1024*1024
bps,cpu_time,fraction=dma_cpu_fraction(rate,4*1024,2,3)
assert bps==25600
assert abs(cpu_time-0.128)<1e-12 and abs(fraction-0.128)<1e-12
assert dma_cpu_fraction(rate,16*1024,2,3)[0]==6400
assert abs(dma_cpu_fraction(rate,16*1024,2,3)[2]-0.032)<1e-12

陪算:100 MiB/s ÷4 KiB=25,600块/s。每块平均到达间隔39.0625 μs,其中CPU处理5 μs,故每秒占用 25,600×5μs=0.128s,CPU 开销12.8%,剩余87.2%可运行其他代码。改16 KiB后只有6,400块/s,开销3.2%;数据率没变,内存总线仍需承受100 MiB/s,只是块级固定开销减少。

依据:DMA 建立后,逐字搬运由DMA控制器发起,不执行CPU搬运指令;CPU只在设置与完成处理期间被占用。每秒 CPU 时间等于“块率×每块CPU服务时间”,其不变量是所有输入字节恰好归入某个块,不能同时再按每字中断重复计费。占用比小于1才表示单核平均服务能力跟得上输入速率。

计算时间、空间 O(1)。错误反馈:MiB用2^20、KiB用2^10;12.8%不是DMA总线占用率;中断不是零成本;块增大降低中断频率但可能增加单块等待时延与缓冲需求;若CPU服务重叠或多核分担需另建模型。

迁移答案:若采用每字节程序查询且每字节需20 ns CPU,100 MiB/s将需约2.097 s CPU/s,单核无法跟上;若完成中断合并为每4块一次,需把中断率除4,但设置次数是否合并要按题设。

桥接:DMA完成后以中断唤醒进程;下一课把CPU时间片与I/O阻塞/唤醒放到同一事件线上,计算真实周转和利用率。

小纸条

学完《5.1_3_IO控制方式》后,请独立复现本课的核心状态变化或计算过程。

登录 后可看答案

Practice

本课练习

0

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

本课练习正在补齐,暂不应标记为完成。