408 考研复试【转载】【总结】

 

------------------------------------------------------------------

数据结构 :http://www.cnblogs.com/yuxiaoba/p/8646169.html
- 数组和链表的区别。
结构上:在内存中连续存储,固定的长度;链式存储结构。
访问方式:下标索引进行访问;访问元素时候只能够通过线性方式由前到后顺序的访问。


- 简述快速排序过程。
选择枢纽元素,通过一次排序,把记录分为2部分,一部分记录的元素值均比它小。另一部分记录的元素值比它大。
此时枢纽元素落地了排好序的最终位置,然后再分别对剩下的两部分进行排序。直到整个序列有序。

- 快速排序为什么快,改进?
系数1.39,用到了局部性原理;
随机选择枢纽元素,比如说从首尾中间元素三数取中。


- 各类排序算法对比。
考察那张表格。插入类的,选择类的,交互类的。归并,基数。
O(nlog2n))排序快速排序、堆排序和归并排序。
稳定性:若待排序的序列中,存在多个具有相同关键字的记录,经过排序,这些记录的相对次序保持不变,

归并排序是一个分治思想的典型应用,它将一个数组分成两半,分别对这两半进行排序,然后将它们合并成一个有序的数组。


- 图的两种存储形式: 邻接矩阵与邻接表对比。
邻接矩阵表示法:在一个一维数组中存储所有的点,在一个二维数组中存储顶点之间的边的权值。
邻接表表示法:图中顶点用一个一维数组存储,图中每个顶点vi的所有邻接点构成单链表。
区别:无向图和有向图的区别;快速判断两个顶点之间是否存在边;节省空间,只存储实际存在的边,其缺点是关注顶点的度时,就可能需要遍历一个链表。

- 深度优先遍历和广度优先遍历分别用了什么数据结构

深度优先遍历通常使用栈(Stack)作为辅助数据结构。栈是一种后进先出(LIFO)的数据结构,非常适合用于深度优先搜索。在遍历过程中,每次访问一个节点时,会将其压入栈中,然后访问其第一个子节点(如果存在)。当没有子节点可以访问时,会从栈中弹出一个节点,并访问其兄弟节点(如果存在)。这个过程会一直进行,直到栈为空,即所有可达的节点都被访问过。

广度优先遍历则通常使用队列(Queue)作为辅助数据结构。队列是一种先进先出(FIFO)的数据结构,非常适合用于广度优先搜索。在遍历过程中,首先访问根节点,并将其子节点(如果存在)全部加入队列。然后,从队列中取出一个节点,并访问其所有子节点(如果存在),将这些子节点加入队列。这个过程会一直进行,直到队列为空,即所有可达的节点都被访问过。


- 合并查找(并查集)
合并查找(Union-Find)是一种用于处理集合的数据结构,也称为并查集。它支持两个操作:查找和合并。主要用于解决一些经典问题,比如连通性问题、最小生成树问题等。


- 解决哈希冲突的方法。
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。
1) 开放地址法
2) 拉链法

- KMP算法。
在一个字符串中查找是否包含目标的匹配字符串。对比暴力破解少移动了很多位。
其主要思想是每趟比较过程让子串先后滑动一个合适的位置。当发生不匹配的情况时,不是右移一位,而是移动(当前匹配的长度– 当前匹配子串的部分匹配值)位。


- B树和B+树。
存储的位置不同,叶子非叶子,索引;结点的关键字的数量不同。

关键字的数量不同;B+树中分支结点有m个关键字,其叶子结点也有m个,其关键字只是起到了一个索引的作用,但是B树虽然也有m个子结点,但是其只拥有m-1个关键字。
存储的位置不同;B+树中的数据都存储在叶子结点上,也就是其所有叶子结点的数据组合起来就是完整的数据,但是B树的数据存储在每一个结点中,并不仅仅存储在叶子结点上。
分支结点的构造不同;B+树的分支结点仅仅存储着关键字信息和儿子的指针(这里的指针指的是磁盘块的偏移量),也就是说内部结点仅仅包含着索引信息。
查询不同;B树在找到具体的数值以后,则结束,而B+树则需要通过索引找到叶子结点中的数据才结束,也就是说B+树的搜索过程中走了一条从根结点到叶子结点的路径。


- 最小生成树的算法有哪些(普里姆算法,和克鲁斯卡尔算法),对这两个算法做比较,以及这两个算法采用的数据结构是哪些

**普里姆(Prim)算法**

以点为对象。它从任意一个顶点开始,每次选择与当前生成树距离最短的顶点加入生成树,直到所有顶点都加入生成树为止。

以边为对象。在实现过程中,需要用到一个辅助数组来记录已选入生成树的顶点,以及一个距离数组来记录从当前生成树到图中每个顶点的最短距离。

**克鲁斯卡尔(Kruskal)算法**

克鲁斯卡尔算法也是求解加权连通图最小生成树的算法。它的基本思想是按照边的权值从小到大选择n-1条边,并保证这n-1条边不构成回路。

克鲁斯卡尔算法通常使用并查集数据结构来辅助实现。并查集能够高效地判断两个顶点是否属于同一个连通分量,从而避免形成回路。在实现过程中,需要对边按照权值进行排序,然后依次选择边加入生成树,并使用并查集来判断是否形成回路。

**算法比较**

1. 时间复杂度:在稀疏图中,普里姆算法的时间复杂度为O(n^2),而克鲁斯卡尔算法的时间复杂度为O(eloge),其中e为图中边的数量。因此,在稀疏图中,克鲁斯卡尔算法通常更高效。然而,在稠密图中,普里姆算法的时间复杂度可以降低到接近O(n^2),此时两种算法的效率相差不大。

2. 适用性:普里姆算法适用于稠密图,而克鲁斯卡尔算法更适用于稀疏图。此外,如果图中存在负权边,普里姆算法仍然适用,但克鲁斯卡尔算法则无法正确处理。

3. 实现难度:普里姆算法相对容易实现,只需要维护一个距离数组和一个辅助数组即可。而克鲁斯卡尔算法则需要使用并查集数据结构,实现起来相对复杂一些。

**数据结构**

普里姆算法主要使用的数据结构包括邻接矩阵或邻接表(用于存储图的信息)、距离数组(记录当前生成树到每个顶点的最短距离)和辅助数组(记录顶点是否已加入生成树)。
克鲁斯卡尔算法主要使用的数据结构包括边的集合(按权值排序)、并查集(用于判断顶点是否属于同一连通分量)。

 

- 知道红黑树吗,二叉查找树,AVL平衡树,哈夫曼树,哈夫曼编码及其应用

AVL(得名于其发明者的名字( Adelson-Velskii 以及 Landis))是一种更严格的二叉树。相对来说旋转次数较多,所以适用于不那么需要频繁旋转的场景,比如插入删除较少的场景就可以用,比如查询。

红黑树是一种相对不那么严格的弱平衡二叉树,自平衡的二叉查找树,因为旋转次数不那么多,所以对于插入删除等操作,优于AVL树。因此对于查找,插入,删除操作较多的情况,一般用红黑树。 不用保证所有节点的左右子树高度差的绝对值不超过1。HashMap、TreeMap都用了红黑树。

二叉查找树(BST)是一种特殊的二叉树,它满足以下性质:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这使得二叉查找树在查找、插入和删除操作中具有较高的效率。然而,当二叉查找树退化为链表时,其性能会急剧下降。
二叉排序树可能退化为链表,(时间复杂度O(n)。在平均情况下,如果树是随机构建的,查找的时间复杂度大致为O(log n)。

在许多应用中,树中结点常常被赋予一个表示某种意义的数值,称为该结点的权。从树的根中所有叶结点的带权路径长度之和称为该树的带权路径长度。在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,哈夫曼编码及其应用——数据压缩。

### 给你一堆无序的数据,如何才能高效的找到其中间值?

可以使用快速选择算法(QuickSelect)来高效地找到无序数据的中位数或第k小的元素。
快速选择算法是快速排序算法的变种,它的基本思路是:选取一个枢轴元素,将所有比枢轴元素小的元素放在左侧,所有比枢轴元素大的元素放在右侧,再根据枢轴元素所在的位置,将待选范围缩小一半,递归地处理这个范围,直到找到第k小的元素。
具体来说,我们可以选取一个随机元素作为枢轴元素,将小于等于它的元素放在左侧,大于它的元素放在右侧。然后比较枢轴元素的位置和k的大小关系,若相等则找到了第k小的元素,否则根据大小关系递归处理左侧或右侧部分。
快速选择算法的时间复杂度为O(n),与快速排序相比,它只需要处理部分数据,因此效率更高。


------------------------------------------------------------------


计算机组成原理:http://www.cnblogs.com/yuxiaoba/p/8646090.html



# 计算机组成原理

冯·诺依曼机,其特点如下:

1) 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5 大部件组成
2) 指令和数据以同等地位存储在存储器中,并可按地址寻访。
3) 指令和数据均用二进制代码表示。
4) 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
5) 指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下可根据运算结果或根据设定的条件改变执行顺序。
6) 早期的冯诺依曼机以运算器为中心,输入/输出设备通过运算器与存储器传送数据。现代计算机以存储器为中心。

计算机的工作过程分为以下三个步骤:
1) 把程序和数据装入主存储器。
2) 将源程序转换成可执行文件。
3) 从可执行文件的首地址开始逐条执行指令。


## 什么是编译?什么是解释?

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释。

1) 翻译的方式有两种,一个是编译,一个是解释。
2) 编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,如果源程序不变以后要运行的话就不用重新翻译。
3) 解释则不同,解释性语言的程序不需要编译,在运行程序的时候才翻译,翻译一句执行一句,不生成目标程序,这样解释性语言每执行一次就要翻译一次,效率比较低。
4) C语言编译过程分成四个步骤。

有哪些技术能够提高CPU访存速度?
1) 双端口RAM 是指同一个存储器有左、右两个独立的端口 为空间并行
2) 多模块存储器 时间并行

### **Cache的基本工作原理**

cache是一种小容量高速缓冲存储器,寄存器的速度和主存之间存在着太大的差异,在CPU和主存之间设置cache,把主存中被频繁访问的活跃程序块和数据块复制到cache中。
1) Cache通常采用相联存储器。使用Cache改善系统性能的依据是程序的局部性原理。
2) 替换算法:当Cache产生了一次访问未命中之后,相应的数据应同时读入CPU和Cache。但是当Cache已存满数据后,新数据必须替换(淘汰)Cache中的某些旧数据。最常用的替换算法有随机算法、先进先出算法(FIFO)和近期最少使用算法(LRU)。
3) 写操作:因为需要保证缓存在Cache中的数据与内存中的内容一致,Cache的写操作比较复杂。命中:全写(同时写入 cache 和缓存,写缓冲)、回写(只修改 cache 被换出时写入主存)。不命中:写分配、非分配(不调快,搭配全写)
4) 与主存的映射方式:直接映射:主存数据块只能装入Cache中的唯一位置;全相联映射:可以把主存数据块装入Cache 中的任何位置;组相联映射:将Cache分为若干组,一个数据块可以装入一组内的任何一个位置。

存储器地址的高段通过主存-Cache地址映射判定该地址的存储单元是否在Cache中,如果在且有效,则Cache命中,按Cache地址访问Cache.否则,Cache不命中,则需要访问主存。

**主存地址结构划分:**

主存和cache是以数据块为单位进行数据交换的,因此主存块大小=cache块大小 数据块大小64B(26B),以字节编址,占 6 位;

| 主存块号 | 块内地址 |
| ------------------------------- | ---- |
| 主存字块标记(19位) + cache行号(3位) = 22位 | 6位 |

**查找策略:**
假如访问地址为:0…01000 001110

1. 根据主存块号后3位确定cache行号
2. 如果主存块号前19位与cache标记匹配且有效位为1,则cache命中,访问块内地址为001110的单元
3. 若cache不命中或有效位为0,则正常访问内存

比较行号/组号、比较cache标记位和有效位、用块内地址访问主存的数据副本

* 有效位:(一定有)固定占 ==**1**== 位,由于cache未装进数据块时,主存字块标记默认为0,所以有效位是为了区分当前cache块是没装数据还是装了一个主存第0的数据
* 标记位:(一定有)==主存字块标记位数==,用于标识当前cache行存放的主存哪一行数据,计算方法见上
- 脏位:(特定条件下才有)也叫一致性维护位,只有当cache写策略采用 ==**写回法** 时,该位生效并且占 **1** 位==
- 替换控制位: (特定条件下才有)或叫替换算法位,用于标记替换cache哪一行会被换出,在cache替换策略中,当采用 ==**LRU和LFU替换算法**== 时,这个控制位会作为被换出的依据。

 

**程序访问的局部性**

时间局部性:如果一个存储项被访问,则可能该项会很快被再次访问.
空间局部性:如果一个存储项被访问,则该项及其邻近的项也可能很快被访问.


**字长**

机器字长:计算机能直接处理的二进制位数
指令字长:一个指令字中包含的二进制代码位数
存储字长:一个存储单元存储二进制代码长度
CPI:执行一条指令需要的时钟周期数

机器字长是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数

指令执行过程?
1) 取指令
2) 分析指令
3) 执行指令

 

### RISC(**简单指令集计算机**)、CISC(**复杂指令集计算机**)

CISC和RISC是计算机处理器的两种指令集架构。CISC代表复杂指令集计算机,而RISC代表精简指令集计算机。

CISC指令数目多、字长不固定、寻址方式多、寄存器数量少、微程序控制;
RISC 少、少、少、多、组合逻辑控制;

8086是Intel公司在1978年推出的一款16位微处理器,也是x86指令集的一种实现。

指令系统是一组用于控制计算机硬件操作的指令集合。


### **指令流水线的基本概念**


流水线技术是一种显著提高指令执行速度与效率的技术。方法是:指令取指完成后,不等该指令执行完毕即可取下一条指令。如果把一条指令的解释过程进一步细分,例如分成取指,译码,执行,访存,写回五个子过程,并用五个子部件分别处理这五个子过程

影响流水线性能的因素

1)结构相关是当多条指令同一时刻争用同一资源形成冲突

解决方案:(1)暂停一个时钟周期(2)单独设置数据存储器和指令存储器

2)数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的.

解决方案:(2)暂停一个时钟周期(2)数据旁路:把前一条指令的ALU计算结果直接输入到下一条指令

3)控制相关是当流水线遇到分支指令和其他改变PC值的指令时引起的.

解决方案:(1)延迟转移技术。将转移指令与其前面的与转移指令无关的一条或几条指令对换位置,让成功转移总是在紧跟的指令被执行之后发生,从而使预取的指令不作废。(2)转移预测技术

 

### CPU 的功能

中央处理器(CPU) 由运算器和控制器组成。其中,控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和执行指令;运算器的功能是对数据进行加工。


### CPU响应中断的条件是什么?简述中断处理过程

CPU响应中断必须满足3个条件:

1.中断源有中断请求。
2.CPU允许中断及开中断(异常和不可屏蔽中断不受此限制)。
3.一条指令执行完毕(异常、DMA请求不受此限制),且没有更紧迫的任务。

异常事件检测由cpu在执行每一条指令的过程中执行,中断请求检测由cpu在每条指令执行结束,取下条指令之前进行。


### 中断响应优先级和中断处理优先级分别指什么

中断优先级包括响应优先级和处理优先级,响应优先级在硬件线路上是固定的,不便改动。处理优先级可利用中断屏蔽技术动态调整,而中断处理优先级可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低(屏蔽位为"0", 对新中断开放),若是,则中止正在处理的中断,转到新中断去处理,处理完后再回到刚才被中止的中断继续处理。

程序中断是指在计算机执行实现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

### **一个完整的中断过程包括:**

**中断请求:** 是指中断源(引起中断的事件或设备)向CPU发出的请求中断的要求。
**中断判优:** 当有多个中断源发出请求时,需要通过适当的办法决定先处理哪个中断请求;
**中断响应:** 指CPU中止现行程序转至中断服务程序的过程;
**中断处理:** 就是指CPU执行中断服务程序;
**中断返回:**   执行完中断服务程序后,返回到被中断的程序


■外中断:I/O设备等来自主机外部设备的中断。(通常所说的中断就是外中断)
■内中断:处理器硬件故障或程序出错引起的中断。(也叫异常)硬件故障、程序出错除数为0、trap

CPU对异常和中断响应过程:

硬件:1.关中断:CPU响应后,要保护现场的状态,CPU不应该响应更高级别的中断,目的是将现场保存完整,否则在中断执行结束之后,无法恢复执行当前的程序。
2.保存断点:记录程序的断点,程序是由一些列的指令构成的,存在一个程序计数器,用于记录此时程序下一个要执行但由于中断没有发生的指令,保存下来,便于返回这个程序
3.引出中断服务程序:取出中断服务程序的入口地址,及使用程序计数器记录该程序的指令。

4.保存现场和屏蔽字:在进入中断程序后,要保存现场,指一些寄存器的内容,如程序的状态字寄存器PSWR和某些通用寄存器的内容
5.开中断:在完成以上的一系列的保存动作后可以接受更高级别的中断了
6.执行中断服务程序
7.关中断:执行完成后,要恢复现场,此时不能接收新的中断
8.恢复现场和屏蔽字:将之前保存的寄存器的内容恢复,对应了第四条
9.开中断、中断返回:中断服务程序的而最后一条指令通常是一条中断返回指令,返回原来的断点处,继续执行原程序。

### 向量中断、中断向量、向量地址三个概念是什么关系

1)中断向量:每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。

2)向量地址:中断向量表或中断向量跳转表中每个表项所在的内存地址或表项的索引值,称为向量地址或中断类型号。

3)向量中断:指一种识别中断源的技术或方式。识别中断源的目的是找到中断源对应的中断服务程序的入口地址的地址,即获得向量地址。

CPI:执行一条指令需要时钟周期数

1)程序查询:CPU要不断地查询外围设备的工作状态,一旦外围设备“准备好”或“不忙”,即可进行数据的传送 IO设备把数据充满缓冲区的速度高于从缓冲区取数据的速度 不然丢数据

2)程序中断:当外围设备完成数据传送的准备后,便主动向CPU发出“中断请求” 信号。**若CPU允许中断,则在一条指令执行完后**,响应中断请求,转去执行中断服务子程序,完成数据传送,通常传送一个字或一个字节。传送完后继续执行原程序。 中断请求方式在一定程度上实现了CPU和外围设备的并行工作。

3)DMA:在外围设备和主存之间开辟直接的数据通路。在正常工作时,所有的工作周期均用于执行CPU的程序。当外围设备完成I/O的准备工作后,占用CPU的工作周期,和主存直接交换数据。完成后,CPU又继续控制总线,执行原程序。 完成这项工作的是系统中增设的DMA控制器。
**DMA控制器**在进行DMA传送之前,由CPU将每次传送的主存地址、数据的个数等参数传送给DMA控制器,然后具体的数据传送就由DMA控制器实现,无须CPU的参与。

DMA请求:IO设备向DMA控制器发起请求。
DMA中断:DMA中断指的是DMA传送完成后向CPU的中断。

**中断方式是对I/O准备做出改进,它不需要CPU不断查询来确认外设状态,而是引入了中断机制,在I/O准备好后,通过中断请求通知CPU,而在外设准备阶段,CPU是可以执行原来的主程序,也就是说CPU只参与数据传送阶段。而DMA方式更是将数据传送阶段也给省了,将数据传送的工作交给DMA控制器,使得CPU更加专注于主程序的执行。**

### 怎么解决分支指令在流水线里的控制相关

在流水线中,分支指令会引起控制相关(control hazard),导致流水线暂停等待分支指令的结果。为了解决这个问题,可以使用以下方法:

1. 延迟槽(delay slot):在分支指令后面插入一条指令,即延迟槽,使流水线能够继续执行,同时避免分支指令带来的延迟。延迟槽中的指令应该是不影响程序正确性的,可以是无操作的指令(NOP)或者是分支指令的目标指令。延迟槽的长度需要根据具体的架构来决定。
2. 预测分支指令的结果:在分支指令执行前,预测分支的结果,如果预测正确,则流水线可以继续执行下去,否则需要清空之前的指令,重新执行分支指令后面的指令。预测分支结果的算法有很多,常见的有静态预测和动态预测。静态预测是根据指令的类型和位置等信息来进行预测,比如总是预测跳转不发生,或者总是预测跳转发生。动态预测则需要运行时的历史信息,比如跳转指令的目标地址是否在最近几次跳转中出现过,来进行预测。
3. 分支目标缓存(Branch Target Buffer,BTB):分支目标缓存是一个小的高速缓存,用来保存分支指令的目标地址和预测的结果。如果下次遇到相同的分支指令,可以直接从缓存中读取预测结果,加速分支指令的执行。BTB一般与预测算法配合使用,可以显著提高流水线的效率。

13. 通道

在计算机体系结构中,通道(Channel)是一种并行处理数据的方式,它允许多个设备同时与内存进行数据传输,而不需要CPU的干预。通道通常由一组特殊的硬件设备组成,可以独立地与内存进行数据传输。
通道的使用可以大大提高系统的吞吐量和性能,因为它允许多个设备同时进行数据传输,而不需要等待CPU的介入。通道可以通过DMA(直接存储器访问)引擎实现,它允许设备直接访问内存,而不需要CPU的干预。
通道在大型计算机、服务器和高性能计算机中广泛使用,它们通常具有高带宽和低延迟,可以同时处理多个数据流。通道通常被用于高速网络接口、存储器和其他设备的数据传输,以及高性能计算和数据处理任务


14. 原码,反码,补码

在计算机中,正数的原码、反码、补码是相同的,都是它们的二进制表示。例如,十进制的 +5,它的二进制原码、反码、补码都是 00000101。
负数的原码是将对应正数的最高位(即符号位)改为1,例如-5的原码是10000101。反码是在原码的基础上,除了符号位之外,其他位按位取反,例如-5的反码是11111010。补码是在反码的基础上加1,例如-5的补码是11111011。
使用补码来表示有符号整数,可以避免在加减法时出现溢出的情况。例如,对于-5和+3的加法操作,可以将它们的补码相加:11111011 + 00000011 = 00000100。这个结果的补码表示是 00000100,对应的十进制是+4,这是正确的结果。

15. ROM和RAM

ROM和RAM是计算机中常见的两种存储器,它们的主要区别在于其数据的可读写性质:

1. ROM(只读存储器,Read-Only Memory):只能读取数据,不能写入数据。ROM存储器通常用于存放系统启动程序、固件等只需在设备制造或系统初始化时进行写入的数据。
2. RAM(随机存储器,Random Access Memory):可以读写数据。RAM存储器通常用于临时存储程序运行时需要读取或写入的数据,如系统内存、缓存等。

16. I/O阻塞和I/O非阻塞的区别

在I/O阻塞模式下,当一个进程发起一个I/O请求后,它将一直等待直到I/O操作完成后才能继续执行。在这个过程中,进程会被操作系统挂起,等待I/O操作完成。这种模式下,I/O操作可能会占用大量的CPU时间,从而导致系统性能下降。
相反,在I/O非阻塞模式下,当一个进程发起一个I/O请求后,它将不会等待I/O操作的完成,而是立即返回一个错误码或者一个可读可写的标志。进程可以通过轮询或者回调等方式来检查I/O操作是否完成,如果没有完成,它可以继续执行其他操作。这种模式下,I/O操作不会阻塞进程,从而提高了系统的并发性和性能。
总的来说,I/O非阻塞模式比I/O阻塞模式更加灵活,适用于需要处理大量I/O操作的系统。但是,它也需要进程进行额外的轮询或回调操作,增加了代码的复杂度。因此,在选择I/O模式时,需要根据具体的应用场景进行权衡。


21. 中断的过程

中断源向CPU提出中断请求;中断响应判优;检查中断响应条件;

中断过程:关中断,保存断点,引出中断服务程序

保存现场和屏蔽字;开中断;执行中断服务程序;关中断;恢复现场和屏蔽字;开中断;中断返回。

22. 中断保护机制,进程死循环时怎么办

定时器中断,操作系统介入

23. 计算机存储有哪些层次

寄存器,cache,内存,外存

25. 虚拟存储和高速缓存的结构和各自的作用?

虚拟存储和高速缓存是计算机系统中常见的两种存储技术,它们分别有着不同的结构和作用。
虚拟存储是一种将主存和辅存结合起来使用的技术,可以扩大程序的地址空间,提高程序的运行效率。虚拟存储通常由硬件和操作系统共同实现。在虚拟存储中,主存储器和辅存储器之间通过一定的映射关系进行数据的交换,这样程序就可以使用比实际主存更大的地址空间,而且不需要把所有数据都存放在主存中,这样可以节省主存空间。
虚拟存储的实现通常依靠一个叫做页表的数据结构,它记录了主存和辅存之间的映射关系。当程序访问一个虚拟地址时,处理器会先到页表中查询对应的物理地址,如果在主存中,则直接访问,否则就触发缺页异常,操作系统会把所需的数据从辅存复制到主存中。
高速缓存是一种硬件存储器,通常集成在处理器内部或者与处理器紧密相连,它用于加速访问主存储器。高速缓存通常使用一定的缓存算法,例如最近最少使用(LRU)算法,来缓存最有可能被使用的数据。当处理器需要访问某个数据时,如果该数据在高速缓存中已经存在,则可以直接从高速缓存中取得,从而避免了从主存中读取数据的开销。
高速缓存的结构通常由多级缓存组成,其中L1缓存通常与处理器核心直接相连,速度非常快,但容量较小。L2缓存通常由多个处理器核心共享,容量较大,但速度相对较慢。L3缓存则通常位于处理器内部或者与处理器紧密相连,用于加速L2缓存的访问。
总体来说,虚拟存储和高速缓存都是用于提高程序运行效率的重要技术,虚拟存储扩大了程序的地址空间,避免了主存的空间限制,而高速缓存则加速了程序对主存的访问。它们在计算机系统中扮演着重要的角色。

26. 指令执行的步骤有哪些?

取指,译码,执行,访存,写回

27. 微程序控制器的原理

将每条机器指令编写成一个微程序,每个微程序包含若干条微指令,每条微指令对于一个或几个微操作

28. 流水线什么时候可以中断

在计算机处理器的流水线执行过程中,流水线的中断处理主要有两种情况:

1. 指令级中断:当一个指令引发中断时,当前正在流水线上执行的指令会被暂停,中断处理程序会被执行。当中断处理程序执行完毕后,流水线可以从中断前的指令处继续执行。
2. 异常级中断:当系统发生某种异常情况(如缺页异常)时,当前正在流水线上执行的指令会被暂停,处理器会跳转到异常处理程序进行处理。当异常处理程序执行完毕后,流水线可以从中断前的指令处继续执行。

需要注意的是,流水线中断处理需要保证流水线的正确性,即保证中断处理不会影响到流水线中未处理完的指令,同时也需要保证中断处理程序的正确性。在流水线处理器设计中,为了避免中断对流水线的影响,一般会设计相应的中断处理电路,如中断控制器,以保证中断能够正确地被处理。

29. I/O控制方式

在计算机中,输入/输出(I/O)控制方式通常有以下几种:

1. 程序控制I/O(PIO):这种方式下,所有的I/O操作都由CPU来控制。CPU向设备发送命令,等待设备的响应,并将响应读取到内存中。这种方式下,CPU需要等待I/O操作完成后才能进行下一步操作,因此效率较低。
2. 中断控制I/O(IRQ):这种方式下,设备完成I/O操作后,向CPU发送中断请求信号,CPU响应中断,并进行中断处理程序。中断处理程序将设备的I/O响应读取到内存中。这种方式下,CPU不需要等待I/O操作完成,可以在等待期间进行其他操作,因此效率比PIO高。
3. 直接存储器访问(DMA):这种方式下,设备可以直接访问系统内存,完成I/O操作。CPU只需要启动DMA操作,并在DMA操作完成后读取内存中的数据即可。这种方式下,CPU不需要参与I/O操作,因此效率最高。

 

 

------------------------------------------------------------------

 

操作系统:http://www.cnblogs.com/yuxiaoba/p/8646139.html

系统调用(system call):当一个程序使用系统调用的时候,通过操作系统预先设置的陷阱处理程序(trap handler)从用户态陷入到内核态,并将特权级别提升到内核模式,这个时候操作系统可以完全控制和访问计算机的硬件资源,以机器指令的形式来执行,待完成请求的服务后,操作系统将控制权交还给原程序。

**exe文件不是机器语言**。exe文件是Windows操作系统上常见的可执行程序文件,是一种二进制文件,包含了计算机程序的机器代码和数据。这些机器代码和数据是由编译器将源代码翻译成机器语言后,再组合成一个二进制文件,并添加一些头部信息形成的。因此,exe文件虽然包含了机器语言代码,但它本身并不是机器语言,而是包含了机器语言代码的可执行文件。

### 操作系统的目标和功能?(什么是操作系统?)

1.操作系统是计算机资源的管理者

处理机管理(进程控制、进程同步、进程通信、死锁处理、处理机调度)
存储器管理(提高内存利用率,内存的分配与回收、地址映射、内存保护与共享、内存扩充)
文件管理(计算机中的信息都是以文件的形式存在的)
设备管理(完成用户的I/O请求,方便用户使用设备、并提高设备的利用率)

2.操作系统为用户提供使用计算机硬件系统的接口命令接口(用户通过控制台或终端输入操作命令,向系统提供各种服务要求)

程序接口(由 系统调用 组成,用户在程序中使用这些系统调用来请求操作系统为其提供服务)
图形接口 最常见的 图形用户界面GUI (最终还是通过调用程序接口实现的)


### 进程和线程的区别

1.进程(Process)是拥有资源的基本单位,线程(Thread)是独立调度的基本单位;
2.线程依赖于进程而存在,一个进程至少有一个线程;
3.进程有自己的独立地址空间,线程共享所属进程的地址空间;
4.开销创建和撤销开销大;

### 进程和程序的区别

1、进程是动态的,程序是静态的;
2、进程是程序的执行,程序是代码的集合;
3、进程包括程序、数据和PCB;

### 进程的5种状态及转换过程?

创建、终止
运行、阻塞、就绪

运行态
进程拥有了CPU资源和其他所需资源。(比如打印机资源,当打印机准备好,打印机才能为该进程服务)
就绪态
进程拥有了其他所需资源,但还没拥有CPU资源。(当打印机准备好,该进程等待CPU的调度)
阻塞态
请求某一资源而暂停运行,进程既没有CPU资源也没有其他所需资源。(当打印机资源在准备的时候,该进程不占用打印机资源,而且CPU会执行其他进程的指令)

### 进程的调度算法有哪些?

1.先来先服务 first-come first-serverd(FCFS)

按照请求的顺序进行调度。非抢占式,开销小,无饥饿问题,响应时间不确定(可能很慢);
对短进程不利,对IO密集型进程不利。

2.最短作业优先 shortest job first(SJF)
对短进程提供好的响应时间,对长进程不利


### 进程的通信方式?


进程和线程是操作系统中的基本执行单元,它们可以通过各种方式进行通信,常用的有以下几种:
1.管道:管道是一种基于文件描述符的通信机制,是一种半双工的通信方式。进程通过管道进行通信时,需要创建一条管道,将其中一个进程的输出和另一个进程的输入相连。这样,一个进程就可以向管道中写入数据,另一个进程可以从管道中读取数据。
2.共享内存:共享内存是进程间通信中最快的一种方式,其本质是一段由操作系统维护的内存区域,多个进程可以访问该内存区域。当进程需要进行通信时,需要在该内存区域中建立一些共享的变量或数据结构,并对其进行读写操作。
3.消息队列:消息队列是一种消息传递机制,用于在进程之间传递数据。一个进程向消息队列中发送一条消息,另一个进程则从该队列中读取该消息。消息队列可以实现点对点通信,也可以实现多对多通信。

### 用户级线程和内核级线程

用户级线程的所有操作都在用户空间完成,内核意识不到,
优点:可以在不支持线程的操作系统中实现,代价比内核线程少得多;缺点,阻塞会阻塞整个进程从而阻塞所有线程。

内核线程建立和销毁都是由操作系统负责、通过系统调用完成的。

### 线程模型

多对一模型、一对一模型和多对多模型。
多对一模型,多个用户级线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。


### 同步和互斥?

1.同步 直接制约;多个进程因为合作而使得进程的执行有一定的先后顺序。比如某个进程需要另一个进程提供的消息,获得消息之前进入阻塞态;

2.互斥 间接制约;多个进程在同一时刻只有一个进程能进入临界区

3.同步机制的4个准则

1.空闲让进 当无进程处于临界区,可允许一个请求进入临界区的进程立即进入自己的临界区
2.忙则等待 当已有进程进入自己的临界区,所有企图进入临界区的进程必须等待
3.有限等待 对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区
4.让权等待 当进程不能进入自己的临界区,应释放处理机


### 死锁

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

### 产生死锁的必要条件

① 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。
② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
③ 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
④ 循环等待条件:指在发生死锁时,必然存在一个进程资源的环形链。

4.处理死锁的基本方法:

① 预防死锁: 破坏4条件

② 避免死锁:

③ 检测死锁:

④ 解除死锁:

 

### 银行家算法

主要思想是避免系统进入不安全状态,在每次进行资源分配时,它首先检查系统是否有足够的资源满足要求,如果有,则先试行分配,并对分配后的新状态进行安全性检查。如果新状态安全,则正式分配上述资源,否则拒绝分配上述资源。


### 存储器管理应具有的功能

内存的分配和回收、地址变换


### 将用户程序变为可在内存中执行的程序的步骤?

1.编译:由编译程序将用户源代码编译成若干目标模块

2.链接:由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成一个完整的装入模块。

3.装入:由装入程序将装入模块装入内存中运行。


### 内存管理的主要功能
内存空间分配、地址转换、内存管理、内存共享


### **虚拟存储器的基本概念**

虚拟内存是一种内存管理技术,从逻辑上对内存容量加以扩存的。
连续分配:固定分区和动态分区分配产生内存碎片,页、段、页段;按照分区大小固定与否:分页分段;是否把作业都放入内存才能执行,请求分页。

1) 页式虚拟存储器:把虚拟存储空间和实际空间等分成固定大小的页,逻辑地址由虚页号和页内地址两部分组成,实际地址也分为页号和页内地址两部分,由地址映射机构将虚页号转换成主存的实际页号.页表是虚拟页号与物理页号的映射表.页式管理由操作系统进行,对应用程序员的透明的.

2)段式虚拟存储器:按照程序自身的逻辑关系划分为若干个段,段长可以任意设定.

4) 段页式管理:是上述两种方法的结合,它将存储空间按逻辑模块分成段,每段又分成若干个页,访存通过一个段表和若干个页表进行.

### **TLB(快表) 地址转换流程、请求分页中的地址转换流程**

在虚拟存储器中进行地址变换时,需要虚页号变换成主存中实页号的内部地址变换,这一过程缓存时首先要到主存查页表,然后才能根据主存物理地址访问主存的存取指令或数据。因此采用虚拟存储器机制后,访存的次数增加了。为了减少访存的次数,往往将页表中最活跃的几个页表项复制到高速缓存中。这种在高速缓存中的页表项称为快表(translation look aside buffer)

查表时,根据虚页表同时查找快表和慢表,当在快表中查到该虚页号时,就能很快找到对应的实页号,将其送入主存实地址寄存器,同时使慢表的查找作废.
如果在快表中查不到,则经过一个访主存的时间延迟后,将从慢表中查到的实页送入实地址寄存器,同时将此虚页号和对应的实页号送入快表.
访问页不在内存中,产生和处理缺页中断,但内存无空闲空间时,就要选择合适的页面置换算法.

虚页号 + 页内偏移 -> 页框号+ 页内偏移 = 完整的物理地址;虚页号和TLB标记全相联比较,相等且有效位1,快表命中

两级页表:一级页目录号代表一级页表中页表项相对一级页表的偏移量


### 页面置换算法
fifo 一个队列,最先入队的页面最先被逐出.一般来说,缓存越大,命中率越高,缺页率越低;贝莱迪异常.
lru 最近最少使用,每个页面上记录一个上次使用时间
clock 把内存中所有页面视为一个循环队列,一个指针关联,像时钟的指针一样在移动.改进型,给每一个页面设置一个使用位一个修改位,没有使用也没有修改,被逐出.

------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------
计算机网络:http://www.cnblogs.com/yuxiaoba/p/8646042.html

 


# 计算机网络

### 电路交换,报文交换和分组交换的区别?


分组交换:将报文分组转发到相邻节点,查找转发表,转发到下一个节点。也是存储-转发类型的网络。
### 计算机网络的主要性能指标?

带宽:最高数据率、时延;

 

3. OSI七层网络

| | | |
| ------- | ----------------------------------------------------------------------- | ------------------------- |
| OSI七层模型 | 功能 | 特点 |
| 应用层 | 为应用程序提供服务和协议 | 实现用户与网络之间的通信 |
| 表示层 | 数据格式的表示和转换 | 数据的表示、编码和加密 |
| 会话层 | 建立、管理和维护会话 | 管理网络中的对话和数据传输 |
| 传输层 | 流量控制、差错控制、服务质量、数据传输管理、端到端 | 为两台主机上的应用程序之间提供端到端的可靠数据传输 |
| 网络层 | 流量控制、拥塞控制、差错控制、网际互联 | 实现不同网络之间的互联 |
| 数据链路层 | 把网络层传下来的分组封装成帧,是为了出错时只重发出错的;差错控制CRC循环冗余;流量控制,停止等待后退n帧选择重传:连续发送按序接受累计确认; | 管理相邻节点之间的数据传输 |
| 物理层 | 物理媒介上的比特流传输 | 提供传输介质、数据传输速率、电压等方面的规范 |

4. 拥塞控制和流量控制区别

| | | | |
| ----- | ---------------------- | ----------------------------- | --- |
| 特点 | 拥塞控制 | 流量控制 | |
| 目的 | 控制网络拥塞 | 控制发送方与接收方的速度匹配 | |
| 发送方控制 | 是 | 是 | |
| 接收方控制 | 否 | 是 | |
| 依据 | 拥塞窗口 | 接收方缓冲区大小 | |
| 算法 | Slow Start等 | Stop and Wait、Sliding Window等 | |
| 优点 | 能够避免网络拥塞,提高网络的性能 | 能够保证发送方与接收方的速度匹配,提高网络的可靠性 | |
| 缺点 | 在网络不拥塞的情况下,可能会导致网络性能降低 | 不能够避免网络拥塞,只能保证发送方与接收方的速度匹配 | |

点对点。/全局问题。

### 为什么要进行流量控制?

由于接收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,如若此时不适当限制发送方的发送速率(即链路上的信息流量),前而来不及接收的帧将会被后面不断发送的帧"淹没",造成帧的丢失而出错。

### 流量控制的方式

停止等待:发送方每发送一帧,都要等待接收方的应答信号,之后才能发送下一帧;接收方每接收一帧,都要反馈一个应答信号;
后退n帧:发送方连续发送;接收方按序接受,累计确认,超时重传;(发送窗口大小>1,接收窗口大小=1)
选择重传:可设法只重传出现差错的数据帧或计时器超时的数据帧,但此时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧(发送窗口大小>1,接收窗口大小>1)


### 可靠传输机制有哪些?

数据链路层的可靠传输通常使用确认和超时重传两种机制来完成。

确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认。超时重传是指发送方在发送某个数据帧后就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止


### 随机访问介质访问控制?

随机访问协议,不采用集中控制方式(信道划分介质访问--时分复用),所有用户能根据自己的意愿随机地发送信息,占用信道,在总线形网络中,当有两个或多个用户同时发送信息时,就会产生帧的冲突,导致所有冲突用户的发送均以失败告终。为了解决随机接入发生的碰撞,每个用户需要按照一定的规则反复地重传它的帧,直到该帧无碰撞地通过。

CSMA协议、CSMA/CD 协议和CSMA/CA 协议等

- CSMA协议(载波侦听多路访问)(Carrier Sense Multiple Access)
非坚持式:经侦听,如果介质空闲,立即发送;如果介质忙,则等待一个随机分布时间发送;
p-坚持式:经侦听,如介质空闲,以p的概率发送,以(1–p)的概率延迟一个时间单元发送;如介质忙,持续侦听直至空闲
1-坚持式:经侦听,如介质空闲,立即发送;如介质忙,持续侦听,一旦空闲立即发送

- 载波侦听多路访问/碰撞检测 Carrier Sense Multiple Access with Collision Detection, CSMA/CD协议是CSMA 协议的改进方案。
”载波帧听”就是发送前检查信道,为了及时发现是否发生碰撞,即每个站在发送数据之前先要检测一下总线上是否有其他站点正在发送数据,若有则暂时不发送数据,等待信道变为空闲时再发送。
”碰撞检测”就是边发送边侦听,如果监听到了碰撞,立即停止发送,等待一段时间后重发;
多路访问指多个设备可以同时访问介质,一个设备发送的帧也可以被多个设备接收。
“先听后发,边听边发(区别于CSMA 协议),冲突停发,随机重发”。

- CSMA/CA协议(Collision Avoidance:碰撞避免)

CSMA/CD 协议已成功应用使用有线连接的局域网,但在无线局域网环境下,却不能简单地搬用CSMA/CD 协议,特别是碰撞检测部分。主要有两个原因:
1) 接收信号的强度往往会远小于发送信号的强度,且在无线介质上信号强度的动态变化范围很大,因此若要实现碰撞检测,则硬件上的花费就会过大。
2) 在无线通信中,并非所有的站点都能够听见对方,即存在“隐蔽站”问题,中心接入点ab相距甚远

把碰撞检测改为碰撞避免”碰撞避免”并不是指协议可以完全避免碰撞,而是指协议的设计要尽量降低碰撞发生的概率。
802.11无线局域网不使用“碰撞检测”,一旦发生一个帧,就是完全发送该帧。CSMA/CA 采用二进制指数退避算法。信道从忙态变为空困时,任何一个站要发送数据帧时,不仅都须等待一个时间间隔,而且还要进入争用窗口,并计算随机退避时间以便再次试图接入信道,因此降低了发生碰撞的概率。

CSMA/CA 还使用预约信道、ACK、RTS请求发送控制帧/CTS 允许发送控制帧“隐蔽站”问题
1) 预约信道。发送方在发送数据的同时向其他站点通知自己传输数据需要的时间长度,以便让其
他站点在这段时间内不发送数据,从而避免碰撞。
2) ACK 帧。所有站点在正确接收到发给自己的数据帧(除广播帧和组播帧)后,都需要向发送方
发回一个ACK 帧,如果接收失败,那么不采取任何行动。发送方在发送完一个数据帧后,在规定
的时间内如果未收到ACK 帧,那么认为发送失败,此时进行该数据帧的重发,直到收到ACK 帧或
达到规定重发次数为止。
3) RTS/CTS 帧。可选的碰撞避免机制,主要用于解决无线网中的“隐蔽站”问题

差别:cd检查冲突但无法避免,ca不能检查有无冲突;cd总线形以太网,ca 无线局域网;


### 集线器、网桥和交换机的区别与联系。
中继器 集线器 物理 隔离冲突域x和广播域x
网桥 链路层 隔离冲突域y广播域x
交换机 链路层 多端口的网桥
路由器 网络层 隔离冲突域y广播域y

冲突域是一时间内只能有一台设备发送信息的范围。站点发出一个广播信号,所有能接收收到这个信号的设备范围称为一个广播域。

链路层使用MTU表示最大传输帧长度,报文长度不能超过MTU,否则会进行分片,比如比较大的IP数据报就会被分片,为了避免被分片。一般要控制IP报文长度。

网卡是一个有mac地址的物理设备,通过mac地址与局域网内的交换机通信,交换机可以识别mac地址。
而单纯的中继器,集线器,双绞线等设备只识别物理层设备。
路由器则工作在3层ip层,必须要有ip才能工作,所以路由器每一个接口都对应一个ip,维护一个可以识别ip的路由表,进行ip数据报转发。
交换机具有自学习能力,学习的是交换表的内容。交换表中存储着 MAC 地址到接口的映射。
以太网是一种星型拓扑结构局域网。早期使用集线器进行连接,它是一种物理层设备,作用于比特而不是帧,当一个比特到达接口时,集线器重新生成这个比特,并将其能量强度放大,从而扩大网络的传输距离。之后再将这个比特向其它所有接口。特别是,如果集线器同时收到同时从两个不同接口的帧,那么就发生了碰撞。目前以太网使用交换机替代了集线器,它不会发生碰撞,能根据 MAC 地址进行存储转发。

### 路由器的作用,网络层和传输层是干什么的

路由器主要完成两个功能:一是路由选择(确定哪一条路径),二是分组转发(当一个分组到达时所采取的动作)。前者是根据特定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。后者处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等。

1) 路由选择。指按照复杂的分布式算法,根据从各相邻路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择的路由。
2) 分组转发。指路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。
3) 路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化。在讨论路由选择的原理时,往往不去区分转发表和路由表,而是笼统地使用路由表一词。


网络层:转发、路由选择

### 动态路由算法?

1、距离-向量路由算法(例如RIP算法)
从它自身到其他每个目的网络的距离=跳数。源端口到目的端口没经过一个路由器,跳数+1。距离等于16 时,它表示网络不可达。

2、开放式最短路径优先(例如OSPF算法)

链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息,它们执行下述两项任务。第一,主动测试所有邻接结点的状态。两个共享一条链接的结点是相邻结点,它们连接到同一条链路,或者连接到同一广播型物理网络。第二,定期地将链路状态传播给所有其他结点(或称路由结点)


OSPF 与RIP 相比有以下区别:

1) OSPF 向本自治系统中的所有路由器发送信息,这里使用的方法是洪泛法。而RIP 仅向自已相邻的几个路由器发送信息。

2) 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。”链路状态”说明本路由器和哪些路由器相邻及该链路的“度量”(或代价)。而在RIP 中,发送的信息是本路由器所知道的全部信息,即整个路由表。

3) 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现RIP" 坏消息传得慢"的问题。而在RIP 中,不管网络拓扑是否发生变化,路由器之间都会定期交换路由表的信息。

 

边界网关协议(Border Gateway Protocol, BGP) 是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。边界网关协议常用于互联网的网关之间。

 

### 网络层转发分组的流程?

1) 从数据报的首部提取目的主机的IP 地址D, 得出目的网络地址N。

2) 若网络N 与此路由器直接相连,则把数据报直接交付给目的主机D, 这称为路由器的直接交付;否则是间接交付,执行步骤3) 。

3) 若路由表中有目的地址为D 的特定主机路由(对特定的目的主机指明一个特定的路由,通常是为了控制或测试网络,或安全考虑才采用的),则把数据报传送给路由表中所指明的下一跳路由器;否则执行步骤4)

4) 若路由表中有到达网络N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行步骤5) 。

5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行步骤6) 。

6) 报告转发分组出错。

注意:得到下一跳路由器的IP 地址后并不是直接将该地址填入待发送的数据报,而是将该IP 地址转换成MAC 地址(通过ARP),将其放到MAC 帧首部中,然后根据这个MAC 地址找到下一跳路由器。在不同网络中传送时, MAC 帧中的源地址和目的地址要发生变化,但是网桥在转发帧时,不改变帧的源地址,请注意区分。

 

### IP地址和MAC地址?

IP 地址是网络层使用的地址,它是分层次等级的。MAC地址是数据链路层使用的地址,它是平面式的。

### ARP地址解析协议

传送数据帧时,最终必须使用硬件地址。所以需要一种方法来完成IP 地址到MAC 地址的映射,这就是地址解析协议。每台主机都设有一个ARP 高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC 地址的映射表,称ARP 表。使用ARP 来动态维护此ARP 表。

ARP 工作在网络层,其工作原理如下:主机A 欲向本局域网上的某台主机B 发送IP 数据报时,先在其ARP 高速缓存中查看有无主机B 的IP 地址。
如有,就可查出其对应的硬件地址,再将此硬件地址写入MAC 帧,然后通过局域网将该MAC 帧发往此硬件地址。
如果没有,那么就通过使用目 的MAC 地址为FF-FF-FF-FF-FF-FF 的帧来封装并广播ARP 请求分组,使同一个局域网里的所有主机收到ARP 请求。
主机B 收到该ARP 请求后,向主机A发出响应ARP 分组,分组中包含主机B 的IP 与MAC 地址的映射关系,主机A 在收到后将此映射写入ARP 缓存,然后按查询到的硬件地址发送MAC 帧。ARP 由于“看到了"IP 地址,所以它工作在网络层,而NAT路由器由于“看到了“端口,所以它工作在传输层。


### DHCP动态主机配置协议?

允许一台计算机加入新的网络和获取IP 地址而不用手工参与。

### ICMP网际控制报文协议?

为了提高IP 数据报交付成功的机会,在网络层使用了网际控制报文协议(Internet ControlMessage Protocol, ICMP) 来让主机或路由器报告差错和异常情况


### 传输层的功能?

1、端到端的通信,网络层提供的是主机之间的逻辑通信。
2、复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
3、面向连接的TCP 和无连接的UDP

 

### TCP、UDP


TCP协议有三个重要属性。

可靠传输,主要通过有序接收,确认后发送,以及超时重传来实现,并且使用分片来提高发送效率,通过检验和避免错误。

流量控制,主要通过窗口限制接收和发送速率。

拥塞控制,主要通过不同拥塞状态的算法来处理拥塞,一开始发的比较慢,然后指数增加,当丢包时再降低速度,重新开始第一阶段,避免拥塞。


### 拥塞控制的四种算法

慢开始算法
拥塞避免
快重传
快恢复

### 半连接syn和洪泛法攻击

黑客开启大量的syn请求而不发送ack,服务端开启半连接等待ack,直到资源耗尽,所以必须检测来访ip

### 为什么要三次握手

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

也就是说,如果只有两次握手,服务端返回ack后直接通信,那么如果客户端因为网络问题没有收到ack,可能会再次请求连接,但时服务端不知道这其实是同一个请求,于是又打开了一个连接,相当于维护了很多的无用连接。
### time wait的作用

1 需要服务端可靠地终止连接,如果处于time_wait客户端发给服务端的ack报文丢失,则服务端会再发一次fin,此时客户端不应该关闭。

2 保证迟来的tcp报文有时间被丢弃,因为2msl里超时抵达的报文都会被丢弃。


5. 外部路由协议和内部路由协议有哪些

| | | |
| ---- | ------------------------------- | ---------------------------------- |
| | 外部路由协议 | 内部路由协议 |
| 概述 | 用于不同自治系统之间的路由选择 | 用于同一自治系统内部的路由选择 |
| 范围 | 路由器之间的协议 | 路由器之间的协议 |
| 发布 | 由Internet服务提供商分发和管理 | 由组织内部网络管理员分发和管理 |
| 策略 | 基于路由器之间的距离和成本来选择路由路径 | 基于内部网络拓扑结构和策略来选择路由路径 |
| 协议 | BGP, EGP, <br>OSPF, RIP, IS-IS | RIP, OSPF, <br>IS-IS, IGRP, EIGRP |
| 学习方式 | 接收其他自治系统发布的路由信息 | 监听内部网络中其他路由器的广播消息 |
| 度量 | AS-path, 本地首选项,网络距离等 | 路径成本,带宽,延迟,可用性等 |
| 部署 | Internet服务提供商和企业网络边缘 | 企业网络核心 |
| 策略 | 最大化网络可用性和性能 | 最大化网络可用性和性能 |


9. C/S架构、B/S架构,自己如何设计C/S架构

C/S架构是指客户端/服务器架构,是指应用程序分为客户端和服务器端两个部分,分别运行在不同的机器上,通过网络进行通信,协同完成某个业务或提供某个服务。
B/S架构是指浏览器/服务器架构,是指应用程序分为浏览器端和服务器端两个部分,浏览器端是一个轻量级的客户端,服务器端负责数据处理和业务逻辑,通过Web协议进行通信。
在设计C/S架构时,需要考虑以下几个方面:

1. 功能分配:需要根据业务逻辑和功能需求,将功能合理地分配到客户端和服务器端。通常将与用户交互和界面显示的部分放在客户端,而将数据处理和业务逻辑放在服务器端。
2. 数据交换:需要确定数据交换的方式和协议,如使用TCP/IP协议进行数据传输,同时也需要考虑数据的加密和安全性。
3. 客户端界面:客户端需要有友好的用户界面,可以通过图形化界面、命令行等方式与用户交互。
4. 服务器端架构:服务器端需要有可靠的架构,如采用集群、负载均衡等技术,保证服务的可用性和性能。
5. 可扩展性:系统需要具有良好的可扩展性,可以随着业务的发展进行功能扩展和性能优化。

在设计C/S架构时,还需要考虑一些常见的问题,如网络延迟、带宽限制、负载均衡、数据缓存等,通过合理地设计和优化可以提高系统的可用性、性能和稳定性。


11.随机访问介质访问控制

| | | |
| ------- | ----------------------------------------------- | ---------------------------- |
| 协议名称 | 工作原理 | 特点 |
| Aloha | 数据包直接发送,遇到冲突则等待一段时间后再次发送 | 简单、容易实现,但有较低的信道利用率和较高的碰撞率 |
| CSMA | 发送数据前先监听信道,如无人占用则发送数据,如有则等待 | 改善了Aloha协议的问题,但仍然有较高的碰撞率 |
| CSMA/CD | 发送数据前先监听信道,如无人占用则发送数据,如有则停止发送并进行碰撞检测 | 可以检测到碰撞并及时停止发送,减少碰撞率,用于有线局域网 |
| CSMA/CA | 发送数据前先发送RTS请求,接收方收到后回应CTS,然后才发送数据,发送完成后接收方回应ACK | 适用于无线局域网,减少了碰撞率,但增加了协议复杂度和延迟 |
| | | |
| | | |

14.ping 知道吧

Ping是一种常用的网络工具,它用于测试主机之间的连通性。下面是Ping的过程和原理:

1. 发送请求:Ping程序发送一个ICMP Echo请求消息给目标主机。这个请求包含一个唯一标识符和一个序列号。
2. 接收请求:目标主机接收到这个请求并发回一个ICMP Echo应答消息。这个应答消息包含了相同的唯一标识符和序列号。
3. 计算延迟:当Ping程序接收到ICMP Echo应答消息时,它会计算从发送请求到接收应答的时间延迟(也称为往返时间RTT)。
4. 统计结果:Ping程序通过发送多个请求并接收应答来计算丢包率和平均延迟等统计结果。

Ping的原理是基于ICMP协议,它利用了ICMP Echo请求和应答消息的机制来测试主机之间的连通性。当Ping程序发送一个ICMP Echo请求消息到目标主机时,目标主机会返回一个ICMP Echo应答消息。如果Ping程序接收到应答消息,说明目标主机是可以到达的。Ping程序通过统计多个请求和应答来计算丢包率和延迟等统计结果。

 

18. 广域网和局域网

| | | |
|---|---|---|
|特性|广域网(WAN)|局域网(LAN)|
|范围|跨越较大地理区域(城市、国家、洲际)|小范围网络(建筑物、校园、组织内部)|
|连接方式|通过广域线路或者卫星连接|使用以太网或无线局域网连接|
|带宽|带宽比较低,速度较慢|带宽相对较高,速度比较快|
|费用|网络建设和维护费用高|网络建设和维护费用相对较低|
|设备|需要专门的设备,如路由器、调制解调器等|一般使用交换机、网桥、路由器、网关等设备|
|管理|中央化管理,统一规划,统一维护|分散化管理,各自独立,可以局部维护|
|安全性|安全性要求高,需要加强网络安全保障措施|安全性相对较低,可以通过网络防火墙、密码验证等方式提升安全|
|传输距离|传输距离远,信号衰减严重|传输距离短,信号衰减相对较小|
|传输方式|采用帧中继或分组交换方式|采用帧中继或分组交换方式|
|网络性能|延迟较高,可靠性较差|延迟较低,可靠性较高|
|连接用户数限制|连接用户数较少,不适合大规模部署和使用|连接用户数较多,适合大规模部署和使用|
|配置和维护难度|配置和维护比较困难,需要专门的技术人员进行管理维护|配置和维护相对容易,普通管理员即可进行管理维护|

19.什么是CIDR,有什么功能

CIDR,全称为Classless Inter-Domain Routing,即无类别域间路由选择,是一种IP地址分配和路由选择的标准。与传统的IP地址划分方式相比,CIDR采用的是一种更加灵活的划分方式,可以将一个IP地址空间划分为任意大小的子网,这样可以更加高效地利用IP地址,避免了IP地址的浪费。
CIDR的主要作用是提高IP地址的利用率和路由选择的效率。在CIDR之前,IP地址采用的是固定长度的子网掩码进行划分,这种划分方式不仅导致了IP地址的浪费,而且在路由选择时也需要消耗大量的带宽和计算资源。而CIDR采用可变长度的子网掩码,可以根据需要将一个IP地址空间划分为任意大小的子网,从而避免了IP地址的浪费,同时也提高了路由选择的效率。
举个例子,假设一个公司有一个IP地址段为192.168.0.0/16,按照传统的划分方式,这个地址段将被划分为256个子网,每个子网有256个IP地址。但是,如果这个公司只需要100个IP地址,按照传统的划分方式,将会浪费156个IP地址。而采用CIDR的方式,则可以将这个地址段划分为更小的子网,从而避免了IP地址的浪费。
总的来说,CIDR提供了更加灵活的IP地址划分方式和更高效的路由选择机制,能够更好地满足现代网络的需求。

20.快表、页表和路由表结构上的区别

快表、页表和路由表是三种不同类型的表格,用于不同的计算机系统组件中,它们之间存在一些区别:

1. 快表(Translation Lookaside Buffer,TLB):在计算机内存管理中,快表是一种硬件或软件高速缓存,用于存储最近使用的内存地址与其对应的物理地址之间的映射关系。快表可以提高虚拟地址转换的速度,减少了每次访问内存时需要进行的地址转换次数,提高了系统的性能。
2. 页表:页表是计算机内存管理中的一种数据结构,用于将虚拟内存地址转换为物理内存地址。在操作系统中,每个进程都有自己的页表,操作系统根据页表的信息将进程的虚拟地址转换为物理地址,从而实现内存的管理和保护。
3. 路由表:路由表是计算机网络中的一种数据结构,用于存储路由器的路由信息。路由表中存储了目的地地址与对应的下一跳路由器的信息,路由器根据这些信息来选择最佳的路由路径进行数据传输。路由表是路由器进行数据转发的关键组成部分,对网络的性能和可靠性有着重要的影响。

虽然这些表格在功能和应用上存在区别,但是它们都是用于存储和管理地址映射关系的数据结构,对于计算机系统和网络的性能和安全性具有重要作用。

21.交换机和路由器的区别

交换机和路由器是网络中的两种重要设备,虽然它们都有着类似的功能,但是它们之间有一些重要的区别。

1. 功能不同:交换机是用来处理数据链路层(第二层)的设备,它的主要功能是根据MAC地址将数据包从一个接口转发到另一个接口。而路由器则是用来处理网络层(第三层)的设备,它的主要功能是根据IP地址将数据包从一个网络转发到另一个网络。
2. 工作原理不同:交换机在转发数据包时是基于MAC地址进行的,它维护一个MAC地址表,根据目的MAC地址进行转发。而路由器则是根据IP地址进行转发的,它维护一个路由表,根据目的IP地址进行转发。
3. 转发速度不同:交换机是通过硬件进行转发的,速度非常快,通常可以达到几十Gbps甚至上百Gbps。而路由器则是通过软件进行转发的,速度比交换机慢得多,一般只能达到几百Mbps或者几Gbps。
4. 范围不同:交换机的作用范围通常只限于一个局域网内部,而路由器可以连接多个不同的局域网,并将它们互联成一个更大的网络。

总的来说,交换机和路由器都是网络中不可缺少的设备,它们各自有着不同的功能和应用场景,需要根据具体的网络环境来选择合适的设备。

22.arp协议及其应用

ARP(Address Resolution Protocol)是一种用于将网络层地址转换为数据链路层地址的协议。在计算机网络中,每个网络设备都有一个唯一的网络层地址(例如IP地址),但是在数据链路层,设备使用的是物理地址(例如MAC地址)。当设备需要发送数据包到另一个设备时,需要知道目标设备的物理地址,而ARP协议就是用于解决这个问题的。
具体来说,当一个设备需要发送数据包到另一个设备时,它首先会查询自己的ARP缓存表,看看目标设备的网络层地址是否已经在缓存表中存在,如果有,就直接使用缓存表中的物理地址进行发送;如果没有,就会向本地网络中的所有设备广播一个ARP请求,请求目标设备的物理地址。其他设备收到ARP请求后,会查询自己的ARP缓存表,如果有对应的网络层地址,则回复一个ARP响应,告诉请求设备对应的物理地址。请求设备收到ARP响应后,将目标设备的网络层地址和物理地址存储到自己的ARP缓存表中,并使用物理地址进行数据包的发送。
ARP协议的应用主要在局域网中,因为在广域网中,设备间通常是通过路由器进行通信,路由器会根据目标网络地址进行转发,而不需要知道目标设备的物理地址。

23.应用层协议

| | | | | |
|---|---|---|---|---|
|协议名称|应用|端口号|协议类型|描述|
|HTTP|Web|80|TCP|基于客户端-服务器模型的请求-响应协议,用于Web页面的传输|
|HTTPS|Web|443|TCP|在HTTP的基础上,加入了SSL/TLS协议的安全通信协议|
|FTP|文件传输|20/21|TCP|文件传输协议,支持文件上传、下载、目录浏览等功能|
|SSH|远程登录|22|TCP|安全外壳协议,用于在不安全的网络上提供安全的远程登录和其他网络服务|
|Telnet|远程登录|23|TCP|远程终端协议,用于远程登录到主机控制台|
|SMTP|邮件传输|25|TCP|简单邮件传输协议,用于电子邮件的发送和路由|
|POP3|邮件收取|110|TCP|邮局协议,用于从邮件服务器上接收邮件|
|IMAP|邮件收取|143|TCP|互联网邮件访问协议,用于从邮件服务器上接收邮件,支持邮件的在线管理|
|DNS|域名系统|53|UDP/TCP|域名系统协议,用于将域名转换成IP地址|
|DHCP|动态主机配置协议|67/68|UDP|用于局域网中自动分配IP地址、子网掩码、网关、DNS等配置信息|

24.UDP和TCP

| | | |
|---|---|---|
|特性|UDP|TCP|
|连接|无连接|面向连接|
|可靠性|不可靠|可靠|
|传输速度|快|慢|
|数据包大小限制|有限制,最大64KB|无限制|
|拥塞控制|没有拥塞控制|有拥塞控制|
|传输方式|面向无连接,数据包独立|面向连接,按顺序传输|
|适用场景|实时性强的应用,如视频、音频|对可靠性和顺序要求较高的应用,如HTTP、FTP|
|头部开销|小|大|

25.滑动窗口原理?滑动窗口的作用

滑动窗口是一种网络传输中流量控制和数据传输控制的机制。在发送方和接收方之间,建立了一个窗口(window)的概念,窗口大小是一定的。发送方每发送一个数据包,就会收到接收方的确认信号,确认信号会告诉发送方已经成功接收了这个数据包。当发送方收到确认信号后,就可以将窗口向前移动一个位置,继续发送下一个数据包。
滑动窗口的作用是控制数据传输的速度,避免发送方发送数据的速度过快,导致接收方无法及时处理接收到的数据。滑动窗口可以根据网络的拥塞情况来调整窗口大小,从而达到优化网络传输的效果。
滑动窗口的原理是,在发送方发送数据时,先将一定数量的数据包发送出去,然后等待接收方的确认信号。当接收方发送确认信号后,发送方就可以将窗口向前滑动一个位置,继续发送下一个数据包。如果发送方在一定时间内没有收到确认信号,就会认为该数据包未被成功接收,需要重新发送。通过这种方式,可以实现数据的可靠传输。

26.滑动窗口发送端怎么触发?用数据结构怎么描述或者实现

滑动窗口协议是一种流量控制协议,用于控制发送方发送数据的速率。发送方维护一个窗口,表示接收方可以接受的数据量。发送方只有在窗口内的数据都被确认之后,才能向窗口外发送新的数据。
当发送方收到一个确认消息时,它会将窗口向前滑动,使窗口内的大小增加,从而允许发送更多的数据。如果一个分组没有被确认,发送方会超时并重新发送该分组,而窗口内的其他数据不会受到影响。
滑动窗口可以使用循环队列或链表等数据结构来实现。发送方和接收方都有一个窗口,窗口内包含了一定数量的数据包,每个数据包有一个序号。当发送方发送一个数据包时,将其序号记录在发送窗口中,等待接收方的确认。接收方接收到一个数据包时,将其序号记录在接收窗口中,同时向发送方发送一个确认消息。如果接收方没有收到一个序号连续的数据包,它会丢弃接收窗口中这个序号之后的所有数据包,并请求发送方重新发送。
在具体实现中,发送方和接收方通常需要维护一些状态信息,例如当前发送的数据包序号、最后一个确认的序号等等。同时,滑动窗口协议通常也需要设置一些参数,例如窗口大小、超时时间等等。

 


而OSI模型分为七层,从下至上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。具体各层的功能如下:

- 物理层:该层负责物理介质的传输,包括比特流的传输和信号调制等。
- 数据链路层:该层提供可靠的数据传输服务,包括帧的定义、差错检测和流量控制等。
- 网络层:该层负责寻址和路由功能,包括IP地址的定义、路由选择和分组等。
- 传输层:该层提供端到端的数据传输服务,主要负责数据的可靠性和传输速度等问题,包括TCP和UDP等协议。
- 会话层:该层负责建立、维护和终止会话连接,包括同步、检查点和恢复等功能。
- 表示层:该层负责数据的格式化、加密和压缩等功能,以确保不同计算机之间的数据能够正确传输和解释。
- 应用层:该层提供应用程序与网络之间的接口,包括HTTP、FTP、SMTP、DNS等。


35.TCP和UDP中,为什么TCP是可靠的?

TCP是一种可靠的传输协议,因为它实现了多种机制来确保数据传输的可靠性,包括:

1. 三次握手建立连接:在数据传输之前,发送方和接收方会通过三次握手建立连接,确保双方都可以收发数据。
2. 序列号和确认应答:每个TCP报文段都有一个唯一的序列号,接收方通过确认应答机制来告诉发送方已经收到了哪些数据,从而保证数据的正确传输。
3. 数据分片和重传:TCP会将数据分成一定大小的报文段进行传输,如果某个报文段没有被确认,发送方会重新发送该报文段,直到接收方正确地接收到数据。
4. 拥塞控制:TCP通过不断监控网络拥塞状态,动态调整发送数据的速率,避免造成网络拥塞,从而提高传输效率和可靠性。

 

39.说一下dns的过程。dns除了将域名转换成ip还有什么功能?

DNS(Domain Name System,域名系统)是一种分布式数据库系统,它将域名和 IP 地址进行映射,为网络上的计算机提供域名解析服务。
DNS解析的过程包括以下步骤:

1. 当用户在浏览器中输入一个域名时,操作系统会先检查本地的 hosts 文件,如果文件中有相应的映射,则直接返回对应的 IP 地址。
2. 如果本地 hosts 文件中没有相应的映射,则操作系统会向本地 DNS 缓存查询是否有对应的 IP 地址缓存,如果有,则直接返回对应的 IP 地址。
3. 如果本地 DNS 缓存中没有相应的缓存,则向本地 DNS 服务器发出查询请求,本地 DNS 服务器会检查自己的缓存,如果有相应的缓存,则直接返回对应的 IP 地址。
4. 如果本地 DNS 服务器中没有相应的缓存,则向根域名服务器发出查询请求,根域名服务器返回下一级域名服务器的 IP 地址。
5. 本地 DNS 服务器接着向下一级域名服务器发出查询请求,直到查询到相应的主机名和 IP 地址映射关系,本地 DNS 服务器将查询结果返回给操作系统,操作系统缓存该结果,并将其返回给浏览器,浏览器根据该 IP 地址与远程主机进行通信。

除了将域名转换成 IP 地址外,DNS 还有以下功能:

1. 提供负载均衡服务:DNS 服务器可以根据负载情况,将请求转发到不同的服务器上,从而达到负载均衡的目的。
2. 提供域名别名服务:通过为一个域名设置别名,可以将多个域名指向同一个 IP 地址,实现多个域名共用同一个主机的目的。
3. 提供反向解析服务:通过 IP 地址查询对应的域名。


41.网络协议里面,连接和无连接的最本质区别是什么

网络协议中连接和无连接的最本质区别是是否建立一个持久的通信链路来传输数据。连接型协议需要在通信前先建立连接,数据传输完毕后再关闭连接。而无连接型协议则不需要建立连接,每次通信都是独立的。这意味着在使用连接型协议时,发送端和接收端需要进行一定的协商和控制,以确保数据的可靠性和一致性,而无连接型协议则不需要进行这些操作。因此,连接型协议通常用于要求可靠传输的应用,如文件传输、电子邮件等;而无连接型协议则更适用于对实时性要求较高的应用,如视频和语音传输。

posted @ 2024-03-24 20:51  Luke!  阅读(12)  评论(0编辑  收藏  举报