📝 408高频考点:
① "DMA方式和中断方式的主要区别?" → 中断方式:每个字节都中断CPU;DMA方式:每块数据只中断一次
② "DMA传送过程中,CPU还能执行程序吗?" → 能(DMA使用周期窃取,CPU在DMA不占用总线时仍能执行)
③ "DMA控制器和I/O控制器的区别?" → I/O控制器负责设备控制;DMA控制器负责数据传送(通常DMA是I/O控制器的子模块)
🔗 设备分配数据结构(UNIX/Linux方式)
设备→控制器→通道 的链式组织结构,实现设备独立性
📖 设备分配需要考虑的问题:
① 设备独立性(设备无关性):用户程序不直接指定物理设备名,而是使用逻辑设备名
② 避免死锁:多个进程申请设备时,需要按一定顺序分配(类似银行家算法)
③ 设备利用率:尽量让设备忙起来(但需要避免进程饥饿)
⚡ UNIX的设备分配数据结构(408经典考点):
▲ 设备分配数据结构链:SDT → DCT → COCT → CHCT
SDT(系统设备表)
整个系统一张,记录所有设备的信息。
内容:设备类型、设备标识符、设备状态(忙/闲)、指向DCT的指针
DCT(设备控制表)
每个设备一张,记录该设备的详细信息。
内容:设备类型、设备标识符、设备状态、等待队列头指针、指向COCT的指针
COCT(控制器控制块)
每个控制器一张,记录该控制器的信息。
内容:控制器标识符、控制器状态、等待队列、指向CHCT的指针
CHCT(通道控制块)
每个通道一张,记录该通道的信息。
内容:通道标识符、通道状态、等待队列
📝 408综合题考点:
① "设备分配时,按什么顺序查找数据结构?" → SDT → DCT → COCT → CHCT(先找设备,再找其控制器,再找其通道)
② "为什么需要这么多层的数据结构?" → 实现设备独立性、支持通道(大型机I/O处理器)
③ "设备分配算法?" → 通常"first-fit"(第一个空闲设备),但要考虑安全性(避免死锁)
🏊 缓冲池(Buffer Pool)
多个缓冲区组织成池,由池管理器统一管理 —— 提高I/O和CPU的并行度
📖 为什么需要缓冲池?
单个缓冲区(如单缓冲区)在I/O和CPU之间只能存放一个单位的数据。而缓冲池有多个缓冲区,可以:
① 并行I/O:I/O设备可以连续写入多个缓冲区,不必等CPU读完
② 并行计算:CPU可以连续读多个缓冲区,不必等I/O写完
③ 支持多种用途:输入缓冲、输出缓冲、收发缓冲可以共享池
▲ 缓冲池工作原理(点击播放动画)
缓冲池的三种工作状态(408考点)
① 空缓冲:还没有被使用的缓冲区(初始状态) ② 输入缓冲:I/O设备正在往里写数据(装满后变成"装满输入") ③ 输出缓冲:CPU正在往里写数据(装满后变成"装满输出") ④ 装满输入:I/O设备已写完,CPU可以开始读 ⑤ 装满输出:CPU已写完,I/O设备可以开始读
⚡ 关键:缓冲区在这种状态之间动态转换,由缓冲池管理器负责调度。
📝 408考点:"缓冲技术和Cache的区别?" → 缓冲解决速度不匹配问题(I/O vs CPU);Cache解决访问时间不匹配问题(CPU vs 内存)。缓冲通常是先进先出,Cache通常是最近最少使用。