无论你是科技爱好者还是程序猿,冯诺依曼体系结构你得知道!

📣 大家好,我是 Zhan,一名个人练习时长两年的大三后台练习生🏀

📣 这篇文章是 操作系统 第一篇笔记📙

📣 如果有不对的地方,欢迎各位指正🙏🏼

📣 Just do it! 🫵🏼🫵🏼🫵🏼


🔔 引语

本文主要讲解了冯诺依曼模型,也就是计算机的这五个基本组件:控制器、运算器、存储器,输入输出设备

同时,讲解了计算机内部程序的执行过程a = 1 + 2 到底如何怎么执行的,其中 CPU 取指令、解码和执行指令,完成各种任务。

最后,我们将解释CPU频率和指令执行速度的关系,以及32位和64位CPU的不同,让你更了解计算机的性能。

无论你是科技爱好者还是程序猿,这些核心概念都将助你更好地驾驭计算机。


一、冯诺依曼模型

早在 1945 年,在那个使用图灵机的时代,冯诺依曼以及其他的计算机科学家就一同提出了怎么去实现一台计算机,提出使用电子元件构造计算机,并约定用二进制进行计算和存储

早在那时就提出了计算机的五大基本结构:运算器、控制器、存储器、输入设备、输出设备

  • 控制器:计算机的"手",负责协调和控制计算机内部各个组件的操作,从存储器中获取指令,解码指令,控制运算器进行计算
  • 运算器:计算机的"大脑",所有对数据执行的数学操作和逻辑判断都是它做,也正是这一个个加法、减法、与、或,达到了现在的算力
  • 存储器 :用于存储数据、存储命令。存储器范围广泛,它除了包含了 内存磁盘,还包括 ROM 这样的只读存储器:
    • 内存:我们买手机、买电脑的时候的 运行时内存
    • 磁盘:手机电脑的存储空间,比如你的 iPhone 14 Pro Max 1TB 远峰蓝 中的 1TB
    • ROM:与之对应的是 RAM,也就是我们上面说的内存,而 ROM 在制造的过程中就会被写入,通常我们是无法进行修改的,里面存储的数据即使计算机断电也不会消失,所以关于操作系统的代码会存在里面
  • 输入设备、输出设备:这个我们不难理解,也就是我们常规意义上的 I/O 设备,比如鼠标、键盘、显示器、打印机......

知道了冯诺依曼体系结构,但是总觉着听上去还是比较抽象,和自己用的电脑好像有点联系不起来?

组装一台所需要的的配件主要有8个:CPU,主板,显卡,内存,硬盘,电源,散热,机箱,网卡

其中 CPU、显卡、网卡 都分别属于哪个部分呢?

  • 中央处理器 ,也就是我们平时所说的 CPU,是计算机的核心部件,它包含控制器运算器这个两个关键组件,在现代计算机体系结构中,CPU 还包含一组寄存器,尽管寄存器也是存储器的一种,但是当我们提到存储器的时候,通常更多指的是内存和磁盘
  • 显卡 ,也就是我们说的 GPU,通常被视为附加的处理器,可以和 CPU 并行工作,但是它不是冯诺依曼体系结构中的核心组成部分,它主要用于图形渲染
  • 网卡 ,也就是网络适配器,属于输入输出设备的范畴,它允许计算机与其他计算机进行通信和数据交换,把计算机内部的数据发送到网络上,同时从网络接受数据并传递给计算机内部

我们平时买电脑,以及使用电脑总是会听到 32 位,64 位这样的字眼,它指的是 CPU 的位宽,那么更大的位宽会有什么样的好处呢?

  1. 寻址能力的提升:我们所有存储的数据在内存中都有它的地址,而 32 位CPU意味着它可以同时访问和处理的内存地址最多为 2^32 个,大约 4 GB,也就是说更大的位宽可以支持系统更大的内存容量
  2. 数据处理能力 :32 位CPU的寄存器和总线都是 32 位宽度,也就是一次可以处理 32 位大小的数据,但是对于高性能计算或者大规模处理任务中会限制效率。只有运算大数字的时候,64 位 CPU 的优势才能体现出来,否则和 32 位 CPU 的计算性能相差不大
  3. 题外话:我们在下载软件的时候也时常会遇到 32 位软件和 64 位软件,其实就是他们的指令是 32 位还是 64 位,关于指令我们会在下文中详细介绍,不过我们也能够知道的是:64 位的软件在 32 位的 CPU 上是跑不动滴!

为什么 32 位寄存器和总线就代表 一次 可以处理 32 位大小的数据呢?

首先我们要知道总线的作用:用于CPU和内存以及其他设备之间的通信,且总线可以分为三种:

  • 地址总线:用于指定 CPU 将要操作的内存地址
  • 数据总线:用于读写内存的数据
  • 控制总线:用于发送 中断、复位 这样的信号给 CPU

数据在线路中传输是通过高电平、低电平,也就是说如果只有一条线路,就代表每次只能传递 1bit 的数据,也就是串行传输

为了避免低效率的串行传输的方式,线路的位宽最好可以一次访问到所有的内存地址,也就是说 操作内存地址的地址总线 需要更多以操作更多的内存地址:

  • 例如 2 根地址总线,能够标识的地址就是:00 01 10 11,这四个内存地址
  • 而 32 根地址总线就能够做到 2^32,也就是 4G 的内存地址

所以 32 位CPU 装了 8GB 的内存条,也没用哈哈哈哈哈

二、程序执行的流程

在了解了计算机内部的结构和各自的功能之后,那么程序是怎么跑起来的呢?CPU、存储器怎么工作的呢?

首先我们要剖析什么是程序,所谓程序其实就是一条条的指令的集合,那么我们的问题就变成了一条指令是如何执行:

  1. 获取指令(Fetch):CPU 从内存中获取指令序列中下一条需要执行的指令并传给解码器 ------ 控制器的操作
  2. 解码指令(Decode):CPU 的解码器 解码拿到的指令,识别指令的类型和操作,方便 CPU 理解指令 ------ 控制器的操作
  3. 执行指令(Execute):根据指令的类型,CPU 执行相应的操作,可能是算数运算、逻辑运算、存储器读写...... ------ 运算器的操作
  4. 访问存储器(Store):如果指令是存储器读写指令,就会与存储器交互,完成数据的传输
  5. 写回结果(Store):如果指令执行的结果需要存储起来,那么 CPU 会把数据写到寄存器或者存储器中(根据要求)

以上的四个阶段,我们称之为 指令周期,而 CPU 的工作就是一个周期接着一个周期


弄懂了指令的执行流程,我们如何评估它执行的速度呢 ?这就不得不提到我们在买电脑的时候,CPU 的参数中会有 GHz 这个参数,它就是评估指令执行速度的

例如一个 1GHz 的 CPU 指的是时钟频率是 1G,它每秒钟会执行10亿次时钟周期。这意味着CPU能够处理更多的指令和操作,从而在同样时间内执行更多的计算任务

那么CPU 的指令与时钟周期的关系 是什么呢,一条指令需要多少时钟周期呢?这就要提到我们上面说到的指令周期

  • 指令周期是完成一条指令所需要的时钟周期数
  • 因此不是每秒能执行 10亿 条指令,而是与每条指令的指令周期有关
  • 一条简单的指令可能只需要几个时钟周期,而更复杂的指令(如浮点数运算或内存访问)可能需要更多的时钟周期。现代处理器通常使用流水线并行执行多条指令,从而提高整体的指令执行效率。

总结 :有了上述的知识,我们也大概知道了,对于程序来说,它的耗时是与 指令数目、指令周期、时钟频率 三者相关的,因此想要程序跑的更快,可以从这三个方面优化:

  1. 相同的代码在不同的编译器,编译出来的计算机指令的表达方式各不相同,指令数目的优化依赖于编译器
  2. 指令周期的优化我们在上述中说到,我们可以使用流水线进行并行执行
  3. 时钟频率就是硬件层面,狠狠的提升 CPU,但是过大的频率,工作速度变快的同时,散热的压力也会变大 ,容易真正意义上"把CPU干烧了"

💬 总结

  1. 本文首先介绍了冯诺依曼模型,使用电子元件进行计算和存储,采用二进制表示。其中,控制器、运算器、存储器、输入设备和输出设备构成了计算机的五大基本组件。
  2. 然后,我们分别讲解了这些组件的作用和功能:
    1. 控制器作为计算机的"手",协调内部操作,获取指令、解码指令以及控制运算器的计算。
    2. 运算器则是计算机的"大脑",执行算术和逻辑运算,推动了计算机的计算能力。
    3. 存储器作为数据和命令的存储介质,包括了内存、磁盘和只读存储器(ROM),其中ROM存储着不会随电源断电而消失的数据。
    4. 此外,我们还介绍了输入设备和输出设备的作用,它们负责将数据输入计算机以及将结果输出。
  3. 有了计算机的基本组件这些前置知识,我们讲解了程序 或者说指令 执行的流程。指令是如何获取、解码和执行 过程,这与计算机的五大基本组件息息相关。
  4. 最后讲解了CPU的频率与指令执行速度之间的关系。时钟频率和每条指令的时钟周期数相互影响,指令的执行速度取决于这两个因素的综合。

🍁 友链


✒写在最后

都看到这里啦~,给个点赞再走呗~,也欢迎各位大佬指正以及补充,在评论区一起交流,共同进步!也欢迎加微信一起交流:Goldfish7710。咱们明天见~

相关推荐
洛寒瑜3 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序
码农明明8 小时前
Android源码分析:从源头分析View事件的传递
android·操作系统·源码阅读
_小猪沉塘11 小时前
L6&7 【哈工大_操作系统】操作系统历史 &学习任务
操作系统
Freestyle Coding2 天前
使用rust自制操作系统内核
c语言·汇编·microsoft·rust·操作系统
打鱼又晒网2 天前
Linux进程间通信——探索共享内存—— 剖析原理, 学习接口应用
linux·运维·服务器·后端·操作系统
skaiuijing4 天前
巧用二级指针
c语言·开发语言·算法·架构·操作系统
打鱼又晒网5 天前
linux进程间通信——学习与应用命名管道, 日志程序的使用与实现
linux·运维·服务器·后端·操作系统
OpenAnolis小助手6 天前
专访AMD:AMD 正式加入龙蜥社区首秀:开源协作与 AI 创新的交汇点
ai·开源·操作系统·龙蜥社区·龙蜥操作系统大会
zhangxueyi6 天前
word文档转换为PPT文档最佳方案
操作系统·文档转换
洛寒瑜6 天前
【读书笔记-《30天自制操作系统》-18】Day19
c语言·开发语言·汇编·笔记·学习·操作系统·文件读取