一、数据结构
树
树的层次
从根结点开始定义,起始为1。
结点的深度
从根结点开始向下增加。
结点的高度
从叶结点开始向上增加。
树的高度/深度
即最大层数。
有序树/无序树
结点各子树从左到右有次序,不能交换的树称为有序树(如二叉树)。
ps:二叉树 != 度为2的树(①最少结点数不同 ②二叉树只有一个孩子也不能交换)
结点数与度的关系
结点数 = 所有结点度数之和 + 1
线索二叉树
线索二叉树定义
若无左子树,令lchild指向其前驱节点;若无右子树,令rchild指向其后驱节点。
平衡二叉树
平衡二叉树定义
左右子树高度差的绝对值不超过1。
插入节点保持平衡的四种方法
删除节点保持平衡的方法
1、删除节点
2、从删除节点向上回溯(删除前的位置),找到第一个不平衡点z;设y是z高度最高的孩子,x是y高度最高的孩子。
3、对以z为根的最小不平衡子树,有四种情况:
①y是z左孩子,x是y左孩子(LL,右单旋)
②y是z左孩子,x是y右孩子(LR,先左后右双旋转)
③y是z右孩子,x是y右孩子(RR,左单旋)
④y是z右孩子,x是y左孩子(RL,先右后左双旋转)
若操作后以z为根的子树高度-1,则可能导致整体仍不平衡,需要从z向上回溯找到第一个不平衡点继续操作。
拓扑排序
while( 图中还有结点 ){
选择一个入度为0的点,加入集合中。
删除该点及以该点为起点的所有路径。
}
二、计算机组成原理
RAM与ROM
RAM与ROM的区别
1、随机存储器(RAM)与只读存储器(ROM)。(ps:ROM只能随机读出,但部分ROM派生的存储器也可随机存储)
2、易失性存储器(RAM)与非易失性存储器(ROM)。
RAM(Random Access Memory)类别:
1、SRAM(静态随机存储器):用双稳态触发器存储信息,存取速度快,集成度低,功耗大,价格昂贵,一般用于高速缓存寄存器(cache)。
2、DRAM(动态随机存储器):用电容上的电荷(电荷一般只能维持1ms~2ms,需要持续刷新,一般刷新周期为2ms)存储信息,容易集成,价位低,容量大,功耗低,一般用于大容量主存系统。
ROM(Read Only Memory)类别
1、MROM(Mask/掩模式只读存储器):写完无法更改内容。
2、PROM(Programmer/一次可编程只读存储器):用户可以更改一次内容。
3、EPROM(Erasable/可擦除可编程只读存储器):可多次改写,但次数有限,且写入时间长。
4、Flash存储器(U盘、SD卡):可以在不加电时长期保存信息,且能在线快速擦除与重写,且擦除重写速度比上述几个快(写比读慢,写前要先擦除)。
5、SSD(Solid State Drives/固态硬盘):由控制单元和存储单元(Flash芯片)组成,读写快,低功耗,但价格昂贵。
指令流水线
流水线技术
时间上的并行。一个任务分成多个子阶段,并在不同的功能部件上同时执行。
超标量处理机
空间上的并行。在一个处理机内设置多个功能相同的部件,并让部件并行工作。
流水线的执行
1、取指(IF) 2、译码/读寄存器(ID) 3、执行/计算地址(EX) 4、访存(MEM) 5、写回(WB)
风险与处理
1、结构冒险:多条指令同一时刻抢夺同一资源造成的冲突(资源冲突)。
解决方法:1)前一指令访存时,后面的指令暂停一个时钟周期。
2)单独设置数据存储器和指令存储器,将指令与数据分离。
2、数据冒险:多条指令运行时用到同一个数据(数据相关),其中有三种情况:
1)写后读(RAW) 2)读后写(WAR) 3)写后写(WAW)
解决方法:1)对冲突的指令暂停若干个时钟周期,分为硬件阻塞(stall)和软件插入(NOP指令)两种方法。
2)设置专用通路,前一条指令的ALU计算结果作为下一条指令的输入数据直接开始计算,不需要存入寄存器(数据旁路技术)。
3)对指令编译优化,调整指令顺序。
3、控制冒险:指令改变执行顺序时,导致PC值异常,引发断流(条件转移等)。
解决方法:1)对转移指令进行分支预测(分为静态和动态)。
2)预取转移成功和不成功两个控制流方向的目标指令。
3)加快和提前形成条件码。
4)提高转移方向的猜准率。
总线
总线设备
主设备(获得总线控制权的设备)与从设备(被主设备访问的设备)。
总线特性
1、机械特性(尺寸、形状) 2、电气特性(传输方向和有效电平范围)
3、功能特性(每根传输线的功能) 4、时间特性(信号和时序的关系)
总线分类
1、片内总线:芯片内部总线,是CPU内部寄存器之间、寄存器与ALU之间的线。
2、系统总线:①数据总线:双向传输线,位数和机器字长、存储字长有关。
②地址总线:单向传输线,位数和主存地址的空间大小有关。
③控制总线:传输控制信息,包括CPU的指令和主存(或外设)返回给CPU的反馈信号。
ps:各个功能部件通过数据总线连接成的数据传输路径叫做数据通路。
3、I/O总线:连接中低速的I/O设备,目的是将低速设备与高速总线分离。(USB、PCI)
4、通信总线:计算机之间或计算机与其他系统之间传送信息的总线,也叫外部总线。
总线结构
1、单总线结构:不止一根线,按传递信息不同可以细分成地址、数据、控制总线。
2、双总线结构:分为主存主线和I/O总线。
3、三总线结构:分为主存总线、I/O总线和直接内存访问(DMA)总线。
总线标准
①ISA,工业标准体系结构,最早出现的微型计算机系统总线,用于IBM的AT机上。
②EISA,拓展的ISA,为了配合32位CPU设计,对ISA完全兼容。
③VESA,视频电子标准协会,针对多媒体PC要求高速传送大量图像数据产生。
④PCI,外部设备互联,是高性能的32位或64位总线,常见适配器有显卡、声卡等。
⑤AGP,加速图形接口,用于传输视频和三维图形数据,属于局部总线。
⑥PCI-E,最新的总线接口标准,取代了PCI和AGP。
⑦RS-232C,由美国电子工业协会(EIA)推荐的串行通信总线,用于DTE和DCE之间。
⑧USB,通用串行总线,连接外部I/O总线,属于设备总线。
⑨PCMCIA,广泛用于笔记本电脑接口,用于拓展功能。
⑩IDE,集成设备电路,也叫ATA,是一种IDE接口磁盘驱动接口类型,如光盘光驱。
⑪SCSI,小型计算机系统接口,用于计算机与智能设备(硬盘、软驱)系统级接口。
⑫SATA,串行高级技术附件,基于行业标准的串行硬件驱动器接口。
Cache与主存的映射
直接映射
主存中的每一块只能装入Cache中的唯一位置。若Cache行数为n,则主存中第0,n,2n,...块装入Cache的第0行。若该位置已有内容,则会产生冲突,直接映射的冲突率最高。CPU访存时,通过行号计算去Cache对应行号的标记进行比较,因此速度快。
Cache行号 = 主存块号 % Cache总行数
若主存地址空间大小为256MB,按字节编址,指令Cache与数据Cache分离,且均有8个Cache行,每个Cache行大小为64B,则:
主存地址结构(28位) | |
主存块号(22位) | 块内地址(6位) |
Cache直接映射地址结构(28位) | ||
标记(19位) | Cache行号(3位) | 块内地址(6位) |
其中,主存地址结构个数为256MB / 8bit = 个;主存地址的块内地址个数为64B / 8bit =
个,主存地址的标记个数为
=
个;Cache的直接映射地址结构个数与主存地址结构个数相同,Cache直接映射的块内地址与主存地址的块内地址相同,Cache行号个数为
个,标记个数为
=
个。
此外,每个Cache行还包含有效位、一致性维护位、替换算法控制位,这些与标记位共同称为标记项。
全相联映射
主存的每一块可以装入Cache的任意位置,因此空间利用率高,命中率也高,但由于CPU访存时要与所有Cache行的标记比较,因此速度较慢,实现成本较高,通常用按内容寻址的相联存储器(价格高)进行地址映射。
Cache全相联地址结构 | |
标记 | 块内地址 |
组相联映射
将Cache分为Q个大小相同的组,每个主存块可以装入固定组的任意一个Cache行内,主存块与组的对应关系和直接映射中主存块与Cache行号的对应方式相同。CPU访存时与对应组内的所有Cache行的标记比较,因此各方面性能都是上述两个算法的折中。
当组数Q和Cache行数相同时,即为直接映射;当组数Q = 1时,即为全相联映射。另外,若每组含个X个Cache行,那么称这个为X路组相联映射,最大组号为Cache行数 / X。
Cache组相联映射 | ||
标记 | Cache组号 | 块内地址 |
三、操作系统
中断
括号内为多重中断额外的操作。
硬件中断部分
关中断 -> 保存断点 -> 识别中断源
软件中断部分
硬件中断 -> 保存现场(和屏蔽字) -> 中断事件处理 -> 恢复现场(和屏蔽字) -> 开中断 -> 中断返回
中断事件处理部分
(开中断) -> 执行中断服务程序 -> (关中断)
进程创建
引起进程创建的事件:用户登录、作业调度、提供服务、应用请求、启动程序执行等。
二级页表
对于一个按字节编址,页大小为B,页表项大小为2B,逻辑地址空间大小为
B的二级页表:
页目录号(一级索引) | 页号(二级索引) | 页内偏移量 |
7位 | 9位 | 10位 |
其中,一页的页表项最多为B / 2B =
个,则需要
B /
B =
页=128页的页表项才能表示所有数据,页内偏移量 =
= 10位。
多级索引
设文件索引有7个地址项,其中4个直接地址索引,2个一级间接地址索引,1个二级间接地址索引,每个地址项大小为4B,磁盘索引块和磁盘数据块大小均为256B,求出单个文件最大长度。
直接地址索引 | 一级间接地址索引 | 二级间接地址索引 | |
个数 | 4个 | 2个 | 1个 |
最大表示大小 | 256B | 256 / 4 * 256B | (256 / 4) ² * 256B |
总大小 | 4 * 256B | 2 * 256 / 4 * 256B | (256 / 4) ² * 256B |
文件最大长度 | 4 * 256 + 2 * 256 / 4 * 256B + (256 / 4) ² * 256B = 1057KB |
磁盘调度算法
磁盘操作时间计算
1、寻找时间 = m * n + s
m为移动一个磁道的时间(一般为0.2ms),n为磁道数,s为启动磁臂时间(一般为2ms)。
2、旋转延迟时间 = 1 / 2r,即磁盘旋转半圈花费的时间
r为磁盘旋转速度,由于是平均时间,所以计算转半圈。
3、传输时间 = b / rN,即读写字节占磁道总字节的比例除以转速
b为每次读写的字节数,r为磁盘旋转速度,N为一个磁道上的字节数。
先来先服务(First Come First Served, FCFS)算法
按磁盘请求队列中的顺序,先请求的先执行。
最短寻找时间优先(Shortest Seek Time First, SSTF)算法
每次都执行当前位置移动所耗费时间最少的请求。
扫描(SCAN)算法(电梯调度算法、LOOK算法)
从当前位置朝一个方向移动(一般朝右),执行这个方向上经过的所有请求,直到移动到这个方向的终点时(并非移动到这个方向上的最后一个请求时),朝相反方向移动,并执行这个方向上经过的所有请求,直到执行完最后一个请求(不需要移动到终点)。
循环扫描(Circular SCAN, C-SCAN)算法(C-LOOK算法)
第一次移动与扫描算法相同,移动到终点返回时,不执行经过的请求,直到再次移动到终点后,朝相反方向移动,并执行经过的请求,直到执行完最后一个请求。
四、计算机网络
路由信息协议(RIP)
RIP规定
1、每个路由器维护自身到其他网络的距离记录
2、距离也称为跳数,相邻路由器/网络跳数为1,每经过一个路由器跳数+1。
3、RIP认为好的路由就是跳数最少的路径。
4、一条路径最多包含15个路由(最大为15跳),跳数为16表示目标网络不可达,因此RIP只适用于小型互联网。
5、任意两个路由器之间每30s广播一次RIP路由更新信息。(动态维护)
6、不支持子网掩码的RIP广播,即每个网络子网掩码必须相等。
ps:在新的RIP2中支持变长子网掩码与CIDR。
RIP性质
1、网络出现故障则要较长时间收敛(30s更新一次的限制)。
2、属于应用层协议,使用UDP传送数据(端口520)。
3、选择的路径不一定是耗时最短的,但一定是距离/跳数最小的。
网际控制报文协议(ICMP)
ICMP差错报文
1、终点不可达---路由器或主机无法交付数据报。
2、源点抑制---路由器或主机因拥塞丢弃数据报。
3、时间超过---路由器收到生存时间(TLL)为零的数据报。
4、参数问题---路由器或目的主机收到数据报的首部中有的字段值错误。
5、改变路由(重定向)---路由器路径修改后,要发送给主机更新目的路由。
不发送差错报文的几种情况
1、出错的是ICMP差错报文。
2、发送过ICMP差错报文的分片的后续所有分片。
3、具有组播地址的数据报。
4、特殊地址(如127.0.0.0或0.0.0.0)。
ICMP询问报文
1、回送请求和回答报文。
2、时间戳请求和回答报文。
3、地址掩码请求和回答报文。
4、路由器询问和通告报文。
ICMP常见应用
1、分组网间探测(PING):测试两台主机连通性。
2、Traceroute(UNIX系统)/Tracert(Windows系统):跟踪分组经过的路由。
ps:PING工作在应用层,跳过传输层的TCP与UDP直接使用网络层的ICMP;
Traceroute/Tracert工作在网络层。
子网划分
对于一个IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248的网络:
IP地址 | 子网掩码 | |
十进制表示 | 192.168.5.0/24 | 255.255.255.248 |
二进制表示 | XX.XX.XX.0000 0000 | XX.XX.XX.1111 1000 |
对于IP地址,因为网络号为前24位,故剩余的后8位为子网位+主机位。
对于子网掩码的后8位来说,前5位为1,后3位为0,故IP地址后8位中的前5位为子网号,后3位为主机号。
子网号的范围为XX.XX.XX.0000 0XXX ~ XX.XX.XX.1111 1XXX,共个可分配个数。
主机号的范围为XX.XX.XX.XXXX X001 ~ XX.XX.XX.XXXX X110,共-2个可分配个数。
路由器
冲突域
连接到同一物理介质上的结点集合,在OSI参考模型中视为第一层概念,如集线器、中继 器等连接的设备属于同一冲突域,第二层(网桥、交换机)设备与第三层(路由器)设备可以划分冲突域。
广播域
接收同样广播消息的结点集合集合,在OSI参考模型中视为第二层概念,只能被第三层设备划分广播域。
广播风暴
由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制,传播数据帧,导致网络性能下降,甚至网络瘫痪。可通过路由器划分广播域解决。
标准路由表
目的网络IP地址、子网掩码、下一跳IP地址、接口。
转发与路由选择
转发只将IP数据报根据路由表信息从指定端口发送出去,对象为单个路由器;
路由选择通过复杂的路由算法,根据相邻路由器得到的网络拓扑变化动态地改变选择的路由,对象为多个路由器。
域名系统(DNS)
使用客户/服务器模型,协议运行在UDP之上,使用53号端口。
层次域名空间
层次树状结构命名,使任何一个连接到英特网的主机或路由器都有唯一的层次结构名称,即域名,共分为顶级域、二级域、三级域,部分域名有四级域。
域名要求
1、标号中的英文不区分大小写。
2、只可以使用字符"-"。
3、每个标号不超过63个字符,完整域名不超过255个字符。
4、级别低的域名在左,级别高的域名在右。
eg. www.this-is-a-web.edu.cn
cn -> 顶级域名 edu -> 二级域名 this-is-a-web -> 三级域名 www -> 四级域名
域名解析过程
主机 -> 本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权限域名服务器
域名解析两种方法
1、递归查询:主机向本地域名服务器查询失败后,都由当前服务器向下一层服务器进行查询,直到查询成功再一层层返回域名。(负载大几乎不用)
2、递归与迭代结合的查询:主机向本地域名服务器查询失败后,由本地域名服务器逐个向后续的服务器进行访问,直至查询到域名,直接返回给主机。
ps:域名服务器中含有高速缓存以提高DNS查询效率。