- 文件系统使用一系列I/O缓冲区作为块设备的缓存内存。
- 当进程试图读取(dev, blk)标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。
- 如果该缓冲区存在并且包含有效数据,那么它只需从缓冲区中读取数据,而无须再次从磁盘中读取数据块。
- 如果该缓冲区不存在,它会为磁盘块分配一个缓冲区,将数据从磁盘读入缓冲区,然后从缓冲区读取数据,当某个块被读入时,该缓冲区将被保存在缓冲区缓存中,以供任意进程对同一个块的下一次读/写请求使用。
- 当进程写入磁盘块时,它首先会获取一个分配给该块的缓冲区。然后,它将数据写入缓冲区,将缓冲区标记为脏,以延迟写入,并将其释放到缓冲区缓存中 由于脏缓冲区包含有效的数据,因此可以使用它来满足对同一块的后续读/写清求,而不会引起实际磁盘I/O,脏缓冲区只有在被重新分配到不同的块时才会写入磁盘。
- (1)效率低下:该算法依赖于重试循环
- (2)缓存效果不可预知:在Unix算法中,每个释放的缓冲区都可被获取
- (3)可能会出现饥饿:Unix算法基于“*经济”原则,每个进程都有尝试的机会,但不能保证成功
- (4)该算法使用只适用于单处理器系统的休眠/唤醒操作
- (1)保证数据一致性
- (2)良好的缓存效果
- (3)高效率:没有重试循环,没有不必要的进程“唤醒”
- (4)无死锁和饥饿
- (1)缓冲区唯一性
- (2)无重试循环
- (3)无不必要唤醒
- (4)缓存效果
- (5)无死锁和饥饿
二.完善与补充内容
在学习这部分内容的时候脑海中隐约浮现了操作系统课程中讲过的内容,发现会有很多的共通之处,于是乎再次整合学习内容,以及查找网络的资料发现以下内容:
1.I/O全流程思维导图
2.I/O 层次结构及其主要功能
3.中断处理程序
在上次的学习笔记中有过对该内容的总结和笔记,但缺少流程示意图,示意图如下:
以上图片均取自操作系统 I/O 全流程详解 - 程序员cxuan - 博客园 (cnblogs.com)
三.总结与反思
在学习过程中我们会发现很多东西好像在哪听过,仔细一想原来是另一门课程,这告诉我们在学习的过程中需要建立起知识网络图,让所学的知识全部串在一起,有效的学习一门课程的同时还能复习另一门的内容,如同思维导图那样将所有的有关内容罗列在一起,方便复习巩固自己已有的知识,这方面的能力仍需培养。