文章目录
- 一、" 磁盘 " 单缓冲区 与 双缓冲区
- 1、" 磁盘 " 单缓冲区
- 2、" 磁盘 " 双缓冲区
- 二、" 磁盘 " 单缓冲区 与 双缓冲区案例
- 1、案例描述
- 2、磁盘单缓冲区 - 流水线分析
- 3、磁盘双缓冲区 - 流水线分析
一、" 磁盘 " 单缓冲区 与 双缓冲区
磁盘缓冲区 的
- 单缓冲区
- 双缓冲区
是两种 不同的设计策略 , 用于 优化 数据 读取 和 写入 的效率 ;
1、" 磁盘 " 单缓冲区
只有一个缓冲区用于 存储数据 和 写出数据 , 无论是 读取数据 还是 写入数据 , 都使用同一个缓冲区 ;
- 读取数据 : 当系统需要从磁盘读取数据时 , 数据首先被读取到单个缓冲区中 ;
- 写入数据 : 当系统需要将数据写入磁盘时 , 写入操作也使用同一个缓冲区 ;
读取 和 写入 数据操作 不能并行进行 , 因为同一个缓冲区同时只能处理一个操作 , 会影响系统的响应速度和效率 ;
2、" 磁盘 " 双缓冲区
系统 有两个独立的缓冲区 , 分别用于 读取 和 写入 数据操作 ;
- 读取数据 : 从磁盘 读取 数据时 , 数据被读取到 读缓冲区 中 ;
- 写入数据 : 向磁盘 写入 数据时 , 数据被写出到 写缓冲区 中 ;
磁盘双缓冲区 允许 读取 和 写入 操作同时进行 , 能够有效地提高系统的并行处理能力和响应速度 ;
二、" 磁盘 " 单缓冲区 与 双缓冲区案例
1、案例描述
磁盘块 与 磁盘缓冲区 大小相同 ,
磁盘块 读取数据 到 磁盘缓冲区 的时间是 15 μs 微秒 ,
内存中的 磁盘缓冲区 将 数据送到 内存中的 用户区 需要的时间是 5 μs 微秒 ,
内存中 用户区 对 每块数据 的处理时间是 1 μs 微秒 ,
将 10 个 磁盘块 大小的 文件 , 读入到 磁盘缓冲区 , 然后送到 用户区处理 , 采用 磁盘单缓冲区 和 磁盘双缓冲区 各自要花费多少时间 ;
2、磁盘单缓冲区 - 流水线分析
分析 磁盘单缓冲 的系统 中 单块 数据块 从 磁盘 到 内存用户区 的耗时 :
- 磁盘单缓冲区 电路图如下 :
- 磁盘 中的 数据块 读取到 磁盘缓冲区 需要 15 μs ;
- 将 数据块 从 磁盘缓冲功能 送入到 内存用户区 需要 5 μs , 该过程中 磁盘缓冲区 一直在占用 , 无法被写入 ;
- 数据需要 20 μs 才能将一个 数据块 传输到 内存用户区 , 然后才能进行下一个 磁盘数据块 的传输 , 这 20 μs 的工作完成后 执行如下操作 ,
- 并行操作 内存工作区处理数据块 : 数据 在 内存中的工作区 进行处理 耗时 1 μs , 该操作 与 下一轮 的 数据块传输 是 并行操作 , 不会占用额外的之间 , 只有最后一轮 10 个磁盘块 消耗了 20 × 10 20 \times 10 20×10 μs 时间之后 , 还需要额外消耗 1 μs 进行数据处理 ;
- 并行操作 下一轮数据块传输 : 数据在工作区开始处理 时 , 下一块 磁盘 中的 数据块 同时 开始 向 磁盘缓冲区 中传输 , 又要需要 15 15 15 μs , 该操作 与 上一轮的数据块 在 内存工作区处理 是并行的操作 ;
- 上述 数据块 传输了 10 次 , 消耗了 20 × 10 20 \times 10 20×10 μs , 此时 内存用户区 还要处理 最后一个数据块 , 再额外消耗 1 μs ;
- 时序图如下 :
最终时间消耗 : 20 × 10 + 1 = 201 20 \times 10 + 1 = 201 20×10+1=201 μs
3、磁盘双缓冲区 - 流水线分析
分析 磁盘单缓冲 的系统 中 单块 数据块 从 磁盘 到 内存用户区 的耗时 :
- 磁盘双缓冲区 电路图如下 :
-
磁盘 中的 数据块 读取到 磁盘缓冲区 需要 15 μs ;
- 并行操作 - 传输数据到内存用户区 : 将 数据块 从 磁盘缓冲功区 送入到 内存用户区 需要 5 μs , 该过程中 磁盘缓冲区 B 是空闲的 , 可以同时进行下一个数据块读取 ;
- 串行操作 - 数据 从 缓冲区传输到内存用户区 : " 从 磁盘缓冲功区 送入到 内存用户区 " 5 μs 与 下一轮 的数据传输 是并行的 , 因此只需要考虑 " 磁盘 中的 数据块 读取到 磁盘缓冲区 需要 15 μs " 即可 ;
- 串行操作 - 内存工作区处理数据块 : 数据 在 内存中的工作区 进行处理 耗时 1 μs , 该操作 与 " 数据 从 缓冲区传输到内存用户区 " 的 5 μs , 总共用时 6 μs , 与之并行的任务耗时 15 μs , 并不会影响时间消耗 ;
- 并行操作 - 下一个数据库传输 : 下一个数据块 从 磁盘中 读取到 另外一个磁盘缓冲区中 , 耗时 15 μs , 该过程与上面的 " 将 数据块 从 磁盘缓冲功区 送入到 内存用户区 " 操作 同时进行 ;
- 并行操作 - 传输数据到内存用户区 : 将 数据块 从 磁盘缓冲功区 送入到 内存用户区 需要 5 μs , 该过程中 磁盘缓冲区 B 是空闲的 , 可以同时进行下一个数据块读取 ;
-
上述 数据块 传输了 10 次 , 消耗了 15 × 10 15 \times 10 15×10 μs , 此时 最后一个数据块 , 数据 从 缓冲区传输到内存用户区 耗时 5 μs , 内存用户区 处理数据 再额外消耗 1 μs ;
-
时序图如下 :
最终时间消耗 : 15 × 10 + 5 + 1 = 156 15 \times 10 + 5 + 1 = 156 15×10+5+1=156 μs