230 likes | 419 Views
设备管ç†. 缓冲技术 设备分é…ç¨‹åº è®¾å¤‡é©±åŠ¨ç¨‹åº. 缓 冲 技 术. 设备管ç†ä¸çš„问题 CPU 速度与设备速度ä¸åŒ¹é…的问题。 ä¼ è¾“å¤§é‡æ•°æ®æ—¶ä¸æ–次数太多。 DMA 或通é“的“瓶颈â€é—®é¢˜ã€‚ 解决办法:引入缓冲技术。. 缓冲区. 输入设备. CPU. 输出设备. 缓冲的实现方法. 专用硬件缓冲器。 软件缓冲:在内å˜ä¸åˆ’出若干专用区域。 专用缓冲区。 共享缓冲区。. 缓冲的ç§ç±». å•ç¼“冲 匹é…了速度,但ä¸èƒ½å¹¶è¡Œã€‚ åŒç¼“冲 既解决了速度匹é…,åˆå¯ä»¥å¹¶è¡Œã€‚当设备很多时,实现起æ¥å¾ˆå›°éš¾ã€‚
E N D
设备管理 缓冲技术 设备分配程序 设备驱动程序
缓 冲 技 术 • 设备管理中的问题 • CPU速度与设备速度不匹配的问题。 • 传输大量数据时中断次数太多。 • DMA或通道的“瓶颈”问题。 • 解决办法:引入缓冲技术。 缓冲区 输入设备 CPU 输出设备
缓冲的实现方法 • 专用硬件缓冲器。 • 软件缓冲:在内存中划出若干专用区域。 • 专用缓冲区。 • 共享缓冲区。
缓冲的种类 • 单缓冲 • 匹配了速度,但不能并行。 • 双缓冲 • 既解决了速度匹配,又可以并行。当设备很多时,实现起来很困难。 • 多缓冲:系统中有多个缓冲区,一些专门用于输入,另一些专门用于输出。 • 缓冲池:多个进程共享,既可以做输入,又可以做输出。
缓冲池的管理 • 一个缓冲池由多个缓冲区组成。 • 一个缓冲区既可以用于输入,又可以用于输出。 • 一个缓冲区的组成: 设备号 数据块号 缓冲器号 互斥标志位 连接指针 缓冲首部 缓冲体 用于存放数据
缓冲池的管理 • 在任一时刻,缓冲池有三个队列: • 空闲缓冲区队列em • 存放输入数据的输入队列in • 存放输出数据的输出队列out • 四种工作缓冲区: • 收容输入缓冲区:用于存放输入设备数据。 • 提取输入缓冲区:提取设备输入数据的缓冲区。 • 收容输出缓冲区: • 提取输出缓冲区:
缓冲池的管理 • 先分析收容输入的过程:从空缓冲队列中取出一个空缓冲区,存入输入数据后,放入in队列中。在该过程中,涉及缓冲区的两个操作。 • 对缓冲池的操作 • 从队列中按一定规则选取一个缓冲区的过程take_buf(type)。 • 把缓冲区按一定的选取规则插入相应的缓冲区的过程add_buf(type)。
缓冲池的管理 • 但是,缓冲区是临界资源;要想从队列中取缓冲区,前提条件是队列不能为空。 • 因此,对用户进程来说,从队列中取缓冲区和将缓冲区加入队列是互斥和同步关系。 • 供进程申请缓冲区的过程get_buf(type,number)和供进程将缓冲区放入相应缓冲区队列的过程put_buf(type,number)分别如下:
定义:互斥信号量sem(type)=1 同步信号量 rs(type)=n,表示队列长度 Get_buf(type,number) begin p(rs(type)) p(sem(type)) pointer=take_buf(type,number) v(sem(type)) end put_buf(type,number) begin p(sem(type)) ADD_buf(type,number) v(sem(type)) v(rs(type)) end
设备分配程序 • 设备分配用数据结构 • 设备分配原则 • 设备分配方式 • 设备分配策略 • 设备分配算法
设备分配用数据结构 • 设备控制表(DCT) • 设备标识符 • 设备类型 • 设备地址或设备号 • 设备状态 • 等待队列指针 • 与设备相连的I/O控制器指针。
设备分配用数据结构 • 控制器控制表(COCT) • 控制器标识 • 状态:忙/闲 • 等待队列指针 • 通道指针 • 通道控制表(CHCT) • 通道标识 • 通道状态 • 等待队列指针:队首指针和队尾指针。
设备分配用数据结构 • 系统设备表(SDT) • 设备标识符 • 设备类型 • 正在使用该设备的进程标识 • DCT指针 • 四个数据结构通过其内部链接指针联系在一起: SDTDCT COCT CHCT
设备分配原则 • 充分发挥设备的使用效率。 • 避免由于不合理的分配方法造成进程死锁。 • 把用户程序和具体物理设备隔离起来。
设备分配方式 • 静态分配:在进程运行之前,为其分配所需的所有设备,且在其运行期间,不允许其他进程使用。 无死锁;设备利用率低。 • 动态分配:进程运行期间,根据需要分配设备,使用完后,马上释放。 设备利用率高;会造成死锁。
设备分配策略 • 先申请先分配:系统按提出I/O申请的先后次序,将进程发出的I/O请求命令排成队列。 • 优先级高者先分配。根据发出I/O请求命令的进程的优先级。
设备分配算法 • 建立一条从设备到控制器到通道的链。 • 实际上就是根据SDT、DCT、COCT、CHCT中的状态和连接信息来确定一条链。 • 其流程如下:
A 进程I/O请求 检查设备分配的安全性 根据SDT找到DCT指针 N 安全吗? Y Y 设备忙? 入等待队列 将设备分配给进程 N 按分配策略选取占据 该设备的进程 搜索DCT,找到COCT 入控制器 等待队列 忙? 被选中? N N Y 为设备分配控制器 A
设备驱动程序 • 驱动物理设备、DMA或通道直接进行I/O操作的子程序的集合。 • 负责设置与相应设备有关的寄存器的值;启动设备进行I/O操作;指定操作的类型和数据流向等。 • 每一个设备的每一项操作都对应一个子程序,如何管理这些子程序呢? • 设备开关表:
操作 设备
I/O控制 • 问题:何时分配设备、何时分配缓冲区、何时驱动设备进行操作、何时响应中断? • I/O控制:从用户进程提出设备请求开始,为进程分配设备、缓冲区、驱动设备进行I/O操作直到响应中断的整个过程,称为I/O控制。 • 流程如下:
进程设备请求 中断请求 请求处理 分析中断原因 设备分配程序 执行中断处理程序 分配缓冲区 驱动设备运行
上机(四) 用C语言编写设备分配程序。 说明:(1)不需要编写安全检查模块。 (2)自己设定初始数据。但应注意能够验证各种情况。