【学习笔记】《计算机组成原理与设计》学习笔记

这学期学了计组。期末的时候照着之前的笔记和PPT稍微整理了一下考点里的内容。仅供参考。

第一章

一、基础知识

  • 冯诺伊曼机五大部件

    • 存储器、控制器、运算器、输入设备、输出设备
  • 计算机的分类

    • 个人计算机、服务器计算机、高性能(超级)计算机、嵌入式计算机、智能终端、云计算
  • 计算机设计八大定律(思想)

    • 摩尔定律
    • 用抽象简化设计
    • 加速常用时间
    • 并行
    • 流水线
    • 预测
    • 多层次存储系统
    • 冗余提高可靠性
  • 计算机结构层次

    • 硬件
    • 指令架构、硬件软件接口
    • 系统软件(编译、操作系统、数据库)
    • 应用软件
  • 指令系统架构(软硬件接口),简称ISA

  • 四种架构:

    • MIPS, x86, RISC-V, arm

二、性能衡量与计算

  • 性能衡量标准

    • 响应时间

      完成一个任务的时间,完整的需要包括输入输出时间、调用操作系统、空闲等待。

      其中只有处理器执行时间和操作系统执行时间用在CPU,被称为CPU时间。

    • 吞吐量(单位时间完成的任务个数)

  • CPU性能参数

    • 主频:1GHz = 1,000 MHz = 1,000,000,000 Hz
    • 时钟周期:1 s = 1,000 ms = 1,000,000 ns = 1,000,000,000 ps
    • CPU time = 执行周期数 / 主频
    • ISA 决定了每条指令需要多少个周期是固定的,计算时一般用每条指令的平均周期数(CPI
  • 功耗\(P = CV^2F\)

三、注意事项

  • CPI 的“指令”指的是汇编指令,不是高级语言指令。

第二章

一、基础知识

  • 一些名词及其缩写

    • CISC 复杂指令系统计算机
    • RISC 精简指令系统计算机
  • 字节:1 byte = 8 bits,字:1 word = 4 bytes

  • Misp 是大端存储(区别于 x86),高位放在低地址

  • 对齐:

    Misp 规定一个 32 位的数的最低位地址必须被 4 整除

  • 寄存器编号于机器码编号的对应

    • $t0 - $t7 are reg's 8 - 15
    • $t8 - $t9 are reg's 24 - 25
    • $s0 - $s7 are reg's 16 - 23
  • 寄存器的功能与名称的对应:

    • a0 - a3 存放参数
    • v0 - v1 存结果(返回值)
    • t0 - t9,s0 - s7,t 是临时的。s 在过程调用后要复原。
    • gp(global static data),sp(栈)
    • fp(frame,帧指针,指向这个过程用到的堆栈的第一个地址)
    • ra (return address,调用过程后会把 PC 存进 ra)
  • 进程的组成:

    • 栈与动态数据空间、静态数据、代码

二、misp 指令的大致分类与结构

  • 三类指令

    • 运算指令
    • 传送指令(访存指令)
    • 分支指令(条件分支、无条件分支)
  • 指令的构成

    • 32位:6位操作码 + 26位操作数
  • R 型指令

    • op(6) + rs(5) + rt(5) + rd(5) + shanmt(5) + funct(6)
    • op 和 funct 决定了指令的功能,shanmt 是位移量,在 sll 和 srl 指令中会用上,其它时候置 0。
    • 代表指令:
      1. add rd, rs, rt 和 addu rd, rs, rt 和 sub 等
      2. and rd, rs, rt 和 or
      3. mult rs, rt 和 multu 和 div 和 divu(rd 和 shanmt 是 0,结果低位/商存入 lo,高位/余数存入 hi)
      4. sll rd, rt, shamt 和 srl 等
      5. nor rd, rs, rt (not or)和
  • I 型指令

    • op(6) + rs(5) + rt(5) + 立即数或地址(16,有符号)
    • 代表指令:addi, addui, bne, beq, lw, sw 等
  • J 型指令

    • op(6) + addr(26)

三、寻址

  • 五种寻址模式
    • 立即数寻址(直接通过立即数给出数据)
    • 寄存器寻址(数据存在寄存器中,通过寄存器来访问)
    • 基址寻址(寄存器的值 + 形式地址,只是相加,没有左移,是字节地址)
    • PC 相对寻址(16 位形式地址左移两位与 PC 相加)
    • 伪直接寻址(26 位地址左移两位与 PC 计数器的高 4 位相连)

四、特殊指令及其使用

  • 算术位移与逻辑位移

    • 算术右移(sra),前面补的是符号位;逻辑右移,前面补的是 0。
  • 如何取非:nor $t0, $t1, $zero

  • 如何置 0:add $s0, $zero, $zero

  • 比较指令:

    • 小于置1指令:

      slt rd, rs, rt 和 sltu rd, rs, rt(rs 比 rt 小就 rd 置 1)

      slti rt, rs, imm

    • 在早期的 misp,只有这两条指令和 bne,beq配合

  • 过程调用与栈:

    • jal procedureLabel

      把 PC 存到 ra,顺便把 procedureLabel 赋给 PC

    • jr $ra

  • 过程的嵌套调用:

    • 举例:(n in $a0,返回值 in $v0)

      int fact(int n) {
          if(n < 1) return 1;
          return n * fact(n - 1);
      }
      

      其汇编代码对应为:

      fact:
      	addi $sp, $sp, -8
      	sw $ra, 4($sp)
      	sw $a0, 0($sp)
      	
      	slti $to, $a0, 1 #判断a0是否小于1
      	beq $t0, $zero, L1
          
      	addi $v0, $zero, 1
      	addi $sp, $sp, 
      	jr $ra #小于1于是返回了
      
      L1:	addi $a0, $a0, -1
      	jal fact
      	
      	lw $a0, 0($sp)
      	lw $ra, 4($sp)
      	addi $sp, $sp, 8
      	mul $v0, $a0, $v0
      	jr $ra
      
  • 字节、半 word 操作指令

    • lb/lh rt, offset(rs):读入这个地址开始的八位/十六位作为低位,然后根据符号位补全,放入寄存器中
    • lbu, lhu:类似,但补 0
    • sb sh:类似,将寄存器的低字节写进去
    • 注意,上面的“低位”,实际上是最靠右的位(因为大端存储)
  • 如何给寄存器赋 32 位的整数

    • lui rt, constant 把常数赋到寄存器高 16 位里,同时低 16 位清 0

    • 而低 16 位的数值可以用或运算弄上去

    • 举例:

      lui $s0, 61
      ori $s0, $s0, 2304
      
  • 同步指令:

    • 常出现在多处理器或多线程中。内存与寄存器的交换过程是原子操作,不可分割。

    • ll 与 sc,需要成对使用。前者指定一个锁内存单元。若中途有人修改了这段内存,那么 sc 会在 rt 里返回 0,表示失败;否则会把 rt 写入内存,并把它的值(返回值)设为 1

    • 例子:

      try:	add $t0, $zero, $s4
      		ll $t1, 0($s1)
      		.... 这中间的指令要一次性执行完
      		sc $t0, 0($s1)
      		beq $t0, $zero, try
      		add $s4, $zero, $t1
      

五、注意事项

  • 0 不能用在立即数,得用 $zero。

  • 汇编里,源寄存器在目的寄存器之后;但在机器语言里,目的寄存器在后面。

第三章

一、规格化浮点数表示

  • 标准形式:

    • IEEE Std 754 - 1985

    • \(x = (-1)^S \times (1 + Fraction) \times 2^{Exponent - Bias}\)

    • 分为单精度和双精度(32 和 64)两种

    • S(1) + Exponent(8/11) + Fraction(23/52)

  • 指数的取值与含义:

    • 为了比较的方便,我们将阶码加上 127/1023(bios) 转化为整数,称为移码
    • 注意,浮点数的指数不能为全0也不能为全1。因为这两种情形有另外的含义
    • 指数全为1 小数全为0 表示正负无穷
    • 指数全为1 但小鼠不全为0 表示NaN(即 Not a number,不合法的数字)
    • 指数全为 0,表示 \(x = (-1)^S \times (0 + Fraction) \times 2^{1 - Bias}\)
  • 注意,0.0 有正负 0 两种表示方法。

二、浮点运算

  • 由协处理器完成
  • 步骤:
    • 对阶(移位器):把较小的阶调整到较大的阶
    • 小数部分相加(加法器)
    • 规格化相加和(移位器)
    • 判断指数溢出(若溢出,抛出异常;否则下一步)
    • 舍入(若舍入后不再规格化,还要再回到第三步)

三、整数相加溢出判断

  • 有符号数

    • 首先,若 A 与 B 异号,相加不可能溢出

    • 若 A 与 B 同号,但 S 与 A 异号,则发生了溢出

    • 通过 xor 后的值与 0 的大小关系,可以判断出是否异号。

      addu $t0, $t1, $t2 # $t0 = sum
      xor $t3, $t1, $t2
      slt $t3, $t3, $zero # check if signs differ
      bne $t3, $zero, NO_overflow
      xor $t3, $t0, $t1
      slt $t3, $t3, $zero
      bne $t3, $zero, Overflow
      
  • 无符号数

    • 要判断的是 \(A + B > 2^{32} - 1\)

    • 可转化为 \(B > 2^{32} - 1 - A\),大于号右边实际上为 A 的按位取反。

      addu $t0, $t1, $t2
      nor $t3, $t1, $zero
      sltu $t3, $t3, $t2
      bne $t3, $zero, Overflow
      

四、注意事项与小技巧

  • 如何给补码取负:连同符号位一起取反后加一即可。
  • 如何舍入:
    • 偶数舍入法:为了保证舍入是均衡的(有的入有的舍对半分)
    • 最后两位 00舍 11入 101入 001舍(?不要求掌握)
  • 设计规则:
    • 简单来自规则(一样的指令长度,类似的结构)
    • 折中(只有三种格式)
    • 越小越快(指令集有限,寻址方式有限)
    • 加速常见事件

第四章

一、单周期处理器设计

  • 一个时钟周期执行一条指令
  • 单周期的时钟周期,取得是执行时间最久的那条指令的周期。(一般为 lw)
  • 指令的执行过程:
    • 三个步骤:取址,译码,执行
    • 取址:从内存中取指令,PC+4
    • 译码:将指令给 Control 产生控制信号,读寄存器
    • 执行:各有不同
  • 如果只有一个内存接口,会产生结构冒险,所以我们将读取数据的和取址的分开
  • 第一个下降沿取出数据,然后马上经过组合逻辑过程算出结果,然后在第二个下降沿马上写入状态单元。
  • 取完址后,要把寄存器地址送到寄存器堆,把操作码和功能码送到控制单元。
  • 对于R型指令的执行:先根据 op 和 funct 对 rs 和 rt 里的数据进行操作,然后写入到 rd 里。不同的操作对 ALU 有不同的要求,于是我们有:ALU control 信号。
  • 注意到并不是每一个周期都有写回这一个操作(如 sw),我们需要一个额外的写控制信号来控制寄存器堆的写入。我们称之为:RegWrite
  • 对于 Load 和 Store(I型)的执行:
    • 首先,计算地址时,需要用偏移量+寄存器值,所以,需要把偏移量扩展到 32 位。为此,我们增设一个Sign Extend 符号扩展单元。
    • 涉及到内存的读写,我们需要 MemReadMemWrite 信号。
  • 对于 Branch 指令的执行:
    • 需要用到 ALU 比较 rs 和 rt 的值。
    • 需要计算地址不仅要把偏移量扩展到 32 位,还要左移两位。因此需要一个额外的左移两位运算器
    • 需要用新的地址来更新PC。为此也需要额外的控制信号。
  • 对于 J 指令:
    • 需要左移两位,还需要取出 PC 的高 4 位。
    • 需要额外的左移两位扩到28位的运算器和取出PC高四位的数据线。
    • 需要额外的控制信号。
  • 观察到由于指令的不同,需要传入 ALU 或 Write 接口的数据来源不同。所以,我们需要额外的多路选择器。而有了选择器,我们自然需要与之对应的选择信号
    • 观察到写回寄存器的来源有 ALU 和 Mem,所以我们需要一个 MemtoReg 信号。
    • 传入 ALU 的数据,有的来源寄存器,有的来源符号扩展后的立即数,所以要有 ALUSrc 信号。
    • 观察到 Branch 指令跳转与不跳转的 PC 不同。所以需要 PCSrc 信号。
    • 观察到目标寄存器在 r 型里是 rd,i 型的是 rt,所以要有 RegDst 来决定取哪个位置的。
  • op 传入控制单元,产生上述的各种控制单元。
  • funct 传入 ALU control,和 ALUOp(根据 op 产生,两位)一同,产生 ALU control(4位)信号。
  • ALU 的 zero 输出与 Branch 信号,相与产生 PCSrc。还有 j 指令,所以还需要 Jump 信号。

二、多周期处理器设计

  • 每个周期只执行一个操作,因此存储器和指令存储器可以合并,加法器也不需要搞很多个。
  • 需要注意的是 j 指令的 Shift left 2 与 branch 的不一样。
  • 需要添加状态单元,存下每个周期的东西。
  • IR 和 MDR。前者存指令,后者存内存中读取的数据。我们需要 IRWrite 来区分二者。而内存读写器的地址来源也需要一个信号:IorD 来控制。
  • ALU 由于用途增多,需要的选择信号也更复杂了。PC,A。B,4,立即数,左移两位的立即数。
  • 至于图上的 PCSrc 的变化,只是把 jump 也合了进去罢了。

三、流水线处理器设计

  • 五级流水线:
    1. IF: Instruction fetch from memory
    2. ID: Instruction decode & register read
    3. EX: Execute operation or calculate address
    4. MEM: Access memory operand
    5. WB: Write result back to register
  • 流水线处理器的周期大小是流水线中耗时最久的一级的大小。
  • 三种冒险:
    • 结构冒险:例如,IF 和 数据操作 的冒险。解决方法是增加额外的内存读写器。
    • 数据冒险:解决方法如下:
      • 阻塞:塞两个气泡就够。因为都是前半周期写入,后半周期读取。
      • 旁路
      • 对代码重新排序
    • 控制冒险:
      • 阻塞
      • 分支预测(只有预测错误时才阻塞)
  • 由于每个周期,各个段执行的是不同的指令,如果像之前那样直接连接,会导致数据丢失(因为是组合逻辑)。所以,我们需要四个流水线寄存器,分别为:IF/ID,ID/EX,EX/MEM,MEM/WB。
  • 除了存数据外,流水线寄存器还会存控制信号。
    • 译码时,会将操作码传入控制单元,一次性产生所有的控制信号。包括 EX,MEM,WB。
    • 但是下一级是 EX,只会用到 EX 的,所以 MEM 和 WB 的控制信号还要传给下一级的流水线寄存器。
  • 数据冒险的旁路设计
    • 冒险的判断由三个部分组成:(以 EX 冒险为例)
      1. EX/MEM.RegWrite = 1
      2. EX/MEM.RegisterRd 不为 0(也就是 $zero,或是无 Rd)
      3. EX/MEM.RegisterRd = ID/EX.RegisterRs/RT
    • EX/MEM 和 MEM/WB 的 Rd 编号会传到旁路单元里,这个单元会根据当前正在译码的这个 Rs 和 Rt 来判断是否需要旁路,并输出 forwardA 和 forwardB 信号(对应 Rs 和 Rt)
    • 需要注意到,有时,一条指令会同时面临两种冒险,这时我们需要的是最近的数据。所以,对于 MEM 冒险,我们还需要判断是否同时存在 EX 冒险。只有当 EX 冒险的条件不满足时,才当成 MEM 冒险处理。
    • Load 产生的冒险,是无法仅通过旁路解决的。(因为它的值到 MEM 才被取出)
      • Load 是 I 型指令,它的目的寄存器是 Rt。Load 会产生 MemRead 信号。可以根据这个来判断。
      • 但要注意判断的时机。ID 阶段是已经把东西拿出来了。所以,我们要在 IF/ID 阶段就判断,然后塞入气泡。
      • 判断条件如下:ID/EX.MemRead and ((ID/EX.RegisterRt = IF/ID.RegisterRs) or (ID/EX.RegisterRt = IF/ID.RegisterRs))
      • 满足条件时,阻塞,塞入气泡。
      • 阻塞,就是:
        1. 将 ID/EX 寄存器的控制信号清 0(这意味着后面三个阶段会做 nop)
        2. 阻止更新 PC 和 IF/ID 寄存器(意味着当前这个指令会被不断地解码,下个指令会不断取址)
      • 以上过程由一个独立的单元:冒险检测单元完成。
  • 控制冒险的处理
    • 分支决定的位置。可在 EX。一般我们更早一点,在 ID 决定。为此,我们将 PC 计算的部件(符号扩展和加法器)挪到 ID,同时加上一个等于比较器。
    • branch 分支的数据冒险处理方法类似
    • 分支预测。但是就算你预测了,你还是需要一个周期来计算地址。
    • 分支延时槽。把后面一些无影响的指令提前拉上来执行。但是,这很难做到。
  • 异常的处理
    • 被中断的指令地址会被存在 EPC 里。
    • System Control Coprocessor(CP0),或者叫协处理器(?)
    • 故障寄存器。在 Misp 中,每一位,就是一种异常。(区别于 intel 每种值一种异常)
    • 中断是由软件来处理。由 CPU 执行中断处理程序。
    • 中断处理程序在 BIOS 主板上。

第五章

一、存储器基础知识

  • 最开始,冯诺依曼机的性能瓶颈在于 CPU。后来,转移到了存储器上,现在以存储器为中心了。

  • 容量大、速度快,是我们对存储器的期望。

  • 多级存储器(存储层次)

    • 离 CPU 越近,速度越快;越远,容量越大。
    • CPU -- Cache(封装在 CPU 里) -- Mem(内存条插在主板上)-- Disk(上面这两都是通过总线与 CPU 连接)
  • 程序在内存中占用的是连续的内存空间,因此称其具有空间局部性

  • 存储器的性能差异源于材质

    • RAM:SRAM(Cache),DRAM(Mem)

    • flash 固态硬盘,机械硬盘

    • ROM:

      控制存储器、BIOS(主板上的驱动程序)都属于 ROM。

      PROM,EPROM,E2PROM 等

  • 存储器的基本原理(要求):

    • 要有两种稳定状态来表示 0 和 1(能表示)
    • 可以由外部信号来转换这两状态(能写入)
    • 能读出其中的信息(能读出)
    • 无外部原因时能保存(能保持)
  • 存储器性能指标

    • 存储容量,存储速度

    • 存储速度分两类,第二类比较常用

      存取时间 ta:读写一次花的时间

      存取周期 tm:间隔多长时间后可以启动第二次读写(算上了电路的恢复过程)

  • 硬盘性能计算:(前两项为主)

    • 平均寻道时间(产家固定)
    • 等待时间(平均旋转延时,转半圈的时间,注意 rpm 的单位是每分钟多少转)
    • 传输时间,控制延时

二、Cache - Mem

  • 三种映射方法

    • 直接映射

      若 Cache 有 n 个块,这个地址的块号是 i,那它就会被对应到 Cache 中索引为 i % n 的块上。

    • 全相联

      不规定约束。只要空出来的块就可以塞。每个块都有一个比较器,用于比较标签和有效位是否对应。

    • 多路组相联

      有多少路,就意味着每个索引含有多少个块。每个索引(或者说每个组)内是全相联的。

  • Miss 会发生什么?

    • 首先,阻塞流水线
    • 从下一级存储器中获取这个块
    • 重新取址 或 继续完成数据过程
  • 写方法(命中时)

    • 写直达法:命中后,既改 Cache,又更新主存。

      但这会让写变得很慢。

      一种解决方法是:使用写缓存区,当缓存区满了再一起写入主存。

    • 写回法:命中后,只写 Cache,不写主存。

      需要脏位。当一个脏块被替换时,把它写回内存。

  • 写方法(缺失时)

    • 写直达法:两种应对方式
      • 写分配法:把块拿到 Cache 里
      • 写不分配法:不拿过来。这种一般可能用于操作系统或是应用程序的初始化。
    • 写回法:总是会把块提取到 Cache 里
  • 多级 Cache

    • 第一级专注速度,第二季专注减少 miss
  • 缺失延时与带宽计算

    • 举例:(图中的 bus clock 不是 CPU clock,是由总线频率决定的)

  • 涉及此的 CPI 计算

    • 举例:

      )

  • 影响缺失率的因素

    • 块的大小

      由空间局限性,块的增大,也许可以提高命中率。

      但块的增大,同样意味着更少的块、更多的竞争,这有可能反过来使得缺失率上升。

      块增大后可能会造成“污染”。也就是增加了调入大量无用数据的可能性。

      同时,更大的块也意味着更大的缺失延时。

    • 相联方式

      受限于硬件成本。

    • 多级 cache

    • 编译优化

    • 软件、代码自身写法(比如经典的二重循环分块)

  • 替换方式:

    • LRU,MRU 和 随机

    • 一般是 LRU(最近最少使用替换算法)

    • 如何算对要替换哪个?

      把组内的标签按最近访问的顺序排,访问到哪个就把它提到最前面,然后替换就拿走最后面的那个(MRU 是拿走最前面的)

  • 计算注意事项

    • Cache 包含数据、标签和有效位,算的时候一般不算脏位和引用位,若算上了,需要文字说明。
    • 注意题目对 Cache 大小和块大小的定义,尤其是一道题里出现两个不同的 Cache 时。
    • 注意大小的单位是字还是字节。
    • 上来第一件事是对地址进行划分。先把块内地址,或者说块内偏移量的那几位划出来,然后余下的块号再来讨论。
    • 求 CPI 时,记得如果给延时单位不是时钟周期,要先根据主频算出时钟周期,再把延时转化为时钟周期数。

三、可靠性评价

  • 可靠性评价:
    • MTTF:mean time to failure (平均无故障时间)
    • MTTR:mean time to repair (平均修理时间)
    • MTBF = MTTF + MTTR:mean time between failures
    • Availability = MTTF / MTBF
  • 两种提高可靠性的方式:
    • 提高无故障时间:错误避免、容忍(备份)、预测
    • 降低修复时间(提高诊断、维修的能力,设备备份、快速替换)

四、校验码

  • 奇偶校验:
    • 一般用于计算机内部数据传输,距离短,外界干扰少
  • 常用校验码:
    • 汉明码
    • CRC无限冗余校验码
  • 汉明码:
    • 给数分组,每一组加一个奇偶校验位,这个分组是交叉分组的
    • 如果位数是2的次幂,那那一位就是校验位。假如它是 \(2^p\) 位,那么它校验的是所有第 p 位为 1 的位。
    • 一般为偶校验
  • 汉明码举例:原八位:0110 1101
H1 0001 H2 0010 H3 0011 H4 0100 H5 0101 H6 0110 H7 0111 H8 1000 H9 1001 H10 1010 H11 1011 H12 1100
P1 P2 0 P3 1 1 0 P4 1 1 0 1
0 0 1 0 1 0
0 0 1 0 1 0
1 1 1 0 1
1 1 1 0 1

​ 所得校验码为:000111011101

  • 如何检验出错误的位?

    • 定义:vi = pi 异或上 (pi 检验的所有位的异或和),如:

    • v1 = p1 ^ H3 ^ H5 ^ ...

      v2 = p2 ^ H3 ^ ...

      v3 = p3 ^ H5 ^ ..

      v4 = p4 ^ H9 ^ ..

    • v4v3v2v1 表示的二进制数,实际上就是出错的位数。

  • 如何检测出是有两位错误?

    • 在后面再加一个第 13 位。检验前面的所有 12 位。
    • 若这一位与前面所有的异或和的异或和为1,表明有一个错。
    • 若异或为0,且有错,那就是两个错。
  • 有几位校验位?\(2^P \geq P + d + 1\)

五、虚拟存储器

  • 一些名词及其缩写

    • VM,virtual machine,虚拟机
    • VMM,Virtual Machine Monitor,是软件,将虚拟的内存访问转化为对物理内存、输入输出、CPU的实际调用。
  • 虚拟空间:

    • 又称程序空间,操作系统为每个运行起来的程序分配的空间。
    • 虚拟地址可以对应到物理地址。
  • 页:

    • 主存 与 Disk 之间,也是按块传输的,这个块比较大,被叫做“页”。

    • 虚拟存储器和主存也按同样大小来画页。类似的,有“虚拟页号”,“页内地址”。

  • 页表:

    • 虚拟地址与物理地址的转化由 CPU 完成。但其对应表,页表由操作系统产生,并存放在主存中。
    • 有一个寄存器会存页表首地址的位置。
    • 页表的索引就是虚拟页号。每个表项是一个虚拟页号对应的物理页号。
    • Disk 到 Mem 是全相联的。主存满了就 LRU。
    • 每个表项里有:物理地址或辅存地址、有效位、脏位、reference位。CPU 隔一段时间就会清空 r 位。
    • 有效位 1 表示已经在内存中。
    • 写硬盘的方法是写回法。因为写回去要花的时间太久了。
  • 页故障:

    • 有效位为 0。
    • CPU 会调用操作系统的页故障处理程序,把辅存的那一页调到主存中(这一过程不是由 CPU 完成)。
    • 这非常的慢。
  • TLB:

    • 为了方便地址的转换(不需要多次访存)而设置的 Cache。称为快表。
    • 保存的是最近要用的虚拟页号与主存页号的对应关系。
    • 与一般的 Cache 类似,这个也有标记位、有效位、脏位等。也有三种映射方式。
    • 记住,是用虚拟页号去索引的,不是用虚拟地址哦!
  • 注意看题目给的是字地址还是字节地址。

六、小知识

  • U盘写多了二氧化硅层会薄,然后无法阻挡电子,然后就寄了

  • 辅存相关:

    • 辅助存储器,disk、硬盘,属于外设。

    • flash 半导体存储元是有寿命的,写 1000 次就写穿了,所以需要有软件算法来保证负债均衡。

    • 机械硬盘(温切斯特盘)常封死,防尘防潮

  • cache 和 Mem 是一时性的,断了电就没了。

  • 辅存的读写:

    • 寻道:把磁头移到磁道上
    • 等待:等待扇区转到合适的位置上(旋转延时)

    硬盘有专门的硬盘控制器

  • 文件系统最重要的是建立文件索引,格式化会将索引写进去,所以格式化完容量会减少

  • 刚开机时,mem 和 cache 是空的,会先有一个装载操作系统的过程

  • 5G基站的覆盖范围只有 100m,所以现在基本只在大城市有

posted @ 2022-01-06 17:26  喵乖乖喵  阅读(996)  评论(0编辑  收藏  举报

膜拜众神

网安院技术部     ZZY大师     Xinyang 大佬     Wjyyy