学习笔记10
学习笔记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()
则用于设置文件流的缓冲区类型和大小,具有更多的参数控制选项。
苏格拉底提问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构