第一章:计算机系统知识

原/反/补/移码

数值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结构

image-20230113222522553

计算机的主机中包含两大部件:CPU和内存(主存储器)。而对于声卡显卡、鼠标键盘这些都是属于外设的。

对于CPU,我们需要了解的就是运算器和控制器,以及这两者中的一些寄存器。

算术逻辑单元 ALU:它是运算器的重要组成部件,负责处理数据,实现对数据的算术运算逻辑运算

累加寄存器 AC:通常简称累加器,它是一个通用寄存器,功能是当运算器的算术逻辑单元执行算术或逻辑运算时,为ALU提供一个工作区。

数据缓冲寄存器 DR:作为CPU和内存、外设之间数据传送的中转站,作为CPU和内存外设之间在操作速度上的缓冲。

状态条件寄存器 PSW:保存由算术指令逻辑指令运行或测试的结果建立的各种条件码内容。

程序计数器 PC:用于存放下一条指令的地址。当一条指令被获取后,程序计数器的地址加1,指向下一条指令的地址。

指令寄存器 IR:用于存放当前从主存储器读出的正在执行的一条指令

地址寄存器 AR:用于保存当前CPU访问的内存单元的地址

指令译码器 ID:计算机执行一条指令时,首先分析这条指令的操作码是什么,以决定操作的性质和方法,然后才能控制计算机其他各部件协同完成指令表达的功能,这个分析工作由指令译码器来完成

流水线

基本概念

image-20230113230034983

流水线计算(公式)

image-20230113230053307

首先,流水线周期是指在(取指、分析、执行)三个阶段中时间最长的一段,对应上面的例题,最长的一段时间为2ns,所以流水线周期为2ns。

100条指令全部执行完毕需要的时间为:理论公式:(2+2+1)+(100-1)*2=203ns。

100条指令全部执行完毕需要的时间为:实践公式:(3+100-1)*2=204ns。(公式中的k表示指令被分成了几段)

流水线吞吐率计算

考点知识

选择题考点

RISC
精简指令集计算机
CISC
复杂指令集计算机
指令种类 少、精简 多、丰富
指令复杂度 低(简单) 高(复杂)
指令长度 固定 变化
寻址方式 复杂多样
实现(译码)方式 硬布线控制逻辑
(组合逻辑控制器)
微程序控制技术
通用寄存器数量 多、大量 一般
流水线技术 支持 不支持

CPU组成

CPU主要有运算器、控制器、寄存器组和内部总线等部件组成,如图所示。

01-CPU基本组成结构示意图-20230114-064

注意:内部总线和系统总线不一样,算数逻辑运算单元是运算器。

SRAM & DRAM

SRAM DRAM
原理 触发器 电容
读出 非破坏性 破坏性
刷新 不用
送地址 一起送 分列分开送
速度
集成度
功耗
成本
用途 Cache 内存

DRAM使用电容存储信息需要周期性的刷新

计算机系统使用补码表示有符号的数值,可以将减法运算转换成加法运算从而简化运算器的设计。

认证方式安全性最低是口令认证

软件著作权

主要是看书面合同是否有明确规定,没有则著作权归受托人

软件著作权

七种耦合类型

七种代码耦合类型根据耦合程度由高到低排序分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合非直接耦合

1-图解七种代码耦合类型 20230120-165

内容耦合

一个模块可以直接访问另一个模块的内部数据被称为内容耦合,这是耦合性最强的类型,这也是我们需要尽量避免的。

2-内容耦合-20230120-128

假设模块A是订单模块,模块B是支付模块,如果支付模块可以直接访问订单数据表,那么至少会带来以下问题。

第一个问题是存在重复的数据访问层代码,支付和订单模块都要写订单数据访问代码。 第二个问题是如果订单业务变动,需要变更订单数据字段,如果支付模块没有跟着及时 变更,那么可能会造成业务错误。

第三个问题是如果订单业务变动,需要分库分表拆分数据,如果支付模块没有跟着及时变更,例如没有使用shardingKey进行查询或者旧库表停写,那么可能会造成支付模块严重错误。

第四个问题是业务入口没有收敛,访问入口到处散落,如果想要业务变更则需要多处修改,非常不利于维护。

公共耦合

多个模块都访问同一个公共数据环境被称为公共耦合,公共数据环境例如全局数据结构、共享通信区和内存公共覆盖区。

03-公共耦合- 20230120-555

外部耦合

多个模块访问同一个全局简单变量(非全局数据结构)并且不是通过参数表传递此全局变量信息被称为外部耦合。

4-外部耦合-20230120-907

控制耦合

模块之间传递信息中包含用于控制模块内部的信息被称为控制耦合。控制耦合可能会导致模块之间控制逻辑相互交织,逻辑之间相互影响,非常不利于代码维护。

5-控制耦合-20230120-537

标记耦合

多个模块通过参数表传递数据结构信息被称为标记耦合,可以类比JAVA语言引用传递。

6-标记耦合-20230120-556

数据耦合

多个模块通过参数表传递简单数据信息被称为标记耦合,可以类比JAVA语言值传递。

7-数据耦合-20230120-856

非直接耦合

多个模块之间没有直接联系,通过主模块的控制和调用实现联系被称为非直接耦合,这也是一种理想的耦合方式。

8-非直接耦合-20230120-300

浮点数

阶码:就是幂

尾数就是小数后的数