存储器存放数据和程序,
解释概念:
主存:主存储器,用于存放正在执行的程序和数据。 CPU 可以直接进行随机读写,访问速度较高。
辅存:辅助存储器,用于存放当前暂不执行的程序和数据,以及一些需要永久保存的信息。
Cache :高速缓冲存储器,介于 CPU 和主存之间,用于解决 CPU 和主存之间速度不匹配问题。
RAM :半导体随机存取存储器,主要用作计算机中的主存。
SRAM :静态半导体随机存取存储器。
DRAM:动态半导体随机存取存储器。
ROM:掩膜式半导体只读存储器。由芯片制造商在制造时写入内容,以后只能读出而不能写入。
PROM:可编程只读存储器,由用户根据需要确定写入内容,只能写入一次。
EPROM :可擦除可编程只读存储器。允许用户写入信息,之后用某种方法擦除数据,可进行多次重写。
EEPROM :电擦写可编程只读存储器。
CDROM:只读型光盘。
Flash Memory :闪速存储器。或称快擦型存储器。
存取周期和存取时间的区别:存取周期和存取时间的主要区别是:存取时间仅为完成一次操作的时间,而存取周期不仅包含操作时间,还包含操作后线路的恢复时间。即:存取周期=存取时间+恢复时间
存储器的带宽指单位时间内从存储器进出信息的最大数量。若存储器的数据总线宽度为32位,存取周期为200ns,则存储器的带宽= 1/200ns ×32位 = 160M位/秒 = 20MB/秒 = 5M字/秒。注:字长32位,不是16位。(注:1ns=10−9s)
刷新:对 DRAM 定期进行的全部重写过程;刷新原因:因电容泄漏而引起的 DRAM 所存信息的衰减需要及时补充,因此安排了定期刷新操作;常用的刷新方法有三种:
计算机中设置 Cache 的作用是解决 CPU 和主存速度不匹配问题。不能将 Cache 的容量扩大取代主存,原因是
画出用1024×4位的存储芯片组成一个容量为64Kx8位的存储器逻辑框图。要求将64K分成4个页面,每个页面分16组,共需多少片存储芯片?
设采用SRAM芯片,则:总片数=(64K×8位)/(1024×4位)=64×2=128片
题意分析:本题设计的存储器结构上分为总体、页面、组三级,因此画图时也应分三级画。
首先应确定各级的容量:
页面容量=总容量/页面数=64K×8/4=16K×8位,4片16K×8字串联成64K×8位
组容量=页面容量/组数=16K×8位/16=1K×8位,16片1K×8位字串联成16K×8位
组内片数=组容量/片容量=1K×8位/1K×4位=2片,两片1K×4位芯片位并联1K×8位
地址分配
设有一个64K$\times 8 位的 R A M 芯片 , 试问该芯片共有多少个基本单元电路 ( 简称存储基元 ) ? 欲设计一种具有上述同样多存储基元的芯片 , 要求对芯片字长的选择应满足地址线和数据线的总和为最小 , 试确定这种芯片的地址线和数据线,并说明有几种解答。存储基元总数 = 64 K 8位的RAM芯片,试问该芯片共有多少个基本单元电路(简称存储基元)?欲设计一种具有上述同样多存储基元的芯片,要求对芯片字长的选择应满足地址线和数据线的总和为最小,试确定这种芯片的地址线和数据线,并说明有几种解答。 存储基元总数=64K 8位的RAM芯片,试问该芯片共有多少个基本单元电路(简称存储基元)?欲设计一种具有上述同样多存储基元的芯片,要求对芯片字长的选择应满足地址线和数据线的总和为最小,试确定这种芯片的地址线和数据线,并说明有几种解答。存储基元总数=64K\times$8位=512K位=219位
如要满足地址线和数据线总和最小,应尽量把存储元安排在字向,因为地址位数和字数成2的幂的关系,可较好地压缩线数。
设地址线根数为a,数据线根数为b,则片容量为:2a×b=219;b=219−a;
若a=19,b=1,总和=19+1=20;
a=18,b=2,总和=18+2=20;
a=17,b=4,总和=17+4=21;
a=16,b=8 总和=16+8=24;
某8位微型计算机地址码为18位,若使用4K×4位的RAM芯片组成模块板结构的存储器,试问:
模板号(3位) | 芯片号(3位) | 片内地址(12位) |
---|---|---|
欲传送的二进制代码为1001101,用奇校验来确定其对应的汉明码,若在第6位出错,说明纠错过程。
欲传送的二进制代码为1001101,有效信息位数为n=7位,则汉明校验的校验位为k位,则:2k ≥ n + k + 1,k = 4,进行奇校验设校验位为 C1 C2C4C8,汉明码为 C1C2b7C4b6b5b4C8b3b2b1,
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
名称 | C1 | C2 | b7 | C4 | b6 | b5 | b4 | C8 | b3 | b2 | b1 |
C 1 = b 7 ⨁ b 6 ⨁ b 4 ⨁ b 3 ⨁ b 1 ‾ = 1 ⨁ 0 ⨁ 1 ⨁ 1 ⨁ 1 ‾ = 1 C_1=\overline{b_7\bigoplus b_6\bigoplus b_4\bigoplus b_3\bigoplus b_1}=\overline{1\bigoplus0\bigoplus1\bigoplus1\bigoplus1}=1 C1=b7⨁b6⨁b4⨁b3⨁b1=1⨁0⨁1⨁1⨁1=1
C 2 = b 7 ⨁ b 5 ⨁ b 4 ⨁ b 2 ⨁ b 1 ‾ = 1 ⨁ 0 ⨁ 1 ⨁ 0 ⨁ 1 ‾ = 0 C_2=\overline{b_7\bigoplus b_5\bigoplus b_4\bigoplus b_2\bigoplus b_1}=\overline{1\bigoplus0\bigoplus1\bigoplus0\bigoplus1}=0 C2=b7⨁b5⨁b4⨁b2⨁b1=1⨁0⨁1⨁0⨁1=0
C 4 = b 6 ⨁ b 5 ⨁ b 4 ‾ = 0 ⨁ 0 ⨁ 1 ‾ = 0 C_4=\overline{b_6 \bigoplus b_5 \bigoplus b_4}=\overline{0 \bigoplus 0 \bigoplus 1}=0 C4=b6⨁b5⨁b4=0⨁0⨁1=0
C 8 = b 3 ⨁ b 2 ⨁ b 1 ‾ = 1 ⨁ 0 ⨁ 1 ‾ = 0 C_8=\overline{b_3 \bigoplus b_2 \bigoplus b_1}=\overline{1 \bigoplus 0 \bigoplus 1}=0 C8=b3⨁b2⨁b1=1⨁0⨁1=0
故传送的汉明码为10100011101,若第6位(b5)出错,即接收的码字为10100111101,则
P 1 = C 1 ⨁ b 7 ⨁ b 6 ⨁ b 4 ⨁ b 3 ⨁ b 1 ‾ = 1 ⨁ 1 ⨁ 0 ⨁ 1 ⨁ 1 ⨁ 1 ‾ = 1 P_1=\overline{C_1\bigoplus b_7\bigoplus b_6\bigoplus b_4\bigoplus b_3\bigoplus b_1}=\overline{1\bigoplus1\bigoplus0\bigoplus1\bigoplus1\bigoplus1}=1 P1=C1⨁b7⨁b6⨁b4⨁b3⨁b1=1⨁1⨁0⨁1⨁1⨁1=1
P 2 = C 2 ⨁ b 7 ⨁ b 5 ⨁ b 4 ⨁ b 2 ⨁ b 1 ‾ = 0 ⨁ 1 ⨁ 1 ⨁ 1 ⨁ 0 ⨁ 1 ‾ = 1 P_2=\overline{C_2\bigoplus b_7\bigoplus b_5\bigoplus b_4\bigoplus b_2\bigoplus b_1}=\overline{0\bigoplus1\bigoplus1\bigoplus1\bigoplus0\bigoplus1}=1 P2=C2⨁b7⨁b5⨁b4⨁b2⨁b1=0⨁1⨁1⨁1⨁0⨁1=1
P 4 = C 4 ⨁ b 6 ⨁ b 5 ⨁ b 4 ‾ = 0 ⨁ 0 ⨁ 1 ⨁ 1 ‾ = 1 P_4=\overline{C_4\bigoplus b_6 \bigoplus b_5 \bigoplus b_4}=\overline{0 \bigoplus 0 \bigoplus 1 \bigoplus 1}=1 P4=C4⨁b6⨁b5⨁b4=0⨁0⨁1⨁1=1
P 8 = C 8 ⨁ b 3 ⨁ b 2 ⨁ b 1 ‾ = 1 ⨁ 1 ⨁ 0 ⨁ 1 ‾ = 0 P_8=\overline{C_8\bigoplus b_3 \bigoplus b_2 \bigoplus b_1}=\overline{1 \bigoplus 1 \bigoplus 0 \bigoplus 1}=0 P8=C8⨁b3⨁b2⨁b1=1⨁1⨁0⨁1=0
P8P4P2P1=0110说明第6位出错,对第六位取反即完成纠错。
浮点数 N = S × r j ( 阶码数值位 m 位,位数数值位 n 位 ) = { 阶码 j { 阶符 j f 阶码的数值部分 j 1 j 2 ⋅ ⋅ ⋅ j m ( m 反映浮点数的表示范围) (小数点的实际位置:由 j f 和 m 共同表示) 尾数 S { 数符 S f (浮点数的符号) 阶码的数值部分 S 1 S 2 ⋅ ⋅ ⋅ S n ( n 反映浮点数的精度) 浮点数N=S\times r^j(阶码数值位m位,位数数值位n位)=\begin{cases}阶码j \begin{cases}阶符j_f\\ 阶码的数值部分j_1j_2···j_m(m反映浮点数的表示范围)\end{cases} \\ (小数点的实际位置:由j_f和m共同表示)\\尾数S \begin{cases}数符S_f (浮点数的符号) \\ 阶码的数值部分S_1S_2···S_n(n反映浮点数的精度)\end{cases}\end{cases} 浮点数N=S×rj(阶码数值位m位,位数数值位n位)=⎩ ⎨ ⎧阶码j{阶符jf阶码的数值部分j1j2⋅⋅⋅jm(m反映浮点数的表示范围)(小数点的实际位置:由jf和m共同表示)尾数S{数符Sf(浮点数的符号)阶码的数值部分S1S2⋅⋅⋅Sn(n反映浮点数的精度)
最大正数 2 ( 2 m − 1 ) × ( 1 − 2 − n ) ; 最小正数 2 − ( 2 m − 1 ) × 2 − n ; 最大负数 − 2 − ( 2 m − 1 ) × 2 − n ; 最小负数 − 2 ( 2 m − 1 ) × ( 1 − 2 − n ) 最大正数2^{(2^m-1)} \times (1-2^{-n});最小正数2^{-(2^m-1)} \times 2^{-n};最大负数-2^{-(2^m-1)} \times 2^{-n};最小负数-2^{(2^m-1)} \times (1-2^{-n}) 最大正数2(2m−1)×(1−2−n);最小正数2−(2m−1)×2−n;最大负数−2−(2m−1)×2−n;最小负数−2(2m−1)×(1−2−n)
上溢:浮点数阶码超出最大阶码,停止运算,进行中断溢出处理
下溢:浮点数阶码小于最小阶码,尾数位强制为零,按机器零处理。
规格化数:小数最高位为1,且整体小于1
e.g. 设机器数字长为24位,欲表示$\pm$3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取一位外,阶码、尾数各取几位?
KaTeX parse error: No such environment: flalign* at position 7: \begin{̲f̲l̲a̲l̲i̲g̲n̲*̲}̲ &\because 2^{1…
算术移位:有符号数的移位;逻辑移位:无符号数的移位。
逻辑移位规则:
设机器数字长为8位(含1位符号位),若A=+15,B=+24,求[A-B]补并还原成真值。
∵ A = + 15 = + 0001111 , B = + 24 = + 0011000 \because A=+15=+0001111,B=+24=+0011000 ∵A=+15=+0001111,B=+24=+0011000
∴ [ A ] 补 = 0 , 0001111 , [ B ] 补 = 0 , 0011000 , [ − B ] 补 = 1 , 1101000 \therefore [A]_补=0,000 1111,[B]_补=0,001 1000,[-B]_补=1,110 1000 ∴[A]补=0,0001111,[B]补=0,0011000,[−B]补=1,1101000
则[A-B]补=[A]补+[-B]补= 0 , 0001111 + 1 , 1101000 1 , 1110111 \begin{array}{r}0,000 1111 \\+1,110 1000\\ \hline 1,111 0111 \end{array} 0,0001111+1,11010001,1110111
∴ \therefore ∴[A-B]补=1,111 0111
∴ \therefore ∴A-B=-0001001=-9
已知[x]补=1.0101,[y]补=0.1101,[x·y]补。
部份积 | 乘数 | 说明 |
---|---|---|
00.0000 + 11.0101 \begin{array}{r}00.0000\\+11.0101\end{array} 00.0000+11.0101 | 110 1 ‾ 0000 \begin{array}{r}110\underline{1}\\0000\end{array} 11010000 | 初值 [ z 0 ] 补 = 0 y 4 = 1 , + [ x ] 补 初值[z_0]_补=0 \\y_4=1,+[x]_补 初值[z0]补=0y4=1,+[x]补 |
11.0101 11.1010 11.1101 + 11.0101 \begin{array}{r}11.0101\\11.1010\\11.1101\\+11.0101\end{array} 11.010111.101011.1101+11.0101 | 0000 111 0 ‾ 011 1 ‾ 0000 \begin{array}{r}0000\\111\underline{0}\\011\underline{1}\\0000\end{array} 0000111001110000 | $ \rightarrow1位,得[z_1]_补,乘数同时\rightarrow1位\ y_3=0,\rightarrow1位,得[z_2]_补,乘数同时\rightarrow1位\y_2=1\+[x]_补$ |
11.0010 11.1001 + 11.0101 \begin{array}{r}11.0010\\11.1001\\+11.0101\end{array} 11.001011.1001+11.0101 | 0100 001 1 ‾ 0000 \begin{array}{r}0100\\001\underline{1}\\0000\end{array} 010000110000 | → 1 位,得 [ z 3 ] 补 ,乘数同时 → 1 位 y 1 = 1 + [ x ] 补 \rightarrow1位,得[z_3]_补,乘数同时\rightarrow1位\\y_1=1 \\+[x]_补 →1位,得[z3]补,乘数同时→1位y1=1+[x]补 |
10.1110 11.0111 \begin{array}{r}10.1110\\11.0111\end{array} 10.111011.0111 | 0010 0001 \begin{array}{r}0010\\0001\end{array} 00100001 | → 1 位 得 [ z 4 ] 补 \rightarrow1位 \\得[z_4]_补 →1位得[z4]补 |
故乘积[x·y]补=1.0111 0001 |
设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题
A = 9 64 = ( 0.0010010 ) 2 B = − 13 32 = ( − 0.0110100 ) 2 [ A ] 补 = 0.0010010 [ B ] 补 = 1.1001100 [ A + B ] 补 = 0.0010010 + 1.1001100 1.1011110 ( 无溢出 ) A + B = ( − 0.0100010 ) 2 = − 17 64 A=\frac{9}{64}=(0.001 0010)_2 \\B=-\frac{13}{32}=(-0.011 0100)_2 \\ [A]_补=0.001 0010 \\ [B]_补=1.100 1100 \\ [A+B]_补=\begin{array}{r}0.001 0010 \\ +1.100 1100 \\ \hline 1.101 1110 \end{array}(无溢出) \\ A+B=(-0.010 0010)_2=-\frac{17}{64} A=649=(0.0010010)2B=−3213=(−0.0110100)2[A]补=0.0010010[B]补=1.1001100[A+B]补=0.0010010+1.10011001.1011110(无溢出)A+B=(−0.0100010)2=−6417
A = 19 32 = ( 0.1001100 ) 2 B = − 17 128 = ( − 0.0010001 ) 2 [ A ] 补 = 0.1001100 [ B ] 补 = 1.1101111 [ − B ] 补 = 0.0010001 [ A − B ] 补 = 0.1001100 + 0.0010001 0.1011101 ( 无溢出 ) A − B = ( 0.1011101 ) 2 = 93 128 A=\frac{19}{32}=(0.100 1100)_2 \\B=-\frac{17}{128}=(-0.001 0001)_2 \\ [A]_补=0.100 1100 \\ [B]_补=1.110 1111 \\ [-B]_补=0.001 0001 \\ [A-B]_补=\begin{array}{r}0.100 1100 \\ +0.001 0001 \\ \hline 0.101 1101 \end{array}(无溢出) \\ A-B=(0.101 1101)_2=\frac{93}{128} A=3219=(0.1001100)2B=−12817=(−0.0010001)2[A]补=0.1001100[B]补=1.1101111[−B]补=0.0010001[A−B]补=0.1001100+0.00100010.1011101(无溢出)A−B=(0.1011101)2=12893
A = − 3 16 = ( − 0.0011000 ) 2 B = 9 32 = ( 0.0100100 ) 2 [ A ] 补 = 1.1101000 [ B ] 补 = 0.0100100 [ A + B ] 补 = 1.1101000 + 0.0100100 0.001100 ( 无溢出 ) A + B = ( 0.0001100 ) 2 = 3 32 A=-\frac{3}{16}=(-0.001 1000)_2 \\B=\frac{9}{32}=(0.010 0100)_2 \\ [A]_补=1.110 1000 \\ [B]_补=0.010 0100 \\ [A+B]_补=\begin{array}{r}1.110 1000 \\ +0.010 0100 \\ \hline 0.00 1100 \end{array}(无溢出) \\ A+B=(0.000 1100)_2=\frac{3}{32} A=−163=(−0.0011000)2B=329=(0.0100100)2[A]补=1.1101000[B]补=0.0100100[A+B]补=1.1101000+0.01001000.001100(无溢出)A+B=(0.0001100)2=323
A = − 87 = ( − 1010111 ) 2 B = 53 = ( 110101 ) 2 [ A ] 补 = 1 , 0101001 [ B ] 补 = 0 , 0110101 [ − B ] 补 = 1 , 1001011 [ A − B ] 补 = 1 , 0101001 + 1.1001011 0 , 1110100 ( 溢出 ) A − B = ( − 1 , 0001100 ) 2 = − 140 A=-87=(-101 0111)_2 \\B=53=(110 101)_2 \\ [A]_补=1,010 1001 \\ [B]_补=0,011 0101 \\ [-B]_补=1,100 1011 \\ [A-B]_补=\begin{array}{r}1,010 1001 \\ +1.100 1011 \\ \hline 0,111 0100 \end{array}(溢出) \\ A-B=(-1,000 1100)_2=-140 A=−87=(−1010111)2B=53=(110101)2[A]补=1,0101001[B]补=0,0110101[−B]补=1,1001011[A−B]补=1,0101001+1.10010110,1110100(溢出)A−B=(−1,0001100)2=−140
A = 115 = ( 1110011 ) 2 B = − 24 = ( − 11000 ) 2 [ A ] 补 = 0 , 1110011 [ B ] 补 = 1 , 1101000 [ A + B ] 补 = 0 , 1110011 + 1 , 1101000 0 , 1011011 ( 无溢出 ) A + B = ( 1011011 ) 2 = 91 A=115=(111 0011)_2 \\ B=-24=(-11 000)_2 \\ [A]_补=0,111 0011 \\ [B]_补=1,110 1000 \\ [A+B]_补=\begin{array}{r}0,111 0011 \\ +1,110 1000 \\ \hline 0,101 1011 \end{array}(无溢出) \\ A+B=(101 1011)_2=91 A=115=(1110011)2B=−24=(−11000)2[A]补=0,1110011[B]补=1,1101000[A+B]补=0,1110011+1,11010000,1011011(无溢出)A+B=(1011011)2=91
今有四级流水线,分别完成取指(IF)、译码并取数(ID)、执行(EX)、写结果(WR)4个步骤。假设完成各步操作的时间依次为 90ns、90ns、60 ns、45 ns。
提高访存速度所采取的措施
采用高速器件,选用存取周期短的芯片,可提高存储器的速度。
采用缓存,CPU将最近期要用的信息先调入缓存,而缓存的速度比主存快得多,这样CPU每次只需从缓存中取出 (或存入)信息,从而缩短了访存时间,提高了访存速度。
调整主存结构如采用单体多字结构(在一个存取周期内读出多个存储字可增加存储器的带宽)或采用多体结构存储器。
在5个功能段的指令流水线中,假设每段的执行时间分别是10ns、8 ns、10ns、10ns和7ns。对于完成12条指令的流水线面言,其加速比为多少?该流水线的实际吞吐率为多少?
加速比:流水线时钟周期至少为10ns.
流水线完成12条指令所需时间 ( 12 − 1 ) × 10 + 5 × 10 = 160 n s (12-1)\times10+5\times10=160ns (12−1)×10+5×10=160ns。
非流水线完成12条指令所需时间 12 × ( 10 + 8 + 10 + 10 + 7 ) = 540 n s 12\times(10+8+10+10+7)=540ns 12×(10+8+10+10+7)=540ns。
流水线加速比为540+160=3.375。
实际吞吐率是指流水线完成n条指令的实际吞吐率。
该流水线的实际吞叶率为 12 / [ ( 12 − 1 ) × Δ t + 5 × Δ t ] 12/[(12-1)\times \Delta t+5\times \Delta t] 12/[(12−1)×Δt+5×Δt]又因为 Δ t = 10 n s \Delta t=10ns Δt=10ns,所以实际吞吐率为: 0.075条/ns。
什么是指令流水?画出指令二级流水和四级流水的示意图,它们中哪一个更能提高处理器速度,为什么?
指令流水就是改变各条指令按顺序串行执行的规则,使机器在执行上一条指令的同时,取出下一条指令,下图(a)和(b)分别是指令的二级流水和四级流水示意图。
什么是中断?设计中断系统需考虑哪些主要问题?
CPU在程序运行过程中,遇到异常情况或特殊请求,需暂停现行程序,转至对这些异常情况或特殊请求的处理,处理完后再返回到原程序断点处继续执行,这一过程即为中断。设计中断系统需考虑如下几个问题。
1. 中断源如何向CPU提出请求
2. 当多个中断源同时提出请求时,CPU如何确定响应的优先次序
3. CPU在什么情况(时间、条件)下响应中断
4. 如何保护现场
5. 如何寻找中断服务程序的入口地址
6. 如何恢复现场
7. 当出现中断嵌套时如何处理
计算机为了管理中断,在硬件上通常有哪设置?各有何作用?对指令系统有何考虑?
在计算机系统中,为了管理中断需设置下列这些硬件,以及它们的作用分别是:
1. 中断请求触发器,其个数与中断源个数相等,用以标志某个中断源项 CPU 提出中断请求:
2. 中断屏蔽触发器,其个数与中断请求触发器相等,当其为1时,表示该中断源的中断请求被屏蔽,CPU不能响应;
3. 排队器,用来进行中断判优。当多个中断源同时请求时,排队器可选中优先级最高的中断请求;
4. 向量地址形成部件,用以产生中断源的向量地址,从而可找到中断服务程序的入口地址
5. 允许中断触发器,当其为1时,CPU 允许处理中断;
6. 中断标志触发器,标志该系统进入中断周期;
7. 堆栈,用来保护现场;
8. 中断查询信息号电路。在每条指令执行周期结束时刻,该电路向各中断源发查询信号在计算机系统中,为了管理中断,指令系统应设有开中断、关中断、置屏蔽字及中断返回等指令。
在中断系统中,INTR、INT、EINT这3个触发器各有何作用?
INTR是中断请求触发器,每个中断源都对应一个 INTR,当其为“1”状态时,表示该中断源有请求。
EINT 是允许中断触发器,当其为“1”时,表示 CPU 允许响应中断源的请求;当其为“0”时,意味着 CPU 禁止响应中断。
INT是中断标记触发器,当其为“1”时,表示 CPU 进入中断周期。