【学习笔记】《计算机组成原理与设计》学习笔记
这学期学了计组。期末的时候照着之前的笔记和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。
- 代表指令:
- add rd, rs, rt 和 addu rd, rs, rt 和 sub 等
- and rd, rs, rt 和 or
- mult rs, rt 和 multu 和 div 和 divu(rd 和 shanmt 是 0,结果低位/商存入 lo,高位/余数存入 hi)
- sll rd, rt, shamt 和 srl 等
- 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 符号扩展单元。
- 涉及到内存的读写,我们需要 MemRead 和 MemWrite 信号。
- 对于 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 也合了进去罢了。
三、流水线处理器设计
- 五级流水线:
- IF: Instruction fetch from memory
- ID: Instruction decode & register read
- EX: Execute operation or calculate address
- MEM: Access memory operand
- WB: Write result back to register
- 流水线处理器的周期大小是流水线中耗时最久的一级的大小。
- 三种冒险:
- 结构冒险:例如,IF 和 数据操作 的冒险。解决方法是增加额外的内存读写器。
- 数据冒险:解决方法如下:
- 阻塞:塞两个气泡就够。因为都是前半周期写入,后半周期读取。
- 旁路
- 对代码重新排序
- 控制冒险:
- 阻塞
- 分支预测(只有预测错误时才阻塞)
- 由于每个周期,各个段执行的是不同的指令,如果像之前那样直接连接,会导致数据丢失(因为是组合逻辑)。所以,我们需要四个流水线寄存器,分别为:IF/ID,ID/EX,EX/MEM,MEM/WB。
- 除了存数据外,流水线寄存器还会存控制信号。
- 译码时,会将操作码传入控制单元,一次性产生所有的控制信号。包括 EX,MEM,WB。
- 但是下一级是 EX,只会用到 EX 的,所以 MEM 和 WB 的控制信号还要传给下一级的流水线寄存器。
- 数据冒险的旁路设计
- 冒险的判断由三个部分组成:(以 EX 冒险为例)
- EX/MEM.RegWrite = 1
- EX/MEM.RegisterRd 不为 0(也就是 $zero,或是无 Rd)
- 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))
- 满足条件时,阻塞,塞入气泡。
- 阻塞,就是:
- 将 ID/EX 寄存器的控制信号清 0(这意味着后面三个阶段会做 nop)
- 阻止更新 PC 和 IF/ID 寄存器(意味着当前这个指令会被不断地解码,下个指令会不断取址)
- 以上过程由一个独立的单元:冒险检测单元完成。
- 冒险的判断由三个部分组成:(以 EX 冒险为例)
- 控制冒险的处理
- 分支决定的位置。可在 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,所以现在基本只在大城市有