【计算机组成 课程笔记】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自动生…

环上计数+计数转概率:ABC318EX

https://atcoder.jp/contests/abc318/tasks/abc318_h 先转为概率, f i f_i fi​ 表示 i i i 个点两人都AC的概率, g i g_i gi​ 表示恰好一个人AC的概率。 两个人都AC,只能为全部自环, f i 1 i ! f_i\frac 1 {i!} fi​i!1​ …

C++/C# : C#和C++的不同

C#和C是两种不同的编程语言,虽然在某些方面它们具有相似之处,但它们也有一些明显的不同点,如下: C是一种静态类型编程语言,而C#是一种动态类型编程语言。 C允许开发者手动管理内存的分配和释放,但是C#的垃…

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…

前端入门到入土?

文章目录 前言http和https的区别,https加密的原理是?区别https的加密原理 TCP为什么要三次握手?proxy代理的原理?内存泄漏?什么是内存泄漏?为什么会有内存泄漏?内存泄漏的情况?如何防…

PAT 1163 Dijkstra Sequence

个人学习记录,代码难免不尽人意。 Dijkstra’s algorithm is one of the very famous greedy algorithms. It is used for solving the single source shortest path problem which gives the shortest paths from one particular source vertex to all the other v…

关于MySQL数据库版本不同导致表进行比较的时候报错illegal mix of collations...的问题

问题发生的原委 之前在项目开发的时候,我本地也建立了数据库用作开发库,我本地的数据库版本是5.7的,但是测试和生产库都是8.0的版本,我们定义的数据库字符集是utf8mb4,排序规则是utf8mb4_general_ci,前段时…

数据库连接报错CannotGetJdbcConnectionException: Failed to obtain JDBC Connection

数据库连接报错CannotGetJdbcConnectionException: Failed to obtain JDBC Connection 报错信息 [Namecom.primeton.esb.online.restaurant.ms.online.mediaService.mediaService.biz][activity nameJDBC调用][activity idinvokePojo9] throw an exception:java.lang.Excepti…

TCP/IP协议簇的主要协议以及主要用途

目录 SLIP协议--(Serial line IP) PPP协议--(点对点协议) IP协议 ICMP协议 ARP协议 TCP协议 UDP协议 FTP协议 DNS协议 SMTP协议 TCP/IP协议簇是Internet的基础,TCP/IP是一组协议得代名词,包括许多…

springboot封装查询快递物流

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

【微服务部署】04-ForwardedHeaders

文章目录 1. ForwardedHeaders1.1 场景1.2 关键的HTTP头1.3 核心处理要点 1. ForwardedHeaders 1.1 场景 获取用户IP获取用户请求的原始URL 1.2 关键的HTTP头 X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-Host 1.3 核心处理要点 设置PathBase设置ForwardedHeaders中间件…

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

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

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

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

【hadoop运维】running beyond physical memory limits:正确配置yarn中的mapreduce内存

文章目录 一. 问题描述二. 问题分析与解决1. container内存监控1.1. 虚拟内存判断1.2. 物理内存判断 2. 正确配置mapReduce内存2.1. 配置map和reduce进程的物理内存:2.2. Map 和Reduce 进程的JVM 堆大小 3. 小结 一. 问题描述 在hadoop3.0.3集群上执行hive3.1.2的任…

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

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