程序设计语言-软件设计(二十一)
计算机组成原理在软件设计考试分值占比较高,主要会考
1、数据的表示:数据进制转化。(日常生活中使用的都是十进制的数据,但是计算机都是使用二进制,为了方便转换还有八进制和十六进制)
计算机结构、Flynn分类法、CISC与RISC、流水线技术、存储系统、总线系统、可靠性及校验码。
一、数据的表示
任意进制转十进制
例如二进制的转换。
二进制转十进制可以按权展开法,当小数点左边的是正数次方,右边的则是负数。
比如:二进制 10100.01
转成十进制:1*2的四次方+1*2的二次方+1*2的负二次方
比如:七进制 603.01
转成十进制:6*7的二次方+33*7的零次方+1*7的负二次方
十进制转二进制
可以使用短除法。
例如:十进制94
二进制:
94除以2 等于47 余0
47除以2 等于23 余1
23除以2 等于11 余1
11除以2 等于5 余1
5除以 2 等于2 余1
2除以2 等于1 余0
1除以2 等于0 余1
1011110
二进制转八进制与十六进制数
每三个2进制位可以转一个8进制位,高位补0,然后把每个位子转8进制。
10 001 110
那么二进制110转八进制是 1*2的二次方+1*二的一次方 = 6
二进制001转八进制 1*2的零次方 = 1
二进制010转八进制 1*2的一次方 = 2
所以 八进制是 216
每四个2进制可以转一个16进制,高位补0。
十六进制到两位则用字母代替,10是A,11是B,12是C,依次类推。
1000 1110
那么二进制1000转十六进制 1*2的三次方 = 8
二进制1110转十六进制 1*2的三次方 + 1*2的二次方 + 1*2的1次方 = 8+4+2=14
所以十六进制 8E
问:反码1111 1111 代表十进制的多少?
第一步:先把反码转成原码 1000 0000
第二步:首位1代表负数,所以是 -0
问:补码0000 0000 代表十进制的多少?
0
问:移码1000 000代表十进制多少?
移码首位1代表正数,所以是 0。
原码反码范围 -127~127
补码:-128~127
浮点数
1000的科学计数法是1.0 * 10的三次方,这就是计算机里的浮点数。
119则是1.19*10的平方。
所以公式为:
N = M * R的e次方。
其中M称为尾数,R称为基数,e称为指数。
所以1.19是尾数 ,10是基数、2是指数。
问:如何把两个浮点数相加?
1.0*10的三次方 + 1.19乘以10的平方
对阶,把平方转成三次方,0.119*10的三次方
所以等于1.119 * (10的三次方)
对阶 -> 尾数相加 ->结果格式化。
当小数点左边是0或者超过一位,则需要格式化。
- 计算器结构
运算器、控制器、主存储器 这些都属于主机。
而主机里最重要的部分是 运算器 + 控制器 = cpu (Central Processing Unit)
运算器包含 算术逻辑单元ALU、累加寄存器AC、数据缓冲寄存器DR(作用读写操作的时候,暂存数据)、状态条件寄存器PSW(作用在运算过程中存储标志位)。
控制器包含 程序计数器PC、指令寄存器IR、指令译码器、时序部件。
- flynn分类法
单指令流单数据流SISD:意味着控制部件 是一个,处理器 是一个,主存模式 一个。代表就是单处理系统,老计算机。 (后面多核,4g8g就不属于此类)
单指令流多数据流SIMD:控制部件 一个,处理部件 多个,主存模式 多个。处理器以异步的形式执行同一条指令。代表有 阵列处理器、并行处理机。
多指令流单数据流:控制器多个 处理器 一个,主存模式。并不存在,理论模型,没有实际意义和价值。
多指令流多数据流:控制器,处理器和主存模式 都是多个。代表多处理器系统。
- CISC与RISC
CISC复杂模式,RISC精简模式。
CISC是计算机没有大规模通用化时候提出来的,数量多,使用频率差别大,可变长格式,支持多种。
RISC大部分都是操作寄存器,只有load/store操作内存,优化编译,有效支持高级语言。
- 流水线
执行一条指令分为 取指、分析、执行。
如果没有流水线,当有三条指令的情况下,则执行顺序是:
第一条指令 取指、分析、执行。
第二条指令 取指、分析、执行。
第三条指令 取指、分析、执行。
如果有流水线,则他们的执行顺序是:
第一条指令 第二条指令 第三条指令 取指。
第一条指令 第二条指令 第三条指令 分析。
第一条指令 第二条指令 第三条指令 执行。
流水线所做的工作,是把空闲时间利用起来。
流水线的计算
问:把一条指令分为 取指、分析、执行三个部分,且三部分的时间分别是取指2ns、分析2ns、执行2ns。那么流水线周期多少?100条指令全部执行完毕需要时间是多少?
分析:流水线周期指执行时间最长的一段,所以流水线周期最长的是2ns。
一条指令执行时间 + n-1条指令的执行时间
2+2+1 + 99 *2= 5+198 = 203
这是理论公式,第一条指令时间, 后面指令乘以 周期时长。
实践公式:(k+n-1)*流水线周期。这里k代表分成几段。
(3+100-1)*2 = 204
流水线吞吐率计算
指单位时间内流水线所完成的任务数量或者输出结果数量。
TP=指令条数 除以 流水线执行时间
TP = 100/203nm