diff --git a/README.md b/README.md index 1844ed1..3cb3bd3 100644 --- a/README.md +++ b/README.md @@ -1,728 +1,4 @@ -# Principle-of-Computer-Composition -计算机组成原理思维导图 -# 计算机组成 -## 第一章 计算机系统概论 -### 冯诺依曼型计算机特点 -* 1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成 -* 2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示。 -* 3.指令由操作码和地址码组成 -* 4.指令在存储器中按执行顺序存放,由指令计数器(即程序计数器PC)指明要执行的指令所在的储存单元地址,一般按顺序递增,但可按运算结果或外界条件而改变 -* 5.机器以运算器为中心,输入输出设备与存储器间的数据传送都通过运算器 -### 区别以运算器为中心的计算机还是存储器的方法 -* 看输入设备能否直接与存储器相连,是的话就是以存储器为中心 -### 计算机系统 -* 硬件 - * 结构 - * 主机 - * cpu - * ALU运算器 - * CU控制器 - * 存储器 - * 主存 - * 辅存 - * I/O - * 输入设备 - * 输出设备 - * 主要技术指标 - * 机器字长 - * CPU一次能处理的数据位数 - * 存储容量 - * 存储容量=存储单元个数×存储字长 - * 运算速度 - * 单位时间执行指令的平均条数,MIPS -* 软件 - * 系统软件 - * 用来管理整个计算机系统 - * 语言处理程序 - * 操作系统 - * 服务性程序 - * 数据库管理系统 - * 网络软件 - * 应用软件 - * 按任务需要编制成的各种程序 -## 第三章 运算方法和运算部件 -### 数据的表示方法和转换 -* 机器数正0负1 - * 符号数值化的带符号二进制数,称为机器数。 -* 真值:符号位加绝对值 -* 余三码:在8421码的基础上,把每个编码都加上0011 - * 当两个余三码想加不产生进位时,应从结果中减去0011;产生进位时,应将进位信号送入高位,本位加0011 -* 格雷码:任何两个相邻编码只有1个二进制位不同,而其余3个二进制位相同 -* 8421码 - * 权值从高到低为8、4、2、1 - * 算术运算时,需对运算结果进行修正。 方法:如果小于、等于(1001)2,不需要修正;否则加6修正 -### 带符号的二进制数据在计算机中的表示方法及加减法运算 -* 原码 - * 定义 - * 最高位为符号位0/1+数值的绝对值形式 - * 特点 - * (1)值+0,-0的原码分别为00000、10000,形式不唯一; - * (2)正数的原码码值随着真值增长而增长 - * 负数的原码码值随着真值增长而减少 - * (3)n+1位原码表示定点整数范围-(2n-1)——2n-1 - * n+1位原码表示定点小数范围 -(1-2-n)——1-2-n - * 运算 - * 绝对值相加减,由数值大小决定运算结果符号 -* 补码 - * 定义,特点和运算 - * 运算: -结果不超过机器所能表示范围时,[X+Y]补=[X]补+[Y]补 -减法运算: -[X–Y]补=[X+(–Y)]补=[X]补+[–Y]补 - * 结论 - * 负数的补数=模+负数 - * 互为补数的绝对值相加=模 - * 在补数中,减法运算即加法运算 - * 定义 - * 定义法,即[X]补=2·符号位+X (MOD 2) - * X为正数,则符号0+X的绝对值;X为负数,则X的绝对值取反+1。 - * 特点 - * 数值零的补码表示唯一 - * 正数补码码值随着真值增大而增大,负数补码码值随着真值增大而增大 - * n+1位补码所表示定点整数范围- 2n——2n-1,n+1位补码所表示定点小数范围-1——1-2-n - * 加法运算逻辑事例 - * 过程 - * 加减法运算的溢出处理 - * 溢出定义 - * 当运算结果超出机器数所能表示的范围 - * 加减中,可能产生溢出的情况 - * 可能出现溢出 - * 同号数相加 - * 异号数相减 - * 不可能出现溢出 - * 异号数相加 - * 同号数相减 - * 判断溢出的方法 - * 法一:当符号相同两数相加,结果符号和加数(或被加数)不相同,则溢出 - * fa,fb表示两操作数(A,B)的符号位,fs为结果的符号位 - * 法二:任意符号相加,如果C=Cf,则结果正确,否则溢出; - * C为数值最高位的进位,Cf为符号位的进位 - * 法三:采用双符号相加,如果fs1=fs2,则结果正确,否则溢出; - * 运算结果的符号位为fs2; - * 多符号位的补码,叫做变形补码; - * 如果采用双符号位,当数为小数时,模m=4;当数为整数时,模m=2的n+2次方 -* 反码 - * 定义 - * a.定义法,即[X]反=(2-2-n)·符号位+X (MOD 2-2-n) - * b.X是正数,[X]反=[X]原;X是负数,符号+数值取反。 - * 特点 - * 数值零的反码表示不唯一 - * 正数反码码值随着真值增大而增大,负数反码码值随着真值增大而增大 - * n+1位反码所表示定点整数范围- (2n-1)——2n-1,n+1位反码所表示定点小数范围-(1-2-n)——1-2-n - * 加减运算特点 - * 在机器数范围内,反码运算满足[X+Y]反=[X]反+[Y]反 -,[X-Y]反=[X]反+[-Y]反 - * 反码运算在最高位有进位时,要在最低位+1,此时要多进行一次加法运算,增加了复杂性,又影响了速度,因此很少采用 - * 由于反码运算是以2-2的-次方为模,所以,当最高位有进位而丢掉进位(即2)时,要在最低位+/-1 -* 移码 - * 由来及窍门 - * 为了从码值直接判断对应真值的大小,所以引进移码 - * [X]补的符号位取反,即得[X]移 - * 特点 - * 最高位是符号位,1表示正,0表示负 - * 数据0有唯一的编码 - * 移码码值随着真值增大而增大 - * n+1位移码所表示定点整数范围- 2n——2n-1, n+1位移码所表示定点小数范围-1——1-2-n - * 计算机中,移码常用于表示阶码,故只执行加、减运算 - * 计算机中,移码运算公式需要对结果进行修正 - * 浮点数的阶码运算 - * 移码定义:[X]移=2的n次方+X - * 补码定义:[X]补=2的n+1次方+Y - * 阶码求和公式 - * [X]移+[Y]补=[X+Y]移 mod2的n+1次方 - * [X]移+[-Y]补=[X-Y]移 - * 判溢方法 - * 双符号位参加运算,最高符号位恒置0 - * 当结果最高符号位=1则溢出 - * 低位符号=0,则上溢;低位符号=1,则下溢; - * 当结果最高符号位=0则未溢出 - * 低位符号=0,负数;低位符号=1,正数 - * 说明:如果阶码运算的结果溢出,上述条件不成立。此时,使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是结果的最高符号位为1。此时低位符号为0时,表明结果上溢;为1时,表明结果下溢。当最高符号位为0时,表明没有溢出,低位符号位为1,表明结果为正;为0时表明结果为负。 -* 补,反,原,移码的相互转换 - * 反码-》原码 - * 方法:符号位不变,正数不变,负数数值部分取反。 - * 补码-》原码 - * 方法1:正数不变,负数数值部分求反加1。 - * 方法2:串行转换 - * 从最后开始数,遇到第一个“1”,除第一个“1”不变,前面数字分别取反 - * 移码-》原码 - * 方法:移码转换为补码,再转换为原码 -* 数据从补码和反码表示形式转换成原码 - * 自低位开始转换,从低位向高位,在遇到第一个1之前,保存各位的0不变,第一个1也不变,以后得各位按位取反,最后保持符号位不变,经历一遍后,即可得到补码 -* 定点数和浮点数 - * 定点数 - * 小数点固定在某个位置上的数据 - * 32位定点小数、定点整数补码的范围 - * 32位定点小数-1~1-2-31 - * 32位定点整数-231~231-1 - * 浮点数 - * 根据IEEE754国际标准,常用的浮点数有两种格式 - * Nmax=Mmax*2的Emax -Nmin=Mmin*2的Emax - * 单精度(32位)=8位阶码+24位尾数 - * 单精度浮点数(32位),阶码8位(含一位符号位),尾数24(含一位符号位),取值范围:-2的127次方~(1-2的-23次方)*2的127次方 - * 双精度(64位)=11位阶码+53位尾数 - * 双精度浮点数(64位),阶码11位(含一位符号位),尾数53位(含一位符号位),取值范围:-2的1023次方~(1-2的-52次方)*2的1023次方 - * 为了保证数据精度,尾数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值应大于或等于(0.5)10 - * 左规 - * 右规 - * 小数点位置可以浮动的数据。 - * 表示形式:N = M · RE - * 计算机中存储形式 - * Ms+Es+E(n位)+M(m位) - * 阶码E,一般为整数,用补码或者移码表示; - * 尾数M,一般为规格化的定点小数,用补码表示; -### 二进制乘法运算 -* 定点原码一位乘法 - * 两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积 - * [X·Y]原=[X]原·[Y]原=(X0⊕Y0)|(X1X2..Xn) · (Y1Y2..Yn) - * 几点结论 - * 从低到高根据乘数每位0、1决定相加被乘数还是0; - * 相加数每次左移,最后一起求积; - * 符号由异或决定 - * 表达式 - * 电路框架 - * 修正 - * 1.在机器内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每每求得一个相加数,就与上次部分积相加 - * 2.人工计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍,如按此算法在机器中运算,加法器也需增到两倍。观察计算过程很容易发现,在求本次部分积时,前一次部分积的最低位不再参与运算,因此可将其右移一位,相加数可直送而不必偏移,于是用N位加法器就可实现两个N位数相乘 - * 部分积右移时,乘数寄存器同时右移一位,这样可以用乘数寄存器的最低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接受部分积右移出来的一位,因此,完成乘法运算后,A寄存器中保存乘积的高位部分,乘数寄存器中保存乘积低位部分 - * 例题 - * 控制流程图 -* 定点补码一位乘法 - * 表达式 - * [X·Y]补=[X]补·(-Y0+Y1·2-1+….Yn·2-n) - * 注意:此处为双符号位,当最后乘积高位为负数时,需要补充加上[-|x|]补的操作 -### 二进制除法 -* 加减交替法 - * 当余数为正时,商上1,求下一位商的办法是,余数左移一位,再减去除数;当余数为负时,商上0,求下一位商的办法是,余数左移一位,再加上除数。此方法不用恢复余数,所以又叫不恢复余数法。但若最后一次上商为0而又需得到正确余数,则在这最后扔需恢复余数 -### 浮点数的运算方法 -* 浮点数的加减法运算 - * 1.对阶操作 - * 求出△E,再对小的进行移位 - * 2.尾数的加减运算 - * 3.规格化操作 - * 规则简化是符号位和数值最高位不同,即00.1xxxx或11.0xxxx - * 4.舍入 - * 超出表示范围的高位为1舍入 - * 5.检查阶码是否溢出 -* 浮点数的乘除法运算 - * 1.浮点数阶码运算(移码) - * 牢记公式 - * [X+Y]移=[X]移+[Y]补 - * [X–Y]移=[X]移+[–Y]补 - * 2.按照一位乘或加减交替除运算 - * 先确定符号,在列式子计算 -### 运算部件 -* ABC寄存器作业 -* 定点运算部件 -* 浮点运算部件 - * 由阶码运算部件和尾数运算部件组成 -### 数据校验码 -* 码距 - * 任意两个合法码之间不相同的二进制位数的最小值 - * 要具有差错能力,则码距>1 - * 合理增大码距,就能提高发现错误的能力 -* 鉴定方法 - * 有无差错能力 - * 是否能合理增大码距 -* 奇偶校验码 - * 能发现数据代码中一位或奇数个位出错情况的编码 - * 实现原理是使码距由1增加到2 - * 步骤1:在字节高位补充一位,即校验位 - * 步骤2:依据图3.10电路形成原始数据D8..D1的校验位值 - * 步骤3:将9位数据写入主存 - * 步骤4:读出该数据时,读取数据D8..D1通过图3.10判定合法性 - * 电路图 - * 结论 - * (1)奇偶校验码只能发现一位或奇位错,且不能确定出错位置 - * (2)奇偶校验码的码距=2 -* 海明校验码 - * 海明码位号和校验位位号的关系 - * Pi的位置在2的i-1次方,但是除了最高位 - * 笔记 - * 3,5,7||3,6,7||5,6,7 - * 电路图 - * 海明码码距为4 - * 纠一位错,查一位错 - * 2∧r≥k+r+1 - * 纠一位错,查两位错 - * 2∧(r–1)≥k+r -* 循环冗余校验码(CRC) - * CRC码可以发现并纠正信息存储或传送过程中连续出现的多位错误 - * CRC码一般是指k位信息码之后拼接r位校验码 - * 模2运算 - * 模2加减 - * 模2乘除 - * 异或逻辑 - * CRC的译码与纠错 - * 更换不同的待测码字可以证明:余数与出错位的对应关系是不变,只与码制和生成多项式有关 - * 图 -## 第四章 主存储器 -### 主存储器处于全机中心低位 -### 辅助存储器或称为外存储器,通常用来存放主存的副本和当前不在运行的程序和数据 -### 主存储器的类型 -* 随机存储器RAM -* 非易失性存储器 -### 主存储器的主要技术指标 -* 主存容量 - * 64×8等等 - * 计算机可寻址的最小信息单元是一个存储字 - * 主存储器存储单元的总数 -* 存取速度 - * 由存储器存取时间和存储周期表示 -* 存储器存取时间 - * 启动一次存储器操作(读/写)到完成该操作所经历的时间 -* 存储周期 - * 连续启动两次独立的存储器操作所间隔的最小时间 -### 主存储器的基本操作 -* CPU通过使用AR(地址寄存器)和DR(数据寄存器)和主存进行数据传送 -* 若AR为K位字长,DR为n位字长,则允许主存包含2∧k个可寻址单元 -* CPU与主存采取异步工作方式,以ready信号表示一次访存操作的结束 -### 读/写存储器 -* 随机存储器(RAM)按存储元件在运行中能否长时间保存信息分为静态存储器和动态存储器 -* 静态存储器,利用触发器保存信息,只要不断电,信息就不会丢失 - * 电路简图 - * MOS静态存储结构图 -* 动态存储器,利用MOS电容存储电荷来保存信息,需要不断给电容充电才能使信息来保存信息 - * 电路简图 - * 16K×1位动态存储器框图 - * 再生 - * 集中式 - * 分散式 - * 时间小于或等于2ms - * 行读出再生 -### 非易失性半导体存储器 -* 只读存储器ROM - * 只读不能写 -* 可编程序的只读存储器PROM - * 一次性写入 -* 可擦可编程序的只读存储器EPROM - * 可多次写入、读出 -* 可电擦可编程序只读存储器E2PROM - * 可多次读出但写入次数有限 -* 快擦除读写存储器Flash Memory - * 重复写入、读出 -### 存储器的组成与控制 -* 存储器容量扩展 - * 位扩展:用多个存储器芯片对字长进行扩充 - * 字扩展:增加存储器中字的数量,提高存储器的寻址范围 - * 字位扩展,假设一个存储器的容量为M×N位,若使用L×K位存储器芯片,那么,这个存储器共需要(M/L)×(N/K)个存储器芯片 -### 多体交叉存储器 -* 提高访存速度的方式 - * 采用高速器件 - * 采用层次结构 - * 调整主存结构 -* 计算机中大容量的主存可由多个存储体组成,每个存储体都具有自己的读写线路,地址寄存器和数据寄存器,称为"存储模块"。这种多模块存储器可以实现重叠与交叉存取 -* 第i个模块M的地址编号应按下式给出:M×j+i -* 连续地址分布在相邻的不同模块内,而同一模块内的地址都是不连续的 -## 第五章:指令系统 -### 指令系统的发展 -* 20世纪70年代末人们提出了便于VLSI实现的精简指令系统计算机,简称RISC,同时将指令系统越来越复杂的计算机称为复杂指令系统计算机,简称CISC -### 指令格式 -* 结构(操作码+地址码) - * 操作码 - * 操作数的地址 - * 操作结果的存储地址 - * 下一条指令的地址 -* 地址码 - * 零地址指令 - * 一地址指令 - * 寻址范围 224 = 16 M - * 2次访存 - * 二地址指令 - * 寻址范围 212 = 4 K - * 4 次访存 - * 三地址指令 - * 寻址范围 28 = 256 - * 4 次访存 - * 多地址指令 - * 寻址范围 26 = 64 - * 4 次访存 -* 指令字长 - * 取决因素 - * 操作码的长度 - * 操作数地址的长度 - * 操作数地址的个数 - * 指令字长 固定 - * 指令字长 = 存储字长 - * 指令字长 可变 - * 按字节的倍数变化 - * 对准边界存放 - * 不连续存放数据 - * 按字节编址 - * a.半字地址最低位恒为0 - * b.字地址最低两位恒为0 - * c.双字地址的最低三位恒为0 - * 减少访存次数,浪费存储空间 - * 不 对 准 边 界 存 放 - * 连续存放数据 - * 节约存储器空间,但增加访存次数,对多字节数据存在调整高 低字节位置的问题 -* 寻址方式 - * 确定本条指令的数据地址 - * 下一条要执行的指令地址的方法 -* 指令操作码的扩展技术 - * 指令操作码的长度决定了指令系统中完成不同操作的指令数 - * 若某机器的操作码长度固定为K位,则它最多只能有2^K条不同指令 - * 指令操作码两种格式 - * 固定格式 - * 优点:对于简化硬件设计,减少指令译码时间非常有利 - * 缺点:指令少,浪费地址 - * 可变格式(分散地放在字的不同字段) - * 优点:指令多,缩短指令平均长度,减少程序总位数,增加指令字所能表示的操作信息 - * 缺点:译码复杂,控制器的设计难度增大 - * 拓展方法的一个重要原则 - * 使用频度(即指令在程序中出现概率)高的指令应分配短的操作码,使用频度低的指令相应地分配较长的操作码 -* 指令系统的兼容性 - * 保持系统向上兼容 -### 精简指令系统计算机(RISC)——用于小型机 -### 复杂指令系统计算机(CISC)——用于大型机 -## 第六章:中央处理器 -### 计算机工作过程 -* 加电——》产生reset信号——》执行程序——》停机——》停电 -* 产生reset信号的任务 - * 任务一:使计算机处于初始状态 - * 任务二:从PC中取出指令地址 -* 控制器作用是协调并控制计算机各部件执行程序的指令序列 -### 控制器的组成 -* 控制器的功能 - * 取指令 - * 发出指令地址,取出指令的内容 - * 分析指令 - * (1)对操作码译码产生操作相应部件的控制信号 - * (2)根据寻址方式形成操作数地址 - * 执行指令 - * (1)根据分析指令后产生控制信号、操作数地址信号序列,通过CPU及输入输出设备的执行实现每条指令的功能 - * (2)结果回送存储器 - * (3)形成下条指令的地址 - * 控制程序和数据的输入和结果输出 - * 对异常情况和某些请求的处理 - * 异常情况的处理:例如算术运算的溢出、数据传送奇偶错 - * 某些请求的处理 - * “中断请求”信号 - * DMA请求信号 -* 控制器的组成 - * 程序计数器(PC) - * 即地址寄存器,用来存放当前正在执行的指令地址或即将要执行的下一条指令地址 - * 指令寄存器(IR) - * 用以存放当前正在执行的指令,以便在指令执行过程中控制完成一条指令的全部功能 - * 指令译码器或操作码译码器 - * 对指令寄存器中的操作码进行分析解释,产生相应的控制信号 - * 脉冲源及启停线路 - * 脉冲源参数一定评率的脉冲作为整个机器的时钟脉冲,是机器周期和工作脉冲的基准信号,在机器刚加电时,还应产生一个总清信号(reset) - * 时序控制信号形成部件 - * 当程序启动后,在CLK时钟作用下,根据当前正在执行的指令的需要,产生相应的时序控制信号,并根据被控制功能部件的反馈信号调整时序控制信号 - * 控制存储器 - * 微指令寄存器 - * 控制字段+下址 - * 周期概念 - * 指令周期 - * 完成一条指令所需的时间,包括取指令、分析指令、执行指令 - * 机器周期 - * 也称为CPU周期,是CPU从内存中读取一个指令的时间,通常等于取指周期 - * 时钟周期 - * 称为节拍脉冲或T周期,是基准脉冲信号 - * 三条假设 - * 程序是存放在主存中的,当执行完一条指令后才从主存中取下一条指令(非流水线) - * 指令的长度是固定的,并限制了寻址方式的多样化 - * 在程序运行前,程序和数据都已存在主存中 -* 指令执行过程(运算器和控制器配合) - * 组成控制器的基本电路 - * 具有记忆功能的触发器以及由它组成的寄存器,计数器和存储单元 - * 没有记忆功能的门电路及由它组成的加法器,算术逻辑运算单元(ALU)和各种逻辑电路 - * 举例 - * 加法 - * 取指令——》计算操作数地址——》取操作数——》执行结果并运算送结果 - * 要能看懂时序图 - * 哪些指令在对应的时间有效 - * 条件转移指令 - * 取指令——》计算地址 - * 控制器的功能就是按每一条指令的要求产生所需的控制信号 - * 产生控制信号的方法 - * 微程序控制 - * 硬布线控制 -### 微程序控制计算机的基本工作原理 -* 基本概念 - * 微指令 - * 在微程序控制的计算机中,将由同时发出的控制信号所执行的一组微操作 - * 微命令 - * 将指令分为若干条微指令,按次序执行这些微指令。组成微指令的操作即微命令 - * 微程序 - * 计算机的程序由指令序列构成,而计算机每条指令的功能均由微指令序列解释完成,这些微指令序列的集合就叫做微程序 - * 控制存储器 - * 微程序一般是存放在专门的存储器中的,由于该存储器主要存放控制命令(信号)与下一条执行的微指令地址(简称下址) - * 存储单元内容 - * (1)微指令的控制信号——控制位 - * (2)下条微指令的地址——下址字段 - * 存储芯片:ROM - * 执行一条指令实际上就是执行一段存放在控制存储器中的微程序 -* 实现微程序控制的基本原理 - * 控制信号(23条) - * 书上P123页为加法的过程 - * 微指令格式:控制字段+下址字段 - * 23个控制位,12个下址位——》容量为4K - * 取址微指令的操作对所有指令都是相同的,所以是一条公用的微指令,其下址由操作码译码产生 -* 微程序控制器 -* 时序信号及工作脉冲的形成 -* 停机和停电的区别 - * 停机 - * 电压:稳定 - * 存放内容:保持 - * 重启PC内容:断点指令地址 - * 停电 - * 电压:消失 - * 存放内容:RAM的内容消失 - * 重启PC内容:第一条指令地址 -### 微程序设计技术 -* 如何缩短微指令字长 - * 直接控制法(容量太小) - * 编译方法:每一位代表一个控制信号,直接送往相应的控制点 - * 优点:控制简单 - * 缺点:微指令字长过大 - * 字段直接编译法 - * 选出互斥的微指令 - * 每个字段都要留出一个代码,表示本段不发出任何指令(000) - * 优点:节省微指令的字长 - * 缺点:增加了额外的硬件开销 - * 字段间接编译法 - * 指令之间相互联系的情况 - * 举例:A为0-7,B为0-3,如果是直接编译——3+2=5,如果是间接编译——3+1=4 - * 编码方法:在字段直接编译法中,译码输出端要兼由另一字段中的某些微命令配合解释 - * 优点:减少了微指令长度 - * 缺点:可能削弱微指令的并行控制能力,同时增加硬件开销 - * 常熟源字段E(了解) -* 如何减少微指令长度 - * 现行微指令/微地址 - * 现行微指令:当前正在执行的指令 - * 现行微地址:存放现行微指令的控制器存储单元 - * 后继微指令/微地址 - * 后继微指令:下一条要执行的微指令 - * 后继微地址:存放后继微指令的控制器存储单元 - * 增量与下址字段结合产生后继微指令的方法 - * 下址字段分成:转移控制字段BCF和转移地址字段BAF - * BCF:控制微程序的转移情况 - * BAF:转移后的微指令所在地址 - * BAF有两种情况 - * 与uPC的位数相等——转移灵活,但增加微指令长度 - * 比uPC短——转移地址收到限制,但可缩短微指令长度 - * 优点 - * 微指令的下址字段很短,仅用于选择输入uPC计数器的某条线路有效 - * 缺点 - * 微程序转移不灵活,使得微程序在控存中的物理空间分配有困难 - * 多路转移方式 - * 一条微指令存在多个转移分支的情况称为多路转移 - * 微中断 - * 1.微中断请求信号是由程序中断请求信号引起的 - * 2.在完成现行指令的微程序后响应该微中断请求 - * 3.由硬件产生对应微中断处理程序在控存中的入口地址 -* 如何提高微程序的执行速度 -* 微指令格式 - * 水平型微指令——直接控制,字段编译(直接、间接) - * 特点:在一条微指令中定义并并行执行多个微命令 - * 垂直型微指令 - * 特点:不强调实现微指令的并行控制功能 - * 定义:采用微操作码编译法,由操作码规定微指令的功能 -* 微程序控制存储器 - * 一般采用ROM存储器 - * 也可采用RAM,为防止断电后内容消失,则必须开机后将外存中存放的微程序调入控存RAM,然后才能执行程序。 - * 当前为了能不断扩展指令系统,通常采用ROM+RAM -* 动态微程序设计 - * 定义:能根据用户要求改变微程序 - * 优点:是计算机能更灵活、有效的适应于各种不同的应用目标 -* 控制存储器的操作(P136) - * 串行方式 - * 并行方式——比串行多了微指令寄存器 - * 微周期=max(取微指令时间,执行微指令时间) - * 由于取微指令、执行微指令同时进行,故对于某些后继微地址的产生根据处理结果而定的微指令,则延迟一个微周期再取微指令 -### 硬布线控制的计算机(RISC)——特点快 -* 形成操作控制信号的逻辑框图(P141) -* 操作控制信号的产生 - * 取值周期cy1所产生的信号对所有指令都是相同的,即与当前执行的指令无关,逻辑式得到最简单的形式 - * 通常,同一个控制控制信号在若干条指令的某些周期(或再加上一些条件)中都需要,为此需要把它们组合起来 - * 同种类型的指令所需要的控制信号大部分是相同的,仅有少量区别 - * 在确定指令的操作码时(即对具体指令赋予二进制操作码),为了便于逻辑表达式的化简以减少逻辑电路数量,往往给予特别关注 -* 设计组合逻辑电路从而产生需要的控制信号的步骤 - * 1.实际逻辑问题2.真值表3.公式化简4.逻辑电路图 -* 设计目标 - * 使用最少的电路元件达到最高的操作速度 -### 流水线工作原理 -* 几点结论 - * 每条指令的执行时间不变 - * 每条指令处理结果的时间缩短 - * 流水线处理速率最高时=流水线处于满载的稳定状态 - * 流水线处理速率最低时=流水线未满载状态 - * 为了满足在重叠时间段不同指令的机器周期能够完成指定的操作,将时间段=操作完成的最长时间 - * 为了保证一个周期内流水线的输入信号不变,相邻时间段之间必须设置锁存器或寄存器 - * 除了指令执行流水线,还有运算操作流水线 -* 相关问题 - * 流水线阻塞(P163-6.15) - * 数据相关产生 - * 假设第二条指令需要的操作数是第一条指令运算的结果,那么出现了数据相关 - * 指令执行时间不同产生 - * 程序转移的影响 - * 异常情况响应中断 -## 第七章:存储系统 -### 存储系统的层次结构 -* cache->主存->辅存 -### 高速缓冲存储器 -* cache的工作原理 - * 局部性原理 - * 主存地址和cache地址(P166 图7.2) - * 块长 - * 块长一般取一个主存周期所能调出的信息长度(一般为16个字) - * cache的容量和块的大小是影响cache的效率的重要因素 - * 命中率 - * CPU所要访问的信息是否在cache中的比率,而将所要访问的信息不在cache中的比率称为失败率 - * 一致性策略 - * 标志交换方式(写回法) - * 通过式写入(写通法) - * 写操作直接对主存进行,而不写入cache - * cache的存取时间 - * 平均存取时间=h*tc+(1-h)(tc+tm) - * 最好替换策略 - * 按照被替换的字块是下一段时间最少使用的,由替换部件实现 -* cache组织 - * 地址映像 - * 直接映像 - * cache中许多空的位置被浪费 - * 主存地址:主存字块标记+cache字块地址+字块内地址 - * 全相联映像 - * 成本太高而不能采用 - * 主存地址:主存字块标记+字块内地址 - * 优点 - * 方式灵活,缩小了块发生冲突的概率 - * 缺点 - * 增加了标识位位数 - * 增加了寻找主存块在cache中对应块的时间 - * 组相联映像 - * 直接映像和全相联映像的折衷 - * 主存地址:主存字块标记+组地址+块内地址 -### 虚拟存储器 -* 存储管理部件(MMU) - * 现代计算机一般都有辅助存储器,但具有辅存的存储系统不一定是虚拟存储系统 - * 虚拟存储系统的特点 - * 允许用户程序用比主存大的多的空间来访问主存 - * 每次访存都要进行虚实地址的转换 -## 第八章:辅助存储器 -### 半导体存储器可随机访问任一单元,而辅助存储器一般为串行访问存储器 -### 辅助存储器的种类 -* 磁表面存储器 - * 数字式磁记录 - * 硬盘、软盘和磁带 - * 模拟式磁记录 - * 录音、录像设备 -* 光存储器 - * 光盘 -### 串行存储器 -* 顺序存取存储器 -* 直接存取存储器 -### 辅助存储器的技术指标 -* 存储密度 - * 定义:单位长度或单位面积磁层表面磁层所存储的二进制信息量 - * 道密度 - * 沿磁盘半径方向单位长度的磁道数称为道密度,单位为道/英寸tpi或道/毫米tpmm - * 位密度或线密度 - * 单位长度磁道所能记录二进制信息的位数叫位密度或线密度,单位为位/英寸bpi或位/毫米bpmm - * 每个磁道所存储的信息量是一样的 -* 存储容量 - * C = n × k × s -* 寻址时间 - * 平均寻址时间Ta=平均找道时间Ts+平均等待时间Tw - * 辅存的速度 - * 寻址时间 - * 磁头读写时间 -* 数据传输率 - * Dr = D × V -* 误码率 -* 价格 -### 硬磁盘存储器的类型 -* (1) 固定磁头和移动磁头 -* (2) 可换盘和固定盘 -### 磁盘存储器 -* 温彻斯特磁盘简称温盘 -* 磁盘存储器由驱动器(HDD),控制器(HDC)和盘片组成 -* 最外面的同心圆叫0磁道,最里面的同心圆假设称为n磁道 -* 驱动器的定位驱动系统实现快速精准的磁头定位 -* 主轴系统的作用是带动盘片按额定转速稳定旋转 -* 数据控制系统的作用是控制数据的写入和读出,包括寻址,磁头旋转,写电流控制,读出放大,数据分离 -* 磁盘控制器有两个方向的接口 - * 与主机的接口 - * 与驱动器(设备)的接口 -### 光盘 -* 采用光存储技术 - * 利用激光写入和读出 - * 第一代光存储技术 - * 采用非磁性介质 - * 不可擦写 - * 第二代光存储技术 - * 采用磁性介质 - * 可擦写 -* 光盘的存储原理 - * 只读型和只写一次型 - * 热作用(物理或化学变化) - * 可擦写光盘 - * 热磁效应 -## 第九/十章:输出输出(I/O)设备/系统 -### 设备控制器(I/O)的基本功能 -* 实现主机和外部设备之间的数据传送 -* 实现数据缓冲,以达到主机同外部设备之间的速度匹配 -* 接受主机的命令,提供设备接口的设备,并按照主机的命令控制设备 -### I/O 编址方式 -* (1) 统一编址:用取数、存数指令 -* (2) 不统一编址:有专门的 I/O 指令 -### I/O 与主机的连接方式 -* 辐射式连接 - * 每台设备都配有一套 - * 控制线路和一组信号线 - * 不便于增删设备 -* 总线连接 - * 便于增删设备 -### I/O设备 -* 人机交互设备 - * 键盘、鼠标等 -* 计算机信息的驻留设备 - * 硬盘、光盘等 -* 机——机通信设备 - * MODEN等 -### 为什么要设置接口? -* 1. 实现设备的选择 -* 2. 实现数据缓冲达到速度匹配 -* 3. 实现数据串 并格式转换 -* 4. 实现电平转换 -* 5. 传送控制命令 -* 6. 反映设备的状态 - * (“忙”、“就绪”、“中断请求”) -### 中断服务程序的流程 -* (1) 保护现场 - * 程序断点的保护 - * 寄存器内容的保护 -* (2) 中断服务 - * 对不同的 I/O 设备具有不同内容的设备服务 -* (3) 恢复现场 - * 出栈指令 -* (4) 中断返回 - * 中断返回指令 -### 单重中断和多重中断 -* 单重 中断 - * 不允许中断 现行的 中断服务程序 -* 多重 中断 - * 允许级别更高 的中断源 - * 中断 现行的 中断服务程序 -### DMA 方式 -* 主存和 I/O 之间有一条直接数据通道 -* CPU 和 I/O 并行工作 -* DMA 的三种工作方式 - * (1) CPU暂停方式 - * (2) CPU周期窃取方式 - * (3)直接访问存储器 -* DMA 接口功能 - * (1) 向 CPU 申请 DMA 传送 - * (2) 处理总线 控制权的转交 - * (3) 管理 系统总线、控制 数据传送 - * (4) 确定 数据传送的 首地址和长度,修正 传送过程中的数据地址和长度 - * (5) DMA 传送结束时,给出操作完成信号 -* DMA 传送过程 - * 预处理、数据传送、后处理 -### 外设接口 -* 设备与主机相连时,必须按照规定的物理互连特性、电气特性等进行连接,这些特性的技术规范称为接口标准 - -![计算机组成原理思维导图图片](https://img-blog.csdn.net/20180620085759852?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Nhb3lhbmdfSGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) +# 计算机组成原理思维导图 +# 计算机网络思维导图 +# 计算机操作系统思维导图 +# 计算机数据结构思维导图 \ No newline at end of file diff --git a/操作系统/第一章 操作系统引论/第一章 操作系统引论.md b/操作系统/第一章 操作系统引论/第一章 操作系统引论.md new file mode 100644 index 0000000..d88e416 --- /dev/null +++ b/操作系统/第一章 操作系统引论/第一章 操作系统引论.md @@ -0,0 +1,102 @@ +# 一.操作系统引论 +## 1.操作系统的目标和功能 +### 目标 +* 方便性 +* 有效性 + * 提高系统资源利用率 + * 提高系统吞吐量 +* 可扩充性 +* 开放性 +### 作用 +* OS作为用户与计算机硬件系统之间的接口 + * 命令方式 + * 系统调用方式 + * 图标–窗口方式 +* OS实现了对计算机资源的抽象 +## 2.操作系统的发展过程 +### 未配置操作系统的计算机系统 +* 人工操作方式 +* > 用户独占全机 CPU等待人工操作 严重降低了计算机资源的利用率 + +* 脱机输入/输出(Off–Line I/O)方式 +* > 减少了CPU的空闲时间 提高了I/O速度 效率仍然不理想 + +### 单道批处理系统 +### 多道批处理系统 +> 1.资源利用率高 +> 2.系统吞吐量大 +> 3.平均周转时间长 +> 4.无交互能力 + +* (宏观并行,微观串行) +### 分时系统 +> 特征: +> 1.多路性 +> 2.独立性 +> 3.及时性 +> 4.交互性 + +### 实时系统 +### 集群系统–超算~云计算 +### 微机操作系统的发展 +## 3.操作系统的基本特征 +### 1.并发concurrence +* 区别并行和并发 +* > 并行性是指两个或多个事件在同一时刻发生→宏观并行,微观并行 +* > 并发性是指两个或多个事件在同一时间间隔内发生→宏观并行,微观串行 + + * 并发是进程宏观一起运行,微观上交替运行,而并行是指同时运行 +* 引入进程 +* > 进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令,数据和堆栈等组成的,是一个能独立运行的活动实体 + +### 2.共享sharing +* 1.互斥共享方式 +* 2.同时访问方式 +* 并发和共享是多用户(多任务)OS的两个最基本的特征。它们又是互为存在的条件 +### 3.虚拟virtual +* 时分复用技术 +* 空分复用技术 +### 4.异步asynchronism +## 4.操作系统的主要功能 +### 1.处理机管理功能 +* 进程控制 +* 进程同步 + * 进程互斥方式 + * 进程同步方式(协同) +* 进程通信 +* 调度 + * 作业调度 + * 进程调度 +### 2.存储器管理功能 +* 内存分配 + * 静态分配 + * 动态分配 +* 内存保护 +* 地址映射 +* 内存扩充 +### 3.设备管理功能 +* 缓冲管理 +* 设备分配 +* 设备处理 + * 设备处理程序又称设备驱动程序 +### 4.文件管理功能 +* 文件存储空间的管理 +* 目录管理 +* 文件的读写管理和保护 +### 5.操作系统与用户之间的接口 +* 用户接口 +* 程序接口 +### 6.现代操作系统的新功能 +* 系统安全 +* 网络的功能和服务 +* 支持多媒体 +## 5.OS结构设计 +### 传统操作系统结构 +* 无结构操作系统 +* 模块化OS +* 分层式结构OS +### 微内核os结构 +* 客户/服务器模式 +* 面对对象的程序设计 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第一章 操作系统引论/第一章 操作系统引论.png b/操作系统/第一章 操作系统引论/第一章 操作系统引论.png new file mode 100644 index 0000000..8f08afd Binary files /dev/null and b/操作系统/第一章 操作系统引论/第一章 操作系统引论.png differ diff --git a/操作系统/第一章 操作系统引论/第一章操作系统引论.xmind b/操作系统/第一章 操作系统引论/第一章操作系统引论.xmind new file mode 100644 index 0000000..548f7c5 Binary files /dev/null and b/操作系统/第一章 操作系统引论/第一章操作系统引论.xmind differ diff --git a/操作系统/第七章 文件管理/第七章 文件管理.md b/操作系统/第七章 文件管理/第七章 文件管理.md new file mode 100644 index 0000000..6cc2b52 --- /dev/null +++ b/操作系统/第七章 文件管理/第七章 文件管理.md @@ -0,0 +1,45 @@ +# 第七章:文件管理 +## 数据项 +### 基本数据项 +### 组合数据项 +## 记录 +### 记录是一组相关数据项的集合,用于描述一个对象在某个方面的属性 +## 文件 +### 文件类型 +### 文件长度 +### 文件的物理位置 +### 文件的建立时间 +## 文件操作 +### 创建文件 +### 删除文件 +### 读文件 +### 写文件 +### 设置文件读写的位置 +## 文件的逻辑结构 +### 顺序文件 +### 记录寻址 +### 索引文件 +### 索引顺序文件 +### 直接文件和哈希文件 +## 文件目录 +### 文件控制块(FCB) +* 文件名+inode(属性) +### 简单的文件目录 +* 单级文件目录 + * 查找慢 + * 不允许重名 + * 不便于实现文件共享 +* 两级文件目录 + * 提高检索速度,从M*N到M+N +### 树形结构目录 +* 路径名 + * “..”是父目录 + * “/”是根目录 + * 区别绝对路径和相对路径(../.../.../1/2/3/) +## 文件共享 +### 有向无循环图(DAG) +### 利用符号链接实现文件共享 +* 实际上就是“快捷方式” +## 文件保护 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第七章 文件管理/第七章 文件管理.png b/操作系统/第七章 文件管理/第七章 文件管理.png new file mode 100644 index 0000000..172bcab Binary files /dev/null and b/操作系统/第七章 文件管理/第七章 文件管理.png differ diff --git a/操作系统/第七章 文件管理/第七章文件管理.xmind b/操作系统/第七章 文件管理/第七章文件管理.xmind new file mode 100644 index 0000000..f874dec Binary files /dev/null and b/操作系统/第七章 文件管理/第七章文件管理.xmind differ diff --git a/操作系统/第三章 处理机调度与死锁/第三章 处理机调度与死锁.md b/操作系统/第三章 处理机调度与死锁/第三章 处理机调度与死锁.md new file mode 100644 index 0000000..5b88b19 --- /dev/null +++ b/操作系统/第三章 处理机调度与死锁/第三章 处理机调度与死锁.md @@ -0,0 +1,246 @@ +# 第三章:处理机调度与死锁 +## 处理机调度算法的目标 +### 处理机调度算法的共同目标 +* 资源利用率:CPU的利用率=CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间) +* 公平性 +* 平衡性 +* 策略强制执行 +### 批处理系统的目标 +* 平均周转时间短 +* 系统吞吐量高 +* 处理机利用率高 +### 分时系统的目标 +* 响应时间快 +* 均衡性 +### 实时系统目标 +* 截止时间的保证 +* 可预测性 +### 处理机调度的层次 +* 高级调度(作业调度) + * 分时系统无需作业调度,因为需要交互 + * 批处理系统需要作业调度 +* 中级调度(和挂起有关) +* 低级调度(进程调度) + * 进程调度是最基本的调度,任何操作系统都有进程调度。 + * 低级调度的三个基本机制 + * 排队器 + * 分派器 + * 上下文切换 + * 进程调度方式 + * 非抢占方式 + * 抢占方式 + * 优先权原则 + * 短进程优先原则 + * 时间片原则 + * 进程调度的任务 + * 保存处理机的现场信息 + * 按某种算法选取进程 + * 把处理器分配给进程 + * 进程调度的算法 + * 优先级调度算法 + * 优先级调度算法的类型 + * 非抢占式优先级调度算法 + * 等当前进程执行完以后,再执行另一个优先权最高的进程 + * 这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。 + * 抢占式优先级调度算法 + * 不等当前进程结束,直接抢处理机 + * 常用于要求比较严格的实时系统中, 以及对性能要求较高的批处理和分时系统中。 + * 优先级的类型 + * 静态优先级 + * 优先权是在创建进程时确定的,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0~7或0~255中的某一整数, 又把该整数称为优先数。 + * 可以参考BIOS系统中设置boot的优先级 + * 动态优先级 + * 在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。 + * 轮转调度算法 + * 基本原理:在轮转(RR)法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间间隔(如30ms)即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行 + * 进程切换时机 + * 时间片未用完,进程完成 + * 时间片到,进程未完成 + * 时间片大小的确定 + * 太小利于短作业,增加系统切换开销 + * 太长就退化为FCFS算法 + * 一般选择: q略大于一次交互所需要的时间,使大多数进程在一个时间片内完成 + * 一般来说,平均周转时间将比SJF长,但是有较好的响应时间 + * 多队列调度算法 + * 多级反馈队列调度算法 + * 调度机制 + * 设置多个就绪队列 + * 每个队列都采用FCFS算法 + * 按照队列优先级调度,在第n队列中采取按时间片轮转的方式运行 + * 调度算法的性能 + * 对于终端型用户,由于作业小,感觉满意 + * 对于短批处理作业用户,周转时间也较小 + * 长批处理作业用户,也能够得到执行 + * 基于公平原则的调度算法 + * 保证调度算法 + * 公平分享调度算法 +## 作业与作业调度 +### 作业 +* 作业不仅包含程序和数据,还配有一份作业说明书,系统根据说明书对程序的运行进行控制。批处理系统是以作业为单位从外存掉入内存的。 +### 作业控制块JCB +* 为每个作业设置一个JCB,保存了对作业管理调度的全部信息。是作业存在的标志。 +### 作业步 +* 作业步,每个作业都必须经过若干相对独立,有相互关联的顺序步骤才能得到结果。每一个步骤就是一个作业步。 +### 作业运行的三个阶段 +* 收容阶段 +* 运行阶段 +* 完成阶段 +### 作业运行的三个状态 +* 后备状态 +* 运行状态 +* 完成状态 +### 作业调度的主要任务 +* 接纳多少个作业 +* 接纳哪些作业 +### 先来先服务(first–come first–served,FCFS)调度算法 +* 比较有利于长作业,而不利于短作业。 +* 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。 +### 短作业优先(short job first,SJF)的调度算法 +* 优点 + * 比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间; + * 提高系统的吞吐量; +* 缺点 + * 必须预知作业的运行时间 + * 对长作业非常不利,长作业的周转时间会明显地增长 + * 在采用SJF算法时,人–机无法实现交互 + * 该调度算法完全未考虑作业的紧迫程度,故不能保证紧迫性作业能得到及时处理 +### 优先级调度算法(priority–scheduling algorithm,PSA) +### 高响应比优先调度算法(Highest Response Ratio Next,HRRN) +* 原理 + * 在每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP然后选择其值最大的作业投入运行 + * 优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间=1+等待时间/要求服务时间 +* 特点 + * 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而类似于SJF算法,有利于短作业 + * 当要求服务的时间相同时,作业的优先权又决定于其等待时间,因而该算法又类似于FCFS算法 + * 对于长时间的优先级,可以为随等待时间的增加而提高,当等待时间足够长时,也可获得处理机 +## 实时调度(HRT和SRT任务) +### 实现实时调度的基本条件 +* 提供必要信息 + * 就绪时间 + * 开始截止时间和完成截止时间 + * 处理时间 + * 资源要求 + * 优先级 +* 系统处理能力强 + * ∑(Ci/Pi)≤1 + * N个处理机:∑(Ci/Pi)≤N +* 采用抢占式调度机制 +* 具有快速切换机制 + * 对中断的快速响应能力 + * 快速的任务分派能力 +### 实时调度算法的分类 +* 非抢占式调度算法 + * 非抢占式轮转调度算法 + * 非抢占式优先调度算法 +* 抢占式调度算法 + * 基于时钟中断的抢占式优先级调度算法 + * 立即抢占的优先级调度算法 +### 最早截止时间优先EDF(Earliest Deadline First)算法 +* 根据任务的开始截至时间来确定任务的优先级 + * 截至时间越早,优先级越高 +* 非抢占式调度方式用于非周期实时任务 +* 抢占式调度方式用于周期实时任务 +### 最低松弛度优先LLF(Least Laxity First)算法 +* 类似EDF +* 算法根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高, 以使之优先执行。 +* 松弛度例子 + * 例如,一个任务在200ms时必须完成,而它本身所需的运行时间就有100ms,因此,调度程序必须在100 ms之前调度执行,该任务的紧急程度(松弛程度)为100 ms +### 优先级倒置(Priority inversion problem) +* 优先级倒置的形成 + * 高优先级进程被低优先级进程延迟或阻塞。 +* 优先级倒置的解决方法 + * 简单的:假如进程P3在进入临界区后P3所占用的处理机就不允许被抢占 + * 实用的:建立在动态优先级继承基础上的 +## 死锁概述 +### 资源问题 +* 可重用性资源 + * 计算机外设 +* 消耗性资源 + * 数据,消息 +* 可抢占性资源 + * 不引起死锁 + * CPU,内存 +* 不可抢占性资源 + * 光驱,打印机 +### 计算机系统中的死锁 +* 竞争不可抢占性资源引起死锁 +* 竞争可消耗资源引起死锁 +* 进程推进顺序不当引起死锁 +### 死锁的定义,必要条件和处理方法 +* 定义:如果一组进程中的每一个进程都在等待仅由该进程中的其他进程才能引发的事件,那么该组进程是死锁的 +* 产生死锁的必要条件 + * 互斥条件 + * 请求和保存条件 + * 不可抢占条件 + * 循环等待条件 + * 如果每个资源只有一个实例,则环路等待条件是死锁存在的充分必要条件 +* 处理死锁的方法 + * 预防死锁 + * 静态方法,在进程执行前采取的措施,通过设置某些限制条件,去破坏产生死锁的四个条件之一,防止发生死锁。 + * 预防死锁的策略 + * 破坏"请求和保存"条件 + * 第一种协议 + * 所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源 + * 优点:简单,易行,安全 + * 缺点 + * 资源被严重浪费,严重地恶化了资源的利用率 + * 使进程经常会发生饥饿现象 + * 第二种协议 + * 它允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的,且已用毕的全部资源,然后再请求新的所需资源 + * 破坏"不可抢占"条件 + * 当一个已经保存了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请 + * 破坏"循环等待"条件 + * 对系统所以资源类型进行线性排序,并赋予不同的序号 + * 例如令输入机的序号为1,打印机序号为2,磁盘机序号为3等。所有进程对资源的请求必须严格按资源序号递增的次序提出。 + * 避免死锁 + * 动态的方法,在进程执行过程中采取的措施,不需事先采取限制措施破坏产生死锁的必要条件,而是在进程申请资源时用某种方法去防止系统进入不安全状态,从而避免发生死锁。如银行家算法 + * 避免死锁的策略 + * 系统安全状态 + * 安全状态 + * 某时刻,对于并发执行的n个进程,若系统能够按照某种顺序如来为每个进程分配所需资源,直至最大需求,从而使每个进程都可顺利完成,则认为该时刻系统处于安全状态,这样的序列为安全序列 + * 安全状态之例 + * 由安全状态向不安全状态的转换 + * 利用银行家算法避免死锁 + * 含义:每一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待 + * 银行家算法中的数据结构 + * 可用资源向量 Available[m]:m为系统中资源种类数,Available[j]=k表示系统中第j类资源数为k个。 + * 最大需求矩阵 Max[n,m]:n为系统中进程数,Max[i,j]=k表示进程i对j类资源的最大需求数为中k。 + * 分配矩阵 Allocation[n,m]:它定义了系统中每一类资源当前已分配给每一进程资源数, Allocation[i,j] = k表示进程i已分得j类资源的数目为k个。 + * 需求矩阵 Need[n,m]:它表示每个进程尚需的各类资源数,Need[i,j]=k 表示进程i 还需要j类资源k个。Need[i,j]=Max[i,j] - Allocation[i,j] + * 银行家算法 + * 安全性算法 + * 银行家算法之例 + * 解题 + * 矩阵 + * 列表 + * 检测死锁 + * 死锁的检测与解除 + * 死锁的检测 + * 资源分配图 + * 简化步骤 + * 选择一个没有阻塞的进程p + * 将p移走,包括它的所有请求边和分配边 + * 重复步骤1,2,直至不能继续下去 + * 死锁定理 + * 若一系列简化以后不能使所有的进程节点都成为孤立节点 + * 检测时机 + * 当进程等待时检测死锁 (其缺点是系统的开销大) + * 定时检测 + * 系统资源利用率下降时检测死锁 + * 死锁检测中的数据结构 + * 死锁的解除 + * 抢占资源 + * 终止(或撤销)进程 + * 终止进程的方法 + * 终止所有死锁进程 + * 逐个终止进程 + * 代价最小 + * 进程的优先级的大小 + * 进程已执行了多少时间,还需时间 + * 进程在运行中已经使用资源的多少,还需多少资源 + * 进程的性质是交互式还是批处理的 + * 付出代价最小的死锁解除算法 + * 是使用一个有效的挂起和解除机构来挂起一些死锁的进程 + * 解除死锁 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第三章 处理机调度与死锁/第三章 处理机调度与死锁.png b/操作系统/第三章 处理机调度与死锁/第三章 处理机调度与死锁.png new file mode 100644 index 0000000..ff945a3 Binary files /dev/null and b/操作系统/第三章 处理机调度与死锁/第三章 处理机调度与死锁.png differ diff --git a/操作系统/第三章 处理机调度与死锁/第三章处理机调度与死锁.xmind b/操作系统/第三章 处理机调度与死锁/第三章处理机调度与死锁.xmind new file mode 100644 index 0000000..45258d1 Binary files /dev/null and b/操作系统/第三章 处理机调度与死锁/第三章处理机调度与死锁.xmind differ diff --git a/操作系统/第二章 进程的描述与控制/第二章 进程的描述与控制.md b/操作系统/第二章 进程的描述与控制/第二章 进程的描述与控制.md new file mode 100644 index 0000000..75f9ab8 --- /dev/null +++ b/操作系统/第二章 进程的描述与控制/第二章 进程的描述与控制.md @@ -0,0 +1,228 @@ +# 第二章进程的描述与控制 +## 前驱图和程序执行 +## 程序并发执行 +### 程序的并发执行 +### 程序并发执行时的特征 +* 间断性 +* 失去封闭性 +* 不可再现性 +## 进程的描述 +### 进程的定义 +* 进程是程序的一次执行 +* 进程是一个程序及其数据在处理机上顺序执行时所发生的活动 +* 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位 +### 进程的特征 +* 动态性 +* 并发性 +* 独立性 +* 异步性 +### 从操作系统角度分类 +* 系统进程 +* 用户进程 +### 进程和程序的区别 +* 进程是动态概念,而程序则是静态概念 +* 程序是指令的有序集合,永远存在;进程强调是程序在数据集上的一次执行,有创建有撤销,存在是暂时的; +* 进程具有并发性,而程序没有 +* 进程可创建其他进程,而程序并不能形成新的程序 +* 进程是竞争计算机资源的基本单位,程序不是 +### 进程和程序的联系 +* 进程是程序在数据集上的一次执行 +* 程序是构成进程的组成部分,一个程序可对应多个进程,一个进程可包括多个程序 +* 进程的运行目标是执行所对应的程序 +* 从静态看,进程由程序、数据和进程控制块(PCB)组成 +### 进程的基本状态及转换 +* 进程的三种基本状态 + * 就绪状态ready + * 执行状态running + * 阻塞状态block +* 三种基本状态的转换 +* 创建状态和终止状态 + * 五状态进程模型 +* 注意 + * 阻塞态->运行态和就绪态->阻塞态这二种状态转换不可能发生 +### 挂起操作和进程状态的转换 +* 挂起和阻塞的区别 +* 挂起操作的目的 + * 终端用户的需要: 修改、检查进程 + * 父进程的需要:修改、协调子进程 + * 对换的需要:缓和内存 + * 负荷调节的需要:保证实时任务的执行 +* 关键图 +### 进程管理中的数据结构 +* 进程控制块PCB的作用 + * 作为独立运行基本单位的标志 + * 能实现间断性运行方式 + * 提供进程管理所需要的信息 + * 提供进程调度所需要的信息 + * 实现与其他进程的同步与通信 +* 进程控制块的信息 + * 进程标识符 + * 外部标识符PID + * 内部标识符(端口) + * 处理机状态 + * 通用寄存器 + * 指令计数器 + * 程序状态字PSW + * 用户栈指针 + * 进程调度信息 + * 进程状态 + * 进程优先级 + * 进程调度所需的其他信息 + * 事件 + * 进程控制信息 + * 程序和数据的地址 + * 进程同步和通信机制 + * 资源清单 + * 链接指针 + * 进程控制块的组织方式 + * 线性方式 + * 链接方式 + * 索引方式 +## 进程控制 +### 操作系统内核 +* 两大功能 + * 支撑功能 + * 中断管理 + * 时钟管理 + * 原语操作 + * 进程的管理,由若干原语(primitive)来执行 + * 资源管理功能 + * 进程管理 + * 存储器管理 + * 设备管理 +* 状态 + * 系统态,管态,内核态 + * 用户态,目态 +### 进程的创建 +* 进程的层次结构 + * 父进程 + * 子进程 +* 引起创建进程的事件 + * 用户登录 + * 作业调度 + * 提供服务 + * 应用请求 +* 进程的创建过程 + * 1.申请空白PCB + * 2.为新进程分配其运行所需的资源 + * 3.初始化进程块PCB + * 4.如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列 +* 进程的终止 + * 引起进程终止的事件 + * 1.正常结束 + * 2.异常结束 + * 3.外界干预 + * 进程的终止过程 + * 1.根据被终止进程的标识符 +* 进程的阻塞与唤醒 + * 引起进程阻塞和唤醒的事件 + * 请求系统服务而未满足 + * 启动某种操作而阻塞当前进程 + * 新数据尚未到达 + * 无新工作可做:系统进程 + * 进程阻塞过程(自己阻塞自己) + * 进程唤醒过程(系统或其他进程唤醒自己) +* 进程的挂起与激活 + * suspend + * active +### 进程同步 +* 基本概念 + * 两种形式的制约关系 + * 间接相互制约关系 + * 互斥——竞争 + * 直接相互制约关系 + * 同步——协作 + * 临界资源 + * 分区 + * 进入区enter section + * 临界区critical section + * 退出区exit section + * 剩余区remainder section + * 同步机制应遵循的规则 + * 1.空闲让进 + * 2.忙则等待 + * 3.有限等待 + * 4.让权等待 +* 进程同步机制 + * 软件同步机制:都没有解决让权等待,而且部分方法还会产生死锁的情况 + * 硬件同步机制 + * 关中断 + * 利用Test-and-Set指令实现互斥 + * 利用swap指令实现进程互斥 + * 信号量机制 + * 整型信号量 + * 记录型信号量 + * 由于整型信号量没有遵循让权等待原则,记录型允许负数,即阻塞链表 + * AND型信号量 + * 信号量集 + * 理解:AND型号量的wait和signal仅能对信号施以加1或减1操作,意味着每次只能对某类临界资源进行一个单位的申请或释放。当一次需要N个单位时,便要进行N次wait操作,这显然是低效的,甚至会增加死锁的概率。此外,在有些情况下,为确保系统的安全性,当所申请的资源数量低于某一下限值时,还必须进行管制,不予以分配。因此,当进程申请某类临界资源时,在每次分配前,都必须测试资源数量,判断是否大于可分配的下限值,决定是否予以分配 + * 操作 + * Swait(S1,t1,d1…Sn,tn,dn) + * Ssignal(S1,d1…Sn,dn) + * 特殊情况 +* 经典进程的同步问题 + * 生产者–消费者问题 + * 哲学家进餐问题 + * 读者–写者问题 +## 进程通信 +### 进程通信是指进程之间的信息交换,又称低级进程通信 +### 进程通信的类型 +* 共享存储器系统 + * 基于共享数据结构的通信方式 + * 生产者和消费者 + * 基于共享存储区的通信方式 + * 高级通信 +* 管道通信系统(pipe) + * 高级通信 +* 消息传递系统 + * 高级通信 + * 方式分类 + * 直接通信 + * 间接通信 +* 客服机–服务器系统 +### 消息传递通信的实现方式 +* 直接消息传递系统 +* 信箱通信 +## 线程的基本概念 +### 线程的引入 +* 线程的引入正是为了简化线程间的通信,以小的开销来提高进程内的并发程度 +* 多线程并发的不足 + * 进程的两个基本属性 + * 一个拥有资源的独立单位,可独立分配系统资源 + * 一个可独立调度和分派的基本单位,PCB + * 程序并发执行所需付出的时空开销 + * 创建进程 + * 撤销进程 + * 进程切换 + * 进程间通信效率低 + * 将分配资源和调度两个属性分开 +* 线程——作为调度和分派的基本单位 + * 进程是系统资源分配的单位,线程是处理器调度的单位 + * 线程表示进程的一个控制点,可以执行一系列的指令。通常,和应用程序的一个函数相对应 + * 进程分解为线程还可以有效利用多处理器和多核计算机 +### 线程与进程的比较 +* 不同点 + * 调度的基本单位 + * 并发性 +* 相似点 + * 状态:运行、阻塞、就绪 + * 线程具有一定的生命期 + * 进程可创建线程,一个线程可创建另一个子线程 + * 多个线程并发执行时仍然存在互斥与同步 +### 线程的实现 +* 线程的实现方式 + * 内核支持线程KST + * 用户级线程ULT + * 组合方式 +* 多线程OS中的进程属性 + * 进程是一个可拥有资源的基本单位 + * 多个线程可并发执行 + * 进程已不是可执行的实体 +* 线程的状态和线程控制块 + * 线程运行的三个状态 + * 执行状态 + * 就绪状态 + * 阻塞状态 + * 线程控制块TCB + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第二章 进程的描述与控制/第二章 进程的描述与控制.png b/操作系统/第二章 进程的描述与控制/第二章 进程的描述与控制.png new file mode 100644 index 0000000..297be65 Binary files /dev/null and b/操作系统/第二章 进程的描述与控制/第二章 进程的描述与控制.png differ diff --git a/操作系统/第二章 进程的描述与控制/第二章进程的描述与控制.xmind b/操作系统/第二章 进程的描述与控制/第二章进程的描述与控制.xmind new file mode 100644 index 0000000..2b7f981 Binary files /dev/null and b/操作系统/第二章 进程的描述与控制/第二章进程的描述与控制.xmind differ diff --git a/操作系统/第五章 虚拟存储器/第五章 虚拟存储器.md b/操作系统/第五章 虚拟存储器/第五章 虚拟存储器.md new file mode 100644 index 0000000..b617cfb --- /dev/null +++ b/操作系统/第五章 虚拟存储器/第五章 虚拟存储器.md @@ -0,0 +1,76 @@ +# 第五章:虚拟存储器 +## 常规存储管理方式的特征 +### 一次性 +### 驻留性 +## 局部性原理 +### 程序在执行时将呈现出局部性特征,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域 +### 时间局限性 +* 如果程序中的某条指令一旦执行, 则不久以后该指令可能再次执行;如果某数据被访问过, 则不久以后该数据可能再次被访问。产生时间局限性的典型原因,是由于在程序中存在着大量的循环操作 +### 空间局限性 +* 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。 +## 定义 +### 指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统 +## 优点 +### 大程序:可在较小的可用内存中执行较大的用户程序; +### 大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存(real memory) +### 并发:可在内存中容纳更多程序并发执行; +### 易于开发:不必影响编程时的程序结构 +### 以CPU时间和外存空间换取昂贵内存空间,这是操作系统中的资源转换技术 +## 特征 +### 离散性 +* 指在内存分配时采用离散的分配方式,它是虚拟存储器的实现的基础 +### 多次性 +* 指一个作业被分成多次调入内存运行,即在作业运行时没有必要将其全部装入,只须将当前要运行的那部分程序和数据装入内存即可。多次性是虚拟存储器最重要的特征 +### 对换性 +* 指允许在作业的运行过程中在内存和外存的对换区之间换进、换出。 +### 虚拟性 +* 指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。 +## 虚拟存储器的实现方式 +### 请求分页存储管理方式 +* 硬件 + * 请求页表机制 + * 格式:页号+物理块号+状态位P+访问字段A+修改位M+外存地址 + * 缺页中断机构 + * 地址变换机构(过程图很关键) +* 请求分页中的内存分配 + * 最小物理块数 + * 即能保证进程正常运行所需的最小物理块数 + * 内存分配策略 + * 固定分配局部置换(国王的大儿子) + * 可变分配全局置换(国王的二儿子) + * 可变分配局部置换(国王的小儿子) +* 物理块分配算法 + * 平均分配算法 + * 按比例分配算法 + * 考虑优先权的分配算法 +* 页面调入策略 + * 系统应在何时调入所需页面 + * 预调页策略(不能实现) + * 请求调页策略(需要才给) + * 系统应该从何处调入这些页面 + * 对换区 + * 文件区 + * 页面调入过程 + * 缺页率(出计算题) +### 请求分段系统 +* 硬件 + * 请求分段的段表机构 + * 缺段中断机构 + * 地址变换机构 +## 页面置换算法 +### 抖动的概念 +* 即刚被换出的页很快又要被访问,需要将它重新调入,此时又需要再选一页调出 +### 最佳置换算法(需要预知后面进程,所以不能实现) +### 先进先出页面置换算法(FIFO) +* 选择在内存中驻留时间最久的页面予以淘汰 +### 最近最久未使用置换算法(LRU)Recently +* 寄存器支持 +* 特殊的栈结构 +### 最少使用置换算法(LFU)Frequently +### clock置换算法(对访问位A的判断) +* 改进型——增加对修改位M思维判断 +### 页面缓冲算法(PBA,page buffering algorithm) +* 空闲页面链表 +* 修改页面链表 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第五章 虚拟存储器/第五章 虚拟存储器.png b/操作系统/第五章 虚拟存储器/第五章 虚拟存储器.png new file mode 100644 index 0000000..0deca7a Binary files /dev/null and b/操作系统/第五章 虚拟存储器/第五章 虚拟存储器.png differ diff --git a/操作系统/第五章 虚拟存储器/第五章虚拟存储器.xmind b/操作系统/第五章 虚拟存储器/第五章虚拟存储器.xmind new file mode 100644 index 0000000..51e7d71 Binary files /dev/null and b/操作系统/第五章 虚拟存储器/第五章虚拟存储器.xmind differ diff --git a/操作系统/第六章 输入输出系统/第六章 输入输出系统.md b/操作系统/第六章 输入输出系统/第六章 输入输出系统.md new file mode 100644 index 0000000..c48934f --- /dev/null +++ b/操作系统/第六章 输入输出系统/第六章 输入输出系统.md @@ -0,0 +1,249 @@ +# 第六章:输入输出系统 +## I/O系统的功能,模型和接口 +### I/O系统管理的对象是I/O设备和相应的设备控制器。 +### I/O系统的基本功能 +* 隐藏物理设备的细节 +* 与设备的无关性 +* 提高处理机和I/O设备的利用率 +* 对I/O设备进行控制 +* 确保对设备的正确共享 +* 错误处理 +### I/O软件的层次结构 +* 用户层I/O软件 +* 设备独立性软件 +* 设备驱动程序(厂家开发) +* 中断处理程序 +* 硬件 +### I/O系统的分层 +* 中断处理程序 +* 设备驱动程序 +* 设备独立性软件 +### I/O系统接口 +* 块设备接口 + * 指以数据块为单位来组织和传送数据信息的设备 + * 典型的块设备是磁盘、光盘 + * 块设备的基本特征 + * ①传输速率较高,通常每秒钟为几兆位; + * ②它是可寻址的,即可随机地读/写任意一块; + * ③磁盘设备的I/O采用DMA方式。 +* 流设备接口 + * 又称字符设备指以单个字符为单位来传送数据信息的设备 + * 这类设备一般用于数据的输入和输出,有交互式终端、打印机 + * 字符设备的基本特征 + * ①传输速率较低; + * ②不可寻址,即不能指定输入时的源地址或输出时的目标地址; + * ③字符设备的I/O常采用中断驱动方式。 +* 网络通信接口 + * 提供网络接入功能,使计算机能通过网络与其他计算机进行通信或上网浏览。 +## I/O设备和设备控制器 +### 分类 +* 使用特性分 + * 存储设备 + * I/O设备 +* 传输速率分 + * 低速设备(几字节——几百字节) + * 典型的设备有键盘、鼠标、语音的输入 + * 中速设备(数千——数万字节) + * 典型的设备有行式打印机、激光打印机 + * 高速设备(数十万——千兆字节) + * 典型的设备有磁带机、磁盘机、光盘机 +### 设备并不是直接与CPU进行通信,而是与设备控制器通信。在设备与设备控制器之间应该有一个接口。 +* 数据信号:控制器 ← 设备 ← 控制器 + * 传送数据信号,输入、输出bit +* 控制信号: 控制器 → 设备 + * 执行读、写操作的信号 +* 状态信号:设备当前使用状态 +### 设备控制器 +* 主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换 +* 基本功能 + * 接收和识别命令 + * 控制寄存器、命令译码器 + * 数据交换 + * 实现CPU与控制器,控制器与设备间的数据交换 + * 标识和报告设备的状态 + * 地址识别 + * 配置地址译码器,识别不同的设备 + * 数据缓冲区 + * 差错控制 +* 设备控制器的组成 + * 设备控制器与处理机(CPU)的接口 + * 实现CPU与设备控制器之间的通信 + * 设备控制器与设备的接口 + * 控制器可连接多个设备 + * I/O逻辑 + * 实现对设备的控制 + * CPU利用该逻辑向控制器发送I/O命令 + * 命令、地址译码 +### 内存映像I/O +* 驱动程序将抽象I/O命令转换出的一系列具体的命令,参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对I/O设备的操作 +### I/O通道 +* 目的:建立独立的I/O操作(组织, 管理和结束),使由CPU处理的I/O工作转由通道完成(解放CPU,实现并行) + +* 什么是I/O通道? + * 是一种特殊的处理机,具有通过执行通道程序完成I/O操作的指令 + * 特点:指令单一(局限于与I/O操作相关的指令),与CPU共享内存 +* 基本过程: + * CPU向通道发出I/O指令->通道接收指令->从内存取出通道程序处理I/O->向CPU发出中断 +* 通道类型 + * 字节多路通道 + * 低中速连接子通道时间片轮转方式共享主通道 + * 字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。 + * 数组选择通道 + * 这种通道可以连接多台高速设备,但只含有一个分配型子通道,在一段时间内只能执行一道通道程序, 控制一台设备进行数据传送, 直至该设备传送完毕释放该通道。这种通道的利用率很低。 + * 数组多路通道 + * 含有多个非分配型子通道,前两种通道的组合,通道利用率较好 +* 瓶颈问题 + * 原因;通道不足 + * 解决办法:增加设备到主机间的通路,而不增加通道(结果类似RS触发器) +## 中断机构和中断处理程序 +### 中断 +* 分类 + * 中断(外部触发) + * 对外部I/O设备发出的中断信号的响应 + * 陷入(内部原因:除0) + * 由CPU内部事件引起的中断 +* 中断向量表(类比51单片机) + * 中断程序的入口地址表 +* 中断优先级 + * 对紧急程度不同的中断处理方式 +* 对多中断源的处理方式 + * 屏蔽中断 + * 嵌套中断 +### 中断处理程序 +* 测定是否有未响应的中断信号 +* 保护被中断进程的CPU环境 +* 转入相应的设备处理程序 +* 中断处理 +* 恢复CPU 的现场并退出中断 +## 设备驱动程序 +### 是I/O进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称为设备驱动进程 +### 主要任务是接受来自它上一层的与设备无关软件的抽象请求,并执行这个请求。 +### 功能 +* 1) 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求。例如,将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。 +* 2) 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。 +* 3) 发出I/O命令,如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。 +* 4) 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。 +* 5) 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。 +### 设备驱动程序的处理过程 +* 将用户和上层软件对设备控制的抽象要求转换成对设备的具体要求,如对抽象要求的盘块号转换为磁盘的盘面、磁道及扇区。 +* 检查I/O请求的合理性。 +* 读出和检查设备的状态,确保设备处于就绪态。 +* 传送必要的参数,如传送的字节数,数据在主存的首址等。 +* 工作方式的设置。 +* 启动I/O设备,并检查启动是否成功,如成功则将控制返回给I/O控制系统,在I/O设备忙于传送数据时,该用户进程把自己阻塞,直至中断到来才将它唤醒,而CPU可干别的事。 +### 对I/O设备的控制方式 +* I/O控制的宗旨 + * 减少CPU对I/O控制的干预 + * 充分利用CPU完成数据处理工作 +* I/O 控制方式 + * 轮询的可编程I/O方式 + * 中断驱动I/O方式 + * DMA控制方式 + * I/O通道控制方式 +### DMA控制器组成 +* 主机与DMA控制器的接口 +* DMA控制器与块设备的接口 +* I/O控制逻辑 +## 与设备无关的I/O软件 +### 基本概念 +* 含义: 应用程序独立于具体使用的物理设备。 +* 驱动程序是一个与硬件(或设备)紧密相关的软件。为实现设备独立性,须在驱动程序上设置一层软件,称为设备独立性软件。 +* 设备独立性(Device Independence)的优点 + * 以物理设备名使用设备 + * 引入了逻辑设备名 + * 逻辑设备名称到物理设备名称的转换(易于实现I/O重定向) +### 与设备无关的软件 +* 设备驱动程序的统一接口 +* 缓存管理 +* 差错控制 +* 对独立设备的分配与回收 +* 独立于设备的逻辑数据块 +### 设备分配中的数据结构 +* 设备控制表DCT +* 控制器控制表COCT +* 通道控制表CHCT +* 显然,在有通道的系统中,一个进程只有获得了通道,控制器和所需设备三者之后,才具备了进行I/O操作的物理条件 +* 系统设备表SDT +* 逻辑设备表LUT +* 分配的流程,从资源多的到资源紧张的:LUT->SDT->DCT->COCT->CHCT +* 在申请设备的过程中,根据用户请求的I/O设备的逻辑名,查找逻辑设备和物理设备的映射表;以物理设备为索引,查找SDT,找到该设备所连接的DCT;继续查找与该设备连接的COCT和CHCT,就找到了一条通路。 +## 用户层的I/O软件 +### 系统调用与库函数 +* OS向用户提供的所有功能,用户进程都必须通过系统调用来获取 +* 在C语言以及UNIX系统中,系统调用(如read)与各系统调用所使用的库函数(如read)之间几乎是一一对应的。而微软的叫Win32API +### 假脱机系统(spooling) +* spooling技术是对脱机输入/输出系统的模拟 +* 主要组成 + * 输入/输出井 + * 输入/输出缓冲区 + * 输入/输出进程 + * 井管理程序 +* 特点(体现操作系统的虚拟性) + * 提高了I/O的速度 + * 对数据所进行的I/O操作,已从对低速设备演变为对输入井或输出井中的数据存取。 + * 将独占设备改造为共享设备 + * 实际分给用户进程的不是打印设备,而是共享输出井中的存储区域 + * 实现了虚拟设备功能 + * 将独占设备变成多台独占的虚拟设备。 +## 缓冲区管理 +### 缓冲的引入(原因) +* 缓和CPU与I/O设备间速度不匹配的矛盾 +* 减少对CPU的中断频率,放宽对CPU中断响应时间的限制 +* 提高CPU和I/O设备之间的并行性 +* 解决数据粒度不匹配的问题 +### 单缓冲区 +* 即在CPU计算的时候,将数据数据输入到缓冲区(大小取决与T和C的大小) +### 双缓冲区 +* 即允许CPU连续工作(T不断) +### 环形缓冲区(专为生产者和消费者打造) +* 组成 + * 多个缓冲区 + * 多个指针 +* 使用 + * Getbuf过程 + * Releasebuf过程 +* 同步问题 +### 缓冲池(理解为更大的缓冲区) +* 组成 + * 空白缓冲队列(emq) + * 由空缓冲区链接而成F(emq),L(emq)分别指向该队列首尾缓冲区 + * 输入队列(inq) + * 由装满输入数据的缓冲区链接而成F(inq),L(inq)分别指向该队列首尾缓冲区 + * 输出队列(outq) + * 由装满输出数据的缓冲区链接而成F(outq), L(outq)分别指向该队列首尾缓冲 +* Getbuf和Putbuf过程 + * 收容:缓冲池接收外界数据 + * 提取:外界从缓冲池获得数据 +* 缓冲区工作方式(从缓冲区的角度来看) + * 收容输入 + * 提取输入 + * 收容输出 + * 提取输出 +## 磁盘存储器的性能和调度 +### 数据的组织和格式 +### 磁盘的类型 +* 固定头磁盘(贵) +* 移动头磁盘 +### 磁盘访问的时间(关键) +* 寻道时间Ts=m*n+s +* 旋转延迟时间Tr +* 传输时间Tt=b/rN +* 总时间Ta=Ts+1/2r+b/rN +### 磁盘的调度算法(掌握图表) +* 先来先服务(FCFS) + * 优点:公平,简单 + * 缺点:可能导致某些进程的请求长期得不到满足 +* 最短寻道时间优先(SSTF) + * 说明:要求访问的磁道和当前磁头所在的磁道距离最近,以使每次的寻道时间最短 +* 扫描算法(SCAN) + * 扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁道当前的移动方向 + * 联想电梯的运行 + * 可防止低优先级进程出现“饥饿”的现象 +* 循环扫描算法(CSCAN) + * 算法规定磁头单向移动,例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描 +* NStepScan算法 + * N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次这些子队列。 +* FSCAN算法 + * 是Nstepscan算法的简化,将磁盘请求队列分成两个子队列 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第六章 输入输出系统/第六章 输入输出系统.png b/操作系统/第六章 输入输出系统/第六章 输入输出系统.png new file mode 100644 index 0000000..4c705b4 Binary files /dev/null and b/操作系统/第六章 输入输出系统/第六章 输入输出系统.png differ diff --git a/操作系统/第六章 输入输出系统/第六章输入输出系统.xmind b/操作系统/第六章 输入输出系统/第六章输入输出系统.xmind new file mode 100644 index 0000000..9deb792 Binary files /dev/null and b/操作系统/第六章 输入输出系统/第六章输入输出系统.xmind differ diff --git a/操作系统/第四章 存储器管理/第四章 存储器管理.md b/操作系统/第四章 存储器管理/第四章 存储器管理.md new file mode 100644 index 0000000..3a15be7 --- /dev/null +++ b/操作系统/第四章 存储器管理/第四章 存储器管理.md @@ -0,0 +1,162 @@ +# 第四章:存储器管理 +## 存储器的层次结构 +### 多层结构的存储系统 +* 存储器的多层结构 + * CPU寄存器 + * 主存 + * 辅存 +* 可执行存储器 + * 寄存器和主存的总称 + * 访问速度快,进程可以在很少的时钟周期内用一条load或store指令完成存取。 +### 主存储器与寄存器 +### 高速缓存和磁盘缓存 +## 程序的装入和链接 +### 步骤 +* 编译 + * 源程序 ->目标模块(Object modules)--------Compiler + * 由编译程序对用户源程序进行编译,形成若干个目标模块 +* 链接 + * 一组目标模块 ->装入模块 (Load Module)----------Linker + * 由链接程序将编译后形成的一组目标模板以及它们所需要的库函数链接在一起,形成一个完整的装入模块 +* 装入 + * 装入模块 ->内存 --------Loader + * 由装入程序将装入模块装入内存 +### 程序的装入 +* 绝对装入方式 + * 在编译时,如果知道程序将驻留在内存中指定的位置。编译程序将产生绝对地址的目标代码。 +* 可重定位装入方式 + * 在可执行文件中,列出各个需要重定位的地址单元和相对地址值。当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。 + * 优点:不需硬件支持,可以装入有限多道程序。 + * 缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动。不易实现共享。 +* 动态运行时的装入方式 + * 动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行 + * 优点: + * OS可以将一个程序分散存放于不连续的内存空间,可以移动程序,有利用实现共享。 + * 能够支持程序执行中产生的地址引用,如指针变量(而不仅是生成可执行文件时的地址引用)。 + * 缺点:需要硬件支持,OS实现较复杂。 + * 它是虚拟存储的基础。 +### 程序的链接 +* 静态链接方式(lib) +* 装入时动态链接 +* 运行时动态链接(dll) +## 连续分配存储管理方式 +### 连续分配 +* 单一连续分配(DOS) +* 固定分区分配(浪费很多空间) +* 动态分区分配 +### 地址映射和存储保护措施 +* 基址寄存器:程序的最小物理地址 +* 界限寄存器:程序的逻辑地址范围 +* 物理地址 = 逻辑地址 + 基址 +### 内碎片:占用分区之内未被利用的空间 +### 外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区) +### 把内存划分为若干个固定大小的连续分区。固定式分区又称为静态分区。 +* 分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。 +* 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。 +* 优点:无外碎片、易实现、开销小。 +* 缺点: + * 存在内碎片,造成浪费 + * 分区总数固定,限制了并发执行的程序数目。 + * 通用Os很少采用,部分控制系统中采用 +### 动态创建分区:指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,且分区大小正好等于该作业的大小。可变式分区中分区的大小和分区的个数都是可变的,而且是根据作业的大小和多少动态地划分。 +* 基于顺序搜索的动态分区分配算法 + * 首次适应算法(first fit,FF) + * 顺序找,找到一个满足的就分配,但是可能存在浪费 + * 这种方法目的在于减少查找时间。 + * 空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序 + * 循环首次适应算法(next fit,NF) + * 相对上面那种,不是顺序,类似哈希算法中左右交叉排序 + * 空闲分区分布得更均匀,查找开销小 + * 从上次找到的空闲区的下一个空闲区开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。 + * 最佳适应算法(best fit,BF) + * 找到最合适的,但是大区域的访问次数减少 + * 这种方法能使外碎片尽量小。 + * 空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。 + * 最坏适应算法(worst fit,WF) + * 相对于最好而言,找最大的区域下手,导致最大的区域可能很少,也造成许多碎片 + * 空闲分区按大小由大到小排序 +* 基于索引搜索的动态分区分配算法 + * 快速适应算法(quick fit) + * 伙伴系统(buddy system) + * 哈希算法 +* 动态可重定位分区分配 + * 紧凑 + * 动态重定位 + * 动态运行时装入,地址转化在指令执行时进行,需获得硬件地址变换机制的支持 + * 内存地址=相对地址+起始地址 + * 动态重定位分区分配算法 + * 1、在某个分区被释放后立即进行紧凑,系统总是只有一个连续的分区而无碎片,此法很花费机时。 + * 2、当“请求分配模块”找不到足够大的自由分区分给用户时再进行紧凑,这样紧缩的次数比上种方法少得多,但管理复杂。采用此法的动态重定位分区分配算法框图如下: +* 优点:没有内碎片。 +* 缺点:外碎片。 +## 对换(了解) +### 系统把所有的作业放在外存,每次只调用一个作业进入内存运行,当时间片用完时,将它调至外存后备队列上等待,在从后备队列调入另一个作业进入内存运行。 +## 基本分页存储管理方式 +### 分页存储管理的基本方式 +* 页面 + * 将一个进程的逻辑地址空间分成若干个大小相等的片 +* 页框(frame) + * 内存空间分成与页面相同大小的存储块 +* 由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片” +* 地址结构 + * 页号P+位移量W(0-31) +* 页表 + * 在分页系统中,允许将进程的各个页离散地存储在内存在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每一个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表 + * 页表的作用是实现从页面号到物理块号的地址映射 +### 地址变换机构 +* 基本的地址变换机构 + * 要访问两次内存 + * 页表大都驻留在内存中 + * 为了实现地址变换功能,在系统中设置页表寄存器(PTR),用来存放页表的始址和页表的长度。 + * 在进程未执行时,每个进程对应的页表的始址和长度存放在进程的PCB中,当该进程被调度时,就将它们装入页表寄存器。 +* 具有快表的地址变换机构 + * 提高了效率,此处会有计算题 + * 如果页表存放在内存中,则每次访问内存时,都要先访问内存中的页表,然后根据所形成的物理地址再访问内存。这样CPU存一个数据必须访问两次内存,从而使计算机的处理速度降低了1/2。 + * 为了提高地址变换的速度,在地址变换机构中增设了一个具有并行查询功能的特殊的高速缓冲存储器,称为“联想存储器”或“快表”,用以存放当前访问的那些页表项。 + * 地址变换过程为: + * 1、CPU给出有效地址 + * 2、地址变换机构自动地将页号送入高速缓存,确定所需要的页是否在快表中。 + * 3、若是,则直接读出该页所对应的物理块号,送入物理地址寄存器; + * 4、若快表中未找到对应的页表项,则需再访问内存中的页表 + * 5、找到后,把从页表中读出的页表项存入快表中的一个寄存器单元中,以取代一个旧的页表项。 +### 两级和多级页表 +* 主要是有的时候页表太多了,要化简 +* 格式:外层页号P1+外层页内地址P2+页内地址d +* 基本方法:将页表进行分页,每个页面的大小与内存物理块的大小相同,并为它们进行编号,可以离散地将各个页面分别存放在不同的物理块中。 +### 反置页表 +* 反置页表为每一个物理块(页框)设置一个页表项,并按物理块排序,其内容则是页号和其所属进程的标识。 +### 优点: +* 没有外碎片,每个内碎片不超过页大小。 +* 一个程序不必连续存放。 +* 便于改变程序占用空间的大小。即随着程序运行而动态生成的数据增多,地址空间可相应增长。 +### 缺点:程序全部装入内存。 +## 分段存储管理方式 +### 引入 +* 方便编程 +* 信息共享 +* 动态增长 +* 动态链接 +### 在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,各段长度是不等的。 +### 内存空间被动态的划分为若干个长度不相同的区域,称为物理段,每个物理段由起始地址和长度确定 +### 分段系统的基本原理 +* 分段 + * 格式:段号+段内地址 +* 段表 + * 段表实现了从逻辑段到物理内存区的映射。 +* 地址变换机构 +### 和分页的区别 +* 页是信息的物理单位 +* 页的大小固定且由系统固定 +* 分页的用户程序地址空间是一维的 +* 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。 +* 分页是系统管理的需要,分段是用户应用的需要。一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。 +### 信息共享 +* 这是分段最重要的优点 +### 段页式存储管理方式 +* 基本原理 + * 格式:段号(S)+段内页号(P)+页内地址(W) +* 地址变换过程 + * 需要三次访问过程 +* 在段页式系统中,为了获得一条指令或数据,需三次访问内存:第一次访问内存中的段表,从中取得页表始址;第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正根据所得的物理地址取出指令或数据。 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/第四章 存储器管理/第四章 存储器管理.png b/操作系统/第四章 存储器管理/第四章 存储器管理.png new file mode 100644 index 0000000..6f1473b Binary files /dev/null and b/操作系统/第四章 存储器管理/第四章 存储器管理.png differ diff --git a/操作系统/第四章 存储器管理/第四章存储器管理.xmind b/操作系统/第四章 存储器管理/第四章存储器管理.xmind new file mode 100644 index 0000000..bf56153 Binary files /dev/null and b/操作系统/第四章 存储器管理/第四章存储器管理.xmind differ diff --git a/操作系统/计算机操作系统.md b/操作系统/计算机操作系统.md new file mode 100644 index 0000000..c575272 --- /dev/null +++ b/操作系统/计算机操作系统.md @@ -0,0 +1,1097 @@ +# 计算机操作系统 +## 一.操作系统引论 +### 1.操作系统的目标和功能 +* 目标 + * 方便性 + * 有效性 + * 提高系统资源利用率 + * 提高系统吞吐量 + * 可扩充性 + * 开放性 +* 作用 + * OS作为用户与计算机硬件系统之间的接口 + * 命令方式 + * 系统调用方式 + * 图标–窗口方式 + * OS实现了对计算机资源的抽象 +### 2.操作系统的发展过程 +* 未配置操作系统的计算机系统 + * 人工操作方式 + * > 用户独占全机 CPU等待人工操作 严重降低了计算机资源的利用率 + + * 脱机输入/输出(Off–Line I/O)方式 + * > 减少了CPU的空闲时间 提高了I/O速度 效率仍然不理想 + +* 单道批处理系统 +* 多道批处理系统 +* > 1.资源利用率高 +* > 2.系统吞吐量大 +* > 3.平均周转时间长 +* > 4.无交互能力 + + * (宏观并行,微观串行) +* 分时系统 +* > 特征: +* > 1.多路性 +* > 2.独立性 +* > 3.及时性 +* > 4.交互性 + +* 实时系统 +* 集群系统–超算~云计算 +* 微机操作系统的发展 +### 3.操作系统的基本特征 +* 1.并发concurrence + * 区别并行和并发 + * > 并行性是指两个或多个事件在同一时刻发生→宏观并行,微观并行 + * > 并发性是指两个或多个事件在同一时间间隔内发生→宏观并行,微观串行 + + * 并发是进程宏观一起运行,微观上交替运行,而并行是指同时运行 + * 引入进程 + * > 进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令,数据和堆栈等组成的,是一个能独立运行的活动实体 + +* 2.共享sharing + * 1.互斥共享方式 + * 2.同时访问方式 + * 并发和共享是多用户(多任务)OS的两个最基本的特征。它们又是互为存在的条件 +* 3.虚拟virtual + * 时分复用技术 + * 空分复用技术 +* 4.异步asynchronism +### 4.操作系统的主要功能 +* 1.处理机管理功能 + * 进程控制 + * 进程同步 + * 进程互斥方式 + * 进程同步方式(协同) + * 进程通信 + * 调度 + * 作业调度 + * 进程调度 +* 2.存储器管理功能 + * 内存分配 + * 静态分配 + * 动态分配 + * 内存保护 + * 地址映射 + * 内存扩充 +* 3.设备管理功能 + * 缓冲管理 + * 设备分配 + * 设备处理 + * 设备处理程序又称设备驱动程序 +* 4.文件管理功能 + * 文件存储空间的管理 + * 目录管理 + * 文件的读写管理和保护 +* 5.操作系统与用户之间的接口 + * 用户接口 + * 程序接口 +* 6.现代操作系统的新功能 + * 系统安全 + * 网络的功能和服务 + * 支持多媒体 +### 5.OS结构设计 +* 传统操作系统结构 + * 无结构操作系统 + * 模块化OS + * 分层式结构OS +* 微内核os结构 + * 客户/服务器模式 + * 面对对象的程序设计 +## 第二章进程的描述与控制 +### 前驱图和程序执行 +### 程序并发执行 +* 程序的并发执行 +* 程序并发执行时的特征 + * 间断性 + * 失去封闭性 + * 不可再现性 +### 进程的描述 +* 进程的定义 + * 进程是程序的一次执行 + * 进程是一个程序及其数据在处理机上顺序执行时所发生的活动 + * 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位 +* 进程的特征 + * 动态性 + * 并发性 + * 独立性 + * 异步性 +* 从操作系统角度分类 + * 系统进程 + * 用户进程 +* 进程和程序的区别 + * 进程是动态概念,而程序则是静态概念 + * 程序是指令的有序集合,永远存在;进程强调是程序在数据集上的一次执行,有创建有撤销,存在是暂时的; + * 进程具有并发性,而程序没有 + * 进程可创建其他进程,而程序并不能形成新的程序 + * 进程是竞争计算机资源的基本单位,程序不是 +* 进程和程序的联系 + * 进程是程序在数据集上的一次执行 + * 程序是构成进程的组成部分,一个程序可对应多个进程,一个进程可包括多个程序 + * 进程的运行目标是执行所对应的程序 + * 从静态看,进程由程序、数据和进程控制块(PCB)组成 +* 进程的基本状态及转换 + * 进程的三种基本状态 + * 就绪状态ready + * 执行状态running + * 阻塞状态block + * 三种基本状态的转换 + * 创建状态和终止状态 + * 五状态进程模型 + * 注意 + * 阻塞态->运行态和就绪态->阻塞态这二种状态转换不可能发生 +* 挂起操作和进程状态的转换 + * 挂起和阻塞的区别 + * 挂起操作的目的 + * 终端用户的需要: 修改、检查进程 + * 父进程的需要:修改、协调子进程 + * 对换的需要:缓和内存 + * 负荷调节的需要:保证实时任务的执行 + * 关键图 +* 进程管理中的数据结构 + * 进程控制块PCB的作用 + * 作为独立运行基本单位的标志 + * 能实现间断性运行方式 + * 提供进程管理所需要的信息 + * 提供进程调度所需要的信息 + * 实现与其他进程的同步与通信 + * 进程控制块的信息 + * 进程标识符 + * 外部标识符PID + * 内部标识符(端口) + * 处理机状态 + * 通用寄存器 + * 指令计数器 + * 程序状态字PSW + * 用户栈指针 + * 进程调度信息 + * 进程状态 + * 进程优先级 + * 进程调度所需的其他信息 + * 事件 + * 进程控制信息 + * 程序和数据的地址 + * 进程同步和通信机制 + * 资源清单 + * 链接指针 + * 进程控制块的组织方式 + * 线性方式 + * 链接方式 + * 索引方式 +### 进程控制 +* 操作系统内核 + * 两大功能 + * 支撑功能 + * 中断管理 + * 时钟管理 + * 原语操作 + * 进程的管理,由若干原语(primitive)来执行 + * 资源管理功能 + * 进程管理 + * 存储器管理 + * 设备管理 + * 状态 + * 系统态,管态,内核态 + * 用户态,目态 +* 进程的创建 + * 进程的层次结构 + * 父进程 + * 子进程 + * 引起创建进程的事件 + * 用户登录 + * 作业调度 + * 提供服务 + * 应用请求 + * 进程的创建过程 + * 1.申请空白PCB + * 2.为新进程分配其运行所需的资源 + * 3.初始化进程块PCB + * 4.如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列 + * 进程的终止 + * 引起进程终止的事件 + * 1.正常结束 + * 2.异常结束 + * 3.外界干预 + * 进程的终止过程 + * 1.根据被终止进程的标识符 + * 进程的阻塞与唤醒 + * 引起进程阻塞和唤醒的事件 + * 请求系统服务而未满足 + * 启动某种操作而阻塞当前进程 + * 新数据尚未到达 + * 无新工作可做:系统进程 + * 进程阻塞过程(自己阻塞自己) + * 进程唤醒过程(系统或其他进程唤醒自己) + * 进程的挂起与激活 + * suspend + * active +* 进程同步 + * 基本概念 + * 两种形式的制约关系 + * 间接相互制约关系 + * 互斥——竞争 + * 直接相互制约关系 + * 同步——协作 + * 临界资源 + * 分区 + * 进入区enter section + * 临界区critical section + * 退出区exit section + * 剩余区remainder section + * 同步机制应遵循的规则 + * 1.空闲让进 + * 2.忙则等待 + * 3.有限等待 + * 4.让权等待 + * 进程同步机制 + * 软件同步机制:都没有解决让权等待,而且部分方法还会产生死锁的情况 + * 硬件同步机制 + * 关中断 + * 利用Test-and-Set指令实现互斥 + * 利用swap指令实现进程互斥 + * 信号量机制 + * 整型信号量 + * 记录型信号量 + * 由于整型信号量没有遵循让权等待原则,记录型允许负数,即阻塞链表 + * AND型信号量 + * 信号量集 + * 理解:AND型号量的wait和signal仅能对信号施以加1或减1操作,意味着每次只能对某类临界资源进行一个单位的申请或释放。当一次需要N个单位时,便要进行N次wait操作,这显然是低效的,甚至会增加死锁的概率。此外,在有些情况下,为确保系统的安全性,当所申请的资源数量低于某一下限值时,还必须进行管制,不予以分配。因此,当进程申请某类临界资源时,在每次分配前,都必须测试资源数量,判断是否大于可分配的下限值,决定是否予以分配 + * 操作 + * Swait(S1,t1,d1…Sn,tn,dn) + * Ssignal(S1,d1…Sn,dn) + * 特殊情况 + * 经典进程的同步问题 + * 生产者–消费者问题 + * 哲学家进餐问题 + * 读者–写者问题 +### 进程通信 +* 进程通信是指进程之间的信息交换,又称低级进程通信 +* 进程通信的类型 + * 共享存储器系统 + * 基于共享数据结构的通信方式 + * 生产者和消费者 + * 基于共享存储区的通信方式 + * 高级通信 + * 管道通信系统(pipe) + * 高级通信 + * 消息传递系统 + * 高级通信 + * 方式分类 + * 直接通信 + * 间接通信 + * 客服机–服务器系统 +* 消息传递通信的实现方式 + * 直接消息传递系统 + * 信箱通信 +### 线程的基本概念 +* 线程的引入 + * 线程的引入正是为了简化线程间的通信,以小的开销来提高进程内的并发程度 + * 多线程并发的不足 + * 进程的两个基本属性 + * 一个拥有资源的独立单位,可独立分配系统资源 + * 一个可独立调度和分派的基本单位,PCB + * 程序并发执行所需付出的时空开销 + * 创建进程 + * 撤销进程 + * 进程切换 + * 进程间通信效率低 + * 将分配资源和调度两个属性分开 + * 线程——作为调度和分派的基本单位 + * 进程是系统资源分配的单位,线程是处理器调度的单位 + * 线程表示进程的一个控制点,可以执行一系列的指令。通常,和应用程序的一个函数相对应 + * 进程分解为线程还可以有效利用多处理器和多核计算机 +* 线程与进程的比较 + * 不同点 + * 调度的基本单位 + * 并发性 + * 相似点 + * 状态:运行、阻塞、就绪 + * 线程具有一定的生命期 + * 进程可创建线程,一个线程可创建另一个子线程 + * 多个线程并发执行时仍然存在互斥与同步 +* 线程的实现 + * 线程的实现方式 + * 内核支持线程KST + * 用户级线程ULT + * 组合方式 + * 多线程OS中的进程属性 + * 进程是一个可拥有资源的基本单位 + * 多个线程可并发执行 + * 进程已不是可执行的实体 + * 线程的状态和线程控制块 + * 线程运行的三个状态 + * 执行状态 + * 就绪状态 + * 阻塞状态 + * 线程控制块TCB +## 第三章:处理机调度与死锁 +### 处理机调度算法的目标 +* 处理机调度算法的共同目标 + * 资源利用率:CPU的利用率=CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间) + * 公平性 + * 平衡性 + * 策略强制执行 +* 批处理系统的目标 + * 平均周转时间短 + * 系统吞吐量高 + * 处理机利用率高 +* 分时系统的目标 + * 响应时间快 + * 均衡性 +* 实时系统目标 + * 截止时间的保证 + * 可预测性 +* 处理机调度的层次 + * 高级调度(作业调度) + * 分时系统无需作业调度,因为需要交互 + * 批处理系统需要作业调度 + * 中级调度(和挂起有关) + * 低级调度(进程调度) + * 进程调度是最基本的调度,任何操作系统都有进程调度。 + * 低级调度的三个基本机制 + * 排队器 + * 分派器 + * 上下文切换 + * 进程调度方式 + * 非抢占方式 + * 抢占方式 + * 优先权原则 + * 短进程优先原则 + * 时间片原则 + * 进程调度的任务 + * 保存处理机的现场信息 + * 按某种算法选取进程 + * 把处理器分配给进程 + * 进程调度的算法 + * 优先级调度算法 + * 优先级调度算法的类型 + * 非抢占式优先级调度算法 + * 等当前进程执行完以后,再执行另一个优先权最高的进程 + * 这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。 + * 抢占式优先级调度算法 + * 不等当前进程结束,直接抢处理机 + * 常用于要求比较严格的实时系统中, 以及对性能要求较高的批处理和分时系统中。 + * 优先级的类型 + * 静态优先级 + * 优先权是在创建进程时确定的,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0~7或0~255中的某一整数, 又把该整数称为优先数。 + * 可以参考BIOS系统中设置boot的优先级 + * 动态优先级 + * 在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。 + * 轮转调度算法 + * 基本原理:在轮转(RR)法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间间隔(如30ms)即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行 + * 进程切换时机 + * 时间片未用完,进程完成 + * 时间片到,进程未完成 + * 时间片大小的确定 + * 太小利于短作业,增加系统切换开销 + * 太长就退化为FCFS算法 + * 一般选择: q略大于一次交互所需要的时间,使大多数进程在一个时间片内完成 + * 一般来说,平均周转时间将比SJF长,但是有较好的响应时间 + * 多队列调度算法 + * 多级反馈队列调度算法 + * 调度机制 + * 设置多个就绪队列 + * 每个队列都采用FCFS算法 + * 按照队列优先级调度,在第n队列中采取按时间片轮转的方式运行 + * 调度算法的性能 + * 对于终端型用户,由于作业小,感觉满意 + * 对于短批处理作业用户,周转时间也较小 + * 长批处理作业用户,也能够得到执行 + * 基于公平原则的调度算法 + * 保证调度算法 + * 公平分享调度算法 +### 作业与作业调度 +* 作业 + * 作业不仅包含程序和数据,还配有一份作业说明书,系统根据说明书对程序的运行进行控制。批处理系统是以作业为单位从外存掉入内存的。 +* 作业控制块JCB + * 为每个作业设置一个JCB,保存了对作业管理调度的全部信息。是作业存在的标志。 +* 作业步 + * 作业步,每个作业都必须经过若干相对独立,有相互关联的顺序步骤才能得到结果。每一个步骤就是一个作业步。 +* 作业运行的三个阶段 + * 收容阶段 + * 运行阶段 + * 完成阶段 +* 作业运行的三个状态 + * 后备状态 + * 运行状态 + * 完成状态 +* 作业调度的主要任务 + * 接纳多少个作业 + * 接纳哪些作业 +* 先来先服务(first–come first–served,FCFS)调度算法 + * 比较有利于长作业,而不利于短作业。 + * 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。 +* 短作业优先(short job first,SJF)的调度算法 + * 优点 + * 比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间; + * 提高系统的吞吐量; + * 缺点 + * 必须预知作业的运行时间 + * 对长作业非常不利,长作业的周转时间会明显地增长 + * 在采用SJF算法时,人–机无法实现交互 + * 该调度算法完全未考虑作业的紧迫程度,故不能保证紧迫性作业能得到及时处理 +* 优先级调度算法(priority–scheduling algorithm,PSA) +* 高响应比优先调度算法(Highest Response Ratio Next,HRRN) + * 原理 + * 在每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP然后选择其值最大的作业投入运行 + * 优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间=1+等待时间/要求服务时间 + * 特点 + * 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而类似于SJF算法,有利于短作业 + * 当要求服务的时间相同时,作业的优先权又决定于其等待时间,因而该算法又类似于FCFS算法 + * 对于长时间的优先级,可以为随等待时间的增加而提高,当等待时间足够长时,也可获得处理机 +### 实时调度(HRT和SRT任务) +* 实现实时调度的基本条件 + * 提供必要信息 + * 就绪时间 + * 开始截止时间和完成截止时间 + * 处理时间 + * 资源要求 + * 优先级 + * 系统处理能力强 + * ∑(Ci/Pi)≤1 + * N个处理机:∑(Ci/Pi)≤N + * 采用抢占式调度机制 + * 具有快速切换机制 + * 对中断的快速响应能力 + * 快速的任务分派能力 +* 实时调度算法的分类 + * 非抢占式调度算法 + * 非抢占式轮转调度算法 + * 非抢占式优先调度算法 + * 抢占式调度算法 + * 基于时钟中断的抢占式优先级调度算法 + * 立即抢占的优先级调度算法 +* 最早截止时间优先EDF(Earliest Deadline First)算法 + * 根据任务的开始截至时间来确定任务的优先级 + * 截至时间越早,优先级越高 + * 非抢占式调度方式用于非周期实时任务 + * 抢占式调度方式用于周期实时任务 +* 最低松弛度优先LLF(Least Laxity First)算法 + * 类似EDF + * 算法根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高, 以使之优先执行。 + * 松弛度例子 + * 例如,一个任务在200ms时必须完成,而它本身所需的运行时间就有100ms,因此,调度程序必须在100 ms之前调度执行,该任务的紧急程度(松弛程度)为100 ms +* 优先级倒置(Priority inversion problem) + * 优先级倒置的形成 + * 高优先级进程被低优先级进程延迟或阻塞。 + * 优先级倒置的解决方法 + * 简单的:假如进程P3在进入临界区后P3所占用的处理机就不允许被抢占 + * 实用的:建立在动态优先级继承基础上的 +### 死锁概述 +* 资源问题 + * 可重用性资源 + * 计算机外设 + * 消耗性资源 + * 数据,消息 + * 可抢占性资源 + * 不引起死锁 + * CPU,内存 + * 不可抢占性资源 + * 光驱,打印机 +* 计算机系统中的死锁 + * 竞争不可抢占性资源引起死锁 + * 竞争可消耗资源引起死锁 + * 进程推进顺序不当引起死锁 +* 死锁的定义,必要条件和处理方法 + * 定义:如果一组进程中的每一个进程都在等待仅由该进程中的其他进程才能引发的事件,那么该组进程是死锁的 + * 产生死锁的必要条件 + * 互斥条件 + * 请求和保存条件 + * 不可抢占条件 + * 循环等待条件 + * 如果每个资源只有一个实例,则环路等待条件是死锁存在的充分必要条件 + * 处理死锁的方法 + * 预防死锁 + * 静态方法,在进程执行前采取的措施,通过设置某些限制条件,去破坏产生死锁的四个条件之一,防止发生死锁。 + * 预防死锁的策略 + * 破坏"请求和保存"条件 + * 第一种协议 + * 所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源 + * 优点:简单,易行,安全 + * 缺点 + * 资源被严重浪费,严重地恶化了资源的利用率 + * 使进程经常会发生饥饿现象 + * 第二种协议 + * 它允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的,且已用毕的全部资源,然后再请求新的所需资源 + * 破坏"不可抢占"条件 + * 当一个已经保存了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请 + * 破坏"循环等待"条件 + * 对系统所以资源类型进行线性排序,并赋予不同的序号 + * 例如令输入机的序号为1,打印机序号为2,磁盘机序号为3等。所有进程对资源的请求必须严格按资源序号递增的次序提出。 + * 避免死锁 + * 动态的方法,在进程执行过程中采取的措施,不需事先采取限制措施破坏产生死锁的必要条件,而是在进程申请资源时用某种方法去防止系统进入不安全状态,从而避免发生死锁。如银行家算法 + * 避免死锁的策略 + * 系统安全状态 + * 安全状态 + * 某时刻,对于并发执行的n个进程,若系统能够按照某种顺序如来为每个进程分配所需资源,直至最大需求,从而使每个进程都可顺利完成,则认为该时刻系统处于安全状态,这样的序列为安全序列 + * 安全状态之例 + * 由安全状态向不安全状态的转换 + * 利用银行家算法避免死锁 + * 含义:每一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待 + * 银行家算法中的数据结构 + * 可用资源向量 Available[m]:m为系统中资源种类数,Available[j]=k表示系统中第j类资源数为k个。 + * 最大需求矩阵 Max[n,m]:n为系统中进程数,Max[i,j]=k表示进程i对j类资源的最大需求数为中k。 + * 分配矩阵 Allocation[n,m]:它定义了系统中每一类资源当前已分配给每一进程资源数, Allocation[i,j] = k表示进程i已分得j类资源的数目为k个。 + * 需求矩阵 Need[n,m]:它表示每个进程尚需的各类资源数,Need[i,j]=k 表示进程i 还需要j类资源k个。Need[i,j]=Max[i,j] - Allocation[i,j] + * 银行家算法 + * 安全性算法 + * 银行家算法之例 + * 解题 + * 矩阵 + * 列表 + * 检测死锁 + * 死锁的检测与解除 + * 死锁的检测 + * 资源分配图 + * 简化步骤 + * 选择一个没有阻塞的进程p + * 将p移走,包括它的所有请求边和分配边 + * 重复步骤1,2,直至不能继续下去 + * 死锁定理 + * 若一系列简化以后不能使所有的进程节点都成为孤立节点 + * 检测时机 + * 当进程等待时检测死锁 (其缺点是系统的开销大) + * 定时检测 + * 系统资源利用率下降时检测死锁 + * 死锁检测中的数据结构 + * 死锁的解除 + * 抢占资源 + * 终止(或撤销)进程 + * 终止进程的方法 + * 终止所有死锁进程 + * 逐个终止进程 + * 代价最小 + * 进程的优先级的大小 + * 进程已执行了多少时间,还需时间 + * 进程在运行中已经使用资源的多少,还需多少资源 + * 进程的性质是交互式还是批处理的 + * 付出代价最小的死锁解除算法 + * 是使用一个有效的挂起和解除机构来挂起一些死锁的进程 + * 解除死锁 +## 第四章:存储器管理 +### 存储器的层次结构 +* 多层结构的存储系统 + * 存储器的多层结构 + * CPU寄存器 + * 主存 + * 辅存 + * 可执行存储器 + * 寄存器和主存的总称 + * 访问速度快,进程可以在很少的时钟周期内用一条load或store指令完成存取。 +* 主存储器与寄存器 +* 高速缓存和磁盘缓存 +### 程序的装入和链接 +* 步骤 + * 编译 + * 源程序 ->目标模块(Object modules)--------Compiler + * 由编译程序对用户源程序进行编译,形成若干个目标模块 + * 链接 + * 一组目标模块 ->装入模块 (Load Module)----------Linker + * 由链接程序将编译后形成的一组目标模板以及它们所需要的库函数链接在一起,形成一个完整的装入模块 + * 装入 + * 装入模块 ->内存 --------Loader + * 由装入程序将装入模块装入内存 +* 程序的装入 + * 绝对装入方式 + * 在编译时,如果知道程序将驻留在内存中指定的位置。编译程序将产生绝对地址的目标代码。 + * 可重定位装入方式 + * 在可执行文件中,列出各个需要重定位的地址单元和相对地址值。当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。 + * 优点:不需硬件支持,可以装入有限多道程序。 + * 缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动。不易实现共享。 + * 动态运行时的装入方式 + * 动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行 + * 优点: + * OS可以将一个程序分散存放于不连续的内存空间,可以移动程序,有利用实现共享。 + * 能够支持程序执行中产生的地址引用,如指针变量(而不仅是生成可执行文件时的地址引用)。 + * 缺点:需要硬件支持,OS实现较复杂。 + * 它是虚拟存储的基础。 +* 程序的链接 + * 静态链接方式(lib) + * 装入时动态链接 + * 运行时动态链接(dll) +### 连续分配存储管理方式 +* 连续分配 + * 单一连续分配(DOS) + * 固定分区分配(浪费很多空间) + * 动态分区分配 +* 地址映射和存储保护措施 + * 基址寄存器:程序的最小物理地址 + * 界限寄存器:程序的逻辑地址范围 + * 物理地址 = 逻辑地址 + 基址 +* 内碎片:占用分区之内未被利用的空间 +* 外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区) +* 把内存划分为若干个固定大小的连续分区。固定式分区又称为静态分区。 + * 分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。 + * 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。 + * 优点:无外碎片、易实现、开销小。 + * 缺点: + * 存在内碎片,造成浪费 + * 分区总数固定,限制了并发执行的程序数目。 + * 通用Os很少采用,部分控制系统中采用 +* 动态创建分区:指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,且分区大小正好等于该作业的大小。可变式分区中分区的大小和分区的个数都是可变的,而且是根据作业的大小和多少动态地划分。 + * 基于顺序搜索的动态分区分配算法 + * 首次适应算法(first fit,FF) + * 顺序找,找到一个满足的就分配,但是可能存在浪费 + * 这种方法目的在于减少查找时间。 + * 空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序 + * 循环首次适应算法(next fit,NF) + * 相对上面那种,不是顺序,类似哈希算法中左右交叉排序 + * 空闲分区分布得更均匀,查找开销小 + * 从上次找到的空闲区的下一个空闲区开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。 + * 最佳适应算法(best fit,BF) + * 找到最合适的,但是大区域的访问次数减少 + * 这种方法能使外碎片尽量小。 + * 空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。 + * 最坏适应算法(worst fit,WF) + * 相对于最好而言,找最大的区域下手,导致最大的区域可能很少,也造成许多碎片 + * 空闲分区按大小由大到小排序 + * 基于索引搜索的动态分区分配算法 + * 快速适应算法(quick fit) + * 伙伴系统(buddy system) + * 哈希算法 + * 动态可重定位分区分配 + * 紧凑 + * 动态重定位 + * 动态运行时装入,地址转化在指令执行时进行,需获得硬件地址变换机制的支持 + * 内存地址=相对地址+起始地址 + * 动态重定位分区分配算法 + * 1、在某个分区被释放后立即进行紧凑,系统总是只有一个连续的分区而无碎片,此法很花费机时。 + * 2、当“请求分配模块”找不到足够大的自由分区分给用户时再进行紧凑,这样紧缩的次数比上种方法少得多,但管理复杂。采用此法的动态重定位分区分配算法框图如下: + * 优点:没有内碎片。 + * 缺点:外碎片。 +### 对换(了解) +* 系统把所有的作业放在外存,每次只调用一个作业进入内存运行,当时间片用完时,将它调至外存后备队列上等待,在从后备队列调入另一个作业进入内存运行。 +### 基本分页存储管理方式 +* 分页存储管理的基本方式 + * 页面 + * 将一个进程的逻辑地址空间分成若干个大小相等的片 + * 页框(frame) + * 内存空间分成与页面相同大小的存储块 + * 由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片” + * 地址结构 + * 页号P+位移量W(0-31) + * 页表 + * 在分页系统中,允许将进程的各个页离散地存储在内存在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每一个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表 + * 页表的作用是实现从页面号到物理块号的地址映射 +* 地址变换机构 + * 基本的地址变换机构 + * 要访问两次内存 + * 页表大都驻留在内存中 + * 为了实现地址变换功能,在系统中设置页表寄存器(PTR),用来存放页表的始址和页表的长度。 + * 在进程未执行时,每个进程对应的页表的始址和长度存放在进程的PCB中,当该进程被调度时,就将它们装入页表寄存器。 + * 具有快表的地址变换机构 + * 提高了效率,此处会有计算题 + * 如果页表存放在内存中,则每次访问内存时,都要先访问内存中的页表,然后根据所形成的物理地址再访问内存。这样CPU存一个数据必须访问两次内存,从而使计算机的处理速度降低了1/2。 + * 为了提高地址变换的速度,在地址变换机构中增设了一个具有并行查询功能的特殊的高速缓冲存储器,称为“联想存储器”或“快表”,用以存放当前访问的那些页表项。 + * 地址变换过程为: + * 1、CPU给出有效地址 + * 2、地址变换机构自动地将页号送入高速缓存,确定所需要的页是否在快表中。 + * 3、若是,则直接读出该页所对应的物理块号,送入物理地址寄存器; + * 4、若快表中未找到对应的页表项,则需再访问内存中的页表 + * 5、找到后,把从页表中读出的页表项存入快表中的一个寄存器单元中,以取代一个旧的页表项。 +* 两级和多级页表 + * 主要是有的时候页表太多了,要化简 + * 格式:外层页号P1+外层页内地址P2+页内地址d + * 基本方法:将页表进行分页,每个页面的大小与内存物理块的大小相同,并为它们进行编号,可以离散地将各个页面分别存放在不同的物理块中。 +* 反置页表 + * 反置页表为每一个物理块(页框)设置一个页表项,并按物理块排序,其内容则是页号和其所属进程的标识。 +* 优点: + * 没有外碎片,每个内碎片不超过页大小。 + * 一个程序不必连续存放。 + * 便于改变程序占用空间的大小。即随着程序运行而动态生成的数据增多,地址空间可相应增长。 +* 缺点:程序全部装入内存。 +### 分段存储管理方式 +* 引入 + * 方便编程 + * 信息共享 + * 动态增长 + * 动态链接 +* 在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,各段长度是不等的。 +* 内存空间被动态的划分为若干个长度不相同的区域,称为物理段,每个物理段由起始地址和长度确定 +* 分段系统的基本原理 + * 分段 + * 格式:段号+段内地址 + * 段表 + * 段表实现了从逻辑段到物理内存区的映射。 + * 地址变换机构 +* 和分页的区别 + * 页是信息的物理单位 + * 页的大小固定且由系统固定 + * 分页的用户程序地址空间是一维的 + * 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。 + * 分页是系统管理的需要,分段是用户应用的需要。一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。 +* 信息共享 + * 这是分段最重要的优点 +* 段页式存储管理方式 + * 基本原理 + * 格式:段号(S)+段内页号(P)+页内地址(W) + * 地址变换过程 + * 需要三次访问过程 + * 在段页式系统中,为了获得一条指令或数据,需三次访问内存:第一次访问内存中的段表,从中取得页表始址;第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正根据所得的物理地址取出指令或数据。 +## 第五章:虚拟存储器 +### 常规存储管理方式的特征 +* 一次性 +* 驻留性 +### 局部性原理 +* 程序在执行时将呈现出局部性特征,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域 +* 时间局限性 + * 如果程序中的某条指令一旦执行, 则不久以后该指令可能再次执行;如果某数据被访问过, 则不久以后该数据可能再次被访问。产生时间局限性的典型原因,是由于在程序中存在着大量的循环操作 +* 空间局限性 + * 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。 +### 定义 +* 指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统 +### 优点 +* 大程序:可在较小的可用内存中执行较大的用户程序; +* 大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存(real memory) +* 并发:可在内存中容纳更多程序并发执行; +* 易于开发:不必影响编程时的程序结构 +* 以CPU时间和外存空间换取昂贵内存空间,这是操作系统中的资源转换技术 +### 特征 +* 离散性 + * 指在内存分配时采用离散的分配方式,它是虚拟存储器的实现的基础 +* 多次性 + * 指一个作业被分成多次调入内存运行,即在作业运行时没有必要将其全部装入,只须将当前要运行的那部分程序和数据装入内存即可。多次性是虚拟存储器最重要的特征 +* 对换性 + * 指允许在作业的运行过程中在内存和外存的对换区之间换进、换出。 +* 虚拟性 + * 指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。 +### 虚拟存储器的实现方式 +* 请求分页存储管理方式 + * 硬件 + * 请求页表机制 + * 格式:页号+物理块号+状态位P+访问字段A+修改位M+外存地址 + * 缺页中断机构 + * 地址变换机构(过程图很关键) + * 请求分页中的内存分配 + * 最小物理块数 + * 即能保证进程正常运行所需的最小物理块数 + * 内存分配策略 + * 固定分配局部置换(国王的大儿子) + * 可变分配全局置换(国王的二儿子) + * 可变分配局部置换(国王的小儿子) + * 物理块分配算法 + * 平均分配算法 + * 按比例分配算法 + * 考虑优先权的分配算法 + * 页面调入策略 + * 系统应在何时调入所需页面 + * 预调页策略(不能实现) + * 请求调页策略(需要才给) + * 系统应该从何处调入这些页面 + * 对换区 + * 文件区 + * 页面调入过程 + * 缺页率(出计算题) +* 请求分段系统 + * 硬件 + * 请求分段的段表机构 + * 缺段中断机构 + * 地址变换机构 +### 页面置换算法 +* 抖动的概念 + * 即刚被换出的页很快又要被访问,需要将它重新调入,此时又需要再选一页调出 +* 最佳置换算法(需要预知后面进程,所以不能实现) +* 先进先出页面置换算法(FIFO) + * 选择在内存中驻留时间最久的页面予以淘汰 +* 最近最久未使用置换算法(LRU)Recently + * 寄存器支持 + * 特殊的栈结构 +* 最少使用置换算法(LFU)Frequently +* clock置换算法(对访问位A的判断) + * 改进型——增加对修改位M思维判断 +* 页面缓冲算法(PBA,page buffering algorithm) + * 空闲页面链表 + * 修改页面链表 +## 第六章:输入输出系统 +### I/O系统的功能,模型和接口 +* I/O系统管理的对象是I/O设备和相应的设备控制器。 +* I/O系统的基本功能 + * 隐藏物理设备的细节 + * 与设备的无关性 + * 提高处理机和I/O设备的利用率 + * 对I/O设备进行控制 + * 确保对设备的正确共享 + * 错误处理 +* I/O软件的层次结构 + * 用户层I/O软件 + * 设备独立性软件 + * 设备驱动程序(厂家开发) + * 中断处理程序 + * 硬件 +* I/O系统的分层 + * 中断处理程序 + * 设备驱动程序 + * 设备独立性软件 +* I/O系统接口 + * 块设备接口 + * 指以数据块为单位来组织和传送数据信息的设备 + * 典型的块设备是磁盘、光盘 + * 块设备的基本特征 + * ①传输速率较高,通常每秒钟为几兆位; + * ②它是可寻址的,即可随机地读/写任意一块; + * ③磁盘设备的I/O采用DMA方式。 + * 流设备接口 + * 又称字符设备指以单个字符为单位来传送数据信息的设备 + * 这类设备一般用于数据的输入和输出,有交互式终端、打印机 + * 字符设备的基本特征 + * ①传输速率较低; + * ②不可寻址,即不能指定输入时的源地址或输出时的目标地址; + * ③字符设备的I/O常采用中断驱动方式。 + * 网络通信接口 + * 提供网络接入功能,使计算机能通过网络与其他计算机进行通信或上网浏览。 +### I/O设备和设备控制器 +* 分类 + * 使用特性分 + * 存储设备 + * I/O设备 + * 传输速率分 + * 低速设备(几字节——几百字节) + * 典型的设备有键盘、鼠标、语音的输入 + * 中速设备(数千——数万字节) + * 典型的设备有行式打印机、激光打印机 + * 高速设备(数十万——千兆字节) + * 典型的设备有磁带机、磁盘机、光盘机 +* 设备并不是直接与CPU进行通信,而是与设备控制器通信。在设备与设备控制器之间应该有一个接口。 + * 数据信号:控制器 ← 设备 ← 控制器 + * 传送数据信号,输入、输出bit + * 控制信号: 控制器 → 设备 + * 执行读、写操作的信号 + * 状态信号:设备当前使用状态 +* 设备控制器 + * 主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换 + * 基本功能 + * 接收和识别命令 + * 控制寄存器、命令译码器 + * 数据交换 + * 实现CPU与控制器,控制器与设备间的数据交换 + * 标识和报告设备的状态 + * 地址识别 + * 配置地址译码器,识别不同的设备 + * 数据缓冲区 + * 差错控制 + * 设备控制器的组成 + * 设备控制器与处理机(CPU)的接口 + * 实现CPU与设备控制器之间的通信 + * 设备控制器与设备的接口 + * 控制器可连接多个设备 + * I/O逻辑 + * 实现对设备的控制 + * CPU利用该逻辑向控制器发送I/O命令 + * 命令、地址译码 +* 内存映像I/O + * 驱动程序将抽象I/O命令转换出的一系列具体的命令,参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对I/O设备的操作 +* I/O通道 + * 目的:建立独立的I/O操作(组织, 管理和结束),使由CPU处理的I/O工作转由通道完成(解放CPU,实现并行) + + * 什么是I/O通道? + * 是一种特殊的处理机,具有通过执行通道程序完成I/O操作的指令 + * 特点:指令单一(局限于与I/O操作相关的指令),与CPU共享内存 + * 基本过程: + * CPU向通道发出I/O指令->通道接收指令->从内存取出通道程序处理I/O->向CPU发出中断 + * 通道类型 + * 字节多路通道 + * 低中速连接子通道时间片轮转方式共享主通道 + * 字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。 + * 数组选择通道 + * 这种通道可以连接多台高速设备,但只含有一个分配型子通道,在一段时间内只能执行一道通道程序, 控制一台设备进行数据传送, 直至该设备传送完毕释放该通道。这种通道的利用率很低。 + * 数组多路通道 + * 含有多个非分配型子通道,前两种通道的组合,通道利用率较好 + * 瓶颈问题 + * 原因;通道不足 + * 解决办法:增加设备到主机间的通路,而不增加通道(结果类似RS触发器) +### 中断机构和中断处理程序 +* 中断 + * 分类 + * 中断(外部触发) + * 对外部I/O设备发出的中断信号的响应 + * 陷入(内部原因:除0) + * 由CPU内部事件引起的中断 + * 中断向量表(类比51单片机) + * 中断程序的入口地址表 + * 中断优先级 + * 对紧急程度不同的中断处理方式 + * 对多中断源的处理方式 + * 屏蔽中断 + * 嵌套中断 +* 中断处理程序 + * 测定是否有未响应的中断信号 + * 保护被中断进程的CPU环境 + * 转入相应的设备处理程序 + * 中断处理 + * 恢复CPU 的现场并退出中断 +### 设备驱动程序 +* 是I/O进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称为设备驱动进程 +* 主要任务是接受来自它上一层的与设备无关软件的抽象请求,并执行这个请求。 +* 功能 + * 1) 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求。例如,将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。 + * 2) 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。 + * 3) 发出I/O命令,如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。 + * 4) 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。 + * 5) 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。 +* 设备驱动程序的处理过程 + * 将用户和上层软件对设备控制的抽象要求转换成对设备的具体要求,如对抽象要求的盘块号转换为磁盘的盘面、磁道及扇区。 + * 检查I/O请求的合理性。 + * 读出和检查设备的状态,确保设备处于就绪态。 + * 传送必要的参数,如传送的字节数,数据在主存的首址等。 + * 工作方式的设置。 + * 启动I/O设备,并检查启动是否成功,如成功则将控制返回给I/O控制系统,在I/O设备忙于传送数据时,该用户进程把自己阻塞,直至中断到来才将它唤醒,而CPU可干别的事。 +* 对I/O设备的控制方式 + * I/O控制的宗旨 + * 减少CPU对I/O控制的干预 + * 充分利用CPU完成数据处理工作 + * I/O 控制方式 + * 轮询的可编程I/O方式 + * 中断驱动I/O方式 + * DMA控制方式 + * I/O通道控制方式 +* DMA控制器组成 + * 主机与DMA控制器的接口 + * DMA控制器与块设备的接口 + * I/O控制逻辑 +### 与设备无关的I/O软件 +* 基本概念 + * 含义: 应用程序独立于具体使用的物理设备。 + * 驱动程序是一个与硬件(或设备)紧密相关的软件。为实现设备独立性,须在驱动程序上设置一层软件,称为设备独立性软件。 + * 设备独立性(Device Independence)的优点 + * 以物理设备名使用设备 + * 引入了逻辑设备名 + * 逻辑设备名称到物理设备名称的转换(易于实现I/O重定向) +* 与设备无关的软件 + * 设备驱动程序的统一接口 + * 缓存管理 + * 差错控制 + * 对独立设备的分配与回收 + * 独立于设备的逻辑数据块 +* 设备分配中的数据结构 + * 设备控制表DCT + * 控制器控制表COCT + * 通道控制表CHCT + * 显然,在有通道的系统中,一个进程只有获得了通道,控制器和所需设备三者之后,才具备了进行I/O操作的物理条件 + * 系统设备表SDT + * 逻辑设备表LUT + * 分配的流程,从资源多的到资源紧张的:LUT->SDT->DCT->COCT->CHCT + * 在申请设备的过程中,根据用户请求的I/O设备的逻辑名,查找逻辑设备和物理设备的映射表;以物理设备为索引,查找SDT,找到该设备所连接的DCT;继续查找与该设备连接的COCT和CHCT,就找到了一条通路。 +### 用户层的I/O软件 +* 系统调用与库函数 + * OS向用户提供的所有功能,用户进程都必须通过系统调用来获取 + * 在C语言以及UNIX系统中,系统调用(如read)与各系统调用所使用的库函数(如read)之间几乎是一一对应的。而微软的叫Win32API +* 假脱机系统(spooling) + * spooling技术是对脱机输入/输出系统的模拟 + * 主要组成 + * 输入/输出井 + * 输入/输出缓冲区 + * 输入/输出进程 + * 井管理程序 + * 特点(体现操作系统的虚拟性) + * 提高了I/O的速度 + * 对数据所进行的I/O操作,已从对低速设备演变为对输入井或输出井中的数据存取。 + * 将独占设备改造为共享设备 + * 实际分给用户进程的不是打印设备,而是共享输出井中的存储区域 + * 实现了虚拟设备功能 + * 将独占设备变成多台独占的虚拟设备。 +### 缓冲区管理 +* 缓冲的引入(原因) + * 缓和CPU与I/O设备间速度不匹配的矛盾 + * 减少对CPU的中断频率,放宽对CPU中断响应时间的限制 + * 提高CPU和I/O设备之间的并行性 + * 解决数据粒度不匹配的问题 +* 单缓冲区 + * 即在CPU计算的时候,将数据数据输入到缓冲区(大小取决与T和C的大小) +* 双缓冲区 + * 即允许CPU连续工作(T不断) +* 环形缓冲区(专为生产者和消费者打造) + * 组成 + * 多个缓冲区 + * 多个指针 + * 使用 + * Getbuf过程 + * Releasebuf过程 + * 同步问题 +* 缓冲池(理解为更大的缓冲区) + * 组成 + * 空白缓冲队列(emq) + * 由空缓冲区链接而成F(emq),L(emq)分别指向该队列首尾缓冲区 + * 输入队列(inq) + * 由装满输入数据的缓冲区链接而成F(inq),L(inq)分别指向该队列首尾缓冲区 + * 输出队列(outq) + * 由装满输出数据的缓冲区链接而成F(outq), L(outq)分别指向该队列首尾缓冲 + * Getbuf和Putbuf过程 + * 收容:缓冲池接收外界数据 + * 提取:外界从缓冲池获得数据 + * 缓冲区工作方式(从缓冲区的角度来看) + * 收容输入 + * 提取输入 + * 收容输出 + * 提取输出 +### 磁盘存储器的性能和调度 +* 数据的组织和格式 +* 磁盘的类型 + * 固定头磁盘(贵) + * 移动头磁盘 +* 磁盘访问的时间(关键) + * 寻道时间Ts=m*n+s + * 旋转延迟时间Tr + * 传输时间Tt=b/rN + * 总时间Ta=Ts+1/2r+b/rN +* 磁盘的调度算法(掌握图表) + * 先来先服务(FCFS) + * 优点:公平,简单 + * 缺点:可能导致某些进程的请求长期得不到满足 + * 最短寻道时间优先(SSTF) + * 说明:要求访问的磁道和当前磁头所在的磁道距离最近,以使每次的寻道时间最短 + * 扫描算法(SCAN) + * 扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁道当前的移动方向 + * 联想电梯的运行 + * 可防止低优先级进程出现“饥饿”的现象 + * 循环扫描算法(CSCAN) + * 算法规定磁头单向移动,例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描 + * NStepScan算法 + * N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次这些子队列。 + * FSCAN算法 + * 是Nstepscan算法的简化,将磁盘请求队列分成两个子队列 +## 第七章:文件管理 +### 数据项 +* 基本数据项 +* 组合数据项 +### 记录 +* 记录是一组相关数据项的集合,用于描述一个对象在某个方面的属性 +### 文件 +* 文件类型 +* 文件长度 +* 文件的物理位置 +* 文件的建立时间 +### 文件操作 +* 创建文件 +* 删除文件 +* 读文件 +* 写文件 +* 设置文件读写的位置 +### 文件的逻辑结构 +* 顺序文件 +* 记录寻址 +* 索引文件 +* 索引顺序文件 +* 直接文件和哈希文件 +### 文件目录 +* 文件控制块(FCB) + * 文件名+inode(属性) +* 简单的文件目录 + * 单级文件目录 + * 查找慢 + * 不允许重名 + * 不便于实现文件共享 + * 两级文件目录 + * 提高检索速度,从M*N到M+N +* 树形结构目录 + * 路径名 + * “..”是父目录 + * “/”是根目录 + * 区别绝对路径和相对路径(../.../.../1/2/3/) +### 文件共享 +* 有向无循环图(DAG) +* 利用符号链接实现文件共享 + * 实际上就是“快捷方式” +### 文件保护 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/操作系统/计算机操作系统.png b/操作系统/计算机操作系统.png new file mode 100644 index 0000000..bbb53cf Binary files /dev/null and b/操作系统/计算机操作系统.png differ diff --git a/操作系统/计算机操作系统.xmind b/操作系统/计算机操作系统.xmind new file mode 100644 index 0000000..b973c5d Binary files /dev/null and b/操作系统/计算机操作系统.xmind differ diff --git a/数据结构/数据结构.md b/数据结构/数据结构.md new file mode 100644 index 0000000..57c20ba --- /dev/null +++ b/数据结构/数据结构.md @@ -0,0 +1,764 @@ +# 数据结构 +## 第一章:数据结构的 +基本概念 +### 定义 +* 在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。 +### 逻辑结构 +* 逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机的 +* 数据的逻辑结构分为线性结构和非线性结构 + * 集合 结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。 类似于数学上的集合 + * 线性结构 结构中的数据元素之间只存在一对一的关系。比如排队 + * 树形结构 结构中的数据元素之间存在一对多的关系。比如家族族谱 + * 图状结构或网状结构 结构中的数据元素之间存在多对多的关系。 比如地图 +### 物理结构 +* 存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。它包括数据元素的表示和关系的表示。数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。数据的存储结构主要有:顺序存储、链式存储、索引存储和散列存储。 + * 顺序存储:存储的物理位置相邻。(p.s. 物理位置即信息在计算机中的位置。) + * 链接存储:存储的物理位置未必相邻,通过 记录相邻元素的物理位置来找到相邻元素。 + * 索引存储:类似于目录,以后可以联系操作系统的文件系统章节来理解。 + * 散列存储:通过关键字直接计算出元素的物理地址(以后详解)。 +### 算法的五个特征 +* 1,有穷性:有限步之后结束 +* 2,确定性:不存在二义性,即没有歧义 +* 3,可行性:比如受限于计算机的计算能力,有些算法虽然理论上可行,但实际上无法完成。 +* 4,输入:能被计算机处理的各种类型数据,如数字,音频,图像等等。 +* 5,输出:一至多个程序输出结果。 +### 算法的复杂度 +* 时间复杂度: + * • 它用来衡量算法随着问题规模增大,算法执行时间增长的快慢; + * • 是问题规模的函数:T(n)是时间规模函数 时间复杂度主要分析T(n)的数量级 + * • T(n)=O(f(n)) f(n)是算法中基本运算的频度 一般我们考虑最坏情况下的时间复杂度 +* 空间复杂度: + * • 它用来衡量算法随着问题规模增大,算法所需空间的快慢; + * • 是问题规模的函数:S(n)=O(g(n)) ;算法所需空间的增长率和g(n)的增长率相同。 +### 概要: 复杂度计算为重点 +* 常用的时间复杂度大小关系: +* 复杂度如何计算 + * 时间复杂度计算(单个循环体) + * 直接关注循环体的执行次数,设为k + * 时间复杂度计算(多个循环体) + * 两个运算规则:乘法规则,加法规则。 +## 第二章:线性表 +### 线性表的逻辑结构 +* 定义:线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。其中n为表长。当n=0时 线性表是一个空表 +* 特点:线性表中第一个元素称为表头元素;最后一个元素称为表尾元素。 +除第一个元素外,每个元素有且仅有一个直接前驱。 +除最后一个元素外,每个元素有且仅有一个直接后继。 +### 线性表的顺序存储结构 +* 线性表的顺序存储又称为顺序表。 +它是用一组地址连续的存储单元(比如C语言里面的数组),依次存储线性表中的数据元素,从而使得逻 +辑上相邻的两个元素在物理位置上也相邻。 +* 建立顺序表的三个属性: +1.存储空间的起始位置(数组名data) +2.顺序表最大存储容量(MaxSize) +3.顺序表当前的长度(length) +* 其实数组还可以动态分配空间,存储数组的空间是在程序执行过程中通过动态存储分配语句分配 +* 总结: + * 1.顺序表最主要的特点是随机访问(C语言中基于数组),即通过首地址和元素序号可以在O(1)的时间内找到指定的元素。 + * 2.顺序表的存储密度高,每个结点只存储数据元素。无需给表中元素花费空间建立它们之间的逻辑关系(因为物理位置相邻特性决定) + * 3.顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除操作需要移动大量元素。 +### 顺序表的操作 +* 1.插入 + * 算法思路: + * 1.判断i的值是否正确 + * 2.判断表长是否超过数组长度 + * 3.从后向前到第i个位置,分别将这些元素都向后移动一位 + * 4.将该元素插入位置i 并修改表长 + * 代码 + * 分析: + * 最好情况:在表尾插入(即i=n+1),元素后移语句将不执行,时间复杂度为O(1)。 + * 最坏情况:在表头插入(即i=1),元素后移语句将执行 +n次,时间复杂度为O(n)。 + * 平均情况:假设pi(pi=1/(n+1) )是在第i个位置上插入 +一个结点的概率,则在长度为n的线性表中插入一个结 +点时所需移动结点的平均次数为 +* 2.删除 + * 算法思路: + * 1.判断i的值是否正确 + * 2.取删除的元素 + * 3.将被删元素后面的所有元素都依次向前移动一位 + * 4.修改表长 + * 代码 + * 分析 + * 最好情况:删除表尾元素(即i=n),无须移动元素,时间复杂度为O(1)。 + * 最坏情况:删除表头元素(即i=1),需要移动除第一个元素外的所有元素,时间复杂度为O(n)。 + * 平均情况:假设pi(pi=1/n)是删除第i个位置上结点的概率,则在长度为n的线性表中删除一个结点时所需移动结点的平均次数为 +### 线性表的链式存储结构 +* 线性表的链式存储是指通过一组任意的存储单元来存储线性表中的数据元素。 +* 头结点和头指针的区别? + * 不管带不带头结点,头指针始终指向链表的第一个结点,而头结点是带头结点链表中的第一个结点,结点内通常不存储信息 +* 为什么要设置头结点? + * 1.处理操作起来方便 例如:对在第一元素结点前插入结点和删除第一结点起操作与其它结点的操作就统一了 + * 2.无论链表是否为空,其头指针是指向头结点的非空指针,因此空表和非空表的处理也就统一了。 +### 单链表的操作 +* 1.头插法建立单链表: + * 建立新的结点分配内存空间,将新结点插入到当前链表的表头 + * 代码 +* 2.尾插法建立单链表: + * 建立新的结点分配内存空间,将新结点插入到当前链表的表尾 + * 代码 +* 3.按序号查找结点 + * 在单链表中从第一个结点出发,顺指针next域逐个往下搜索,直到找到第i个结点为止,否则返回最后一个结点指针域NULL。 + * 代码 +* 4.按值查找结点 + * 从单链表第一个结点开始,由前往后依次比较表中各结点数据域的值,若某结点数据域的值等于给定值e,则返回该结点的指针;若整个单链表中没有这样的结点,则返回NULL。 + * 代码 +* 5.插入 + * 插入操作是将值为x的新结点插入到单链表的第i个位置上。先检查插入位置的合法性,然后找到待插入位置的前驱结点,即第i−1个结点,再在其后插入新结点。 + * 算法思路: +1.取指向插入位置的前驱结点的指针 +① p=GetElem(L,i-1); +2.令新结点*s的指针域指向*p的后继结点 +② s->next=p->next; +3.令结点*p的指针域指向新插入的结点*s +③ p->next=s; +* 6.删除 + * 删除操作是将单链表的第i个结点删除。先检查删除位置的合法性,然后查找表中第i−1个结点,即被删结点的前驱结点,再将其删除。 + * 算法思路: +1.取指向删除位置的前驱结点的指针 p=GetElem(L,i-1); +2.取指向删除位置的指针 q=p->next; +3.p指向结点的后继指向被删除结点的后继 p->next=q->next +4.释放删除结点 free(q); +### 双链表 +* 定义 +* 1.插入:(方法不唯一) +① s->next=p->next; +② p->next->prior=s; +③ s->prior=p; +④ p->next=s; +* 2.删除: +① p->next=q->next; +② q->next->prior=p; +③ free(q); + +### 循环链表&&静态链表 +* 循环单链表:循环单链表和单链表的区别在于,表中最后一个结点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环 +* 循环双链表:类比循环单链表,循环双链表链表区别于双链表就是首尾结点构成环 + * 当循环双链表为空表时,其头结点的prior域和next域都等于Head。 +* 静态链表:静态链表是用数组来描述线性表的链式存储结构。 + * 数组第一个元素不存储数据,它的指针域存储第一个元素所在的数组下标。链表最后一个元素的指针域值为-1。 + * 例子 +## 第三章:栈和队列 +### 栈 +* 栈(Stack):只允许在一端进行插入或删除操作的线性表。 +* 栈顶(Top):线性表允许进行插入和删除的那一端。 +* 栈底(Bottom):固定的,不允许进行插入和删除的另一端 +* 特点: +1.栈是受限的线性表,所以自然具有线性关 +系。 +2.栈中元素后进去的必然先出来,即后进先出 +LIFO(Last In First Out) + * 栈中元素后进 +去的必然先出 +来,即后进先 +出LIFO(Last In +First Out) +* 顺序栈 + * 栈是线性表的特例,那栈的顺序存储也是线性表顺序存储的简化。栈的顺序存储结构也叫作顺序栈。 + * 顺序栈的操作 + * 1.判空: + * 2.进栈: + * 3.出栈: + * 4.读取栈顶元素: +* 共享栈 + * 顺序栈的存储空间大小需要事先开辟好,很多时候对每个栈各自单独开辟存储空间的利用率不如将各个栈的存储空间共享 + * 示意图 + * 共享栈的结构 + * 共享栈的操作:(进栈) +* 链式栈 + * 栈是线性表的特例,线性表的存储结构还有链式存储结构,所以也可以用链表的方式来实现栈。栈的链式存储结构也叫作链栈。 + * 特点 +1.链栈一般不存在栈满的情况。 +2.空栈的判定条件通常定为top==NULL; + * 结构 + * 链式栈的操作 + * 1.进栈 + * 2.出栈 +### 队列 +* 队列是只允许在一端进行插入,而在另一端进行删除的线性表 +* 队头(Front):允许删除的一端,又称为队首。 +* 队尾(Rear): 允许插入的一端。 +* 先进入队列的元素必然先离开队列,即先进先出(First In First Out)简称FIFO +* 顺序队列 + * 用数组来实现队列,可以将队首放在数组下标为0的位置。 +* 循环队列 + * 把数组“掰弯”,形成一个环。Rear指针到了下标为4的位置还能继续指回到下标为0的地方。这样首尾相连的顺序存储的队列就叫循环队列 + * 入队:rear=(rear+1)%MaxSize + * 出队:front=(front+1)%MaxSize + * 循环队列的操作 + * 1.入队: + * 2.出队: + * 概要: 那如何分辨队列是空还是满呢? + * 方法一:设置标志位flag,当flag=0且rear等于front时为队列空,当flag=1且rear等于front时为队列满。 + * 方法二:我们把front=rear仅作为队空的判定条件。当队列满的时候,令数组中仍然保留一个空余单元。我们认为这种情况就是队列满了。 +* 链式队列 + * 队列的链式存储结构,其实就是线性表的单链表,只不过需要加点限制,只能表尾插入元素,表头删除元素。 + * 为了方便操作,我们分别设置队头指针和队尾指针,队头指针指向头结点,队尾指针指向尾结点。 + * 链式队列的操作 + * 1.入队:我们知道队列只能从队尾插入元素,队头删除元素。于是入队就是在队尾指针进行插入结点操作。链队的插入操作和单链表的插入操作是一致的。 + + * 2.出队:出队就是头结点的后继结点出队,然后将头结点的后继改为它后面的结点。 +* 双端队列 + * 双端队列是指允许两端都可以进行入队和出队操作的队列 +### 栈的应用 +* 1、括号匹配:假设有两种括号,一种圆的(),一种方的[],嵌套的顺序是任意的。 + * 算法思想:若是左括号,入栈;若是右括号,出栈一个左括号判断是否与之匹配;检验到字符串尾,还要检查栈是否为空。只有栈空,整个字符串才是括号匹配的。 + + * 代码 +* 2、表达式求值: + * + * 规则:从左到右扫描表达式的每个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶的两个数字出栈然后跟这个符号进行运算,最后将运算结果进栈,直到最终获得结果。 +* 3、递归: + * 要理解递归,你要先理解递归,直到你能理解递归。 +如果在一个函数、过程或数据结构的定义中又应用了它自身,那么这个函数、过程或数据结构称为是递归定义的,简称递归。递归最重要的是递归式和递归边界。 + * 1.阶乘 + * 2.斐波那契数列 +* 概要: 如何将中缀表达式转换成后缀表达式? + * 1.按运算符优先级对所有运算符和它的运算数加括号。(原本的括号不用加) + * 2.把运算符移到对应的括号后。 + * 3.去掉括号。 + * 例子 +## 第四章:树 +### 树的基本概念 +* 树是递归定义的结构 +* 结点 + * 根节点:树只有一个根结点 + * 结点的度:结点拥有的子树的数量 + * 度为0:叶子结点或者终端结点 + * 度不为0:分支结点或者非终端结点 + * 分支结点除去根结点也称为内部结点 +* 树的度:树中所有结点的度数的最大值 +* 结点关系 + * 祖先结点 + * 根结点到该结点的唯一路径的任意结点 + * 子孙结点 + * 双亲结点 + * 根结点到该结点的唯一路径上最接近该结点的结点 + * 孩子结点 + * 兄弟结点 + * 有相同双亲结点的结点 +* 层次,高度,深度,树的高度 + * 层次:根为第一层,它的孩子为第二层,以此类推 + * 结点的深度:根结点开始自顶向下累加 + * 结点的高度:叶节点开始自底向上累加 + * 树的高度(深度):树中结点的最大层数 +* 树的性质 + * 1.树中的结点数等于所有结点的度数加1。 + * 证明:不难想象,除根结点以外,每个结点有且仅有一个指向它的前驱结点。也就是说每个结点和指向它的分支一一对应。 +假设树中一共有b个分支,那么除了根结点,整个树就包含有b个结点,所以整个树的结点数就是这b个结点加上根结点,设为n,则n=b+1。而分支数b也就是所有结点的度数,证毕。 + * 2.度为m的树中第i层上至多有m^i−1个结点(i≥1)。 + * 证明:(数学归纳法) +首先考虑i=1的情况:第一层只有根结点,即一个结点,i=1带入式子满足。 +假设第i-1层满足这个性质,第i-1层最多有m i-2个结点。 +……… .......... +i-1层 +……… +又因为树的度为m,所以对于第i-1层的每个结点,最多 +有m个孩子结点。所以第i层的结点数最多是i-1层的m +倍,所以第i层上最多有m ^(i-1)个结点。 + * 3.高度为h的m叉树至多有(m^h-1)/(m-1)个结点 + * 4.具有n个结点的m叉树的最小高度为logm(n(m-1)+1) +### 树的存储结构 +* 顺序存储结构 + * 双亲表示法:用一组连续的存储空间存储树的结点,同时在每个结点中,用一个变量存储该结点的双亲结点在数组中的位置。 +* 链式存储结构 + * 孩子表示法:把每个结点的孩子结点排列起来存储成一个单链表。所以n个结点就有n个链表; +如果是叶子结点,那这个结点的孩子单链表就是空的; +然后n个单链表的的头指针又存储在一个顺序表(数组)中。 + + * 孩子兄弟表示法:顾名思义就是要存储孩子和孩子结点的兄弟,具体来说,就是设置两个指针,分别指向该结 +点的第一个孩子结点和这个孩子结点的右兄弟结点。 +### 二叉树 +* 定义 + * 二叉树是n(n≥0)个结点的有限集合: +① 或者为空二叉树,即n=0。 +② 或者由一个根结点和两个互不相交的被称为根的左子树 +和右子树组成。左子树和右子树又分别是一棵二叉树。 + * 1.每个结点最多有两棵子树。 + * 2.左右子树有顺序 +* 二叉树的五种基本形态: + * 1.空树 + * 2.只有一个根结点 + * 3.根结点只有左子树 + * 4.根结点只有右子树 + * 5.根结点既有左子树又有右子树 +* 特殊二叉树 + * 1.斜树 + * 2.满二叉树: + * 3.完全二叉树 +* 二叉树的性质 + * 1.非空二叉树上叶子结点数等于度为2的结点数加1 + * 2.非空二叉树上第K层上至多有2^k−1个结点(K≥1) + * 3.高度为H的二叉树至多有2^H-1个结点(H≥1) + * 4.具有N个(N>0)结点的完全二叉树的高度为 [log2(N+1)]或[log2N] +1。 +### 二叉树的存储结构 +* 顺序存储 + * 二叉树的顺序存储结构就是用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素。 +* 链式存储 + * 二叉树每个结点最多两个孩子,所以设计二叉树的结点结构时考虑两个指针指向该结点的两个孩子。 +### 二叉树的遍历 +* 先序遍历: +1)访问根结点; +2)先序遍历左子树; +3)先序遍历右子树。 + * 递归 + * 非递归 +* 中序遍历: +1)中序遍历左子树; +2)访问根结点; +3)中序遍历右子树。 + * 递归 + * 非递归 +* 后序遍历: +1)后序遍历左子树; +2)后序遍历右子树; +3)访问根结点。 + * 递归 + * 非递归 +* 层次遍历: +若树为空,则什么都不做直接返回。 +否则从树的第一层开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。 + +### 线索二叉树 +* N个结点的二叉链表,每个结点都有指向左右孩子的 +结点指针,所以一共有2N个指针,而N个结点的二叉 +树一共有N-1条分支,也就是说存在2N-(N-1)=N+1个空指针。比如左图二叉树中有6个结点,那么就有7个空 +指针。 + +* 大量的空余指针能否利用起来? + * 指向前驱和后继的指针称为线索,加上线索的二叉链表就称为线索链表,相应的二叉树就称为线索二叉树 + * 对二叉树以某种次序遍历使其变为线索二叉树的过程就叫做线索化 +### 哈夫曼树和哈夫曼编码 +* 算法的描述如下: +1)将这N个结点分别作为N棵仅含一个结点的二叉树,构成森林F。 +2)构造一个新结点,并从F中选取两棵根结点权值最小的树作为新结点的左、右子树,并且将新结点的权值 +置为左、右子树上根结点的权值之和。 +3)从F中删除刚才选出的两棵树,同时将新得到的树加入F中。 +4)重复步骤2)和3),直至F中只剩下一棵树为止。 + +## 第五章:图 +### 图的基本概念 +* 定义: +树是N(N≥0)个结点的有限集合,N=0时,称为空树,这是一种特殊情况。在任意一棵非空树中应满足: +1)有且仅有一个特定的称为根的结点。 +2)当N>1时,其余结点可分为m(m>0)个互不相交的有限集合T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根结点的子树。 + * 图G由顶点集V和边集E组成,记为G=(V,E) + * V(G)表示图G中顶点的有限非空集。 +用|V|表示图G中顶点的个数,也称为图G的阶 + * E(G)表示图G中顶点之间的关系(边)集合。 +用|E|表示图G中边的条数。 +* 分类 + * 有向图 + * 有向边(弧)的有限集合 + * 弧是顶点的有序对 + * + * v是弧尾,w是弧头 + * v邻接到w或w邻接自v + * 无向图 + * 无向边的有限集合 + * 边是顶点的无序对 + * (v,w) + * (v,w)=(w,v) + * w,v互为邻接点 +* 简单图 + * 1.不存在顶点到自身的边 + * 2.同一条边不重复出现 +* 多重图 + * 若图G中某两个结点之间的边数多于一条,又允许顶点通过通过同一个边和自己关联 +* 完全图 + * 无向完全图 + * 如果任意两个顶点之间都存在边 + * 有向完全图 + * 如果任意两个顶点之间都存在方向相反的两条弧 +* 子图 +* 连通图:图中任意两个顶点都是连通的 +* 连通分量:无向图中的极大连通子图 + * 连通 + * 顶点A到顶点B有路径 + * 极大 + * 1.顶点足够多 + * 2.极大连通子图包含这些依附这些顶点的所有边 + * 结论1:如果一个图有n个顶点,并且有小于n-1条边,则此图必是非连通图。 + * 概要: 找连通分量的方法: +从选取一个顶点开始,以这个顶点作为一个子图,然后逐个添加与这个子图相连的顶点和边直到所有相连的顶点都加入该子图 +* 强连通:顶点V到顶点W和顶点W到顶点V都有路径 +* 强连通图:图中任一对顶点都是强连通的 +* 连通图的生成树:包含图中全部n个顶点,但是只有n-1条边的极小连通子图 + * 结论2:生成树去掉一条边则变成非连通图,加上一条边就会形成回路。 +* 度:以该顶点为一个端点的边数目 + * 无向图中顶点V的度是指依附于该顶点的边的条数,记为TD(v) + * 有向图中顶点V的度分为出度和入度 + * 入度(ID)是以顶点v为终点的有向边的数目 + * 出度(OD)是以顶点V为起点的有向边的数目 +* 简单路径和简单回路:顶点不重复出现的路径称为简单路径。对于回路,除了第一个和最后一个顶点其余顶点不重复出现的回路称为简单回路 +* 权和网:图中每条边考研赋予一定意义的数值,这个数值叫做这条边的权,有权值得图称为带权图,也叫做网 +* 路径和路径长度:顶点p到q之间的路径是指顶点序列怕保存的,p,a,b,c,d,……q。路径上边的数目就是路径长度 +* 回路(环):第一个和最后一个顶点相同的路径称为回路或者环 +* 距离:从顶点u到v的最短路径长度。不存在路径则为无穷 +### 图的存储结构 +* 邻接矩阵(顺序存储) +* 邻接表(链式存储) + * 十字链表(有向图) + * 邻接多重表(无向图) +### 图的遍历 +* 深度优先遍历 + * 深度优先搜索(DFS:Depth-First-Search):深度优先搜索类似于树的先序遍历算法 + * 空间复杂度:由于DFS是一个递归算法,递归是需要一个工作栈来辅助工作,最多需要图中所有顶点进栈,所以时间复杂度为O(|V|) + * 时间复杂度:1)邻接表:遍历过程的主要操作是对顶点遍历它的邻接点,由于通过访问边表来查找邻接点,所以时间复杂度为O(|E|),访问顶点时间为O(|V|),所以总的时间复杂度为O(|V|+|E|) + 2)邻接矩阵:查找每个顶点的邻接点时间复杂度为O(|V|),对每个顶点都进行查找,所以总的时间复杂度为O(|V|2) +* 广度优先遍历 + * 广度优先搜索(BFS:Breadth-First-Search):广度优先搜索类似于树的层序遍历算法 + * 空间复杂度:BFS需要借助一个队列,n个顶点均需要入队一次,所以最坏情况下n个顶点在队列,那么则需要O(|V|)的空间复杂度。 + * 时间复杂度: +1)邻接表:每个顶点入队一次,时间复杂度为O(|V|),对于每个顶点,搜索它的邻接点,就需要访问这个顶点的所有边,所以时间复杂度为O(|E|)。所以总的时间复杂度为O(|V|+|E|) +2)邻接矩阵:每个顶点入队一次,时间复杂度为O(|V|),对于每个顶点,搜索它的邻接点,需要遍历一遍矩阵的一行,所以时间复杂度为O(|V|),所以总的时间复杂度为O(|V|2) + +### 图的应用 +* 最小生成树 + * 普利姆(Prlm) + * ①从图中找第一个起始顶点v0,作为生成树的第一个顶点,然后从这个顶点到其他顶点的所有边中选一条权值最小的边。然后把这条边的另一个顶点v和这条边加入到生成树中。 + * ②对剩下的其他所有顶点,分别检查这些顶点与顶点v的权值是否比这些顶点在lowcost数组中对应的权值小,如果更小,则用较小的权值更新lowcost数组。 + * ③从更新后的lowcost数组中继续挑选权值最小而且不在生成树中的边,然后加入到生成树。 + * ④反复执行②③直到所有所有顶点都加入到生成树中。 + * 概要: + * 双重循环,外层循环次数为n-1,内层并列的两个循环次数都是n。故普利姆算法时间复杂度为O(n2) +而且时间复杂度只和n有关,所以适合稠密图 + * 克鲁斯卡尔(Kruskal) + * 将图中边按照权值从小到大排列,然后从最小的边开始扫描,设置一个边的集合来记录,如果该边并入不构成回路的话,则将该边并入当前生成树。直到所有的边都检测完为止。 + * 概要: + * + * + * 克鲁斯卡尔算法操作分为对边的权值排序部分和一个单重for循环,它们是并列关系,由于排序耗费时间大于单重循环,所以克鲁斯卡尔算法的主要时间耗费在排序上。排序和图中边的数量有关系,所以适合稀疏图 +* 最短路径 + * 迪杰斯特拉 + * 一个源点到其余顶点的最短路径 + * 该算法设置一个集合S记录已求得的最短路径的顶点,可用一个数组s[]来实现,初始化为0,当s[vi]=1时表示将顶点vi放入S中,初始时把源点v0放入S中。此外,在构造过程中还设置了两个辅助数组: +dist[]:记录了从源点v0到其他各顶点当前的最短路径长度,dist[i]初值为arcs[v0][i]。 +path[]:path[i]表示从源点到顶点i之间的最短路径的前驱结点,在算法结束时,可根据其值追溯得到源点v0到顶点vi的最短路径。 + +假设从顶点0出发,也就是顶点0为源点,集合S最初只包含顶点0,邻接矩阵arcs表示带权有向图,arcs[i][j]表示有向边的权值,若不存在有向边,则arcs[i][j]为∞。Dijkstra算法的步骤如下: +1)初始化:集合S初始为{0},dist[]的初始值dist[i]=arcs[0][i],i=1,2,…,n-1。 +2)找出dist[]中的最小值dist[j],将顶点j加入集合S,即修改s[vj]=1。 +3)修改从v0出发到集合V-S上任一顶点vk可达的最短路径长度:如果dist[j] + arcs[j][k]< dist[k],则令dist[k]=dist[j] + arcs[j][k]。另外更新path[k]=j(也就是顶点j加入集合之后如果有新的路径使得到顶点k路径变短的话就将到顶点k的路径长度修改成较短的) +4)重复2)~3)操作共n-1次,直到所有的顶点都包含在S中。 + * 弗洛伊德 + * 所有顶点到所有顶点的最短路径 + * 算法思想: +递推产生一个n阶方阵序列A(−1),A(0),…,A(k),…,A(n−1) +其中A(k)[i][j]表示从顶点vi到顶点vj的路径长度,k表示绕行第k个顶点的运算步骤。初始时,对于任意两个顶点vi和vj,若它们之间存在边,则以此边上的权值作为它们之间的最短路径长度;若它们之间不存在有向边,则以∞作为它们之间的最短路径长度。以后逐步尝试在原路径中加入顶点k(k=0,1,…,n-1)作为中间顶点。如果增加中间顶点后,得到的路径比原来的路径长度减少了,则以此新路径代替原路径 + * 非带权图 + * 两点之间经过边数最少的路径 + * 带权图 + * 两点之间经过的边上权值之和最小的路径 +* 拓扑排序 + * AOV + * 如果我们把每个环节看成图中一个顶点,在这样一个有向图中,用顶点表示活动,用弧表示活动之间的优先关系,那么这样的有向图称为AOV网(Activity On Vertex) + + * 拓扑排序就是对一个有向图构造拓扑序列的过程,构造会有两种结果: +如果此图全部顶点都被输出了,说明它是不存在回路的AOV网; +如果没有输出全部顶点,则说明这个图存在回路,不是AOV网。 + * 拓扑排序算法: + 从AOV网中选择一个入度为0的顶点输出,然后删去此顶点,并删除以此顶点为弧尾的弧。重复这个步骤直到输出图中全部顶点,或者找不到入度为0的顶点为止。 + +* 关键路径 + * AOE(Activity On Edge):在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网称为AOE网。 + +## 第六章:查找 +### 查找的基本概念和顺序查找 +* 查找定义:在数据集合中寻找满足某种条件的数据元素的过程称为查找 +* 关键字:数据元素中某个可以以唯一标识该元素的数据项 +* 平均查找长度(ASL:Average Search Length):在查找的过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的平均值 +* 顺序查找(线性查找),主要用于在线性表中进行查找。从查找表的一端开始,顺序扫描查找表,依次将扫描到的关键字和待查找的值key进行比较。如果相等,则查找成功。如果扫描结束仍然没有发现相等的数据元素,则查找失败。 + * 1 + * 2 + * 3 + * 4 + * 时间复杂度为O(n) +### 折半查找 +* 算法思路: + * 首先将给定值key与表中中间位置元素的关键字比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分中。然后在缩小的范围内继续进行同样的查找,如此重复直到找到为止,或者确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。 +* 折半查找分析 + * 折半查找判定树 + * 对于折半查找,查找的比较次数就是从根结点到该结点经历的结点数 + * 时间复杂度为O(logn) + * 概要: 具有N个(N>0)结点的完全二叉树的高度为 [log2(N+1)] 或 [log2N] +1。 + +### 分块查找 +* 分块查找又称为索引顺序查找 +* 分块查找思想: + * ①确定待查找值在哪个块(折半查找) + +②在确定的块中查找待查找值(顺序查找) +* 分块查找分析 + * 由于分块查找实际是进行两次查找,所以整个算法的平均查找长度是两次查找的平均查找长度之和。 +即ASL分块=ASL折半+ASL顺序 + * +### 二叉排序树 +* 二叉排序树(Binary Search Tree 也叫二叉搜索树)或者是一棵空树,或者是具有以下性质的二叉树 +①若左子树不空,则左子树上所有结点的值均小于它的根结点的值。 +②若右子树不空,则右子树上所有结点的值均大于它的根结点的值。 +③它的左右子树也是一棵二叉排序树。 +* 算法思想 + * 由于二叉排序树的特点(左子树<根结点<右子树),所以每次查找一个关键字,需要先和根结点进行比较: +如果这个关键字小于根结点的值,则再到这个根结点的左子树进行同样的比较操作一直进行下去直到找到该关键字,表示查找成功,或者是空指针,表示查找失败。 +如果这个关键字大于根结点的值,则再到这个根结点的右子树进行同样的比较操作一直进行下去直到找到该关键字,表示查找成功,或者是空指针,表示查找失败。 + * 查找关键字代码 + * 1 + * 2 + * 插入关键字代码 + * 1)空树:直接插入新结点返回成功 +2)树不空:检查是否存在关键字重复的结点: +①存在:返回插入失败 +②不存在:检查根结点的值和待插入关键字值的大小关系递归插入左右子树 + * + * 构造代码 + * + * 删除结点 + * ①删除的是叶子结点 + * 方法:直接删去该结点即可 + * ②删除的是仅有左子树或者右子树的结点 + * 方法:“子承父业” + * ③删除的是左右子树都有的结点 + * 仿照②类型,先将一个孩子“继承父业”,另一个孩子“归顺”于这个孩子 +方法:找到待删除结点的直接前驱或者直接后继结点,用该结点来替换待删除结点,再删除该结点。 +* 二叉排序树分析 + * 查找时间复杂度是O(n) +* 概要: “左小右大” +### 平衡二叉树(AVL树) +* 平衡二叉树(AVL树)是特殊的二叉排序树,特殊的地方在于左右子树的高度之差绝对值不超过1,而且左右子树又是一棵平衡二叉树。 +* 平衡因子 + * 定义结点左子树与右子树的高度差为该结点的平衡因子,则平衡二叉树结点的平衡因子的值只可能是−1、0或1。 +* 平衡调整 + * 平衡二叉树的建立过程和二叉排序树的建立过程是相似的,都是从一棵空树开始陆续插入结点。不同的地方在于对于平衡二叉树的建立过程中,由于插入结点可能会破坏结点的平衡性,所以需要进行平衡调整。 + + * LL调整(左孩子的左子树上插入结点导致) + * 最小不平衡子树根结点的平衡因子为2>0 +它的左孩子结点平衡因子为1>0 +两个都大于0,所以直接右旋就可以调整 + * 概要: “正则右旋” + * RR调整(右孩子的右子树上插入结点导致) + * 最小不平衡子树根结点的平衡因子为-2<0 +它的右孩子结点平衡因子为-1<0 +两个都小于0,所以直接左旋就可以调整 + * 概要: “负则左旋” + * LR调整(左孩子的右子树上插入结点导致) + * RL调整(右孩子的左子树上插入结点导致) + * 概要: 先局部转换为LL或RR,最后进行调整 +* 分析 + * 含有n个结点平衡二叉树的最大深度为O(log2n),因此,平衡二叉树的平均查找长度为O(log2n) +### B树和B+树 +* 2-3树 + * 2-3树是一种多路查找树:2和3的意思就是2-3树包含两种结点 + * 1)2结点包含一个元素和两个孩子(或者没有孩子)。 + ①左子树包含的元素小于该结点的元素值,右子树包含的元素大于该结点的元素值 + ②2结点要不有两个孩子,要不就没有孩子,不允许有一个孩子 + * 2)3结点包含一大一小两个元素和三个孩子(或者没有孩子)。(两个元素按大小顺序排列好) + ①左子树包含的元素小于该结点较小的元素值,右子树包含的元素大于该结点较大的元素值,中间子树包含的元素介于这两个元素值之间。 + ②3结点要不有三个孩子,要不就没有孩子,不允许有一个或两个孩子 + * 3)2-3树所有叶子结点都在同一层次 +* 2-3-4树 + * 2-3-4树也是一种多路查找树:2和3和4的意思就是2-3-4树包含三种结点 + * 1)2结点包含一个元素和两个孩子(或者没有孩子)。 + ①左子树包含的元素小于该结点的元素值,右子树包含的元素大于该结点的元素值 + ②2结点要不有两个孩子,要不就没有孩子,不允许有一个孩子 + * 2)3结点包含一大一小两个元素和三个孩子(或者没有孩子)。 + ①左子树包含的元素小于该结点较小的元素值,右子树包含的元素大于该结点较大的元素值,中间子树包含的元素介于这两个元素值之间。 + ②3结点要不有三个孩子,要不就没有孩子,不允许有一个或两个孩子 + * 3)4结点包含小中大三个元素和四个孩子(或者没有孩子)。 + ①左子树包含的元素小于该结点最小的元素值,第二个子树包含大于最小的元素值小于中间元素值的元素,第三个子树包含大于中间元素值小于最大元素值的元素,右子树包含的元素大于该结点最大的元素值。 + ②4结点要不有四个孩子,要不就没有孩子,不允许有一个或两个或三个孩子 + * 4)2-3-4树所有叶子结点都在同一层次 +* B树 + * B树也是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例,我们把树中结点最大的孩子数目称为B树的阶。通常记为m。 +一棵m阶B树或为空树,或为满足如下特性的m叉树: + * 1)树中每个结点至多有m棵子树。(即至多含有m-1个关键字) ("两棵子树指针夹着一个关键字") + * 2)若根结点不是终端结点,则至少有两棵子树。(至少一个关键字) + * 3)除根结点外的所有非叶结点至少有 ⌈m/2⌉棵子树。(即至少含有⌈m/2⌉-1个关键字) + * 4)所有非叶结点的结构如下: + * 5)所有的叶子结点出现在同一层次上,不带信息。(就像是折半查找判断树中查找失败的结点) + * 1.B树的查找操作 + * 查找过程:①先让待查找关键字key和结点的中的关键字比较,如果等于其中某个关键字,则查找成功。 + ②如果和所有关键字都不相等,则看key处在哪个范围内,然后去对应的指针所指向的子树中查找。 + Eg:如果Key比第一个关键字K1还小,则去P0指针所指向的子树中查找,如果比最后一个关键字Kn还大,则去Pn指针所指向的子树中查找。 + * 2.B树的插入操作 + * 3.B树的删除操作 + * B树中的删除操作与插入操作类似,但要稍微复杂些,要使得删除后的结点中的关键字个数≥⌈m/2⌉-1 ,因此将涉及结点的“合并”问题。由于删除的关键字位置不同,可以分为关键字在终端结点和不在终端结点上两种情况。 + * 1)如果删除的关键字在终端结点上(最底层非叶子结点): + ①结点内关键字数量大于⌈m/2⌉-1 ,这时删除这个关键字不会破坏B树的定义要求。所以直接删除。 + ②结点内关键字数量等于⌈m/2⌉-1 ,并且其左右兄弟结点中存在关键字数量大于⌈m/2⌉-1 的结点,则去兄弟阶段中借关键字。 + ③结点内关键字数量等于⌈m/2⌉-1 ,并且其左右兄弟结点中不存在关键字数量大于⌈m/2⌉-1 的结点,则需要进行结点合并。 + + * 2)如果删除的关键字不在终端结点上(最底层非叶子结点):需要先转换成在终端结点上,再按照在终端结点 上的情况来分别考虑对应的方法。 + * 相邻关键字:对于不在终端结点上的关键字,它的相邻关键字是其左子树中值最大的关键字或者右子树中值最小的关键字。 + * 第一种情况:存在关键字数量大于⌈m/2⌉-1 的左子树或者右子树,在对应子树上找到该关键字的相邻关键字,然后将相邻关键字替换待删除的关键字。 + * 第二种情况:左右子树的关键字数量均等于⌈m/2⌉-1 ,则将这两个左右子树结点合并,然后删除待删除关键字。 + * 概要: 分裂的方法:取这个关键字数组中的中间关键字(⌈n/2⌉)作为新的结点,然后其他关键字形成两个结点作为新结点的左右孩子。 +* B+树 + * B+树是常用于数据库和操作系统的文件系统中的一种用于查找的数据结构 + * m阶的B+树与m阶的B树的主要差异在于: +1)在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一棵子树;而在B树中,具有n个关键字的结点含有(n+1)棵子树。 +2)在B+树中,每个结点(非根内部结点)关键字个数n的范围是 ⌈m/2⌉≤n≤m(根结点1≤n≤m),在B树中,每个结点(非根内部结点)关键字个数n的范围是⌈m/2⌉ -1≤n≤m-1(根结点:1≤n≤m-1)。 +3)在B+树中,叶结点包含信息,所有非叶结点仅起到索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。 +4)在B+树中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。 +### 散列表 +* 散列表:根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系。 +* 散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr。 +* 散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这种情况为“冲突”,这些发生碰撞的不同关键字称为同义词。 +* 构造散列函数的tips: + * 1)散列函数的定义域必须包含全部需要存储的关键字,而值域的范围则依赖于散列表的大小或地址范围。 + * 2)散列函数计算出来的地址应该能等概率、均匀地分布在整个地址空间,从而减少冲突的发生。 + * 3)散列函数应尽量简单,能够在较短的时间内就计算出任一关键字对应的散列地址。 +* 1.常用Hash函数的构造方法: + * 1.开放定址法:直接取关键字的某个线性函数值为散列地址,散列函数为H(key)=a×key+b。式中,a和b是常数。这种方法计算最简单,并且不会产生冲突 + * 2.除留余数法:假定散列表表长为m,取一个不大于m但最接近或等于m的质数p,利用以下公式把关键字转换成散列地址。散列函数为H(key)=key % p +除留余数法的关键是选好p,使得每一个关键字通过该函数转换后等概率地映射到散列空间上的任一地址,从而尽可能减少冲突的可能性 + * 3.数字分析法:设关键字是r进制数(如十进制数),而r个数码在各位上出现的频率不一定相同,可能在某些位上分布均匀些,每种数码出现的机会均等;而在某些位上分布不均匀,只有某几种数码经常出现,则应选取数码分布较为均匀的若干位作为散列地址。这种方法适合于已知的关键字集合 + * 4.平方取中法:顾名思义,取关键字的平方值的中间几位作为散列地址。具体取多少位要看实际情况而定。这种方法得到的散列地址与关键字的每一位都有关系,使得散列地址分布比较均匀。 + * 5.折叠法:将关键字分割成位数相同的几部分(最后一部分的位数可以短一些),然后取这几部分的叠加和作为散列地址,这种方法称为折叠法。关键字位数很多,而且关键字中每一位上数字分布大致均匀时,可以采用折叠法得到散列地址。 + +* 2.常用Hash函数的冲突处理办法: + * 1.开放定址法:将产生冲突的Hash地址作为自变量,通过某种冲突解决函数得到一个新的空闲的Hash地址。 + * 1)线性探测法:冲突发生时,顺序查看表中下一个单元(当探测到表尾地址m-1时,下一个探测地址是表首地址0),直到找出一个空闲单元(当表未填满时一定能找到一个空闲单元)或查遍全表。 + * 2)平方探测法:设发生冲突的地址为d,平方探测法得到的新的地址序列为d+12,d-12,d+22,d-22...... +平方探测法是一种较好的处理冲突的方法,可以避免出现“堆积”问题,它的缺点是不能探测到散列表上的所有单元,但至少能探测到一半单元。 + * 3)再散列法:又称为双散列法。需要使用两个散列函数,当通过第一个散列函数H(Key)得到的地址发生冲突时,则利用第二个散列函数Hash2(Key)计算该关键字的地址增量。 + * 4)伪随机序列法:当发生地址冲突时,地址增量为伪随机数序列,称为伪随机序列法。 + * 2.拉链法:对于不同的关键字可能会通过散列函数映射到同一地址,为了避免非同义词发生冲突,可以把所有的同义词存储在一个线性链表中,这个线性链表由其散列地址唯一标识。拉链法适用于经常进行插入和删除的情况。 + * 3.散列表的查找过程:类似于构造散列表,给定一个关键字Key。 + 先根据散列函数计算出其散列地址。然后检查散列地址位置有没有关键字。 + 1)如果没有,表明该关键字不存在,返回查找失败。 + 2)如果有,则检查该记录是否等于关键字。 + ①如果等于关键字,返回查找成功。 + ②如果不等于,则按照给定的冲突处理办法来计算下一个散列地址,再用该地址去执行上述过程。 + * 4.散列表的查找性能:和装填因子有关。 + * + * α越大,表示装填的记录越“满”,发生冲突的可能性就越大,反之发生冲突的可能性越小 +## 第七章:排序 +### 排序的基本知识 +* 定义:排序就是将原本无序的序列重新排列成有序的序列。 +* 排序的稳定性 + * 如果待排序表中有两个元素Ri、Rj,其对应的关键字keyi=keyj,且在排序前Ri在Rj前面,如果使用某一排序算法排序后,Ri仍然在Rj的前面,则称这个排序算法是稳定的,否则称排序算法是不稳定的。 +### 插入类排序 +* 直接插入排序 + * 直接插入排序:首先以一个元素为有序的序列,然后将后面的元素依次插入到有序的序列中合适的位置直到所有元素都插入有序序列。 + * 时间复杂度为O(n) + * 直接插入排序是稳定性是稳定的。 +* 折半插入排序 + * 折半插入排序将比较和移动这两个操作分离出来,也就是先利用折半查找找到插入的位置,然后一次性移动元素,再插入该元素。 + * 折半插入排序的时间复杂度为O(n^2) + * 稳定性:和直接插入排序稳定性相同,是稳定的。 +* 希尔排序 + * 希尔排序的基本思想:希尔排序本质上还是插入排序,只不过是把待排序序列分成几个子序列,再分别对这几个子序列进行直接插入排序。 + * ①先以增量5来分割序列,也就是下标为0,5,10,15...的关键字分成一组,下标为1,6,11,16..分成一组,然后对这些组分别进行直接插入排序,这就完成了一轮希尔排序。 + * ②缩小增量(d1=n/2,di+1= [di/2],比如10个数据序列,第一次增量d1=10/2=5,第二次增量d2= [d1/2]= [5/2]=2,并且最后一个增量等于1),所以第二轮以增量为2进行类似的排序过程。 + * ③接下来的第三轮,第四轮...都是类似的过程,直到最后一轮以增量为1。此时就是前面所说的直接插入排序。 + * 概要: + * 时间复杂度:... 希尔排序的时间复杂度约为O(n^1.3) 在最坏情况下希尔排序的时间复杂度为O(n^2) + * 空间复杂度:希尔排序的空间复杂度为O(1) + * 稳定性:不稳定,由于不同的增量可能就会把相等的关键字划分到两个直接插入排序中进行排序, 可能就会造成相对顺序变化。 +### 交换类排序 +* 冒泡排序 + * 假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们,直到序列比较完。我们称它为一趟冒泡,结果将最小的元素交换到待排序列的第一个位置。下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序列减少一个元素,每趟冒泡的结果把序列中的最小元素放到了序列的最终位置,……,这样最多做n-1趟冒泡就能把所有元素排好序。 + * 空间复杂度:交换时开辟了存储空间来存储中间变量,所以空间复杂度为O(1) + * 时间复杂度 + * 稳定性:当两个关键字相等,if判断条件不成立,所以不会发生数据移动。所以是稳定的。 +* 快速排序 + * 快速排序是一种基于分治法的排序方法。 +每一趟快排选择序列中任一个元素作为枢轴(pivot)(通常选第一个元素),将序列中比枢轴小的元素都移到枢轴前边,比枢轴大的元素都移到枢轴后边。 + * 1 + * 2 + * 时间复杂度: +最好情况下时间复杂度为O(nlogn) ,待排序序列越无序,算法效率越高。 + 最坏情况下时间复杂度为O(n^2),待排序序列越有序,算法效率越低。 + * 空间复杂度: +由于快速排序是递归的,需要借助一个递归工作栈来保存每一层递归调用的必要信息,其容量应与递归调用的最大深度一致。 +最好情况下为 ⌈log2(n+1)⌉(每次partition都很均匀)递归树的深度O(logn) +最坏情况下,因为要进行n-1次递归调用,所以栈的深度为O(n); + * 稳定性:快速排序是不稳定的,是因为存在交换关键字。 +### 选择类排序 +* 简单选择排序 + * + * 空间复杂度:需要额外的存储空间仅为交换元素时借助的中间变量,所以空间复杂度是O(1) + * 时间复杂度: +关键操作在于交换元素操作,整个算法由双重循环组成,外层循环从0到n-2一共n-2+1=n-1次, +对于第i层外层循环,内层循环执行n-1-(i+1)+1=n-i-1次。 + 当i=0,内层循环执行n-1次,当i=n-2,内层循环执行1次,所以是一个等差数列求和,一共为(1+n-1)(n-1)/2=n(n-1)/2 ,所以时间复杂度为O(n^2) + * 稳定性:不稳定 原因就在于交换部分会打破相对顺序 +* 堆排序 + * 什么是堆? + * 堆是一棵完全二叉树,而且满足任何一个非叶结点的值都不大于(或不小于)其左右孩子结点的值。 + * 如果是每个结点的值都不小于它的左右孩子结点的值,则称为大顶堆。 + * 如果是每个结点的值都不大于它的左右孩子结点的值,则称为小顶堆。 + * 什么是堆排序? + * 我们知道对于一个堆来说,它的根结点是整个堆中所有结点的值的最大值(大顶堆)或者最小值(小顶堆)。所以堆排序的思想就是每次将无序序列调节成一个堆,然后从堆中选择堆顶元素的值,这个值加入有序序列,无序序列减少一个,再反复调节无序序列,直到所有关键字都加入到有序序列。 + * + * + * 时间复杂度: + 堆排序的总时间可以分为①建堆部分+②n-1次向下调整堆 + + 堆排序的时间复杂度为O(n)+O(nlog2n)=O(nlog2n) + * 堆排序不稳定 +### 归并排序 +* 假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为1,然后两两归并,得到 ⌈n/2⌉个长度为2或1的有序表;再两两归并,……如此重复,直到合并成一个长度为n的有序表为止,这种排序方法称为2-路归并排序。 + * + * +* 例如:49 38 65 97 76 13 27 + * ①首先将整个序列的每个关键字看成一个单独的有序的子序列 + * ②两两归并,49和38归并成{38 49} ,65和97归并成{65 97},76和13归并成{13 76},27没有归并对象 + * ③两两归并,{38 49}和{65 97}归并成{38 49 65 97},{13,76}和27归并成{13 27 76} + * ④两两归并,{38 49 65 97}和{13 27 76}归并成{13 27 38 49 65 76 97} +* 时间复杂度:O(nlog2n) +* 空间复杂度:因为需要将这个待排序序列转存到一个数组,所以需要额外开辟大小为n的存储空间,即空间复杂度为O(n) +* 稳定性:稳定 +### 基数排序 +* 基数排序(也叫桶排序)是一种很特别的排序方法,它不是基于比较进行排序的,而是采用多关键字排序思想(即基于关键字各位的大小进行排序的),借助“分配”和“收集”两种操作对单逻辑关键字进行排序。基数排序又分为最高位优先(MSD)排序和最低位优先(LSD)排序。 +* 例子:53, 3, 542, 748, 14, 214, 154, 63, 616 + * 补充位数:053, 003, 542, 748, 014, 214, 154, 063, 616 + * 桶实际是一个队列,先进先出(从桶的上面进,下面出) + * 关键字数量为n,关键字的位数为d,比如748 d=3,r为关键字的基的个数,就是组成关键字的数据的种类,比如十进制数字一共有0至9一共10个数字,即r=10 +* 空间复杂度:需要开辟关键字基的个数个队列,所以空间复杂度为O(r) +* 时间复杂度:需要进行关键字位数d次"分配"和"收集",一次"分配"需要将n个关键字放进各个队列中,一次"收集"需要将r个桶都收集一遍。所以一次"分配"和一次"收集"时间复杂度为O(n+r)。d次就需要O(d(n+r))的时间复杂度。 +* 稳定性:由于是队列,先进先出的性质,所以在分配的时候是按照先后顺序分配,也就是稳定的,所以收集的时候也是保持稳定的。即基数排序是稳定的排序算法。 +### 外部排序 +* 需要将待排序的记录存储在外存上,排序时再把数据一部分一部分的调入内存进行排序。在排序过程中需要多次进行内存和外存之间的交换,对外存文件中的记录进行排序后的结果仍然被放到原有文件中。这种排序的方法就叫做外部排序。 +* 如何得到初始的归并段 + * 置换选择排序:解决排序段放入内存的问题 +* 如何减少多个归并段的归并次数 + * 最佳归并树:最少的归并次数(I/O次数) +* 如何每次m路归并快速得到最小的关键字 + * 败者树:减少比较次数 +* 概要: 内存容量无法容纳大量数据 +## 二叉树与树与森林 +### 树与二叉树 +* 如何将一棵树转化成二叉树? + * 树的孩子兄弟表示法与二叉树的二叉链表表示法都是用到两个指针 + * 将孩子兄弟表示法理解成二叉链表 + * 树转换成二叉树的手动模拟方法: + * ①将同一结点的各个孩子用线串连起来 + * ②将每个结点的子树分支,从左往右,除了第一个以外全部删除 + * 概要: 例子 +* 如何将一棵二叉树转化成树? + * 二叉树转换成树的手动模拟方法: + * ①将二叉树从上到下分层,并调节成水平方向。 +(分层方法:每遇到左孩子则为一层) + * ②找到每一层的双亲结点,方法为它的上一层相连的那个结点就是双亲结点。 +例如bcd这一层,与它相连的上一层结点即为a,所以bcd这三个结点的双亲结点都是a. + * ③将每一层结点和其双亲结点相连,同时删除该双亲结点各个孩子结点之间的联系。 + * 概要: 例子 +### 森林与二叉树 +* 森林:森林是m(m≥0)棵互不相交的树的集合 +* 如何将森林转换成二叉树? + * 森林转换成树的手动模拟方法: + * ①将森林中每棵树都转换成二叉树 + * ②将第二棵树作为第一棵树的根结点的右子树,将第三棵树作为第二棵树的根结点的右子树..依次类推 + * 概要: 例子 +* 如何将二叉树转换成森林? + * 二叉树转换成森林的手动模拟方法: + * 反复断开二叉树根结点的右孩子的右子树指针,直到不存在根结点有右孩子的二叉树为止。 + * 概要: 例子 +### 树与森林的遍历 +* 先序:先访问根结点,再访问根结点的每棵子树。 访问子树也是按照先序的要求 +* 后序:先访问根结点的每棵子树,再访问根结点。 访问子树也是按照先序的要求 +* 树的先序遍历等于它对应二叉树的先序遍历,后序遍历等于它对应的二叉树的中序遍历 +* 概要: 例子 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/数据结构/数据结构.png b/数据结构/数据结构.png new file mode 100644 index 0000000..8e2be12 Binary files /dev/null and b/数据结构/数据结构.png differ diff --git a/数据结构/数据结构.xmind b/数据结构/数据结构.xmind new file mode 100644 index 0000000..ffa5017 Binary files /dev/null and b/数据结构/数据结构.xmind differ diff --git a/计算机组成原理/计算机组成.md b/计算机组成原理/计算机组成.md new file mode 100644 index 0000000..1844ed1 --- /dev/null +++ b/计算机组成原理/计算机组成.md @@ -0,0 +1,728 @@ +# Principle-of-Computer-Composition +计算机组成原理思维导图 +# 计算机组成 +## 第一章 计算机系统概论 +### 冯诺依曼型计算机特点 +* 1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成 +* 2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示。 +* 3.指令由操作码和地址码组成 +* 4.指令在存储器中按执行顺序存放,由指令计数器(即程序计数器PC)指明要执行的指令所在的储存单元地址,一般按顺序递增,但可按运算结果或外界条件而改变 +* 5.机器以运算器为中心,输入输出设备与存储器间的数据传送都通过运算器 +### 区别以运算器为中心的计算机还是存储器的方法 +* 看输入设备能否直接与存储器相连,是的话就是以存储器为中心 +### 计算机系统 +* 硬件 + * 结构 + * 主机 + * cpu + * ALU运算器 + * CU控制器 + * 存储器 + * 主存 + * 辅存 + * I/O + * 输入设备 + * 输出设备 + * 主要技术指标 + * 机器字长 + * CPU一次能处理的数据位数 + * 存储容量 + * 存储容量=存储单元个数×存储字长 + * 运算速度 + * 单位时间执行指令的平均条数,MIPS +* 软件 + * 系统软件 + * 用来管理整个计算机系统 + * 语言处理程序 + * 操作系统 + * 服务性程序 + * 数据库管理系统 + * 网络软件 + * 应用软件 + * 按任务需要编制成的各种程序 +## 第三章 运算方法和运算部件 +### 数据的表示方法和转换 +* 机器数正0负1 + * 符号数值化的带符号二进制数,称为机器数。 +* 真值:符号位加绝对值 +* 余三码:在8421码的基础上,把每个编码都加上0011 + * 当两个余三码想加不产生进位时,应从结果中减去0011;产生进位时,应将进位信号送入高位,本位加0011 +* 格雷码:任何两个相邻编码只有1个二进制位不同,而其余3个二进制位相同 +* 8421码 + * 权值从高到低为8、4、2、1 + * 算术运算时,需对运算结果进行修正。 方法:如果小于、等于(1001)2,不需要修正;否则加6修正 +### 带符号的二进制数据在计算机中的表示方法及加减法运算 +* 原码 + * 定义 + * 最高位为符号位0/1+数值的绝对值形式 + * 特点 + * (1)值+0,-0的原码分别为00000、10000,形式不唯一; + * (2)正数的原码码值随着真值增长而增长 + * 负数的原码码值随着真值增长而减少 + * (3)n+1位原码表示定点整数范围-(2n-1)——2n-1 + * n+1位原码表示定点小数范围 -(1-2-n)——1-2-n + * 运算 + * 绝对值相加减,由数值大小决定运算结果符号 +* 补码 + * 定义,特点和运算 + * 运算: +结果不超过机器所能表示范围时,[X+Y]补=[X]补+[Y]补 +减法运算: +[X–Y]补=[X+(–Y)]补=[X]补+[–Y]补 + * 结论 + * 负数的补数=模+负数 + * 互为补数的绝对值相加=模 + * 在补数中,减法运算即加法运算 + * 定义 + * 定义法,即[X]补=2·符号位+X (MOD 2) + * X为正数,则符号0+X的绝对值;X为负数,则X的绝对值取反+1。 + * 特点 + * 数值零的补码表示唯一 + * 正数补码码值随着真值增大而增大,负数补码码值随着真值增大而增大 + * n+1位补码所表示定点整数范围- 2n——2n-1,n+1位补码所表示定点小数范围-1——1-2-n + * 加法运算逻辑事例 + * 过程 + * 加减法运算的溢出处理 + * 溢出定义 + * 当运算结果超出机器数所能表示的范围 + * 加减中,可能产生溢出的情况 + * 可能出现溢出 + * 同号数相加 + * 异号数相减 + * 不可能出现溢出 + * 异号数相加 + * 同号数相减 + * 判断溢出的方法 + * 法一:当符号相同两数相加,结果符号和加数(或被加数)不相同,则溢出 + * fa,fb表示两操作数(A,B)的符号位,fs为结果的符号位 + * 法二:任意符号相加,如果C=Cf,则结果正确,否则溢出; + * C为数值最高位的进位,Cf为符号位的进位 + * 法三:采用双符号相加,如果fs1=fs2,则结果正确,否则溢出; + * 运算结果的符号位为fs2; + * 多符号位的补码,叫做变形补码; + * 如果采用双符号位,当数为小数时,模m=4;当数为整数时,模m=2的n+2次方 +* 反码 + * 定义 + * a.定义法,即[X]反=(2-2-n)·符号位+X (MOD 2-2-n) + * b.X是正数,[X]反=[X]原;X是负数,符号+数值取反。 + * 特点 + * 数值零的反码表示不唯一 + * 正数反码码值随着真值增大而增大,负数反码码值随着真值增大而增大 + * n+1位反码所表示定点整数范围- (2n-1)——2n-1,n+1位反码所表示定点小数范围-(1-2-n)——1-2-n + * 加减运算特点 + * 在机器数范围内,反码运算满足[X+Y]反=[X]反+[Y]反 +,[X-Y]反=[X]反+[-Y]反 + * 反码运算在最高位有进位时,要在最低位+1,此时要多进行一次加法运算,增加了复杂性,又影响了速度,因此很少采用 + * 由于反码运算是以2-2的-次方为模,所以,当最高位有进位而丢掉进位(即2)时,要在最低位+/-1 +* 移码 + * 由来及窍门 + * 为了从码值直接判断对应真值的大小,所以引进移码 + * [X]补的符号位取反,即得[X]移 + * 特点 + * 最高位是符号位,1表示正,0表示负 + * 数据0有唯一的编码 + * 移码码值随着真值增大而增大 + * n+1位移码所表示定点整数范围- 2n——2n-1, n+1位移码所表示定点小数范围-1——1-2-n + * 计算机中,移码常用于表示阶码,故只执行加、减运算 + * 计算机中,移码运算公式需要对结果进行修正 + * 浮点数的阶码运算 + * 移码定义:[X]移=2的n次方+X + * 补码定义:[X]补=2的n+1次方+Y + * 阶码求和公式 + * [X]移+[Y]补=[X+Y]移 mod2的n+1次方 + * [X]移+[-Y]补=[X-Y]移 + * 判溢方法 + * 双符号位参加运算,最高符号位恒置0 + * 当结果最高符号位=1则溢出 + * 低位符号=0,则上溢;低位符号=1,则下溢; + * 当结果最高符号位=0则未溢出 + * 低位符号=0,负数;低位符号=1,正数 + * 说明:如果阶码运算的结果溢出,上述条件不成立。此时,使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是结果的最高符号位为1。此时低位符号为0时,表明结果上溢;为1时,表明结果下溢。当最高符号位为0时,表明没有溢出,低位符号位为1,表明结果为正;为0时表明结果为负。 +* 补,反,原,移码的相互转换 + * 反码-》原码 + * 方法:符号位不变,正数不变,负数数值部分取反。 + * 补码-》原码 + * 方法1:正数不变,负数数值部分求反加1。 + * 方法2:串行转换 + * 从最后开始数,遇到第一个“1”,除第一个“1”不变,前面数字分别取反 + * 移码-》原码 + * 方法:移码转换为补码,再转换为原码 +* 数据从补码和反码表示形式转换成原码 + * 自低位开始转换,从低位向高位,在遇到第一个1之前,保存各位的0不变,第一个1也不变,以后得各位按位取反,最后保持符号位不变,经历一遍后,即可得到补码 +* 定点数和浮点数 + * 定点数 + * 小数点固定在某个位置上的数据 + * 32位定点小数、定点整数补码的范围 + * 32位定点小数-1~1-2-31 + * 32位定点整数-231~231-1 + * 浮点数 + * 根据IEEE754国际标准,常用的浮点数有两种格式 + * Nmax=Mmax*2的Emax +Nmin=Mmin*2的Emax + * 单精度(32位)=8位阶码+24位尾数 + * 单精度浮点数(32位),阶码8位(含一位符号位),尾数24(含一位符号位),取值范围:-2的127次方~(1-2的-23次方)*2的127次方 + * 双精度(64位)=11位阶码+53位尾数 + * 双精度浮点数(64位),阶码11位(含一位符号位),尾数53位(含一位符号位),取值范围:-2的1023次方~(1-2的-52次方)*2的1023次方 + * 为了保证数据精度,尾数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值应大于或等于(0.5)10 + * 左规 + * 右规 + * 小数点位置可以浮动的数据。 + * 表示形式:N = M · RE + * 计算机中存储形式 + * Ms+Es+E(n位)+M(m位) + * 阶码E,一般为整数,用补码或者移码表示; + * 尾数M,一般为规格化的定点小数,用补码表示; +### 二进制乘法运算 +* 定点原码一位乘法 + * 两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积 + * [X·Y]原=[X]原·[Y]原=(X0⊕Y0)|(X1X2..Xn) · (Y1Y2..Yn) + * 几点结论 + * 从低到高根据乘数每位0、1决定相加被乘数还是0; + * 相加数每次左移,最后一起求积; + * 符号由异或决定 + * 表达式 + * 电路框架 + * 修正 + * 1.在机器内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每每求得一个相加数,就与上次部分积相加 + * 2.人工计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍,如按此算法在机器中运算,加法器也需增到两倍。观察计算过程很容易发现,在求本次部分积时,前一次部分积的最低位不再参与运算,因此可将其右移一位,相加数可直送而不必偏移,于是用N位加法器就可实现两个N位数相乘 + * 部分积右移时,乘数寄存器同时右移一位,这样可以用乘数寄存器的最低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接受部分积右移出来的一位,因此,完成乘法运算后,A寄存器中保存乘积的高位部分,乘数寄存器中保存乘积低位部分 + * 例题 + * 控制流程图 +* 定点补码一位乘法 + * 表达式 + * [X·Y]补=[X]补·(-Y0+Y1·2-1+….Yn·2-n) + * 注意:此处为双符号位,当最后乘积高位为负数时,需要补充加上[-|x|]补的操作 +### 二进制除法 +* 加减交替法 + * 当余数为正时,商上1,求下一位商的办法是,余数左移一位,再减去除数;当余数为负时,商上0,求下一位商的办法是,余数左移一位,再加上除数。此方法不用恢复余数,所以又叫不恢复余数法。但若最后一次上商为0而又需得到正确余数,则在这最后扔需恢复余数 +### 浮点数的运算方法 +* 浮点数的加减法运算 + * 1.对阶操作 + * 求出△E,再对小的进行移位 + * 2.尾数的加减运算 + * 3.规格化操作 + * 规则简化是符号位和数值最高位不同,即00.1xxxx或11.0xxxx + * 4.舍入 + * 超出表示范围的高位为1舍入 + * 5.检查阶码是否溢出 +* 浮点数的乘除法运算 + * 1.浮点数阶码运算(移码) + * 牢记公式 + * [X+Y]移=[X]移+[Y]补 + * [X–Y]移=[X]移+[–Y]补 + * 2.按照一位乘或加减交替除运算 + * 先确定符号,在列式子计算 +### 运算部件 +* ABC寄存器作业 +* 定点运算部件 +* 浮点运算部件 + * 由阶码运算部件和尾数运算部件组成 +### 数据校验码 +* 码距 + * 任意两个合法码之间不相同的二进制位数的最小值 + * 要具有差错能力,则码距>1 + * 合理增大码距,就能提高发现错误的能力 +* 鉴定方法 + * 有无差错能力 + * 是否能合理增大码距 +* 奇偶校验码 + * 能发现数据代码中一位或奇数个位出错情况的编码 + * 实现原理是使码距由1增加到2 + * 步骤1:在字节高位补充一位,即校验位 + * 步骤2:依据图3.10电路形成原始数据D8..D1的校验位值 + * 步骤3:将9位数据写入主存 + * 步骤4:读出该数据时,读取数据D8..D1通过图3.10判定合法性 + * 电路图 + * 结论 + * (1)奇偶校验码只能发现一位或奇位错,且不能确定出错位置 + * (2)奇偶校验码的码距=2 +* 海明校验码 + * 海明码位号和校验位位号的关系 + * Pi的位置在2的i-1次方,但是除了最高位 + * 笔记 + * 3,5,7||3,6,7||5,6,7 + * 电路图 + * 海明码码距为4 + * 纠一位错,查一位错 + * 2∧r≥k+r+1 + * 纠一位错,查两位错 + * 2∧(r–1)≥k+r +* 循环冗余校验码(CRC) + * CRC码可以发现并纠正信息存储或传送过程中连续出现的多位错误 + * CRC码一般是指k位信息码之后拼接r位校验码 + * 模2运算 + * 模2加减 + * 模2乘除 + * 异或逻辑 + * CRC的译码与纠错 + * 更换不同的待测码字可以证明:余数与出错位的对应关系是不变,只与码制和生成多项式有关 + * 图 +## 第四章 主存储器 +### 主存储器处于全机中心低位 +### 辅助存储器或称为外存储器,通常用来存放主存的副本和当前不在运行的程序和数据 +### 主存储器的类型 +* 随机存储器RAM +* 非易失性存储器 +### 主存储器的主要技术指标 +* 主存容量 + * 64×8等等 + * 计算机可寻址的最小信息单元是一个存储字 + * 主存储器存储单元的总数 +* 存取速度 + * 由存储器存取时间和存储周期表示 +* 存储器存取时间 + * 启动一次存储器操作(读/写)到完成该操作所经历的时间 +* 存储周期 + * 连续启动两次独立的存储器操作所间隔的最小时间 +### 主存储器的基本操作 +* CPU通过使用AR(地址寄存器)和DR(数据寄存器)和主存进行数据传送 +* 若AR为K位字长,DR为n位字长,则允许主存包含2∧k个可寻址单元 +* CPU与主存采取异步工作方式,以ready信号表示一次访存操作的结束 +### 读/写存储器 +* 随机存储器(RAM)按存储元件在运行中能否长时间保存信息分为静态存储器和动态存储器 +* 静态存储器,利用触发器保存信息,只要不断电,信息就不会丢失 + * 电路简图 + * MOS静态存储结构图 +* 动态存储器,利用MOS电容存储电荷来保存信息,需要不断给电容充电才能使信息来保存信息 + * 电路简图 + * 16K×1位动态存储器框图 + * 再生 + * 集中式 + * 分散式 + * 时间小于或等于2ms + * 行读出再生 +### 非易失性半导体存储器 +* 只读存储器ROM + * 只读不能写 +* 可编程序的只读存储器PROM + * 一次性写入 +* 可擦可编程序的只读存储器EPROM + * 可多次写入、读出 +* 可电擦可编程序只读存储器E2PROM + * 可多次读出但写入次数有限 +* 快擦除读写存储器Flash Memory + * 重复写入、读出 +### 存储器的组成与控制 +* 存储器容量扩展 + * 位扩展:用多个存储器芯片对字长进行扩充 + * 字扩展:增加存储器中字的数量,提高存储器的寻址范围 + * 字位扩展,假设一个存储器的容量为M×N位,若使用L×K位存储器芯片,那么,这个存储器共需要(M/L)×(N/K)个存储器芯片 +### 多体交叉存储器 +* 提高访存速度的方式 + * 采用高速器件 + * 采用层次结构 + * 调整主存结构 +* 计算机中大容量的主存可由多个存储体组成,每个存储体都具有自己的读写线路,地址寄存器和数据寄存器,称为"存储模块"。这种多模块存储器可以实现重叠与交叉存取 +* 第i个模块M的地址编号应按下式给出:M×j+i +* 连续地址分布在相邻的不同模块内,而同一模块内的地址都是不连续的 +## 第五章:指令系统 +### 指令系统的发展 +* 20世纪70年代末人们提出了便于VLSI实现的精简指令系统计算机,简称RISC,同时将指令系统越来越复杂的计算机称为复杂指令系统计算机,简称CISC +### 指令格式 +* 结构(操作码+地址码) + * 操作码 + * 操作数的地址 + * 操作结果的存储地址 + * 下一条指令的地址 +* 地址码 + * 零地址指令 + * 一地址指令 + * 寻址范围 224 = 16 M + * 2次访存 + * 二地址指令 + * 寻址范围 212 = 4 K + * 4 次访存 + * 三地址指令 + * 寻址范围 28 = 256 + * 4 次访存 + * 多地址指令 + * 寻址范围 26 = 64 + * 4 次访存 +* 指令字长 + * 取决因素 + * 操作码的长度 + * 操作数地址的长度 + * 操作数地址的个数 + * 指令字长 固定 + * 指令字长 = 存储字长 + * 指令字长 可变 + * 按字节的倍数变化 + * 对准边界存放 + * 不连续存放数据 + * 按字节编址 + * a.半字地址最低位恒为0 + * b.字地址最低两位恒为0 + * c.双字地址的最低三位恒为0 + * 减少访存次数,浪费存储空间 + * 不 对 准 边 界 存 放 + * 连续存放数据 + * 节约存储器空间,但增加访存次数,对多字节数据存在调整高 低字节位置的问题 +* 寻址方式 + * 确定本条指令的数据地址 + * 下一条要执行的指令地址的方法 +* 指令操作码的扩展技术 + * 指令操作码的长度决定了指令系统中完成不同操作的指令数 + * 若某机器的操作码长度固定为K位,则它最多只能有2^K条不同指令 + * 指令操作码两种格式 + * 固定格式 + * 优点:对于简化硬件设计,减少指令译码时间非常有利 + * 缺点:指令少,浪费地址 + * 可变格式(分散地放在字的不同字段) + * 优点:指令多,缩短指令平均长度,减少程序总位数,增加指令字所能表示的操作信息 + * 缺点:译码复杂,控制器的设计难度增大 + * 拓展方法的一个重要原则 + * 使用频度(即指令在程序中出现概率)高的指令应分配短的操作码,使用频度低的指令相应地分配较长的操作码 +* 指令系统的兼容性 + * 保持系统向上兼容 +### 精简指令系统计算机(RISC)——用于小型机 +### 复杂指令系统计算机(CISC)——用于大型机 +## 第六章:中央处理器 +### 计算机工作过程 +* 加电——》产生reset信号——》执行程序——》停机——》停电 +* 产生reset信号的任务 + * 任务一:使计算机处于初始状态 + * 任务二:从PC中取出指令地址 +* 控制器作用是协调并控制计算机各部件执行程序的指令序列 +### 控制器的组成 +* 控制器的功能 + * 取指令 + * 发出指令地址,取出指令的内容 + * 分析指令 + * (1)对操作码译码产生操作相应部件的控制信号 + * (2)根据寻址方式形成操作数地址 + * 执行指令 + * (1)根据分析指令后产生控制信号、操作数地址信号序列,通过CPU及输入输出设备的执行实现每条指令的功能 + * (2)结果回送存储器 + * (3)形成下条指令的地址 + * 控制程序和数据的输入和结果输出 + * 对异常情况和某些请求的处理 + * 异常情况的处理:例如算术运算的溢出、数据传送奇偶错 + * 某些请求的处理 + * “中断请求”信号 + * DMA请求信号 +* 控制器的组成 + * 程序计数器(PC) + * 即地址寄存器,用来存放当前正在执行的指令地址或即将要执行的下一条指令地址 + * 指令寄存器(IR) + * 用以存放当前正在执行的指令,以便在指令执行过程中控制完成一条指令的全部功能 + * 指令译码器或操作码译码器 + * 对指令寄存器中的操作码进行分析解释,产生相应的控制信号 + * 脉冲源及启停线路 + * 脉冲源参数一定评率的脉冲作为整个机器的时钟脉冲,是机器周期和工作脉冲的基准信号,在机器刚加电时,还应产生一个总清信号(reset) + * 时序控制信号形成部件 + * 当程序启动后,在CLK时钟作用下,根据当前正在执行的指令的需要,产生相应的时序控制信号,并根据被控制功能部件的反馈信号调整时序控制信号 + * 控制存储器 + * 微指令寄存器 + * 控制字段+下址 + * 周期概念 + * 指令周期 + * 完成一条指令所需的时间,包括取指令、分析指令、执行指令 + * 机器周期 + * 也称为CPU周期,是CPU从内存中读取一个指令的时间,通常等于取指周期 + * 时钟周期 + * 称为节拍脉冲或T周期,是基准脉冲信号 + * 三条假设 + * 程序是存放在主存中的,当执行完一条指令后才从主存中取下一条指令(非流水线) + * 指令的长度是固定的,并限制了寻址方式的多样化 + * 在程序运行前,程序和数据都已存在主存中 +* 指令执行过程(运算器和控制器配合) + * 组成控制器的基本电路 + * 具有记忆功能的触发器以及由它组成的寄存器,计数器和存储单元 + * 没有记忆功能的门电路及由它组成的加法器,算术逻辑运算单元(ALU)和各种逻辑电路 + * 举例 + * 加法 + * 取指令——》计算操作数地址——》取操作数——》执行结果并运算送结果 + * 要能看懂时序图 + * 哪些指令在对应的时间有效 + * 条件转移指令 + * 取指令——》计算地址 + * 控制器的功能就是按每一条指令的要求产生所需的控制信号 + * 产生控制信号的方法 + * 微程序控制 + * 硬布线控制 +### 微程序控制计算机的基本工作原理 +* 基本概念 + * 微指令 + * 在微程序控制的计算机中,将由同时发出的控制信号所执行的一组微操作 + * 微命令 + * 将指令分为若干条微指令,按次序执行这些微指令。组成微指令的操作即微命令 + * 微程序 + * 计算机的程序由指令序列构成,而计算机每条指令的功能均由微指令序列解释完成,这些微指令序列的集合就叫做微程序 + * 控制存储器 + * 微程序一般是存放在专门的存储器中的,由于该存储器主要存放控制命令(信号)与下一条执行的微指令地址(简称下址) + * 存储单元内容 + * (1)微指令的控制信号——控制位 + * (2)下条微指令的地址——下址字段 + * 存储芯片:ROM + * 执行一条指令实际上就是执行一段存放在控制存储器中的微程序 +* 实现微程序控制的基本原理 + * 控制信号(23条) + * 书上P123页为加法的过程 + * 微指令格式:控制字段+下址字段 + * 23个控制位,12个下址位——》容量为4K + * 取址微指令的操作对所有指令都是相同的,所以是一条公用的微指令,其下址由操作码译码产生 +* 微程序控制器 +* 时序信号及工作脉冲的形成 +* 停机和停电的区别 + * 停机 + * 电压:稳定 + * 存放内容:保持 + * 重启PC内容:断点指令地址 + * 停电 + * 电压:消失 + * 存放内容:RAM的内容消失 + * 重启PC内容:第一条指令地址 +### 微程序设计技术 +* 如何缩短微指令字长 + * 直接控制法(容量太小) + * 编译方法:每一位代表一个控制信号,直接送往相应的控制点 + * 优点:控制简单 + * 缺点:微指令字长过大 + * 字段直接编译法 + * 选出互斥的微指令 + * 每个字段都要留出一个代码,表示本段不发出任何指令(000) + * 优点:节省微指令的字长 + * 缺点:增加了额外的硬件开销 + * 字段间接编译法 + * 指令之间相互联系的情况 + * 举例:A为0-7,B为0-3,如果是直接编译——3+2=5,如果是间接编译——3+1=4 + * 编码方法:在字段直接编译法中,译码输出端要兼由另一字段中的某些微命令配合解释 + * 优点:减少了微指令长度 + * 缺点:可能削弱微指令的并行控制能力,同时增加硬件开销 + * 常熟源字段E(了解) +* 如何减少微指令长度 + * 现行微指令/微地址 + * 现行微指令:当前正在执行的指令 + * 现行微地址:存放现行微指令的控制器存储单元 + * 后继微指令/微地址 + * 后继微指令:下一条要执行的微指令 + * 后继微地址:存放后继微指令的控制器存储单元 + * 增量与下址字段结合产生后继微指令的方法 + * 下址字段分成:转移控制字段BCF和转移地址字段BAF + * BCF:控制微程序的转移情况 + * BAF:转移后的微指令所在地址 + * BAF有两种情况 + * 与uPC的位数相等——转移灵活,但增加微指令长度 + * 比uPC短——转移地址收到限制,但可缩短微指令长度 + * 优点 + * 微指令的下址字段很短,仅用于选择输入uPC计数器的某条线路有效 + * 缺点 + * 微程序转移不灵活,使得微程序在控存中的物理空间分配有困难 + * 多路转移方式 + * 一条微指令存在多个转移分支的情况称为多路转移 + * 微中断 + * 1.微中断请求信号是由程序中断请求信号引起的 + * 2.在完成现行指令的微程序后响应该微中断请求 + * 3.由硬件产生对应微中断处理程序在控存中的入口地址 +* 如何提高微程序的执行速度 +* 微指令格式 + * 水平型微指令——直接控制,字段编译(直接、间接) + * 特点:在一条微指令中定义并并行执行多个微命令 + * 垂直型微指令 + * 特点:不强调实现微指令的并行控制功能 + * 定义:采用微操作码编译法,由操作码规定微指令的功能 +* 微程序控制存储器 + * 一般采用ROM存储器 + * 也可采用RAM,为防止断电后内容消失,则必须开机后将外存中存放的微程序调入控存RAM,然后才能执行程序。 + * 当前为了能不断扩展指令系统,通常采用ROM+RAM +* 动态微程序设计 + * 定义:能根据用户要求改变微程序 + * 优点:是计算机能更灵活、有效的适应于各种不同的应用目标 +* 控制存储器的操作(P136) + * 串行方式 + * 并行方式——比串行多了微指令寄存器 + * 微周期=max(取微指令时间,执行微指令时间) + * 由于取微指令、执行微指令同时进行,故对于某些后继微地址的产生根据处理结果而定的微指令,则延迟一个微周期再取微指令 +### 硬布线控制的计算机(RISC)——特点快 +* 形成操作控制信号的逻辑框图(P141) +* 操作控制信号的产生 + * 取值周期cy1所产生的信号对所有指令都是相同的,即与当前执行的指令无关,逻辑式得到最简单的形式 + * 通常,同一个控制控制信号在若干条指令的某些周期(或再加上一些条件)中都需要,为此需要把它们组合起来 + * 同种类型的指令所需要的控制信号大部分是相同的,仅有少量区别 + * 在确定指令的操作码时(即对具体指令赋予二进制操作码),为了便于逻辑表达式的化简以减少逻辑电路数量,往往给予特别关注 +* 设计组合逻辑电路从而产生需要的控制信号的步骤 + * 1.实际逻辑问题2.真值表3.公式化简4.逻辑电路图 +* 设计目标 + * 使用最少的电路元件达到最高的操作速度 +### 流水线工作原理 +* 几点结论 + * 每条指令的执行时间不变 + * 每条指令处理结果的时间缩短 + * 流水线处理速率最高时=流水线处于满载的稳定状态 + * 流水线处理速率最低时=流水线未满载状态 + * 为了满足在重叠时间段不同指令的机器周期能够完成指定的操作,将时间段=操作完成的最长时间 + * 为了保证一个周期内流水线的输入信号不变,相邻时间段之间必须设置锁存器或寄存器 + * 除了指令执行流水线,还有运算操作流水线 +* 相关问题 + * 流水线阻塞(P163-6.15) + * 数据相关产生 + * 假设第二条指令需要的操作数是第一条指令运算的结果,那么出现了数据相关 + * 指令执行时间不同产生 + * 程序转移的影响 + * 异常情况响应中断 +## 第七章:存储系统 +### 存储系统的层次结构 +* cache->主存->辅存 +### 高速缓冲存储器 +* cache的工作原理 + * 局部性原理 + * 主存地址和cache地址(P166 图7.2) + * 块长 + * 块长一般取一个主存周期所能调出的信息长度(一般为16个字) + * cache的容量和块的大小是影响cache的效率的重要因素 + * 命中率 + * CPU所要访问的信息是否在cache中的比率,而将所要访问的信息不在cache中的比率称为失败率 + * 一致性策略 + * 标志交换方式(写回法) + * 通过式写入(写通法) + * 写操作直接对主存进行,而不写入cache + * cache的存取时间 + * 平均存取时间=h*tc+(1-h)(tc+tm) + * 最好替换策略 + * 按照被替换的字块是下一段时间最少使用的,由替换部件实现 +* cache组织 + * 地址映像 + * 直接映像 + * cache中许多空的位置被浪费 + * 主存地址:主存字块标记+cache字块地址+字块内地址 + * 全相联映像 + * 成本太高而不能采用 + * 主存地址:主存字块标记+字块内地址 + * 优点 + * 方式灵活,缩小了块发生冲突的概率 + * 缺点 + * 增加了标识位位数 + * 增加了寻找主存块在cache中对应块的时间 + * 组相联映像 + * 直接映像和全相联映像的折衷 + * 主存地址:主存字块标记+组地址+块内地址 +### 虚拟存储器 +* 存储管理部件(MMU) + * 现代计算机一般都有辅助存储器,但具有辅存的存储系统不一定是虚拟存储系统 + * 虚拟存储系统的特点 + * 允许用户程序用比主存大的多的空间来访问主存 + * 每次访存都要进行虚实地址的转换 +## 第八章:辅助存储器 +### 半导体存储器可随机访问任一单元,而辅助存储器一般为串行访问存储器 +### 辅助存储器的种类 +* 磁表面存储器 + * 数字式磁记录 + * 硬盘、软盘和磁带 + * 模拟式磁记录 + * 录音、录像设备 +* 光存储器 + * 光盘 +### 串行存储器 +* 顺序存取存储器 +* 直接存取存储器 +### 辅助存储器的技术指标 +* 存储密度 + * 定义:单位长度或单位面积磁层表面磁层所存储的二进制信息量 + * 道密度 + * 沿磁盘半径方向单位长度的磁道数称为道密度,单位为道/英寸tpi或道/毫米tpmm + * 位密度或线密度 + * 单位长度磁道所能记录二进制信息的位数叫位密度或线密度,单位为位/英寸bpi或位/毫米bpmm + * 每个磁道所存储的信息量是一样的 +* 存储容量 + * C = n × k × s +* 寻址时间 + * 平均寻址时间Ta=平均找道时间Ts+平均等待时间Tw + * 辅存的速度 + * 寻址时间 + * 磁头读写时间 +* 数据传输率 + * Dr = D × V +* 误码率 +* 价格 +### 硬磁盘存储器的类型 +* (1) 固定磁头和移动磁头 +* (2) 可换盘和固定盘 +### 磁盘存储器 +* 温彻斯特磁盘简称温盘 +* 磁盘存储器由驱动器(HDD),控制器(HDC)和盘片组成 +* 最外面的同心圆叫0磁道,最里面的同心圆假设称为n磁道 +* 驱动器的定位驱动系统实现快速精准的磁头定位 +* 主轴系统的作用是带动盘片按额定转速稳定旋转 +* 数据控制系统的作用是控制数据的写入和读出,包括寻址,磁头旋转,写电流控制,读出放大,数据分离 +* 磁盘控制器有两个方向的接口 + * 与主机的接口 + * 与驱动器(设备)的接口 +### 光盘 +* 采用光存储技术 + * 利用激光写入和读出 + * 第一代光存储技术 + * 采用非磁性介质 + * 不可擦写 + * 第二代光存储技术 + * 采用磁性介质 + * 可擦写 +* 光盘的存储原理 + * 只读型和只写一次型 + * 热作用(物理或化学变化) + * 可擦写光盘 + * 热磁效应 +## 第九/十章:输出输出(I/O)设备/系统 +### 设备控制器(I/O)的基本功能 +* 实现主机和外部设备之间的数据传送 +* 实现数据缓冲,以达到主机同外部设备之间的速度匹配 +* 接受主机的命令,提供设备接口的设备,并按照主机的命令控制设备 +### I/O 编址方式 +* (1) 统一编址:用取数、存数指令 +* (2) 不统一编址:有专门的 I/O 指令 +### I/O 与主机的连接方式 +* 辐射式连接 + * 每台设备都配有一套 + * 控制线路和一组信号线 + * 不便于增删设备 +* 总线连接 + * 便于增删设备 +### I/O设备 +* 人机交互设备 + * 键盘、鼠标等 +* 计算机信息的驻留设备 + * 硬盘、光盘等 +* 机——机通信设备 + * MODEN等 +### 为什么要设置接口? +* 1. 实现设备的选择 +* 2. 实现数据缓冲达到速度匹配 +* 3. 实现数据串 并格式转换 +* 4. 实现电平转换 +* 5. 传送控制命令 +* 6. 反映设备的状态 + * (“忙”、“就绪”、“中断请求”) +### 中断服务程序的流程 +* (1) 保护现场 + * 程序断点的保护 + * 寄存器内容的保护 +* (2) 中断服务 + * 对不同的 I/O 设备具有不同内容的设备服务 +* (3) 恢复现场 + * 出栈指令 +* (4) 中断返回 + * 中断返回指令 +### 单重中断和多重中断 +* 单重 中断 + * 不允许中断 现行的 中断服务程序 +* 多重 中断 + * 允许级别更高 的中断源 + * 中断 现行的 中断服务程序 +### DMA 方式 +* 主存和 I/O 之间有一条直接数据通道 +* CPU 和 I/O 并行工作 +* DMA 的三种工作方式 + * (1) CPU暂停方式 + * (2) CPU周期窃取方式 + * (3)直接访问存储器 +* DMA 接口功能 + * (1) 向 CPU 申请 DMA 传送 + * (2) 处理总线 控制权的转交 + * (3) 管理 系统总线、控制 数据传送 + * (4) 确定 数据传送的 首地址和长度,修正 传送过程中的数据地址和长度 + * (5) DMA 传送结束时,给出操作完成信号 +* DMA 传送过程 + * 预处理、数据传送、后处理 +### 外设接口 +* 设备与主机相连时,必须按照规定的物理互连特性、电气特性等进行连接,这些特性的技术规范称为接口标准 + +![计算机组成原理思维导图图片](https://img-blog.csdn.net/20180620085759852?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Nhb3lhbmdfSGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) diff --git a/计算机组成.png b/计算机组成原理/计算机组成.png similarity index 100% rename from 计算机组成.png rename to 计算机组成原理/计算机组成.png diff --git a/计算机组成.xmind b/计算机组成原理/计算机组成.xmind similarity index 100% rename from 计算机组成.xmind rename to 计算机组成原理/计算机组成.xmind diff --git a/计算机网络/第 1 章 概述/第 1 章 概述.md b/计算机网络/第 1 章 概述/第 1 章 概述.md new file mode 100644 index 0000000..dd2735c --- /dev/null +++ b/计算机网络/第 1 章 概述/第 1 章 概述.md @@ -0,0 +1,256 @@ +# 第 1 章 概述 +## 计算机网络在信息时代中的作用 +### 21 世纪的一些重要特征就是数字化、网络化和信息化,它是一个以网络为核心的信息时代。 +### 网络现已成为信息社会的命脉和发展知识经济的重要基础。 +### 网络是指“三网”,即电信网络、有线电视网络和计算机网络。 +### 发展最快的并起到核心作用的是计算机网络。 +### 因特网(Internet)的发展 +* 进入 20 世纪 90 年代以后,以因特网为代表的计算机网络得到了飞速的发展。 +* 已从最初的教育科研网络逐步发展成为商业网络。 +* 已成为仅次于全球电话网的世界第二大网络。 +### 因特网的意义 +* 因特网是自印刷术以来人类通信方面最大的变革。 +* 现在人们的生活、工作、学习和交往都已离不开因特网。 +## 因特网概述 +### 网络的网络 +* 起源于美国的因特网现已发展成为世界上最大的国际性计算机互联网 +* 网络(network)由若干结点(node)和连接这些结点的链路(link)组成。 +* 互联网是“网络的网络”(network of networks)。 +* 连接在因特网上的计算机都称为主机(host)。 +* 网络与因特网 + * 网络把许多计算机连接在一起。 + * 因特网则把许多网络连接在一起。 +### 因特网发展的三个阶段 +* 第一阶段是从单个网络 ARPANET 向互联网发展的过程。 + * 1983 年 TCP/IP 协议成为 ARPANET 上的标准协议。 + * 人们把 1983 年作为因特网的诞生时间。 +* 第二阶段的特点是建成了三级结构的因特网。 + * 三级计算机网络,分为主干网、地区网和校园网(或企业网)。 +* 第三阶段的特点是逐渐形成了多层次 ISP 结构的因特网。 + * 出现了因特网服务提供者 ISP (Internet Service Provider)。 + * 根据提供服务的覆盖面积大小以及所拥有的IP 地址数目的不同,ISP 也分成为不同的层次。 +### 因特网的标准化工作 +* 制订因特网的正式标准要经过以下的四个阶段 + * 因特网草案(Internet Draft) ——在这个阶段还不是 RFC 文档。 + * 建议标准(Proposed Standard) ——从这个阶段开始就成为 RFC 文档。 + * 草案标准(Draft Standard) + * 因特网标准(Internet Standard) +* 各种RFC之间的关系 +### 计算机网络在我国的发展 +## 因特网的组成 +### 因特网的边缘部分 +* 由所有连接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。 + * 处在因特网边缘的部分就是连接在因特网上的所有的主机。这些主机又称为端系统(end system)。 + * “主机 A 和主机 B 进行通信”,实际上是指:“运行在主机 A 上的某个程序和运行在主机 B 上的另一个程序进行通信”。 + * 即“主机 A 的某个进程和主机 B 上的另一个进程进行通信”。或简称为“计算机之间通信” +### 因特网的核心部分 +* 由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换) + * 网络核心部分是因特网中最复杂的部分。 + * 网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)。 + * 在网络核心部分起特殊作用的是路由器(router)。 + * 路由器是实现分组交换(packet switching)的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。 + * 在路由器中的输入和输出端口之间没有直接连线。 + * 路由器处理分组的过程是: + * 把收到的分组先放入缓存(暂时存储); + * 查找转发表,找出到某个目的地址应从哪个端口转发; + * 把分组送到适当的端口转发出去。 + * 路由器是实现分组交换(packet switching)的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。 +## 计算机网络在我国的发展 +### (1) 中国公用计算机互联网 CHINANET +### (2) 中国教育和科研计算机网 CERNET +### (3) 中国科学技术网 CSTNET +### (4) 中国联通互联网 UNINET +### (5) 中国网通公用互联网 CNCNET +### (6) 中国国际经济贸易互联网 CIETNET +### (7) 中国移动互联网 CMNET +### (8) 中国长城互联网 CGWNET(建设中) +### (9) 中国卫星集团互联网 CSNET(建设中) +## 计算机网络的类别 +### 计算机网络的定义 +* 最简单的定义:计算机网络是一些互相连接的、自治的计算机的集合。 +* 因特网(Internet)是“网络的网络”。 +### 几种不同类别的网络 +* 不同作用范围的网络 + * 广域网 WAN (Wide Area Network) + * 局域网 LAN (Local Area Network) + * 城域网 MAN (Metropolitan Area Network) + * 个人区域网 PAN (Personal Area Network) +* 从网络的使用者进行分类 + * 公用网 (public network) + * 专用网 (private network) +## 计算机网络的性能 +### 计算机网络的性能指标 +* 速率 + * 比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。 + * Bit 来源于 binary digit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个 1 或 0。 + * 速率即数据率(data rate)或比特率(bit rate)是计算机网络中最重要的一个性能指标。速率的单位是 b/s,或kb/s, Mb/s, Gb/s 等 + * 速率往往是指额定速率或标称速率。 +* 带宽 + * “带宽”(bandwidth)本来是指信号具有的频带宽度,单位是赫(或千赫、兆赫、吉赫等)。 + * 现在“带宽”是数字信道所能传送的“最高数据率”的同义语,单位是“比特每秒”,或 b/s (bit/s)。 + * 常用的带宽单位 + * 更常用的带宽单位是 + * 千比每秒,即 kb/s (103 b/s) + * 兆比每秒,即 Mb/s(106 b/s) + * 吉比每秒,即 Gb/s(109 b/s) + * 太比每秒,即 Tb/s(1012 b/s) + * 请注意:在计算机界,K = 210 = 1024 + * M = 220, G = 230, T = 240。 + * 数字信号流随时间的变化 + * 在时间轴上信号的宽度随带宽的增大而变窄。 +* 吞吐量 + * 吞吐量(throughput)表示在单位时间内通过某个网络(或信道、接口)的数据量。 + * 吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。 + * 吞吐量受网络的带宽或网络的额定速率的限制。 +* 时延(delay 或 latency) + * 传输时延(发送时延 ) 发送数据时,数据块从结点进入到传输媒体所需要的时间。 + * 也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。 + * 传播时延 电磁波在信道中需要传播一定的距离而花费的时间。 + * 信号传输速率(即发送速率)和信号在信道上的传播速率是完全不同的概念。 + * 处理时延 交换结点为存储转发而进行一些必要的处理所花费的时间。 + * 排队时延 结点缓存队列中分组排队所经历的时延。 + * 排队时延的长短往往取决于网络中当时的通信量。 + * 数据经历的总时延就是发送时延、传播时延、处理时延和排队时延之和: +* 时延带宽积 + * 链路的时延带宽积又称为以比特为单位的链路长度。 +* 利用率 + * 信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。 + * 网络利用率则是全网络的信道利用率的加权平均值。 + * 信道利用率并非越高越好。 +* 时延与网络利用率的关系 + * 根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。 + * 若令 D0 表示网络空闲时的时延,D 表示网络当前的时延,则在适当的假定条件下,可以用下面的简单公式表示 D 和 D0之间的关系: + * U 是网络的利用率,数值在 0 到 1 之间。 +### 计算机网络的非性能特征 +* 费用 +* 质量 +* 标准化 +* 可靠性 +* 可扩展性和可升级性 +* 易于管理和维护 +## 计算机网络的体系结构 +### 计算机网络体系结构的形成 +* 相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。 +* “分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。 +### 协议与划分层次 +* 划分层次的必要性 + * 计算机网络中的数据交换必须遵守事先约定好的规则。 + * 这些规则明确规定了所交换的数据的格式以及有关的同步问题(同步含有时序的意思)。 + * 网络协议(network protocol),简称为协议,是为进行网络中的数据交换而建立的规则、标准或约定。 +* 网络协议的组成要素 + * 语法 数据与控制信息的结构或格式 。 + * 语义 需要发出何种控制信息,完成何种动作以及做出何种响应。 + * 同步 事件实现顺序的详细说明。 +* 分层的好处 + * 各层之间是独立的。 + * 灵活性好。 + * 结构上可分割开。 + * 易于实现和维护。 + * 能促进标准化工作。 +### 具有五层协议的体系结构 +* TCP/IP 是四层的体系结构:应用层、运输层、网际层和网络接口层。 +* 但最下面的网络接口层并没有具体内容。 +* 因此往往采取折中的办法,即综合 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构 。 +### 实体、协议、服务和服务访问点 +* 实体(entity) 表示任何可发送或接收信息的硬件或软件进程。 +* 协议是控制两个对等实体进行通信的规则的集合。 +* 在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。 +* 要实现本层协议,还需要使用下层所提供的服务。 +* 本层的服务用户只能看见服务而无法看见下面的协议。 +* 下面的协议对上面的服务用户是透明的。 +* 协议是“水平的”,即协议是控制对等实体之间通信的规则。 +* 服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。 +* 同一系统相邻两层的实体进行交互的地方,称为服务访问点 SAP (Service Access Point)。 +* 协议必须把所有不利的条件事先都估计到,而不能假定一切都是正常的和非常理想的。 +* 看一个计算机网络协议是否正确,不能光看在正常情况下是否正确,而且还必须非常仔细地检查这个协议能否应付各种异常情况。 +### TCP/IP 的体系结构 +## Internet 和 Internet 的区别 +### 以小写字母 i 开始的 internet(互联网或互连网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。 +### 以大写字母I开始的的 Internet(因特网)则是一个专用名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用 TCP/IP 协议族作为通信的规则,且其前身是美国的 ARPANET。 +## 万维网 WWW 的问世 +### 因特网已经成为世界上规模最大和增长速率最快的计算机网络,没有人能够准确说出因特网究竟有多大。 +### 因特网的迅猛发展始于 20 世纪 90 年代。由欧洲原子核研究组织 CERN 开发的万维网 WWW (World Wide Web)被广泛使用在因特网上,大大方便了广大非网络专业人员对网络的使用,成为因特网的这种指数级增长的主要驱动力。 +## 两种通信方式 +### 客户服务器方式(C/S 方式) 即Client/Server方式 +* 客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。 +* 客户服务器方式所描述的是进程之间服务和被服务的关系。 +* 客户是服务的请求方,服务器是服务的提供方。 +### 对等方式(P2P 方式) 即 Peer-to-Peer方式 +* 对等连接(peer-to-peer,简写为 P2P)是指两个主机在通信时并不区分哪一个是服务请求方还是服务提供方。 +* 只要两个主机都运行了对等连接软件(P2P 软件),它们就可以进行平等的、对等连接通信。 +* 双方都可以下载对方已经存储在硬盘中的共享文档。 +* 对等连接方式的特点 + * 对等连接方式从本质上看仍然是使用客户服务器方式,只是对等连接中的每一个主机既是客户又同时是服务器。 + * 例如主机 C 请求 D 的服务时,C 是客户,D 是服务器。但如果 C 又同时向 F提供服务,那么 C 又同时起着服务器的作用。 +## 客户软件的特点 +### 被用户调用后运行,在打算通信时主动向远地服务器发起通信(请求服务)。因此,客户程序必须知道服务器程序的地址。 +### 不需要特殊的硬件和很复杂的操作系统。 +## 服务器软件的特点 +### 一种专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。 +### 系统启动后即自动调用并一直不断地运行着,被动地等待并接受来自各地的客户的通信请求。因此,服务器程序不需要知道客户程序的地址。 +### 一般需要强大的硬件和高级的操作系统支持。 +## 因特网的边缘部分与核心部分 +## 电路交换 +### 两部电话机只需要用一对电线就能够互相连接起来。 +### 更多的电话机互相连通 +* 5 部电话机两两相连,需 10 对电线。 +* N 部电话机两两相连,需 N(N – 1)/2 对电线。 +* 当电话机的数量很大时,这种连接方法需要的电线对的数量与电话机数的平方成正比。 +### 使用交换机 +* 当电话机的数量增多时,就要使用交换机来完成全网的交换任务。 +### 电路交换的特点 +* 电路交换必定是面向连接的。 +* 电路交换的三个阶段: + * 建立连接 + * 通信 + * 释放连接 +* 电路交换传送计算机数据效率低 + * 计算机数据具有突发性。 + * 这导致通信线路的利用率很低。 +## 分组交换 +### 在发送端,先把较长的报文划分成较短的、固定长度的数据段。 +### 添加首部构成分组 +* 每一个数据段前面添加上首部构成分组 +### 分组交换的传输单元 +* 分组交换网以“分组”作为数据传输单元。 +* 依次把各分组发送到接收端(假定接收端在左边) +### 分组首部的重要性 +* 每一个分组的首部都含有地址等控制信息。 +* 分组交换网中的结点交换机根据收到的分组的首部中的地址信息,把分组转发到下一个结点交换机。 +* 用这样的存储转发方式,最后分组就能到达最终目的地。 +### 收到分组后剥去首部 +* 接收端收到分组后剥去首部还原成报文 +### 最后还原成原来的报文 +### 分组交换的优点 +* 高效 动态分配传输带宽,对通信链路是逐段占用。 +* 灵活 以分组为传送单位和查找路由。 +* 迅速 不必先建立连接就能向其他主机发送分组。 +* 可靠 保证可靠性的网络协议;分布式的路由选择协议使网络有很好的生存性。 +### 分组交换带来的问题 +* 分组在各结点存储转发时需要排队,这就会造成一定的时延。 +* 分组必须携带的首部(里面有必不可少的控制信息)也造成了一定的开销。 +## 三种交换的比较 +## 关于开放系统互连参考模型OSI/RM +### 只要遵循 OSI 标准,一个系统就可以和位于世界上任何地方的、也遵循这同一标准的其他任何系统进行通信。 +### 在市场化方面 OSI 却失败了。 +* OSI 的专家们在完成 OSI 标准时没有商业驱动力; +* OSI 的协议实现起来过分复杂,且运行效率很低; +* OSI 标准的制定周期太长,因而使得按 OSI 标准生产的设备无法及时进入市场; +* OSI 的层次划分并也不太合理,有些功能在多个层次中重复出现。 +## 两种国际标准 +### 法律上的(de jure)国际标准 OSI 并没有得到市场的认可。 +### 是非国际标准 TCP/IP 现在获得了最广泛的应用。 +### TCP/IP 常被称为事实上的(de facto) 国际标准。 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 +## 主机 1 向主机 2 发送数据 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/计算机网络/第 1 章 概述/第 1 章 概述.png b/计算机网络/第 1 章 概述/第 1 章 概述.png new file mode 100644 index 0000000..cb42e7b Binary files /dev/null and b/计算机网络/第 1 章 概述/第 1 章 概述.png differ diff --git a/计算机网络/第 1 章 概述/第 1 章 概述.xmind b/计算机网络/第 1 章 概述/第 1 章 概述.xmind new file mode 100644 index 0000000..f48ea64 Binary files /dev/null and b/计算机网络/第 1 章 概述/第 1 章 概述.xmind differ diff --git a/计算机网络/第 2 章 物理层/第 2 章 物理层.md b/计算机网络/第 2 章 物理层/第 2 章 物理层.md new file mode 100644 index 0000000..2edf7c5 --- /dev/null +++ b/计算机网络/第 2 章 物理层/第 2 章 物理层.md @@ -0,0 +1,94 @@ +# 第 2 章 物理层 +## 物理层的基本概念 +### 物理层的主要任务描述为确定与传输媒体的接口的一些特性 +* 机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 +* 电气特性 指明在接口电缆的各条线上出现的电压的范围。 +* 功能特性 指明某条线上出现的某一电平的电压表示何种意义。 +* 过程特性 指明对于不同功能的各种可能事件的出现顺序。 +## 数据通信的基础知识 +### 数据通信系统的模型 +* +### 有关信道的几个基本概念 +* 单向通信(单工通信)——只能有一个方向的通信而没有反方向的交互。 +* 双向交替通信(半双工通信)——通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。 +* 双向同时通信(全双工通信)——通信的双方可以同时发送和接收信息。 +* 几种最基本的调制方法 + * 调幅(AM):载波的振幅随基带数字信号而变化。 + * 调频(FM):载波的频率随基带数字信号而变化。 + * 调相(PM) :载波的初始相位随基带数字信号而变化。 + * 概要: 图片 +### 信道的极限容量 +* 信道能够通过的频率范围 + * 1924 年,奈奎斯特(Nyquist)就推导出了著名的奈氏准则。他给出了在假定的理想条件下,为了避免码间串扰,码元的传输速率的上限值 +* 信噪比 + * 香农(Shannon)用信息论的理论推导出了带宽受限且有高斯白噪声干扰的信道的极限、无差错的信息传输速率。 +信道的极限信息传输速率 C 可表达为 +C = W log2(1+S/N) b/s +W 为信道的带宽(以 Hz 为单位); +S 为信道内所传信号的平均功率; +N 为信道内部的高斯噪声功率。 + * 香农公式表明 + * 信道的带宽或信道中的信噪比越大,则信息的极限传输速率就越高。 + * 只要信息传输速率低于信道的极限信息传输速率,就一定可以找到某种办法来实现无差错的传输。 + * 若信道带宽 W 或信噪比 S/N 没有上限(当然实际信道不可能是这样的),则信道的极限信息传输速率 C 也就没有上限。 + * 实际信道上能够达到的信息传输速率要比香农的极限传输速率低不少。 +### 信道的极限信息传输速率 +## 物理层下面的传输媒体 +### 导向传输媒体 +* 双绞线 + * 屏蔽双绞线 STP (Shielded Twisted Pair) + * 无屏蔽双绞线 UTP (Unshielded Twisted Pair) +* 同轴电缆 + * 50 Ω同轴电缆 + * 75 Ω 同轴电缆 +* 光缆 + * 光纤的工作原理 + * 光线在纤芯中传输的方式是不断地全反射 +### 非导向传输媒体 +* 无线传输所使用的频段很广。 +* 短波通信主要是靠电离层的反射,但短波信道的通信质量较差。 +* 微波在空间主要是直线传播。 + * 卫星通信 + * 地面微波接力通信 +## 信道复用技术 +### 频分复用、时分复用和统计时分复用 +* 频分复用 FDM(Frequency Division Multiplexing) + * 用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。 + * 示意图 +* 时分复用TDM(Time Division Multiplexing) + * 时分复用则是将时间划分为一段段等长的时分复用帧(TDM 帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。 + * 示意图 +* 统计时分复用 STDM (Statistic TDM) + * 是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。 + * 示意图 +### 波分复用 +* 波分复用 WDM(Wavelength Division Multiplexing) + * 光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。 +### 码分复用 +* 码分复用 CDM(Code Division Multiplexing) + * 常用的名词是码分多址 CDMA (Code Division Multiple Access)。 + * 各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。 + * 这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。 + * 每一个比特时间划分为 m 个短的间隔,称为码片(chip)。 + * 具体内容 + * 1.为每个用户分配 m bit 的码片,并且所有的码片正交,对于任意两个码片 S 和 T 有 + * 2.为了讨论方便,取 m=8,设码片 s 为 00011011。在拥有该码片的用户发送比特 1 时就发送该码片,发送比特 0 时就发送该码片的反码 11100100。 + +在计算时将 00011011 记作 (-1 -1 -1 +1 +1 -1 +1 +1),可以得到(其中 S' 为 S 的反码。) + * 3.利用上面的式子我们知道,当接收端使用码片 对接收到的数据进行内积运算时,结果为 0 的是其它用户发送的数据,结果为 1 的是用户发送的比特 1,结果为 -1 的是用户发送的比特 0。 + * 码分复用需要发送的数据量为原先的 m 倍。 +## 数字传输系统 +### 脉码调制 PCM 体制 +### 同步光纤网 SONET 和同步数字系列 SDH +## 宽带接入技术 +### xDSL技术 +* xDSL 技术就是用数字技术对现有的模拟电话用户线进行改造,使它能够承载宽带业务。把 0~4 kHz 低端频谱留给传统电话使用,而把原来没有被利用的高端频谱留给用户上网使用。 +### 光纤同轴混合网(HFC 网) +* HFC 网是在目前覆盖面很广的有线电视网 CATV 的基础上开发的一种居民宽带接入网。HFC 网除可传送 CATV 外,还提供电话、数据和其他宽带交互型业务。 +### FTTx 技术 +* FTTx(光纤到……)也是一种实现宽带居民接入网的方案。这里字母 x 可代表不同意思。 + * 光纤到家 FTTH (Fiber To The Home):光纤一直铺设到用户家庭可能是居民接入网最后的解决方法。 + * 光纤到大楼 FTTB (Fiber To The Building):光纤进入大楼后就转换为电信号,然后用电缆或双绞线分配到各用户。 + * 光纤到路边 FTTC (Fiber To The Curb):从路边到各用户可使用星形结构双绞线作为传输媒体。 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/计算机网络/第 2 章 物理层/第 2 章 物理层.png b/计算机网络/第 2 章 物理层/第 2 章 物理层.png new file mode 100644 index 0000000..fe65812 Binary files /dev/null and b/计算机网络/第 2 章 物理层/第 2 章 物理层.png differ diff --git a/计算机网络/第 2 章 物理层/第 2 章 物理层.xmind b/计算机网络/第 2 章 物理层/第 2 章 物理层.xmind new file mode 100644 index 0000000..631c28e Binary files /dev/null and b/计算机网络/第 2 章 物理层/第 2 章 物理层.xmind differ diff --git a/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.md b/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.md new file mode 100644 index 0000000..1a0c4df --- /dev/null +++ b/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.md @@ -0,0 +1,144 @@ +# 第 3 章 数据链路层 +## 使用点对点信道的数据链路层 +### 数据链路和帧 +* 数据链路层使用的信道主要有以下两种类型: + * 点对点信道。这种信道使用一对一的点对点通信方式。 + * 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发 +* 数据链路层模型 +* 链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。 +* 数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。 +* 数据链路层传送的是帧 +### 三个基本问题 +* (1) 封装成帧 + * 将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。 + * +* (2) 透明传输 + * 透明表示一个实际存在的事物看起来好像不存在一样。 + * 帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。 + * +* (3) 差错控制 + * 循环冗余检验 CRC +目前数据链路层广泛使用了循环冗余检验(CRC)来检查比特差错。 + * 帧检验序列 FCS +在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。 + * 冗余码的计算 + * 例子: +现在 k = 6, M = 101001。 +设 n = 3, 除数 P = 1101, +被除数是 2^nM = 101001000。 +模 2 运算的结果是:商 Q = 110101, + 余数 R = 001。 +把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2^nM + R + 即:101001001,共 (k + n) 位。 + + * 概要: CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。 +FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。 +## 点对点协议 PPP +### PPP 协议的特点 +* 互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。 +### PPP 协议的帧格式 +* 示意图: +F 字段为帧的定界符 +A 和 C 字段暂时没有意义 +FCS 字段是使用 CRC 的检验序列 +信息部分的长度不超过 1500 +### PPP 协议的工作状态 +* 过程: +当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。 +PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。 +这些分组及其响应选择一些 PPP 参数,和进行网络层配置,NCP 给新接入的 PC机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。 +通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。 +## 使用广播信道的数据链路层 +### 局域网的数据链路层 +* 局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。 +* 主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。 +* 可以按照网络拓扑结构对局域网进行分类: + * 星形网 + * 环形网 + * 总线网 + * 树形网 +* 数据链路层的两个子层 + * 逻辑链路控制 LLC (Logical Link Control)子层 + * 媒体接入控制 MAC (Medium Access Control)子层。 + * 概要: 与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关,不管采用何种协议的局域网对 LLC 子层来说都是透明的 +所以以后一般不考虑 LLC 子层 +* 适配器 + * 网络接口板又称为通信适配器(adapter)或网络接口卡 NIC (Network Interface Card),或“网卡”。 + * 适配器的重要功能: + * 进行串行/并行转换。 + * 对数据进行缓存。 + * 在计算机的操作系统安装设备驱动程序。 + * 实现以太网协议。 +### CSMA/CD 协议 +* CSMA/CD 表示载波监听多点接入 / 碰撞检测。 + * 多点接入 :说明这是总线型网络,许多主机以多点的方式连接到总线上。 + * 载波监听 :每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。 + * 碰撞检测 :在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。 +* 具体内容 + * 记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 争用期 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。 + * 当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 截断二进制指数退避算法 来确定。从离散的整数集合 {0, 1, .., (2k-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。 + * 概要: 示意图 +## 使用广播信道的以太网 +### 使用集线器的星形拓扑 +* 传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。 +这种以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器(hub) +### 以太网的信道利用率 +* 一个帧从开始发送,经可能发生的碰撞后,将再重传数次,到发送成功且信道转为空闲(即再经过时间 τ 使得信道上无信号在传播)时为止,是发送一帧所需的平均时间。 +* 发送一帧占用线路的时间是 T0 + τ ,而帧本身的发送时间是 T0。于是我们可计算出理想情况下的极限信道利用率 Smax为: +### 以太网的 MAC 层 +* MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。 +* 一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。 +### 以太网帧格式: +* 类型 :标记上层使用的协议; +数据 :长度在 46-1500 之间,如果太小则需要填充; +FCS :帧检验序列,使用的是 CRC 检验方法; +## 扩展的以太网 +### 在物理层扩展以太网 +* 用多个集线器可连成更大的局域网 + * 用集线器组成更大的局域网都在一个碰撞域中 + * 优点 + * 使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信。 + * 扩大了局域网覆盖的地理范围。 + * 缺点 + * 碰撞域增大了,但总的吞吐量并未提高。 + * 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。 +### 在数据链路层扩展以太网 +* 在数据链路层扩展局域网是使用网桥。 + * 网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。 +网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口 。 + * 优点 + * 过滤通信量。 + * 扩大了物理范围。 + * 提高了可靠性。 + * 可互连不同物理层、不同 MAC 子层和不同速率(如10 Mb/s 和 100 Mb/s 以太网)的局域网。 + * 缺点 + * 存储转发增加了时延。 + * 在MAC 子层并没有流量控制功能。 + * 具有不同 MAC 子层的网段桥接在一起时时延更大。 + * 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞。这就是所谓的广播风暴。 + * 交换机 + * 交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。 +正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。 + * 下图中,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射。 +### 虚拟局域网 +* 虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。 +* 例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 发送的广播会被 A2、A3、A4 收到,而其它站点收不到。 +* 使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。 +## 高速以太网 +### 100BASE-T 以太网 +* 速率达到或超过 100 Mb/s 的以太网称为高速以太网 +* 可在全双工方式下工作而无冲突发生。因此,不使用 CSMA/CD 协议。 +### 吉比特以太网 +* 允许在 1 Gb/s 下全双工和半双工两种方式工作。 +* 在半双工方式下使用 CSMA/CD 协议(全双工方式不需要使用 CSMA/CD 协议)。 +### 10 吉比特以太网 +* 10 吉比特以太网只工作在全双工方式 +* 也不使用 CSMA/CD 协议。 +### 使用高速以太网进行宽带接入 +* 以太网接入的重要特点是它可提供双向的宽带通信,并且可根据用户对带宽的需求灵活地进行带宽升级。 +* 采用以太网接入可实现端到端的以太网传输,中间不需要再进行帧格式的转换。这就提高了数据的传输效率和降低了传输的成本。 +## 其他类型的高速局域网接口 +## 集线器在转发帧时,不对传输媒体进行检测。 +网桥在转发帧之前必须执行 CSMA/CD 算法。 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.png b/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.png new file mode 100644 index 0000000..b00ed0c Binary files /dev/null and b/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.png differ diff --git a/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.xmind b/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.xmind new file mode 100644 index 0000000..1e6f57b Binary files /dev/null and b/计算机网络/第 3 章 数据链路层/第 3 章 数据链路层.xmind differ diff --git a/计算机网络/第 4 章 网络层/第 4 章 网络层.md b/计算机网络/第 4 章 网络层/第 4 章 网络层.md new file mode 100644 index 0000000..27a8ecc --- /dev/null +++ b/计算机网络/第 4 章 网络层/第 4 章 网络层.md @@ -0,0 +1,187 @@ +# 第 4 章 网络层 +## 网络层提供的两种服务 +### 虚电路服务 +### 数据报服务 +### 概要: 虚电路服务与数据报服务的对比 +## 网际协议 IP +### 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。与 IP 协议配套使用的还有四个协议: +* 地址解析协议 ARP (Address Resolution Protocol) +* 逆地址解析协议 RARP (Reverse Address Resolution Protocol) +* 网际控制报文协议 ICMP (Internet Control Message Protocol) +* 网际组管理协议 IGMP (Internet Group Management Protocol) +* 概要: 示意图 +### 虚拟互连网络 +* 网络互相连接起来要使用一些中间设备 + * 物理层中继系统:转发器(repeater)。 + * 数据链路层中继系统:网桥或桥接器(bridge)。 + * 网络层中继系统:路由器(router)。 + * 网桥和路由器的混合物:桥路器(brouter)。 + * 网络层以上的中继系统:网关(gateway)。 +### IP 数据报的格式 +* 版本 : 有 4(IPv4)和 6(IPv6)两个值; +* 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。 +* 区分服务 : 用来获得更好的服务,一般情况下不使用。 +* 总长度 : 包括首部长度和数据部分长度。 +* 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。 +* 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。 +* 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。 +* 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。 +* 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。 + * IP数据报分片 +* 概要: 示意图 +### 分类的 IP 地址 +* IP 地址的编址方式经历了三个历史阶段: + * 分类 + * 由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。 +IP 地址 ::= {< 网络号 >, < 主机号 >} + * 示意图 + * 子网划分 + * 通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。 + +IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >} + +要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。 + +注意,外部网络看不到子网的存在。 + * 无分类 + * 无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。 + +IP 地址 ::= {< 网络前缀号 >, < 主机号 >} + +CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。 + +CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。 + +一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。 + +在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。 +### IP 地址与硬件地址 +* IP层抽象的互联网屏蔽了下层很复杂的细节 +在抽象的网络层上讨论问题,就能够使用 +统一的、抽象的 IP 地址 +研究主机和主机或主机和路由器之间的通信 + * 示意图 +### 地址解析协议 ARP 与逆地址解析协议RARP +* 缘由 + * 网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。 +* 地址解析协议 ARP + * ARP 实现由 IP 地址得到 MAC 地址 + * 每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。 + +如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。 + * 示意图 +* 逆地址解析协议 RARP + * 逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址。 + * 这种主机往往是无盘工作站。 因此 RARP协议目前已很少使用。 +### IP 层转发分组的流程 +* 分组转发算法 + * (1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。 + * (2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。 + * (3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。 + * (4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。 + * (5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。 + * (6) 报告转发分组出错。 + * 概要: 示意图 +## 划分子网和构造超网 +### 划分子网 +### 使用子网时分组转发 +### 无分类编址 CIDR(构造超网) +## 网际控制报文协议 ICMP +### 简介 +* ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。 +### ICMP 报文的种类 +* ICMP 差错报告报文 + * 终点不可达 + * 源点抑制(Source quench) + * 时间超过 + * 参数问题 + * 改变路由(重定向)(Redirect) +* ICMP 询问报文 + * 回送请求和回答报文 + * 时间戳请求和回答报文 +* ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。 +### ICMP 的应用举例 +* 1. Ping + * Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。 + +Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。 +* 2. Traceroute + * Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。 + +Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。 + * 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文; + * 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。 + * 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。 + * 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。 +## 因特网的路由选择协议 +### 有关路由选择协议的几个基本概念 +* 静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。 +* 动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。 +### 自治系统 AS(Autonomous System) +* 自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。 +### 内部网关协议 IGP (Interior Gateway Protocol) +* 即在一个自治系统内部使用的路由选择协议。 + * 内部网关协议 RIP + * RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。 + +RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。 + * 距离向量算法: + * 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1; + * 对修改后的 RIP 报文中的每一个项目,进行以下步骤: + * 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中; + * 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。 + * 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。 + * RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。 + * 内部网关协议 OSPF + * 开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。 + +开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。 + * OSPF 具有以下特点: + * 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。 + * 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。 + * 只有当链路状态发生变化时,路由器才会发送信息。 + * 所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。 +### 外部网关协议 BGP (External Gateway Protocol) +* 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。 +* AS 之间的路由选择很困难,主要是由于: + * 互联网规模很大; + * 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量; + * AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。 +* BGP 只能寻找一条比较好的路由,而不是最佳路由。 + +每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。 + * 示意图 +### 路由器的构成 +* 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。 +* 路由器从功能上可以划分为 + * 路由选择 + * 分组转发 +* 分组转发结构由三个部分组成 + * 交换结构 + * 一组输入端口 + * 一组输出端口 + * 概要: 示意图 +## IP 多播 +### IP 多播的基本概念 +* 多播可明显地减少网络中资源的消耗 +### 在局域网上进行硬件多播 +* +### 因特网组管理协议 IGMP 和多播路由选择协议 +* IGMP 使多播路由器 知道多播组成员信息 +* 多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常是在网络拓扑发生变化时才需要更新路由。 +## 虚拟专用网 VPN 和网络地址转换 NAT +### 虚拟专用网 VPN +* 由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。 + * 有三个专用地址块: + * 10.0.0.0 ~ 10.255.255.255 + * 172.16.0.0 ~ 172.31.255.255 + * 192.168.0.0 ~ 192.168.255.255 +* VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。 +* 下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。 +### 网络地址转换 NAT +* 专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。 +* 在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。 +## 因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。 +## 因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/计算机网络/第 4 章 网络层/第 4 章 网络层.png b/计算机网络/第 4 章 网络层/第 4 章 网络层.png new file mode 100644 index 0000000..b8ba84a Binary files /dev/null and b/计算机网络/第 4 章 网络层/第 4 章 网络层.png differ diff --git a/计算机网络/第 4 章 网络层/第 4 章 网络层.xmind b/计算机网络/第 4 章 网络层/第 4 章 网络层.xmind new file mode 100644 index 0000000..aa92ecf Binary files /dev/null and b/计算机网络/第 4 章 网络层/第 4 章 网络层.xmind differ diff --git a/计算机网络/第 5 章 运输层/第 5 章 运输层.md b/计算机网络/第 5 章 运输层/第 5 章 运输层.md new file mode 100644 index 0000000..9e3e9b1 --- /dev/null +++ b/计算机网络/第 5 章 运输层/第 5 章 运输层.md @@ -0,0 +1,138 @@ +# 第 5 章 运输层 +## 运输层协议概述 +### 进程之间的通信 +* 运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。 +* 两个主机进行通信实际上就是两个主机中的应用进程互相通信。 +* 应用进程之间的通信又称为端到端的通信。 +* 运输层协议和网络层协议的主要区别 +### 运输层的两个主要协议 +* (1) 用户数据报协议 UDP(User Datagram Protocol) + * UDP 传送的数据单位协议是 UDP 报文或用户数据报。 +* (2) 传输控制协议 TCP(Transmission Control Protocol) + * TCP 传送的数据单位协议是 TCP 报文段(segment) +### 运输层的端口 +* 软件端口与硬件端口 + * 在协议栈层间的抽象的协议端口是软件端口。 + * 路由器或交换机上的端口是硬件端口。 +* 三类端口 + * 熟知端口,数值一般为 0~1023。 + * 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。 + * 客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。 +## 用户数据报协议 UDP +### UDP 概述 +* 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 +### UDP 的首部格式 +## 传输控制协议 TCP 概述 +### TCP 最主要的特点 +* 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。 +### TCP 的连接 +* TCP 连接的端点叫做套接字(socket)或插口。 + * 套接字 socket = (IP地址: 端口号) +## 可靠传输的工作原理 +### 停止等待协议 +### 连续 ARQ 协议 +## TCP 报文段的首部格式 +### 序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。 +### 确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。 +### 数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。 +### 确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。 +### 同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。 +### 终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。 +### 窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。 +### 概要: 示意图 +## TCP 可靠传输的实现 +### 以字节为单位的滑动窗口 +* 窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。 + +发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。 + +接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。 + * 1 + * 2 + * 3 + * 4 +### 超时重传时间的选择 +* 超时重传 + * TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。 + +一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT,加权平均往返时间 RTTs 计算如下: + * 其中,0 ≤ a < 1,RTTs 随着 a 的增加更容易受到 RTT 的影响。 + +超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下:(其中 RTTd 为偏差的加权平均值) +### 选择确认 SACK +## TCP的流量控制 +### 利用滑动窗口实现流量控制 +* TCP 流量控制 + * 流量控制是为了控制发送方发送速率,保证接收方来得及接收。 + +接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。 +* 流量控制举例 +### 必须考虑传输效率 +## TCP 的拥塞控制 +### 拥塞控制的一般原理 +* 如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。 +* 拥塞控制所起的作用 +### 几种拥塞控制方法 +* TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。 + * 发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。 + +为了便于讨论,做如下假设: + +接收方有足够大的接收缓存,因此不会发生流量控制; +虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。 + * 1. 慢开始与拥塞避免 + * 发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ... + +注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。 + +如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。 + * 2. 快重传与快恢复 + * 在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。 + +在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。 + +在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。 + +慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。 +### 随机早期检测 RED +## TCP 的运输连接管理 +### TCP 的连接建立 +* 假设 A 为客户端,B 为服务器端。 + +首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。 + +A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。 + +B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。 + +A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。 + +B 收到 A 的确认后,连接建立。 +* 三次握手的原因 + * 第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。 + +客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。 +### TCP 的连接释放 +* 以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。 + +A 发送连接释放报文,FIN=1。 + +B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。 + +当 B 不再需要连接时,发送连接释放报文,FIN=1。 + +A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。 + +B 收到 A 的确认后释放连接。 +* 四次挥手的原因 + * 客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。 +* TIME_WAIT + * 客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由: + * 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。 + * 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。 +### TCP 的有限状态机 +* 粗实线箭头表示对客户进程的正常变迁。 +粗虚线箭头表示对服务器进程的正常变迁。 +另一种细线箭头表示异常变迁。 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/计算机网络/第 5 章 运输层/第 5 章 运输层.png b/计算机网络/第 5 章 运输层/第 5 章 运输层.png new file mode 100644 index 0000000..485f06b Binary files /dev/null and b/计算机网络/第 5 章 运输层/第 5 章 运输层.png differ diff --git a/计算机网络/第 5 章 运输层/第 5 章 运输层.xmind b/计算机网络/第 5 章 运输层/第 5 章 运输层.xmind new file mode 100644 index 0000000..4af5d58 Binary files /dev/null and b/计算机网络/第 5 章 运输层/第 5 章 运输层.xmind differ diff --git a/计算机网络/第 6 章 应用层/第 6 章 应用层.md b/计算机网络/第 6 章 应用层/第 6 章 应用层.md new file mode 100644 index 0000000..5551e04 --- /dev/null +++ b/计算机网络/第 6 章 应用层/第 6 章 应用层.md @@ -0,0 +1,151 @@ +# 第 6 章 应用层 +## 域名系统 DNS +### 域名系统概述 +* DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。 +### 因特网的域名结构 +* 域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。 +### 域名服务器 +* 一个服务器所负责管辖的(或有权限的)范围叫做区(zone)。 +* 每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。 +* +* DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输: + * 如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。 + * 区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。 +## 文件传送协议 +### FTP 概述 +* 文件传送协议 FTP (File Transfer Protocol) 是因特网上使用得最广泛的文件传送协议。 +* FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。 +* FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。 +### FTP 的基本工作原理 +* FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: + * 控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。 + * 数据连接:用来传送一个文件数据。 +* 根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式: + * 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。 + * 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。 + * 主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。 +### 简单文件传送协议 TFTP +* TFTP 是一个很小且易于实现的文件传送协议。 +* TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。 +* TFTP 只支持文件传输而不支持交互。 +* TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。 +* TFTP 的主要特点是 + * (1) 每次传送的数据 PDU 中有 512 字节的数据,但最后一次可不足 512 字节。 + * (2) 数据 PDU 也称为文件块(block),每个块按序编号,从 1 开始。 + * (3) 支持 ASCII 码或二进制传送。 + * (4) 可对文件进行读或写。 + * (5) 使用很简单的首部。 +## 远程终端协议 TELNET +### 简述 +* TELNET 是一个简单的远程终端协议,也是因特网的正式标准。 +* 用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址)。 +* TELNET 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。 +## 万维网 WWW +### 概述 +* 万维网 WWW (World Wide Web)并非某种特殊的计算机网络。 +* 万维网是一个大规模的、联机式的信息储藏所。 +* 万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。 +* 这种访问方式称为“链接”。 +* 万维网是分布式超媒体(hypermedia)系统,它是超文本(hypertext)系统的扩充。 +### 万维网的工作方式 +* 万维网以客户服务器方式工作。 +* 浏览器就是在用户计算机上的万维网客户程序。万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。 +### 万维网必须解决的问题 +* (1) 怎样标志分布在整个因特网上的万维网文档? +使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档。 +使每一个文档在整个因特网的范围内具有唯一的标识符 URL。 +* (2) 用何协议实现万维网上各种超链的链接? +在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 HTTP (HyperText Transfer Protocol)。 +HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。 +* (3) 怎样使各种万维网文档都能在因特网上的各种计算机上显示出来,同时使用户清楚地知道在什么地方存在着超链? +超文本标记语言 HTML (HyperText Markup Language)使得万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。 +* (4) 怎样使用户能够很方便地找到所需的信息? +为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。 +### 统一资源定位符 URL +* 统一资源定位符 URL 是对可以从因特网上得到的资源的位置和访问方法的一种简洁的表示。 +* URL 的一般形式是:<协议>://<主机>:<端口>/<路径> +### 超文本传送协议 HTTP +* HTTP 是面向事务的客户服务器协议。 +* HTTP 1.0 协议是无状态的(stateless)。 +* HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。 +### 万维网的文档 +* 超文本标记语言 HTML + * 超文本标记语言 HTML 中的 Markup 的意思就是“设置标记”。 + * HTML 定义了许多用于排版的命令(即标签)。 + * HTML 把各种标签嵌入到万维网的页面中。这样就构成了所谓的 HTML 文档。HTML 文档是一种可以用任何文本编辑器创建的 ASCII 码文件。 +* 动态万维网文档 + * 静态文档是指该文档创作完毕后就存放在万维网服务器中,在被用户浏览的过程中,内容不会改变。 + * 动态文档是指文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建。 + * 动态文档和静态文档之间的主要差别体现在服务器一端。这主要是文档内容的生成方法不同。而从浏览器的角度看,这两种文档并没有区别。 +### 万维网的信息检索系统 +* 全文检索搜索 + * 全文检索搜索引擎是一种纯技术型的检索工具。它的工作原理是通过搜索软件到因特网上的各网站收集信息,找到一个网站后可以从这个网站再链接到另一个网站。然后按照一定的规则建立一个很大的在线数据库供用户查询。 +* 分类目录搜索 + * 分类目录搜索引擎并不采集网站的任何信息,而是利用各网站向搜索引擎提交的网站信息时填写的关键词和网站描述等信息,经过人工审核编辑后,如果认为符合网站登录的条件,则输入到分类目录的数据库中,供网上用户查询。 +## 电子邮件 +### 电子邮件概述 +* 电子邮件(e-mail)是因特网上使用得最多的和最受用户欢迎的一种应用。 +* 电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可随时上网到自己使用的邮件服务器进行读取。 +* 电子邮件不仅使用方便,而且还具有传递迅速和费用低廉的优点。 +* 一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。 +### 电子邮件的最主要的组成构件 +### 简单邮件传送协议 SMTP +* SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。 +### 电子邮件的信息格式 +* 一个电子邮件分为信封和内容两大部分。 +* RFC 822 只规定了邮件内容中的首部(header)格式,而对邮件的主体(body)部分则让用户自由撰写。 + * 邮件内容的首部 + * “To:”后面填入一个或多个收件人的电子邮件地址。用户只需打开地址簿,点击收件人名字,收件人的电子邮件地址就会自动地填入到合适的位置上。 + * “Subject:”是邮件的主题。它反映了邮件的主要内容,便于用户查找邮件。 + * 抄送 “Cc:” 表示应给某某人发送一个邮件副本。 + * “From” 和 “Date” 表示发信人的电子邮件地址和发信日期。“Reply-To” 是对方回信所用的地址。 +### 邮件读取协议 POP3 和 IMAP +* POP3 + * POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删除。但最新版本的 POP3 可以不删除邮件。 +* IMAP + * IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。 +### 基于万维网的电子邮件 +* 例子 + * 电子邮件从 A 发送到网易邮件服务器是使用 HTTP 协议。 + * 两个邮件服务器之间的传送使用 SMTP。 + * 邮件从新浪邮件服务器传送到 B 是使用 HTTP 协议。 + * 概要: 示意图 +### 通用因特网邮件扩充 MIME +* MIME 概述 + * MIME 并没有改动 SMTP 或取代它。 + * MIME 的意图是继续使用目前的[RFC 822]格式,但增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则。 +## 动态主机配置协议 DHCP +### DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。 +### DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。 +### DHCP 工作过程如下: +* 1.客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。 +2.DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。 +3.如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。 +4.DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。 +## 简单网络管理协议 SNMP +### 网络管理的基本概念 +* 网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能,服务质量等。网络管理常简称为网管。 +* SNMP 的网络管理由三个部分组成 + * SNMP 本身 + * SNMP 定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。 + * 管理信息结构 SMI (Structure of Management Information) + * SMI 定义了命名对象和定义对象类型(包括范围和长度)的通用规则,以及把对象和对象的值进行编码的规则。 + * 管理信息库 MIB(Management Information Base)。 + * MIB 在被管理的实体中创建了命名对象,并规定了其类型。 +### 管理信息结构 SMI +* SMI 的功能: + * (1) 被管对象应怎样命名; + * (2) 用来存储被管对象的数据类型有哪些种; + * (3) 在网络上传送的管理数据应如何编码。 +### 管理信息库 MIB +* 被管对象必须维持可供管理程序读写的若干控制和状态信息。这些信息总称为管理信息库 MIB 。 +### SNMP 的协议数据单元和报文 +* SNMP的操作只有两种基本的管理功能,即: + * “读”操作,用 get 报文来检测各被管对象的状况; + * “写”操作,用 set 报文来改变各被管对象的状况。 +* SNMP 的报文格式 +## 应用进程跨越网络的通信 +### 系统调用和应用编程接口 +### 几种常用的系统调用 + +*XMind: ZEN - Trial Version* \ No newline at end of file diff --git a/计算机网络/第 6 章 应用层/第 6 章 应用层.png b/计算机网络/第 6 章 应用层/第 6 章 应用层.png new file mode 100644 index 0000000..e64b435 Binary files /dev/null and b/计算机网络/第 6 章 应用层/第 6 章 应用层.png differ diff --git a/计算机网络/第 6 章 应用层/第 6 章 应用层.xmind b/计算机网络/第 6 章 应用层/第 6 章 应用层.xmind new file mode 100644 index 0000000..70a1fd0 Binary files /dev/null and b/计算机网络/第 6 章 应用层/第 6 章 应用层.xmind differ