【408之计算机组成原理】计算机系统概述

news2024/11/25 14:56:26

目录

    • 前言
    • 一、计算机的发展历程
      • 1. 计算机发展的四代变化
      • 2. 计算机元件的更新换代
      • 3. 计算机软件的发展
    • 二、计算机系统层次结构
      • 1. 计算机系统的组成
      • 2. 冯诺依曼体系结构
      • 3. 计算机的功能部件
        • 1. 输入设备
        • 2. 输出设备
        • 3. 存储器
        • 4. 运算器
        • 5. 控制器
    • 三、 分析计算机各个部件在执行代码中的过程(重难点)
    • 四、计算机系统的层次结构
    • 五、计算机的性能指标

前言

本文主要包含以下内容:计算机发展历程计算机的系统层次结构(计算机系统的基本组成和计算机硬件的基本组成计算机硬件和软件的关系计算机系统的工作原理),和计算机的性能指标

一、计算机的发展历程

1. 计算机发展的四代变化

计算机的发展过程经理四个时代:电子管时代晶体管时代中小规模集成电路时代超大规模集成电路时代

  • 电子管时代逻辑元件采用电子管,使用机器语言进行编程,存储的容量小,体积大,成本高,运算速度慢。
  • 晶体管时代逻辑元件采用晶体管,运算速度相比于电子管时代的计算机提高一点,此时开始出现高级语言和编译程序,有了操作系统的雏形
  • 中小规模集成电路时代逻辑元件采用中小规模集成电路,高级语言发展迅速,开始有了分时操作系统
  • 超大规模集成电路时代逻辑元件采用大规模集成电路和超大规模集成电路,产生了微处理器(CPU),产生了并行、流水线、高速缓存和虚拟存储器等概念。

2. 计算机元件的更新换代

  1. 摩尔定律:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月就会增加一倍,性能也会提升一倍。
  2. 半导体存储器的发展
  3. 微处理器的发展:微处理器从刚开始只能处理8位发展到现在能够处理64位,这里的位指的是机器字长,也就是计算机进行一次整数运算所能处理的二进制数据的位数,例如:像处理一个整数,我们知道一个整数是4个字节,也就是8个比特位,那么如果采用刚开始的处理器,因为那时候的处理器一次只能处理8个比特位,所以那个时候的处理器处理一个整数需要4次,现在的处理器一次能够处理64个比特位,所以现在的处理器来处理一个整数一次就能够处理完毕。

3. 计算机软件的发展

计算机语言从刚开始的机器语言,逐渐发展产生了汇编语言面向对象的高级语言,可见其发展是非常迅速的。

二、计算机系统层次结构

1. 计算机系统的组成

计算机系统是由硬件系统软件系统组成的。

  • 硬件系统:能够实际摸得着的那些东西:比如常见输入输出设备存储器运算器控制器,这五大部件也是后面冯诺依曼体系结构中的重要组成部分。
  • 软件系统:包括常见的使用高级语言编写而形成的软件,其能够让硬件完成对应的工作

计算机性能的好坏很大程度是取决于软件的,但是软件的运行又离不开硬件,硬件和软件其实对于实现某一个逻辑具有等效的作用,但是使用硬件和使用软件来完成的成本和效率是不一样的,其中,如果使用软件来完成逻辑运行的话,就是效率低,成本低使用硬件来完成对应的逻辑运算的话就是效率高,成本高。比如:如果我们要完成一个乘法计算,那么对于硬件我们只需要实现一个乘法指令(成本高),让硬件进行计算即可(效率高),但是采用软件的话,就只能进行多次相加,所以显然效率就会比较低,但是成本也低

2. 冯诺依曼体系结构

早期的冯诺依曼体系结构
在这里插入图片描述
早期的计算机中的结构是按照上面的结构实现的,数据经过输入设备之后是将数据传送到运算器,然后再由运算器将数据输送到存储器,这个结构是以运算器为中心的,这个过程中效率就会相对比较慢了,所以后期的计算机中的结构做出了修改
后期的冯诺依曼体系结构
在这里插入图片描述
后期的计算机中,数据经输入设备之后是直接到达存储器,然后需要运算的时候再将数据传送给运算器进行运算。所以这个结构是以存储器为中心的

  1. 存储程序:将事先编制好的程序原始数据送入主存(内存)后才能执行CPU执行),一旦程序被启动,就无需操作人员干预,计算机会自动逐条执行指令,直到程序运行结束。存储程序相比于原始的计算机所具有的优点:不需要人为进行干预,从而提高了计算机运行的效率
  2. 冯诺依曼体系计算机的特点
  • 采用存储程序的工作方式
  • 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备构成
  • 指令和数据以同等地位存储在存储器中,形式上没有区别,但是计算机能够对它们进行区分
  • 指令和数据均以二进制的形式进行表示。指令是由操作码地址码组成,其中,操作码指出操作的类型,就是告诉CPU这条指令需要执行什么操作,比如:加法操作和减法操作。地址码是指出操作数的地址,就是告诉CPU这个要去哪里找这个指令运算对应的操作数。

3. 计算机的功能部件

前面我们知道冯诺依曼体系结构中包含五大部件:输入设备,输出设备,存储器,运算器和控制器。下面我们将逐一介绍其中的原理:

1. 输入设备

输入设备的主要作用就是将程序和数据以计算机能够识别的机器语言形式输入给计算机,最常用的输入设备:键盘,鼠标,扫描仪,摄像机

2. 输出设备

输出设备的主要功能就是将计算机处理的结构以人类能够识别的形式输出。最常用的输出设备:显示器、打印机。

3. 存储器

存储器包括两类基本的存储器:主存储器和辅助存储器

  • 主存储器:指内存,就是CPU能够直接访问的存储器,一般大小为:8GB或者16GB
  • 辅助存储器:CPU不能直接访问的存储器,主要的任务是帮助主存储器存储更多信息,因为CPU无法直接访问这里的信息,所以当这些信息需要被执行的时候,需要先将这些信息调入内存才能被执行。常见的辅助存储器:比如电脑中的磁盘,手机的SD卡,U盘之类的存储器。
  • 按地址存取方式:主存储器的工作方式是按照存储单元的地址进行存取的,这里的存储单位,主存储器一般会被划分为很多个小的存储单元,每一个单元从头到尾依次会进行编号,每一个存储单元对应的编号就是这个存储单元对应的地址。
    在这里插入图片描述
    主存储器中主要包含:存储体、地址寄存器(MAR)和数据寄存器(MDR)
  • 存储体:存储体会被分成很多个存储单元,数据在存储体中是按照地址进行存取的,存储单元中包含很多个存储元件,每一个存储元件存储一个二进制的1或者0,所以一个存储单元存储的是一串二进制数的序列,我们将这串二进制序列称为存储字,这串二进制序列的二进制位数称为存储字长。
  • 地址寄存器(MAR):存放的是数据在存储体中的地址,形式为二进制。其中地址寄存器有几位,对应的存储体中就有2的几次方个存储单元。如:一个主存储器中的地址寄存器有8位,那么这个主存储器中的存储体就被分成2^8个存储单元。
  • 数据寄存器(MDR):存放的是写入存储体中的数据或者即将从存储体中读出的数据,位长为存储字的长度(一次只能存储一个数据)。

需要注意的是:地址寄存器(MAR)和数据寄存器(MDR)虽然是存储器的一部分,但是在现代计算机中却是存在于CPU中的。

4. 运算器

运算器是计算机中的执行部件,用于进行算数运算逻辑运算

  • 算数运算:按照算数运算规则进行的运算,如:加、减、乘、除
  • 逻辑运算:按照逻辑进行的运算,如:与、或、非、异或、比较、移位
    运算器中包含很多个寄存器,主要用于暂时存储操作数和中间结果,如:累加器(ACC)乘商寄存器(MQ),**操作数寄存器(X)**等,其中,这三个是运算器中必须具备的寄存器。
  1. 累加器(ACC):存放操作数或运算结果
  2. 乘商寄存器(MQ):在乘除时,存放操作数或运算结果
  3. 操作数寄存器(X):存放操作数
  4. 算术逻辑单元(ALU):通过内部实现的复杂的电路来实现算数运算和逻辑运算

5. 控制器

控制器是计算机的指挥中心,计算机中主要是由控制器指挥各个部件自动协调地工作。控制器主要由控制单元(CU)指令寄存器(IR),**程序计数器(PC)**组成

  1. 控制单元(CU):分析指令,给出控制信号
  2. 指令寄存器(IR):存放当前执行的指令
  3. 程序计数器(PC):存放下一条执行指令的地址,有自动加1的功能,1是指一条指令的长度,即可以自动形成下一条指令的地址,它和主存中的MAR有一条直接的通路。

三、 分析计算机各个部件在执行代码中的过程(重难点)

任何一条执行的执行都要经历三个步骤:取指令,分析指令,执行指令
下面以一个具体的例子来介绍这个过程:
在这里插入图片描述
比如:我们要让计算机执行上面的代码,上面的代码逻辑非常简单,就是先执行ab,再执行ab+c,然后讲结果放在y中。其中对应的数据有:a,b,c,y
首先需要将对应的指令和数据存入主存储器的存储体中,存储的过程是按照存储单元的地址进行存储的,存储的形式是二进制,如下:
在这里插入图片描述

  1. 执行第一条指令
  • 取指令:刚开始PC寄存器中存储的是第一条指令的地址,此时会将PC中存储的指令地址传给地址寄存器(MAR),然后PC指向下一条指令,此时MAR中对应的值为0,然后再到存储体中取出地址为0的存储单元中的数据(指令),放入数据寄存器(MDR),然后再将数据寄存器中的指令传给指令寄存器(IR),此时IR会将指令分为两个部分:操作码和地址码,操作码会交给控制单元(CU)进行分析,地址码会交给地址寄存器(MAR)。
  • 分析指令:控制单元经分析得出该指令想要执行的操作是取数操作。
  • 执行指令:通过MAR中存储的地址到存储体相应的位置取出对应的数据放在数据寄存器(MDR)中,所以此时MDR中存放的值为a = 2,再将2的值放入累加寄存器(ACC)
    具体过程如下:
    在这里插入图片描述
  1. 执行第二条指令
  • 取指令:第一条指令执行结束之后,PC指向的指令是第二条指令,此时将PC中存放的指令地址传给MAR,PC再指向下一条指令,此时MAR存放的是第二条指令的地址,因此到存储体中该地址处找到存储的数据(第二条指令),并将该指令放到MDR中,此时数据寄存器MDR将该指令交给指令寄存器IR
  • 分析指令:IR将该指令分成两个部分:操作码和地址码,操作码交给控制单元(CU),地址码交给地址寄存器(MAR),CU经分析得知该指令想要执行乘法操作
  • 执行指令:到存储体中MAR中存储的地址对应的存储单元处找到对应的数据,并将该数据放入数据寄存器(MDR),再将该数据输出到乘商寄存器(MQ)中,此时累加寄存器(ACC)中存放的是a的值,MQ中存放的是b的值,再将累加寄存器中的值放入通用寄存器(X)中,此时控制单元向算数逻辑单元(ALU)发送信号,执行乘法操作:将X中存储的值和MQ存储的值进行相乘,再将数据存到累加寄存器(ACC)中。
    具体过程如下:
    在这里插入图片描述
  1. 执行第三条指令
  • 取指令:第二条指令执行结束之后,PC指向的指令是第三条指令,此时将PC中存放的指令地址传给MAR,PC再指向下一条指令,此时MAR存放的是第三条指令的地址,因此到存储体中该地址处找到存储的数据(第三条指令),并将该指令放到MDR中,此时数据寄存器MDR将该指令交给指令寄存器IR
  • 分析指令:IR将该指令分成两个部分:操作码和地址码,操作码交给控制单元(CU),地址码交给地址寄存器(MAR),CU经分析得知该指令想要执行加法操作
  • 执行指令:到存储体中MAR中存储的地址对应的存储单元处找到对应的数据,并将该数据放入数据寄存器(MDR),再将该数据输出到通用寄存器(X)中,此时累加寄存器(ACC)中存放的是a*b的值,通用寄存器中存储的是c的值,此时控制单元向算数逻辑单元(ALU)发送信号,执行加法操作:将ACC中存储的值和X中存储的值进行相加,再将数据存到累加寄存器(ACC)中。
    具体过程:
    在这里插入图片描述
  1. 执行第四条指令
  • 取指令:第三条指令执行结束之后,PC指向的指令是第四条指令,此时将PC中存放的指令地址传给MAR,PC再指向下一条指令,此时MAR存放的是第四条指令的地址,因此到存储体中该地址处找到存储的数据(第四条指令),并将该指令放到MDR中,此时数据寄存器MDR将该指令交给指令寄存器IR
  • 分析指令:IR将该指令分成两个部分:操作码和地址码,操作码交给控制单元(CU),地址码交给地址寄存器(MAR),CU经分析得知该指令想要执行存数操作
  • 执行指令:将累加寄存器(ACC)中存储的数据放入数据寄存器(MDR)中,通过数据寄存器MAR中存储的地址找到存储体中对应的存储单元,此时将MDR中存储的数据放入这个存储单元即可。
    具体过程:
    在这里插入图片描述
  1. 执行第五条指令
  • 取指令:第四条指令执行结束之后,PC指向的指令是第五条指令,此时将PC中存放的指令地址传给MAR,PC再指向下一条指令,此时MAR存放的是第五条指令的地址,因此到存储体中该地址处找到存储的数据(第五条指令),并将该指令放到MDR中,此时数据寄存器MDR将该指令交给指令寄存器IR
  • 分析指令:IR将该指令分成两个部分:操作码和地址码,操作码交给控制单元(CU),地址码交给地址寄存器(MAR),CU经分析得知该指令想要执行停机操作
  • 执行指令:利用操作系统中学习的中断处理机制结束该进程
    具体过程:
    在这里插入图片描述

四、计算机系统的层次结构

五、计算机的性能指标

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

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

相关文章

【算法】阿里面试题-编码实现20亿个整数,找出某个数X是否存在其中

1.海量数据去重-BitMap位图解决方案 需求(面试题) 一个32位4G内存的操作系统,在20亿个整数,找出某个数X是否存在其中 假如是java语言,int占4字节,1字节8位(1 byte 8 bit) 方式一&…

Mockito 入门

目录1.什么是 Mock 测试?2.Mockito简介3.在 SpringBoot 单元测试中使用 Mockito3.1 Maven依赖:3.2 UserService.java3.3 User.java3.4 thenReturn系列方法(测试桩)3.5 thenThrow系列方法3.6 verify 系列方法4.Spring中mock任何容器…

计算机组成原理-动态链接库-笔记

Linux 下的 ELF 文件格式 Windows 的可执行文件格式是一种叫作PE(Portable Executable Format)的文件格式 动态链接库 这些机器码必须是“地址无关”的。也就是说,我们编译出来的共享库文件的指令代码,是地址无关码(…

10个可以实现高效工作与在线赚钱的 AI 工具网站

自 2020 年以来,内容开发领域已经感受到人工智能工具的存在。 目前,营销人员和内容创作者正在利用这些工具来加快他们的工作流程。 如果您拥有最流行的 AI 工具之一,例如 CopyAI、Jasper AI 或 Content at Scale,您可能正在考虑…

申论套卷 | 要点杂、乱、碎的材料如何快速分类整理?

试卷来源:2020年全国联考上半年材料1A省C市Y区文化馆(非物质文化遗产保护中心)作为政府设立的公益性公共文化事业单位,始终坚持公益文化发展方向,面向基层、贴近百姓、服务大众,积极组织各种大型活动&#…

Ubuntu中安装matelab2020a

Ubuntu中安装matelab2020a1 matelab下载2 安装步骤3 激活matelab4 创建快捷方式我的Ubuntu版本是20.041 matelab下载 matelab官网https://www.mathworks.com/ 点击右上角的get matelab,进入下载页面 没有账号的同学可以先去注册一个,推荐使用教育邮箱&…

错误: tensorflow.python.framework.errors_impl.OutOfRangeError的解决方案

近日,在使用CascadeRCNN完成目标检测任务时,我在使用这个模型训练自己的数据集时出现了如下错误: tensorflow.python.framework.errors_impl.OutOfRangeError: PaddingFIFOQueue _1_get_batch/batch/padding_fifo_queue is closed and has in…

前端JS内存管理

JS内存管理 内存原理: 任何变成语言在执行的时候都需要操作系统来分配内存,只是有些语言需要手动管理分配的内存有些语言有专门来管理内存的方式 如 JVM 了解以上的概念之后,我们再来了解一下大致的内存周期 分配需要的内存使用内存在不使用…

Linux- 系统随你玩之--好用到炸裂的系统级监控、诊断工具

文章目录1、前言2、lsof介绍2.1、问题来了: 所有用户都可以采用该命令吗?3、 服务器安装lsof3.1、安装3.2、检查安装是否正常。4、lsof 命令4.1、常用功能选项4.2、输出内容4.2.1 、FD和 TYPE列5、 lsof 命令实操常见用法6 、常用组合命令7、 结语1、前言…

OpenHarmony 3.2 Beta Audio——音频渲染

一、简介Audio是多媒体子系统中的一个重要模块,其涉及的内容比较多,有音频的渲染、音频的采集、音频的策略管理等。本文主要针对音频渲染功能进行详细地分析,并通过源码中提供的例子,对音频渲染进行流程的梳理。二、目录foundatio…

无线WiFi安全渗透与攻防(一)之无线安全环境搭建

无线安全环境搭建 1.802.11标准 (1).概念 802.11标准是1997年IEEE最初制定的一个WLAN标准,工作在2.4GHz开放频段,支持1Mbit/s和2Mbit/s的数据传输速率,定义了物理层和MAC层规范,允许无线局域网及无线设备…

Crack:LightningChart .NE​​T 10.4.1中的新功能

数据游标 Lightningchart .NET UWP 展示应用 在以前的版本中,LightningChart .NET 提供了不同的工具来实现数据跟踪功能,但都需要额外的用户编码。 现在可以使用 DataCursor 浏览 ViewXY 系列。系列数据值由这个新类/对象显示在鼠标位置或鼠标位置附近。…

【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题

问题概述 Matplotlib 默认不支持中文字体,这是因为 matplotlib 只支持 ASCII 字符,但是国人使用 matplotlib 肯定需要中文标注。如下图所示,当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。…

为什么我选择收费的AdsPower指纹浏览器?

在决定开始用指纹浏览器之前,东哥我们团队找了市面上很多产品去测试。最后,还是决定用AdsPower。每个人的使用感受都不一样,我就说几个东哥和我们团队用得顺手的点,大家在选择指纹浏览器的时候也可以做一个参考。 一、指纹环境强大…

3月5日,加入线上对话,点燃科技行业女性影响力!

对话升级,点燃科技行业女性影响力! 👋 2022 年,Jina AI 联合 14 家合作伙伴,首次举办了「Impact Tech, She Can」线上对话,11 位嘉宾与 200 多位参会者分享了如何在科技行业内打造自身影响力。 &#x1f38…

html基础(h、p、br、hr、文本加粗倾斜下划线删除线、资源路径、音频、视频、超链接)

1标题<h><h1>1级标题</h1><h2>2级标题</h2><h3>3级标题</h3><h4>4级标题</h4><h5>5级标题</h5><h6>6级标题</h6>2段落<p>和换行<br><p>段落标签</p><p> fgghikg…

大数据技术——面向对象编程基础

类类的定义字段定义:用val或var关键字进行定义方法定义:使用new关键字创建一个类的实例类成员可见性Scala类中所有成员的默认可见性为公有&#xff0c;任何作用域内都能直接访问公有成员除了默认的公有可见性&#xff0c;Scala也提供private和protected其中&#xff0c;private…

真涨脸,我用 Python 为朋友自动化整理表格

今天&#xff0c;在工作的时候&#xff0c;我的美女同事问我有没有办法自动生成一个这样的表格&#xff1a; 第一列是院校科目&#xff0c;第二列是年份&#xff0c;第三列是数量。 这张表格是基于这一文件夹填充的&#xff0c;之前要一个文件夹一个文件夹打开然后手动填写年份…

测牛学堂:软件测试python之unittest框架总结(3)

python之unittest添加整个测试类执行 如果我们的测试用例比较多的话&#xff0c;测试套件对象通过addTest一个一个添加比较麻烦&#xff0c;可以通过添加一个类的方法&#xff0c; 去执行这个类里面的所有测试方法 套件对象.addTest(unittest.makeSuite(测试类名)) import un…

“终于我从字节离职了...“一个年薪50W的测试工程师的自白...

我递上了我的辞职信&#xff0c;不是因为公司给的不多&#xff0c;也不是因为公司待我不好&#xff0c;但是我觉得&#xff0c;我每天看中我憔悴的面容&#xff0c;每天晚上拖着疲惫的身体躺在床上&#xff0c;我都不知道人生的意义&#xff0c;是赚钱吗&#xff1f;是为了更好…