图灵机的构造

想要学懂程序执行的原理,就要从图灵机说起了。它在计算机科学方面有两个巨大的贡献:

第一,它清楚地定义了计算机能力的边界,也就是可计算理论;

第二,它定义了计算机由哪些部分组成,程序又是如何执行的。

冯诺依曼结构

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

我们通常说的内存都是随机存取器,也就是读取任何一个地址数据的速度是一样的,写入任何一个地址数据的速度也是一样的。

CPU
冯诺依曼模型中 CPU 负责控制和计算。为了方便计算较大的数值,CPU 每次可以计算多个字节的数据。

如果 CPU 每次可以计算 4 个 byte,那么我们称作 32 位 CPU;

如果 CPU 每次可以计算 8 个 byte,那么我们称作 64 位 CPU。

这里的 32 和 64,称作 CPU 的位宽。

为什么 CPU 要这样设计呢? 因为一个 byte 最大的表示范围就是 0~255。比如要计算 20000*50,就超出了byte 最大的表示范围了。因此,CPU 需要支持多个 byte 一起计算。当然,CPU 位数越大,可以计算的数值就越大。但是在现实生活中不一定需要计算这么大的数值。比如说 32 位 CPU 能计算的最大整数是 4294967295,这已经非常大了。

控制单元和逻辑运算单元

CPU 中有一个控制单元专门负责控制 CPU 工作;还有逻辑运算单元专门负责计算。具体的工作原理我们在指令部分给大家分析。

寄存器

CPU 要进行计算,比如最简单的加和两个数字时,因为 CPU 离内存太远,所以需要一种离自己近的存储来存储将要被计算的数字。这种存储就是寄存器。寄存器就在 CPU 里,控制单元和逻辑运算单元非常近,因此速度很快。

寄存器中有一部分是可供用户编程用的,比如用来存加和指令的两个参数,是通用寄存器。

还有一部分寄存器有特殊的用途,叫作特殊寄存器。比如程序指针,就是一个特殊寄存器。它存储了 CPU 要执行的下一条指令所在的内存地址。注意,程序指针不是存储了下一条要执行的指令,此时指令还在内存中,程序指针只是存储了下一条指令的地址。

下一条要执行的指令,会从内存读入到另一个特殊的寄存器中,这个寄存器叫作指令寄存器。指令被执行完成之前,指令都存储在这里。

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

一种是地址总线,专门用来指定 CPU 将要操作的内存地址。

还有一种是数据总线,用来读写内存中的数据。

当 CPU 需要读写内存的时候,先要通过地址总线来指定内存地址,再通过数据总线来传输数据。

最后一种总线叫作控制总线,用来发送和接收关键信号,比如后面我们会学到的中断信号,还有设备复位、就绪等信号,都是通过控制总线传输。同样的,CPU 需要对这些信号进行响应,这也需要控制总线。

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

到这里,相信你已经对冯诺依曼模型的构造有了一定的了解。这里我再强调几个问题:

1. 线路位宽问题
第一个问题是,你可能会好奇数据如何通过线路传递。其实是通过操作电压,低电压是 0,高电压是 1。

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

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

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

到这里,你可能会问,那我串行发送行不行?当然也不是不行,只是速度会很慢,因为每多增加一条线路速度就会翻倍。

2. 64 位和 32 位的计算
第二个问题是,CPU 的位宽会对计算造成什么影响?

我们来看一个具体场景:要用 32 位宽的 CPU,加和两个 64 位的数字。

因为 32 位宽的 CPU 中没有 64 位的寄存器,所以就算地址总线、数据总线都超过 32 位,读入的数据也只能是 32 位。

因此必须把两个 64 位数字拆成 4 个 32 位数字来计算,这样就需要一个算法,比如用像小时候做加法竖式一样,先加和两个低位的 32 位数字,算出进位,然后加和两个高位的 32 位数字,最后再加上进位。

而 64 位的 CPU 就可以一次读入 64 位的数字,同时 64 位的 CPU 内部的逻辑计算单元,也支持 64 位的数字进行计算。但是你千万不要仅仅因为位宽的区别,就认为 64 位 CPU 性能比 32 位高很多。

要知道大部分应用不需要计算超过 32 位的数字,比如你做一个电商网站,用户的金额通常是 10 万以下的,而 32 位有符号整数,最大可以到 20 亿。所以这样的计算在 32 位还是 64 位中没有什么区别。

还有一点要注意,32 位宽的 CPU 没办法控制超过 32 位的地址总线、数据总线工作。比如说你有一条 40 位的地址总线(其实就是 40 条线),32 位的 CPU 没有办法一次给 40 个信号,因为它最多只有 32 位的寄存器。因此 32 位宽的 CPU 最多操作 232 个内存地址,也就是 4G 内存地址。

计算机组成原理基础: 图灵机与冯诺依曼结构相关推荐

  1. 图灵机与冯诺依曼计算机,计算机原理之图灵机与冯诺依曼机.doc

    <计算机原理之图灵机与冯诺依曼机.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<计算机原理之图灵机与冯诺依曼机.doc>文档请在天天文库搜索. ...

  2. 计算机组成原理基础知识整理

    最近开了计算机组成原理这门课,由于我这个人上课不听讲的缘故拉下了不少课程,等想学的时候已经听不懂了,赶紧补一补,在此写下这篇文章作为笔记,与大家一起分享 1.冯诺依曼体系结构:计算机主要是由五大部分组 ...

  3. 计算机组成原理基础知识

    计算机组成原理 第一章 计算机系统概论 冯诺依曼型计算机特点 1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成 2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示. 3. ...

  4. 计算机组成原理基础知识试题及答案,[电脑基础知识]计算机组成原理试题库.doc...

    [电脑基础知识]计算机组成原理试题库.doc 计算机组成原理练习题一. 单项选择题CPU响应中断的时间是. A中断源提出请求: B取指周期结束: C执行周期结束: D间址周期结束. 2下列说法中是正确 ...

  5. 计算机组成原理基础(转载)

    计算机组成原理 计算机概述 数据 总线 CPU 存储器 输入/输出设备 计算机的时标系统 计算机概述 计算机的基本组成: 存储器: 实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器: 负 ...

  6. 计算机组成原理:储存系统和结构

    ❤️强烈推荐人工智能学习网站❤️ 储存系统的组成: 1.按作用分类 1>高速缓冲存储器:位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能高速的访问它们.其速度可以和CPU速度相 ...

  7. 有关计算机组成原理知识的论文,关于计算机组成原理的论文_计算机组成原理_图灵机的组成...

    懂计算机组成原理的朋友进,帮帮我啊! 2演示<闪速存储器及技术>.首先是多媒体的组成,图声字,二是计算机的组成,主板,CPU,内存.三电脑读文件的过程 CPU将多媒体文件有硬盘调入内存,再 ...

  8. 计算机组成原理 基础资料

    前言 这是当初整理的一部分笔记,还是放我的博客上吧,有空可以继续维护下去. 简述分组交换的要点 报文分组,加上首部 经路由器存储转发 在目的地合并 计算机网络中的主干网和本地接入网 主干网:提供远程覆 ...

  9. 计算机组成原理基础知识总结

    计算机概述 计算机的基本组成: 存储器: 实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器: 负责数据的算术运算和逻辑运算即数据的加工处理 控制器: 负责对程序规定的控制信息进行分析,控 ...

最新文章

  1. Android-环境问题
  2. Apache与Nginx的优缺点比较
  3. 数据挖掘系列(5)使用mahout做海量数据关联规则挖掘
  4. POJ 2420 A Star not a Tree?【爬山法】
  5. Java线程池示例:并行计算200000以内的质数个数
  6. java sorted排序_【算法】排序算法之计数排序
  7. Web 开发时需要注意到的一些性能问题
  8. SAP云平台上的Mendix服务 - 如何注册帐号
  9. Windows下用tree命令生成目录树
  10. 收获,不止SQL优化——抓住SQL的本质--第五章
  11. 500并发相当于多少人_linux开发技术之线程池accept处理高并发connect(含源码)
  12. (day 13 - 双指针or递归)剑指 Offer 24. 反转链表
  13. HTML 空格转义符的用法
  14. 手动构建Docker镜像
  15. 如何才能找到好用的ip软件呢,或者下载ip软件
  16. base64的原理及优缺点
  17. Java全系列教程:『Java学习指南』
  18. 望一望漫天星光(随笔)
  19. Debian 11 修改 DNS 服务器
  20. FastDeRain解读

热门文章

  1. 在使用eclipse的时候,一不小心关掉了下面的控制台,要这么做就能恢复
  2. php-fpm状态页监控,使用监控宝监控php-fpm状态
  3. 使用监控宝监控网站和服务器的经验总结
  4. 计蒜客-青出于蓝胜于蓝 dfs+树状数组
  5. 【git push报错】:See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details
  6. [arxiv 2021]Graph-Based Machine Learning Improves Just-in-Time Defect Prediction
  7. 刷了大半年Java面试题:终于拿到众多大厂offer,分享还愿
  8. 支付宝支付接口之异步回调
  9. pytorch中gather用法
  10. 10_结构体与共同体