抽象的计算机模型——图灵机之一发入魂

图灵机由英国数学家和计算机科学家阿兰·图灵(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(中央处理器)内部通常由以下几个主要组件构成:

  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的性能和效率至关重要。

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~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21531.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是vlan为什么要划分vlan

首先了解交换机的数据的转发方式。,有两种情况会使用广播方式进行数据分发,第一种就是目的地址是全F的(FF-FF-FF-FF-FF-FF),第二种是位置的单播帧,这样的情况下会带来什么杨的问题呢。 场景引入&#xff1…

GitLab CICD Day 08 - 环境变量

1.局部/全局环境变量 stages:- testing # stage编排- build- deployvariables:global_var: "全部变量" #全部变量build_image:stage: buildvariables: #局部环境变量my_name: "局部环境变量" tags:- shell script:- …

JavaScript--事件处理高级应用

1、什么是事件 指在特定条件下触发的操作或响应。事件可以是用户与网页交互时引起的动作,例如点击按钮、提交表单、鼠标移动等,也可以是由浏览器或其他代码触发的动作,如页面加载完成、时间到达等。 我们可以通过添加事件处理程序来响应各种…

tomcat学习随笔

Tomcat结构与原理 一、组成ServerServiceConnectorProtocolHandlerEndpointProcessor Adaptor ContainerEngineHostContextWrapper 运行热部署jsp类war tomcat根路径目录结构示意图 一、组成 tomcat结构debug示意图 Server tomcat的实例,支持多个Service Service …

Python(八)字符编码

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【youcans动手学模型】目标检测之 OverFeat 模型

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】目标检测之 OverFeat 模型 1. OverFeat 卷积神经网络模型1.1 论文摘要1.2 技术背景1.3 基本方法模型设计多尺度分类滑动窗口(Sliding window)定位&#…

RabbitMQ高阶使用

1. 问题 2. 延时任务 2.1 什么是延时任务 在当前时间往后延迟多少时间执行的任务 2.1.1 和定时任务区别 定时任务有明确的触发时间,延时任务没有定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期定时任务一般执行的…

二、RocketMQ消息存储源码分析

RocketMQ源码深入剖析 6 Broker源码分析 Broker模块涉及到的内容非常多,本课程重点讲解以下技术点: 1、Broker启动流程分析 2、消息存储设计 3、消息写入流程 4、亮点分析:NRS与NRC的功能号设计 5、亮点分析:同步双写数倍性…

洛谷P1059 [NOIP2006 普及组] 明明的随机数

(一)Question 1. 问题描述 2. Input 输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。 3. Output 输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。第 2 行为 M 个用空格隔开的正…

“简单易懂的排序:深入了解直接选择排序“

文章目录 🔍 选择排序的原理与过程📈 选择排序的优缺点👉 代码实现 🔍 选择排序的原理与过程 本文我们直接说一个优化过的直接选择排序。其思路大同小异. 选择排序的思路很简单 每次从待排序的数据中选择一个最小和最大的元素&a…

fatal: unable to access ‘http://xxxx‘: Empty reply from server

当你遇到 “fatal: unable to access ‘http://xxxx’: Empty reply from server” 的错误信息时,通常表示 Git 客户端无法连接到指定的服务器或仓库。 以下是一些可能导致该错误的原因以及一些排除故障的步骤: 错误的 URL:确保你提供的 URL…

pdf转图片操作方法是什么?分享两个简单的方法!

PDF转图片是一个常见的需求,无论是为了方便编辑、共享,还是为了其他用途,我们需要简单而有效的方法来实现这个目标。本文将介绍两种简单的PDF转图片方法:记灵在线工具和截图方法。 记灵在线工具是一个强大而易于使用的在线工具&a…