计算机系统组成复习

复习过程中个人的一些理解,主要是对一些易混淆或者过程复杂的概念题目加以解释、梳理。

名词解释

主机、主存、辅存

  1. 主机:计算机硬件的主体部分,由CPU和主存储器组成
  2. 主存:主存储器。存放正在运行的程序和数据的存储器。也称内存。
  3. 辅存:外部存储器。存储容量大,成本低,速度慢,断电后数据仍存在。

主存、主存储器、内存、内存储器指的是同一个东西。我们说的电脑8G、16G就是内存大小。内存太小,开多程序就会卡甚至未响应、闪退。
辅存、辅助存储器、外存、外部存储器指的是同一个东西。我们用的机械硬盘、固态硬盘就是辅存。

存储字、存储单元、存储字长、机器字长

  1. 存储字:一个存储单元所存的二进制码组合。
    存储字是逻辑单位,它单纯指代存储单元中的内容。
    比如一个存储单元中存着0011011001111101,我们称这一串为存储字。我们能明确这个存储字的内容,但不能明确这个存储字的意义,因为它既可表示为由十六进制字符组成的367DH(ASCII码);又可代表16位的二进制数,此值对应十进制数为13 949;还可代表两个ASCII码:“6”和“}”。(实例来源于百度百科)
  2. 存储单元:可存放一个机器字并具有特定存储地址的存储单位。
    它不是存储器的最小单元,但一定是CPU访问存储器的最小单位。比如通常一个存储单元由八个二进制位组成(一个字节),每次CPU进行读写操作都是以n个存储单元(n个字节)进行的。
  3. 存储字长:一个存储单元中二进制码(存储字)的位数。
    存储字长可以是8、16、32,意味着存储单元可以是1个字节、2个字节、4个字节(通常是一个字节)
  4. 机器字长:CPU一次能处理的二进制数
    主要与CPU寄存器位数有关,也就是硬件结构有关。我们说的32/64位操作系统,指的就是机器字长为32/64位。所以64位会贵一点,但是运行速度更快。

访问时间和存取周期

  1. 访问时间:存储器从启动一次访问操作到完成该操作的时间,也叫读写时间
  2. 存取周期:存储器连续启动两次访问操作所需的最小间隔时间,也叫存储周期
  3. 存储器带宽:单位时间内存储器存取的信息量

即连续两次的访问操作,第一次访问操作启动到这次结束的时间为访问时间;第一次访问操作启动到第二次访问操作启动的时间为存取周期
假设进行两次访问操作(读或写),第一次访问操作 -> 等一会 -> 第二次访问操作,分别代表访访问时间 -> 存取周期 -> 访问时间。
因为硬件设计的原因,连续两次访问操作不可能完美衔接,中间会有等一会的时间,因此存取周期通常略大于访问时间。

微命令、微指令、微操作、微程序

  1. 微命令:控制部件通过控制线向执行部件发出各种控制命令。
  2. 微操作:由微命令控制实现的最基本的操作过程
  3. 微指令:以二进制编码形式存放在控制存储器的单元中,用来实现指令中的某一步操作。
    通常由控制信号字段、分支地址字段和分支控制字段三部分组成。控制字段中,每一位代表一个微命令。
  4. 微程序:一个有序的微指令序列
  5. 微程序控制器:采用微程序控制方式来产生微命令的控制器。
  6. 组合逻辑控制器:采用组合逻辑线路实现来产生微命令的控制器

简单来说,微程序是一组微指令的集合;微指令由一组微操作一步步完成;在微指令的控制字段中,每一位代表一个微命令。
控制部件通过控制线向执行部件发出各种控制命令,通常这种控制命令叫做微命令,是最小单位,组成微指令,而执行部件接受微命令后所执行的操作就叫做微操作。
一条机器指令的功能通常由微程序来实现的

CPU、CU等一堆英文元件

  1. CPU:中央处理器。计算机硬件的核心,主要由运算器和控制器组成
  2. CU:控制单元。控制器的核心。用于产生微操作命令序列
  3. ALU:算术逻辑运算单元,处理器的核心部件,进行算数、逻辑运算。
  4. IR:指令寄存器。存放当前正在执行的指令。
  5. PC:程序计数器。存放下一条要执行的指令的地址。
  6. MAR:存储器地址寄存器。在内存中用来存放将要访问的存储单元的地址
  7. MDR:存储器数据缓冲寄存器。在内存中用来存放某单元读出或写入某存储单元的数据
  8. RAM:随机存取存储器。存取任一单元的时间相同(不用顺序查询),断电后内容消失。可分为动态(DRAM)和静态(SRAM)
  9. ROM:只读存储器。只能读出原有的内容,不能由⽤用户再写⼊入新内容。ROM可分为可编程ROM、可擦除可编程ROM、电擦除可编程ROM

其中注意IR和PC的区别。
IR存的是指令而PC存的是地址。系统通过PC获取下一条指令的地址,根据地质获取指令并存到IR中
因为PC可以自己+1得到下一条将要执行的指令,而只有地址+1才是下一条地址(指令+1不太可能是下一条要执行的指令)。因此可以根据这个特点判断PC存的是地址。
而获得当前指令的地址没啥用我们要的是当前指令本身,因此可以判断存地址的PC是下一条指令的地址,从而判断IR存的是当前指令本身。
PC会+1 -> PC存地址 -> PC是下条指令的地址 -> IR是当前指令本身

MAR和MDR也很类似,一个是存地址,一个是存数据本身。
A代表address,表示存地址;D代表digit,表示存数据。
地址表示下一个存储单元,数据本身表示当前正在用的。

三条线

  1. 指令流水线:计算机将一条指令的执行过程分为大致相等的几个子过程,每个子过程由一个部件完成。所有部件并行工作,提高机器效率。
  2. 系统总线:多个部件之间进行数据传输的公共通路,包含多跟传输线和信息传输协议,实现各部件之间的地址、数据、控制信息交换。分别有地址总线、数据总线、控制总线。
  3. 内部总线:计算机系统内部各功能部件间的总线。

简答

字节和字

一个字等于多少个字节,与系统硬件(总线、cpu命令字位数等)有关,不应该毫无前提地说一个字等于多少位

在16位的系统中(比如8086微机) 1字 (word)= 2字节(byte)= 16(bit)
在32位的系统中(比如win32) 1字(word)= 4字节(byte)=32(bit)
在64位的系统中(比如win64)1字(word)= 8字节(byte)=64(bit)

参考:“一个字等于多少个字节?”是一个不严谨的问法

I/O系统概念

这里概念超级多所以不得不单独列出来
首先I/O系统分为I/O硬件I/O和I/O软件。

I/O硬件

  1. 系统总线:各部件之间信息传输的通路
  2. I/O接口:主机和设备间的硬件电路,在系统总线和I/O设备之间传输信号和同步。
功能:  1. 识别设备地址2. 传送控制命令及返回状态信息3. 数据传送和缓冲4. 数据格式转换5. 检错纠错6. 中断功能7. 时序功能8. DMA功能
分类:1. 通用性:通用接口、专用接口2. 可编程性:可编程接口、不可编程接口3. 数据传送方式:并行I/O接口、串行I/O接口4. 数据控制方式:程序型接口、DMA型接口
  1. I/O设备:主机和外界交互的工具,分为输入设备、输出设备、外存、终端设备、其他外部设备
  2. 设备控制器:控制设备具体功能动

I/O软件

  1. 用户I/O程序:用户编写的具体I/O设备输入输出程序
  2. 设备驱动程序:使计算机和I/O设备进行通信的特殊程序
  3. 设备控制程序:驱动程序中对设备控制的具体程序

DMA

DMA接口的逻辑电路
  1. 主存地址寄存器:存放设备与主存交换信息时主存的地址
  2. 字计数器:存放交换的字数
  3. 中断机构:向CPU发送结束信号请求中断
  4. 数据缓冲寄存器:存放设备与主存交换的信息
  5. DMA请求触发器:接收设备已准备好的信号,并向控制/状态逻辑发送信号
  6. 控制/状态逻辑:接受DMA请求触发器的信号并使其复位,向CPU请求总线使用权并接收响应
  7. 设备选择电路:接收设备地址信号,选择具体设备

DMA传送的工作过程

分为预处理、数据传送、后处理

预处理

CUP向DMA发送指令完成初始化

  1. 发送读/写控制信号
  2. 发送设备地址
  3. 发送主存缓冲区起始地址
  4. 发送传送字数
数据传送
  1. 设备发送字到DMA数据缓冲寄存器,并向DMA请求触发器发送DMA请求信号
  2. 控制/状态逻辑接收DMA请求信号,向CPU请求总线控制权
  3. DMA获得总线控制权
  4. 控制/状态逻辑复位DMA信号触发器
  5. 将DMA数据缓冲寄存器的内容送至数据总线
  6. 将主存地址寄存器的内容送至地址总线,将数据写入
  7. 放弃总线控制权
  8. 修改主存地址寄存器和字计数器的值
  9. 循环执行直到字计数器溢出,表示数据传送结束并发生中断
后处理
  1. 校验内容
  2. 检测错误
  3. 是否继续使用DMA传输

其他概念

I/O端口

I/O接口中可编址的寄存器称为I/O端口

编址方式:

  1. 独立编址方式:专用I/O端口编址方式。
    I/O端口和寄存器在两个独立的地址空间进行编址,端口独写由专用控制信号实现。
  2. 同意编址方式:存储器映射编制方式。
    I/O端口和寄存器用统一的地址空间,所有访存指令可以访问I/O端口

计算题

原码补码反码

首先要了解,转换为原码补码反码后是要在最高位加一位符号位的
如果有题目是用补码求原码或者真值,先将补码取反加一得到原码,再根据最高位判断正负,然后去掉最高位,剩下的利用权值表求解就好了
为了方便找规律,我们统一先把十进制数转换为二进制数,然后再转为原码补码反码,都用最多8位表示
正数主要流程为:二进制真值 -> 原码补码反码(正数四个都一样)
负数主要流程为:二进制真值 -> 原码(加符号位)-> 反码(真值取反再加符号位)-> 补码
最后移码用补码的符号位取反

正整数

正整数是最简单的,转换为二进制数后,加上符号位,整数加0,即为原码,然后原码补码反码都相同
以100为例:

权值表:    128    64    32    16    8    4    2    1
二进制:            1    1      0    0    1    0    0

二进制真值为:1100100。
加上符号位0,其原码补码反码均为:0110 0100

负整数

负整数原码加上符号位1,反码为二进制真值取反后加上符号位1,补码为反码+1
以-87为例:

权值表:    128    64    32    16    8    4    2    1
二进制:            1    0     1     0    1    1    1

二进制真值为:1010111
原码:加上符号位得1101 0111
反码:真值取反0101000,加上符号位1得1010 1000
补码:反码+1得10101001

正分数

分数的大体思想不变,就是权值表会改变。因为是小数点后面开始取,所以我们从左往右取八位
以29/128为例:
将其分解为:1/128+1/32+1/16+1/8

权值表:    1/2    1/4    1/8    1/16    1/32    1/64    1/128
二进制:     0      0      1      1       1        0       1

二进制真值位:0.001 1101(开头的0.用来表示这个数不是整数,0可以省略只留个点,实际之后点后面的属于有效位)
加上符号位0,原码补码反码均为:0.001 1101

负分数

同样和负整数相似,不过是权值表的变化
以-13/64为例:
分解为:1/8+1/16+1/64

权值表:    1/2    1/4    1/8    1/16    1/32    1/64    1/128
二进制:     0      0      1      1       0        1       0

二进制真值为:0.001 1010
原码:加上符号位1得1.001 1010
反码:真值取反得0.110 0101,加上符号位得1.110 0101
补码:反码+1得1.1100110

IEEE754

符号位,阶码用偏移阶码表示,尾数用原码表示
一般都是考单精度32位,即符号位1位,阶码8位,尾数23位。
以防万一放上双精度,符号位1位,阶码11位,尾数52位
要注意的是,阶码真值加偏移量得到偏移阶码,偏移量为整数位数-1(8位阶码即2^7-1=127)
需要进行规格化,即让第一位数位1,移动了几位就乘上2的几次方(左负右正)
以27/64为例:
分解后为:1/64+1/32+1/8+1/4

权值表:    1/2    1/4    1/8    1/16    1/32    1/64    1/128
二进制:     0      1      1      0       1        1       0

真值为:0.0110110=1.1011*2-2(权值为2,前移两位所以是2-2)
因为正数所以符号位为0
阶码为-2,其偏移阶码为-2+127=125,即0111 1101
位数即1011000…(共23位)
得到结:0 01111101 1011000…(共23位)

浮点运算

  1. 对阶:两数阶码相减,若小于0则前面的数右移,反之后面的数右移。若最后一位多出则先保留
  2. 尾数求和(差):将尾数相加,阶码不变。若是相减,则根据补码进行转换,变为相反数后
  3. 规格化:使最后的尾数最高位为1(不包括符号位)。若负数的符号位与最高位相同(均为1),则进行左移。
  4. 舍入处理:如果此时尾数仍有多,则进行舍入处理。
  5. 判断溢出:根据阶码的双符号位判断是否溢出。00为正,11为负,01上溢出,10下溢
  6. 得到最后结果。

例题:

阶码3位,尾数6位,求[x+y],[x-y].
x=2^-011B * 0.100101,y=2^-010B * -0.011110
假设两数为补码,阶码双符号,尾数单符号

将两数用补码表示:x=11 101,0.100101y=11 110,1.100010
求[x+y]

  1. 对阶数:两数阶码相减结果为-1,移x:2^-010B * 0.010010(1) ,x变为11 110,0.010010(1),阶码统一
  2. 尾数求和:0.010010(1) + 1.100010 = 1.110100(1),阶码仍为11 110
  3. 规格化:尾数变为1.010010,左移了两位,阶码变为11 100
  4. 舍入处理:尾数没有多余,不需要舍入
  5. 判断溢出:阶码符号位仍为11,没有溢出
  6. 结果为:11 100,1.010010

求[x-y]

  1. 对阶数:同理,x变为11 110,0.010010(1)
  2. 尾数求差:-y=0.011110,x-y=0.110000(1)
  3. 规格化:已经是规格化数了所以不用规格化
  4. 舍入处理:尾数多了个1,舍入处理后尾数为0.110001
  5. 判断溢出:阶码符号为11,没有溢出
  6. 结果为:11 110,0.11001

CRC循环冗余校验码

首先要知道有CRC码的校验位为k位,而生成多项式的位数=k+1
CRC也称为(n+k, n)码,n是原始数据长度,k为增加的校验位长度
根据CRC定义,需要将有效信息左移k位再被生成多项式模2除
最后在有效信息后加上除出的余数即为CRC码
模二除:涉及模二加减法。模二加减法即对应位上的抑或操作

  1. 被除数首位为1则除以除数,余数由被除数和除数进行模二加减法得到;为0商0,直接左移一位余数
  2. 所得余数去除首位并左移一位
  3. 重复直到余数位数少于除数(忽略首位的0)

模二除参考:模2除法(CRC校验码计算)

例:设有效信息为110,生成多项式G(x)=11011,求其CRC码生成多项式位数=5=k+1,k=4
110左移四位:110 0000
模二除G(x):110 0000/11011,商100余1100
有效信息加上余数得到CRC码:110 1100
例:(7,4)码,生成多项式G(x)=x^3+x+1,求1001的CRC码生成多项式G(x)=x^3+x+1,即为1011
由(7,4)码得知k=3,将1001左移3位:1001 000
模二除G(x):1001 000/1011,商1010余110
有效信息加上余数得到CRC码:1001 110

计算机系统组成复习及CRC循环冗余校验码计算相关推荐

  1. CRC循环冗余校验码总结

    一.CRC简介 先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting ...

  2. CRC 循环冗余校验码 的计算方法

    循环冗余校验CRC(Cyclical Redundancy Check)字段位于尾部,有32位,有时称为IEEE/ANSI标准的CRC32.要使用一个n位CRC监测 数据传输错误,被检查的消息首先要追 ...

  3. java实现冗余校验_循环冗余校验_循环冗余校验码计算_循环冗余校验 java实现(6)...

    接收端对收到的len 2字节执行do_crc,如果没有差错发生则结果应为0.循环冗余校验 在一些传输协议中,发送端并不指出消息长度,而是采用结束标志,考虑以下几种差错: 1)在消息之前,增加1个或多个 ...

  4. 循环冗余校验码计算CRC

    CRC循环冗余检验码的计算题 1.若信息码字为11100011,生成多项式 G(X)=X5+X4+X+1,则计算出的 CRC 校验码为? x的最高次幂5则 信息码(被除数)补五个0为:11100011 ...

  5. 16位CRC循环冗余校验码生成函数

    16位的CRC校验码生成,可使用以下函数: //16位CRC校验码生成 //返回值:CRC校验码 unsigned int CRC_check(unsigned char *addr,int num) ...

  6. java实现冗余校验_循环冗余校验_循环冗余校验码计算_循环冗余校验 java实现

    CRC的全称为Cyclic Redundancy Check,中文名称为 差错控制理论是在代数理论基础上建立起来的.这里我们着于介绍CRC的算法与实现,对原理只能捎带说明一下.若需要进一步了解线性码. ...

  7. 循环冗余校验码CRC原理和实例

    今天同事问了一个CRC(循环冗余校验码)的问题,好奇心之下学习了一下. 首先说它的原理,百度百科上也有,我就简单说一下,它其实就是采用多项式编码的方法,对于要发送的信息码R,发送方和接收方约定好多项式 ...

  8. CRC循环冗余校验是如何纠错的

    引言 昨天同学突然问我CRC循环冗余校验是如何纠错的?我突然大脑一片空白,学过校验码自然知道CRC循环冗余校验码是可以检错和纠错,但是仿佛只知道求出检验码和检错的过程,但是不知道如何纠错的过程,查询书 ...

  9. CRC(循环冗余校验) BCC校验(异或校验) 温度换算 在线计算

    1,CRC(循环冗余校验)在线计算 2,BCC校验(异或校验)在线计算 3,温度换算 4,在线换算器

  10. 计算机系统基础知识——循环冗余校验码(CRC)

    前言:循环冗余校验码(cyclie redundancy check)简称CRC(循环码),是一种能力相当强的检错.纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位 ...

最新文章

  1. 制作碳排放强度的空间可视化_【科研成果】吴传清、宋子逸:长江经济带农业碳排放的时空差异特征分析...
  2. python mysql in 参数_python mysql中in参数化说明
  3. MES系统如何实现工厂无纸化生产?
  4. 高中计算机数据的基本特征,高一信息技术《信息与信息的基本特征》教案
  5. 通达信交易服务器修改,GitHub - sjj6love/TdxTradeServer: TongDaXin Tarde Server 通达信交易服务器...
  6. xshell生成xsh文件路径
  7. 商品属性的选择功能的实现
  8. 【3D建模】Solidworks 3D建模及PrusaSlicer切片打印学习笔记
  9. 图形界面介绍Create Pin Blockage
  10. 字节跳动校招 抖音电商前端 三面面经
  11. 故障:Office 重复提示激活
  12. 20款国内外免费使用 主流杀毒软件
  13. redhat linux密码修改
  14. 【Dart 教程系列第 10 篇】Dart 之 removeLast 删除数组的最后一个元素
  15. 【中级软考】数字签名的概念及其作用
  16. 国家列表 Country Code List
  17. excel之单元格格式/设置/
  18. VSTO Office二次开发应用程序键盘鼠标钩子
  19. 武汉理工大学计算机基础与编程综合实验——网吧计费管理系统第二个版本
  20. 快速掌握SPSS数据分析

热门文章

  1. 关于Microsoft office深色模式设置
  2. 中国最爱喝奶茶的城市找到了
  3. 异步十二进制加法计数器(统一使用上升沿触发的D触发器)设计
  4. Android根据包名获取APP名称
  5. 多timer管理实例-八音盒
  6. java 打开 覆盖文件_如何用JAVA实现文件的覆盖
  7. 美国Appstore游戏数据分析
  8. 【机器学习】层次聚类-Agglomerative clustering
  9. 用python画猫咪怎么画-python画猫
  10. 论合伙企业相对有限责任公司的比较优势