ブラりザヌの䞉元コンピュヌタヌ

000.背景



1959幎、N。P.ブルれン゜フはモスクワ州立倧孊向けにナニヌクなSetunコンピュヌタヌを開発したした。 それは䞉進法に基づいおおり、元玠の基数は郚分的に二進法でしたが、これはコスト超過をもたらしたしたが、機械は経枈的で信頌できるこずが蚌明されたした。 今日、3進機は博物通でしか芋るこずができず、バむナリコヌドが勝ちたした。



しかし、 前述したように、゚ミュレヌタの圢で過去の技術を保存する準備ができおいる人は垞にいるでしょう。



00+。 理論的背景



この蚘事では、3項察称数䜓系に぀いお説明したす。 その䞭の数字は正ず負です。぀たり、-1 / 0/1以䞊の䞀般的に受け入れられおいる-/ 0 / +です。 このプロパティは、将来のコンピュヌタヌによる負の数のネむティブサポヌトを意味したす。



3進数システムず3進数論理の防埡には、さらに2぀の議論がありたす。 各カテゎリのデヌタストレヌゞの費甚察効果は明ら​​かであり、通垞のデヌタタむプの倧容量であるタむダのラむンを節玄したす。







匏y = lnx/ xがありたす。物理的な意味は、X軞に沿っお耇雑さが増す「保存された情報の量ずそのストレヌゞの耇雑さの比率」ず理解しおいたす。



䞻な欠点は、3぀の状態になり、同時にプロセッサの構築に適したモヌドで効果的に機胜できる基本芁玠がないこずです。 しかし、゚ミュレヌタにずっおは、これは問題ではありたせん。 さらに、耇合䞉元芁玠の回路が知られおいる。 最新のプロセッサのトランゞスタの数が実際にコマンドシステムを担圓し、最適化の皋床を芋積もるず、3進プロセッサ自䜓の実装はそのような問題ではないこずがわかりたす。



0 +-。 背景



私は比范的最近、N。P.ブルれン゜フの仕事に぀いお孊びたした。 セツニに関する資料のいく぀かを研究した埌、私はもう䞀床やり盎す必芁はなく、あなたは私たちの時代の知識を䜿甚できるこずに気付きたした。 私の知る限り、䞉元仮想マシンはモスクワ州立倧孊でも開発されたした。 しかし、それにはほずんど資料がなく、゜ヌスコヌドもたったくありたせん。



その瞬間、N。WirthはOberon 2013プロゞェクトの最初の開発を発衚したした。







RISCのようなプロセッサの独自のコマンドシステム、シンプルな蚀語、およびシンプルなコンパむラにより、2人の賢い人の抂念を1぀にたずめるのはいい考えだず思いたした。



そのため、TRISCプロゞェクトである䞉元RISCは、仮想マシンずOberon蚀語コンパむラが䞉元コヌドに実装されたフレヌムワヌク内で生たれたした。 たた、このプロゞェクトの枠組みの䞭で、論理的な3項ゲヌトのシミュレヌタヌが実装されたしたが、それはたた別の時期に実装されたした。



プロゞェクトはアルファ段階に持ち蟌たれ、凍結されたした。 そのため、2015幎にDart蚀語を孊習する過皋で、ブラりザヌの゚ミュレヌタヌポヌトを実装するずいうアむデアが生たれたした。

非定型のWebプロゞェクト、倚くの奇劙な目暙、もっず面癜いものはありたすか



0 + 0。 目暙ず手段



䞉元コヌドのコンパむラはすでに機胜しおいるため、䞉元コヌドもありたした。 したがっお、プロゞェクトの䞻な目暙は、プロセッサ゚ミュレヌタを構築するこずです。 タスクがスむッチのプリミティブセットに到達しないように、ペヌゞがフリヌズしないように、仮想マシンを非同期で制埡する必芁があるずしたしょう。これがWebです。



たた、興味を匕くために、独自のデヌタ型を䜿甚できたす。これは、3進マシンに䞀般的で、プロセッサ自䜓は、プロセッサの実際のブロックレゞスタ、ALUなどにほが察応する個別のモゞュヌルずしお実装できたす。 このプロゞェクトは自己孊習に必芁なため、倚くのDart機胜を䜿甚できるずいう利点がありたす。



私の目の前には、元のむンタヌプリタヌがあり、アルゎリズムには特別な問題は発生したせん。



0 ++。 æ•°å­Š



最初に、論理ず数孊を実装したす。 すぐに面癜い。



䞉元系の䞻な論理型は、トリリアンブヌル型に類䌌です。 ロシア語の類䌌語は芋぀かりたせんでした。 trilean型には、true / null / falseの3぀の倀がありたす。 これらの倀には、基本的な論理法則がありたす。 それらは、前䞖玀の20幎代にJan Lukasevichによっお策定されたした。 吊定ず含意の2぀の法則から、すべおの基本的な論理挔算が掚枬されたす。

DartでTrilタむプに぀いお説明したので、挔算子のオヌバヌロヌド機胜を䜿甚したす。

少しテストしお、タむプの準備ができたした。 最適化の䞀皮であるTrilのようなオブゞェクトの倚くのコピヌを䜜成しないように、ファクトリコンストラクタを䜿甚したす。



敎数の堎合も、それほど単玔ではありたせん。 情報の最小単䜍はtritビットに類䌌です。 Setunプロゞェクトでは、6桁の特性が䜿甚されたした1バむトずの類掚により。 私のプロゞェクトでは、9ビットの特性を䜿甚しお、サむズを8ビットバむトに近づけたした。 そしお、䞀芋したずころ、9は8以䞊ですが、この事実は結果のデヌタ型の力-19683倀で報われたす。 -9841から9841たで。 逆加算なしで、算術シフトず論理シフトを区別する必芁がありたせん。



代替の䞖界では、80幎代の人々は1バむトの256個の倀で適切な文字を芋぀けるのに問題はありたせんでした。 このデヌタ型tryteをDart蚀語で蚘述し、基本的な算術挔算を実装したす。



さらに、ご想像のずおり、タむプint27を導入したす。これには27トリットがありたす。これは、システムのマシンワヌドのサむズになりたす。 もちろん、27トリットは32ビットよりも倚くの倀に適合したす。 -3,812,798,742,493から3,812,798,742,493たでの倀ここでは、64ビットは27トリットよりも倚くの倀に適合したすが、そのようなレゞスタには2倍のトリガヌがかかりたす。



最も芁求の厳しい堎合は、タむプint81を入力できたす。これにより、128ビットの数倀でもマむナスになりたす。 ずころで、3の环乗でトリットの数が増加するこずがわかりたす。

tryteず同様にint27型を実装したす。



数孊サブシステムの远加のタむプはTritsタむプで、これはOberonのSETタむプに類䌌しおいたす。 タむプWは、N。Wirthによる別の蚘事に捧げられおおり、過小評䟡されおいるタむプSETず呌ばれおいたす。 感謝したす。



芁するに、TritsSETタむプは倚くのトリットです。 敎数に自由に倉換できたすが、セット、加算、乗算などのすべおの基本操䜜はTritsタむプに適甚できたす。 このタむプのサポヌトにより、プロセッサで䞀郚の呜什を凊理する実装が簡玠化されたす。 たた、3進数を文字列に倉換するのに圹立ちたす。



文字-/ 0 / +による数字の3進衚蚘に加えお、3進衚蚘の9倍圢匏もありたす。その䞭の蚘号はZXYW01234です。 このような数倀の蚘録甚のコンバヌタヌを実装したす。



䞻なタスクずは関係のない嚯楜ずしお、コンバヌタヌを非合理的な基底を持぀䞉項察称数システムに実装しおいたす。

ベヌスは、黄金比の二乗を遞択したす。 そのような数䜓系はフィボナッチず呌ばれたす。 興味深い特性がありたす-数倀の衚蚘は、れロ攟電に関しお察称です。







1぀の画像内のすべおのコンバヌタヌの䟋。

いく぀かのテストをしたしょう。 数孊サブシステムの準備ができたした。



+-。 鉄



たず、蚘憶に぀いお説明したす。 それは非垞に単玔で、メモリは単なる特性の配列です。 远加のクラスの圢匏で1぀の関数だけでそれを補完したす-デヌタの単語党䜓を読み取る機胜。



さらに、メモリに぀いおは、メモリのさたざたな領域ぞのアクセスを制埡するデバむスであるMMUに぀いお説明したす。 匊瀟のMMUはシンプルです。I/ Oピンずしお䞀郚のメモリセルに接続できるほか、負のアドレスを䜿甚しお実行可胜プログラムからこれらのピンにアクセスできたす。



プロセッサには、Dart蚀語の非同期機胜を䜿甚したした。 各プロセッササむクルは将来のために蚈画され、非同期的に実行されたす。 同時に、クロック呚波数を100倍に䞊げるこずで、パフォヌマンスをだたし、加速したした。 結果は䞀皮のオヌバヌクロックでした。 そのため、メむンプロセッサのアクティビティはnextメ゜ッドで発生したす。



プロセッサコマンドシステムを開発する時が来たした。 先ほど蚀ったように、私はOberon 2013プロゞェクトの資料に基づいおいたしたN. Wirthは、FPSにRISCプロセッサを実装するための簡単なコマンドシステムを開発したした。 このコマンドシステムを3進コヌドにアップグレヌドしたした。 2オペランドたたは3オペランドの算術挔算、条件付きゞャンプ、盎接および間接のメモリアドレス指定。



プロセッサには27個の汎甚レゞスタがあり、远加のPCレゞスタはメモリ内の次のコマンドの䜍眮を瀺し、IRレゞスタには珟圚のコマンドが含たれたす。 たた、远加のNZトリットがありたす。これには、レゞスタに察する操䜜の远加結果が含たれたす。 いく぀かの汎甚レゞスタは、リタヌンアドレス、スタックの先頭などを配眮するためにOberonシステムによっお取埗されたす。



ご存じのように、RISCプロセッサは通垞、RAMにデヌタをロヌドおよびアンロヌドするために個別の呜什を䜿甚し、すべおの操䜜はそれらのレゞスタずデヌタに察しお実行されたす。



したがっお、プロセッサのアクションアルゎリズムは次のずおりです。PCアドレスでメモリから単語が読み取られ、倀がIRに曞き蟌たれ、コマンドデコヌダヌに送信されたす。コマンドデコヌダヌは、1぀たたは別のナニットに信号を送信しおアクションを実行したす このようなアクションはレゞスタの倀を倉曎できたすが、倀がれロであるかれロより倧きいかは情報がNZレゞスタに曞き蟌たれたす。 したがっお、1぀のトリットが2぀の質問に答えたす。 その埌、条件分岐呜什を実行するずきにこのトリットを䜿甚できたす。 コマンドの結果ずしお、実行可胜コヌドが倉数ず芋なす堎所でメモリの状態が倉化し、次のステップでプロセッサの遷移アドレスが倉化し、反埩が終了したす。 フォヌマット--13のコマンドが曞き蟌たれおいるため、-1メモリセルに切り替えるず、プロセッサはシャットダりンしたす。



コマンドのシステム党䜓をペむントしおも意味がありたせん。 github.com/kpmy/tri/blob/master/doc/trinary-0.pdfにありたす。



倖郚の䞖界ずの通信は、ホストが実行する倀の事前定矩されたアドレスでメモリセルに曞き蟌むこずによっお行われたす。 たずえば、この方法でプリミティブデバッグコン゜ヌルを実装できたす。

Webアプリケヌションがあるので、このコン゜ヌルを癜い文字で本物の黒いりィンドりに衚瀺したす。 これを行うには、Webコンテンツを管理するための暙準のDartラむブラリの既補のコンポヌネントず機胜を利甚したす。



+ -0。 最初のステップ



動䜜䞭の仮想マシンからコヌドをすでに入手しおいるため、その実行の機胜に぀いお簡単に説明したす。



したがっお、完成したコヌドのメモリ内のファヌムりェアに぀いおは、サヌバヌからコヌドをダりンロヌドしおメモリに曞き蟌むロヌダヌクラスに぀いお説明したす。 JSON圢匏のコヌドは奇劙ですが、実際には、バむナリ蚘録圢匏は3進コヌドず完党に互換性がないためです。



Oberonシステムの暙準に埓っお、ロヌダヌは遷移アドレスを倉曎し、単玔な数孊は、コンパむラヌがコンパむル時に蚭定するれロ䜍眮に察するロヌドされたモゞュヌルのコヌドオフセットのコヌドを修正したす。



ブヌトストラップは別のモゞュヌルであり、これらはメモリにマシン定数をむンストヌルしメモリサむズ、モゞュヌルテヌブルアドレスなど、プロセッサを最初の実行可胜コマンドのアドレスに転送するいく぀かのコマンドです。 ブヌトストラップは手動で準備されたした。



Coreモゞュヌルは、Oberonシステムコアのむメヌゞず䌌たようなカヌネルモゞュヌルで䜜成されたす。これはカヌネルであるため、倚くの盎接メモリ操䜜、動的構造アロケヌタヌの実装バグがある堎合がありたす、䟋倖キャッチの実装などです。

Coreモゞュヌルで、最も原始的なコン゜ヌルを実装したす。 文字列ず数字を出力するには、䞊蚘のように、メモリセルに文字の倀を曞き蟌みたす。 プラットフォヌム䟝存のSYSTEMモゞュヌルは仮想であり、コンパむラヌはその呌び出しを盎接マシンコヌドに倉換したす。



衚珟力に欠けるスクリヌンショット。

ここで、結果の仮想マシンのパフォヌマンスを確認しおください。 もちろん、プロセッサヌずコンパむラヌの䞡方の耇雑なデバッグが同時にいく぀かのバグを匕き起こしたしたただ発芋されおいたせんが、抂念実蚌ずしお、䜜業の結果は十分に思えたした。



+-+。 たずめ



その結果、Oberon 2013プロゞェクトからN. Wirthプロセッサの完党に機胜する拡匵可胜なアナログを取埗したした。3進数システムず3進数コヌドを倉曎し、結果のシステムで動䜜するためのいく぀かのモゞュヌルを远加したした。



元のむンタヌプリタヌでは、成功を発展させ、9pプロトコルに基づくファむルシステムを䜿甚しお、rs232ポヌトず同様に倖郚ずの通信を実装しようずしたした。 そしお、これは私が出䌚ったものです。 䞡方のテクノロゞヌは、クロスプラットフォヌムずしお宣蚀されおいたすが、些现な特城のプラットフォヌムの抂念に導入されるず、クロスプラットフォヌムを急速に倱いたす。 バむトずビットのフレヌムワヌクにより、このようなテクノロゞヌの移怍は簡単な䜜業になりたす。



もちろん、ここでは、䞉元系の重芁性ず有病率はれロであるこずに異議を唱えるこずができたすが、Vovochkaに関する逞話のように、䞉䜍䞀䜓がありたすが、クロスプラットフォヌムに぀いおの蚀葉はありたせん。 おそらくこれは、䞉元系の広がりに察する䜕らかの障害です。 結局のずころ、すべおがそのように動䜜したす。



個人的に、私は䞉元マシンの正圓な䜿甚を1぀だけ芋たした。これは、䟵入から保護された通信チャネルの組織です。 実際、チャンネルに盎接アクセスしおも、ハッカヌは少なくずもハヌドりェア信号デコヌダヌを必芁ずしたすが、これはただ開発が必芁です。 したがっお、鎧ずシェルの闘争は、蚘茉された技術の産業応甚に呜を吹き蟌むこずができたす。



+ 0-。 参照資料



たあ、おそらく興味がある人のためのいく぀かのリンク。



+00。 PS



N.P. ブルれン゜フは2014幎12月4日に亡くなりたした。 圌の人生の仕事が忘れられないこずを願っおいたす。



All Articles