本站文本内容除另有声明外,转载时均必须注明出处。(详情…本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

教程/红石计算机

来自Minecraft Wiki
跳转至: 导航搜索


此条目的部分内容由于太久没更新而已过期。
你可以帮助我们来更新此条目。

本文在探讨Minecraft中计算系统的设计和实现。

人类通过编程可以使电脑实现方便的思想交流。

所有计算机系统都有访问内存和至少一个处理单元。在操作期间,处理单元执行命令存储在计算机的内存中。

大多数电脑都是使用红石火把、中继器、粘性活塞或红石灯。它们通过一系列的开关:按钮、拉杆、压力板,等。

实现[编辑 | 编辑源代码]

计算机在许多方面都有应用,它可用作建造一个智能的房子或是用它运作整个城市。 它也可以被用在小游戏方面,比如它可以计算玩家的分数。计算机的应用近乎无限。但请注意,红石计算机运行真的很慢,甚至完成一次最快的计算也需要花上几秒。这也意味着红石计算器没有什么实际用途。

红石计算机的规划[编辑 | 编辑源代码]

当设计一个计算机(红石或者别的方式)关键的设计决策,将影响组织,规模和潜在的性能计算机应具体施工前的特定组件。

一些事情需要考虑:

  • 执行模型(内存的计算机组织与程序存储和执行)
  • 字大小(信息块的大小,你的电脑会操作)
  • 命令集(这组操作你的电脑将执行)
  • 内存大小(数量的数据可以存储在内存中)


有一个选择决定将提供强有力的指导在各种组件的设计你的电脑。

执行模型[编辑 | 编辑源代码]

命令存储块的技术叫做程序在内存是允许计算机执行各种不同的任务。使用的设备由计算机来存储和检索这些程序是计算机的执行模型。世界上最成功的两个执行模型,哈佛和冯·诺依曼,今天将近100%的可用的计算机上运行。

哈佛结构[编辑 | 编辑源代码]

The Harvard architecture 检索器分离的命令组成一个活跃的程序从数据访问器的程序在执行期间访问。   编写的程序对电脑使用哈佛架构可能执行的任务达到快100%访问主内存总线。但是要注意,对于那些哈佛架构某些记忆电路会更大。

冯·诺依曼结构[编辑 | 编辑源代码]

The von Neumann architecture使用一个两步的过程来执行命令。首先,加载内存包含下一个命令,然后新命令加载是允许访问相同的内存,因为它执行;使用一个内存的程序和数据促进元编程技术像编译器和自我修改代码。    冯诺依曼体系结构是第一个提出模型的计算和几乎所有真实的计算机是冯·诺依曼在《自然》杂志上。

位宽与指令位数[编辑 | 编辑源代码]

位数大小是计算机物理尺寸的主要因素。 在Minecraft中,从1位一直到32位的机器已经被成功构建出来。 常见的字大小的组合:

数据 命令
4 8
8 8
8 16
16 16

数据字符[编辑 | 编辑源代码]

计算机在任何特定时间可以操作的信息量代表了计算机的数据字大小。

在数字二进制中,计算机的数据字大小(以位为单位)等于计算机主总线中通道的宽度或数目。

数据字通常表示整数,或编码为二进制数字模式的整数。

最大大小的数量可表示的二进制整数编码是2 ^数据字宽度在位- 1。

一些常见的整数数据大小是:

最大可表示的数量 所需的字节数
1 ( 2 ^ 1 - 1 ) 1
7 ( 2 ^ 3 - 1 ) 3
15 ( 2 ^ 4 - 1 ) 4
255 ( 2 ^ 8 - 1 ) 8
65535 ( 2 ^ 16 - 1 ) 16
4294967295 ( 2 ^ 32 - 1 ) 32

数据字大小还决定了可以由计算机的ALU(算术和逻辑单元)处理的数字的最大大小。

命令字[编辑 | 编辑源代码]

计算机完成一条命令所需的数据量代表计算机命令字大小。

计算机的命令字大小通常是其数据字大小的背书,这有助于在程序执行期间检索命令时最小化存储器未对准。

计算机的设计[编辑 | 编辑源代码]

命令集架构[编辑 | 编辑源代码]

状态[编辑 | 编辑源代码]

内存是一系列的位。在Minecraft中,尽管曾经成功创造过32位和64位[1]计算机,但是通常情况下内存占8位或16位。每一位都是两种可能的状态中的一种:开或闭。而内存就是一系列的开和闭,用于完成特定的任务。

信号[编辑 | 编辑源代码]

现实世界计算机使用二进制,一系列的1和0。“1”表示“开”和“0”表示“关”。在"Minecraft,最好的体现是红石:有信号意味着“1”,没有信号表示“0”。然而,根据距离红石从内存存储,它是“0”可以是任何信号强度从0到14。你也可以设计,使“1”信号强度从1到15。

[编辑 | 编辑源代码]

我们常规的十进制是一种以10为基数的数字系统。在电脑中使用的数制——二进制,则是以2为基数。为了比较两者,我们看一下两位数。在十进制中,左边的那一位是十位。在二进制中,则是“二位”。比如在十进制中,“10”表示“十”。而在二进制中,“10”表示“二”。有两种常用的十进制转二进制的方法:

最高位优先:这种方法需要一点直觉。我们以42为例。首先我们找(小于等于42的)最大的2的幂(“2的幂”就是如32 [2^5] 或65536 [2^16])。在这个例子中,是32。然后我们用例子中的数字来减它,42-32=10。那么最左边的一位就是“1”。随后我们继续找下一个2的幂,看它是否小于等于当前的数字。对于这个例子来说,下一个是16,16并不比10小,所以接下来这一位是“0”。一直找下去直到数字为0为止。无论二的幂是小于还是等于当前的数字,都要减掉它,并且记下一位为“1”。否则下一位就是“0”。就我们的例子来说接下来就是 8<10-->10-8=2-->"1" 4>2-->"0" 2=2-->2-2=0-->"1" 1>0-->"0" 因此最终42的二进制表示就是“101010”。不错。

最后是最低位:这个方法不需要记忆许多2的指数。相反,它重复将数字除以2,使用商作为下一个被除数,余数作为二进制位。 但请记住,此方法从右到左写入二进制数,而不是像前一种方法一样从左到右写入。 让我们重用我们的例子,42: 42/2=21 r 0 (最右边的数字是0) 21/2=10 r 1 (向左边一位的数是1) 10/2=5 r 0 (向左边一位的数是0) 5/2=2 r 1 (向左边一位的数是1) 2/2=1 r 0 (向左边一位的数是0) 1/2=0 r 1 (向左边一位的数是1)

商数为0,所以我们停止。 这给了我们二进制数“101010”。与之前的方法相同。

过渡[编辑 | 编辑源代码]

[编辑 | 编辑源代码]
命令[编辑 | 编辑源代码]

功能本质上是由计算机命令构成的,命令的例子包括:

  • 加、减、乘、除
  • 从RAM/ROM/第三存储器的读/写
  • 读取和写入数据到内存
  • 分支的其他部分代码
  • 比较寄存器
  • 计算一个逻辑函数 (NAND,NOR,NOT etc.)

命令可以被编程到内存,从ROM加载或直接通过一个拉杆或按钮激活。每条命令都有它自己的特定的二进制串分配(比如0000=从寄存器加载数据,0001=A加B,等等),并且可能需要其自己的二进制到十进制或二进制到BCD到十进制编码器和总线到ALU或寄存器。

归类[编辑 | 编辑源代码]

抽象[编辑 | 编辑源代码]

映射[编辑 | 编辑源代码]

符号[编辑 | 编辑源代码]
数字[编辑 | 编辑源代码]
功能[编辑 | 编辑源代码]

形式化[编辑 | 编辑源代码]

可计算性[编辑 | 编辑源代码]
变量[编辑 | 编辑源代码]

变量是数字、字符串、字符(套)或布尔值(真/假)存储在RAM中的空间。例如,布尔值可以用来保存信息如果程序已经达到某种状态。以下信息需要保存一个变量:名称,类型(数字、字符串或布尔),和变量值。变量,顾名思义,改变。命令操作可以改变变量。在运行程序时创建变量,一旦程序结束,变量值会被从内存中删除。当一个程序重启,变量会被重置。


层次结构[编辑 | 编辑源代码]

内存[编辑 | 编辑源代码]

内存是储存您的程序数据的地方。 它是可更改的 (但它在计算机关闭后将会被删除),它也用于储存您计算机的数据。例如说,在一个从1开始计算的程序中,1就被储存在了内存中,从内存中加载出来的1被添加上原来的1便得到了2。

执行[编辑 | 编辑源代码]

语义[编辑 | 编辑源代码]

数据[编辑 | 编辑源代码]

数据是计算机处理的信息,使用二进制表示。

控制单元[编辑 | 编辑源代码]

机器架构[编辑 | 编辑源代码]

数据通道[编辑 | 编辑源代码]

Processing[编辑 | 编辑源代码]

算术逻辑单元[编辑 | 编辑源代码]

1-bit 3 function ALU.png

ALU是计算机最重要的组件之一,在现实生活和Minecraft中。首先,你必须选择你希望能够实现的功能。大多数时候,这些都是加法、减法和一组逻辑选项。

与,或,与非,或者你所喜欢的。你必须建立单位和所有你想要的逻辑门和数学函数和选择哪一个的输出显示。

总线[编辑 | 编辑源代码]

用总线允许您的计算机的组件相互通信。

一条总线可以通过使用创建红石布线连接你的计算机的运算器,随机储存器,只读储存器,中央处理器和寄存器在一起,这样他们就可以互相之间发送数据。通常是重要的计划,建立你的电脑的组件,这样你不需要创建总线电线过长,或者更糟的是,没有空间来创建总线,在这种情况下,您可以删除的组件并重建一个适当的位置,或者使用像WorldEdit移动组件到其他地方。

存储[编辑 | 编辑源代码]

Register

随机存取存储器[编辑 | 编辑源代码]

4byteRAM default.png

随机存取存储器又称RAM,是程序使用的一种存储器,具有易失性。易失性是指当电源断开时,它将丢失信息。大多数情况下,在《我的世界》中内存数据不会失去,所以最简单的方法就是使用d-触发器来添加读写功能。

二级存储器[编辑 | 编辑源代码]

这相当于HDD和SSD。下面介绍一种非常紧凑的存储技术,要涉及到红石比较器,能够存储高达1KB的实际数据大小。

https://www.youtube.com/watch?v=1zE_XZLTDBw

三级存储器[编辑 | 编辑源代码]

第三,也是最后一点,是第三级内存,它需要大量的时间来读/写,牺牲速度但可以存储大量信息。在现实世界中,三级存储器使用的是一种老式的挂载内存的机制,而且现在也很少使用了。在《我的世界》中,这种系统要用潜影盒来完成,潜影盒中的方块必须由排序系统进行排序,以表示某种形式的数据。由于这些工作需要大量的比较器和大量的时间,所以读/写速度相当慢。然而,利用某些mod可以加快游戏tick的速度并消除这个问题。这用于存储长期数据,这些数据需要在程序开始时加载。相当于一台真正的计算机的机械硬盘或固态硬盘。

机器状态[编辑 | 编辑源代码]

程序计数器[编辑 | 编辑源代码]

程序计数器用于告诉CPU应该运行哪行代码。在每个时钟周期,解码器将访问这个计数器来获取下一个要执行的命令。一些命令会比另一个访问不同的数据量,或任何数据,因此解码器将适量增加程序计数器的下一个命令。使用的计数器也跳转命令控制程序流。   

控制路径[编辑 | 编辑源代码]

processing[编辑 | 编辑源代码]

控制单元[编辑 | 编辑源代码]

Redstone Computer Control Unit.PNG

总线[编辑 | 编辑源代码]

Redstone Computer Control Busing.PNG

硬盘[编辑 | 编辑源代码]

Redstone Computer Tertiary Memory.PNG

固体方块可以被红石中继器强冲能,强充能方块可以点亮周围的红石粉。透明方块却不可以被冲能,这就是一个简单的硬盘。

程序内存[编辑 | 编辑源代码]

Redstone Computer Program Memory.PNG

程序内存,最基本,ROM(只读存储器)。ROM是最常用的远程执行一系列任务(如一个程序,因此得名)。它可以用来在用户控件(如图片)或每一行之间的时钟和足够的延迟2不是在同一时间。最简单、最高效的设计之一是一个图中,这可能是也可能不是加上解码器。它可以很容易地扩大,这是另一个优势。

机器状态[编辑 | 编辑源代码]

Redstone Computer Machine State.PNG

程序计数器[编辑 | 编辑源代码]

Redstone Computer Program Counter.png

时钟[编辑 | 编辑源代码]

Redstone Computer Clock.PNG

时钟同步组件或使用时间。(Minecraft)在大多数情况下,可以避免使用但有时它是计算机的功能所必需的。它基本上可以由红石火把链接成一条线/圈的非门(奇数建议或者你的输出必须“取反”),或者中继器,如上图所示。

提示[编辑 | 编辑源代码]

  • 你也可以使用一些像是WorldEdit的模组
  • 如果你在生存模式没有太多的红石中继器 你可以用两个红石火把代替
  • 利用颜色进行分区(例如用蓝色羊毛建造RAM(随机存取存贮器),黄色羊毛建造ALU(算术逻辑部件运算器)等)