当前位置: 首页 > ds >正文

计算机原理(一)

计算机原理系列

欢迎大家关注「海拉鲁知识大陆」 多交流不迷路

计算机原理(一)

背景
不知道有没有大家思考过32位和64位的问题,如下:

  • 软件上,那么我们的数据库有32位和64位版本;
  • 操作系统,那么在阿里云上选择Centos和Debian版本的时候,也会有32/64 版本;
  • 是CPU,那么有32位CPU,也有64位CPU。

这些是什么意思呢?64位为什么有优势?

1.图灵机的构造

想要学懂程序执行的原理,就要从图灵机说起了(科班的童靴可以略过哈),它在计算机科学方面有两个巨大的贡献:
1、它清楚地定义了计算机能力的边界,也就是可计算理论;
2、它定义了计算机由哪些部分组成,程序又是如何执行的。
图片

我们先来了解图灵机的内部构造:

  • 图灵机拥有一条无限长的纸带,纸带上是一个格子挨着一个格子,格子中可以写字符,你可以把纸带看作内存,而这些字符可以看作是内存中的数据或者程序。
  • 图灵机有一个读写头,读写头可以读取任意格子上的字符,也可以改写任意格子的字符。
  • 读写头上面的盒子里是一些精密的零件,包括图灵机的存储、控制单元和运算单元。

2.图灵机如何执行程序

比如我们要计算11+15的值,具体的运算步骤如下:

a.首先,我们将“11、15、+” 分别写入纸带上的3个格子(现在纸带上的字符串是11、15、+),然后将读写头先停在11对应的格子上。
图片
b.接下来,图灵机通过读写头读入11到它的存储设备中(这个存储设备也叫作图灵机的状态)。图灵机没有说读写头为什么可以识别纸带上的字符,而是假定读写头可以做到这点。
图片
c.然后读写头向右移动一个格,用同样的方法将15读入图灵机的状态中。现在图灵机的状态中有两个连续的数字,11和15。
图片
d.接下来重复上面的过程,会读到一个+号。下面我详细说一下这个运算流程:

  • 读写头读到一个+号 ;
  • 然后将+号传输给控制单元 ;
  • 控制单元发现是一个+号,所以没有存入状态中。因为+号是一个我们预设的控制符(指令),它的作用是加和目前状态。因此,控制单元识别出是控制符,并通知运算单元工作;
  • 运算单元从状态中读入11、15并进行计算,将结果26存储到状态;
  • 运算单元将结果回传给控制单元;
  • 控制单元将结果传输给读写头。
    图片
    e.读写头向右移动,将结果26写入纸带。
    图片这样,我们就通过图灵机计算出了11+15的值。图灵机构造的这一台机器,主要功能就是读写纸带然后计算;纸带中有数据、也有控制字符(也就是指令),这个设计和我们今天的计算机是一毛一样的。
    图灵通过数学证明了,一个问题如果可以拆解成图灵机的可执行步骤,那问题就是可计算的。另一方面,图灵机定义了计算机的组成以及工作原理,但没有给出具体的实现。

3.冯诺依曼模型

图片
具体的实现是冯诺依曼和其他几位科学家提出的。遵循了图灵机的设计,并提出用电子元件构造计算机,约定了用二进制进行计算和存储,并且将计算机结构分成以下5个部分:

  • 输入设备;
  • 输出设备;
  • 内存;
  • 中央处理器;
  • 总线。

这个模型也被称为冯诺依曼模型,下面我们具体聊一下。

内存
在冯诺依曼模型中,程序和数据被存储在一个被称作内存的线性排列存储区域。存储的数据单位是1个二进制位,英文是bit。最小的存储单位叫作字节,也就是8位,英文是byte,每一个字节都对应一个内存地址。内存地址由0开始编号,比如第1个地址是0,第2个地址是1,然后自增排列,最后一个地址是内存中的字节数减1。
图片

CPU
冯诺依曼模型中CPU负责控制和计算。为了方便计算较大的数值,CPU 每次可以计算多个字节的数据。
图片
那这里的32和64,称作CPU的位宽。

因为一个byte最大的表示范围就是0~255。比如要计算20000*50,就超出了byte最大的表示范围了。因此,CPU需要支持多个byte一起计算。当然,CPU位数越大,可以计算的数值就越大。

控制单元和逻辑运算单元
图片

寄存器
CPU要进行计算,比如最简单的两个数字求和时,因为CPU离内存太远,所以需要一种离自己近的存储来存储将要被计算的数字。这种存储就是寄存器。寄存器就在CPU里,控制单元和逻辑运算单元非常近,因此速度很快。
寄存器中有一部分是可供用户编程用的,比如用来存加和指令的两个参数,是通用寄存器
还有一部分寄存器有特殊的用途,叫作特殊寄存器。比如程序指针,就是一个特殊寄存器。
下一条要执行的指令,会从内存读入到另一个特殊的寄存器中,这个寄存器叫作指令寄存器

总线
CPU和内存以及其他设备之间,也需要通信,因此我们用一种特殊的设备进行控制,就是总线。总线分成3种:
图片

  • 一种是地址总线,专门用来指定CPU将要操作的内存地址。
  • 还有一种是数据总线,用来读写内存中的数据。当CPU需要读写内存的时候,先要通过地址总线来指定内存地址,再通过数据总线来传输数据。
  • 最后一种总线叫作控制总线,用来发送和接收关键信号,比如中断信号,还有设备复位、就绪等信号,都是通过控制总线传输。同样的,CPU需要对这些信号进行响应,这也需要控制总线。

输入、输出设备
输入设备向计算机输入数据,计算机经过计算,将结果通过输出设备向外界传达。如果输入设备、输出设备想要和CPU进行交互,比如说用户鼠标/按键需要CPU响应,这时候就需要用到控制总线。

这里再说明几个问题:
a. 线路位宽问题

图片

如果只有一条线路,每次只能传递1个信号,因为你必须在0,1中选一个。比如你构造高高低低这样的信号,其实就是1100,相当于你传了1个数字10过去。这种传递是相当慢的,因为你需要传递4次。

这种1个bit1个bit发送的方式,我们叫作串行。如果希望每次多传一些数据,就需要增加线路,也就是需要并行

  • 如果只有1条地址总线,那每次只能表示0-1两种情况,所以只能操作2个内存地址;
  • 如果有10条地址总线,一次就可以表示2*10种情况,也就是可以操作1024个内存地址;
  • 如果你希望操作4G的内存,那么就需要32条线,因为2*32是4G。

b. 64位和32位的计算
CPU的位宽会对计算造成什么影响?
比如场景:要用32位宽的CPU,求和两个64位的数字。
图片
因此必须把两个64位数字拆成2个32位数字来计算,这样就需要一个算法,先加和两个低位的32位数字,算出进位,然后加和两个高位的32位数字,最后再加上进位。
而64位的CPU就可以一次读入64位的数字,同时64位的CPU内部的逻辑计算单元,也支持64位的数字进行计算。但是不要仅仅因为位宽的区别,就认为64位CPU性能比32位高很多。大部分应用不需要计算超过32位的数字呀。
还有一点,32位宽的CPU没办法控制超过32位的地址总线、数据总线工作。比如说你有一条40位的地址总线(其实就是40条线),32位的CPU没有办法一次给40个信号,因为它最多只有32位的寄存器。因此32位宽的CPU最多操作2*32个内存地址,也就是4G内存地址。

不要忽视这些细节,性能其实和这些息息相关,现在可以回答64位和32位比较有哪些优势了吗?

http://www.xdnf.cn/news/20165.html

相关文章:

  • 4.5.8版本来了~山海鲸最新内容抢鲜看
  • 2025 全国大学生数学建模竞赛题目-B 题 碳化硅外延层厚度的确定 问题二完整思路
  • Coze插件AI复刻之:网页截图
  • 数据结构准备:包装类+泛型
  • 大语言模型推理的幕后英雄:深入解析Prompt Processing工作机制
  • 时序数据库IoTDB的六大实用场景盘点
  • 基于机器学习的缓存准入策略研究
  • 服务器异常磁盘写排查手册 · 已删除文件句柄篇
  • 安装与配置Jenkins(小白的”升级打怪“成长之路)
  • AI-Agent智能体提示词工程使用分析
  • leetcode212.单词搜索II
  • SQL优化与准确性提升:基于RAG框架的智能SQL生成技术解析
  • webrtc之高通滤波——HighPassFilter源码及原理分析
  • 正则表达式,字符串的搜索与替换
  • 【面试题】介绍一下BERT和GPT的训练方式区别?
  • Ansible 项目管理核心要点总结
  • 进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业
  • Android入门到实战(八):从发现页到详情页——跳转、传值与RecyclerView多类型布局
  • 深度学习——ResNet 卷积神经网络
  • Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)
  • Docker多阶段构建Maven项目
  • K8s资源管理:高效管控CPU与内存
  • React学习之路永无止境:下一步,去向何方?
  • Jmeter基础教程详解
  • STM32H750 RTC介绍及应用
  • 国产GEO工具哪家强?巨推集团、SEO研究协会网、业界科技三强对比
  • 用C++实现日期类
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南
  • Vue基础知识-脚手架开发-子传父(props回调函数实现和自定义事件实现)