操作系统 | 学习笔记 | | 王道 | 5.2 设备独立软件

news2024/9/21 0:42:46

5.2 设备独立性软件

IO核心子系统

img

image-20240920104214188

磁盘IO也属于IO调度问题

5.2.1 与设备无关的软件

与设备无关的软件是I/O系统的最高层软件,它的下层是设备驱动程序。

  • 设备保护:
    • 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)
    • 在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。
5.2.2 高速缓存与缓冲区

img

  1. 磁盘高速缓存(Disk Cache)

    操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对访问高速缓存要比访问原始磁盘数据更为高效。

    磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器,而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

    • 高速缓存在内存中分为两种形式:
      • 一种是在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定
      • 另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享。
  2. 缓冲区(Buffer)

    • 概念:缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。

      • 硬件做缓冲区:使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)
      • 内存做缓冲区:一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区
    • 作用

      • 缓和CPU与I/O设备之间速度不匹配的矛盾
      • 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
      • 解决数据粒度不匹配的问题
      • 提高CPU与I/O设备之间的并行性
      • image-20240920111032379
    • 单缓冲

      若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。

      image-20230921143949738

      image-20230921141924797

      注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

      这句话的意思应该是读缓冲区和写缓冲区都是加了PV的,是互斥的,写要一口气写满,读要一口气读完

      设块设备输入缓冲区时间为T,缓冲区传送至工作区时间为M,CPU处理工作区时间为C:

      • 若T>C,从初始状态到下一个开始状态,整个过程用时为M+T
      • 若T<C,从初始状态到下一个开始状态,整个过程用时为M+C

      结论:故单缓冲区处理每块数据的用时为 m a x ( C , T ) + M max(C,T)+M max(C,T)+M

      若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。

    • 双缓冲

      若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区。

      image-20230921143131283

      img

      双缓冲题目中,假设初始状态为;工作区空,其中一个缓冲区满,另一个缓冲区空

      • 若T>C+M,则处理一块数据的平均用时为T
      • 若T<C+M,意味着输入数据块速度要比处理机处理数据块速度更快,处理一个数据块的平均耗时为C+M

      结论:采用双缓冲策略,处理一个数据块的平均耗时为 M a x ( T , C + M ) Max(T,C+M) Max(T,C+M)

      使用单双缓冲区在通信时的区别

      image-20230921144605057

      若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。

      若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。

    • 循环缓冲

      将多个大小相等的缓冲区链接成一个循环队列。

      注:上图中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区。

    • 缓冲池(这个还是看看视频的动画吧,不然太难记了)

      缓冲池由系统中共用的缓冲区组成。

      这些缓冲区按使用状况可以分为:

      • 空缓冲队列
      • 装满输入数据的缓冲队列(输入队列)
      • 装满输出数据的缓冲队列(输出队列)

      根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区

      • 用于收容输入数据的工作缓冲区(hin)
      • 用于提取输入数据的工作缓冲区(sin)
      • 用于收容输出教据的工作绥冲区(hout)
      • 用于提取输出数据的工作缓冲区(sout)

      工作过程:

      • ① 输入进程请求输入数据

        从空缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin)。冲满数据后将缓冲区挂到输入队列队尾

      • ② 计算进程想要取得一块输入数据

        从输入队列中取得一块冲满输入数据的缓冲区作为“提取输入数据的工作缓冲区(sin)”。缓冲区读空后挂到空缓冲区队列

      • ③ 计算进程想要将准备好的数据冲入缓冲区

        从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)”,数据冲满后将缓冲区挂到输出队列队尾

      • ④ 输出进程请求输出数据

        从输出队列中取得一块冲满输出数据的缓冲区作为“提取输出数据的工作缓冲区(sout)”。缓冲区读空后挂到空缓冲区队列

书上有关于高速缓存和缓冲池的对比,可以看看

5.2.3 设备的分配与回收

img

设备分配时应考虑的因素

img

image-20240920123151211

设备分配常用的算法:1、先来先服务算法 2、最高优先级算法

  1. 设备分配概述

    设备分配是指根据用户的I/O请求分配所需的设备。分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。

    从设备特性来看,分为以下三种设备:

    • 独占式使用设备。进程分配到独占设备后,便由其独占,直至该进程释放该设备。
    • 分时式共享使用设备。对于共享设备,可同时分配给多个进程,通过分时共享使用。
    • 以SPOOLing方式使用外部设备。SPOOLing技术实现了虚拟设备功能,可以将设备同时分配给多个进程。这种技术实质上就是实现了对设备的I/O操作的批处理。
  2. 设备分配的数据结构

    设备分配依据的主要数据结构有设备控制表(DCT)控制器控制表(COCT)通道控制表 (CHCT)系统设备表(SDT),各数据结构功能如下。

    • 设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况

      img

      系统会根据阻塞原因的不同,将进程PCB挂到不同的阻塞队列中

    • 控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。

      img

    • 通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。

      img

    • 系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。

      image-20230921152258475

    设备、控制器、通道之间的关系

    image-20240920123838479

  3. 设备分配的策略

    • 设备分配原则。设备分配应根据设备特性、用户要求和系统配置情况。既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备隔离开。

    • 设备分配方式。设备分配方式有静态分配和动态分配两种。

      • ①静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源。主要用于对独占设备的分配,它在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器。

        静态分配方式不会出现死锁,但设备的使用效率低。

      • ②动态分配:进程运行过程中动态申请设备资源。在进程执行过程中根据执行需要进行。

        这种方式有利于提高设备利用率,但若分配算法使用不当,则有可能造成进程死锁。

    • 设备分配算法。常用的动态设备分配算法有先请求先分配、优先级高者优先等。

  4. 设备分配的安全性

    设备分配的安全性是指设备分配中应防止发生进程死锁。

    • 安全分配方式

      • 为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。一个时段内每个进程只能使用一个设备。
      • 优点:破坏了“请求和保持”条件,不会死锁
      • 缺点:对于一个进程来说,CPU和I/O设备只能串行工作
    • 不安全分配方式

      进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞。一个进程可以同时使用多个设备。

      • 优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进
      • 缺点:有可能发生死锁(死锁避免、死锁的检测和解除)
  5. 设备分配的步骤

    • 步骤

      • ① 根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数),用设备标识符(物理设备名)和进程提供的物理设备名进行比较
      • ② 根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程,查看状态是否空闲。
      • ③ 根据DCT里面存的指针找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
      • ④ 根据COCT里面存的指针找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

      注:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送

    • 缺点

      • ①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程
      • ②若换了一个物理设备,则程序无法运行
      • ③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
  6. 设备分配步骤的改进

    改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名。

    这是为了实现设备的独立性:用户在编程时使用的设备与实际设备无关。

    • 逻辑设备表(LUT)

      逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系。

      某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项。

      如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址。

      • 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统
      • 每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统
    • 步骤

      • ① 根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)
      • ② 查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项。
      • ③ 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
      • ④ 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程

      image-20240920125039856

5.2.4 SPOOLing技术(假脱机技术)

img

  1. 概念

    • 脱机技术:脱离主机的控制进行的输入/输出操作。

      批处理阶段引入了脱机输入/输出技术(用磁带完成),在外围控制机的控制下,慢速输入设备的数据先被输入到更快速的磁带上。之后主机可以从快速的磁带上读入数据,从而缓解了速度矛盾。

    • SPOOLing技术:“假脱机技术”,又称“SPOOLing技术”,用软件的方式模拟脱机技术。

      要实现SPOOLing技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程”

  2. 原理

    • 输入井和输出井
      • 在磁盘上开辟出两个存储区域一一“输入井”和“输出井”
      • ”输入井”模拟脱机输入时的磁带,用于收容I/O设备输入的数据
      • “输出井”模拟脱机输出时的磁带,用于收容用户进程输出的数据
    • 输入进程和输出进程
      • “输入进程”模拟脱机输入时的外围控制机
      • “输出进程”模拟脱机输出时的外围控制机
    • 输入缓冲区和输出缓冲区
      • 在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中
      • 在输出进程的控制下,“输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上
      • 注意,输入缓冲区和输出缓冲区是在内存中的缓冲区
  3. 预读和滞后写

    • 预读(提前读):

      如果采用的顺序访问方式对文件进行访问,便可预知下一次要读的盘块。此时可采用预读策略,即在读当前块的同时,也将下一个盘块提前读入内存缓冲区,这样在访问下一个盘块时就不需要再启动磁盘,从而提升磁盘I/O速度。

    • 滞后写(延迟写)

      滞后写是指缓冲区A中的数据本应立即写回磁盘,但考虑到其中的数据在不久之后有可能再次被访问,因此并不会立即把A中的数据写回磁盘,而是将缓冲区A挂到空闲缓冲区队列。如果有别的进程申请使用该缓冲区时,才把A中的数据写回磁盘。这样做的好处是,只要缓冲区A仍在队列中,任何访问该数据的进程,都可以直接读出其中的数据而不必访问磁盘。因而这种方式也可以减少磁盘I/O次数,改善性能。

  4. 共享打印机的原理分析

    SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。

    image-20230921163421824

    • 当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:
      • 1)在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中
      • 2)为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。

    当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务。

    虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。

5.2.5 设备驱动程序接口

要求每个设备驱动程序与操作系统之间都有着相同或相近的接口。这样会使得添加一个新设备驱动程序变得很容易,同时也便于开发人员编制设备驱动程序。

对于每种设备类型,例如磁盘,操作系统都要定义一组驱动程序必须支持的函数。

与设备无关的软件还要负责将符号化的设备名映射到适当的驱动程序上。

在UNIX和Windows中,设备是作为命名对象出现在文件系统中的,因此针对文件的常规保护规则也适用于I/O设备。系统管理员可以为每个设备设置适当的访问权限。

5.2.6 本节小结

1)当处理机和外部设备的速度差距较大时,有什么办法可以解决问题?

    可采用缓冲技术来缓解CPU与外设速度上的矛盾,即在某个地方(一般为主存)设立一片缓冲区,外设与CPU的输入/输出都经过缓冲区,这样外设和CPU就都不用互相等待。

2)什么是设备的独立性?引入设备的独立性有什么好处?

    设备独立性是指用户在编程序时使用的设备与实际设备无关。一个程序应独立于分配给它的某类设备的具体设备,即在用户程序中只指明IO使用的设备类型即可。

    设备独立性有以下优点:①方便用户编程。②使程序运行不受具体机器环境的限制。③便于程序移植。

错题总结或需要多加注意的点

1.因为CPU速度比IO设备高很多,缓冲技术的缓冲区缓冲池通常在主存中建立

2.单双缓冲通信时都可以实现数据的双向传输,只是单不能在同一时刻而双可以

3.如果IO比CPU快很多,那么缓冲区就没必要设置

4.缓冲区管理者着重需要考虑的问题是实现进程访问缓冲区的同步,因为缓冲区是一种临界资源,要互斥的进行访问

5.设备分配程序为进程分配设备的过程是:先分配设备,再分配设备控制器,最后分配通道

6.单机中最重要的是CPU资源,要提高单机资源利用率优先提高CPU资源利用率。

7.SPOOLing技术主要目的是提高独占设备的利用率

8.SPOOLing技术需要内存空间和磁盘空间,不需要外围计算机支持

9.SPOOLing包含的三部分:

​ 1.输入井输出井,由预输入程序管理

​ 2.输入和输出缓冲区,由井管理程序管理

​ 3.输入进程和输出进程,由缓输出程序管理

10.独享设备采用静态分配,共享设备采用动态分配

11.向设备寄存器写命令是设备驱动程序完成的

12.驱动程序仅有一部分是汇编语言编写,剩下的都是高级语言

13.对IO设备传回的数据的分析或缓冲是由操作系统或者进程完成的不是设备驱动程序

14.设备驱动程序的处理过程:

​ 1.将抽象要求转化为具体要求

​ 2.对服务请求进行校验

​ 3.检查设备的状态

​ 4.传送必要的参数

​ 5.启动IO设备

15.SPOOLing技术是以多道程序设计技术的支持

16.更换物理设备后不用必须修改访问该设备的应用程序,而是只需要修改驱动程序即可

17.初始化设备是由驱动程序控制完成的

18.设备分配需要考虑:

​ 1.设备的类型

​ 2.设备的访问权限

​ 3.设备的占用状态

​ 4.逻辑设备与物理设备的映射关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BUUCTF-MISC-隐藏的钥匙

下载题目文件&#xff0c;获得了一张格式为jpg的路飞图片 按照习惯&#xff0c;首先使用十六进制编译器打开文件&#xff0c;这里我使用winhex打开文件 首先考虑有没有flag直接隐写在文件中&#xff0c;按照图示步骤查找flag字段 我们查到了flag&#xff0c;通过经验和图中base…

[Python]案例驱动最佳入门:股票分析 Python数据分析与可视化实战

在股票市场中&#xff0c;价格波动和投资决策紧密相连。通过数据分析&#xff0c;投资者可以识别市场趋势、价格波动背后的规律&#xff0c;并做出明智的投资决策。Python凭借其强大的数据处理和可视化功能&#xff0c;在金融市场分析中被广泛应用。本文将通过一个假设的股票市…

java踩坑

1.mybatis在idea可以正常运行&#xff0c;但是打jar包后&#xff0c;就报链接超时&#xff0c;可能是参数设置有问题&#xff0c;但是idea自动忽略了。 出问题的配置&#xff1a;&#xff08;圈出来的地方乱码了&#xff0c;idea有纠错能力&#xff0c;它自动调整为正确的&…

three.js shader 实现天空中白云

three.js shader 实现天空中白云 预览&#xff1a; https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idwhiteCloud 更多案例 可见 预览&#xff1a; https://threehub.cn import * as THREE from "three"; import { OrbitControls …

web基础—dvwa靶场(十二)JavaScript Attacks

JavaScript Attacks (前端攻击) 本章节中的攻击旨在帮助您了解如何在浏览器中使用 JavaScript 以及如何对其进行操作&#xff0c;攻击可以通过分析网络流量来实现&#xff0c;但这不是本章节的重点而且可能要困难得多。 只需提交单词 “success” 即可攻击成功&#xff0c;显然…

开石开放式耳机怎么样?南卡、开石、声阔开放式耳机测评

​作为一名多年的数码博主&#xff0c;我本人也是个耳机发烧友&#xff0c;我最近注意到数码圈特别是蓝牙耳机圈中&#xff0c;有一种耳机特别火&#xff0c;叫开放式耳机&#xff0c;这类耳机的佩戴舒适度是非常高的&#xff0c;这也激起了我对这类耳机的兴趣&#xff0c;因此…

感知笔记4:YOLO 3D 物体定位

如何在 ROS 中使用 YOLO 如何在 2D 中检测人和大象如何在 3D 中检测人和大象 有许多可用的深度学习库。您可能听说过&#xff1a;Keras、TensorFlow 和 Darknet。 在这里我们将使用 Darknet&#xff0c;因为它实现了 YOLOv3&#xff0c;这是一个对象检测模型。它非常快&…

jdk版本更换以及遇到的问题略谈(以jdk1.8和jdk11为例)

目录 在我看来 遇到的问题 原因以及解决方法 方法一&#xff1a;禁止误改误删 方法二&#xff1a;bat文件驱动运行 方法三&#xff1a;cmd命令 方法四&#xff1a;修改注册表&#xff08;不推荐&#xff09; 最近在进行漏洞复现&#xff08;shiro550&#xff09;的时候&…

无人机如何突破高海拔高寒飞行环境?

无人机在突破高海拔高寒飞行环境方面&#xff0c;需要解决一系列技术难题和挑战。以下是一些主要的技术手段和策略&#xff1a; 1. 无人机平台设计与优化 增强机体结构&#xff1a;采用轻质高强度的材料&#xff0c;如碳纤维、复合材料等&#xff0c;减轻机身重量&#xff0c…

决策树算法中篇

手动计算实现决策树分类 数据整合 X[真实用户] y X 计算未划分信息熵 s X[真实用户] p s.value_counts()/s.size (p * np.log2(1/p)).sum() 按照日志密度进行划分 x X[日志密度].unique() x.sort() # 如何划分呢&#xff0c;分成两部分 for i in range(len(x) - 1):sp…

【目标检测论文必备】通俗易懂地讲解用绿色、蓝色、红色框可视化描述YOLO模型权重对于单个图片的训练效果(TP、FP、FN)

可视化步骤 一、生成自定义权重对图片的预测类别坐标信息二、创建需要预测的文件夹三、可视化运行 一、生成自定义权重对图片的预测类别坐标信息 新建脚本文件/path/to/your/ultralytics/savetxt.py放入对应参数运行会得到一个个独立的/path/to/your/runs/detect/output/outpu…

移动技术开发:简单计算器界面

1 实验名称 简单计算器界面 2实验目的 掌握基本布局管理器的使用方法和基本控件的使用方法&#xff0c;以及事件监听处理的使用方法 3 实验源代码 布局文件代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:and…

2024年港澳台华侨生联考分数线继续更新来啦

导读 在最近的一系列分享中&#xff0c;我们和大家一同分享了2024年港澳台华侨生联考的分数线。今天我们继续和大家一起分享一些2024年港澳台联考的高校录取分数线吧&#xff01; 首都师范大学 首都师范大学和首都医科大学作为被低估的两所高校&#xff0c;这两年的分数线也是…

web基础—dvwa靶场(十)XSS

XSS(DOM) 跨站点脚本&#xff08;XSS&#xff09;攻击是一种注入攻击&#xff0c;恶意脚本会被注入到可信的网站中。当攻击者使用 web 应用程序将恶意代码&#xff08;通常以浏览器端脚本的形式&#xff09;发送给其他最终用户时&#xff0c;就会发生 XSS 攻击。允许这些攻击成…

Linux ubuntu debian系统安装UFW防火墙图形化工具GUFW

GUFW是UFW的图形化前端&#xff0c;可以通过以下命令安装&#xff1a; sudo apt install gufw安装成功后&#xff0c;可以通过应用程序菜单启动GUFW&#xff0c;在图形界面中&#xff0c;可以方便地添加、修改和删除规则&#xff0c;查看状态和日志。

【数据结构取经之路】图解红黑树

目录 前言 红黑树的概念 红黑树的性质 红黑树结点的定义 左右旋动图 红黑树的插入分析 红黑树的插入代码 红黑树与AVL-tree比较 红黑树的应用场景 前言 AVL-tree之外&#xff0c;另一个颇具历史且被广泛使用的平衡二叉搜索树是红黑树(RB-tree)&#xff0c;这名字听起来…

码头童话,“丈量”行业数智化转型

作者 | 曾响铃 文 | 响铃说 一箱车厘子从地球正对的另一边远渡重洋来到中国&#xff0c;而一旦到达&#xff0c;5个小时内它就能变成北京、天津、河北、河南等区域老百姓果盘里的美味。 这一幕&#xff0c;来自央视联合华为制作发布的《新智中国说-谈智一会间》第一期“码头…

PHP邮件发送教程:如何用PHP发送电子邮件?

php邮件怎么实现发送电子邮件&#xff1f;php怎么给邮箱发邮件&#xff1f; PHP作为一种广泛使用的服务器端脚本语言&#xff0c;提供了多种方法来实现电子邮件的发送。AokSend将详细介绍如何使用PHP邮件功能来发送电子邮件&#xff0c;帮助开发者轻松实现这一重要功能。 PHP…

30道常见的软件测试面试题(含答案+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、什么项目适合做自动化测试&#xff1f; 关键字&#xff1a;不变的、重复的、规范的 1&#xff09;任务测试明确&#xff0c;需求不会频繁变动 2&#xff09;项…

vulnhub靶场 DC-3

地址: https://download.vulnhub.com/dc/DC-3-2.zip 开启NAT模式 namp只扫到了一个端口 打开网页有一个登录的页面 目录扫描一下,可以找到一个 后台登录界面 看一下指纹信息 joomla cms 网上搜一下可以发现存在一个JoomScan工具 在kali上面安装一下 apt install joomscan …