首页 > 系统相关 >《Unix/Linux系统编程》第十二章学习笔记 20201209戴骏

《Unix/Linux系统编程》第十二章学习笔记 20201209戴骏

时间:2022-11-05 15:35:57浏览次数:65  
标签:缓存 dev 戴骏 Unix bp Linux 缓冲区 进程

第十二章、块设备I/O和缓冲区管理

知识点归纳

一、块设备I/O缓冲区

I/O缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓冲区存在并且包含有效数据,那么它只需从缓冲区中读取数据,而无须再次从磁盘中读取数据块。如果该缓冲区不存在,它会为磁盘块分配一个缓冲区,将数据从磁盘读入缓冲区,然后从缓冲区读取数据。当某个块被读入时,该缓冲区将被保存在缓冲区缓存中。以供任意进程对同一个块的下一次读/写请求使用。同样,当进程写入磁盘块时,它首先会获取一个分配给该块的缓冲区。然后,它将数据写人缓冲区,将缓冲区标记为脏,以延迟写入,并将其释放到缓冲区缓存中。由于脏缓冲区包含有效的数据,因此可以使用它来满足对同一块的后续读/写请求,而不会引起实际磁盘1O。脏缓冲区只有在被重新分配到不同的块时才会写人磁盘。

二、Unix I/O缓冲区管理算法

Unix缓冲区管理子系统

  • (1)I/O缓冲区:内核中的一系列NBUF缓冲区用作缓冲区缓存。每个缓冲区用一个结构体表示。

    • 缓冲区结构体:由用于缓冲区管理的缓冲头部分和用于数据块的数据部分组成。
      为了保护内核内存,状态字段可以定义为一个位向量,其中每个位表示一个唯一的状态条
      件。
  • (2)设备表:每个块设备用一个设备表结构表示。

    • 每个设备表都有一个dev_Iist,包含当前分配给该设备的I/O缓冲区,还有一个io_queue,包含设备上等待I/O操作的缓冲区。I/O队列的组织方式应确保最佳I/O操作。Unix使用FIFO I/O队列。
  • (3)缓冲区初始化:当系统启动时,所有I/O缓冲区都在空闲列表中,所有设备列表和T/O队列均为空。

    • 缓冲区列表:当缓冲区分配给(dev,blk)时,它会被插入设备表的dev_list中。如果缓冲区当前正在使用,则会将其标记为BUSY(繁忙)并从空闲列表中删除。

Unix算法的缺点

  • (1)效率低下:该算法依赖于重试循环,例如,释放缓冲区可能会唤醒两组进程:需要释放的缓冲区的进程,以及只需要空闲缓冲区的进程。由于只有一个进程可以获取释放的缓冲区,所以,其他所有被唤醒的进程必须重新进入休眠状态。从休眠状态唤醒后,每个被唤醒的进程必须从头开始重新执行算法,因为所需的缓冲区可能已经存在。这会导致过多的进程切换。
  • (2)缓存效果不可预知:在Unix算法中,每个释放的缓冲区都可被获取'如果缓冲区 由需要空闲缓冲区的进程获取,那么将会重新分配缓冲区,即使有些进程仍然需要当前的缓冲区。
  • (3)可能会出现饥饿:Unix算法基于“自由经济”原则,即每个进程都有尝试的机会,但不能保证成功,因此,可能会出现进程饥饿。
  • (4)该算法使用只适用于单处理器系统的休眠/唤醒操作。

三、新的I/O缓冲区管理法

信号量的主要优点是:

  • (1)计数信号量可用来表示可用资源的数量,例如:空闲缓冲区的数量。
  • (2)当多个进程等待一个资源时,信号量上的V操作只会释放一个等待进程,该进程不必重试,因为它保证拥有资源。

四、PV算法

BUFFER *getb1k(dev,blk):
    while(1){
    (1). P(free);
    //get a free buffer first 
    if (bp in dev_1ist){
    (2). if (bp not BUSY){
    remove bp from freelist;P(bp);
    // lock bp but does not wait
    (3).return bp;
    // bp in cache but BUSY V(free);
    // give up the free buffer
    (4).P(bp);
    // wait in bp queue
    return bp;v
    // bp not in cache,try to create a bp=(dev,blk)
    (5).bp = frist buffer taken out of freelist;P(bp);
    // lock bp,no wait
    (6).if(bp dirty){
    awzite(bp);
    // write bp out ASYNC,no wait
    continue;
    // continue from (1)
    (7).reassign bp to(dev,blk);1/ mark bp data invalid,not dir return bp;-
    // end of while(1);
    brelse(BUFFER *bp),
    {
    (8).iF (bp queue has waiter)( V(bp); return; ]
    (9).if(bp dirty && free queue has waiter){ awrite(bp);zeturn;}(10).enter bp into(tail of) freelist;V(bp);V(free);
    }

五、证明PV算法正确性:

  • 缓冲区唯一性
  • 无重试循环
  • 无不必要唤醒
  • 缓存效果
  • 无死锁和饥饿

标签:缓存,dev,戴骏,Unix,bp,Linux,缓冲区,进程
From: https://www.cnblogs.com/daijun123/p/16860263.html

相关文章

  • Linux上配置Github上git clone的python项目
    1、先在Linux安装Anaconda,可以参考这篇博客 (安装成功后,命令行开头会出现base)2、接下来gitclone+仓库地址,下载很慢或者无法下载,参考这篇博客3、进入该项目,创建虚拟环......
  • CentOS 7(Linux)安装Docker
    CentOS7(Linux)安装Docker一、分别执行下列命令添加并更新yum源    yum update    yuminstallepel-release-y    yumcleanall    y......
  • Linux下的文件与磁盘
    Linux下的磁盘管理磁盘的结构磁盘的最小单元是扇区(sector),每个扇区512KB。分区的最小单位是柱面,柱面是指在不同磁盘上的同一位置上的磁道。第一个扇区中存储的是MBR......
  • 腾讯云Linux轻量服务器使用宝塔面板一键部署WordPress个人博客教程
    WordPress作为动态博客的代表,至今已经有十几年历史,而且一直在更新发展中,功能强大,插件和主题丰富,WordPress搭建使用也很方便。作为个人站长和博主,很多都是从WordPress入门......
  • [Linux]----文件操作(重定向+缓冲区)
    文章目录​​前言​​​​一、重定向​​​​具体操作​​​​dup2​​​​二、关于缓冲区的理解​​​​1.什么是缓冲区​​​​2.为什么要有缓冲区​​​​3.缓冲区在......
  • Linux SMB传输文件命令
    如何将linux服务器上的文件上传到华为NAS如何登录华为NAS 首先登陆smb服务器,不要账户名密码登录:smbclient-N\/\/192.168.0.1/共享文件上传命令:注意:如果是批量上......
  • Linux下网络编程
    Linux下网络编程1.TCP/IP简介    TCP/IP协议源于1969年,是针对Internet开发的一种体系结构和协议标准,目的在于解决异种计算机网络的通信问题。使得网络在互联时能为用......
  • linux防火墙
    查看防火墙状态systemctlstatusfirewalld查看所有已开放的端口firewall-cmd--list-ports开放端口firewall-cmd--zone=public--add-port=82/tcp--permanent......
  • linux 环境nginx 快捷启动配置
    一般nginx安装后,得到nginx安装目录sbin文件夹里启动nginx/usr/local/nginx/sbin/nginx-sstart可以配置环境变量,来直接输入nginx来启动,停止,检测配置,重启1.编辑用户......
  • linux 打包指定动态链接库路径的方法
    #当前路径$PWDecho"current_path:"$PWD#父级路径$(dirname$PWD)echo"parent_path:"$(dirname$PWD)#套娃即可$(dirname$(dirname$PWD))echo"parent_parent_path:"......