Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement

Template:Translation:未知參數。 本文在探討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

ALU是計算機最重要的組件之一,在現實生活和Minecraft中。首先,你必須選擇你希望能夠實現的功能。大多數時候,這些都是加法、減法和一組邏輯選項。

與,或,與非,或者你所喜歡的。你必須建立單位和所有你想要的邏輯門和數學函數和選擇哪一個的輸出顯示。

總線

用總線允許您的計算機的組件相互通信。

一條總線可以透過使用建立紅石布線連接你的計算機的運算器,隨機儲存器,只讀儲存器,中央處理器和寄存器在一起,這樣他們就可以互相之間發送資料。通常是重要的計劃,建立你的電腦的組件,這樣你不需要建立總線電線過長,或者更糟的是,沒有空間來建立總線,在這種情況下,您可以刪除的組件並重建一個適當的位置,或者使用像WorldEdit移動組件到其他地方。

儲存

Register

隨機存取儲存器

4byteRAM default

隨機存取儲存器又稱RAM,是程式使用的一種儲存器,具有易失性。易失性是指當電源斷開時,它將丟失資訊。大多數情況下,在《我的世界》中記憶體資料不會失去,所以最簡單的方法就是使用d-觸發器來加入讀寫功能。

二級儲存器

這相當於HDD和SSD。下面介紹一種非常緊湊的儲存技術,要涉及到紅石比較器,能夠儲存高達1KB的實際資料大小。

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

三級儲存器

第三,也是最後一點,是第三級記憶體,它需要大量的時間來讀/寫,犧牲速度但可以儲存大量資訊。在現實世界中,三級儲存器使用的是一種老式的掛載記憶體的機制,而且現在也很少使用了。在《我的世界》中,這種系統要用界伏盒來完成,界伏盒中的方塊必須由排序系統進行排序,以表示某種形式的資料。由於這些工作需要大量的比較器和大量的時間,所以讀/寫速度相當慢。然而,利用某些mod可以加快遊戲tick的速度並消除這個問題。這用於儲存長期資料,這些資料需要在程式開始時載入。相當於一台真正的計算機的機械硬盤或固態硬盤。

機器狀態

程式計數器

程式計數器用於告訴CPU應該執行哪行代碼。在每個時鐘週期,解碼器將訪問這個計數器來取得下一個要執行的指令。一些指令會比另一個訪問不同的資料量,或任何資料,因此解碼器將適量增加程式計數器的下一個指令。使用的計數器也跳轉指令控制程式流。   

控制路徑

processing

控制單元

File:Redstone Computer Control Unit.PNG

總線

File:Redstone Computer Control Busing.PNG

硬盤

File:Redstone Computer Tertiary Memory.PNG

固體方塊可以被紅石中繼器強沖能,強充能方塊可以點亮周圍的紅石粉。透明方塊卻不可以被沖能,這就是一個簡單的硬盤。

程式記憶體

File:Redstone Computer Program Memory.PNG

程式記憶體,最基本,ROM(只讀儲存器)。ROM是最常用的遠程執行一系列任務(如一個程式,因此得名)。它可以用來在使用者控件(如圖片)或每一行之間的時鐘和足夠的延遲2不是在同一時間。最簡單、最高效的設計之一是一個圖中,這可能是也可能不是加上解碼器。它可以很容易地擴大,這是另一個優勢。

機器狀態

File:Redstone Computer Machine State.PNG

程式計數器

Redstone Computer Program Counter

時鐘

File:Redstone Computer Clock.PNG

時鐘同步組件或使用時間。(Minecraft)在大多數情況下,可以避免使用但有時它是計算機的功能所必需的。它基本上可以由紅石火把連結成一條線/圈的非門(奇數建議或者你的輸出必須「取反」),或者中繼器,如上圖所示。

提示

  • 你也可以使用一些像是WorldEdit的模組
  • 如果你在生存模式沒有太多的紅石中繼器 你可以用兩個紅石火把代替
  • 利用顏色進行分區(例如用藍色羊毛建造RAM(隨機存取存貯器),黃色羊毛建造ALU(算術邏輯部件運算器)等)
Advertisement