软件设计师-02,计算机组成原理01

硬件组成、进制转换、校验码

ALU:Arithmetic Logic Unit,算术逻辑单元

IR:Instruction Register,指令寄存器

PC:Program Counter,程序计数器

AC:Accumulator,累加器

CPU:Central Processing Unit,中央处理单元

内容组成


计算机系统知识

  • 计算机硬件组成

  • 中央处理器单元

  • 数据表示

  • 校验码

计算机体系结构

  • 指令系统

  • 存储系统

  • 输入输出技术

  • 总线结构

安全性与可靠性

  • 系统可靠性分析

  • 计算机安全

  • 加密和认证技术

计算机硬件组成


基本概念
  • 计算机的硬件基本系统:由五大部分组成,包括运算器、控制器、存储器、输入设备(如鼠标键盘)、输出设备(如显示器)。

    • 例如,配电脑你需要CPU(运算器、控制器)、内存条硬盘(存储器)、鼠标键盘(输入设备)、屏幕(输出设备)。
  • 存储器:分为内部存储器(即内存,容量小,速度快,用于临时存放数据)和外部存储器(即硬盘、光盘等,容量大,速度慢,用于长期保存数据)。

  • 外部设备:输入设备和输出设备的合称,即外设。

  • 主机:由CPU和主存储器组成。


中央处理器单元CPU
  • CPU 组成

    • 运算器:执行算术和逻辑运算,包括加减乘除和与或非等操作。
    • 控制器
      • 程序控制:确保指令按照正确的顺序执行。
      • 时序控制:管理CPU内各组件的协调工作。
  • 运算器组成

    • 算术逻辑单元 (ALU):负责具体运算。
    • 累加寄存器 (AC):存储运算结果或源数据。
    • 数据缓冲寄存器 (DR):临时存储内存中的指令或数据。
    • 状态条件寄存器 (PSW):保存运算结果的条件码,如溢出标志等。
  • CPU 功能

    • 程序控制:执行程序中的指令。
    • 操作控制:控制数据的输入、输出和操作。
    • 时间控制:管理指令的执行时间和顺序。
    • 数据处理:执行各种算术运算(如加减乘除)和逻辑运算(如与或非比较)。
  • 控制器组成

    • 指令寄存器 (IR):临时存储CPU执行的指令。
    • 程序计数器 (PC):保存当前指令的执行地址。
    • 地址寄存器 (AR):存储当前CPU访问的内存地址。
    • 指令译码器 (ID):分析指令的操作码,确定下一步的执行操作。
image-20230916104140565

数据的进制转换


提示

小数部分转换不考


进制表示法

在计算机科学中,我们经常使用不同的进制表示数字。两种常见的进制是二进制和十六进制。以下是关于它们的一些重要信息:

  • 二进制表示:二进制使用数字0和1来表示,通常使用前缀0b。例如,二进制数0b0011表示数字3。

  • 十六进制表示:十六进制使用数字0-9和字母A-F来表示,通常使用前缀0x或简写为H。例如,十六进制数0x18F18FH表示数字399。


R进制整数转十进制

要将一个R进制数转换为十进制数,我们可以使用位权展开法。这个过程涉及将R进制数的每一位乘以R的n次方,并将它们相加,其中n是变量,从R进制数的整数最低位开始,逐渐增加。

例如,考虑一个6进制数5043,其中R=6。我们可以按以下方式将它转换为十进制数:

  • 从低位到高位排列数字:5043

  • 对于每一位,计算它乘以6的n次方,其中n从0开始递增。对应关系如下:

    • 3乘以6的0次方
    • 4乘以6的1次方
    • 0乘以6的2次方
    • 5乘以6的3次方
  • 然后将这些结果相加:3*6^0 + 4*6^1 + 0*6^2 + 5*6^3 = 1107

因此,6进制数5043等于十进制数1107。这是将R进制数转换为十进制数的基本方法。


十进制转R进制

要将一个十进制整数转换为R进制数,可以使用以下步骤:

  1. 除以R并记录余数:将十进制整数除以R,同时记录每次的余数。如果商不为0,继续除以R,直到商为0为止。

  2. 记录余数:将每次获得的余数从下到上记录,排列成从左到右的顺序。这些余数构成了转换后的R进制数。

让我们用一个例子来说明这个过程:考虑将十进制数200转换为6进制,其中R=6。

  • 第一步:200除以6,得商33,余数为2。

  • 第二步:33除以6,得商5,余数为3。

  • 第三步:5除以6,得商0,余数为5。

因为商为0,所以停止计算。然后,将所有余数从下到上记录,得到6进制数532

1694832802311
m进制转n进制

通常,将m进制数转换为n进制数需要通过十进制进行中转,但有一些特殊情况可以直接转换。

对于直接转换的情况,没有必要先将m进制数转换为十进制。这通常发生在两种进制之间存在特定关系的情况下。在这种情况下,可以直接使用公式或规则进行转换,而无需经过十进制中转。


二进制转八进制

要将二进制数转换为八进制数,可以按照以下步骤进行:

  1. 每三位二进制数转换为一位八进制数:将二进制数的位数以三个为一组分组,如果位数不是三的倍数,则在最高位(左边)补足0,以保持数值不变。

  2. 将每组二进制数转换为八进制数:将每组三位二进制数转换为对应的八进制数。例如,000对应八进制数0,011对应八进制数3,101对应八进制数5。

  3. 将所有的八进制数组合在一起:将每组的八进制数按照从左到右的顺序组合在一起,得到最终的八进制数。

例如,考虑二进制数01101,要将其转换为八进制:

  • 分组为001 101

  • 转换为八进制为1 5

所以,二进制数01101等于八进制数15


二进制转十六进制

要将二进制数转换为十六进制数,可以按照以下步骤进行:

  1. 每四位二进制数转换为一位十六进制数:将二进制数的位数以四个为一组分组,如果位数不是四的倍数,则在最高位(左边)补足0,以保持数值不变。

  2. 将每组二进制数转换为十六进制数:将每组四位二进制数转换为对应的十六进制数。例如,0010对应十六进制数2,1101对应十六进制数D。

  3. 将所有的十六进制数组合在一起:将每组的十六进制数按照从左到右的顺序组合在一起,得到最终的十六进制数。

例如,考虑二进制数101101,要将其转换为十六进制:

  • 分组为0010 1101

  • 转换为十六进制为2 D

所以,二进制数101101等于十六进制数2D

数(在计算机中)的表示


机器数和定点表示法(不怎么考)
  • 机器数:各种数值在计算机中表示的形式,其特点是使用二进制计数制,数的符号用0和1表示,小数点则隐含,不占位置。

    • 机器数有无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为0,负数符号位为1。

定点表示法
  • 纯小数表示法

    在纯小数表示法中,小数点的位置约定在机器数的最高数值位之前。这意味着数值被解释为小数,小数点之前的位表示整数部分,小数点之后的位表示小数部分。

    例如,二进制的1101.101可以表示为纯小数,其中小数点之前的1101是整数部分,小数点之后的101是小数部分。

  • 纯整数表示法

    在纯整数表示法中,小数点的位置约定在机器数的最低数值位之后。这意味着数值被解释为整数,小数点之后的位被省略,不表示小数部分。

    例如,二进制的1101.101可以表示为纯整数,其中小数点之前的1101是整数部分,小数点之后的101被省略。


真值

真值是机器数所代表的实际数值。根据机器数的符号位以及整数或小数表示法,可以将机器数转换为真值。真值表示机器数对应的实际数值,它是我们在计算机中进行数值计算和处理时所关心的。


数的编码方式
  • 原码:一个数的正常二进制表示,最高位表示符号,数值0的源码有两种形式:+0(00000000)和-0(10000000)。

  • 反码:正数的反码即原码。

    负数的反码是在原码的基础上,除符号位外,其他各位按位取反。数值0的反码也有两种形式:+0(00000000),-0(11111111)。

  • 补码:正数的补码即原码。

    负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后未位+1,若有进位则产生进位。因此数值0的补码只有一种形式+0=-0=00000000

  • 移码:用作浮点运算的阶码,无论正数负数,都是将该原码的补码的首位(符号位)取反得到移码。

机器字长为n时各种码制表示的带符号数的取值范围(差别在于0的表示,原码和反码分+0和-0,补码只有一个0,因此可以多表示一个。

image-20230916143407772

若机器字长为8,给出45和-45的原码,反码,补码

image-20230916143649687
浮点数的表示
  • 浮点数:表示方法为N=F*2^E,其中E称为阶码,F称为尾数。类以于十进制的科学计数法,如85.125=0.85125*10^2,二进制如101.011=0.101011*2^3

  • 在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数0负数1),其表示如下:

    image-20230916144234796

  • 很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定

  • 尾数的表示采用规格化方法,也即带符号尾数的补码必须为1.0xxxx(负数)或者0.1xxxx(负数),其中x可为0或1

  • 浮点数的运算:

    1. 对阶(使两个数的阶码相同,小阶同大阶看齐,较小阶码增加儿位,尾数就右移几位)

    2. 尾数计算(相加,若是减运算,则加负数)

    3. 结果规格化(即尾数表示规格化,带符号尾数转换为1.0xxxx或0.1xxxx)

image-20230916145030116
算数运算和逻辑运算
  • 数学运算:数与数之间的算术运算包括加、减、乘、除等基本算术运算。

  • 二进制逻辑运算

    • 逻辑与(&):0和1相与,只要有一个为0结果就为0,两个都为1才为1。

    • 逻辑或(|):0和1相或,只要有一个为1结果就为1,两个都为0才为0。

    • 异或(^):同0非1,即参加运算的二进制数同为0或者同为1结果为0,一个为0另一个为1结果为1。

    • 逻辑非(!):0的非是1,1的非是0。

    • 逻辑左移(<<):二进制数整体左移n位,高位若溢出则舍去,低位补0。

    • 逻辑右移(>>):二进制数整体右移n位,低位溢出则舍去,高位补0。

校验码


奇偶校验码
  • 码距(Hamming Distance) 是用来衡量两个编码之间差异的概念。

    • 在单个编码中,码距是指从一个编码到另一个编码所需改变的位数。例如,在编码A:00到编码B:11的转换中,码距为2,因为需要改变两位才能从A变成B。

    • 一般来说,码距越大,表示两个编码之间的差异越大,这对于纠错和检错非常有用。大的码距意味着编码之间具有更好的容错性,可以检测到或甚至纠正更多的错误。

  • 奇偶校验码(Parity Check Code) 是一种常见的错误检测机制,通常用于在数据传输中检测错误。奇偶校验通过在编码中增加一个校验位来使编码中的1的个数为奇数(奇校验)或偶数(偶校验)。

    • 奇校验:在编码中,含有奇数个1。发送给接收方后,接收方会计算接收到的编码中有多少个1,如果是奇数个,则认为无误;如果是偶数个,则认为有误。

    • 偶校验:在编码中,含有偶数个1。同样,接收方计算接收到的编码中的1的个数,如果是偶数个,则认为无误;如果是奇数个,则认为有误。

    奇偶校验能够检测到单一位的错误,但不能纠正错误。它的主要目的是在传输过程中快速检测是否发生了错误,以便采取相应的措施,如请求重新传输数据。在需要更高级别的错误纠正时,通常会使用更复杂的编码和校验方法,如循环冗余校验(CRC)或汉明码(Hamming Code)。


循环冗余校验码 (CRC)
  • 编码原理:CRC只能检错,不能纠错,原理如下

    1. 首先,将原始报文(信息码)除以特定的多项式,得到一个余数。
    2. 将这个余数作为校验位添加到原始报文的末尾,形成一个新的编码,然后发送给接收方。
    3. 接收方也进行同样的操作,将接收到的编码除以相同的多项式,并得到一个余数。
    4. 如果接收方的余数与发送方的余数不同,就表示可能发生了错误。
  • 编码格式

    image-20230916150140589

    • 左侧是数据位,即原始数据。

    • 右侧是校验位,由信息码产生。校验码的位数越长,校验能力越强。

  • 由此可知,CRC由两部分组成,左边为信息码(原始数据),右边为校验码校验码是由信息码产生的,校验码位数越长,校验能力越强。求CRC编码时,采用的是模2运算(按位运算,不发生借位和进位)。

  • 例题

    image-20230916150627373
    • 如何计算?

      1694848652397

    • 模2除法

      1694850022348

  • 真题

    image-20230916154702781


海明校验码(只考计算校验位数)
  • 海明码:本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距实现检错和纠错。

    • 设数据位是n位,校验位是k位,则n和k必须满足以下关系:2^k-1>=n+k
  • 原理:

    • 与CRC校验码不同,海明校验码不是在信息最后加上校验位,而是在每个2的n次方位置上加。因此,这些位置也被称为校验位。我们会将原始报文从右往左进行编号,那么,对应的校验位为1,2,4,8,16…

image-20230916155010915image-20230916155607006image-20230916155848155