每天研究技术,技术到底是啥——从图灵机看技术是什么

文章介绍了图灵机的概念及其在计算机科学中的重要性,它是理解计算过程和计算机系统设计的基础。通过人肉运行图灵机的例子,帮助读者理解其工作原理。接着讨论了冯·诺依曼架构如何将图灵机的抽象概念转化为实际的计算机设计,并提到了软件层面的抽象,如编程语言和API,如何构建在更低层次的规则之上。文章强调了抽象在技术学习和创新中的关键作用,并指出这种结构在不同层次的重复是自然界的一种普遍现象。
摘要由CSDN通过智能技术生成

图灵机由英国数学家和计算机科学家阿兰·图灵(Alan Turing)于1936年提出。它是一种抽象的计算设备,是一种理论上的计算模型,用于描述和模拟计算的过程,至于为什么要做计算可参考我另外一篇文章。可以说,图灵机抽象模型一经提出,从此计算机的设计就有了核心灵魂。

因此,搞懂图灵机,才能搞懂由此延申出来各种计算机系统、子系统。并且,或许本篇章的扩展思考,能加深你对什么是技术的理解,以及学习技术的时候究竟是在学习什么有自己的理解。

图灵机简单介绍

在这里插入图片描述

图灵机由以下几个部分组成:

  1. 无限长的纸带,被划分为一个个单元格,每个单元格上可以写入符号。
  2. 读写头,可以在纸带上移动,并读取和写入单元格上的符号。
  3. 控制单元,根据读写头的位置和读取到的符号来决定下一步的操作。

图灵机的工作原理如下:

  1. 初始时,纸带上包含输入数据,并且读写头指向初始位置。
  2. 控制单元根据读写头所在位置和读取到的符号,根据预先定义的规则,决定下一步的操作,例如写入新的符号、移动读写头、改变状态等。
  3. 根据控制单元的指令,图灵机执行相应的操作,并进入下一个状态。
  4. 这个过程不断重复,直到图灵机进入终止状态或无法继续执行。

人肉跑图灵机

上面读不懂没关系,我们来人肉跑一下抽象模型,再结合我给的图抽象思考下就懂了。

下面是我经过烧脑推理画的抽象图,再次对图灵机做一次抽象:
1、纸袋——抽象人类编写的计算规则输入媒介
2、读写头和控制单元,抽象控制规则
3、Program抽象的人基于2的控制规则编制程序

在这里插入图片描述
我写了一个程序到纸袋上,纸袋上它们的顺序是010,看下图执行过程的read列,我的Program给定了从纸袋读取0的时候,下一个动作是写纸袋1,然后向右边移动,跳转的下一个state还是0,这个时候纸袋值从0变1。然后纸条划走,来到第二个位置,program中state 0的1,对应动作写纸袋0,然后右移,下一个状态还是0。如此往复,最后还能停机。剩下的读者自己画个表,像我这样。分析下,动动脑子就懂了。

在这里插入图片描述

从虚到实

图灵机,搁我的理解(当然不权威),就是一个确定的规则集合、按规则编制的状态控制、数据集合,外加让前面两抽象动起来的机制。

图灵在1936年提出,旨在解决“可计算性”问题,即什么样的问题可以通过计算来解决。图灵机具有无限长的纸带、读写头和控制单元等组件,通过读写头的移动和符号的读写来模拟计算过程。这是一个

1945年冯·诺依曼(John von Neumann)根据当时已经具备雏形的计算机器,抽象的提出冯·诺依曼架构。它包括了计算机的五个基本组成部分:中央处理器(CPU)、存储器(Memory)、输入设备(Input)、输出设备(Output)和控制单元(Control Unit)。冯·诺依曼架构中的程序和数据都存储在存储器中,通过控制单元的指令来执行计算操作。把图灵机从抽象中解放了出来,变得更加具体。
在这里插入图片描述
当然还有一种大同小异的哈佛架构~这里就不提了。

图灵机和冯·诺依曼架构的泛化

抽象的好处,就是其泛化能力,这个是人类独有的,你独有的智慧。

我要说的其实一个美学问题,即相同的结构,在不同的观察层次,重复出现的组织之美。如果你了解过分型理论,或者听过道生一,一生二,二生三,三生万物,你一定知道我在说什么。

下面我们列举两个例子,来描述这种类似结构在不同层次重复

硬件层面

CPU内部

冯若依曼架构在CPU的体现。

CPU(中央处理器)内部通常由以下几个主要组件构成:

  1. 控制单元(Control Unit):控制单元是CPU的核心部分,负责协调和管理CPU内部的操作。它解析和执行指令,控制数据流和控制信号的传输,并确保各个组件按照正确的顺序执行操作。

  2. 算术逻辑单元(Arithmetic Logic Unit, ALU):ALU执行算术和逻辑运算,例如加法、减法、乘法、逻辑与、逻辑或等。它接收来自寄存器的数据,并根据指令执行相应的运算操作。

  3. 寄存器(Registers):寄存器是CPU内部的临时存储器,用于存储指令、数据和中间结果。不同类型的寄存器用于不同的目的,例如程序计数器(Program Counter, PC)用于存储下一条要执行的指令的地址,累加器(Accumulator)用于存储运算结果等。

  4. 存储器(Memory):存储器用于存储程序和数据。它包括主存储器(RAM)和辅助存储器(硬盘、固态硬盘等)。CPU通过访问存储器来读取指令和数据,并将结果写回存储器。

  5. 数据通路(Data Path):数据通路是连接CPU内部各个组件的路径,用于传输数据和控制信号。它包括数据总线(Data Bus)、地址总线(Address Bus)和控制总线(Control Bus),用于在各个组件之间传递数据和控制信号。

  6. 缓存(Cache):缓存是一种高速临时存储器,用于存储最常访问的指令和数据。它位于CPU内部,能够提供更快的数据访问速度,以减少对主存储器的访问次数。

CPU内部由制造商写死了确定的规则,这些规则提供给使用者的对接方式就是CPU的指令集,指令对应了电路中的一个电路组合和行为。

开发在此基础上code。写操作系统、写驱动、写应用。

内存内部

现代内存(主存储器)内部通常由以下几个主要组件构成:

  1. 存储单元(Memory Cells):存储单元是内存的基本组成单位,用于存储数据。每个存储单元通常由一个或多个存储元件组成,例如电容器、翻转触发器等。每个存储单元能够存储一个固定大小的数据单元,例如一个字节。

  2. 地址线(Address Lines):地址线用于指定要访问的存储单元的地址。它们决定了内存中的特定存储单元的位置。地址线的位数决定了内存的寻址能力,即能够寻址的存储单元的数量。

  3. 数据线(Data Lines):数据线用于传输数据到内存或从内存中读取数据。它们是用于传输数据的物理连接,决定了内存与其他组件之间的数据传输速度和带宽。

  4. 控制线(Control Lines):控制线用于传输控制信号,例如读写信号、使能信号、时钟信号等。它们控制内存的读写操作和时序。

  5. 存储器管理电路(Memory Management Circuitry):存储器管理电路负责内存的管理和控制。它包括地址解码器(Address Decoder)用于将地址信号解码为特定存储单元的选通信号,还包括写入/读取电路(Write/Read Circuitry)用于处理写入和读取操作。

  6. 控制逻辑(Control Logic):控制逻辑协调和管理内存的操作。它接收来自CPU或其他组件的控制信号,并根据信号的类型和时序来控制内存的读写操作。

我们可以看到,就算内存内部,也由控制单元、内外部存储单元、抽象总线。

存储的磁盘

硬盘(Solid State Drive, SSD)内部通常由以下几个主要组件构成:

  1. 存储芯片(Memory Chips):固态硬盘使用闪存芯片作为存储介质,存储数据。闪存芯片通常采用非易失性存储技术,例如NAND闪存。每个存储芯片包含多个存储单元,每个存储单元可以存储多个比特的数据。

  2. 控制器(Controller):控制器是固态硬盘的核心部分,负责管理和控制固态硬盘的操作。它接收来自计算机系统的读写请求,并将数据传输到存储芯片或从存储芯片中读取数据。控制器还负责处理错误检测和纠正、垃圾回收、数据压缩和加密等功能。

  3. 高速缓存(Cache):固态硬盘通常配备一定容量的高速缓存,用于临时存储读取和写入的数据。高速缓存能够提供更快的数据访问速度,提高固态硬盘的性能。

  4. 接口(Interface):固态硬盘与计算机系统之间通过接口进行连接和通信。常见的接口包括SATA(Serial ATA)、PCIe(Peripheral Component Interconnect Express)等。接口的类型和版本会影响固态硬盘的数据传输速度和兼容性。

  5. 控制逻辑(Control Logic):控制逻辑协调和管理固态硬盘的操作。它接收来自CPU或其他组件的控制信号,并根据信号的类型和时序来控制固态硬盘的读写操作。

  6. 电源管理电路(Power Management Circuitry):电源管理电路负责管理固态硬盘的电源供应。它可以控制固态硬盘的功耗和电源模式,以提高能效和延长电池寿命。

我们可以看到,就算内存内部,也由控制单元、内外部存储单元、抽象总线。

列举了三个计算机内部基本的单元,它们内部其实就是一个小型的冯诺依曼架构。

软件层面

软件层面也能泛化。

就问你,你是不是自嘲CRUD Boy/Girl,你面向的是什么在编程,是不是在用一堆确定的api在那调用api?你是不是在利用api的规则在构建一堆复杂的业务规则?

只不过,有的coder负责设计和定义计算机的指令集,依赖于底层的电路设计的固定规则。

有的coder负责编写汇编程序,依赖硬件提供的指令集。

有的coder负责设计和开发操作系统,依赖C语言、汇编。

有的coder负责使用开发语言开发应用系统,依赖语言本身及操作系统提供的能力。

coder 们有自己所在的层级,有自己层级的生态,而此生态依赖于它下一层级提供的的规则集合,coder们利用规则创建他所面向业务的规则集合,再提供给别人使用的规则集合,最终落到了不会编码的普通手上。这活生生的,就像地球的生物群落一样。

搞清楚自己所在的层级,你知道你学的技术是什么了吗?规则集合,然后用起来,搭建你的目标规则集合,放出去给别人使用。

that’s it

大可大,小可小,无限套娃,深化泛化,抽象万岁~

在这里插入图片描述

尾声

如果跳出计算机,来到更加旷阔的视野中,你如果按这种思维方式去看,你会看到什么?

校园网内部,公司内网,计算机组成的集群,甚至超级云计算内部,何尝又不是这种架构为主的变种?明显的区别,就是单机内部的总线变成了网线~~

少年,跳出三界,open your eyes~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windanchaos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值