当前位置: 首页 > news >正文

计算机组成原理复习笔记

        博主此篇文档仅用于考试大纲整理复习,总结所有需要留意的考试点。

        笔记总结顺序参照王道计组课程顺序,同时会参考b站up主“翼云图灵”,以便更高效复习。

 一、计算机系统概述

        1.计算机发展历程(略 仅提一下后面会见到的名词解释)
        机器字长:计算机一次整数运算所能处理的二进制位数。

        2.计算机硬件的基本组成
        早期冯诺依曼机以运算器为中心,首次提出“存储程序”的思想即将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束;现代程序以存储器为中心,CPU=运算器+控制器。

        3.各个硬件的工作原理


        (1)主存储器
        

        主存储器中由存储体、MAR(存储地址寄存器Memory Address Register)、MDR(存储数据寄存器Memory Data Register)组成。
        存储体:数据在存储体内是按照地址存储的,每个地址对应一个存储单元。
        MAR:MAR位数反映存储单元的个数,例如MAR=4,那么存储单元的个数就有2^{4}个。
        MDR:MDR位数=存储字长,例如MDR=16位,那么说明一个存储单元可以存放16bit,也是说明计算机一次整数运算处理的二进制位数是16位。
       

        注意点:
        1个字节(byte) = 8 bit , 1 B = 1 个字节,1 b = 1个bit;
        存储单元:每个存储单元存放一串二进制代码;
        存储字(word):存储单元中二进制代码的组合;
        存储字长:存储单元中二进制代码的位数;
        存储元:存储二进制代码的电子元件,每个存储元可存1bit;

        (2)运算器

        (3)控制器

         知道了硬件的工作原理,需要了解计算机的工作过程,怎么从高级语言变成了机器可以识别的机器语言,可以去看王道的课程"1.2.2计算机各个硬件的工作原理",可视化讲解很详细,我就不在这里写了。

        4.计算机软件(略)

        指令集体系结构(ISA):软件和硬件之间的界面。涉及计算机系统的ISA,就是要定义一台计算机可以支持那些指令,以及每条指令的作用是什么、每条指令的用法是什么。

        5.计算机系统的工作原理

        6.计算机性能指标

        这部分内容非常的重要,第一章考点就是这里,前面的内容只是让你有一个计算机系统的整体认识。这部分我会从各个硬件的评价指标过渡到整体计算机性能指标评价。

        (1)存储器性能指标
        在前面内容提到了存储器结构有MAR、MDR,MAR的位数反映了存储单元的个数,MDR位数决定了每个存储单元的大小。
        总容量 = 存储单元个数 * 存储字长  bit = 存储单元个数 * 存储字长/8  Byte
        例题:MAR有32位,MDR为8位,总容量 = 2^{32} * 8 bit =  4GB

k = 2^{10}  M = 2^{20}  G = 2^{30}  T = 2^{40}

        (2)CPU性能指标
        CPU主频(时钟频率):CPU内数字脉冲信号振荡的频率。单位:赫兹Hz;
        CPU时钟周期:是主频的倒数,单位:微秒、纳秒;
        CPI(Clock cycle Per Instruction):执行一条指令所需的时钟周期数;(不同的指令,CPI不同。甚至相同的指令,CPI也会有变化);
        执行一条指令的耗时(这里的耗时代表着多少秒,不是多少时钟周期数)= CPI * CPU时钟周期;
        例题:某CPU主频为1000Hz,某程序包含100条指令,平均来看指令的CPI=3,该程序在该CPU上执行需要多久?

100 \times 3 \div 1000 = 0.3 秒

        CPU执行时间(整个程序的耗时)= CPU时钟周期数/主频 = (指令条数*CPI)/主频;
        IPS(Instructions Per Second):每秒执行多少条指令。IPS = 主频/平均CPI

 

        提问:
        1.主频高的CPU一定比主频低的CPU快吗?
        答:执行一条指令所需要的耗时 = CPI * 时钟周期数 = CPI / 主频;耗时还会取决于CPI的大小,A的主频为2GHz,平均CPI为10,B的主频为1GHz,平均CPI为1,A耗时比B多。

        2.若A、B两个CPU的平均CPI相同,那么A一定更快吗?
        答:也不一定,还要看指令系统,如果A不支持乘法指令,只能用多次加法实现乘法,而B支持乘法指令。

        3.基准程序执行得越快说明机器性能越好吗?
        答:基准程序中的语句存在频度差异,运行结果也不能完全说明问题。

二、数据的表示和运算

        1.进位计数制
        (1)r进制数:基数=r,每个数码位可能出现r种字符,逢r进1;
        (2)r进制转十进制:r 进制的数值 = 各数码位与位权的乘积之和;
        (3)二进制转八进制:每3个二进制对应一个八进制位;
        (4)二进制转十六进制:每4个二进制对应一个十六进制位;
        (5)十进制转r进制:
                整数部分:除基取余法,先取得的“余”是整数的低位;
                小数部分:乘基取整法,先取得的“整”是小数的高位;
        (6)真值和机器数
                真值:实际的带正负号的数值(人类习惯的样子);
                机器数:把正负号数字化的数(存到机器里的样子);

        2.定点数的表示
        定点数的表示分为无符号数和有符号数,通常无符号数只需要表示成符合题目对应进制位数的数即可,但有符号数需要考虑符号位和四种编码形式(原码、反码、补码、移码)

        无符号数没有符号位,相当于数的绝对值,n位的无符号数表示范围为0~2^{n-1}
        有符号数

        原码:符号位用0/1表示,尾数表示该数的绝对值;
        反码:将原码除了符号位全部取反;
        补码:在反码基础上,末尾+1;
        移码在补码的基础上符号位取反,移码只能用于表示整数

        提示:正数的补码就是移码本身,0的补码只有一个0000 0000;
                   将负数补码转回原码方法和原码转补码相同:尾数取反,末尾+1;

        技巧:由x补 快速求 -x补 的方法:符号位、数值位全部取反,末尾+1;

        3.C语言中的强制类型转换 
        (1)同类型间无符号转换为有符号:不改变数据内容,只改变解释方式。例如下面的程序所示,x 是短整型,占用2个字节16位,所以x为1110 1111 0001 1111,转换过来的y为1110 1111 0001 1111真值61215,只需要把y当成无符号数来转真值即可。

short x = -4321; //short占用2个字节
unsigned short y =(unsigned short) x;

        (2)长整型变短整型:高位截断,保留低位。如下所示,从int类型转换为short类型,需要把原来的32位的高位(前16位)截断,留下低位,a:0x000286a1转换为c:0x86a1,真值为-31071。b:0xffff7751转换为d:0x7751,真值为30545。

int a = 165537 , b =-34991; //int 占用4个字节32位
short c = (short)a; //short 占用2个字节16位
short d = (short)b;

        (3) 短整型变长整数:符号扩展(正数就0扩展,负数就1扩展)。如下所示,x为1110 1111 0001 1111(0xef1f),因为x为负数符号位为1,所以用1扩展后的数m为1111 1111 1111 1111 1110 1111 0001 1111(0xffffef1f)真值为-4321。

short x = -4321;
int m = x;
unsigned short n =(unsigned short) x;
unsigned int p = n;

        4.数字电路补充内容 

         (1)逻辑门电路
        这里仅搬运一个博主文章,大家可以细致去看(但对我们计组而言仅需要了解下面的图逻辑门电路画法,会认就可以了)数字电路基础——逻辑门-CSDN博客

        基本逻辑运算的优先级:非 > 与 > 或(与、或可以类比乘法、加法; 如果有括号,括号的优先级更高)

        (2)多路选择器&三态门

        多路选择器:相当于电路的守门员,有多个输入、一个输出、一个控制信号,仅允许其中一个数据通过MUX。其中需要记住如果有k个输入,那么控制信号的位数m的个数如下图公式!

         三态门:也是电路的守门员,根据信号决定是否让输入通过。三态门的控制信号只需要1bit,op=1表示允许数据通过;op = 0表示不允许数据通过。

        5.加法器

        在执行加法时,我们需要把被加数的本位A_i、加数的本位B_i、来自低位的进位C_{i-1}、本位和S_i进行操作,S_i = A_i\oplusB_i\oplusC_{i-1},当这个式子有奇数个1时,最后就是1。
        需要记忆带标志位的加法器各个 标志位对应的判断标志。
        OF溢出标志:带符号数加减运算是否溢出标志;只需要看最高位的进位C_n异或\oplus次高位的进位C_{n-1}的值,OF=1溢出,OF=0未溢出。
        SF符号标志:带符号数加减运算的正负性;只需要看最高位S_n的符号位,1负数,0正数。
        ZF零标志:仅当运算结果所有bit全为0,即ZF = \overline{S_n + \cdots + S_2 + S_1},ZF才为1,此时表示运算结果为0。
        CF进位/借位标志:无符号数加减法是否溢出。CF = C_{out} \oplus C_{in} = C_n \oplus C_0判断最高位和最低位的异或结果即可。

        6.算术逻辑单元ALU

        ALU是一种组合逻辑电路,实现了加减乘除与或非等功能,所以它是运算器的核心,由于加减乘除都基于加法实现,所以加法是ALU的核心。
        ALU需要记住一个最重要的点:如果ALU支持k种功能,则控制信号位数m \geq \log_2 kALU的运算数AB还有输出运算结果F的位数要和计算机的机器字长相同 

        7.移位运算
        在十进制123.45中,当我们右移一位会变成1234.5,整个数字相当于×10。在二进制中右移一位相当于×2 ,左移相当于÷2。
        算法移位:(1)原码:符号位不参与移位,左移、右移都补0;
                          (2)反码:符号位不参与移位,左移、右移都补0;
                          (3)负数补码:右移(同反码):高位补1,低位舍弃;左移(同原码):低位                                      补0,高位舍弃。

        逻辑移位: 左移右移补0,移出的位舍弃。


        8.定点数的加减运算
        计组中我们一般用补码进行加减运算,步骤如下:
        (1)将两个数AB的原码、补码写出来;
        (2)如果是【A+B】补,那就是A补+B补;如果是【A-B】补,那就是A补+(-B)补;
        (3)接下来,我们的问题转为了怎么求(-B)补,就是B补连同符号位一起取反加一;
        (4)计算得到的补码数转回原码,再转成十进制真值;

        怎么进行溢出判断呢?
 

        采用一位符号位,根据数据位进位情况判断溢出。
                            符号位的进位CS             最高数值位的进位C1
        上溢                      0                                         1
        下溢                      1                                         0

        即:异或逻辑,当CS和C1相异就溢出,相同不溢出。 

         9.无符号数的减法
        A-B,A不变,将减数B全部按位取反加1,变成A+B(处理后的),得到的结果就是结果。当最高位产生的进位为0时,发生溢出。

        10.定点数乘法运算
        无符号整数的乘法过程:

        带符号整数的乘法过程:

溢出判断:

        11.定点数除法运算 
        无符号整数除法计算方法:看视频讲解过程理解运算过程

         12.浮点数
        浮点数有规范表示,不论是单精度还是浮点数,都是默认小数点前面的数是1,1.xxxx *2 的几次方来表示那个数。其中单精度浮点数规范表示如下图,阶码偏置为127(2^8-1),阶码就是用原数2的几次方加上127。具体转换过程看下面的图...

        双精度浮点数规范表示:

三、 存储系统

        1.存储器基本概念
        需要记住存储器的层次结构图(金字塔),从塔尖往下依次是寄存器、cache、主存、辅存、外存,并且越上面的造价越高、速度越快、容量越小。其中高速缓存cache、主存/内存可以直接被Cpu读写。
        存储器性能指标:
        (1)存储容量 = 存储字数 * 字长(MDR反映存储字长,MAR反映存储字数);
        (2)单位成本 :每位bit价格 = 总成本 / 总容量;
        (3)存储速度:数据传输率 = 数据的宽度/存储周期;
        存取周期包括存取时间和恢复时间。

         2.主存储器的基本组成

        如上图所示是一个存储器芯片的组成基本原理,当我们提供n位地址后,对应了有2^n个存储单元,所以总容量就是存储单元个数×存储字长,之前的内容中见到的都是图中第三行的表示方法,以后会见到诸如“8k×8位存储芯片”的表示,第一个8k代表存储单元个数为8k = 2^{13},第二个8代表一个存储单元有8位,对应左图就是那么一行有8个MOS管组成一个电路。
        需要记忆不同单位代表了2的几次方。

        3.SRAM和DRAM
        DRAM(栅极电容)常用来制造主存、SRAM(双稳态触发器)常用来制造Cache。和字面意思一样,双稳态触发器相对于栅极电容更稳定集成度低功耗大些。

        需要记忆SRAM和DRAM的对比性能,如下图所示:

         DRAM的刷新:
        下面这张图展示了存储器的简单模型有2^n根选通线以及把存储器排列为了2^{n/2} × 2^{n/2}的矩阵(行地址、列地址),减少了选通线的数量,原来是2^8现在变成了2^4。通常DRAM刷新周期为2ms一次(以行为单位,一次刷新一行),可以在译码阶段刷新。

http://www.lqws.cn/news/475435.html

相关文章:

  • 汽车毫米波雷达增强感知:基于相干扩展和高级 IAA 的超分辨率距离和角度估计.
  • flink如何支持kafka容灾自动切换
  • 一次性理解Java垃圾回收--简单直接方便面试时使用
  • 半导体二极管
  • C# Quartz.net 定时任务
  • c# .netCreateLinkedTokenSource链接令牌,取消信号异步执行
  • 二、海思网卡数据流程
  • 多源异构数据接入与实时分析:衡石科技的技术突破
  • 虚拟与现实交融视角下定制开发开源AI智能名片S2B2C商城小程序赋能新零售商业形态研究
  • 【node】Mac m1 安装nvm 和node
  • Vulkan 学习笔记15—Mipmap 与多重采样
  • Vue3+TypeScript+Element Plus 表格展开行优化方案
  • MongoDB:索引
  • 【机器学习的五大核心步骤】从零构建一个智能系统
  • Linux 服务器运维:磁盘管理与网络配置
  • go excel解析库xuri/excelize中的SAX
  • LLMs之Embedding:Qwen3 Embedding的简介、安装和使用方法、案例应用之详细攻略
  • 【weaviate】分布式数据写入之LSM树深度解析:读写放大的权衡
  • 数据库(1)-SQL
  • webpack+vite前端构建工具 -6从loader本质看各种语言处理 7webpack处理html
  • 案例:塔能科技以“数字光网”重塑某市照明绿色生态
  • Docker 运行RAGFlow 搭建RAG知识库
  • LeapMotion-PhysicalHandsManager 类详解
  • 7.5.1散列表的基本概念
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • 深入解析Flink Local模式启动流程源码:揭开作业初始化的神秘面纱
  • vue3 el-table 行颜色根据 字段改变
  • 企业级安全实践:SSL 加密与权限管理(二)
  • python 常见数学公式函数使用详解
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十六) -> 配置构建(三)