计算机的组成和体系结构
数据的表示
1、进制的转换
R进制转十进制使用按权展开法,其具体操作方式为:将R进制数的每一位数值用R^k形式表示,
即幂的底数是R,指数为k, k与该位和小数点之间的距离有关。
当该位位于小数点左边,k值是该位和小数点之间数码的个数(从0开始)
而当该为位于小数点右边,k值是负值,其绝对值是该为和小数点之间码数的个数加上1。
例如:二进制10100.01= 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 0*2^0 + 0*2^-1 + 1*2^-2
按权展开法,小数点左边,k值从0开始,小数点右边,k值从-1开始。
二进制就是2的几次幂,八进制就是8的几次幂。这是任意进制转十进制。
十进制转R进制使用短除法:转二进制除2,转八进制除8,转十六进制除16
94/2 余0
47/2 余1
23/2 余1
11/2 余1
5/2 余1
2/2 余0
1
结果1011110(从下往上书写)
94转换为二进制数为1011110
二进制转八进制或十六进制:
转八进制:从右到左每三位数,不够三位补0,计算每三位代表的十进制后,转为八进制
10 001 110
2 1 6
转十六进制:从右到左每四位数,不够四位补0,计算每四位代表的十进制后,转为十二进制
1000 1110
8 E
2、原码反码补码移码
一个字节为八个比特位
原码:一个整数,按照绝对值大小转换成的二进制数,最高为为符号位。正数符号位为0,负数符号位为1。
反码: 正数的反码为原码,负数的反码是原码符号位外按位取反。
补码:正数的补码为原码,负数为反码+1。
移码:通常用于表示浮点数的阶码。移码与补码的关系是符号位互为相反数(仅符号位不同)。
例:
数值1 数值-1 1-1
原码 0000 0001 1000 0001 1000 0010
反码 0000 0001 1111 1110 1111 1111
补码 0000 0001 1111 1111 0000 0000
移码 1000 0001 0111 1111 1000 0000
原码的取值范围:—(2^(n-1)-1)~2^(n-1)-1 -127~127
反码的取值范围:—(2^(n-1)-1)~2^(n-1)-1 -127~127
补码的取值范围:—2^(n-1)~2^(n-1)-1 -128~127
3、浮点数运算
浮点数表示:N = M*R^e
尾数:M
指数:e
基数:R
举例:1000 = 1.0*10^3
运算过程:对阶 -> 尾数计算 -> 结果格式化
(小数点左侧只能存在个位数,即一位,其余都在小数点右侧,实现格式化)
CPU结构
主机分为主存储器(内存)、CPU(运算器、控制器),其他部件为外设
CPU:
运算器
算术逻辑单元ALU
累加寄存器AC
数据缓存寄存器DR
状态条件寄存器PSW
控制器
程序计数器PC
指令寄存器IR
指令译码器
时序部件
Flynn分类法
体系结构类型 结构 关键特性 代表
单指令流单数据流 控制部分:一个 单处理器系统
SISD 处理器:一个
主存模块:一个
单指令流多数据流 控制部分:一个 各处理器以异步的 并行处理机
SIMD 处理器:多个 形式执行同一条指令 阵列处理机
主存模块:多个 超级向量处理机
多指令流单数据流 控制部分:多个 被证明不可能,至少 目前没有,有文献
MISD 处理器:一个 是不实际 称流水线计算机为此类
主存模块:多个
多指令流多数据流 控制部分:多个 能够实现作业、任务、 多处理机系统
MIMD 处理器:多个 指令等各级全面并行 多计算机
主存模块:多个
CISC和RISC
指令系统类型 指令 寻址方式 实现方式 其它
CISC(复杂) 数量多,使用频率差别大 支持多种 微程序控制技术 研制周期长
可变长格式 (微码)
RISC(精简) 数量少,使用频率接近 增加了通用寄存器; 优化编译,有
定长格式,大部分为单周 支持方式少 硬布线逻辑控制为主 效支持高级语言
期指令,操作寄存器,只 适合采用流水线
有Load/Store操作内存
流水线技术
流水线的基本概念
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。
各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,
以提高各部件的利用率和指令的平均执行速度。
流水线计算
流水线周期为执行时间最长的一段 ▲t
流水线计算公式为:1条流水线执行时间+(指令条数-1)*流水线周期
①理论公式:(t1+t2+...+tk)+(n-1)*▲t
②实践公式:(k+n-1)*▲t (k 就是分几段)
例题:若指令流水线把一条指令分为取指、分析和执行三部分(k就等于3),
且三部分的时间分别是取指2ns,分析2ns,执行1ns,(周期为2ns)那么流水线的周期是多少?
100条指令全部执行完毕需要的时间是多少?
(2+2+1)+(100-1)*2ns = 203(理论)
(3+100-1)*2ns =104 (实践)
流水线吞吐率计算
流水线的吞吐率(TP)是指在单位时间内流水线所完成的任务量或输出的结果数量。
TP=指令条数/流水线执行时间
基本计算公式:
流水线最大吞吐率:
流水线加速比计算
完成同样一批任务,不使用流水线所用时间与使用流水线所用时间之比称为流水线的加速比
不使用流水线的时间:(t1+t2+…+tk)*指令条数
流水线的效率
流水线的效率是指流水线的设备利用率。
在时空图上,流水线的效率定义为n个任务占用的时空区与k个流水线段总的时空区之比。
按所给时空图:(△t+△t+△t+3△t)4/15△t4
层次化存储结构
速度由快到慢:CPU---Cache---内存(主存)---外存(辅存)
大小刚好相反,这是因为性价比的原因。
CPU(寄存器) Cache(按内容存取) 外存(硬盘、光盘、U盘等)
Cache概念
Cache的功能:提高CPU数据输入输出的效率,突破冯·诺曼瓶颈,即CPU与存储系统间数据传送带宽限制。
在计算机的存储系统体系中,Cache是访问速度最快的层次,(如果有寄存器,则寄存器最快)
使用Cache改善系统性能的依据是程序的局限性原理。
如果以h代表Cache的访问命中率,t1表示Cache的周期时间,t2表示主寄存器周期时间,
以读操作为例,使用“Cache+主存储器”的系统的平均周期为t3,则:
t3=h*t1+(1-h)*t2
其中,(1-h)又称为失效率(未命中率)
局部性原理
时间局部性:
时间局部性指的是如果一个存储位置(如:内存中的某个数据或指令)在最近被访问过,那么在不久的将来,
这个存储位置很可能还会再次被访问。
例如,在循环结构中,循环体内的指令会被重复执行多次;或者在计算过程中,变量的值可能短时间内被连续
读取或修改。
空间局部性:
空间局部性是指一旦一个存储位置被访问,与其相邻的存储位置也很有可能很快被访问到。
例如,在连续数组操作中,访问完数组的一个元素后,程序很可能紧接着访问紧邻的下一个元素;
另外,在指令层面,由于指令流水线和缓存预取机制的存在,处理器可能会预测并提前加载当前指令之后的
一系列指令。
工作集理论:工作集是进程运行时被频繁访问的页面集合
主存
分类
随机存取存储器
DRAM 动态RAM SDRAM
SRAM 静态
只读存储器(掉电之后仍然能存储)
MROM 掩模式ROM
PROM 一次性可编程ROM
EPROM 可擦除的 PROM
闪速存储器 flash memory,闪存
编址
芯片组成相应的存储器
末地址-首地址+1(忽略H,H代表16进制)
K=2^10
C7FFFH+1-AC000H = 1C000H
1C000H/2^10 = 1C000H/400H = 70H = 112
(1)选B
112K*16 = 28*16K*x (比值为1)
x = 4
(2)选A
磁盘工作原理
(33+3)*10+6=366
因为是单缓存区,所以当读取r0以后,处理r0期间不能继续读取r1。而处理r0期间,
磁盘继续转动,需要转动一圈,才能到达r1开始位置。
33->转一圈到r1开始位置
3->处理一个记录,到r1开始位置
6->读取r10+处理r10(r10后面没有其他进度,不用担心覆盖问题)
第一个空选C
最短的情况就是r0与r1之间隔一个物理块依次往后填满,没有多余耗时。
3*11+33=66
第二个空选B
总线
根据总线所处的位置不同,总线通常被分为三种类型,分别是:
内部总线
系统总线:数据总线、地址总线、控制总线
外部总线
系统可靠性分析
串联
R为可靠度
失效率λ只能计算大概值
并联
一般失效率u = 1-可靠度,不用下方式子
模冗余模型(几乎不考)
混合模型
校验码
概念
检错:检查出错误
纠错:不仅检查出错误并改正
码距:整个编码系统中任意(所有)两个码字的最小距离。通俗地说,就是改变多少位能变成另一个码。
举例:
若用1位长度的二进制编码。若A=1,B=0.这样A,B之间的最小码距为1。
码距与检错、纠错有什么关系?
在一个码组内为了检测e个误码,要求最小码距d应该满足:d>=e+1
在一个码组内为了纠正t个误码,要求最小码距d应该满足:d>=2t+1
循环校验码CRC
什么是模2除法,它和普通的除法有何区别?
模2除法是指在做除法运算的过程中不计其进位的除法。
例如,10111对110进行模2除法为:
模2相除时是按位异或(相同为0,不同为1)
x4+x3+x+1==>11011(取多项式系数)
补的4个0是补余数的位数
结果是110010101010011(最后四位是余数)
海明校验码
信息位:这些是未经编码的原始二进制位序列,它们包含了要传输或存储的实际数据。
例如题中 1011,信息位是4
校验位和信息位
2^r >= k+r+1
r是校验位个数,k是信息位个数
校验:将得到的跟接收到的做异或,就能得出错误的位置
操作系统基本原理
概述
进程管理——进程的状态
最初只分了运行,等待,就绪三种状态。
运行态指的是这个进程所需要的所有资源都已经配足了,并且给它CPU资源,此时就属于运行状态。
就绪态指的是其他所有资源,只缺CPU资源,这种状态是一种万事俱备只欠东风的状态。
等待态指的是缺其他资源,也没CPU资源,与外设有交互,或者等待指令之类的状态。
三态转换关系
运行状态一旦缺某种资源,就进入了等待状态。
等待状态下获取到了某种资源,就会进入就绪状态。
注意,等待状态不能进入运行状态。这意味着就算你资源获取足够了,你也得乖乖去排队,去到就绪状态,
等CPU资源分配。
就绪状态排队的时候,等CPU给到资源,就可以进入到运行状态。
进入运行状态不见得就能完成所有的任务,因为CPU资源相当宝贵,大家都需要获取。往往是就绪到运行只
运行一个时间片的时间,等到时间片结束了,此时就会进入等待态。
但是三种状态不足以涵盖现实的各种情况,比方人为的管控进程,挂起进程。于是有了五种状态。
五态下的活跃就绪态即是三态中的就绪态。活跃阻塞态就是三态中的等待态。
五态转换关系
增加了一种挂起操作,但是运行状态并且人为挂起时,就会进入到静止就绪态。
当静止就绪态恢复或激活,就重新进入到活跃就绪态。
活跃阻塞也可以挂起进入到静止阻塞。
前驱图
考虑完成这些事情的先后顺序,哪些事情是可以并行做的
进程的同步与互斥
互斥:在同一时刻,只允许某一个进程访问资源。同一个资源不能同时服务于多个进程。
同步:同步有速度匹配的要求,在差距拉的比较大的时候,要求速度快的停下来,等待速度慢的,这就是同步。
同步和互斥是否互为反义词?
不是,互斥的反义词是共享。同步的反义词是异步
单缓冲区
市场容量只有一,存放了一个物品,他就不能再存放了。
对于市场的操作来说,在同一时刻,不能既有生产者往里面存东西,又有消费者往里面取东西。
在同一时刻,只能有一类人进去操作,这就是互斥。
生产者往市场里存了一个东西,而市场容量只有一,市场此时就满了。一旦生产者再往里面存东西,就会产生
溢出的情况。只有等到消费者往市场取走这个东西,才允许生产者再往里面存东西。这个过程和李四在等张三,是
不是一回事?生产者要停下脚步,等消费者消费这个产品,才能继续往里面存东西,这就是同步。
多缓冲区
相比起单缓冲区,只是在同步的时候可以放更多的东西。比如不再限制放一个可以放十个。放满之后才会停下
来,等消费者。
对于pv操作,你需要分析哪里是互斥,哪里是同步。
PV操作
信号量:pv操作中离不开信号量。
通常会有这样的写法 p(s) v(s) 其中的s就是信号量。
信号量是应用在pv操作中,一种专属的变量。
pv操作:pv操作就是由p操作和v操作,组成的一套操作。
p(s)
首先会将信号量s做自减一的操作,比如原本信号量s=10,那么自减一就等于九了。
如果s此时小于零,进程就会阻塞。并且这个进程会进入一个进程队列里,这个进程就进入了等待状态。
如果s此时大于等于零,程序就会继续执行。
v(s)
首先会将信号量s做自加一的操作。
再判断s此时是否小于等于零,如果满足,则从进程队列里取出一个进程,唤醒,并让他继续执行。
否则程序继续执行。
系统里有两个进程,一个是生产者,一个是消费者。
生产者负责生产一个产品,并且将产品送到缓冲区去。
消费者负责从缓冲区取产品,并且消费产品。
最初缓冲区是空的,允许生产者往里面填东西,假设此时我执行了一个生产者进程,生产了一个产品,并且将它送
到了缓冲区,此时这个过程是没有问题的,可以顺利把商品放到缓冲区。
这时候生产者进程再次执行,又要将产品往缓冲区里送,此时缓冲区已经满了,此时再放产品就会溢出。这时候系
统就出问题了,因此这也是Pv操作所要解决的问题。
又比如先执行消费者,此时缓冲区是空的,那么从缓冲区取产品也会报错。
Pv操作
我们回到这张图,在pv操作都完善的情况下,看系统是否会异常。
同理,生产者也要生产一个产品,此时多了一步p(s1)操作,由于s1的初值是1,那么在做p操作之后,s1的值为
0。由于没有小于零,则继续往下操作,就会将产品送到缓冲区去,完了之后,再执行v(s2)操作,使得s2的值
为1。
此时我们不执行消费者进程,再一次执行生产者进程模拟刚刚的异常情况,同理,生产者生产了一个产品之后,
就要开始p(s1)操作,那么,此时s1的值就变成-1了。由于-1小于0,那么当前进程就会被放入到进程队列里,
程序就会阻塞起来。产品也不会有溢出的情况。
此时我们再看回消费者,由于s2在生产者阶段就已经变成了1,那么消费者的p(s2)操作使s2的值变为0,并且因
为0没有小于0,程序继续往下执行,接下来就来到了v(s1)操作,此时s1是等于-1的,那么v操作之后就变成了
0。那么就会从进程队列里取出队列,当生产者被激活后又会执行 送产品到缓冲区 这个动作。
假设一开始执行的是消费者,那么p(s2)操作,s2的初值为0,那么p操作后,s2的值为-1。S2小于零则会被阻
塞,程序就会阻塞起来,而不会去执行报错了。
由此看来,pv操作就是为了解决并发操作时,一些资源如何处理的问题。
考题:
该书店最多允许n个购书者进入,意味着当购书者数量达到了n,购书者进程就应该阻塞。在题目图中,其实已
经实现了这个功能。因为购书者进程进入时,先执行了p(sn),当购书者进程要离开书店之前,执行了V(sn)。
然后看到购书者进程,在购书结束后,付款处有a1和a2两个动作。此处的a1和a2是需要和收银员进程进行交互
的。
然后再看回收银员进程,收银员在收费之前进行了一个b1动作。结合刚刚的购书者进程,此处的b1动作,应该是购
书者提出缴费需求。那么此处的b1动作,肯定是一个p操作, 可以理解为没有购书者进程唤醒他,收银员可以一直
睡大觉。对应的a1则是v操作,他负责唤醒收银员,让他起来收款。由于题目一般是按顺序去配对信号量的,那么
此处的b1就是p(s1),a1就是v(s1)。
那么此处的a2是什么意思呢?购书者在付款之后是需要等待收银员收款确认,才算完成交易。因此此处的a2就是一
个p操作,相应的b2则是收银员在收费后,确认数目无误后,通知购书者可以离开了,因此b2是一个v操作,因此
a2是p(s2),b2是v(s2)。
因此选A,C
PV操作和前趋图
从上到下,从左到右标注信号量技巧
箭头起始是v(s),终点是p(s)
C A A
死锁问题
进程需要统分配资源才能运行,当某一时刻,所有资源都已经分配出去了,而所有的进程都无法完成他的任务
并释放他占有的资源,这时候就产生死锁。
所有的进程都在等待别人给他分配资源,而自己又不愿意释放资源。
如上题,我们先给每个进程都分配四个资源,那么一共就有12个。此时只需要再多一个资源,就能确保其中一个进
程,完成他的任务,当他完成了任务之后,就会释放自己占有的所有资源。
所以这种解题思路,就是先给每个进程分配它最大资源-1个资源,在这基础上,再加一个资源。
k*(n-1)+1
死锁问题的避免
银行家算法
银行家算法:分配资源的原则
√当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程
√进程可以分期请求资源,但请求的总数不能超过最大需求量
√当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里
得到资源
示例:
解题步骤:
先求所剩的资源:R1 = 9-(1+2+2+1+1) = 2
R2 = 8-(2+1+1+2+1) = 1
R3 = 5-(1+1+3) = 0
依次排除ABCD,A中p1资源不够 ,排除A。p2可以执行,执行完即释放资源……
选B
存储管理—分区存储组织
分配前作业1和作业2中间的25k哪来的?
一开始作业1分配了33k,某个作业分配了接下来的25k,接下来是作业2的。当这个作业完成了,就会释放空间。
因此就会空出一块。
首次适应法
首次能够容纳9k的方法分配出去。
最佳适应法
空闲区块按大小顺序连接。当前空闲的三个块分别是25,28,10。当他发现10k已经放得下,就分配出去了。
如果在分完这9k之后,还需要分配10k。由于此时剩余空间剩25,28,1。首先去到1这个空间,发现不够。
就去到25这个空间,发现可以就分配出去了。
缺点:内存碎块非常多,碎块非常小。
最差适应法
与上述同理,只是从大到小分。
优点:内存碎片减少
循环首次适应法
由于作业3是在28k这个碎片这里分配的,因此从28k这个碎片开始首次适应