学习笔记10

第十二章 块设备I/O和缓冲区管理
    12.1 块设备I/O缓冲区
  读写普通文件的算法:
            依赖于两个关键操作get_block和put_block,这两个操作将磁盘块读写到内存缓冲区中
    块设备的缺点:
     基于给定固态存储器的块设备比基于相同类型的存储器的字节寻址要慢一些,因为必须在块的开头开始读取或写入。所以,要读取该块的任何部分,必须寻找到该块的开始,读取整个块,如果不使用该块,则将其丢弃。要写入块的一部分,必须寻找到块的开始,将整个块读入内存,修改数据,再次寻找到块的开头处,然后将整个块写回设备。
   I/O缓冲的基本原理:
  • 文件系统使用一系列I/O缓冲区作为块设备的缓存内存。
  • 当进程试图读取(dev, blk)标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。
  • 如果该缓冲区存在并且包含有效数据,那么它只需从缓冲区中读取数据,而无须再次从磁盘中读取数据块。
  • 如果该缓冲区不存在,它会为磁盘块分配一个缓冲区,将数据从磁盘读入缓冲区,然后从缓冲区读取数据,当某个块被读入时,该缓冲区将被保存在缓冲区缓存中,以供任意进程对同一个块的下一次读/写请求使用。
  • 当进程写入磁盘块时,它首先会获取一个分配给该块的缓冲区。然后,它将数据写入缓冲区,将缓冲区标记为脏,以延迟写入,并将其释放到缓冲区缓存中 由于脏缓冲区包含有效的数据,因此可以使用它来满足对同一块的后续读/写清求,而不会引起实际磁盘I/O,脏缓冲区只有在被重新分配到不同的块时才会写入磁盘。
    12.2 Unix I/O缓冲区管理算法
        Unix缓冲区管理子系统由以下部分组成:
            (1)I/O缓冲区:内核中的一系列NBUF缓冲区用作缓冲区缓存
           缓冲区结构体由两部分组成:用于缓冲区管理的缓冲头部分和用于数据块的数据部分
    (2)设备表:每个块设备用一个设备表结构表示
            (3)缓冲区初始化:当系统启动时,所有I/O缓冲区都在空闲列表中,所有设备列表和I/O队列均为空
            (4)缓冲区列表:当缓冲区分配给(dev, blk)时,它会被插入设备表的dev_list中
            (5)Unix getblk/brelse算法
        Unix算法的缺点:
  •  (1)效率低下:该算法依赖于重试循环
  •  (2)缓存效果不可预知:在Unix算法中,每个释放的缓冲区都可被获取
  •  (3)可能会出现饥饿:Unix算法基于“自由经济”原则,每个进程都有尝试的机会,但不能保证成功
  •  (4)该算法使用只适用于单处理器系统的休眠/唤醒操作
    12.3 新的I/O缓冲区管理算法
        信号量的主要优点:
            (1)计数信号量可用来表示可用的资源的数量
            (2)当多个进程等待一个资源时,信号量上的V操作只会释放一个等待进程,该进程不必重视,因为它保证拥有资源
        使用信号量的缓冲区管理算法:
  •   (1)保证数据一致性
  •   (2)良好的缓存效果
  •   (3)高效率:没有重试循环,没有不必要的进程“唤醒”
  •   (4)无死锁和饥饿
    12.4 PV算法

  •  (1)缓冲区唯一性
  •  (2)无重试循环
  •  (3)无不必要唤醒
  •  (4)缓存效果
  •  (5)无死锁和饥饿

二.完善与补充内容

  在学习这部分内容的时候脑海中隐约浮现了操作系统课程中讲过的内容,发现会有很多的共通之处,于是乎再次整合学习内容,以及查找网络的资料发现以下内容:

  1.I/O全流程思维导图

 

 

   2.I/O 层次结构及其主要功能

 

   3.中断处理程序

   在上次的学习笔记中有过对该内容的总结和笔记,但缺少流程示意图,示意图如下:

 

  以上图片均取自操作系统 I/O 全流程详解 - 程序员cxuan - 博客园 (cnblogs.com)

三.总结与反思

   在学习过程中我们会发现很多东西好像在哪听过,仔细一想原来是另一门课程,这告诉我们在学习的过程中需要建立起知识网络图,让所学的知识全部串在一起,有效的学习一门课程的同时还能复习另一门的内容,如同思维导图那样将所有的有关内容罗列在一起,方便复习巩固自己已有的知识,这方面的能力仍需培养。

posted @ 2021-11-21 15:13  冯睿20191328  阅读(10)  评论(0编辑  收藏  举报