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

计组+系统02:30min导图复习 存储系统

🐳前言

考研笔记整理,纯复习向,思维导图基本就是全部内容了,不会涉及较深的知识点~~🥝🥝

  • 第1版:查资料、画思维导图~🧩🧩

编辑: 梅头脑🌸

参考用书:王道考研《2024年 计算机组成原理考研复习指导》《2024年 操作系统考研复习指导》

参考视频:3.1_存储系统基本概念_哔哩哔哩_bilibili


🦮思维导图

  • 🌸思维导图为整理王道教材计组第3章 存储系统+操作系统第3章内存管理+操作系统第5.3章磁盘和固态硬盘,如果看不清的话,可以点赞博文🤘【哎,不点赞也行】,试试存到本地然后放大~
  • 🌸博文后面会以大纲的形式复述一遍,面向复习,不会写得很详细,且可能有误;如果想仔细了解知识点,或许可以考虑以下两种方式~
    • 王道咸鱼老师的视频:3.1_存储系统基本概念_哔哩哔哩_bilibili
    • 较为重要的内容有从网络找相关配图并给出原文链接,点击配图的链接可以传送到各位大佬博文,也很适合快速复习~
  • 🌸计算题目部分未标注来源的图是我自己画的,一张图1h+在琢磨,但很难保证正确性,欢迎小伙伴拍砖~

📇目录

🐳前言

🦮思维导图

📇目录

🐳存储器概述

🐋分类

🐋性能指标

🐋多级存储结构

🐳高速缓冲存储器

🐋技术原理:程序访问的局部性

🐋Cache

🐋快表【TLB】

🐋映射方式

🐋写策略

🐋替换算法

🐳主存储器

🐋硬件【计组】

🐚存储结构

🐚访问过程

🐚芯片引脚

🐚多模块存储器

🐚容量扩展

🐚计算小备注

🐋软件【系统】

🐚内存管理的功能

🐚进程运行的基本原理

🐚逻辑地址与物理地址

🐚进程的内存映像【32位】

🐚内存保护

🐚内存共享

🐚内存的分配与回收

🐳虚拟存储器

🐋基本概念

🐋工作流程

🐋请求分页存储管理

🐋页框分配

🐋页面置换算法

🐋抖动和工作集

🐋内存映射文件

🐳外部存储器

🐋磁盘存储器

🐋固态硬盘【SSD】

🐳计算题目

🐋cache

🐋主存

🐚地址码【16年】【20年】

🐚CPU平均每秒访存次数【12年】

🐚主存带宽【12年】

🐚访存时间【13年】

🐋辅存

🔚结语


  • 🐳存储器概述

    • 🐋分类

      • 作用层次
        • 高速缓冲存储器(Cache)
        • 主存储器(内存)
        • 辅助存储器(外存)
      • 存取方式
        • 随机存储器(RAM)
          • 数据存取:支持随机存取
          • 易失性存储器:断电后存储信息消失
          • 信息读取后完整性
            • 动态随机存储器(DRAM):存储元为栅极电容,信息读出时原存储信息被破坏,因此读出后需要以行为单位再生信息【例,主存】
            • 静态随机存储器(SRAM):存储元为双稳态触发器,信息读出时原存储信息不被破坏【例,Cache】
        • 只读存储器(ROM)
          • 数据存取:随机读取;早期不支持随机写入,目前可采用电擦除方式【例,EPROM、Flash存储器、固态硬盘SSD】也可反复重写,但写入速度很慢
          • 非易失性存储器:断电内容保留【例,BIOS的引导程序】
          • 备注:操作系统的引导程序在硬盘【ROM】,防止掉电后丢失;计算机启动后被引导至主存【RAM】,使其可以与CPU交互
        • 串行访问存储器
          • 顺序存取存储器(SAM):仅按某种顺序存取,不支持随机读写【例,磁带】
          • 直接存取存储器(DAM):介于顺序存取与随机存取,类似于索引存取【例,磁盘、光盘】
    • 🐋性能指标

      • 存储容量 = 存储字数 x 存储字长,存储字数表示存储器的地址空间大小,字长表示一次存取操作的数据量
      • 单位成本:总成本 / 总容量
      • 存储速度:数据的宽度 / 存储周期
    • 🐋多级存储结构

      • Cache-主存层:CPUCache【单位:字或字节】,CPU主存【单位:字或字节】,Cache主存【单位:块,可能为行、页、段等】
      • 主存-辅存层:主存辅存【单位:块,可能为行、页、段等】

      图源:计算机组成原理存储器的层次结构_存储器层级结构的原理-CSDN博客

  • 🐳高速缓冲存储器

    • 🐋技术原理:程序访问的局部性

      • 时间局部性:一旦一条指令被执行了,则在不久的将来它可能再次被执行【例,循环指令】
      • 空间局部性:一旦一个存储单元被访问,那么它附近的存储单元也很快被访问【例,顺序指令、数组】
        • 数组行优先存储【a[0][0],a[0][1]...】具备空间局部性
        • 数组列优先存储【a[0][0],a[1][0]...】不具备空间局部性
    • 🐋Cache

      • 映射方式:预测CPU在未来一段时间内欲访问的数据,按照映射关系,将存储器的数据块装入Cache的指定位置
      • 写策略:若访存地址可命中Cache,则转为Cache地址,在Cache内读写数据;若需修改Cache块数据,则需要写策略更改对应的主存内容
      • 替换算法:若访存地址未命中Cache,则访问主存,并将字块调入Cache,此时若主存已满,需要执行Cache块替换策略

      图源:Cache与主存之间的全相联映射,直接映射和组相联映射的区别

    • 🐋快表【TLB】

      • 描述:根据局部性原理,将部分页表存放在高速缓存器组成的快表(TLB)中
      • 映射方式:全相联映射或组相联映射,不支持直接映射
      • 数据结构
        • 有效位/装入位
        • 标记
          • 全相联映射时 标记=虚页号
          • 组相联映射时 虚页号的高位部分为标记,虚页号的低位为TLB组的组索引

      图源:内存管理 —— 快表TLB_快表和慢表-CSDN博客

    • 🐋映射方式

      • 全相联映射
        • 简介:主存中的每一块只能装入Cache中的唯一位置
        • 特点:非常灵活,实现复杂,标记速度慢,冲突率低,空间利用率高
        • 地址:标记+块内地址
      • 直接映射
        • 简介:主存中的每一块只能装入Cache中的任意位置
        • 特点:实现简单,不够灵活,冲突率高,空间利用率低
        • 映射关系:Cache 行号 = 主存块数 mod Cache总行数
        • 地址:标记+Cache块号+块内地址
          • 标记
            • 标记 = 主存块号 - Cache行号 = log(主存行数 / Cache行数) ,例如主存容量是Cache容量的4096倍,则标志位为log 4096 = 12bit
            • 标记 = 地址码长度 - Cache行号 - 块内地址,地址码长度由存储字长【或机器字长】、或主存容量决定
          • Cache行号:Cache行数决定,例如容量16KB、每行16B的Cache,其行数为16KB/16B = 1K,需要log 1K=10位行号
          • 块内地址:每行Cache包含的数据字段数+字长决定
            • 例1:Cache行为16B,按字节编址【寻址大小为1B】,需要log 16 =  4位块内地址号
            • 例2:Cache行为8个字,每个字32位,则行为8 x (32/8)B = 32B,按字节编址,需要log 32 =  4位块内地址号
      • 组相联映射
        • 简介:主存中的每一块只能装入Cache中的固定组的任意一行,即组间直接映射,组内全相联映射
        • 特点:选定适当的每组Cache行数量,可以使成本接近直接映射,性能接近全相联映射
        • 映射关系:Cache 组号 = 主存块数 mod Cache组数
        • 地址:标记+Cache组号+块内地址
          • 标记 = 地址码长度 - Cache组号 - 块内地址,地址码长度由存储字长【或机器字长】、或主存容量决定
          • Cache组号:Cache组数决定,例如容量128KB、每行16B的Cache,采用8位组相联,其行数为128KB/16B = 8K,其组数为8K/8 = 1K,需要log 1K=10位组号
          • 块内地址:每行Cache包含的数据字段数+字长决定

      图源:计算机组成原理cache的三种映像_组相联cache_李昕羽的博客-CSDN博客

    • 🐋写策略

      • Cache写命中
        • 全写法
          • 同时把数据写入Cache和主存;可保证数据的准确性,但增加了访存次数
          • 在Cache和主存之间增加写缓冲,CPU将数据写入Cache和写缓冲,写缓冲将内容写入主存,但频繁写时写缓冲会饱和溢出
        • 回写法
          • 只需要把数据写入Cache,只有Cache块被换出时才协会储存,Cache行需要增加脏位;减少了访存次数,但存在数据不一致的隐患
      • Cache写不命中
        • 写分配法
          • 加载主存的块到Cache中,更新这个Cache块
        • 非写分配法
          • 只写入主存,不进行调块
      • 搭配
        • 全写法+非写分配法【例,Cache块调换】
        • 回写法+写分配法【例,Cache块调换、页面调换】

      图源:计组之存储系统:8、Cache写策略-CSDN博客

    • 🐋替换算法

      • 随机算法【RAND】
        • 算法:随便选一个Cache块替换
        • 特点:实现简单,过于随意,命中率较低
      • 先进先出算法【FIFO】
        • 算法:优先淘汰最早进入内存的页面
        • 特点:实现简单,具有抖动现象,具体表述为所分配的物理块数增大而页故障数不减反增的现象
      • 最近最少使用算法【LRU】
        • 算法:设置访问字段记录页面被上次被访问的时间,优先淘汰最长时间未访问过的页面
        • 特点:性能较好,不具有抖动现象,但需要寄存器和栈的硬件支持
      • 最不常使用算法【LFU】
        • 算法:设置访问字段记录页面访问次数,优先淘汰访问次数最少的存储行
        • 特点:性能接近LRU算法,但实际效果不如LRU,因为计数器可能会是一个很大的数

       

      图源:计组之存储系统:Cache替换算法

  • 🐳主存储器

    • 🐋硬件【计组】

      • 🐚存储结构

        • 存储体(存储矩阵):存储单元的集合,通过行选择线、列选择线选择访问单元。存储体的相同行、列上的位同时被读出或写入
        • 地址译码器:将地址转换为译码输出线上的高电平,以便驱动相应的读写线路
        • I/O控制电路:控制被选中的单元【控制电路片选线CS】的读出或写入【控制电路读写线WE】,具有放大信息的作用以保证输出电信号稳定可靠【驱动器】
        • 片选控制信号:在多个芯片中,“选中”该存储字所在的芯片
        • 读/写控制信号:根据CPU给出的读命令或写命令,控制被选中的单元进行读写

        图源:主储存器的基本组成 - weblog

      • 🐚访问过程

        • CPU→数据→MDR【数据寄存器】,数据线的宽度与MDR的宽度相同
        • CPU→地址→MAR【地址寄存器】,地址线的宽度与MAR的宽度相同,决定了主存地址空间的最大可寻址范围
        • CPU→读写信号→控制电路
      • 🐚芯片引脚

        • 引脚最小数目 = 数据线 + 地址线 + 控制线
        • 数据线:根据芯片的存储单元位数决定
        • 地址线:根据芯片的存储单元数量决定
          • 若未采用地址复用技术,1024个存储单元(行32个 x 列32个),需要地址线:5(行地址线)+5(列地址线)= 10根
          • 若已采用地址复用技术,1024个存储单元(行32个 x 列32个),需要地址线:10/2(行、列地址线复用)= 5根
        • 控制线
          • 若未采用地址复用技术,控制线 = 片选线1根 + 读写控制线1【读写复用】或2根【读写独立】
          • 若已采用地址复用技术,控制线 = 行、列通选线2根 + 读写控制线1或2根,片选线的功能由通选线代替
        • 备注:DRAM默认采用地址引脚复用技术,以减少引脚数量
      • 🐚多模块存储器

        • 单体多字存储器:只有一个存储体,一次并行读出m个字,地址必须顺序排列在同一存储单元
        • 多体并行存储器
          • 高位交叉编址方式:模块内的地址是连续的,存取方式为串行存取,读取时间 = 访存次数 x 存储周期
          • 低位交叉编址方式:模块号=单元地址%模块数,模块流水线存取:读取时间 = 存储周期+(访存次数-1)x总线传输周期;充分流动时,读取时间=访存次数x总线传输周期

        图源:计算机组成原理

      • 🐚容量扩展

        • 位扩展法
          • 功能:数据线数与存储芯片位数不相等时,使用多个存储芯片扩充字长,使 CPU数据线数 = 存储芯片数据位数
          • 地址:采用8片8Kx1位的RAM芯片组成8Kx8位的存储器,此时字长8 = 1【每片1位】x8【8个芯片】
          • 连线:数据总线D0-D7【字长 8】、读写信号【读写,复用1根,独立2根】、地址总线A0-A12、片选信号【连接所有芯片】
        • 字扩展法
          • 功能:增加存储器中字的数量,而位数不变,增加片选信号,并联地址线、数据线、读写控制线
          • 地址:采用4片16Kx8位的RAM芯片组成64Kx8位的存储器,此时总地址长度16=2【片选地址为log 4=2】+14【片内字选地址为log 16K=14】
          • 连线:数据总线D0-D7【字长 8】、读写信号【读写,复用1根,独立2根】、地址总线A0-A13、片选信号A14-A15【log 4=2】、片选使能【控制选片开关】
        • 字位扩展法
          • 功能:既增加存储字的数量,又增加存储字长
          • 举例:采用8片16Kx4位的RAM芯片组成64Kx8位的存储器,每组2片【字4位→8位】,需要4组【位16K→64K】,总地址长度16=2【片选】+14【字选】
          • 连线:数据总线D0-D7【字长 8】、读写信号【读写,复用1根,独立2根】、地址总线A0-A13、片选信号A14-A15【log 4=2】、片选使能【控制选片开关】

        图源:计算机的存储系统,全方面、最详细_sam dam dam-CSDN博客

      • 🐚计算小备注

        • 内存的芯片数量
          • 内存位:内存区间000~400H【H是16进制】这种表示内存的位,16进制转2进制就是4x(16^2) = 2^10 =1K
          • 内存字:按字编址-32bit【假设为32位系统】,按半字编址-16bit【假设为32位系统】,按字节编址-8bit
          • 内存容量:内存字 x 内存位=1K【单元数量】x 32bit【单元长度,假设为按字编址】=4KB
        • 内存的芯片地址
          • 芯片地址=片选地址+片内地址,对于固定芯片,片选地址固定,片内地址从全0~全1浮动
          • 例:4个 64x8bit的芯片组成 256x8bit的存储器,每个芯片的片内地址数量为log 64 = 4,第2个芯片的片选地址为01,则地址范围 01 0000 ~ 01 1111,或10H~1FH
    • 🐋软件【系统】

      • 🐚内存管理的功能

        • 内存空间的分配与回收:存储器空间的分配与管理
        • 地址转换:多道程序环境下,程序中的逻辑地址与内存的物理地址不一致,需将逻辑地址转化为物理地址
        • 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存
        • 内存共享:允许多个进程访问内存的同一部分
        • 存储保护:保证各道作业在各自的存储空间内运行,互不干扰
      • 🐚进程运行的基本原理

        • 程序的链接与装入
          • 编译:由编译程序将用户源代码编译成若干目标模块
          • 链接:将编译后的一组模块及他们所需的库函数链接在一起,形成装入模块【形成逻辑地址】
          • 装入:由装入程序将装入模块装入内存运行【形成物理地址】

          图源:文件在高级操作系统环境正确装载执行_baiiu的博客-CSDN博客

        • 链接的三种方式
          • 静态链接:将个目标模块及他们所需的库函数链接成一个完整的装配模块,以后不再拆开
          • 装入时动态链接:源程序编译后形成的一组目标模块,在装入内存时,采用边装入边链接的方式
          • 运行时动态链接:对于目标模块的链接,程序执行中需要该目标模块才进行
        • 装入的三种方式
          • 绝对装入
            • 只适合单道程序环境,程序驻留在内存的某个固定位置
            • 编译程序将产生绝对地址的目标代码
          • 静态重定位
            • 在多道程序环境下,作业一旦装入内存,必须给它分配要求的全部内存空间,整个运行期间不能在内存中移动
            • 地址经过一次变换,将装入模块中的相对地址转换为绝对地址
          • 动态重定位
            • 在多道程序环境下,作业装入内存后,地址转换推迟到程序要执行时才进行
            • 装入内存后的所有地址均为相对地址,需要重定位寄存器的支持
            • 分页存储管理、段式存储管理装入时都使用动态重定位转换地址
      • 🐚逻辑地址与物理地址

        • 逻辑地址
          • 编译后,每个目标模块都从0号单元开始编址,这成为该目标模块的相对地址或逻辑地址
          • 对于32位系统,逻辑地址空间的范围为
        • 物理地址
          • 内存中物理单元的集合,是地址转换的最终地址
        • 操作系统通过内存管理部件(MMU)将进程使用的逻辑地址转换为物理地址
      • 🐚进程的内存映像【32位】

        • 0x0000 0000 ~ 0x0804 7FFF
          • 未使用区
        • 0x0804 8000 ~ 0x3FFF FFFF
          • 只读代码段:可存放程序指令等
          • 读/写数据段:可存放全局变量、静态变量static等
          • 堆【从低位到高位生长】:可存放 C#:malloc 或C++:new的变量
        • 0x4000 0000 ~ 0xBFFF FFFF
          • 共享库的存储映射区:可存放 #include<stdio.h>这样的函数库代码
          • 用户栈【从高位到低位生长】:可存放局部变量
        • 0xC000 0000 ~ 0xFFFF FFFF
          • 操作系统内核区:操作系统可访问,用户不可访问【PSW区分用户/内核态】

        图源:谈谈物理内存与虚拟内存之间的映射(超详细~) - 知乎

      • 🐚内存保护

        • 目的:确保每个进程都有一个单独的内存空间,且用户进程与操作系统不会相互影响
        • 措施
          • 在CPU设置一对上、下限寄存器,地址号与两个寄存器的值相比,判断有无越界
          • 采用重定位寄存器【物理地址最小值】和界地址寄存器【逻辑地址最大值】,比较逻辑地址与界地址寄存器,若未越界,加上重定位寄存器的值形成物理地址
      • 🐚内存共享

        • 并不是所有的进程内存空间都适合共享,只有那些只读的区域才可以共享
        • 可重入代码:允许多个进程同时访问但不允许被任何进程修改的代码
      • 🐚内存的分配与回收

        • 连续分配
          • 单一连续分配
            • 描述:在用户区内存中,仅有一道用户程序,即整个内存的用户空间由该程序独占
            • 特点
              • 简单,无外部碎片
              • 只能用于单用户、单任务的操作系统中,存储器的利用率极低【内部碎片】
            • 优化:当时计算机物理内存较小,存储空间有限,因此将进程活跃的部分放入固定区、可交替访问的部分放入覆盖区【覆盖技术】
          • 固定分区分配
            • 描述:最简单的多道程序存储管理方式,将用户内存空间划分为若干固定大小的区域,每个分区只装入一道作业
            • 划分分区的方式
              • 分区大小相等:缺乏灵活性,适合于一台计算机控制多个相同对象的场合
              • 分区大小不等:划分为多个较小的分区、适量的中等分区和少量大分区
            • 管理:分区使用表,按分区大小排队,各个表想包括每个分区的起始地址、大小及状态(是否已分配)
            • 特点
              • 简单,无外部碎片
              • 可能因为程序太大而放不进任何一个空间,需要采用覆盖技术
              • 可能因为程序太小浪费内存空间【内部碎片】
          • 动态分区分配
            • 描述:进程装入内存时,根据进程的需要,动态地为之分配内存
            • 特点:随着时间推移,内存中会产生越来越多小的内存块【外部碎片】;可通过紧凑技术解决,但需动态重定位寄存器的支持,且费时
            • 分区分配策略
              • 首次适应算法:空闲分区以地址递增的次序链接【最简单,最优秀】
              • 邻近适应算法:分配内存时从上次查找结束的位置开始查找
              • 最佳适应算法:空闲分区按容量递增的次序形成空闲分区链,找到能满足的最小空间分配给作业,实际易产生外部碎片
              • 最坏适应算法:空闲分区以容量递减的次序链接
        • 非连续分配
          • 基本分页存储管理
            • 描述:把内存划分为大小相等且固定的块,作为主存【页、页面】与进程【页框、页帧】的基本单位【分页在装作业时确定】
            • 特性:固定分区技术,不会产生外部碎片,不完整的块申请一个主存块会浪费空间【内部碎片】
            • 地址结构
              • 单级页表逻辑地址=逻辑页号+页内偏移量
              • 两级页表逻辑地址=一级页号+二级页号+页内偏移量
              • 物理地址=物理页号+页内偏移量
            • 地址转换机构
              • 逻辑→物理地址:内存中的页表
              • 页表数据结构:页号【隐含】+块号,备注:进程的第一级页表常驻内存
              • 页表寄存器PTR:存放页表的起始地址F、页表长度M【来源于本进程PCB】
            • 地址转换过程
              • (1) 逻辑页号P=逻辑地址A/页面大小L,页内偏移量W=逻辑地址A%页面大小L
              • (2) 将页号送入快表TLB,若命中快表则直接取出物理块号b,跳到(5);否则访问主存,进行(3)(4)(5)
              • (3) 比较逻辑页号P和页表长度M,若P≥M,则产生越界中断,否则继续执行
              • (4) 页表项地址=页表始址F + 页号Px页表项长度,取出物理块号b
              • (5) 物理地址E=物理块号bx页表大小L+页内偏移量W
            • 访存次数
              • 单级页表:访问页表1次【未命中TLB】+访问目标单元1次【未命中Cache】,默认访问2次
              • 两级页表:访问页表1次【未命中TLB】+访问二级页表1次【未命中TLB】+访存内存单元1次【未命中Cache】,默认访问3次
              • 备注:若采用全写法,则可能在写回数据时 访存次数+1

            图源:基本分页存储管理方式 - 快懂百科

          • 基本分段请求管理
            • 描述:按照用户进程中的自然段划分空间,例如主程序段、子程序段、栈段、数据段作为主存与进程的基本单位【段长在编程时确定】
            • 特性
              • 管理复杂,内存利用率低,段长不固定【外部碎片】
              • 方便编程、信息保护和共享,动态增长及动态链接
            • 地址结构
              • 逻辑地址=逻辑段号+段内偏移量
              • 物理地址=物理始址+段内偏移量
            • 地址转换机构
              • 段表数据结构:段号【隐含】+段长+本段在主存中的地址
              • 控制寄存器:存放段表的起始地址F、段表长度M
            • 地址转换过程
              • 与页的地址转换过程类似
            • 段的共享
              • 段的共享:两个作业的段表中相应表项指向被共享段的同一个物理副本
              • 共享要求
                • 不能修改的代码称为纯代码或可重入代码,不属于临界资源,可以共享
                • 可修改的代码和数据不能共享
            • 段的保护
              • 存取控制保护
              • 地址越界保护
                • 段号 > 段表长度,越界中断【猜测可能访问不到目标进程】
                • 段内偏移 > 段长,越界中断【猜测可能访问不到目标段】
            • 访存次数:访问段表1次【未命中TLB】+访问目标单元1次【未命中Cache】

            图源:基本分段存储管理方式 - 快懂百科

          • 段页式管理
            • 描述:每个进程一张段表,每个段一张页表,页作为主存与进程的基本单位
            • 特性
              • 分段方法分配和管理用户地址空间
              • 分页方法管理物理存储空间【内部碎片】
            • 地址结构
              • 逻辑地址=逻辑段号+逻辑页号+段内偏移量
              • 物理地址=物理始址+段内偏移量
            • 地址转换机构
              • 段表数据结构:段号+页表长度+页表始址
              • 页表数据结构:页块+页号
              • 控制寄存器:段表始址、段表长度
            • 访存次数:访问段表1次【未命中TLB】+访问页表1次【未命中TLB】+访问目标单元1次【未命中Cache】,默认访问3次

            图源:一文读懂存储管理之页式、段式、段页式存储及优缺点 - 知乎

  • 🐳虚拟存储器

    • 🐋基本概念

      • 特征
        • 传统内存
          • 一次性:作业必须一次性全部装入内存后,才能开始运行
          • 驻留性:作业被装入内存后,就一直驻留在内存中,其任何部分都不会被换出
        • 虚拟内存
          • 多次性:无须在作业运行时一次性地全部装入内存,而允许被分成多次调入内存
          • 对换性:无须在作业运行时一直常驻内存,进程运行期间可以从内存调至外存的对换区(换出)
          • 虚拟性:逻辑上扩充内存的容量【虚拟地址的容量】,用户看到的内存容量远大于实际容量

        图源:虚拟内存的原理是什么? - 知乎

      • 组成:主存与辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作
      • 编址:虚拟存储器将主存或辅存的地址空间统一编址
        • 虚地址:用户变成允许涉及的地址
        • 实地址:主存地址空间
        • 关系:实际通常 虚地址空间 >> 实地址空间,但理论上 小于或等于也是允许的
      • 条件
        • 硬件支持
          • 一定容量的内存和外存
          • 页表机制(或段表机制),作为主要的数据结构
          • 中断机构,当用户要访问的部分尚未调入内存时,则产生中断
          • 地址变换机构,实现逻辑地址到物理地址的变换
        • 系统支持
          • 请求调页
          • 页面置换功能
      • 实现
        • 请求分页存储管理
        • 请求分段存储管理
        • 请求段页式存储管理
    • 🐋工作流程

      • 辅助硬件找出虚地址与实地址之间的对应关系
      • 判断虚地址对应的存储单元是否已装入主存
        • 若已在主存,通过地址变换,CPU可直接访问快表或主存指示的实际单元
        • 若不在主存,则把包含字的一页或一段调入主存后再有CPU访问
        • 若主存已满,则采用替换算法置换主存中的交换块(即页面)
    • 🐋请求分页存储管理

      • 描述
        • 请求分页系统建立在基本分页系统基础之上
        • 增加了请求调页功能和页面置换功能
      • 请求页表项
        • 页表机制
          • 与基本分页相同
            • 页号【隐含】
            • 物理页框号:虚拟页面存放的物理页框位置
          • 比基本分页新增
            • 有效位 | 状态位 | 合法位:指示该页是否已调入内存【程序访问参考】
            • 引用位 | 访问字段:用于记录本页在一段时间内被访问的次数【置换算法参考】
            • 脏位 | 修改位:标识该页调入内存后是否修改过【置换算法参考】
            • 保护位 | 权限位:该页面的读、写权限【程序访问参考】
            • 外存地址 :该页在外存的地址,通常是物理块号【调入页面参考】
        • 缺页中断机构
          • 与一般中断的相似
            • 保护CPU环境
            • 分析中断原理
            • 转入缺页中断处理程序
            • 恢复CPU环境
          • 与一般中断的区别
            • 在指令执行期间【而非指令执行完后】产生中断和处理信号,属于内部异常
            • 一条指令在执行期间,可能产生多次缺页中断
        • 地址变换机构
          • 与基本分页相同
            • 优先检索快表,未命中时访问内存页表
            • 访问内存页表,并将该页调入快表
            • 形成物理地址
          • 与基本分页不同
            • 内存无目标页表,进行缺页中断处理,若内存已满则使用置换算法调换目标页
            • 修改快表的访问位与修改位【写指令】
      • 🐋页框分配

        • 驻留集
          • 描述:操作系统给特定的进程分配的物理页框集合
          • 考虑因素
            • 程序本身的缺页率
            • 内存驻留的进程数量
        • 内存分配策略
          • 固定分配局部置换
            • 固定:进程运行期间的物理块数目不变,可采用以下算法
              • 平均分配算法
              • 按比例分配算法
              • 优先权分配算法
            • 局部:如果缺页,从分配给该进程在内存的页面中选一页换出
            • 特点:难以确定为每个进程分配的物理块数目
          • 可变分配全局置换
            • 可变:进程运行期间的物理块数目根据情况适当地增加或减少
            • 全局:如果缺页,系统从空闲物理队列中取出一块分配给该进程
            • 特点:如果盲目给进程增加物理块,可能导致多道程序的并发性下降
          • 可变分配局部置换
            • 局部:如果缺页,从分配给该进程在内存的页面中选一页换出
            • 可变:进程运行期间的物理块数目根据情况适当地增加或减少
            • 特点:保证进程不会过多地调页的同时,也保持了系统的多道程序并发能力
        • 调入页面的时机
          • 预调页策略:预测不久之后便会被访问的页面优先调入内存,但成功率仅50%
          • 请求调页策略:进程在运行中需要访问的页面不再内存,便提出请求,由系统将所需的页面调入内存
        • 从何处调入页面
          • 外存划分
            • 对换区:存放对换页面的,采用连续分配方式,磁盘I/O速度比文件区高
            • 文件区:采用离散分配方式
          • 缺页调入内存
            • 系统拥有足够的对换区空间
              • 进程运行前,将与进程有关的文件从文件区复制到对换区
              • 进程运行时,全部从对换区调入所需页面
            • 系统缺少足够的对换区空间
              • 不会被修改的文件都直接从文件区调入
              • 可能被修改的部分,在将它们换出时须调到对换区
            • UNIX方式
              • 与进程有关的文件都放在文件区,未运行的页面都从文件区调入
              • 曾经运行过但又被换出的页面,放在对换区,下次从对换区调入
        • 如何调入页面:所访问的页面不再内存,便向CPU发出缺页中断,中断响应后转入缺页中断处理程序 🌸计组+系统01:中断_梅头脑_的博客-CSDN博客
    • 🐋页面置换算法

      • 最佳置换算法【OPT】
        • 算法:已知访问队列,淘汰最长时间内不再访问的页面
        • 特点:理想算法,然而实际访问列队不可知,因此不能实现,但是可以作为标杆评价其他算法
      • 先进先出算法【FIFO】
        • 算法:优先淘汰最早进入内存的页面
        • 特点:实现简单,具有抖动现象,具体表述为所分配的物理块数增大而页故障数不减反增的现象
      • 最近最少使用算法【LRU】
        • 算法:设置访问字段记录页面被上次被访问的时间,优先淘汰最长时间未访问过的页面
        • 特点:性能较好,不具有抖动现象,但需要寄存器和栈的硬件支持
      • 时钟置换算法【CLOCK】
        • 简单CLOCK算法
          • 所有页面在逻辑上视为循环队列,被替换或被访问时访问位置为1,指针指向被替换页面的下一页
          • (1)若需替换页面,指针循环扫描,若指向的页面访问位为0:将该页换出
          • (2)指针此时指向的页面访问位为1:暂时置为0,本轮不替换,指针指向下一页
          • (3)检查到最列最后1个页面,若其访问位还是为1,则指针回到队首循环检查
        • 改进CLOCK算法
          • 在简单CLOCK算法的基础上增加修改位
          • (1)从指针当前位置开始扫描,寻找A=0【未访问】,M=0【未修改】的页面,此轮不改变访问位A
          • (2)若前一步失败,进行第二轮扫描,寻找A=0【未访问】,M=1【已修改】的页面,此轮将扫描过的页面访问位A置0
          • (3)若前一步失败,重复步骤(1),若有必要,重复步骤(2)
        • 特点
          • 操作系统试图使用此算法接近LRU算法的性能,并减少硬件开销
          • 改进CLOCK算法相比简单CLOCK算法可减少磁盘的IO数,但会增加算法开销

      图源:【操作系统】页面置换算法 | 小猿聊编程-技术编程

    • 🐋抖动和工作集

      • 抖动:刚刚换出的页面马上又要换入主存,刚刚换入的页面马上又要换出主存
      • 工作集:某段时间间隔内,进程要访问的页面集合;一般来说,分配给进程的物理块数要大于工作集大小
    • 🐋内存映射文件

      • 与虚拟内存类似
        • 磁盘与内存虚拟地址具有映射关系,可以访问被映射的文件
      • 与虚拟内存不同
        • 不必执行文件I/O操作,也无须对文件内容进行缓存管理,适合用来管理大尺寸文件
        • 所进行的实际交互是在内存中进行的,并且是以标准的内存地址形式来访问的
        • 多个进程允许并发地映射同一文件,进程可以通过共享内存来通信

      图源:你似乎来到了没有知识存在的荒原 - 知乎

    • 性能影响因素
      • 页面大小↑:单个进程的缺页率↓,内存空间利用率↓
      • 分配给进程的物理块数↑:单个进程的缺页率↓,进程并发数↓
      • 页面置换算法↑:缺页率↓
      • 写回磁盘:全写法访存效率↓、回写法访存效率↑
      • 编写程序的局部化程度↑:缺页率↓
  • 🐳外部存储器

    • 🐋磁盘存储器

      • 原理:磁头和磁性记录介质相对运动时,通过电磁转换完成读/写操作
      • 组成:磁盘控制器、磁盘驱动器、盘片
      • 寻址
        • 寻址过程:找到对应的硬盘【驱动器号】,移动磁头臂寻道【磁道号】,激活相应磁头【盘面号】,旋转盘面【扇区号】
        • 磁盘地址码长度:驱动器号 + 磁道号【也称,柱面号】 + 盘面号 + 扇区号

        图源:理论:磁盘管理与文件系统 - 系统运维 - 亿速云

      • 性能
        • 平均存取时间:寻道时间 + 旋转延迟 + 传输时间 (+ 控制时间)【公式详见:计算题目 - 外存 - 访存时间】
        • 数据传输率:磁盘转速(r/s) x 每条磁道容量(B)
        • 读写操作是串行的,磁头每次写1bit;注意,磁盘存储器是以块【物理块,即扇区】为单位读写的
      • 性能提升
        • 减少寻道时间 | 调度算法
          • 先来先服务【FCFS】算法
            • 描述:根据进程请求访问磁盘的先后顺序进行调度
            • 优点:公平,不会导致磁臂黏着
            • 缺点:平均寻道距离大,如果大量进程竞争使用磁盘,则这种算法在性能上往往接近于随机调度
          • 最短寻找时间优先【SSTF】算法
            • 描述:与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短
            • 优点:虽然不能保证平均时间最小,但能提供比FCFS算法更好的性能
            • 缺点:“饥饿”现象
          • 扫描算法【SCAN】算法
            • 描述:在最短寻找时间优先算法的基础上,规定了磁头运动的方向
            • 优点:规避了SSTF在小区域来回移动导致饥饿现象
            • 缺点:对最近扫描过的区域不公平,访问局部性不如FCFS算法和SSTF算法
          • 循环扫描算法【C-SCAN算法】
            • 描述:在扫描算法的基础上规定磁头单向移动来回服务,回返时直接移动至快速起始端而不服务任何程序
            • 优点:改进了SCAN算法偏向于处理那些接近最里或最外的磁道访问请求的问题
          • LOOK、C-LOOK算法
            • 描述:相比SCAN算法,磁头只需要移动到最远端的请求即可返回,不需要达到磁盘端点
            • 备注:若无特殊说明,默认SCAN算法为LOOK算法,C-SCAN算法为C-LOOK算法
        • 减少延迟时间
          • 原因:磁盘是连续自转设备,磁盘读/写物理块后,需要经过短暂的时间处理才能开始读/写下一块
          • 影响:文件的分配方式【顺序、链式、索引】等,程序被分配到的磁盘不同区域也会影响磁盘的旋转时间
          • 措施:盘面扇区交替编号,磁盘片的不同盘组错位命名
      • 管理
        • 磁盘初始化 | 装机过程
          • 初始化
            • 物理格式化:划分扇区【物理块】,扇区的数据结构:头部+数据区域+尾部
              • 头部和尾部包含了一些磁盘控制器的使用信息,例如扇区校验码、磁盘的链接指针等
              • 扇区的大小通常为512B
            • 坏块管理:划分一些备用块,检测损坏块区时使用备用块代替
          • 分区
            • MBR【主引导记录】:磁盘引导程序+分区表【起始扇区与分区大小】
            • 分区:将磁盘分为一个或多个柱面组成的分区【例,C盘、D盘】
              • 备注1:存放操作系统的分区称为主分区,具有引导程序
              • 备注2:不同的分区可以是独立的文件系统,一般均含有根目录、空闲空间管理模块等,UNIX可能含有索引节点表
          • 逻辑格式化
            • 创建文件系统:操作系统将初始的文件系统数据结构存储到磁盘上,并为空间创建目录【空闲空间管理、根目录等】
            • 逻辑块
              • 为了提高效率,操作系统将多个相邻的扇区【物理块】组合在一起,形成一簇【逻辑块】,文件占用的空间只能是簇的整数倍
              • 簇号到物理地址的映射由厂家提供的驱动程序完成
          • 操作系统的安装
            • 备注:操作系统安装之前,磁盘的逻辑格式化可能由引导加载程序或其它初始化程序暂时创建与维护;操作系统安装后,将接管文件管理的职责
        • 系统初始化 | 开机过程
          • 自举程序
            • 功能:初始化CPU、寄存器、设备控制器和内存等,接着启动从操作系统
            • 存储:ROM保留很小的自举装入程序,完整功能的引导程序保存在磁盘的启动块上,具有启动分区的磁盘成为启动磁盘或系统磁盘【例,C盘】:
          • 简化步骤
            • 激活CPU:CPU加电,CS:IP指向FFFF0H【主存ROM区】
            • 加载BIOS【引导程序】:执行JUMP指令跳转到BIOS【引导程序,或自举程序】
            • 硬件自检:检查硬件是否出现故障,并登记BIOS中断程序入口地址,识别已连接的外设
            • 加载MBR【主引导记录】:CPU将磁盘的第一块MBR读入内存,执行MBR中的磁盘引导程序,磁盘引导程序根据分区表,读入启动盘的PBR【引导块】
            • 加载PBR【活动引导记录】:CPU读入主分区的分区引导块PBR,执行根目录下用于引导操作系统的程序
            • 加载操作系统:CPU从根目录下找到完整的操作系统,将内核部分加载到内存中,初始化并开机

          图源:1.5_操作系统引导_哔哩哔哩_bilibili

      • 可靠性
        • 坏块 | 软件管理
          • 简单磁盘,坏块会在FAT表上标明,因此程序不会使用它们
          • 复杂磁盘,控制器维护磁盘内的坏块列表,低级格式化将一些块保留作为备用
        • 阵列 | 硬件管理
          • 描述:RAID(磁盘冗余阵列),将多个物理磁盘组成一个独立的逻辑磁盘,相互备份,在磁盘损坏时提升系统的可靠性
          • 措施:镜像、海明码、奇偶校验码等
    • 🐋固态硬盘【SSD】

      • 原理
        • 基于闪存技术【Flash Memory】的存储器,使用固态电子存储芯片阵列制成
      • 组成
        • 闪存芯片:替代传统旋转盘中的机械驱动器
        • 闪存翻译层:替代传统旋转盘的磁盘控制器,将来自CPU的逻辑块读写请求翻译成对底层物理设备的控制信号
      • 访存
        • 一个闪存由多个块组成,每个块由多个页组成
        • 数据是以页为单位读写的,只有一页所属的块被擦除后,才能写这一页

        图源:5.3_5_固态硬盘SSD_哔哩哔哩_bilibili

      • 性能
        • 平均存取时间:传输时间 (+ 控制时间)【没有移动的机械部件,不需要寻道、延迟】
        • 随机访问较快,但是连续访问相比机械硬盘无优势
        • 随机写很慢:擦除操作很慢,且写入时页中的所有块都必须被复制到一个新的块中
        • 反复擦写后,闪存块会磨损
      • 磨损均衡技术
        • 动态磨损均衡:写入数据时,自动选择较新的闪存块
        • 静态磨损均衡:SSD自动监测并进行数据分配,让老的闪存块承担无须写数据的存储任务,平常的读写操作在较新的闪存块中进行
  • 🐳计算题目

    • 🐋cache

      • Cache命中率【08年】
        • 命中率 = Cache命中次数 /(Cache访问次数 + 主存访问次数)
          • 例1,sum += a[i],假设按行优先访问数组数据,若每个Cache块内有8个数据,那么每个数据读1次,命中率为7/8 = 87.5%
          • 例2,a[i] += a[i]+1,假设按行优先访问数组数据,若每个Cache块内有8个数据,那么每个数据读写各1次,命中率为15/16 = 93.75%
      • 平均访问时间【13年】
        • CPU同时访问Cache和主存: 访问时间 = 命中率 x Cache访问时间 + (1-命中率)x 主存访问时间
        • CPU未命中Cache再访问主存: 访问时间 = Cache访问时间 + (1-命中率)x 主存访问时间 【默认】
    • 🐋主存

      • 🐚地址码【16年】【20年】

        • 逻辑地址
          • 逻辑地址 = 页号+页内偏移量
            • 页内地址 = 2^(页内偏移量位数),页面大小 = 2^(页内偏移量位数) x 编址单位【默认为字节编址,1B】
            • 虚拟地址空间数量 = 2^(页号位数) = 2^(页目录号位数+页表索引位数)
            • 虚拟地址空间大小= 2^(逻辑地址位数) x 编址单位【默认为字节编址,1B】
            • 每页容纳页表项个数 = 页面大小(B) / 页表项大小(B)
          • 虚拟地址转物理地址的过程【再次备注,图是自己一笔一笔画的,博主可能理解有误,请大佬拍砖~~】

          CPU取指令过程

          物理地址与虚拟地址的异同

          快表与慢表的地址结构划分

          物理地址与Cache数据结构

          单级虚拟页表

          二级虚拟页表(一)

          二级虚拟页表(二)

        • 物理地址
          • 物理地址 = 标记+(Cache 块号或组号)+块内地址
            • 标记用于比较
            • Cache行号、组号用于定位Cache块
            • 块内地址用于确定CPU在本行所取的字
          • 主存单元装入Cache的地址 = Cache行/组号 + 块内地址
          • 比较器
            • 用途:比较物理地址的标记位与Cache表项的标记位,标记位相等且有效则Cache命中
            • 比较器的位数 = 标记位数
            • 比较器的个数
              • 组相联映射,比较器的个数 = 每组包含的Cache行数
              • 全相联映射,比较器的个数 = Cache行数,表示所有行同时比较
              • 直接映射,比较器的个数 = Cache行数,表示每次仅比较一行
        • Cache映射表
          • 每行位数:有效位+ 标记 +(脏位)+(替换位)+ 数据
            • 有效位:1bit,1表示有效,0表示无效
            • 标记位:CPU访存,对比地址与Cache的标记位,若相等且有效位为1,则命中Cache,与地址码的标记长度相同
            • 脏位 | 一致性维护位:1bit,用于回写法,1表示Cache块已修改,需要写回主存,0表示未修改【详见Cache-写策略】
            • 替换位:
              • log Cache块数 bit,用于LRU、LFU替换算法,统计上次最晚访问时间或已访问次数【详见Cache-替换算法】
              • 其中Cache块数为一组Cache的个数,如果为组相连,则LRU替换算法位数 log 每组Cache块数
            • 数据位:Cache块的尺寸,这个数值题目一般会直接给到,或是用2^(块内偏移量)计算
          • 总容量(bit):每行位数 x Cache行数
      • 🐚CPU平均每秒访存次数【12年】

        • 以下知识均与总线有关,可参考:🌸总线、I/O系统与中断-CSDN博客
        • CPU平均每秒执行的指令数(IPS)= CPU每秒时钟频率(Hz)/ 每条指令时钟周期(CPI)
        • CPU平均每秒访存次数(次) = CPU每条指令访存次数(次)x CPU平均每秒执行的指令数(IPS)
      • 🐚主存带宽【12年】

        • 满足CPU访存需求【最低】
          • 主存带宽(B/s) = CPU平均每秒访存次数(次/s)x Cache缺失率(%)x 页块大小(B)
        • 存储模式理想状态【最高】
          • 低位交叉存储模式【流水线】,主存带宽(B/s)= 存储器的工作频率(Hz) x 存储总线宽度(B) = 存储体数量(个)/ 存储体的存储周期(s)x 存储总线宽度(B)
      • 🐚访存时间【13年】

        • 访存周期 = 发送地址和读命令周期 + 存储器准备周期 + 总线传输周期
        • 不支持猝发,串行存取:访存次数 x 每次的访存周期 = 访存次数 x (发送地址和读命令周期 + 存储器准备周期 + 总线传输周期)
        • 支持猝发,串行存取:发首地址和读命令周期 + 访存次数 x(存储器准备周期 + 总线传输周期)
        • 支持猝发,流水线存取:发首地址和读命令周期 + 存储器准备周期  +(访存次数-1)x 单个存储体准备周期 + 总线传输周期 =  发首地址和读命令周期 + 存储器准备周期  + 访存次数 x 总线传输周期【一般情况,单个存储体准备周期 = 总线传输周期】
    • 🐋辅存

      • 簇号物理地址【19年】
        • 柱面与磁道:磁盘有300个柱面,每个柱面有10个磁道,表示该磁头并行连接10个磁盘【即在同一个柱面上磁道的数量】,每个磁盘的磁道号容量为300
        • 文件簇的顺序编号:先以扇区递增,再以盘面递增【减少寻道】,再以磁道号递增;呃【0,0,0】→【0,0,1】→【0,1,0】→【0,1,1】→【1,0,0】...
        • 柱面号、盘面号、扇区号
          • 柱面号 = 簇号 / 单个柱面簇容量 = 簇号/【柱面磁道数 x 扇区数 x 扇区容量 / 簇容量】,结果向下取整
          • 盘面号 = 【簇号 - 柱面号 x 单个柱面簇容量】 / 单个盘面簇容量 = 簇号% 单个柱面簇容量 / 单个盘面簇容量,结果向下取整  
          • 扇区号 = 【簇号 - 柱面号 x 单个柱面数据容量 - 盘面号 x 单个盘面的容量】 / 单个扇区簇容量 = 簇号 % 单个扇区簇容量
      • 地址码长度【22年】
        • 磁盘地址码长度 = 驱动器号 + 磁道号 + 盘面号 + 扇区号
      • 访存时间【22年】
        • 访存时间 = 寻道时间 + 旋转延迟 + 传输时间 (+ 控制时间),一般情况 寻道时间 > 延迟时间 >> 传输时间 > 控制时间
        • 寻道时间:若为平均寻道时间,通常题目已知;若求具体寻道时间,则等于 磁头移动速度 x 移动距离;
        • 旋转延迟:平均每次访存磁盘旋转一半,延迟时间(s) = 1/2 * 单位时间(s) / 转速(r/s)
        • 传输时间:磁盘旋转一周时,磁头划过每个扇区的平均时间,传输时间(s)= 磁盘旋转一周的时间(s)/ 扇区数 = 1 / 转速(r/s)/ 扇区数
        • 控制时间:磁盘控制器的信号传输延迟时间,通常题目已知

🔚结语

😶‍🌫️博文到此结束,写得模糊或者有误之处,欢迎小伙伴留言讨论与批评,督促博主优化内容~

🌟博文若有帮助,欢迎小伙伴动动可爱的小手默默给个赞支持一下,博主肝文的动力++~

🌸博主可能会佛系更新思维导图,在这里:

计算机组成原理_梅头脑_的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_42789937/category_12434026.html?spm=1001.2014.3001.5482操作系统_梅头脑_的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_42789937/category_12434025.html🌸博主也有整理数据结构学习笔记,在这里:

数据结构_梅头脑_的博客-CSDN博客https://blog.csdn.net/weixin_42789937/category_12262100.html?spm=1001.2014.3001.5482icon-default.png?t=N7T8https://blog.csdn.net/weixin_42789937/category_12262100.html?spm=1001.2014.3001.5482

相关文章:

计组+系统02:30min导图复习 存储系统

&#x1f433;前言 考研笔记整理&#xff0c;纯复习向&#xff0c;思维导图基本就是全部内容了&#xff0c;不会涉及较深的知识点~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画思维导图~&#x1f9e9;&#x1f9e9; 编辑&#xff1a; 梅头脑&#x1f338; 参考…...

2023华为杯数学建模D题-域碳排放量以及经济、人口、能源消费量的现状分析(如何建立指标和指标体系1,碳排放影响因素详细建模过程)

可能建立的指标如下&#xff1a; 经济指标: 地区生产总值&#xff08;GDP&#xff09;人均GDP&#xff1b;第一产业&#xff08;农林部门&#xff09;产值&#xff1b;第二产业&#xff08;能源供应和工业部门&#xff09;产值&#xff1b;第三产业&#xff08;建筑和交通部门…...

Excel·VBA分列、字符串拆分

看到一篇博客《VBA&#xff0c;用VBA进行分列&#xff08;拆分列&#xff09;的2种方法》&#xff0c;使用VBA对字符串进行拆分 目录 Excel分列功能将字符串拆分为二维数组&#xff0c;Split函数举例 将字符串拆分为一维数组&#xff0c;正则表达式举例 Excel分列功能 Sub 测…...

机器学习算法基础--层次聚类法

文章目录 1.层次聚类法原理简介2.层次聚类法基础算法演示2.1.Single-linkage的计算方法演示2.2.Complete-linkage的计算方法演示2.3.Group-average的计算方法演示 3.层次聚类法拓展算法介绍3.1.质心法原理介绍3.2.基于中点的质心法3.3.Ward方法 4.层次聚类法应用实战4.1.层次聚…...

linux系统中wifi移植方法

第一&#xff1a;移植wifi现象 在linux系统的RK3399中空板上&#xff0c;确认rk3399中控板linux系统已经可以正常运行。本操作是在rk3399中控板上的WIFI模块&#xff0c;linux内核加载wifi驱动后&#xff0c;再配置上正确的wifi密码&#xff0c;就可以实现rk3399中控板通过wifi…...

Machine Learning(study notes)

There is no studying without going crazy Studying alwats drives us crazy 文章目录 DefineMachine LearningSupervised Learning&#xff08;监督学习&#xff09;Regression problemClassidication Unspervised LearningClustering StudyModel representation&#xff08…...

centos7通过docker搭建nginx+php环境

以下环境都是基于centos7.9完成。 1.安装docker yum install docker-ce 说明&#xff1a;这一步&#xff0c;由于centos软件仓库没有收纳docker&#xff0c;需要自己去官网爬文档安装。 安装完成之后&#xff0c;就是启动docker服务以及添加到开机启动。 systemctl enable do…...

Node.js 学习笔记

小插件Template String Converter 当输入${}时&#xff0c;自动为其加上 反引号 一、node入门 node.js是什么 node的作用 开发服务器应用 开发工具类应用 开发桌面端应用 1.命令行工具 命令的结构 常用命令 切换到D盘——D: 查看D盘目录——dir 切换工作目录——c…...

RabbitMQ之发布确认高级

RabbitMQ之发布确认高级 一、发布确认 SpringBoot 版本1.1 确认机制方案1.2 代码架构图1.3 配置文件1.4 添加配置类1.5 消息生产者1.6 回调接口1.7 消息消费者1.8 结果分析 二、回退消息2.1 Mandatory 参数2.2 消息生产者代码2.3 回调接口2.4 结果分析 三、备份交换机3.1 代码架…...

lv5 嵌入式开发-10 信号机制(下)

目录 1 信号集、信号的阻塞 2 信号集操作函数 2.1 自定义信号集 2.2 清空信号集 2.3 全部置1 2.4 将一个信号添加到集合中 2.5 将一个信号从集合中移除 2.6 判断一个信号是否在集合中 2.7 设定对信号集内的信号的处理方式(阻塞或不阻塞) 2.8 使进程挂起&#xff08;…...

【postgresql】 ERROR: multiple assignments to same column “XXX“

Cause: org.postgresql.util.PSQLException: ERROR: multiple assignments to same column "XXX"; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: multiple assignments to same column "XXX"; 原因&#xff1a;or…...

一文读懂Llama 2(从原理到实战)

简介 Llama 2&#xff0c;是Meta AI正式发布的最新一代开源大模型。 Llama 2训练所用的token翻了一倍至2万亿&#xff0c;同时对于使用大模型最重要的上下文长度限制&#xff0c;Llama 2也翻了一倍。Llama 2包含了70亿、130亿和700亿参数的模型。Meta宣布将与微软Azure进行合…...

完整指南:如何使用 Node.js 复制文件

文件拷贝指的是将一个文件的数据复制到另一个文件中&#xff0c;使目标文件与源文件内容一致。Node.js 提供了文件系统模块 fs&#xff0c;通过该模块可以访问文件系统&#xff0c;实现文件操作&#xff0c;包括拷贝文件。 Node.js 中文件拷贝方法 在 Node.js 中&#xff0c;有…...

ElementUI - 主页面--动态树右侧内容管理

一.左侧动态树 1.定义组件 ①样式&数据处理 <template><el-menu class"el-menu-vertical-demo" background-color"#334157"text-color"#fff" active-text-color"#ffd04b" :collapse"collapsed" router :def…...

全国排名前三的直播公司无锋科技入驻天府蜂巢成都直播产业基地

最近&#xff0c;全国排名前三的直播公司——无锋科技&#xff0c;正式宣布入驻位于成都的天府蜂巢直播产业基地&#xff0c;这一消息引起了业内人士的高度关注。成都直播产业基地一直是中国直播产业的重要地标之一&#xff0c;其强大的技术和资源优势为众多直播公司提供了广阔…...

机器人中的数值优化|【五】BFGS算法非凸/非光滑处理

机器人中的数值优化|【五】BFGS算法的非凸/非光滑处理 往期内容回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化&#xff0…...

ESP32S3的MPU-6050组件移植教程

前言 &#xff08;1&#xff09;实习公司要搞ESP32BOX的驱动移植&#xff0c;所有资料自己找还是比较折磨人的现在我分享几个官方的组件移植资料&#xff1a; <1>Find the most exciting ESP-IDF components&#xff08;ESP32的官方组件都可以在里面查&#xff0c;按照他…...

excel筛选后求和

需要对excel先筛选&#xff0c;后对“完成数量”进行求和。初始表格如下&#xff1a; 一、选中表内任意单元格&#xff0c;按ctrlshiftL&#xff0c;开启筛选 二、根据“部门”筛选&#xff0c;比如选择“一班” 筛选完毕后&#xff0c;选中上图单元格&#xff0c;然后按alt后&…...

pyspark 检测任务输出目录是否空,避免读取报错

前言 在跑调度任务时候&#xff0c;有时候子任务需要依赖前置任务的输出&#xff0c;但类似读取 Parquet 或者 Orc 文件时&#xff0c;如果不判断目录是否为空&#xff0c;在输出为空时会报错&#xff0c;所以需要 check 一下&#xff0c;此外Hadoop通常在写入数据时会在目录中…...

「网页开发|前端开发|Vue」10 vuex模块化:将数据划分成不同modules分别管理

本文主要介绍如何使用vuex的modules将状态数据根据不同模块进行划分并分别管理以及如何使用mapGetters快速将状态管理中的数据导入成local变量。 文章目录 本系列前文传送门一、场景说明二、使用modules划分不同模块三、使用Getters获取状态管理数据Getter传参mapGetters 辅助…...

苹果CMS插件-苹果CMS全套插件免费

网站内容的生成和管理对于网站所有者和内容创作者来说是一个挑战。有一些强大的工具可以帮助您轻松地解决这些问题。苹果CMS插件自动采集插件、采集发布插件以及采集伪原创发布插件&#xff0c;是这些工具之一。它们不仅可以极大地节省您的时间和精力&#xff0c;还可以提高您网…...

域环境介绍

一、概述 内网也指局域网&#xff0c;指的是某个区域由多台计算机互连而成的计算机组&#xff0c;范围通常在数千米以内&#xff0c;在局域网中&#xff0c;可以实现文件管理&#xff0c;应用软件共享&#xff0c;打印机共享、工作组内的日程安排、电子邮件和传真通信服务等&a…...

地球同步静止轨道上的中国卫星

3万6千公里地球同步静止轨道上的中国控制的卫星&#xff08;包括香港属非国产平台卫星、外国属中国平台卫星&#xff09;&#xff0c;共80颗&#xff1b;截止到2023年8月3日&#xff0c;共有563颗在轨卫星。 号定位名称发射时间用途重量1141.1W中星1C(FH2C)2015.12.10DFH4平台…...

HAProxy代理TCP(使用HAProxy 为TiDB-Server 做负载均衡)

目录 一、使用HAProxy 为TiDB-Server 做负载均衡环境1、创建文件夹2、配置haproxy.cfg3、创建 docker-compose.yaml 文件haproxy.cfg 配置说明[参照官方文档](https://pingcap.com/docs-cn/v3.0/reference/best-practices/haproxy/ "参照官方文档") 一、使用HAProxy …...

全新自适应导航网模板 导航网系统源码 网址导航系统源码 网址目录网系统源码

高价值目录网导航网整站源码 | 2999元价值,最新版本源码下载推荐 1、导航网一键获取目标站SEO信息,7.5版本增加会员中心一键获取网站信息网站权重,增加小程序提交发布,全新自适应模板; 2、可设置游客提交、游客提交人工审核,会员免审提交,会员提交人工审核,VIP会员免…...

无人直播间

失败&#xff01;&#xff01; 采用 ffmpeg 技术进行推流 推流代码&#xff1a; 【需要将rtmp替换为你的推流地址】 ffmpeg -re -stream_loop -1 -i "rain.mp4" -c copy -f flv ""推流地址获取 以哔哩哔哩为例 点击下方链接 开播设置 - 个人中心 - …...

Linux 服务器防止 ssh 暴力密码登录破解之使用 fail2ban

前言&#xff0c;网络安全越来越重要&#xff0c;如何保证网站安全至关重要&#xff0c;在使用 Linux 服务器时&#xff0c;如果未设置有效安全登录屏障&#xff0c;每日将会有数百甚至数万次的密码暴力尝试登录&#xff0c;本篇章将介绍两种 Linux 登录安全防护 一&#xff1…...

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 D: 合并数列

[蓝桥杯 2023 国 B] 合并数列 【问题描述】 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案&#xff0c;分别将他们列为两个数组 { a 1 , a 2 , ⋯ a n } \{a_1, a_2, \cdots a_n\} {a1​,a2​,⋯an​} 和 { b 1 , b 2 , ⋯ b m } \{b…...

ChatGPT必应联网功能正式上线

今日凌晨发现&#xff0c;ChatGPT又支持必应联网了&#xff01;虽然有人使用过newbing这个阉割版的联网GPT4&#xff0c;但官方版本确实更加便捷好用啊&#xff01; 尽管 ChatGPT 此前已经展现出了其他人工智能模型无可比拟的智能&#xff0c;但由于其训练数据的限制&#xff…...

DETR中的问题汇总(代码)

一、讲述一下torch.tensor()和torch.as_tensor()的区别 torch.tensor() 和 torch.as_tensor() 都是 PyTorch 中用于创建张量&#xff08;Tensor&#xff09;的函数&#xff0c;但它们有一些区别&#xff0c;主要涉及到张量的内存管理方式和数据拷贝。以下是它们的主要区别&…...

从零开始网页制作教程/seo辅助工具

情况说明&#xff1a; 联想笔记本电脑&#xff0c;Microsoft Edge主页被恶意篡改为hao123&#xff0c;解决问题的过程中参考了以下方法&#xff1a; winR&#xff0c;输入regedit&#xff0c;修改注册表&#xff1b;进入联想电脑管家检查是否开启浏览器主页保护&#xff1b;进…...

wordpress同步公众号/百度一下打开

在iBatis中 当用parameterMap作为ibatis映射输入参数时&#xff0c;要在ibatis的配置文件中作相应的声明。 但我们也可以不在ibatis映射文件中作声明&#xff0c;应用方法如下&#xff1a; ibatis映射文件sqlmap.xml中&#xff1a; <update id"update" parame…...

网站设计轮播图需要吗/乐清网站建设

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。 右键项目&#xff0c;再按F4 新创建一个公众号 Rockey小何同学 想相互交流的同学可以关注一下哈&#xff01; 感谢支持&am…...

上饶哪里培训网站建设/百度app安装下载

微软今天凌晨向Windows Insider Fast快速内测渠道会员推送了Windows 10 Build 14251&#xff0c;这也是Windows 10 Redstone更新的第四个预览版本。 虽然版本号相比上次的Build 11102有了“飞跃”&#xff0c;但这个版本其实没有任何明显的新功能&#xff0c;只是各种系统内部和…...

上海专业网站建设流程/龙岗seo优化

【摘要】 看起来很简单的集合运算放在大数据的场景下&#xff0c;如果还想获得高性能就需要充分了解数据特征和计算特征才能设计出高效算法。充分利用序运算就是一种好办法&#xff01;交并差是常见的集合运算&#xff0c;SQL 中对应的 intersect/union/minus 计算也很简单。不…...

wordpress aplayer/郑州制作网站公司

跨境电商发展了这么多年&#xff0c;从最开始的亚马逊&#xff0c;eBay到速卖通&#xff0c;Lazada再到现在很多新出平台&#xff0c;可谓五花八门。很多主流平台卖家都有使用测评补单来增加产品权重、提高销量。经常有小众平台的卖家咨询我他做的平台能否像亚马逊那样通过测评…...