首页 > 其他分享 >信息安全系统设计与实现课程第十二章学习笔记

信息安全系统设计与实现课程第十二章学习笔记

时间:2023-11-19 17:59:22浏览次数:37  
标签:缓存 PV 信息安全 第十二章 笔记 进程 算法 bp 缓冲区

一、知识点归纳

1、块设备I/O缓冲区

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

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

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

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

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

Unix算法的缺点

  1. 效率低下:该算法依赖于重试循环,例如,释放缓冲区可能会唤醒两组进程:需要释放的缓冲区的进程,以及只需要空闲缓冲区的进程。由于只有一个进程可以获取释放的缓冲区,所以,其他所有被唤醒的进程必须重新进入休眠状态。从休眠状态唤醒后,每个被唤醒的进程必须从头开始重新执行算法,因为所需的缓冲区可能已经存在。这会导致过多的进程切换。

  2. 缓存效果不可预知:在Unix算法中,每个释放的缓冲区都可被获取。如果缓冲区由需要空闲缓冲区的进程获取,那么将会重新分配缓冲区,即使有些进程仍然需要当前的缓冲区。

  3. 可能会出现饥饿:Unix算法基于“自由经济”原则,即每个进程都有尝试的机会,但不能保证成功,因此,可能会出现进程饥饿。

  4. 该算法使用只适用于单处理器系统的休眠/唤醒操作。

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

信号量的主要优点是:

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

4、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;
            // bp not in cache, try to create a bp=(dev,blk)
            (5).bp = first 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);
            // 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);return;}
        (10).enter bp into(tail of) freelist;V(bp);V(free);
    }

5、证明PV算法正确性

PV算法满足以下特性来证明其正确性:

  • 缓冲区唯一性:PV算法确保每个缓冲区只有一个进程可以拥有,通过使用信号量来实现缓冲区的互斥访问。
  • 无重试循环:PV算法通过在获取缓冲区时使用循环等待(P操作),但一旦获取成功,就不需要再次重试,因为进程获得了资源的拥有权。
  • 无不必要唤醒:PV算法使用信号量来唤醒等待资源的进程,确保只有当资源可用时才会唤醒等待进程,避免了不必要的唤醒。
  • 缓存效果:PV算法确保每个缓冲区只有一个进程可以拥有,因此不会出现多个进程竞争相同的缓冲区的情况,提高了缓存效果。
  • 无死锁和饥饿:PV算法通过使用信号量来管理资源的分配和释放,确保不会出现死锁和饥饿的情况。每个进程都有机会获取资源,并且一旦资源可用,等待的进程将被唤醒。

二、ChatGpt提问




三、实践及代码托管

pv算法简单实践:

代码已托管至gitee,链接:https://gitee.com/wang-yuxuan333/123.git
具体详见buffer.txt

四、问题及解决

源代码缺乏可验证效果,询问ChatGpt后获得思路,在函数中添加输出。

标签:缓存,PV,信息安全,第十二章,笔记,进程,算法,bp,缓冲区
From: https://www.cnblogs.com/wyx235300/p/17708826.html

相关文章

  • [CTF/Web] PHP 反序列化学习笔记
    Serialize&unserialize这两个方法为PHP中的方法,参见serialize和unserialize的官方文档.以下内容中可能存在字段,属性,成员三个名词误用/混用,但基本都表示属性文章仍在完善之中,SESSION反序列化漏洞要学废了入门我们先看看方法的序列化之后的字符串的......
  • 20211104李宜时学习笔记10
    块设备I/O和缓冲区管理学习笔记1.块设备I/O缓冲区定义与作用:解释块设备I/O缓冲区的基本概念,及其在数据传输中的作用。工作原理:描述数据如何从应用程序通过缓冲区传输到块设备,反之亦然。2.UNIXI/O缓冲区管理算法基本算法:介绍UNIX系统中用于管理I/O缓冲区的常见算法。效......
  • 第十二章学习笔记
    第十二章学习笔记摘要本章讨论了块设备I/O和缓冲区管理;解释了块设备I/O的原理和I/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之处;还利用信号量设计了新的缓冲区管理算法,以提高1/O缓冲区的缓存效率和性能;块设备I/O缓冲区I/O缓冲的基本原理非常......
  • 第十一周学习笔记(学习笔记10)
    〇、思维导图一、知识总结解释块设备I/O的原理和I/O缓冲的优点介绍Unix的缓冲区管理算法利用信号量设计新的缓冲区管理算法,以提高I/O缓冲区的缓存效率和性能介绍简单的PV算法及其特点基本概念读写普通文件的算法依赖于两个关键操作,即get_block和put_block,这两个操作将磁......
  • 02深度学习笔记
    1.二元分类一些基本符号含义:输入一幅以特征向量x表示的图像,预测对应的输出的y(0or1)单个样本(x,y)n(x)特征向量,y训练结果m表示训练集样本总数,{(x(1),y(1)),(x(2),y(2))...,((x(m),y(m))}M=M(train)训练集m(test)测试集样本总数X矩阵n(x)*m维的矩阵(Python)X.sharp得到矩阵......
  • 大数据应用算法复习笔记
    许我人间一两风,吹散十万八千梦"余幼时即嗜code,家贫,无computer以观,每假借于电脑之家,拆板以刻,计日以还。既加冠,益慕算法之道,又患无cpp,java以游,遂至北理工,观此ppt。当余之读ppt也,负箧曳屣,行无暖气之中教中,穷冬烈风,银杏叶深数尺,面庞皲裂而不知。至舍,四支僵劲不能动,吾自持汤沃灌,以衾......
  • java反序列化----CC5利用链学习笔记
    java反序列化----CC5利用链学习笔记目录java反序列化----CC5利用链学习笔记环境配置利用链TiedMapEntryBadAttributeValueExpException参考文章环境配置jdk8u(无java版本要求)pom.xml中写入<dependency><groupId>commons-collections</groupId>......
  • 学习笔记10
    块设备I/O和缓冲区管理块设备I/O缓冲区I/O缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓冲区存在并且包含有效数据,那么它只需从缓冲区中读取数据,而无......
  • 学习笔记10
    第12章块设备I/O和缓冲区管理1.块设备I/O缓冲区1.缓冲区的作用:缓冲区在内存中缓存数据,减少了直接磁盘操作的次数,从而提高了系统的吞吐量。2.缓冲区的类型:在Unix/Linux中,有多种类型的缓冲区,例如:全缓冲:在这种缓冲区中,所有的I/O操作都在内存中完成,直到写入或读取一个......
  • 第十一周Linux教材第十二章学习笔记——块设备I/O和缓冲区管理
    块设备I/O和缓冲区管理本章讨论了块设备1/O和缓冲区管理;解释了块设备1/O的原理和T/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之处;还利用信号量设计了新的缓冲区管理算法,以提高1/O缓冲区的缓存效率和性能;表明了简单的PV算法易于实现,缓存效果好,不存在死锁和饥饿问题;还......