当前位置: 首页 > news >正文

计算机操作系统重点概念整理-第六章 输入输出I/O管理【期末复习|考研复习】

第六章 输入输出I/O管理【期末复习|考研复习】

计算机操作系统系列文章传送门:
第一章 计算机系统概述
第二章 进程管理
第三章 进程同步
第四章 内存管理
第五章 文件管理
第六章 输出输出I/O管理


文章目录

  • 第六章 输入输出I/O管理【期末复习|考研复习】
  • 前言
  • 六、输入输出I/O管理
    • 6.1 I/O设备
    • 6.2 I/O控制器的功能和组成
      • 6.2.1 I/O控制器的组成
      • 6.2.2 I/O控制器的功能
    • 6.3 I/O控制方式
      • 6.3.1 程序直接控制
      • 6.3.2 中断驱动方式
      • 6.3.3 DMA方式(Direct Memory access)直接存储器存取
      • 6.3.4 通道控制方式
      • 6.3.5 四种方式总结
    • 6.4 I/O软件层次结构
    • 6.5 缓冲区管理
      • 6.5.1 缓冲区含义和作用
      • 6.5.2 单缓冲
      • 6.5.3 双缓冲
      • 6.5.4 循环缓冲区和缓冲池
      • 6.5.5 高速缓存和缓冲区的区别
    • 6.6 设备的分配与回收
      • 6.6.1 设备分配的数据结构
      • 6.6.2 设备分配的步骤
      • 6.6.3 改进步骤
    • 6.7 SPOOLing技术
      • 6.7.1 输入输出井和输入输出缓冲区
      • 6.7.2 输入进程和输出进程
      • 6.7.3 SPOOLing技术的过程
  • 结语


前言

给大家整理了一下计算机操作系统中的重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王道的计算机操作系统和西电的计算机操作系统。


六、输入输出I/O管理

6.1 I/O设备

I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
按传输速率分类分为低速设备:键盘、鼠标;中速设备:行式打印机、激光打印机;高速设备:磁带机、磁盘机、光盘机等。
按信息交换的单位分类:块设备和字符设备。信息存储以数据块为单位表则是块设备,属于有结构设备,如磁盘。字符设备其传输的单位是字符,属于无结构类型,如交互式终端机打印机等,在输入输出时采用中断驱动方式。

6.2 I/O控制器的功能和组成

6.2.1 I/O控制器的组成

在这里插入图片描述

6.2.2 I/O控制器的功能

1、接收和识别CPU发出的指令(read/write。I/O控制器中控制寄存器来存放参数和命令);2、向CPU报告设备的状态(记录在状态寄存器中。1表示空闲,0表示忙碌);3、数据交换(数据暂时存储在数据寄存器中用来供CPU暂存和取走);4、地址识别(区分各个寄存器)。

6.3 I/O控制方式

6.3.1 程序直接控制

计算机从外部设备读取数据到存储器,每读一个字的数据。对读入的每一个字,CPU都要对外设状态进行循环检查,直到确定该字已经在I/O控制器的数据寄存器中。
写的过程:CPU通过控制线发出I/O指令,通过地址线发出要操纵的是哪个设备,通过数据总线将要输出的数据放入到I/O控制器中的数据寄存器中,另外要注意CPU指令中的参数也是通过数据总线放入到控制器的控制寄存器中.CPU也会从控制器中的状态寄存器读出设备此时的状态(例:空闲还是被占用).之后I/O逻辑通过与设备的接口将CPU送过来的数据输出到相应的设备中.数据的流向:
读:I/O设备-》CPU-》内存;写:内存-》CPU》I/O设备
CPU的干预频率:一直轮询。数据传送的单位:一个字
优点:简单;缺点:CPU和I/O只能串行工作,CPU要一直轮询检查,长期处于忙等状态,CPU利用率低。

6.3.2 中断驱动方式

引入中断机制,因此在CPU发出读或写命令时,可将等待I/O的进程阻塞,先切换别的进程执行,当I/O完成后控制器会向CPU发出一个中断信号,CPU检测到中断信号后会保存当前进程的运行环境,去转而执行中断处理程序处理该中断,处理中断过程中CPU从I/O控制器读一个字的数据传输到CPU寄存器,再写入主存。接着CPU恢复等待I/O的进程的运行环境然后继续执行。
读:I/O设备-》CPU-》内存;写:内存-》CPU》I/O设备
CPU的干预频率:I/O操作开始前和完成后要CPU介入,等待I/O时CPU切换别的进程执行。数据传送的单位:一个字
优点:CPU和I/O可以并行工作,CPU利用率提升;缺点:I/O设备和内存之间的传输都要经过CPU,频繁的中断处理会消耗较多的CPU时间。

6.3.3 DMA方式(Direct Memory access)直接存储器存取

主要用于块设备的I/O控制
数据的传送单位时块。数据的流向是从设备直接存放内存或者从内存直接到设备不需要CPU作为中间。仅在传送一个或多个数据块的开始和结束时才需要CPU干涉。在开始时CPU指明此次要进行的操作,如读操作并说明要读入多少数据,存放在内存中什么位置以及数据在外部设备上的地址,如磁盘上的地址。DMA控制器会根据CPU提出的要求完成读写工作,整块数据传输完成后才向CPU发出中断信号。
DMA中设置四类寄存器
在这里插入图片描述

优点:数据传输以块为单位,CPU介入频率降低,数据传输效率增加,CPU和I/O设备的并行性提高;缺点:如果要读多个离散的数据块,要多次中断才能完成。

6.3.4 通道控制方式

解决DMA方式连续存储的问题。通道是一种硬件,简化版CPU,可以识别的执行一系列通道指令。
CPU干预的频率:极低。通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读写后才发出中断信号请求CPU干预。数据传输的单位:一组数据块。数据的流向在通道的控制下进行读写分别由I/O设备到内存和内存到I/O设备。
优点CPU、通道、I/O设备可并行工作,资源利用率高。缺点实现复杂需要专门的通道硬件支持。

6.3.5 四种方式总结

在这里插入图片描述

6.4 I/O软件层次结构

在这里插入图片描述
用户层I/O软件:实现与用户交互的接口,用户可以直接调用在用户层提供的与I/O操作相关库函数对设备进行操作。(假脱机技术-SPOOLing技术)
以下四层为I/O软件的层次:以下三层为I/O系统I/O核心子系统。
设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护、设备分配与释放等,同时为设备管理和数据传输提供必要的存储空间。设备独立性使应用程序独立于具体使用的物理设备。为实现设备独立性而引入逻辑设备和物理设备这2个概念,在应用程序中使用逻辑设备名来请求使用某类设备,而在系统执行时必须将逻辑设备并映射成物理设备并使用。使用逻辑设备名的好处:1、增加设备分配的灵活性;2、易于实现I/O重定向,所谓I/O重定向是指用于I/O操作的设备可以更换而不改变应用程序。为了实现设备独立性必须在驱动程序上设置1层设备独立性软,设备独立性软件的主要功能可以分为以下2个方面:1、执行所有设备的公有操作;2、向用户层提供统一的接口(read/write调用)。(I/O调度、设备保护、设备分配与回收、缓冲区管理 )
设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序,处理完并恢复被中断进程的现场后,返回到被中断的进程。
硬件设备:IO设备通常包括一个机械部件和电子部件,为了达到设计的模块性和通用性,一般将其分开电子部件称为设备控制器或适配器,通常是电路板,而机械部件则是设备本身。

6.5 缓冲区管理

6.5.1 缓冲区含义和作用

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区。
作用:1、缓和CPU与I/O设备之间速度不匹配的矛盾。2、减少CPU的中断频率,放宽对CPU中断响应的时间限制。3、解决数据粒度不匹配的问题。4、提高CPU与I/O设备之间的并行性。

6.5.2 单缓冲

当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
在这里插入图片描述

处理一块数据平均时间Max(C,T)+M

6.5.3 双缓冲

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

6.5.4 循环缓冲区和缓冲池

循环缓冲区:将多个大小相等的缓冲区链接成一个循环队列。
缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)。又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout) 、用于提取输出数据的工作缓冲区(sout)。
在这里插入图片描述

6.5.5 高速缓存和缓冲区的区别

在这里插入图片描述

6.6 设备的分配与回收

从设备特性来看采用下述3种使用方式的设备分别称为独占设备、共享设备和虚拟设备。独占使用设备:在申请设备时,若设备空闲则将其独占,不允许其他进程申请使用,直至设备被释放才允许其他进行申请使用,如打印机。分时共享设备:独占使用设备时,设备利用率很低,通过分时共享来提高利用率,如磁盘设备的I/O操作,每个进程的I/O请求可以通过分时来交替进行。以SPOOLing技术方式使用外部设备,即假脱机I/O技术,实质上是对I/O操作进行批处理。

6.6.1 设备分配的数据结构

设备分配依据的主要数据结构有设备控制表DCT ,控制器控制表COCT,通道控制表CHCT和系统设备表SDT。 设备控制表DCT,一个设备控制表就表征一个设备,而这个控制表中的表项就是设备的各个属性。设备控制器控制设备与内存交换数据而设备控制器又需要请求通道为他服务,因此每个控制器控制表COCT中必有一个表项存放指向相应通道控制表CHCT的指针,一个通道可为多个设备控制器服务,因此CHCT与COCT的关系是一对多的关系。系统设备表SDT,整个系统只有一张SDT,它记录已连接到系统中所有物理设备的情况,每个物理设备占一个表目。

6.6.2 设备分配的步骤

①根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程。
③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。
注∶只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可后动/O设备进行数据传送。
缺点:①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程。②若换了一个物理设备,则程序无法运行。③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待。
改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名。

6.6.3 改进步骤

为了提高设备分配的灵活性和设备的利用率方便实现IO重定向引入设备独立性,设备独立性是指应用程序独立于具体使用的物理设备。设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序。操作系统系统可以采用两种方式管理逻辑设备表(LUT) :
第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。

6.7 SPOOLing技术

为了缓和CPU的高速性能与I/O设备低速性之间的矛盾引入了脱机输入输出技术。该技术利用专门的外围控制器将低速I/O设备上的数据传输到高速磁盘上。

6.7.1 输入输出井和输入输出缓冲区

输入井和输出井是指在磁盘上开辟的2个存储区域:输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据;输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。输入缓冲区和输出缓冲区是在内存中开辟的2个缓冲区:输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井中,输出缓冲区是用于暂存从输出井送来的数据,以后再传送到输出设备上。

6.7.2 输入进程和输出进程

输入进程模拟脱机输入时的外围控制器将用户要求的数据从输入机通过输入缓冲再送到输入井。输出进程模拟脱机输出时的外围控制机把用户要求输出的数据先从内存送到输出井,待输出设备空闲时再将输出井中的数据经过输出缓冲区送到输出设备。

6.7.3 SPOOLing技术的过程

1、由输出进程在输出井中为之申请一个空闲磁盘块区并将要打印的数据送入其中;2、输出进程在为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中再将该表挂到请求打印队列上。
SPOOLling系统的主要特点有提高了I/O的速度,将独占设备改造为共享设备实现了虚拟设备功能。

结语

计算机操作系统的重点概念已经复习结束啦,菠菠萝宝祝大家期末高分,考研一战成硕,考上心仪的学校!=V=

相关文章:

计算机操作系统重点概念整理-第六章 输入输出I/O管理【期末复习|考研复习】

第六章 输入输出I/O管理【期末复习|考研复习】 计算机操作系统系列文章传送门: 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第六章 输入输出I/O管理【期末复习|考研复习】前言六、输…...

uniapp开发小程序—picker结合后台数据实现二级联动的选择

一、效果图 二、完整代码 <template><view><picker mode"multiSelector" change"bindMultiPickerChange" columnchange"bindMultiPickerColumnChange":value"multiIndex" :range"multiArray"><view c…...

React Swiper.js使用(详细版)3D聚焦特效,自定义导航按钮等

共用代码 import swiper/css import swiper/css/navigation import swiper/css/paginationimport { Navigation, Pagination, Scrollbar, A11y, Autoplay, EffectCreative } from swiper/modules;import { Swiper, SwiperSlide, } from swiper/react; 普通版本 重点&#xff…...

零基础Linux_23(多线程)线程安全+线程互斥(加锁)+死锁

目录 1. 线程安全 1.1 线程不安全前期 1.2 线程不安全原因 2. 线程互斥 2.1 加锁保护&#xff08;代码&#xff09; 2.2 锁的本质 3. 可重入对比线程安全 4. 死锁 4.1 死锁的必要条件 4.2 避免死锁 5. 笔试面试题 答案及解析 本篇完。 1. 线程安全 基于上一篇线程…...

【算法|贪心算法系列No.5】leetcode409. 最长回文串

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接---超详细教学

一&#xff0c;操作系统介绍 1.1.什么是操作系统 操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;是一种系统软件&#xff0c;它是计算机硬件和应用软件之间的桥梁。它管理计算机的硬件和软件资源&#xff0c;为应用程序提供接口和服务&#xff0c;并协…...

机器学习实验一:KNN算法,手写数字数据集(使用汉明距离)(2)

KNN-手写数字数据集&#xff1a; 使用sklearn中的KNN算法工具包&#xff08; KNeighborsClassifier)替换实现分类器的构建&#xff0c;注意使用的是汉明距离&#xff1b; 运行结果&#xff1a;&#xff08;大概要运行4分钟左右&#xff09; 代码&#xff1a; import pandas as…...

docker应用部署---nginx部署的配置

1. 搜索nginx镜像 docker search nginx2. 拉取nginx镜像 docker pull nginx3. 创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建nginx目录用于存储nginx数据信息 mkdir ~/nginx cd ~/nginx mkdir conf cd conf# 在~/nginx/conf/下创建nginx.conf文件,粘贴下…...

Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)

正文 SqlServer用三种方法来组织其分区中的数据或索引页&#xff1a; 1、聚集索引结构 聚集索引是按B树结构进行组织的&#xff0c;B树中的每一页称为一个索引节点。每个索引行包含一个键值和一个指针。指针指向B树上的某一中间级页&#xff08;比如根节点指向中间级节点中的…...

C++类对象反制机制实现_精简修改版

前几天写的类对象反射机制太烦锁了,今天写个修改版的,精简为两个类 一个是类的数据结构,另一个是类的父类对象,把所有操作类的方法都写到父类中 1.类的信息结构体 struct Field_Node {TCHAR m_name[20]; //字段名称TCHAR m_typeName[20]; // 字段类型名称size_t m_typeHashC…...

C#开发的IEnumerable接口

C#开发的IEnumerable接口 在前面分析中,我们会遇到下面这行代码: var refineries = self.World.ActorsWithTrait<IAcceptResources>() .Where(r => r.Actor != ignore && r.Actor.Owner == self.Owner && IsAcceptableProcType(r.Actor)) .Select…...

Redis详细安装教程

目录 一、Redis 的安装及启动停止1-1 下载 redis的压缩包1-2 开始解压 redis1-3 执行 make 命令编译1-4 启动 redis修改配置文件1-5 设置远程连接1-6 设置后台启动1-7 设置密码1-8 配置服务启动&#xff08;使用 systemctl 的方法&#xff09;启动 redis配置开机启动操作redis使…...

36基于matlab的对分解层数和惩罚因子进行优化

基于matlab的对分解层数和惩罚因子进行优化。蚁狮优化算法优化VMD,算术优化算法优化VMD&#xff0c;遗传优化算法优化VMD&#xff0c;灰狼优化算法优化VMD&#xff0c;海洋捕食者优化算法优化VMD&#xff0c;粒子群优化VMD&#xff0c;麻雀优化算法优化VMD&#xff0c;鲸鱼优化…...

【Flutter】自定义分段选择器Slider

【Flutter】ZFJ自定义分段选择器Slider 前言 在开发一个APP的时候&#xff0c;需要用到一个分段选择器&#xff0c;系统的不满足就自己自定义了一个&#xff1b; 可以自定义节点的数量、自定义节点的大小、自定义滑竿的粗细&#xff0c;自定义气泡的有无等等… 基本上满足你…...

【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《软件工程》

在软考中软件工程模块主要包含以下考点&#xff1a; 文章目录 软件过程模型&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;逆向工程&#x1f31f;基于构件的软件工程&#x1f31f;&#x1f31f;软件开发与软件设计与维护净室软件工程软件模型软件需求 软件过程模型&am…...

非遗主题网站的设计与实现基于PHP实现

包括源码参考论文 下载地址: https://juzhendongli.store/commodity/details/18...

YOLO目标检测——红外人员数据集【含对应voc、coco和yolo三种格式标签+划分脚本】

实际项目应用&#xff1a;红外热像仪进行安全监控数据集说明&#xff1a;红外人员检测数据集&#xff0c;真实场景的高质量图片数据标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo(txt)三种格式标签&#xff…...

C++项目——云备份-⑧-客户端各模块实现

文章目录 专栏导读1.客户端数据管理模块实现2.客户端文件检测模块实现3.客户端文件备份模块设计4.客户端文件备份模块实现 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿…...

分享一款基于 AI 的 Chrome 插件

最近使用大模型比较多&#xff0c;公司虽然提供了免费的 ChatGPT 但是需要跳转特定页面才能访问&#xff0c;比较麻烦&#xff0c;于是就想到是否可以开发一款类似于有道词典一样的 Chrome 插件&#xff0c;可以在任意页面使用&#xff0c;虽然市面上也有类似的插件&#xff0c…...

Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…...

第二证券:AIGC概念活跃,焦点科技、三维通信涨停,万兴科技大涨

AIGC概念24日盘中走势生动&#xff0c;到发稿&#xff0c;万兴科技、三态股份涨超10%&#xff0c;焦点科技、三维通讯、我国科传等涨停&#xff0c;中文在线涨超9%&#xff0c;果麦文明、新国都涨约7%。 消息面上&#xff0c;各大电商途径于10月18-24日先后发动“双11”大促或…...

7-4、S加减速转动实现【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍实现步进电机S曲线运动的代码 一、目标功能 实现步进电机转动总角度720&#xff0c;其中加减速各90 加速段&#xff1a;加速类型&#xff1a;S曲线   加速角度&#xff1a;角度为90   起步速度&#xff1a;30RPM&#xff0c;   终止速度&#x…...

RK3568-pcie接口

pcie接口与sata接口 pcie总线pcie总线pcie控制器sata控制器nvme设备sata设备nvme协议ahci协议m-key接口b-key接口RC模式和EP模式 RC和EP分别对应主模式和从模式,普通的PCI RC主模式可以用于连接PCI-E以太网芯片或PCI-E的硬盘等外设。 RC模式使用外设一般都有LINUX驱动程序,安…...

spring监听请求执行结束,移除当前ThreadLocal数据两种方法

在开发过程中&#xff0c;很多时候我们会使用ThreadLocal来临时缓存数据&#xff0c;当一次数据请求执行完成后需要主动执行释放当前ThreadLocal缓存数据资源&#xff0c;防止未能及时释放导致下一次访问时候ThreadLocal依然保持上一次缓存的数据。 spring提供两种方式去监听一…...

知识图谱--Jena基础操作和检索推理应用

在上一篇读书笔记中讲到知识图谱存储主要有基于开源的Jena方式和基于图数据库(Neo4j)方式,本次主要对Jena的基础操作和如何应用进行了实践总结,同时结合了D2R,将结构化数据转换成Jena可以加载的格式(即RDF,后缀是.nt),Apache Jena作为一种开源的Java语义网框架,主要功…...

GEE python——将GEE ASSETS中存储的影像或者矢量转化为数据格式XEE()

数据转换器是内置于 getPixels、computePixels、listFeatures 和 computeFeatures 中的客户端转换能力。通过指定兼容的文件格式,这些方法可以返回 Python 原生格式的数据,如用于栅格的结构化 NumPy 数组和用于矢量的 Pandas DataFrames 或 GeoPandas GeoDataFrames。对于矢量…...

Java集合框架:List、Set、Map类型及泛型详解

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…...

Ubuntu 安装 docker

一.添加Docker官方GPG密钥 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 如果出现&#xff1a; The program curl is currently not installed. You can install it by typing: sudo apt install curl 先安装 curl : sudo apt inst…...

BUUCTF zip伪加密 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;得到一个zip压缩包。 密文&#xff1a; 解题思路&#xff1a; 1、刚开始尝试解压&#xff0c;看到了flag.txt文件&#xff0c;但需要解压密码。结合题目&#xff0c;确认这是zip伪加密&#…...

p5.js 到底怎么设置背景图?

本文简介 点赞 关注 收藏 学会了 在 《p5.js 光速入门》 里我们学过加载图片元素&#xff0c;学过过背景色的用法&#xff0c;但当时没提到背景图要怎么使用。 本文就把背景图这部分内容补充完整&#xff0c;并且会提到在 p5.js 里使用背景图的一些注意点。 背景图的用法…...