计算机组成原理:一、计算机系统概述

参考视频:王道计算机考研 计算机组成原理_哔哩哔哩_bilibili

1. 硬件的发展

image-20231116152749991

2. 硬件的基本组成

2.1 冯诺依曼结构

逻辑结构:

image-20231116153840364

特点:

  • 指令和数据以同等地位存储在存储器中,可以按照地址寻访。
  • 指令由操作码地址码组成。
  • 以运算器为中心。这会带来一个问题:运算器本身是用来计算的工具,但如数据和代码的输入和输出都必须经过它,这显然会让效率降低,现代计算机结构对这一点进行了改进。

2.2 现代计算机结构

逻辑结构:

image-20231116155542150

特点:

  • 以存储器为中心。避免了数据和指令的输入输出都要经过运算器的造成的损耗。

逻辑部件的现实实现:

image-20231116155743758

其中:

  • CPU=运算器+控制器
  • 主存储器=内存
  • IO设备:包括输入和输出。此外:辅存(如硬盘)虽然是存储器的一种,但属于IO设备

3. 硬件的工作原理

3.1 主存储器

整体构成:image-20231116160952548存储体结构image-20231116161349419

解析

  • 存储体:数据存放处
    • 数据在存储体中是按照地址存储的。
    • 一些关键概念:
      • 存储单元:用于存储二进制数据的单位容器。存放位数取决于CPU的机器实现,但一般是8的倍数。(因为1Btye=8bits)
      • 存储字(word):存储在存储单元中的二进制数据。
      • 存储字长:存储单元可以存放二进制数据的位数。
      • 存储元:就是存储体的基本单位,每个存储元可以存储1bit的数据,通过电容实现。
  • MAR(memory address register 存储地址寄存器):记录地址,其位数与存储体的存储单元个数相对应。(如4位,说明存储体中有24=16个存储单元)
  • MDR(memory data register 存储数据寄存器):是存储和读取数据的媒介。具体逻辑如下:
    • 存储数据时:IO设备在MAR中存放数据在存储体中的地址,在MDR中存放要存放数据,随后数据被从MDR同步到指定地址的存储单元中。
    • 取出数据时:IO设备在MAR中存放要取出的数据的地址,随后数据将会从存储体指定位置的存储单元中取出,并存放在MDR中,IO设备将会从MDR中读取数据。
    • 因此,MDR位数=存储单元位数,因为它每次接收或发送一个存储单元的数据。

3.2 运算器的基本组成

构成图:image-20231116164738680

解析:

  • ACC(Accumulator 累加寄存器):用于存放操作数,或操作结果。
  • MQ(Multiple-Quotient Register 乘商寄存器):在乘除运算时,用于存放操作数或操作结果。
  • X(通用操作数寄存器):用于存放操作数。
  • ALU(Arithmetic and Logic Unit 算数逻辑单元):通过内部复杂的电路实现算数运算、逻辑运算。

3.3 控制器的基本组成

组成图:image-20231116165213880

解析:

  • CU(Control Unit 控制单元):分析指令(也就是当前指令的操作码),从而给出控制信号(例如指出要进行加法操作)。
  • IR(Instruction Register 指令寄存器):存放当前执行的指令(指令由操作码地址码组成)。
  • PC(Program Counter 程序计数器):存放下一条指令的地址,有自动+1的功能。默认为0。

3.4 实例

接下来将通过一个简单的c语言程序来分析这些硬件的工作流程。

题目:

现有程序如下:

int a=2,b=3,c=1,y=0;
void main(){
    y = a*b+c;
}

将其编译后装入主存储器的存储体,结构如下:

image-20231116165854558

计算机结构如下:

image-20231116170009787

现在计算机执行该程序,请分析其执行流程。

解答如下:

  1. 第一条指令:起初(PC)=0,指向第一条指令的存储地址

    1. (PC)->MAR,导致(MAR)=0

    2. M(MAR)->MDR(依照MAR中的地址,在存储体中取出数据,存到MDR中),导致(MDR)=00001 0000000101

      注意:这里之所以直接从1跳到了3,是因为这一句实际上是两步操作合并了。后面的一些跳行也是因为这个原因:

      1. 存储体从MAR中取地址。
      2. 存储体依照取出的地址从自身取值,然后赋给MDR。)
    3. (MDR)->IR(将MDR中的值赋给IR),导致IR=00001 0000000101

    4. OP(IR)->CU(从IR中截取操作码,交给CU),指令中的操作码送到CU,CU分析后得知,这时取数的指令

    5. Ad(IR)->MAR(从IR中截取地址码,交给MAR),指令的地址码交给MAR,导致(MAR)=5

    6. M(MAR)->MDR(依照MAR中的地址,在存储体中取出数据,存到MDR中),导致(MDR)=0000000000000010

    7. (MDR)->ACC(将MDR中的数据交给ACC),导致(ACC)=0000000000000010

  2. 第二条指令:上一条指令取值后PC会自动+1,所以现在(PC)=1;且上一步执行后,(ACC)=2

    1. (PC)->MAR,导致(MAR)=1

    2. M(MAR)->MDR,导致(MDR)=000100 0000000110

    3. (MDR)->IR,导致(IR)=000100 0000000110

    4. OP(IR)->CU,指令的操作码送到CU,CU分析得知,这是一条乘法指令。

    5. Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=6

    6. M(MAR)->MDR,导致(MDR)=0000000000000011=3

    7. (MDR)->MQ,导致(MQ)=0000000000000011=3

    8. (ACC)->X,导致(X)=2

    9. (MQ)*(X)->ACC,根据ALU实现乘法运算,导致(ACC)=6。如果成绩太大,就需要MQ辅助存储。

  3. 第三条指令:上一条指令取指后,(PC)=2,执行后,(ACC)=6

    1. (PC)->MAR,导致(MAR)=2

    2. M(MAR)->MDR,导致(MDR)=000011 0000000111

    3. (MDR)->IR,导致(IR)=000011 0000000111

    4. OP(IR),指令的操作码送到CU,CU分析得知,这是一条加法指令。

    5. Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=0000000000000111=7

    6. M(MAR)->MDR,导致(MDR)=0000000000000001=1

    7. (MDR)->X,导致(X)=1

    8. (ACC)+(X)->ACC,根据ALU实现加法运算。

  4. 第四条指令:上一条指令取值后,(PC)=3,执行后,(ACC)=7

    1. (PC)->MAR,导致(MAR)=3

    2. M(MAR)->MDR,导致(MDR)=000010 0000001000

    3. (MDR)->IR,导致(IR)=000010 0000001000

    4. OP(IR),指令的操作码送到CU,CU分析得知,这是一条存数指令。

    5. Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=0000000000001000=8

    6. (ACC)->MDR,导致(MDR)=7

    7. (MDR)->地址为8的存储单元,导致y=7

  5. 第五条指令:上一条指令取值后,(PC)=4

    1. (PC)->MAR,导致(MAR)=3

    2. M(MAR)->MDR,导致(MDR)=000110 0000000000

    3. (MDR)->IR,导致(IR)=000110 0000000000

    4. OP(IR),指令的操作码送到CU,CU分析得知,这是一条停机指令。

      (随后将会利用中断机制通知操作系统终止该进程,那又是另一段程序了)

4. 计算机系统的层次结构

4.1 计算机五层结构

image-20231116191644533

4.2 三种级别的语言

  • 高级语言:c/c++、java
  • 汇编语言
  • 机器语言

编译程序与解释程序的区别:

  • 编译程序:一次编译所有代码,以后只需要运行编译出来的文件。
  • 解释程序:编译一句,运行一句。每次重新运行都要再次一句一句的编译。shell、python、JavaScript就是采用的这种方式。

5. 计算机性能指标

5.1 存储器的性能指标

  • MAR:显示存储单元位数的多少。
  • MDR:显示存储单元的大小。

EG:MAR为32位,MDR为8位,那么可以存储的位数为:

2328=32Gb=4GB

5.2 CPU的性能指标

相关概念:

  • CPU时钟周期(单位:微秒/纳秒):表示CPU一个振荡周期耗时时间
  • CPU主频(单位:HZ):CPU内数字脉冲信号震荡的频率。表示在一秒内经过了多少CPU时钟周期。与时钟周期成反比。
  • CPI(Clock cycle Per Instruction):执行一条指令所需的时钟周期数。(一般都是看平均的)

由上述二者可以推出:

=CPI

EG:某CPU主频为1000HZ,某程序包含100条指令,平均来看指令CPI=3,求该程序在CPU上执行所耗时间:

1003/1000=0.3s

  • IPS(Instructions Per Second):每秒执行多少条指令。

IPS=1CPI=CPI

  • FLOPS(Floating-point Operations Per Second):每秒执行多少次浮点运算。

5.3 系统总体性能指标

数据通路带宽:数据总线一次所能并行传递数据的位数。(各个硬件之间通过数据总线来传递数据)

吞吐量:指系统在单位时间内可以处理的请求量。(这是一个抽象的指标,因为请求的单位大小并不确定)。

响应时间:指用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间。

基准程序:就是跑分软件,里面包含了多种计算机指令。

posted @   BinaryPrinter  阅读(437)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示