【操作系统】六、IO与设备控制

张开发
2026/4/29 10:33:17 15 分钟阅读

分享文章

【操作系统】六、IO与设备控制
六、IO与设备控制1、输入输出(IO)管理2、IO 设备的基本概念和分类2.1、什么是 I/O 设备“I/O” 就是 “输入 / 输出”Input/OutputI/O 设备就是可以将数据输入到计算机或者可以接收计算机输出数据的外部设备属于计算机中的硬件部件。鼠标、键盘 —— 典型的输入型设备显示器 —— 输出型设备移动硬盘 —— 即可输入、又可输出的设备UNIX 系统将外部设备抽象为一种特殊的文件用户可以使用与文件操作相同的方式对外部设备进行操作。2.2、I/O 设备的分类2.2.1、按使用特性分类人机交互类外设鼠标、硬盘、打印机等 —— 用于人机交互存储设备移动硬盘、光盘等 —— 用于数据存储网络通信设备调制解调器等 —— 用于网络通信2.2.2、按传输速率分类低速设备鼠标、键盘等 —— 低速速率为每秒几个到几百字节中速设备如激光打印机等 —— 传输速率为每秒数千至上万个字节高速设备如磁盘等 —— 传输速率为每秒数千字节至千兆字节的设备2.2.3、按信息交换的单位分类块设备如磁盘等 —— 数据传输的基本单位是 “块”字符设备鼠标、键盘等 —— 数据传输的基本单位是” 字符 “。3、IO 控制器3.1、I/O 设备的电子部件3.1.1、I/O 控制器CPU 无法直接控制 I/O 设备的机械部件因此 I/O 设备还要有一个电子部件作为 CPU 和 I/O 设备机械部件之间的 “中介”用于实现 CPU 对设备的控制。这个电子部件就是I/O 控制器又称设备控制器。CPU 可控制 I/O 控制器又由 I/O 控制器来控制设备的机械部件。主要功能{接受和识别CPU发出的命令(要有控制寄存器)向CPU报告设备的状态(要有状态寄存器)数据交换(要有数据寄存器暂存输入输出的数据)地址识别(由I/O逻辑实现)主要功能\left\{ \begin{aligned} 接受和识别CPU发出的命令(要有控制寄存器)\\ 向CPU报告设备的状态(要有状态寄存器)\\ 数据交换(要有数据寄存器暂存输入输出的数据)\\ 地址识别(由I/O逻辑实现) \end{aligned} \right.主要功能⎩⎨⎧​接受和识别CPU发出的命令(要有控制寄存器)向CPU报告设备的状态(要有状态寄存器)数据交换(要有数据寄存器暂存输入输出的数据)地址识别(由I/O逻辑实现)​如 CPU 发来的 read/write 命令I/O 控制器中会有相应的控制寄存器来存放命令和参数I/O 控制器中会有相应的状态寄存器用于记录 I/O 设备的当前状态。1 表示空闲0 表示忙碌I/O 控制器中会设置相应的数据寄存器。输出时数据寄存器用于暂存 CPU 发来的数据之后再由控制器发送设备。输入时数据寄存器用于暂存设备发来的数据之后 CPU 从数据寄存器中取走数据。类似于内存的地址为了区分设备控制器中的各个寄存器也需要给各个寄存器设置一个特定的 “地址”。I/O 控制器通过 CPU 提供的 “地址” 来判断 CPU 要读 / 写的是哪个寄存器3.1.2、I/O 控制器的组成值得注意的小细节一个 I/O 控制器可能会对应多个设备数据寄存器、控制寄存器、状态寄存器可能有多个如每个控制 / 状态寄存器对应一个具体的设备且这些寄存器都要有相应的地址才能方便 CPU 操作。有的计算机会让这些寄存器占用内存地址的一部分称为内存映像 I/O另一些计算机采用 I/O 专用地址即寄存器独立编址。3.1.3、内存映像 I/O v.s. 寄存器独立编址4、IO 控制方式4.1、程序直接控制方式Key word轮询CPU 向控制器发出指令。于是设备启动并且状态寄存器设为 1未就绪轮询检查控制器的状态其实就是在不断地执行程序的循环若状态位一直是 1说明设备还没准备好要输入的数据于是 CPU 会不断地轮询输入设备准备好数据后将数据传给状态器并报告自身状态控制器将输入的数据放到数据寄存器中并将状态改为 0已就绪CPU 发现设备已就绪即可将数据寄存器中的内容读入 CPU 的寄存器中再把 CPU 寄存器中的内容放入内存完成一次读 / 写操作的流程见上图Key word轮询CPU 干预的频率很频繁I/O 操作开始之前。完成之后需要 CPU 介入并且在等待 I/O 完成的过程中 CPU 需要不断地轮询检查。数据传送的单位每次读 / 写一个字数据的流向指的是 CPU 的寄存器读操作数据输入I/O 设备 -CPU- 内容写操作数据输出内存 -CPU-I/O 设备每个字的读 / 写都需要 CPU 的帮助主要缺点和主要优点优点实现简单。在读 / 写指令之后加上实现循环检查的一系列指令即可因此才称为 “程序直接控制方式”缺点CPU 和 I/O 设备只能串行工作CPU 需要一直轮询检查长期处于 “忙等” 状态CPU 利用率极低。4.2、中断驱动方式引入中断机制。由于 I/O 设备速度很慢因此在 CPU 发出读 / 写命令后可将等待 I/O 的进程阻塞先切换到别的进程执行。当 I/O 完成后控制器会向 CPU 发出一个中断信号CPU** 检测到中断信号后** 会保存当前进程的运行环境信息转去执行中断处理程序处理该中断。处理终端的过程中CPU 从 I/O 控制器读一个字的数据传送到 CPU 寄存器再写入主存。接着CPU 恢复等待 I/O 的进程或其他进程的运行环境然后继续执行。注意CPU 会在每个指令周期的末尾检查中断中断处理过程中需要保存、恢复进程的运行环境这个过程是需要一定时间开销的。可见如果中断发生的频率太高也会降低系统性能。完成一次读 / 写操作的流程见上图Key word中断CPU 干预的频率每次 I/O 操作开始之前、完成之后都需要 CPU 介入。等待 I/O 完成的过程中 CPU 可以切换到别的进程执行。数据传送的单位每次读 / 写一个字数据的流向读操作数据输入I/O 设备 -CPU- 内存写操作数据输出内存 -CPU-I/O 设备主要缺点和主要优点优点与 “程序直接控制方式” 相比在 “中断驱动方式” 中I/O 控制器会通过中断信号主动报告 I/O 已完成CPU 不再需要不停地轮询。CPU 和 I/O 设备可并行工作CPU 利用率得到明显提升。缺点每个字在 I/O 设备与内存之间的传输都需要经过 CPU。而频繁的中断处理会消耗较多的 CPU 时间。4.3、DMA 控制器 (IO 控制器的一种)与 “中断驱动方式” 相比DMA 方式Direct Memory Access直接存储器存取。主要用于块设备的 I/O 控制有这样几个改进数据的传送单位是 “块”。不再是一个字、一个字的传送数据的流向是从设备直接存入内存或者从内存直接到设备。不再需要 CPU 作为 “快递小哥”。仅在传送一个或多个数据块的开始和结束时才需要 CPU 干预。CPU 指明此次要进行的操作如读操作并说明要读入多少数据、数据要存放在内存的什么位置、数据在外部设备上的地址如在磁盘上的地址控制器会根据 CPU 提出的要求完成数据的读写工作整块数据的传输完成后才向 CPU 发出中断信号DR (Data Register数据寄存器)暂存从设备到内存或从内存到设备的数据。MAR (Memory Address Register内存地址寄存器)在输入时MAR 表示数据应放到内存中的什么位置输出时 MAR 表示要输出的数据放在内存中的什么位置。DC (Data Counter数据计数器)表示剩余要读 / 写的字节数。CR (Command Register命令 / 状态寄存器)用于存放 CPU 发来的 I/O 命令或设备的状态信息。完成一次读 / 写操作的流程见上图CPU 干预的频率仅在传送一个或多个数据块的开始和结束时才需要 CPU 干预。数据传送的单位每次读 / 写一个或多个快注意每次读写的只能是连续的多个快且这些读入内存后在内存中也必须是连续的数据的流向不再需要经过 CPU读操作数据输入I/O 设备 - 内存写操作数据输出内存 -I/O 设备主要缺点和主要优点优点数据传输以 “块” 为单位CPU 介入频率进一步降低。数据的传输不再需要先经过 CPU 再写入内存数据传输效率进一步增加。CPU 和 I/O 设备的并行性得到提升。** 缺点**CPU 每发出一条 I/O 指令只能读 / 写一个或多个连续的数据块。如果要读 / 写多个离散存储的数据块或者要将数据分别写到不同的内存区域时CPU 要分别发出多条 I/O 指令进行多次中断处理才能完成。4.4、通道控制方式通道一种硬件可以理解为是 “简化版的 CPU”。通道可以识别并执行一系列通道指令与 CPU 相比通道可以执行的指令很单一并且通道程序是放在主机内存中的也就是说通道与 CPU 共享内存CPU 向通道发出 I/O 指令。指明通道程序在内存中的位置并指明要操作的是哪个 I/O 设备。之后 CPU 就切换到其他进程执行了通道执行内存中的通道程序其中指明了要读入 / 写出多少数据读 / 写的数据应放在内存的什么位置等信息通道执行完规定的任务后向 CPU 发出中断信号之后 CPU 对中断进行处理完成一次读 / 写操作的流程见上图CPU 干预的效率极低通道会根据 CPU 的指示执行相应的通道程序只有完成一组数据块的读 / 写才需要发出中断信号请求 CPU 干预。数据传送的单位每次读 / 写一组数据块数据的流向在通道的控制下进行读操作数据输入I/O 设备 - 内存写操作数据输出内存 -I/O 设备主要缺点和主要优点缺点实现复杂需要专门的通道硬件支持优点CPU、通道、I/O 设备可并行工作资源利用率很高。完成一次读 / 写的过程CPU 干预频率每次 I/O 的数据传输单位数据流向程序直接控制方式CPU 发出 I/O 命令后需要不断轮询极高字设备 -CPU- 内存内存 -CPU- 设备中断驱动方式CPU 发出 I/O 命令后可以做其他事本次 I/O 完成后设备控制器发出中断信号高字设备 -CPU- 内存内存 -CPU- 设备DMA 方式CPU 发出 I/O 命令后可以做其他事本次 I/O 完成后 DMA 控制器发出中断信号中块设备 - 内存内存 - 设备通道控制方式CPU 发出 I/O 命令后可以做其他事。通道会执行通道程序以完成 I/O完成后通道向 CPU 发出中断信号低一组块设备 - 内存内存 - 设备** 优缺点** 每一个阶段的优点都是解决了上一阶段的最大缺点。总体来说整个发展过程就是要尽量减少 CPU 对 I/O 过程的干预把 CPU 从繁杂的 I/O 控制事务中解脱出来以便更多地去完成数据处理任务。5、IO 软件的层次结构5.1、用户层软件用户层软件实现了与用户交互的接口用户可直接使用该层提供的、与 I/O 操作相关的库函数对设备进行操作Egprintf(“hello, world!”);用户层软件将用户请求翻译成格式化的 I/O 请求并通过 “系统调用” 请求操作系统内核的服务Egprintf (“hello, world!”); 会被翻译成等价的 write 系统调用当然用户层软件也会在系统调用时填入相应参数。Windows 操作系统向外提供的一系列系统调用但是由于系统调用的格式严格使用麻烦因此在用户层上封装了一系列更方便的库函数接口供用户使用Windows API5.2、设备独立性软件设备独立性软件又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。主要实现的功能向上层提供统一的调用接口如 read/write 系统调用设备的保护原理类似于文件保护。设备被看做是一种特殊的文字不同用户对各个文件的访问权限是不一样的同理对设备的访问权限也不一样。差错处理设备独立性软件需要对一些设备的错误进行处理设备的分配与回收数据缓冲区管理可以通过缓存技术屏蔽设备之间数据交换单位大小和传输速度的差异建立逻辑设备名到物理设备名的映射关系根据设备类型选择调用相应的驱动程序用户或用户层软件发出 I/O 操作相关系统调用的系统调用时需要指明此次要操作的 I/O 设备的逻辑设备名eg去学校打印店打印时需要选择打印机 1 / 打印机 2 / 打印机 3其实这些都是逻辑设备名设备独立性软件需要通过 “逻辑设备表LUTLogical UnitTable” 来确定逻辑设备对应的物理设备并找到该设备对应的设备驱动程序操作系统可以采用两种方式管理逻辑设备表LUT第一种方式整个系统只设置一张 LUT这就意味着所有用户不能使用相同的逻辑设备名因此这种方式只适用于单用户操作系统。第二种方式为每个用户设置一张 LUT各个用户使用的逻辑设备名可以重复适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程而 LUT 就存放在用户管理进程的 PCB 中。5.3、设备驱动程序设备驱动程序主要负责对硬件设备的具体控制将上层发出的一系列命令如 read/write转化成特定设备” 能听得懂 “的一系列操作。包括设置设备寄存器检查设备状态等硬件不同的 I/O 设备有不同的硬件特性具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。注驱动程序一般会以一个独立进程的方式存在。5.4、中断处理程序当 I/O 任务完成时I/O 控制器会发出一个中断信号系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下6、IO 核心子系统属于操作系统的内核部分即”I/O 系统 “或称”I/O 核心子系统 “因此 I/O 核心子系统要实现的功能其实就是中间三层要实现的功能考研中我们需要重点理解和掌握的功能是I/O 调度、设备保护、假脱机技术SPOOLing 技术、设备分配与回收缓冲区管理即缓冲与高速缓存6.1、功能在那个层次实现注假脱机技术SPOOLing 技术需要请求” 磁盘设备 “的设备独立性软件的服务因此一般来说假脱机技术是在用户层软件实现的。但是 408 大纲又将假脱机技术归为 “I/O 核心子系统” 的功能因此考试时还是以大纲为准。6.2、I/O 调度I/O 调度用某种算法确定一个好的顺序来处理各个 I/O 请求。如磁盘调度先来先服务算法、最短寻道优先算法、SCAN 算法、C-SCAN 算法、LOOK 算法、C-LOOK 算法。当多个磁盘 I/O 请求到来时用某种调度算法确定满足 I/O 请求的顺序。同理打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定 I/O 调度顺序。6.3、设备保护操作系统需要实现文件保护功能不同的用户对各个文件有不同的访问权限如只读、读和写等。在 UNIX 系统中设备被看做是一种特殊的文件每个设备也会有对应的 FCB。当用户请求访问某个设备时系统根据 FCB 中记录的信息来判断该用户是否有相应的访问权限以此实现” 设备保护 “的功能。参考设备保护小节7、假脱机技术 (SPOOLing 技术)7.1、脱机技术介绍脱机技术脱机 I/O是早期操作系统为解决 CPU 与慢速 I/O 设备速度不匹配、避免 CPU 空等而设计的 I/O 方式它把数据的输入 / 输出交给外围机控制在脱离主机 CPU的情况下先把数据存到磁带等高速介质上做预输入CPU 需要时再高速读取输出时 CPU 先高速写到磁带再由外围机慢慢输出让 CPU 不用等待慢速设备显著提升效率。7.2、假脱机技术介绍假脱机SPOOLing技术是利用磁盘空间模拟脱机输入 / 输出将独占设备转化为共享设备的技术。它在磁盘上开辟输入井和输出井数据先从低速外设存入输入井CPU 直接从输入井读取数据输出时 CPU 先把数据写入输出井再由外设慢慢取出从而缓和 CPU 与 I/O 设备速度不匹配提高设备利用率和系统并发能力。7.3、输入井和输出井”假脱机技术“又称”SPOOLing 技术“是用软件的方式模拟脱机技术。SPOOLing 系统的组成如下“输入井” 模拟脱机输入时的磁带用于收容 I/O 设备输入的数据“输出井” 模拟脱机输出时的磁带用于收容用户进程输出的数据7.4、输入进程和输出进程” 输入进程 “模拟脱机输入时的外围控制机“输出进程” 模拟脱机输出时的外围控制机要实现 SPOOLing 技术必须要有多道程序技术的支持。系统会建立” 输入进程 “和” 输出进程 “。7.5、输入 / 输出缓冲区在输入进程的控制下” 输入缓冲区 “用于暂存从输入设备输入的数据之后再转存到输入井中在输出进程的控制下” 输出缓冲区 “用于暂存从输出井送来的数据之后再传送到输出设备上注意输入缓冲区和输出缓冲区是在内存中的缓冲区7.6、共享打印机原理分析独占式设备 ——** 只允许各个进程串行使用的设备。** 一段时间内只能满足一个进程的请求。共享设备 ——允许多个进程” 同时 “使用的设备宏观上同时使用微观上可能是交替使用。可以同时满足多个进程的使用请求。当多个用户进程提出输出打印的请求时系统会答应它们的请求但是并不是真正把打印机分配给他们而是由假脱机管理进程为每个进程做两件事在磁盘输出井中为进程申请一个空闲缓冲区也就是说这个缓冲区是在磁盘上的并将要打印的数据送入其中为用户进程申请一张空白的打印请求表并将用户的打印请求填入表中其实就是用来说明用户的打印数据存放位置等信息的再将该表挂到假脱机文件队列上。当打印机空闲时输出进程会从文件队列的对头取出一张打印请求表并根据表中的要求将要打印的数据从输出并传送到输出缓冲区再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务虽然系统中只有一台打印机但每个进程提出打印请求时系统都会为再输出井中为其分配一个存储区相当于分配了一个逻辑设备使每个用户进程都觉得自己在独占一台打印机从而实现对打印机的共享。SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备可将独占式设备改造成共享设备。8、IO 设备的分配与回收8.1、设备分配时应考虑的因素设备的固有属性可分为三种独占设备、共享设备、虚拟设备。独占设备—— 一个时段只能分配给一个进程如打印机共享设备—— 可同时分配给多个进程使用如磁盘各进程往往是宏观上同时共享使用设备而微观上交替使用。虚拟设备—— 采用 SPOOLing 技术将独占设备改造成虚拟的共享设备可同时分配给多个进程使用如采用 SPOOLing 技术实现的共享打印机设备的分配算法先来先服务优先级高者优先短任务优先…从进程运行的安全性上考虑设备分配有两种方式安全分配方式为进程分配一个设备后就将进程阻塞本次 I/O 完成后才将进程换醒。eg考虑进程请求打印机打印输出的例子一个时段内每个进程只能使用一个设备优点破坏了” 请求和保持 “条件不会死锁缺点对于一个进程来说CPU 和 I/O 设备只能串行工作** 不安全分配方式** 进程发出 I/O 请求后系统为其分配 I/O 设备进程可继续执行之后还可以发出新的 I/O 请求。只有某个 I/O 请求得不到满足时才将进程阻塞。一个进程可以同时使用多个设备优点进程的计算任务和 I/O 任务可以并行处理使进程迅速推进缺点有可能发生死锁死锁避免、死锁的检测和解除8.2、静态分配和动态分配静态分配进程运行前为其分配全部所需资源运行结束后归还资源破坏了” 请求和保持 “条件不会发生死锁动态分配进程运行过程中动态申请设备资源8.3、设备分配管理中的数据结构” 设备、控制器、通道 “之间的关系一个通道可控制多个设备控制器每个设备控制器可控制多个设备。** 设备控制表DCT* 系统为每个设备配置一张 DCT用于记录设备情况设备控制表DCT描述设备类型如打印机 / 扫描仪 / 键盘设备标识符即物理设备名系统中的每个设备的物理设备名唯一设备状态忙碌 / 空闲 / 故障…指向控制器表的指针每个设备由一个控制器控制该指针可找到相应控制器的信息重复执行次数或时间当重复执行多次 I/O 操作后仍不成功才认为此次 I/O 失败设备队列的队首指针指向正在等待该设备的进程队列由进程 PCB 组成队列注” 进程管理 “章节中曾经提到过” 系统会根据阻塞愿意不同将进程 PCB 挂到不同的阻塞队列中 “控制器控制表COCT每个设备控制器都会对应一张 COCT。操作系统根据 COCT 的信息对控制器进行操作和管理。控制器控制表COCT描述控制器标识符各个控制器的唯一 ID控制器状态忙碌 / 空闲 / 故障…指向通道表的指针每个控制器由一个通道控制该指针可找到相应通道的信息控制器队列的队首指针指向正在等待该控制器的进程队列由进程 PCB 组成队列控制器队列的队尾指针指向正在等待该控制器的进程队列由进程 PCB 组成队列通道控制表CHCT每个通道都会对应一张 CHCT。操作系统根据 CHCT 的信息对通道进行操作和管理。通道控制表CHCT描述通道标识符各个通道的唯一 ID通道状态忙碌 / 空闲 / 故障…与通道连接的控制器表首址可通过该指针找到该通道管理的所有控制器相关信息COCT通道队列的队首指针指向正在等待该通道的进程队列由进程 PCB 组成队列通道队列的队尾指针指向正在等待该通道的进程队列由进程 PCB 组成队列系统设备表SDT记录了系统中全部设备的情况每个设备对应一个表目。8.4、设备分配的步骤根据进程请求的物理设备名查找 SDT注物理设备名是进程请求分配设备时提供的参数根据 SDT 找到 DCT若设备忙碌则将进程 PCB 挂到设备等待队列中不忙碌则将设备分配给进程。根据 DCT 找到 COCT若控制器忙碌则将进程 PCB 挂到控制器等待队列中不忙碌则将控制器分配给进程。根据 COCT 找到 CHCT若通道忙碌则将进程 PCB 挂在通道等待队列中不忙碌则将通道分配给进程。注只有设备、控制器、通道三者都分配成功时这次设备分配才算成功之后便可启动 I/O 设备进行数据传送8.5、设备分配步骤的改进缺点用户编程时必须使用” 设备物理名 “底层细节对用户透明不方便编程若换了一个物理设备则程序无法运行若进程请求的物理设备正在忙碌则即使系统中还有同类型的设备进程也必须阻塞等待** 改进方法** 建立逻辑设备名与物理设备名的映射机制用户编程时只需要提供逻辑设备名逻辑设备表LUT建立了逻辑设备名与物理设备名之间的映射关系。某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求操作系统根据用户进程指定的设备类型逻辑设备名查找系统设备表找到一个空闲设备分配给进程并在 LUT 中增加相应表项。如果之后用户进程再次通过相同的逻辑设备名请求使用设备则操作系统通过 LUT 表即可知道用户进程实际要使用的是哪个物理设备了并且也能知道该设备的驱动程序入口地址。逻辑设备表的设置问题整个系统只有一张 LUT个用户所用的逻辑设备名不允许重复适用于单用户操作系统每个用户一张 LUT不同用户的逻辑设备名可重复适用于多用户操作系统9、缓冲区管理9.1、什么是缓冲区有什么作用缓冲区是一个存储区域可以由专门的硬件寄存器组成也可利用内存作为缓冲区。使用硬件作为缓冲区的成本较高容量也较小一般仅用在速度要求非常高的场合如存储器管理中所用的联想寄存器由于对页表的访问频率较高因此使用速度很快的联想寄存器来存放页表项的副本一般情况下更多的是利用内存作为缓冲区“设备独立性软件” 的缓冲区管理就是要组织管理好这些缓冲区本节介绍的是 “内存作为缓冲区”9.2、缓冲区有什么作用CPU 可以把要输出的数据快速地放入缓冲区之后就可以做别的事慢速的 I/O 设备可以慢慢从缓冲区取走数据数据输入时类似如果是字符型设备则每输出完一个字符就要向 CPU 发送一次中断信号9.3、单缓冲假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略操作系统会在主存中为其分配一个缓冲区若题目中没有特别说明一个缓冲区的大小就是一个快。注意当缓冲区数据非空时不能往缓冲区冲入数据只能从缓冲区把数据传出当缓冲区为空时可以往缓冲区冲入数据但必须把缓冲区充满以后才能从缓冲区把数据传出。结论采用单缓冲策略处理一块数据平均耗时 Max (C,T)M9.4、双缓冲假设某用户进程请求某种设备读入若干块的数据。若采用双缓冲的策略操作系统会在主存中为其分配两个缓冲区若题目中没有特别说明一个缓冲区的大小就是一个块双缓冲题目中假设初始状态为工作区空其中一个缓冲区满另一个缓冲区空假设 TCM处理一块数据的平均用时 T假设 TCM注M (1) 表示 “将缓冲区 1 中的数据传送到工作区”M (2) 表示 “将缓冲区 2 中的数据传送到工作区”结论采用双缓冲策略处理一个数据块的平均耗时为 Max (T,CM)9.5、使用单 / 双缓冲在通信时的区别两台机器之间通信时可以配置缓冲区用于数据的发送和接受。显然若两个相互通信的机器只设置单缓冲区在任一时刻只能实现数据的单向传输。若两个相互通信的机器设置双缓冲区则同一时刻可以实现双向的数据传输。注管道通信中的 “管道” 其实就是缓冲区。要实现数据的双向传输必须设置两个管道9.6、循环缓冲区将多个大小相等的缓冲区链接成一个循环队列。注以下图示中橙色表示已充满数据的缓冲区绿色表示空缓冲区。9.7、缓冲池缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为空缓冲队列、装满输入数据的缓冲队列输入队列、装满输出数据的缓冲队列输出队列。另外根据一个缓冲区在实际运算中扮演的功能不同又设置了四种工作缓冲区用于收容输入数据的工作缓冲区hin、用于提取输入数据的工作缓冲区sin、用于收容输出数据的工作缓冲区hout、用于提取输出数据的工作缓冲区sout输入进程请求输入数据从空缓冲队列中取出一块作为收容输入数据的工作缓冲区hin。充满数据后将缓冲区挂到输入队列队尾计算进程想要取得一块输入数据从输入队列中取得一块冲满输入数据的缓冲区作为 “提取输入数据的工作缓冲区sin”。缓冲区读空后挂到空缓冲区队列计算进程想要将准备好的数据冲入缓冲区从空缓冲队列中取出一块作为 “收容输出数据的工作缓冲hout” 数据冲满后将缓冲区挂到输出进程请求输出数据从输出队列中取得一块冲满输出数据的缓冲区作为 “提取输出数据的工作缓冲区sout”。缓冲区读空后挂到空缓冲区队列

更多文章