学习笔记10
十二章知识点归纳
本章主要讨论了块设备 I/O 和缓冲区管理,包括块设备 I/O 的原理、I/O 缓冲的优点、Unix 的缓冲区管理算法以及信号量设计的新缓冲区管理算法。以下是一些重要的知识点:
1. 块设备 I/O 缓冲区
- 基本原理:文件系统使用一系列 I/O 缓冲区作为块设备的缓存内存。
- 读取和写入过程:如果缓冲区存在并包含有效数据,则直接从缓冲区读取数据,否则会为磁盘块分配缓冲区并将数据读入缓冲区。
2. Unix/Linux 中的信号处理
- 内核中的一系列 NBUF 缓冲区用作缓冲区缓存,每个缓冲区由一个结构体表示。
- 缓冲区初始化、列表和算法:描述了缓冲区的初始化过程以及 getblk/brelse 算法的流程。
3. PV 算法
- PV 算法特点:缓冲区唯一性、无重试循环、无不必要唤醒,提升了缓存效果。
4. I/O 缓冲区管理算法比较
该部分涉及了用户界面、CPU 端模拟、缓冲区管理器、磁盘驱动程序、磁盘控制器、磁盘中断以及虚拟磁盘等方面。
三、实践过程与截图
尝试 Unix I/O 缓冲区管理算法
- 示例代码使用了 perror()、setvbuf()、以及进程同步的消费者问题,展示了文件操作、缓冲区设置和线程同步等方面的实践。
问题与解决思路
问题:setbuf()函数和setvbuf()函数的区别是什么?
setbuf()
用于将指定缓冲区与特定的文件流相关联,实现直接操作文件流缓冲区的功能。而setvbuf()
则用于设置文件流的缓冲区类型和大小,具有更多的参数控制选项。
苏格拉底提问