软考中级-软件设计师
第一章:计算机系统知识
原/反/补/移码
数值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(×) |
码由8位0和1组成,第一位表示符号位(即正负)其余的数表示数值
原码
- 正数的原码,第一位(符号位)为0,其余按照二进制补齐数值即可。
- 负数的原码,第一位(符号位)为1,其余按照二进制补齐数值即可。
反码
正数的反码是本身。
负数的反码,除了符号位之外,取余分别取反。
补码
- 正数的补码是本身
- 负数的补码等于反码+1。(或者说,补码等于原码除符号位外,其余分别取反再加一)
移码
移码一般在特定的场合才会用到,比如浮点数运算中的阶码。
而移码的求解方法,其实就是在补码
的基础上,对于符号位进行取反
即可。
数值的运算
数值的运算必须使用补码
运算,使用其他的码运算可能会出错,如上表
逆向思维
知道补码,求原码
则先减一,除符号位,其余分别取反
CPU结构
计算机的主机中包含两大部件:CPU和内存(主存储器)。而对于声卡
、显卡
、鼠标键盘这些都是属于外设的。
对于CPU,我们需要了解的就是运算器和控制器,以及这两者中的一些寄存器。
①算术逻辑单元 ALU:它是运算器的重要组成部件,负责处理数据
,实现对数据的算术运算
和逻辑运算
。
②累加寄存器 AC:通常简称累加器
,它是一个通用寄存器,功能是当运算器的算术逻辑单元执行算术或逻辑运算时,为ALU提供一个工作区。
③数据缓冲寄存器 DR:作为CPU和内存、外设之间数据传送的中转站
,作为CPU和内存
、外设之间
在操作速度上的缓冲。
④状态条件寄存器 PSW:保存由算术指令
和逻辑指令
运行或测试的结果建立的各种条件码内容。
⑤程序计数器 PC:用于存放下一条指令的地址
。当一条指令被获取后,程序计数器的地址加1
,指向下一条指令的地址。
⑥指令寄存器 IR:用于存放
当前从主存储器读出的正在执行的一条指令
。
⑦地址寄存器 AR:用于保存当前CPU
所访问
的内存单元的地址
。
⑧指令译码器 ID:计算机执行一条指令时,首先分析这条指令的操作码是什么
,以决定操作的性质和方法,然后才能控制计算机其他各部件协同完成指令表达的功能,这个分析工作
由指令译码器来完成
流水线
基本概念
流水线计算(公式)
首先,流水线周期是指在(取指、分析、执行)三个阶段中时间最长的一段,对应上面的例题,最长的一段时间为2ns,所以流水线周期为2ns。
100条指令全部执行完毕需要的时间为:理论公式:(2+2+1)+(100-1)*2=203ns。
100条指令全部执行完毕需要的时间为:实践公式:(3+100-1)*2=204ns。(公式中的k表示指令被分成了几段)
流水线吞吐率计算
考点知识
选择题考点
RISC 精简指令集计算机 |
CISC 复杂指令集计算机 |
|
---|---|---|
指令种类 | 少、精简 | 多、丰富 |
指令复杂度 | 低(简单) | 高(复杂) |
指令长度 | 固定 | 变化 |
寻址方式 | 少 | 复杂多样 |
实现(译码)方式 | 硬布线控制逻辑 (组合逻辑控制器) |
微程序控制技术 |
通用寄存器数量 | 多、大量 | 一般 |
流水线技术 | 支持 | 不支持 |
CPU组成
CPU主要有运算器、控制器、寄存器组和内部总线等部件组成,如图所示。
注意:内部总线和系统总线不一样,算数逻辑运算单元是运算器。
SRAM & DRAM
SRAM | DRAM | |
---|---|---|
原理 | 触发器 | 电容 |
读出 | 非破坏性 | 破坏性 |
刷新 | 不用 | 用 |
送地址 | 一起送 | 分列分开送 |
速度 | 快 | 慢 |
集成度 | 低 | 高 |
功耗 | 高 | 低 |
成本 | 高 | 低 |
用途 | Cache | 内存 |
DRAM
使用电容
存储信息需要周期性的刷新
计算机系统使用补码表示有符号的数值,可以将减法运算转换成加法运算从而简化运算器的设计。
认证方式安全性最低是口令认证
软件著作权
主要是看书面合同
是否有明确规定,没有则著作权归受托人
七种耦合类型
七种代码耦合类型根据耦合程度由高到低排序分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合
和非直接耦合
。
内容耦合
一个模块可以直接访问另一个模块的内部数据被称为内容耦合,这是耦合性最强的类型,这也是我们需要尽量避免的。
假设模块A是订单模块,模块B是支付模块,如果支付模块可以直接访问订单数据表,那么至少会带来以下问题。
第一个问题是存在重复的数据访问层代码,支付和订单模块都要写订单数据访问代码。 第二个问题是如果订单业务变动,需要变更订单数据字段,如果支付模块没有跟着及时 变更,那么可能会造成业务错误。
第三个问题是如果订单业务变动,需要分库分表拆分数据,如果支付模块没有跟着及时变更,例如没有使用shardingKey进行查询或者旧库表停写,那么可能会造成支付模块严重错误。
第四个问题是业务入口没有收敛,访问入口到处散落,如果想要业务变更则需要多处修改,非常不利于维护。
公共耦合
多个模块都访问同一个公共数据环境被称为公共耦合,公共数据环境例如全局数据结构、共享通信区和内存公共覆盖区。
外部耦合
多个模块访问同一个全局简单变量(非全局数据结构)并且不是通过参数表传递此全局变量信息被称为外部耦合。
控制耦合
模块之间传递信息中包含用于控制模块内部的信息被称为控制耦合。控制耦合可能会导致模块之间控制逻辑相互交织,逻辑之间相互影响,非常不利于代码维护。
标记耦合
多个模块通过参数表传递数据结构信息被称为标记耦合,可以类比JAVA语言引用传递。
数据耦合
多个模块通过参数表传递简单数据信息被称为标记耦合,可以类比JAVA语言值传递。
非直接耦合
多个模块之间没有直接联系,通过主模块的控制和调用实现联系被称为非直接耦合,这也是一种理想的耦合方式。
浮点数
阶码
:就是幂
尾数
:就是小数后的数