《软件设计师》复习笔记(2.2)——效验码、体系结构、指令、流水线

news2025/7/15 7:27:34

目录

一、校验码

码距

奇偶校验码

循环冗余校验码(CRC)

海明码

真题示例: 

二、体系结构

Flynn分类法

三、指令系统

指令组成

指令执行过程

指令的寻址方式

操作数的寻址方式

CISC vs RISC

真题示例:

四、流水线技术

1. 基本概念

2. 流水线优化技术

真题示例:


一、校验码

  1. 码距

    • 单个编码的码距为1(如00变为01需改1位)。
    • 两个编码间的码距是转换所需改变的最小位数(如0011码距为2)。
    • 码距越大,纠错和检错能力越强
  2. 奇偶校验码

    • 奇校验:编码中1的个数为奇数;偶校验:1的个数为偶数。
    • 码距为2,只能检1位错,无法纠错
  3. 循环冗余校验码(CRC)

    • 通过生成多项式(如G(x)=x^4+x+1)计算校验位,只能检错,不能纠错
    • 步骤
      1. 原始信息后补r个0(r为生成多项式阶数)。
      2. 模2除法(不进位、不借位)计算余数。
      3. 余数作为校验位附加到原始信息后。
    • 接收方校验:用相同G(x)除接收到的数据,余数为0则无错。
  4. 海明码

    • 原理:通过插入校验位扩大码距,实现检错和纠错
    • 校验位位置:位于2^n(如第1、2、4、8位)。
    • 计算校验位
      • 数据位编号拆分后,校验位由其覆盖的数据位异或得到(如第4位校验D7、D6、D5)。
    • 纠错:接收方通过异或运算定位错误位并纠正。
    • 公式2^k - 1 ≥ n + kn为数据位数,k为校验位数)。

计算校验码

将所有信息位的编号都拆分成二进制表示,如下所示: ​

7654321位数
1011信息位
001校验位

上图中,7=4+2+1​,表示7由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)共同校验,同理,第6位数据位6=4+2​,第5位数据位5=4+1​,第3位数据位3=2+1​,前面知道,这些2的n次方都是校验位,可知,第4位校验位校验第7、6、5三位数据位,因此,第4位校验位r2等于这三位数据位的值异或,第2位(7,6,3)和第1位(7,5,3)校验位计算原理同上。

7 = 2^2 + 2^1 + 2^0

6 = 2^2 + 2^1

5 = 2^2 + 2^0

3 = 2^1 + 2^0

 r_2 = I_4 \oplus I_3 \oplus I_2

r_1 = I_4 \oplus I_3 \oplus I_1

r_0 = I_4 \oplus I_2 \oplus I_1

计算出三个校验位后,可知最终要发送的海明校验码为1010101

检错和纠错原理

接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算: ​

r2​⊕I4​⊕I3​⊕I2​​; ​r1​⊕I4​⊕I3​⊕I1​​; ​r0​⊕I4​⊕I2​⊕I1​​;

7654321位数
I4I3I2I1信息位
R2R1R0校验位

校验类型
校验类型校验位计算公式示例(数据1011)
偶校验​ri​=覆盖数据位异或​​r2​=I4​⊕I3​⊕I2​=1⊕0⊕1=0​
奇校验​ri​=覆盖数据位异或⊕1​​r2​=(1⊕0⊕1)⊕1=1

如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确,假设是偶校验,且接收到的数据为1011101(第四位出错),此时,运算的结果为:

​r2​⊕I4​⊕I3​⊕I2​=1⊕1⊕0⊕1=1​; ​r1​⊕I4​⊕I3​⊕I1​=0⊕1⊕0⊕1=0​; ​r0​⊕I4​⊕I2​⊕I1​=1⊕1⊕1⊕1=0​;

错误定位原理
校验子错误位置数学原理
100第4位2²=4
011第3位2¹+2⁰=3
101第5位2²+2⁰=5

这里不全为0,表明传输过程有误,并且按照r2r1r0排列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错方法就是将该位逆转。

7654321位数
1011信息位
001校验位


真题示例: 

循环冗余校验码(Cyclic Redundancy Check,CRC)是数据通信领域中最常用的一种差错校验码,该校验方法中,使用多项式除法(模2除法)运算后的余数为校验字段。若数据信息为n位,则将其左移k位后,被长度为k + 1位的生成多项式相除,所得的k位余数即构成k个校验位,构成n + k位编码。若数据信息为1100,生成多项式为X³+X+1(即1011),则CRC编码是( )。

A.1100010 B.1011010 C.1100011 D.1011110

根据循环冗余校验码(CRC)的计算步骤来求解。

步骤一:确定数据信息和生成多项式
  • 数据信息为 ​1100​ ,其位数 ​n = 4​ 。
  • 生成多项式为 X^3+X+1​ ,对应的二进制序列为 ​1011​ ,其长度为 k+1=4​ ,则 k=3​ ,即校验位的位数为3位。
步骤二:对数据信息左移k位

将数据信息 ​1100​ 左移 k=3​ 位,得到 ​1100000​ 。

步骤三:进行模2除法

用左移后的数 ​1100000​ 除以生成多项式对应的二进制序列 ​1011​ ,模2除法的计算过程如下:

  • 被除数 ​1100000​ ,除数 ​1011​ ,第一次相除: ​1100​ - ​1011​ = ​0011​ ,商 ​1​ 。
  • 把被除数下一位 ​0​ 移下来,得到 ​00110​ ,继续相除: ​00110​ - ​00000​ (因为 ​1011​ 大于 ​00110​ ,这里减 ​0​ ) = ​00110​ ,商 ​0​ 。
  • 再把被除数下一位 ​0​ 移下来,得到 ​001100​ ,相除: ​001100​ - ​1011​ = ​0101​ ,商 ​1​ 。
  • 把被除数最后一位 ​0​ 移下来,得到 ​01010​ ,相除: ​01010​ - ​1011​ = ​0001​ ,商 ​1​ 。

最终得到余数为 ​010​ ,这就是3位校验位。

步骤四:得到CRC编码

将校验位 ​010​ 附加到原数据信息 ​1100​ 后面,得到 ​1100010​ ,即CRC编码为 ​1100010​ 。

海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误。对于32位的数据,至少需要加()个校验位才能构成海明码。  

设数据位为m​位,校验位为r​位,要构成海明码需要满足2^r≥m+r+1​。 已知数据位m=32​,我们可以通过代入不同的r​值来进行验证:

  • 当r=5​时,25=32​,m+r+1=32+5+1=38​,32<38​,不满足条件。
  • 当r=6​时,26=64​,m+r+1=32+6+1=39​,64>39​,满足条件。

所以对于32位的数据,至少需要加6个校验位才能构成海明码

以10位数据为例,其海明码表示为D9D8D7D6D5D4 P4 D3D2D1 P3 D0 P2P1中,其中Di(0≤i≤9)表示数据位,Pj(1≤j≤4)表示校验位,数据位D9由P4、P3和P2进行校验(从右至左D9的位序为14,即等于8 + 4 + 2,因此用第8位的P4、第4位的P3和第2位的P2校验),数据位D5由()进行校验。

A.P4P1 B.P4P2 C.P4P3P1 D.P3P2P1

 从右至左数据位D5的位序为10。将10转换为二进制数:10(10)​=1010(2)​=2^3+2^1=P4P2


二、体系结构

  1. Flynn分类法

    根据指令流数据流的组合方式,计算机体系结构分为4类:

    类型指令流数据流特点代表
    SISD传统单核串行处理器单CPU计算机
    SIMD单指令并行处理多数据向量机、GPU
    MISD理论存在,无实际应用-
    MIMD多指令多数据并行多核CPU、分布式系统
    1. 多核计算机属于MIMD(多指令流多数据流)。
    2. MISD不可行:因一条数据流无法被多条指令同时控制。

三、指令系统

  1. 指令组成

    • 操作码:指定操作类型。
    • 操作数:参与运算的数据或地址。
  2. 指令执行过程

  3. 指令的寻址方式

    • 顺序寻址:一条指令接一条指令顺序执行。
    • 跳跃寻址:下一条指令的地址码由本条指令给出,跳转后开始顺序执行。(程序计数器的内容也相应改变,以便跟踪新的指令地址)
  4. 操作数的寻址方式

    方式特点示例(MOV R1, [X])
    立即寻址操作数为直接值MOV R1, 5
    直接寻址地址码为内存地址MOV R1, [1000H]
    间接寻址地址码指向的内存存储实际地址MOV R1, [[1000H]]
    寄存器寻址操作数在寄存器中MOV R1, R2
    基址寻址基址寄存器 + 偏移量MOV R1, [BX+10H]
    变址寻址变址寄存器 + 偏移量MOV R1, [SI+20H]
  5. CISC vs RISC

    特性CISC(复杂指令集)RISC(精简指令集)
    指令数量多(支持复杂操作)少(仅常用指令)
    指令长度可变长固定长度
    实现方式微程序控制硬件实现(硬布线)
    寄存器使用较少大量通用寄存器
    典型应用x86架构(Intel/AMD)ARM、MIPS、RISC-V

真题示例:

 Flynn分类法根据计算机在执行程序的过程中( )的不同组合,将计算机分为4类。当前主流的多核计算机属于( )计算机。

A.指令流和数据流 B.数据流和控制流 C.指令流和控制流 D.数据流和总线带宽

A.SISD B.SIMD C.MISD D.MIMD

Flynn分类法就是依据指令流(计算机执行的指令序列)和数据流(指令执行过程中处理的数据序列)的不同组合来对计算机体系结构进行分类的,这是该分类法的基本定义。 

多核计算机中,每个核心可以同时执行不同的指令,处理不同的数据,MIMD(多指令流多数据流)符合多指令流多数据流的特点。SISD(单指令流单数据流)是传统单核串行处理器;SIMD(单指令流多数据流)如向量机、GPU,一条指令处理多个数据;MISD(多指令流单数据流)理论上存在,但实际中没有应用。

 以下关于复杂指令集计算机(Complex Instruction Set Computer,CISC) 的叙述中,正确的是( )。

A.只设置使用频度高的一些简单指令,不同指令执行时间差别很小

B.CPU中设置大量寄存器,利用率低

C.常采用执行速度更快的组合逻辑实现控制器

D.指令长度不固定,指令格式和寻址方式多

关于复杂指令集计算机(CISC)的叙述中,正确的是指令长度不固定,指令格式和寻址方式多

  • 选项A:只设置使用频度高的一些简单指令,不同指令执行时间差别很小,这是RISC(精简指令集计算机)的特点,而不是CISC的特点,CISC指令集复杂,指令执行时间差别大。
  • 选项B:CISC中寄存器数量较少,利用率低,而不是设置大量寄存器,RISC通常设置大量通用寄存器。
  • 选项C:CISC常采用微程序控制实现控制器,而不是组合逻辑,RISC常采用执行速度更快的组合逻辑实现控制器。
  • 选项D:CISC指令长度不固定,指令格式和寻址方式多,这是CISC的典型特征。

四、流水线技术

1. 基本概念

  • 流水线周期:最长段的执行时间。
  • 总时间公式

    \text{Total time}=\text{Time for the first instruction to complete}+(\text{Number of instructions}-1)\times\text{Pipeline cycle time}

  • 吞吐率:单位时间完成的指令数 = 指令数 / 总时间。
  • 加速比

    \text{Speed - up ratio}=\frac{\text{Non - pipelined time}}{\text{Pipelined time}}=\frac{n\times k\times t}{(k + n - 1)\times t}

    (理想情况下,加速比≈流水线段数k)

2. 流水线优化技术

技术原理特点
超流水线增加流水线级数(时间换空间)提高主频,减少每段耗时
超标量并行多条流水线(空间换时间)需硬件调度,提高IPC
VLIW超长指令字,软件调度并行硬件简单,依赖编译器优化

真题示例:

吞吐率

流水线的吞吐率是指流水线在单位时间里所完成的任务数或输出的结果数。设某流水线有5段,有1段的时间为2ns,另外4段的每段时间为1ns,利用此流水线完成100个任务的吞吐率约为( )个/s。

A.500×10^6 B.490×10^6 C.250×10^6 D.167×10^6

  1. 确定流水线周期
    • 流水线周期由流水线中耗时最长的段决定。在该流水线中,有1段时间为2ns,另外4段每段时间为1ns,所以流水线周期T=2ns​。
  2. 计算完成100个任务的总时间
    • 根据公式总时间=第一条指令完整时间+(指令数−1)×流水线周期​。
    • 第一条指令完整通过5段流水线,时间为2+1+1+1+1=6ns​。
    • 后面100−1=99​条指令,每条指令的执行时间为流水线周期2ns​。
    • 所以总时间t=6+(100−1)×2=6+198=204ns​。
  3. 计算吞吐率
    • 吞吐率TP=总时间指令数​​,指令数为100,总时间t=204ns=204×10^−9s​。
    • TP=\frac{100}{204\times10^{-9}}\approx490\times10^{6}\text{/s}个/s​

 缓冲区

假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为15μs,由缓冲区送至用户区的时间是5μs,在用户区内系统对每块数据的处理时间为1μs,若用户需要将大小为10个磁盘块的Doc1文件逐块从磁盘读入缓冲区,并送至用户区进行处理,那么采用单缓冲区需要花费的时间为( )μs;采用双缓冲区需要花费的时间为( )μs。

A.150 B.151 C.156 D.201

A.150 B.151 C.156 D.201

单缓冲区情况

  1. 分析处理过程
    • 采用单缓冲区时,读入一块数据到缓冲区需要15μs,从缓冲区送至用户区需要5μs,在用户区处理需要1μs。
    • 处理第一块数据时,总时间为15+5+1=21μs​。
    • 从第二块开始,因为是串行处理,每块数据的处理时间为读入时间(15μs,因为在将上一块数据从缓冲区送至用户区并处理时,下一块数据不能读入缓冲区),所以后面9块数据每块处理时间为15μs。
  2. 计算总时间
    • 总时间t=(15+5+1)+(10−1)×15=21+135=201μs

双缓冲区情况

  1. 分析处理过程
    • 采用双缓冲区时,两个缓冲区可以交替工作。读入第一块数据到第一个缓冲区需要15μs,然后将第一块数据从第一个缓冲区送至用户区需要5μs,在用户区处理需要1μs,共15+5+1=21μs​。
    • 在这21μs内,第二块数据可以读入第二个缓冲区(15μs)。
    • 之后,从第二个缓冲区送数据到用户区和处理的同时,可以将第三块数据读入第一个缓冲区,以此类推。
    • 实际上,除了第一块数据的读入、传送和处理是顺序进行外,后面9块数据的读入时间可以和前面数据的传送与处理时间重叠。
  2. 计算总时间
    • 总时间t=10×15+5+1=156μs​

 加速比

流水线技术是通过并行硬件来提高系统性能的常用方法。对于一个k段流水线,假设其各段的执行时间均相等(设为t),输入到流水线中的任务是连续的理想情况下,完成n个连续任务需要的总时间为( )。若某流水线浮点加法运算器分为5段,所需要的时间分别是6ns、7ns、8ns、9ns和6ns,则其最大加速比为( )。

A. nkt B. (k + n - 1)t C. (n - k)kt D. (k + n + 1)t

A. 4 B. 5 C. 6 D. 7

  1. 流水线总时间公式

    • 第一条指令需要完整通过k段流水线,耗时kt。
    • 后续每条指令只需要一个流水线周期t(因为流水线已充满)。
    • 因此,n条指令的总时间为:

      T=kt+(n−1)t=(k+n−1)t

  1. 流水线周期

    • 流水线周期由最慢的段决定,即T_{\text{pipeline}} = \max(6,7,8,9,6) = 9 \text{ns}​。
  2. 非流水线时间

    • 非流水线情况下,一条指令需要完整通过所有段:

      T_{\text{non-pipeline}} = 6 + 7 + 8 + 9 + 6 = 36 \text{ns}

  3. 最大加速比

    • 加速比公式:

      \text{Speedup} = \frac{T_{\text{non-pipeline}}}{T_{\text{pipeline}}} = \frac{36*n}{9*n+27} = 4

    • 题目问的是“最大加速比”,即理论极限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IsaacSim Asserts 配置

IsaacSim Asserts 配置 背景解决方案资源准备具体操作步骤验证 背景 我是习惯使用 isaacsim 的 standalone 模式&#xff0c;使用 python 脚本直接运行 script&#xff0c;然后弹窗&#xff0c;按照规则正确运行即可&#xff0c;但是&#xff0c;这就导致了一些问题出现&#…

接口自动化 ——fixture allure

一.参数化实现数据驱动 上一篇介绍了参数化&#xff0c;这篇 说说用参数化实现数据驱动。在有很多测试用例的时候&#xff0c;可以将测试用例都存储在文件里&#xff0c;进行读写调用。本篇主要介绍 csv 文件和 json 文件。 1.读取 csv 文件数据 首先创建 csv 文件&#xff…

systemctl管理指令

今天我们来继续学习服务管理指令,接下来才是重头戏-systemctl,那么话不多说,直接开始吧. systemctl管理指令 1.基本语法: systemctl [start | stop | restart | status]服务 注&#xff1a;systemctl指令管理的服务在/usr/lib/ systemd/system查看 2.systemctl设置服务的自…

【文件操作与IO】详细解析文件操作与IO (二)

本篇博客是上一篇文章的续写,重点介绍数据流,还包括三道练习题. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心…

go-map+sync.map的底层原理

map 哈希冲突解决方式 1.拉链法 2.开放地址法 底层结构 Go 的 map 在源码中由 runtime.hmap 结构体表示&#xff0c;buckets-指向桶数组的指针(常规桶)&#xff0c;oldbuckets-扩容时指向旧桶数组的指针。 type hmap struct {count int // 当前元素个数&#xff08;len…

Day53 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…

物联网智慧教室项目(完整版)

物联网智慧教室项目(一)&#xff1a;智慧教室项目解决方案 一、智慧教室项目设计 &#xff08;一&#xff09;环境信息采集控制功能 1、硬件设计 使用STM32开发板模拟灯光控制&#xff0c;报警控制&#xff0c;光照信息采集&#xff1a; 灯光控制通过GPIO控制板载LED报警控…

计算机网络期中复习笔记(自用)

复习大纲 –第一章 概述 计算机网络的组成 网络边缘&#xff1a;主机和网络应用程序&#xff08;又称为“端系统”&#xff09; 端系统中运行的程序之间的通信方式可划分为两大类&#xff1a; 客户/服务器方式&#xff08;C/S方式&#xff09; 对等方式&#xff08;P2P方式…

14.Chromium指纹浏览器开发教程之WebGL指纹定制

WebGL指纹概述 当在浏览器打开的网页上浏览内容时&#xff0c;看到的大多是平面的、静态的图像和文字。但是有时想要在网页上看到更加生动、立体的图像&#xff0c;如3D游戏、虚拟现实应用等。这时&#xff0c;就需要用到WebGL。 简单来说&#xff0c;WebGL&#xff08;Web G…

GitHub SSH连接终极解决方案

GitHub SSH连接终极解决方案&#xff1a;443端口修改多场景故障排查指南 一、问题现象速查 当开发者执行以下命令时出现连接异常&#xff1a; ssh -T gitgithub.com常见报错类型&#xff1a; 经典端口阻塞ssh: connect to host github.com port 22: Connection refused密钥验…

每日算法【双指针算法】(Day 1-移动零)

双指针算法 1.算法题目&#xff08;移动零&#xff09;2.讲解算法原理3.编写代码 1.算法题目&#xff08;移动零&#xff09; 2.讲解算法原理 数组划分&#xff0c;数组分块&#xff08;快排里面最核心的一步&#xff09;只需把0改为tmp 双指针算法&#xff1a;利用数组下标来…

B端管理系统:企业运营的智慧大脑,精准指挥

B端管理系统的定义与核心功能 B端管理系统&#xff08;Business Management System&#xff09;是专门设计用于支持企业内部运作和外部业务交互的一套软件工具。它集成了多种功能模块&#xff0c;包括但不限于客户关系管理(CRM)、供应链管理(SCM)、人力资源管理(HRM)以及财务管…

使用Java基于Geotools的SLD文件编程式创建与磁盘生成实战

前言 在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地图的可视化呈现至关重要&#xff0c;而样式定义语言&#xff08;SLD&#xff09;文件为地图元素的样式配置提供了强大的支持。SLD 能够精确地定义地图图层中各类要素&#xff08;如点、线、面、文本等&#x…

Git 命令速查手册

听说用美图可以钓读者&#xff1f; 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…

网络编程 - 4 ( TCP )

目录 TCP 流套接字编程 API 介绍 SeverSocket Socket 用 TCP 实现一个回显服务器 服务端 客户端 运行调试 第一个问题&#xff1a;PrintWriter 内置的缓冲区 - flush 刷新解决 第二个问题&#xff1a;上述代码中&#xff0c;需要进行 close 操作吗&#xff1f; 第三…

OSPF综合实验(HCIP)

1&#xff0c;R5为ISP&#xff0c;其上只能配置Ip地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过ppp协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3&#xff0c;所有设备均可访问R5的环回&…

真实波幅策略思路

该策略是一种基于ATR&#xff08;Average True Range&#xff09;指标的交易策略&#xff0c;主要用于期货市场中的日内交易。策略的核心思想是利用ATR指标来识别市场的波动范围&#xff0c;并结合均线过滤来确定买入和卖出的时机。 交易逻辑思维 1. 数据准备与初始化 - 集合竞…

leetcode 674. Longest Continuous Increasing Subsequence

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析明确并理解递推公式 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。与第300题的唯一区别就是&#…

STM32 外部中断EXTI

目录 外部中断基础知识 STM32外部中断框架 STM32外部中断机制框架 复用功能 重映射 中断嵌套控制器NVIC 外部中断按键控制LED灯 外部中断基础知识 STM32外部中断框架 中断的概念&#xff1a;在主程序运行过程中&#xff0c;出现了特点的中断触发条件&#xff0c;使得…

Linux:基础IO---动静态库

文章目录 1. 动静态库前置知识1.1 动静态库知识回顾1.2 什么是动静态库 2. 动静态库2.1 站在库的制作者的角度2.2 站在库的使用者的角度2.3 动态库是怎么被加载的&#xff08;原理&#xff09; 序&#xff1a;上一篇文章我们从认识到理解&#xff0c;从理解到实现场景&#xff…