【计算机组成 课程笔记】1.2 冯·诺伊曼结构

课程链接:

计算机组成_北京大学_中国大学MOOC(慕课)

1 - 2 - 102-冯·诺依曼结构的要点(13-'59--)_哔哩哔哩_bilibili

现代的计算机形态各异,但究其本质,几乎全部采用了冯·诺依曼结构。要了解计算机,首先要知道什么是冯·诺依曼结构。

1. 冯·诺依曼结构的要点

要说冯·诺依曼结构,就得从《关于EDVAC的报告草案》说起。这份报告论述了两个重要的思想:1. 存储程序(而不是开关连线),2. 二进制(而不是十进制)。这份报告还明确了计算机的五个部分:运算器,控制器,存储器,输入设备和输出设备。

 2. 冯·诺依曼计算机的类比

知道了冯·诺依曼计算机的基本结构以后,我们可以做一个有趣的类比。把冯·诺依曼计算机看成是一个餐馆。厨房就是CPU,其中大厨就是控制器,而他做菜的工具-锅就相当于运算器。仓库则是存储器,里面存放了做菜所需的原料和任务单。这个类比中没有包含输入输出设备,这部分我们后面再探讨。

注意,如果没有存储程序的概念,即任务单和原料不放在一起,任务单是由人来下达的,这样带来的问题就是,由于控制器和运算器运转很快,下达指令就会成为瓶颈,影响整体效率。

下面我们把计算机执行一条指令的过程来类比一下。计算机执行一条指令主要包含4个步骤:取指,译码,执行,回写。

1. 取指(Fetch):相当于厨师知道了下张任务单的存放位置,然后向仓库发起请求:我需要第1格的东西。仓库收到命令以后取出所需东西,给厨师送回去,这就是第一步-取指。

2. 译码(Decode):相当于厨师分析任务单,比如任务单上写了炒菜,原料放在仓库第6格,炒完以后给A号盘子(通用寄存器)

3. 执行(Execute):按照任务的不同步骤,进行执行

4. 回写(Write-back):将炒完的菜盛放到A号盘子里

3. 计算机结构的简化模型

通过餐馆的例子,我们形象地了解了冯·诺依曼计算机的基本结构和指令执行过程。通过这个餐馆的模型,我们几乎可以一一对应地构造出一个简化的计算机结构模型。首先看到有CPU和存储器两大部件,中间通过系统总线(控制总线,地址总线和数据总线)相连。

存储器中包含了很多存储单元。存储单元的位宽由设计计算机时对存储器的编址方法确定,比如如果存储器按字节编址,则每个存储单元存放8位二进制数。另外,存储单元的地址是唯一的,不同存储单元地址互不相同。CPU要想访问某个存储单元,必须通过地址总线给出相应的地址,因此如果地址总线宽度为n,则CPU能管理的存储单元最多为2^n个。除了存储单元以后,存储器里还有MAR(Memory Address Register,存储器地址寄存器)和MDR(Memory Data Register,存储器数据寄存器),分别用于存放CPU正在读或写的存储单元的地址和数据。

再来看一下CPU。CPU中的控制器用于控制计算机各部件完成取指令,分析指令和执行指令等功能。主要组成部分包括IR(Instruction Register,指令寄存器),PC(Program Counter,程序计数器),MAR,MDR,指令译码部件,控制电路。IR存放“正在执行或即将执行的指令”,PC存放“下一条指令的存储单元地址”,具有自动增量计数功能。MAR在访存时用于存放“存储单元的地址”,和存储器上的MAR通过地址总线相连。MDR在访存时用于存放“对存储单元读或写的数据”,和存储器上的MDR通过数据总线相连。指令译码部件对IR中的指令进行译码,以确定IR中存放的是哪一条指令。当确定了是哪条指令之后,控制电路就可以产生对应的控制信号,在时序脉冲的同步下控制各个部件的动作。

CPU中的运算器用于算术运算和逻辑运算。核心部件ALU用于完成计算,X,Y,Z是ALU的数据暂存器,可视为ALU的一部分,F用于存放运算结果的状态(零/正负/进位/溢出)。R0~Rn-1是n个通用寄存器,用于临时存放数据,数据可以来自存储器,也可以来自于其他通用寄存器或ALU的输出。不同寄存器之间传递数据通过CPU的内部总线传递。

4. 计算机执行指令的过程

根据上述的计算机简化模型,我们再来重温一下计算机执行指令的过程。之前我们提到,计算机执行一条指令主要包含4个步骤:取指,译码,执行,回写。我们假设现在执行的指令是ADD R0, [6],表示把通用寄存器R0的内容和地址为6的存储单元的内容相加,运算结果更新到R0中。

1. 取指(Fetch):控制器发出控制信号,将PC寄存器中的内容通过内部总线传递到MAR中。MAR将存储的地址通过地址总线传到存储器的MAR中。与此同时,控制电路会在控制总线上发出相应的控制信号(READ)到存储器的控制逻辑单元,代表这次访问存储器的操作是要读数据。存储器通过地址译码器查找到对应存储单元的内容,并将此内容送到存储器的MDR。然后存储器的控制逻辑单元通过控制总线发送控制信号(READY)给CPU。同时MDR的数据通过数据总线送到CPU的MDR上。然后MDR中的内容通过内部总线传递到IR中。最后PC计数器更新为下一条指令所需要访问的地址。到此,取指阶段完成。

2. 译码(Decode):当前IR寄存器中的指令被送到指令译码器,译出这是一条“ADD R0, [6]”的指令)。这时发现其中一个操作数[6]还在存储器中,因此把要取的地址(0110)放到MAR中,随后的过程类似于第1步,取回来的数据放到MDR上。然后由于后面要进行ADD的操作,因此把两个操作数放到ALU的暂存器处,即R0的数据放到X,MDR的数据放到Y,这样计算所需的操作数就准备好了。

3. 执行(Execute):在控制电路的控制下,ALU就会进行运算,将X和Y的内容执行加法,结果写到Z。

4. 回写(Write-back):将运算结果写入到通用寄存器或存储器。对于这条指令是写到R0上,那么控制电路会给出控制信号,把Z的结果通过内部总线传递到R0上。

 5. 计算机的输入输出

前面的模型我们只讲到了运算器,控制器和存储器,本节我们引入另外两个部分:输入输出设备。毕竟如果没有输入输出设备,即使我们的cpu再强大,也没什么用。

现在我们考虑在模型机上加上输入输出设备,这里我们添加一个简化的输入输出设备——输入通过手动开关控制,输出通过小灯泡表示。这就是第一台微型计算机牛郎星8800所用到的输入输出设备。

现在我们把这样的输入输出设备接到我们的模型机上。我们可以设想这是一个类似于存储器结构的输入输出芯片,它内部有2个存储单元,每个单元都有自己的地址。这里设定的地址是1110和1111,和存储器里的地址都不相同,因此可以相互区分。

那么这个输入输出设备是如何和计算机的其他部分交互的呢?和存储器类似,也是通过系统总线相连。下面我们通过输入,输出两个简单场景来理解这一过程。

输入的简单场景:CPU通过地址总线发送要读取的地址(1111),地址总线上会有简单的分流逻辑,判断当前访问的对象是输入输出设备而不是存储器。同时控制电路通过控制总线发送READ信号,表示此次操作为一个读操作。然后和之前的指令执行过程类似,1111地址的内容11100000通过MDR返回给数据总线。 

输出的简单场景:CPU通过地址总线发送要写入的地址(1110),同时控制电路通过控制总线发送WRITE信号,表示此次操作为一个写操作。然后11001100通过数据总线传送给输入输出设备的MDR,再写入到1110存储单元的位置。 

 6. 冯·诺依曼结构和具体实现

现在我们对冯·诺依曼结构已经非常熟悉了,包括五个部分: 运算器,控制器,存储器,输入设备和输出设备。 

那这样原理性的框图和现代计算机的具体实现是如何对应的呢?以个人计算机为例,CPU代表的是运算器CA和控制器CC,主存(也常称为内存条)代表存储器M。那么CPU是如何获取指令并开始执行的呢?这块主板上采用的是个人计算机上长期占据主导地位的南北桥结构。CPU对外连接的一块芯片叫做北桥,CPU想要访问主存,就得通过北桥芯片。但这里我们还要注意,计算机刚启动的时候,主存里面是没有信息的,因为当计算机断电之后,主存的信息都会丢失。那在系统启动之后,CPU从哪里获取指令呢?我们可以看到北桥下方还有一块比较大的芯片,它就是南桥,南桥内部集成了很多输入输出设备的控制器,其中包括BIOS芯片,这个芯片存储容量很小,会保存一段比较简单但是十分重要的程序,包括检查主板上有哪些设备(显卡,键盘等),是否工作正常,这颗芯片是一颗只读存储器,当系统断电之后,只读存储器中保存的信息是不会丢失的。所以当CPU启动后,CPU可以依次通过北桥,南桥来访问BIOS芯片,从里面取得指令。

 整个南北桥的结构在现代计算机的演进中发生着快速的变化。下图和上图是同一个结构,图中红色的箭头代表传输压力大,为了减少性能瓶颈,南北桥的结构发生了一些演变。

首先,北桥中的主存控制器被移到了CPU芯片当中,这样CPU就能直接访问主存而不需要通过北桥,这样可以大大提高数据的传输率,进而提升系统的性能。现在,显示的这条通道就成了下一个要解决的问题。

因此在最新的个人计算机的CPU设计中,不仅包括了主存控制器,还包括PCIe控制器,可以直接连接显卡。这样北桥中最重要的部件都被集成到了CPU中,这样北桥就没有存在的必要了。将北桥中剩余的一些功能和南桥整合到一起之后,所谓南北桥的架构其实已经消失了,整个个人计算机的主板由3片式的架构缩减成了2片式。由于没有了北桥,南桥这个名字也显得有些奇怪了,所以它现在往往有一些不同的名字(如PCH)。现在CPU直接连接了主存和显卡,还与原先的南桥直接相连,这样就将原先通过主板的复杂的通路大多移到了芯片的内部,而芯片内部的数据传输率是远远高于主板的,这样就大大地提升了系统的性能。

那既然从3片缩减成了2片,我们可不可以进一步缩减呢?其实已经有人这么做了。这就是系统芯片的概念。

系统芯片(System-on-a-Chip, SoC):将计算机或其他电子系统集成为单一芯片的集成电路。

这是一个硬币大小的芯片,但在这一颗芯片内部集中了冯·诺依曼结构的所有组件。所以我们可以用这样的芯片制造出非常小巧的计算机。这种计算机只有手掌大小,但它的功能很完备,并拥有丰富的外部接口,与普通的计算机并没有什么差别。这样高集成度的优势就让系统芯片的技术广泛应用于智能手机/平板电脑等移动计算设备上。

那么原先计算机中那么多的芯片和板卡,为什么能够集中到越来越少的芯片当中呢?那就得说到一条著名的定律——摩尔定律:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。

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

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

相关文章

数据挖掘导论学习笔记1(第1 、2章)

参考:https://blog.csdn.net/u013232035/article/details/48281659?spm1001.2014.3001.5506 和《数据挖掘导论》学习笔记(第1-2章)_时机性样本_schdut的博客-CSDN博客 第1章 绪论 数据挖掘是一种技术,它将传统的数据分析方法…

14 mysql bit/json/enum/set 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 bit/json/enum/set 类类型的相关…

android:新建工程文件介绍

一、前言当我们新建一个app时会呈现出固定的工程文件,这篇文章介绍新建工程里的文件。 二、介绍 Structure:就是你选择哪个页面就会显示那个页面的结构,就比如说我选择的是MainActivity他就会显示这个页面所使用的方法。 1-2:是android自动生…

Navicat15天试用期过期解决办法

如果你是windows电脑,发现过期了先把Nvaicat关掉,按照以下步骤可以恢复到15天试用。 1.注册表输入regedit winR打开注册表 2.搜索输入HKEY_CURRENT_USER\Software\PremiumSoft\Navicat 删除Registration15XCS和Update这两个文件夹。 3.搜索HKEY_CURRE…

【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】

1、问题描述 Jenkins打包服务运行dockerfile里的FROM java:8报错manifest for java : 8 not fourd Caused by: com.spotify. docker.client.exceptions.DockerException: manifest for java:8 not found2、解决方法 在网上查找许多方法后得出这是由于Docker官方已经弃用java…

【kubernetes】k8s部署APISIX及在KubeSphere使用APISIX

Apache APISIX https://apisix.apache.org/ 功能比nginx-ingress更强 本文采用2.5.0版本 https://apisix.apache.org/zh/docs/apisix/2.15/getting-started/ 概述内容来源于官方,学习于马士兵云原生课程 概述 Apache APISIX 是什么? Apache APISIX 是 …

r 安装源码包 安装本地r包

总结一下手动安装R包 - 简书 (jianshu.com)https://www.jianshu.com/p/2a7a36414734 #BiocManager::install("simplifyEnrichment") #BiocManager::install("EnsDb.Hsapiens.v86")#下载包 之后 手动安装 #install.packages("~/datasets/EnsDb.Hsapien…

springboot封装查询快递物流

目录 一、ApiClient代码解读二、ApiService代码解读三、HomeController代码解读四、整体代码五、结果展示 一、ApiClient代码解读 这是一个简单的Spring Boot的RestTemplate客户端,用于执行HTTP请求。 首先,这个类被Component注解标记,这意味…

2024毕业设计选题指南【附选题大全】

title: 毕业设计选题指南 - 如何选择合适的毕业设计题目 date: 2023-08-29 categories: 毕业设计 tags: 选题指南, 毕业设计, 毕业论文, 毕业项目 - 如何选择合适的毕业设计题目 当我们站在大学生活的十字路口,毕业设计便成了我们面临的一项重要使命。这不仅是对我们…

vue训练场练习props和$emit,实现大写输入,小写输出。

场景: 在vue官网训练场,使用训练场中的组件。 仅作为练习笔记,仅供产考。 App.vue 组件代码 方式一:Watch监听 方式二:input绑定

多线程的五种“打开”方式

1 概念 1.1 线程是什么?? 线程(Thread)是计算机科学中的一个基本概念,它是进程(Process)中的一个执行单元,负责执行程序的指令序列。线程是操作系统能够进行调度和执行的最小单位。…

GB28181学习(二)——注册与注销

概念 使用REGISTER方法进行注册和注销;注册和注销应进行认证,认证方式应支持数字摘要认证方式,高安全级别的宜支持数字证书认证;注册成后,SIP代理在注册过期时间到来之前,应向注册服务器进行刷新注册&…

Spring——Spring Boot基础

文章目录 第一个helloword项目新建 Spring Boot 项目Spring Boot 项目结构分析SpringBootApplication 注解分析新建一个 Controller大功告成,运行项目 简而言之,从本质上来说,Spring Boot 就是 Spring,它做了那些没有它你自己也会去做的 Spri…

java-参数传递机制

java参数传递机制都是值传递。 基本类型参数传输都是数据值。 传递到方法中的值是拷贝后的值。 引用类型参数传输的都是地址值。 如果是数组的参数传递,那么是引用传递(本质上还是值传递,但是由于数组的值传递是传递数组的内存地址&#xf…

探索OLED透明屏的优缺点:引领科技未来的革命性突破

OLED透明屏作为一项革命性的创新技术,其令人惊叹的透明度和柔性性能引起了全球范围内的关注。 然而,了解OLED透明屏的优缺点对于我们全面认识其在科技未来中的地位至关重要。 今天,尼伽将深入探讨OLED透明屏的优势和限制,并借助…

spring boot项目生成容器并运行

一个安静的周末,shigen又睡懒觉了,上次说的拖延症的惩罚来了:早晚各100个健腹轮练习,早上的已经完成了。今天的文章来的有点晚,但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…

chatgpt谈论日本排放污水事件

W...Y的主页 😊 代码仓库分享 💕 近日,世界发生了让人义愤填膺的时间——日本排放核污水。这件事情是那么的突然且不计后果,海洋是我们全人类共同的财产,而日本却想用自己一己私欲将全人类的安全置之度外&#xff0c…

Mysql 性能分析 explain、Describe

通常 多表查询 比 子查询效率更高一些, 数据搜索引擎 如果子查询能转换城成多表查询,会自动转换。 explain 、describe 语法结构 explain select_options | update_options | insert_options | replace_options 或 describe select_options | update…

java反编译工具jd-gui使用

文章目录 一、JD-GUI介绍二、下载三、安装四、使用教程五、免责声明摘抄 一、JD-GUI介绍 JD-GUI是一个独立的图形实用程序,显示“.class”文件的Java源代码。 使用JD-GUI浏览重构的源代码,以便即时访问方法和字段。 二、下载 MAC安装包:ht…

安防视频监控/视频集中存储/云存储平台EasyCVR无法播放HLS协议该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…