前言
本文为考研期间做模拟题对错题的一些总结,其中会穿插一些例题进行讲解。由于个人水平限制,讲的不甚周到~有错误之处欢迎大家批评指正 ~
一、计算机组成原理
1.IEEE754标准
类型 | 数符 | 阶码 | 尾数数值 | 总位数 | 偏置值 |
---|---|---|---|---|---|
短浮点数 | 1 | 8 | 23 | 32 | 127 |
长浮点数 | 1 | 11 | 52 | 64 | 1023 |
临时浮点数 | 1 | 15 | 64 | 80 | 16383 |
示例:32位浮点数414AC000H
数符 | 阶码 | 尾数数值 | 阶码真值 | 真值 |
---|---|---|---|---|
0 | 100 0001 0 (130) | 100 1010 1100 0000 0000 0000 | 130 - 127=3 | +23*(1.10010101100)2 |
【1】整数部分是1(对于规格化的二进制浮点数,数值的最高位总是‘1’,为了能使尾数多一位有效位,将这个“1”隐含),数符为0代表正数,为1代表负数。
【2】偏置值的设置:短浮点数是27-1=127,长浮点数是210-1=1023。
【3】阶码范围:短浮点数是1~254,其中全0(0)代表非规格化数,全1(255)代表无穷大。因此,短浮点数的阶码0真值范围为(-126 ~ 127).以此类推,长浮点数的阶码范围为1 ~2046,阶码真值范围为-1022 ~1023
【4】浮点数的特殊情况:(E代表阶码,M代表尾数)
E=0,M=0:机器零
E=255,M=0:无穷大,对应于x/0
E=255,M!=0:非数值NaN,对应0/0
在此基础上我们可以总结一下浮点数绝对值的范围
格式 | 最小值 | 最大值 |
---|---|---|
单精度(短浮点数) | 1.0*2-126 (尾数1.000……00 阶码00000000) | (2-2-23)*2127(尾数1.111……11 阶码1111111) |
双精度(长浮点数) | 1.0*2-1022 (尾数1.000……00 阶码00000000000) | (2-2-52)*21023(尾数1.111……11阶码11111111111) |
2.浮点数加减运算
以下为简洁版本,需详细的可参考一位优秀的博主的文章:https://blog.youkuaiyun.com/weixin_43914604/article/details/105629521
Ⅰ.对阶
小阶向大阶看齐(阶小的尾数右移)
Ⅱ.尾数运算
尾数相加
Ⅲ.规格化
规格化形式:最高数值为与符号位不同(这样可以尽可能的表示更大范围的数,避免不必要的空间浪费)
左规-1:尾数左移直至00.1XXX或11.0XXXX
右规+1:当尾数求和结果溢出(形如01.XXX或10.XXX PS:这可能是只假溢出)尾数右移一位
tips:记忆小技巧:初高中学的函数图像平移为左加右减,此处刚好反着来即可
Ⅳ.舍入(指尾数右移过程中)
恒置1法:尾数末尾恒置1
0舍1入法:
if 舍去的尾数部分最高位为0
直接舍去
else
{
尾数末尾+1
if(尾数溢出)
右规
}
Ⅴ.溢出判断
左规-1不会溢出
上溢出(01.XXX):中断处理 (PS:属于异常)
下溢出(10.XXX):机器零处理(PS:不属于异常)
3.海明码
Ⅰ.确定校验位的位数k
n+k≤2k-1(n为有效信息位数,检测一位错)
Ⅱ.确定校验位的分布
校验位Pi=H2n-1
Ⅲ.形成校验关系
以数据码1010为例
【1】⊕代表异或:相同为0,不同为1
【2】海明码需要检错d位,则码距为2d+1;检错d位则码距为d+1
关于码距,推荐一位up主的优秀贴:https://blog.youkuaiyun.com/weixin_44330072/article/details/106860286
Ⅳ.校验原理
//用代码举例说明校错原理
int sum==0;
int cnt=1;
for(int i=0;i<3;i++)
{
sum+=s[i]*cnt;
cn*=2;//s3s2s1=001,则sum=1
}
switch(sum) {
case 0 :
printf("传输正确");//即s3s2s1=000时
break;
default :
printf("H%d位出错",sum);
break;
}
12.除法*
4.微程序控制器
1.推荐尔滨工业大学刘宏伟老师教授的计算机组成原理课程(唐朔飞)视频
2.微程序基本结构图
3.基本组成
- 控制存储器CM:存放指令对应的微程序,由ROM构成,只读程序,不可修改
- 微地址寄存器(CMAR):存放CM读/写微指令的地址
- 微指令寄存器(CMDR或uIR):存放从CM都出来的微指令
- 微地址形成部件:产生初始微地址和后继微地址
4.工作过程
- 取微指令(微指令的取指阶段):①微程序入口自动送入CMAR ②CM中读出微指令送入CMDR
- ** 机器指令操作码字段** OP(IR)通过微地址形成部件产生 微程序入口地址,并送入CMAR
- 从CM中逐条取出对应的微指令并执行
- 执行完后,继续从头循环往复
5.CM(控制存储器) VS MM(主存储器)
5.RISC(精简) 和 CISC(复杂)
6.总线仲裁
BS(BusState):总线忙
BR(BusRequire):总线请求
BG(BusGrant):总线允许
7.中断
-
中断类型
①外中断(中断):由处理器和内存以外的部件引起的中断,如:时钟中断
②内中断(异常):由处理器和内存引起的中断,如地址非法,校验错,访存缺页,自陷(trap)【1】机器下溢当做机器零处理,机器上溢属于内中断(异常)】
【2】自陷(trap)是一种内部异常。 -
中断判优逻辑
硬件故障最高级
软件中断
非屏蔽>可屏蔽
DMA请求 > I/O设备传送的中断请求(DMA需要的cpu时间更少)
高速设备>低速设备(高速设备的数据不及时接收会丢失)
输入设备>输出设备
实时设备>普通设备
- 中断处理过程
【1】硬件向量法:硬件产生的实际是中断类型号,那么可以通过初始中断向量地址+中断向量长度*中断类型号,计算出中断向量地址,假设中断类型号是2号,初始中断向量地址为0x0000000H,中断向量长度为4B,以字节为单位,则可以计算出该中断向量地址为0x0000008H,由该中断向量地址可以找到中断服务程序的入口地址。
【2】中断向量:服务程序的入口地址。
【3】中断向量地址:服务程序的入口地址的地址。
【4】在中断响应周期,置“0”允许中断触发器是中断隐指令完成的。
【5】中断服务程序的最后一条指令是中断返回指令。
8.通道I/O
该小节推荐一位up主的优秀贴:https://blog.youkuaiyun.com/starter_____/article/details/101615848
【1】 由软件和硬件结合实现。
【2】通道本是硬件。
【3】通道没有自己的存储空间,和cpu共享存储空间,其通道程序就是放在主存当中。
9.DMA I/O
- 预处理:由设备驱动程序设置传送参数,然后由DMA控制器请求总线使用权
- 数据传送:由DMA控制器直接控制总线完成
- 后处理:由中断服务程序完成
- 过程:①初始化DMA控制器 ②从磁盘传输一块数据到内存缓冲区 ③DMA控制器发出中断请求 ④执行“DMA结束”中断服务程序
【1】DMA方式纯硬件实现,但程序查询方式恰好纯软件实现
7.寻址方式
- 变址寻址:EA=A+(IX);IX可为用户所改-》适合编制循环程序;
- 相对寻址:EA=A+(BR);BR由系统设定;扩大寻址空间
8.总线 (信息公路)
9.I/O接口
- 产生背景:解决主机和外设的信息形式和工作速度上的差异
- 构成:I/O端口(CPU可直接访问的寄存器)+相应的控制逻辑电路
- 功能:①实现主机和外设的通信联络控制
- ·········②数据缓冲
- ·········③地址译码和设备选择
- ·········④信号格式的转换
- ·········⑤传送控制命令和状态信息
- 分类:①按外设和接口的传送方式:串行/并行
- ·········②I/O设备控制方式:程序查询/中断/DMA/通道
- I/O端口编址
统一编址时,依靠不同的地址码来区分存储单元和I/O设备。
10.磁盘
条带化技术:一种负载均衡技术
11.cache-主存
- Nc:cache的访问次数 Nm:主存的访问次数
Cache的命中率H=Nc/(Nc+Nm) - Tc:cache的存取时间 Tm:主存的存取时间
时间倍率:r=Tm/Tc - 访问效率 :e=1/(H+r(1-H))
【例】若cache完成的存取次数为5000次,主存完成的存取次数为200次,cache的存取周期为40ns,主存的存取周期为160ns,求该cache/主存系统的访问效率(主存和cache同时访问)
解:①Cache的命中率H=Nc/(Nc+Nm)=5000/(5000+200)=25/26
②时间倍率:r=Tm/Tc=160ns/40ns=4
③访问效率 :e=1/(H+r(1-H))=1/(25/26+4*(1-25/26))=26/29=89.7%
【模拟七第16题】若cache完成的存取次数为4800次,主存完成的存取次数为200次,cache的存取周期为10ns,主存的存取周期为50ns,求该cache/主存系统的访问效率(主存和cache不能同时访问)解:①Cache的命中率H=Nc/(Nc+Nm)=4800/(4800+200)=24/25
②时间倍率:r=Tm/Tc=(50+10)ns/40ns=4
③访问效率 :e=1/(H+r(1-H))=1/(24/25+6*(1-24/25))=5/6=83.3%
【1】cache纯硬件实现
【2】DRAM功耗,成本要比SRAM低,但是要刷新
二、操作系统
1.I/O子系统层次划分
【1】设备独立性也称为设备无关性:使应用程序使用逻辑设备名而独立于具体的物理设备。
【2】使用逻辑设备名好处:①增加设备分配灵活性 ②易于实现I/O重定向
【2016年25真题】计算数据所在磁盘的柱面号、磁头号、扇区号的程序是设备驱动程序
【2012年26真题】
2.临界区互斥
- 单标志法:违背空闲让进
- 双标志先检查法:违背忙则等待
- 双标志后检查法:违背空闲让进
- 皮特森算法::违背让权等待
- 中断屏蔽法:违背让权等待
- 硬件指令法(swap指令/TestAndSet指令):违背让权等待
3.缓冲区
1.缓冲区是临界资源:即磁盘数据输出到缓冲区1和缓冲区1输出到用户区这两个操作不能并行.
2.用户区是临界资源:即缓冲区输出到用户区和CPU处理用户区数据这两个操作不能并行
3.各个符号代表:T——磁盘数据输出到缓冲区;M——缓冲区数据输出到用户区;C——CPU处理用户区数据
单缓冲区
1.当T>C时
【分析】
3条指令流水线的时间为3*(T+M)+C
n条指令流水线的时间为n*(T+M)+C
2.当T<C时
【分析】
3条指令流水线的时间为3*(C+M)+T
n条指令流水线的时间为n*(C+M)+T
【总结】
单缓冲区的情况下:
当n-> ∞ 时,每条指令的平均时间为M+max(C,T)
双缓冲区
1.缓冲区是临界资源:即磁盘数据输出到缓冲区1和缓冲区1输出到用户区这两个操作不能并行.
2.用户区是临界资源:即缓冲区输出到用户区和CPU处理用户区数据这两个操作不能并行
3.各个符号代表:T1——磁盘数据输出到缓冲区1;T2——磁盘数据输出到缓冲区2;M1——缓冲区1数据输出到用户区;M2——缓冲区1数据输出到用户区;C——CPU处理用户区数据(其中T1=T2 ,M1=M2)
1.当T≥(C+M)时
【分析】
3条指令流水线的时间为3*(c+M)+T
n条指令流水线的时间为n*(c+M)+T
2.当T<(C+M)时
【分析】
3条指令流水线的时间为3*T+M+C
n条指令流水线的时间为n*T+M+C
【总结】
双缓冲区的情况下:
当n-> ∞ 时,每条指令的平均时间为max(T, M+C)
【2011年14真题】
4.死锁
死锁预防:破坏死锁产生的四个必要条件①互斥②非剥夺③请求并保持④循环等待
死锁避免:银行家算法(只可以避免进入死锁状态,不能用于判断是否死锁)
死锁检测:资源分配图
5.磁盘格式化
- 低级格式化(物理格式化):分区,使每个分区作为一个独立的磁盘。
- 逻辑格式化:创建文件系统,初始化数据结构。
6.磁盘访问算法
SCAN CSACAN Look C-Look
此处参考以为优秀博主的文章https://blog.youkuaiyun.com/Baiyi_destroyer/article/details/107197307
【1】先来先服务(FCFS):公平,不会导致磁臂黏着(总访问某个磁道而不响应其他请求)
6.SPOOLing技术(假脱机技术)
- 产生背景:解决CPU和I/O设备速度差异
- 条件: 磁盘(外存),多道程序技术
- 结果:①提高I/O速度
②将外设由独占解放为共享设备
③实现虚拟设备的功能
7.管程——同步原语
此处参考以为优秀博主的文章:
https://blog.youkuaiyun.com/wangzhicheng1983/article/details/7832237
- 2014年31题 2016年32题
-抽象数据类型: 管程中封装了数据及对于数据的操作 - 互斥使用:任何一个时刻,管程只能由一个进程使用。进入管程时的互斥由编译器负责完成。
- 信息隐藏:管程外的进程或其他软件模块只能通过管程对外的接口来访问管程提供的操作,管程内部的实现细节对外界是透明的。
三、数据结构
1.哈夫曼树在m叉树中的推广
-
先以二叉树为例:
有n0个叶结点,n2个2度结点,无一度结点
因此根据:结点个数 == 结点的孩子个数+1(根节点不是任何结点的孩子结点)
即:n0 + n2 == 0n0 + 2n2 + 1 -
推广到m叉树:
有n0个叶结点,nm个m度结点,无其他度的结点
因此根据:结点个数 == 结点的孩子个数+1(根节点不是任何结点的孩子结点)
即:n0 + nm == 0n0 + mnm + 1 -
m叉树归并问题
有n0个归并段(其全部作为叶结点),求虚段个数,也就是还需要多少个叶结点才能构造一颗m叉哈夫曼树。
解:假设虚段个数为x,
则n0 + x + nm == 0*(n0 + x)+ m*nm + 1,即x = (m-1)nm + 1 - n0 其中nm 取尽可能小的正整数,使得0≤x≤m-1
例:18个初始归并段进行5路平衡归并,需要增加( )个虚拟归并段
x=(5-1)nm+1-18
此时满足0≤x≤4的最小正整数nm是5,因此x=20+1-18=3
2.KMP算法
此处参考一位优秀博主的文章:
https://blog.youkuaiyun.com/papasdy/article/details/495138
3.矩阵存储结构
该小节借鉴另外一位博主的详细解说https://blog.youkuaiyun.com/l218623/article/details/104331760
十字链表:
由于在用邻接表来求有向图的度时比较困难,所以我们可以改进一下,也就是每个顶点我们不仅记录它的出度边还记录它的入度边,把邻接表和逆邻接表结合在一起,这种存储结构就叫做十字链表。
(便于查找有向图某结点的出度和入度)
方法:
增设指针域
建立十字链表(右边的图):
邻接多重表:
由于在用邻接表来求无向图时每个边都要存储两遍,这样的话太浪费空间了,我们就可以用邻接多重表这种存储结构。 (可以快速找到是否存在某条边<u,v>)
方法:
建立邻接多重表:
十字链表和邻接多重表了解一下就可以了。
4.排序算法比较
5.经典计算
-
对于n个不同的元素进栈,出栈序列的个数为
-
含有n个结点的二叉树,树的高度最小为
-
一棵m阶B树中有n个关键字,其高度范围为
-
平衡二叉树的递推(高度为h的平衡二叉树至少有多少个结点的问题)
n0=0, n1=1, n2=2, nh=1+nh-1+nh-2 -
在m叉树的情况下,结点为i(序号从1开始)的第1个子女的编号为(i-1)*m+2
【拓展】
问m叉树中,结点i(序号从1开始)有右兄弟的条件 解:
解:假设结点i的父节点序号为x,则有若i为x第m个子女恰好没有右兄弟
四、计算机网络
1.网络模型
2.局域网
Ⅰ.物理拓部结构
该小节引用优秀的up组文章:https://blog.youkuaiyun.com/wdirdo/article/details/99705605
Ⅱ.传输介质
一般传输介质:双绞线(主流),铜缆,光纤(家庭带宽)
100BaseT
【1】100:数据传输速率100Mbps
【2】Base:基带传输
【3】T:双绞线 (若为F,则表示光纤)
【4】基带传输:传送数据时,以原封不动的形式,把基带信号送入线路,称为基带传输。
【5】频带传输:先将基带信号变换(调制)成便于在模拟信道中传输的、具有较高频率范围的模拟信号(称为频带信号),再将这种频带信号在模拟信道中传输。
Ⅲ.介质访问控制方式(决定要素)
- 随机访问:①ALOHA协议:随时想法就发,发生冲突后等待一段时间,直至成功
········· ·······②时隙ALOHA:时间分段,时间段开始时才可以发送
········· ······ ③CSMA协议:ⅰ. 1-坚持 :空闲必发,持续监听
········· ················ ···········ⅱ. 非坚持:空闲必发,不持续监听
········· ················ ···········ⅲ. p-坚持:空闲时p概率发送,持续监听 - CSMA/CD——总线型局域网
- 信道划分:码分(CDMA),频分(FDMA),时分(TDMA)多路复用技术
- 令牌总线——总线型局域网
- 令牌环——环型局域网
3.编码与调制
3.网络设备
- 交换机的两种交换模式:①直通交换:快,只检查帧的目的地址(6B) ②存储转发,可支持不同速率端口之间的转换
- 【2010年38真题】
4.应用层协议
【1】FTP协议使用两个端口:20和21。21为控制端口,20为数据传送端口。
【2】
5.信道传输速率
香农定理:带宽受限有噪声干扰的信道极限数据传输率=Wlog2(1+S/N)
信噪比=10log10(1+S/N)分贝
奈奎斯特定理:理想信道的极限数据传输率=2Wlog2V
6.本地广播 VS 直接广播
直接广播:本网络号+主机号全1,分组可能会被路由器转发
要是不知道本网络号又或者我就是不想别人知道我部门的XX事,于是就使用
本地广播:255.255.255.255 该分组路由器是不会转发的
总结
- 1.留意单位,例如K代表103还是1024
- 2.注意单位换算,如ms和s和min的转化
- 3.大题要详写每一步计算过程,计算不重要,思路一定要清晰呈现