"Setun" - de eerste en enige computer gebaseerd op ternaire logica

  • Abnormale programmering,
  • Programmeren,
  • Perfecte code
    • Vertaling
    "Misschien is het mooiste getallenstelsel het gebalanceerde ternaire" - Donald E. Knuth, The Art of Programming, Vol. 2.

    Veel mensen weten dat computers gegevens opslaan en gebruiken met behulp van het binaire getalsysteem. Een van de belangrijkste verklaringen hiervoor vindt u in het diagram moderne computers, die bestaan ​​uit miljarden eenvoudige en in massa geproduceerde transistors en condensatoren die samen twee toestanden kunnen vertegenwoordigen: hoge spanning(1) en lage spanning (0).


    Dit ontwerp is tegenwoordig zo gebruikelijk dat het moeilijk voor te stellen is hoe computers op een andere manier zouden kunnen werken. Maar in het Sovjet-Rusland van de jaren vijftig werkten ze anders. Als je er nog nooit van hebt gehoord, google het dan" Setun" is een gebalanceerde computer met drie componenten, ontwikkeld in 1958 door een kleine groep onder leiding van Brusentsov aan de Staatsuniversiteit van Moskou.


    Voordat we het hebben over Brusentsov en Setun, wil ik u eerst het ternaire gebalanceerde getalsysteem uitleggen.

    Evenwichtige drie-eenheid

    Ternair of ternair is een getallensysteem waarin er sprake is van drie waarschijnlijke waarden: 0, 1 en 2. In de gebalanceerde versie zijn er drie kansen -1, 0 en +1, vaak vereenvoudigd tot respectievelijk -, 0 en +.


    In deze vorm wordt geïmpliceerd dat ternaire waarden "gecentraliseerd" zijn rond het middelpunt 0. Hier gelden dezelfde regels als bij elk ander getallensysteem: het meest rechtse symbool, R, heeft eigenwaarde, en elk volgend symbool heeft een waarde vermenigvuldigd met het grondtal B, verheven tot de macht gelijk aan de afstand D tot R.


    Eh, laat me je een voorbeeld geven. Laten we 114 schrijven:


    +++-0 = (1 * 3^4) + (1 * 3^3) + (1 * 3^2) + (-1 * 3^1) + 0 = 81 + 27 + 9 + -3 = 114

    En in binair (binair):


    1110010 = (1 * 2^6) + (1 * 2^5) + (1 * 2^4) + 0 + 0 + (1 * 2^1) + 0 = 64 + 32 + 16 + 2 = 114

    En voor de zekerheid golden toen dezelfde regels decimaal systeem notatie:


    114 = (1 * 10^2) + (1 * 10^1) + (4 * 10^0) = 100 + 10 + 4 = 114

    Wat als we -114 willen vertegenwoordigen? In binaire en decimale systemen zullen we een nieuw symbool moeten gebruiken: teken. In het hoofdgeheugen van een binaire computer wordt dit gedaan door het leidende bit op te slaan, het teken te specificeren, of door het aantal getallen dat we kunnen vertegenwoordigen aanzienlijk te verminderen: 1. Dit is de reden waarom we het hebben over ondertekend en niet-ondertekend in programmeertalen.


    Maar om in het symmetrische ternaire systeem het omgekeerde van een getal (het omgekeerde getal) weer te geven, zoals we later zullen leren, hoeven we alleen maar alle "+" in "-" te veranderen en omgekeerd. Wij hebben er geen nodig aanvullende informatie om het teken aan te geven!


    Kijk hier:


    ---+0 = (-1 * 3^4) + (-1 * 3^3) + (-1 * 3^2) + (1 * 3^1) + 0 = -81 + -27 + -9 + 3 = -114

    We zullen zo meteen zien dat deze en verschillende andere eigenschappen van het gebalanceerde ternaire systeem ons een aantal zeer interessante rekenvoordelen opleveren. Maar laten we nu teruggaan naar de Setun-computer.

    Geboorte van Setun

    De late jaren vijftig waren een opwindende tijd in de computerwereld: Nathaniel Rochester en zijn team bij IBM hadden onlangs de eerste commercieel verkrijgbare computer met opgeslagen programma's ontwikkeld, de zogenaamde "moderne" IBM 701-computer. John Backus en zijn team hebben FORTRAN uitgevonden, de eerste programmeertaal hoog niveau, dat op grote schaal wordt gebruikt. En misschien wel het allerbelangrijkste: de eerste volledig transistorcomputers begonnen zich te ontwikkelen, zoals de TX-0 en Philco Transac S-2000. De richting werd bepaald voor de ontwikkeling van binaire computers, die later de overhand gingen krijgen.


    Maar dit was in Noord-Amerika.


    Tegelijkertijd ontwikkelt een groep wiskundigen en ingenieurs onder leiding van Brusentsov en zijn collega Sergei Sobolev in Rusland andere computersystemen 2. Brusentsov en zijn collega's onderzoeken een verscheidenheid aan westerse computers en technologische ontwikkelingen, en conceptualiseren het gebruik van transistors om binaire gegevens weer te geven. Maar laten we niet vergeten dat dit de USSR is: transistors zijn niet zo gemakkelijk verkrijgbaar achter het IJzeren Gordijn. En vacuümbuisbuizen zuigen zowel in Rusland als in het Westen evenveel!


    Daarom ontwikkelt Brusentsov zich basiselement van miniatuur ferrietkernen en halfgeleiderdiodes, die kan werken als een instelbare stroomtransformator. Het blijkt een effectieve basis te zijn voor het implementeren van ternaire logica3. Er werd vastgesteld dat deze elementen, vergeleken met hun binaire tegenhangers, meer opleveren hoge snelheid en betrouwbaarheid en vereisen minder stroom om te werken.


    Een team van tien mensen bouwde Setun letterlijk vanuit het niets, werkend in een kleine kamer vol laboratoriumbanken (die ze zelf bouwden!). Elke ochtend assembleerden teamleden vijf eenvoudige machine-elementen. Ze namen ferrietkernen en wikkelden met een gewone naainaald 52 draadspoelen op elke kern. De kernen werden vervolgens overgedragen aan technici die het assemblageproces voltooiden en ze tot blokken assembleerden.


    Ternaire logica werd geïmplementeerd door twee van dergelijke ferrietelementen te combineren en ze zo te verbinden dat ze drie stabiele toestanden simuleerden. Deze aanpak was succesvol, maar het aantal noodzakelijke elementen werd niet afgekort omdat in werkelijkheid twee ferrietkernen potentieel twee binaire bits zouden kunnen vertegenwoordigen, wat resulteert in groter volume informatie (2^2) dan één ternaire "trit" (3^1). Het is triest, maar het stroomverbruik is tenminste verminderd!


    Setun werkt met getallen tot 18 trits, dat wil zeggen dat één trit elk getal tussen -387.420.489 en 387.420.489 kan simuleren. Een binaire computer heeft minimaal 29 bits nodig om dit vermogen te bereiken.


    De ontwikkeling van Setuni duurde twee jaar, ondanks het feit dat het systeem binnen tien dagen na het begin van de tests operaties kon uitvoeren, en voor die tijd was dit ongekend. In totaal werden er ongeveer 50 auto's geproduceerd. En hoewel de computers van Setun jarenlang feilloos werkten in het extreem Russisch klimatologische omstandigheden werd het project verscheurd door tegenstrijdigheden.


    Grotendeels vanwege het onvermogen van de fabrikant om de massaproductie te rechtvaardigen van wat zij beschouwden als een goedkoop wetenschapsgebied en 'de vrucht van een universitaire fantasie'. Ik denk dat het veilig is om aan te nemen dat Rusland simpelweg niet klaar was om het potentiële belang van computermachines te begrijpen. Uiteindelijk werden de Setun-machines vervangen door binaire tegenhangers, die berekeningen met dezelfde efficiëntie uitvoerden, maar de exploitatiekosten waren meer dan twee keer zo hoog!

    Wat is er speciaal aan het ternaire systeem?

    Zoals ik al zei, is het niet nodig om het leidende bit, of beter gezegd de trit, erin op te slaan om het teken aan te geven. Dit betekent dat er geen concept bestaat van gehele getallen met of zonder teken; alles is slechts een geheel getal. Aftrekken wordt dus bereikt door simpelweg de operand om te keren en optelling toe te passen (wat op dezelfde manier wordt geïmplementeerd als op binaire computers gebaseerde computers). Deze plus- of min-consistentie kan ook het aantal carry's verminderen dat nodig is voor vermenigvuldigingsoperaties.


    Een ander nuttig kenmerk van het gebalanceerde ternaire systeem (of welk symmetrisch getalsysteem dan ook) is de mogelijkheid om het afronden van getallen met drijvende komma te implementeren door expliciet het gehele deel van het getal te selecteren, wat het mogelijk maakt de implementatie van deling te vereenvoudigen. Dit komt door de manier waarop het ternaire systeem uitvoert fractioneel deel echte cijfers.


    Laat me u een eenvoudig voorbeeld geven. De vertaling van het getal 0.2 in code ziet er als volgt uit:


    0.+--+ = 0 + (1 * (3^-1)) + (-1 * (3^-2)) + (-1 * (3^-3)) + (1 * (3^-4)) = 0.33 + -0.11 + -0.03 + 0.01 = 0.2

    En om 0,8 te schrijven, moet je beginnen met + in het meest significante cijfer, en dan eenvoudigweg het breukgedeelte omkeren (bijvoorbeeld 1 + -0,2):


    +.-++- = 1 + (-1 * (3^-1)) + (1 * (3^-2)) + (1 * (3^-3)) + (-1 * (3^-4)) = 1 + -0.33 + 0.11 + 0.03 + -0.01 = 0.8

    Hierboven kun je zien dat het markeren van het hele deel van de trits rechts van het bitpunt gelijk staat aan afronding: 0,2 wordt nul en 0,8 wordt één. Koel!

    Programmeren met lekkernijen en eigenschappen!

    Oké, laten we terugkeren naar Setuni laatste keer. Eind jaren zestig ontwikkelde Brusentsov meer moderne auto"Setun-70", die de ternariteit duidelijker belichaamde. Het concept van "eigenschap" werd geïntroduceerd, dat uit 6 trits bestond (ongeveer 9,5 bits). De Setun-70-computer was stapelgebaseerd en daarom werden, in plaats van machine-instructies, die opzettelijk registers werden genoemd voor invoer en uitvoer, alle bewerkingen uitgevoerd op twee stapels: één voor operanden (invoer) en één voor retourwaarden ( uitgang). Om aan dit ontwerp tegemoet te komen, werden machine-instructies geschreven in notatie zonder omgekeerde haakjes (omgekeerde Poolse notatie of postfix-notatie).


    Eind jaren zeventig ontwikkelden Brusentsov en een aantal van zijn studenten een programmeertaal voor Setun-70, genaamd Dialogue System for Structured Programming (DSSP). Tijdens mijn onderzoek 4 merkte ik dat het een stapelgeoriënteerde taal is (wat helemaal niet verrassend is), vergelijkbaar met Forth en de omgekeerde Poolse notatie gebruikt. Hierdoor kun je programma's schrijven in een taal van relatief hoog niveau, maar voel je je toch "laag niveau". Zozeer zelfs dat de auteurs ervan de volgende boodschap hadden:


    DSSP is niet uitgevonden. Het was geopend. Daarom heeft de taal geen versies, alleen extensies.

    Beschouw een programma in DSSP dat een groep getallen optelt:


    1 2 3 4 DIEP 1- DOEN +

    Laten we proberen het te ontrafelen. In de eerste kolom hebben we het commando, in de tweede - de toestand van de computer na uitvoering (operandstapel), en in de derde geef ik een uitleg:


    1 Voeg 1 toe aan de stapel. 2 Voeg 2 toe aan de stapel. 3 Voeg 3 toe aan de stapel. 4 Voeg 4 toe aan de stapel. DIEP Voeg "stapeldiepte" (4) toe aan de stapel. 1- [-1 4 4 3 2 1] Voeg -1 toe aan de stapel. DO Start een lus, verwijder twee elementen van de stapel. Om de lus te besturen, wordt het eerste element op het tweede toegepast totdat 0 wordt verkregen. + Pas de operator "+" toe totdat de lus is voltooid, waarbij elke keer wordt verwijderd bovenste element van de operandstapel door + toe te passen en de uitvoer toe te voegen aan de retourstapel.

    Aan het einde van de uitvoering is de operandstapel leeg en bevat de retourstapel .


    Meer informatie over DSSP is geschreven op de website van Ivan Tikhonov (auteurs S.A. Sidorov en M.N. Shumakov).

    Toekomst

    De ontwikkeling van gebalanceerde ternaire computers is vrijwel een kleine voetnoot in de annalen geworden computergeschiedenis. En hoewel er weinig onderzoek is gedaan naar geheugencellen die effectief drie verschillende toestanden kunnen vertegenwoordigen, zijn er op dit gebied enkele vorderingen gemaakt.


    Japanse onderzoekers beschreven eind jaren negentig namelijk de mogelijkheid om de Josephson-overgang te gebruiken om ternaire logica te implementeren. Dit zou kunnen worden bereikt door de circulatie van supergeleidende stromen: positief (met de klok mee), negatief (tegen de klok in) of nul. Ze ontdekten dat dit de geheugencellen ‘hoge rekenmogelijkheden’ geeft, laag stroomverbruik en een heel eenvoudig ontwerp met minder elementen, dankzij de ternaire werking."


    Maar ik denk niet dat je het concept van een gebalanceerde ternaire computer in de nabije toekomst nog vaak zult tegenkomen. En dat DSSP ook voor agressieve fans van programmeertalen een doorbraak zal zijn. Maar ik geloof dat er veel verstandige beslissingen kunnen worden geleerd uit het verleden 5 .



    1. Het hangt af van hoe de specifieke machine getallen vertegenwoordigt. De twee-complementcode is een weergave van getallen in het decimale notatiesysteem, waardoor het mogelijk is om van -((2^n) / 2) tot ((2^n) / 2) - 1 in n bits weer te geven.

    2) Hoewel de Setun-computer de eerste was elektronisch apparaat die voor hun werk een ternair systeem gebruikten, is het vermeldenswaard dat het idee om een ​​dergelijk systeem te gebruiken computerapparatuur werd meer dan 100 jaar geleden voor het eerst gepopulariseerd. In 1840 bouwde Thomas Fowler een computer die volledig uit hout bestond en deze verwerkte gegevens met behulp van het ternaire systeem.

      Een nauwkeurigere beschrijving is te vinden op de website van het Russian Computer Museum.

      Referentiemateriaal voor DSSP aan Engels niet erg toegankelijk, dus ik waarschuw je dat mijn kennis beperkt is en mogelijk gokkenmerken bevatten

    1. ternaire computer
    2. Tags toevoegen

    De informatie waarmee een computer werkt, wordt op de een of andere manier opgesplitst in enen en nullen: afbeeldingen, muziek, teksten, programma-algoritmen. Alles is eenvoudig en duidelijk: "aan" - "uit", "er is een signaal" - "geen signaal". Ofwel ‘waar’ of ‘onwaar’ is binaire logica. Ondertussen lanceerde de Sovjet-Unie in 1961, het jaar van de eerste menselijke vlucht naar de ruimte, de productie van ongebruikelijke computers die niet met binaire, maar met ternaire logica werkten.

    In principe had het ternaire getallenstelsel niet minder kans dan het binaire getallenstelsel. Wie weet welke ontwikkelingsweg de technische vooruitgang zou hebben gevolgd als de ‘eigenschappen’ hadden gezegevierd over de ‘bytes’. Hoe zouden ze eruitzien? moderne smartphones of GPS-navigators, hoe zou de waarde ‘misschien’ hun prestaties beïnvloeden? Het is moeilijk te zeggen. We zullen dit probleem analyseren en u de gelegenheid geven uw eigen conclusies te trekken.

    Fowlers machine


    Om eerlijk te zijn, moet meteen worden opgemerkt: de eerste computer met een ternair getalsysteem, lang vóór Sovjet-ontwerpers, werd in 1840 gebouwd door de Engelse autodidactische uitvinder Thomas Fowler. Zijn auto was mechanisch en volledig van hout.

    Thomas Fowler werkte als bankmedewerker en moest vanwege zijn beroep complexe berekeningen maken. Om zijn werk gemakkelijker en sneller te maken, maakte hij tabellen voor het tellen in de machten van twee en drie, en publiceerde deze tabellen later in de vorm van een brochure.

    Toen ging hij verder en besloot hij berekeningen volledig te automatiseren met behulp van tabellen, en bouwde hij een rekenmachine. Het Engelse patentsysteem van die tijd was onvolmaakt. Fowlers vorige uitvinding (de thermosyfon voor stoomverwarmingssystemen) werd met minimale wijzigingen gekopieerd en gepatenteerd door vele gewetenloze "uitvinders", dus uit angst dat zijn idee opnieuw zou kunnen worden gestolen, besloot hij om een enkel exemplaar van de machine en - gemaakt van hout. Omdat hout een onbetrouwbaar materiaal is, moest Fowler, om voldoende nauwkeurigheid van de berekeningen te garanderen, de machine erg omvangrijk maken, ongeveer 2 meter lang. Echter, zoals de uitvinder zelf in het begeleidende briefje schreef, stuurde hij de auto naar Londen koninklijk college, “Als het van metaal zou kunnen zijn, zou het niet groter zijn dan een typemachine.”

    De machine van Fowler was eenvoudig, effectief en maakte gebruik van een innovatieve aanpak: in plaats van met het decimale getalsysteem werkte het met "drieklanken", dat wil zeggen machten van drie. Helaas bleef de opmerkelijke uitvinding onopgemerkt, het origineel van de machine is tot op de dag van vandaag niet bewaard gebleven en de structuur ervan is alleen bekend uit het werk van Fowler Jr., die een biografie van zijn vader schreef.

    Eerste Sovjet-experimenten


    OVER praktisch gebruik Het ternaire getallensysteem werd meer dan honderd jaar vergeten. De volgende die op dit idee terugkeerde waren ingenieurs van de afdeling Computationele Wiskunde van de Faculteit Mechanica en Wiskunde van de Staatsuniversiteit van Moskou.

    Het begon allemaal in 1954: de afdeling zou een elektronische M-2-computer krijgen, maar dat lukte niet. En ze wachtten op de auto, bereidden zich voor om hem te installeren en af ​​te stellen, er waren bepaalde verwachtingen en plannen aan verbonden. En iemand stelde voor: laten we onze eigen bouwen.

    Ze namen het en bouwden het, gelukkig waren er in die tijd enkele theoretische ontwikkelingen aan de Staatsuniversiteit van Moskou. Nikolai Petrovich Brusentsov werd benoemd tot hoofd van de groep die de machine ontwierp en vervaardigde. De taak was deze: de auto uiterst eenvoudig en goedkoop maken (omdat het project geen speciale financiering had). In eerste instantie wilden ze een binaire computer maken, maar later – juist om redenen van zuinigheid en eenvoud van de architectuur – kwamen ze tot de beslissing dat deze ternair zou zijn, met gebruikmaking van een “natuurlijke” ternaire symmetrische code, de eenvoudigste van de symmetrische codes.

    Eind 1958 werd het eerste exemplaar van de machine voltooid, dat de naam "Setun" kreeg - naar de naam van een rivier in Moskou. “Setun” was relatief klein voor computers van die generatie en besloeg een oppervlakte van 25-30 m2. Dankzij de elegante architectuur was het in staat 2000−4500 bewerkingen per seconde uit te voeren RAM in 162 negen-trit-cellen en een opslagapparaat op een magnetische trommel met een capaciteit van 36-72 pagina's van elk 54 cellen. Er waren slechts 27 machineopdrachten (en drie bleven niet geclaimd), waardoor programmacode bleek erg zuinig; direct in programmeren machinecodes was zo eenvoudig dat ze niet eens hun eigen assembler voor Setun ontwikkelden. Gegevens werden vanaf geperforeerd papier in de machine ingevoerd, de resultaten werden naar een teletype uitgevoerd (en merkwaardig genoeg werden negatieve cijfers zoals gewoonlijk afgedrukt, maar ondersteboven gedraaid). Tijdens het gebruik toonde de machine 95-98% van de nuttige tijd (besteed aan het oplossen van problemen, en niet aan het oplossen van problemen en het oplossen van problemen), en in die tijd was het erg goed resultaat er werd overwogen of de machine minimaal 60% kon geven.

    Bij interdepartementale tests in 1960 werd het voertuig erkend als geschikt voor massaal gebruik in ontwerpbureaus, laboratoria en universiteiten, gevolgd door een bestelling serieproductie"Setuni" in de fabriek voor wiskundige machines in Kazan. Van 1961 tot 1965 werden er door het hele land 50 exemplaren gebouwd en geëxploiteerd. Vervolgens werd de productie ingeperkt. Waarom stopten ze met de productie van Setun als het overal met succes werd gebruikt, van Kaliningrad tot Jakoetsk? Een van mogelijke redenen het feit dat de computer te goedkoop bleek om te produceren en daardoor onrendabel voor de fabriek. Een andere reden is de starheid van de bureaucratische structuren;

    Vervolgens ontwikkelden Nikolay Brusentsov en Evgeny Zhogolev meer moderne versie een machine die dezelfde principes van de drie-eenheid gebruikte - "Setun-70", maar die nooit in massaproductie ging; het enige prototype werkte tot 1987 aan de Staatsuniversiteit van Moskou.

    Driewaardige logica


    De tweewaardige wiskundige logica, die overal in de wereld van de computer en andere ‘intellectuele’ technologie heerst, komt volgens de maker van de ternaire computer Nikolai Brusentsov niet overeen. gezond verstand: de ‘wet van het uitgesloten midden’ sluit andere conclusies dan ‘waarheid’ en ‘niet-waarheid’ af, en toch wordt het proces van menselijke kennis van de werkelijkheid geenszins gereduceerd tot een ‘ja/nee’-dichotomie. Daarom betoogt Brusentsov dat een computer, om intelligent te worden, ternair moet zijn.

    Driewaardige logica verschilt van tweewaardige logica doordat er naast de betekenissen ‘waar’ en ‘onwaar’ nog een derde is, die wordt opgevat als ‘ongedefinieerd’, ‘neutraal’ of ‘misschien’. Tegelijkertijd blijft de compatibiliteit met tweewaardige logica behouden - logische bewerkingen met "bekende" waarden geven dezelfde resultaten.

    Logica die met drie waarden werkt, komt uiteraard overeen met het ternaire getalsysteem - ternair symmetrisch, of, preciezer gezegd, het eenvoudigste symmetrische systeem. Fibonacci wendde zich eerst tot dit systeem om zijn ‘probleem van de gewichten’ op te lossen.

    Het ternair symmetrische systeem gebruikt de getallen: –1, 0 en 1 (of, zoals ze ook worden aangeduid, –, 0 en +). De voordelen als symmetrisch systeem zijn dat het in de eerste plaats niet nodig is om speciaal het teken van het getal te markeren - een getal is negatief als het eerste cijfer negatief is, en omgekeerd, en inversie (tekenverandering) van een getal is gedaan door alle cijfers om te keren; ten tweede vereist het afronden hier geen speciale regels en wordt het uitgevoerd door eenvoudigweg de cijfers van lage orde terug te zetten op nul.

    Bovendien is ternair van alle positionele getalsystemen het meest economisch - daarin kun je schrijven meer getallen dan in enig ander systeem, waarbij een gelijk aantal cijfers wordt gebruikt: in het decimale systeem zijn bijvoorbeeld om getallen van 0 tot 999 weer te geven, 30 cijfers (drie cijfers, tien mogelijke waarden voor elk) vereist, in de binair systeem dezelfde dertig tekens kunnen getallen coderen in het bereik van 0 tot 32767, en in ternair - van 0 tot 59048. Het meest economische getalsysteem zou zijn met een grondtal gelijk aan het getal van Euler (e = 2,718...), en 3 is het dichtstbijzijnde gehele getal.

    Als het in ons gebruikelijke geval is binaire computers Omdat informatie wordt gemeten in bits en bytes, werken computers die het ternaire getalsysteem gebruiken met nieuwe eenheden: trits en trites. Trit is één ternair cijfer; net zoals een bit de waarden 0 en 1 kan aannemen ("false" en "true"), kan een trit (+), (0) of (-) zijn (dat wil zeggen "true", "unknown" of "vals").

    Eén eigenschap is traditioneel (zoals het was in “Setuni”) gelijk aan zes trits en kan 729 verschillende waarden aannemen (een byte is slechts 256). Misschien zullen eigenschappen in de toekomst echter 9- of 27-bits worden, wat natuurlijker is, aangezien dit machten van drie zijn.

    Het heden en de toekomst van ternaire computers


    Na Setun werden er verschillende experimentele projecten uitgevoerd door enthousiastelingen (zoals de Amerikaanse Ternac en TCA2), maar dit waren óf zeer onvolmaakte machines, verre van hun binaire tegenhangers, óf zelfs software-emulaties op binaire hardware.

    De belangrijkste reden is dat het gebruik van ternaire elementen in computers nog geen significante voordelen biedt ten opzichte van binaire elementen: deze laatste worden massaal geproduceerd, ze zijn eenvoudiger en goedkoper in prijs. Zelfs als er nu een ternaire computer zou worden gebouwd, die goedkoop is en qua kenmerken vergelijkbaar is met binaire computers, zou deze er volledig compatibel mee moeten zijn. De ontwikkelaars van Setuni-70 werden al geconfronteerd met de noodzaak om compatibiliteit te garanderen: om informatie uit te wisselen met andere universiteitsmachines, moesten ze de mogelijkheid toevoegen om binaire gegevens van ponsbanden te lezen en de gegevens bij het uitvoeren ook om te zetten in binair formaat.

    Er kan echter niet worden gezegd dat het ternaire principe in de computertechniek een hopeloos anachronisme is. De afgelopen tien jaar is er behoefte geweest aan nieuwe ontwikkelingen computertechnologie, en sommige van deze technologieën liggen op het gebied van de drie-eenheid.

    Eén van deze onderzoeksgebieden is het zoeken naar alternatieve manieren om de processorprestaties te verbeteren. Elke 24 maanden verdubbelt het aantal transistors in een processorchip ongeveer - deze trend staat bekend als de “wet van Moore”, en kan niet eeuwig doorgaan: de schaal van elementen en verbindingen kan worden gemeten in nanometers, en zeer binnenkort zullen ontwikkelaars worden geconfronteerd met een aantal technische problemen. Daarnaast zijn er economische overwegingen: hoe kleiner, hoe duurder de ontwikkeling en productie. En op een gegeven moment zal het goedkoper zijn om te kijken alternatieve manieren processors krachtiger maken in plaats van de race om nanometers voort te zetten, betekent dat we ons moeten wenden tot technologieën die voorheen als onrendabel werden verlaten. Overgang van homogene siliciumstructuren naar heterojunctiegeleiders bestaande uit lagen verschillende omgevingen en in staat om verschillende signaalniveaus te genereren in plaats van de gebruikelijke “is” en “nee”, is dit een kans om de intensiteit van de informatieverwerking te vergroten zonder het aantal elementen te vergroten (en hun afmetingen verder te verkleinen). In dit geval zullen we moeten overstappen van logica met twee waarden naar logica met meerdere waarden - driewaardig, vierwaardig, enz.

    Een andere richting, ook gericht op het verhogen van de productiviteit, zijn de ontwikkelingen op het gebied van asynchrone processors. Het is bekend dat het garanderen van synchronisatie van processen in moderne computers de architectuur aanzienlijk compliceert en processorbronnen verbruikt - tot de helft van alle transistors in de chip werkt om deze synchronisatie te garanderen. Theseus Logic stelt voor om “uitgebreide binaire” (eigenlijk ternaire) logica te gebruiken, waarbij naast de gebruikelijke “true” en “false” waarden er een apart “NULL” signaal is, dat wordt gebruikt om processen zelf te synchroniseren. Verschillende andere onderzoeksgroepen werken in dezelfde richting.

    Er zijn ook meer fantastische gebieden waar het gebruik van logica met drie waarden gerechtvaardigd is: optische computers en kwantumcomputers.

    Ternair getalsysteem - positioneringssysteem getallen met een geheel getalgrondtal gelijk aan 3.

    Het is verkrijgbaar in twee versies: asymmetrisch en symmetrisch.

    In het asymmetrische ternaire getalsysteem worden de cijfers (0,1,2) het vaakst gebruikt, en in het symmetrische ternaire getallenstelsel de tekens (-,0,+), (-1,0,+1), (1 ,0,1), ( 1,0,1), (i,0,1), (N,O,P), (N,Z,P) en getallen (2,0,1), (7, 0,1). Ternaire cijfers kunnen worden aangegeven met drie willekeurige tekens (A,B,C), maar daarnaast moet u de prioriteit van de tekens aangeven, bijvoorbeeld C>B, B>A.

    Het is raadzaam om getallen in het ternair symmetrische systeem aan te duiden met hun tekens, d.w.z. In plaats van 1, 0, -1 schrijf je +, 0, -. Bijvoorbeeld, decimale getallen 13, 7, 6, -6 in een dergelijke ternaire notatie zal zijn:

    13 = +++
    7 = +-+
    b = +-0
    -6 = -+0

    Het veranderen van het teken van een getal in een symmetrische code is gelijk aan een cijferinversie, d.w.z. waarbij alle “+” worden vervangen door “-” en alle “-” door “+”.

    In tegenstelling tot binair is dit rekenkunde met teken, waarbij het teken van een getal het cijfer is van het meest significante (niet-nul) cijfer. Het probleem van getallen met teken, waarvoor geen perfecte oplossing bestaat in de binaire code, bestaat eenvoudigweg niet in de ternaire symmetrische code, wat de fundamentele voordelen ervan verklaart.

    In de digitale technologie wordt het basis-b-nummersysteem geïmplementeerd door registers die bestaan ​​uit sets flip-flops, die elk verschillende toestanden kunnen aannemen die de cijfers van een getal coderen. In dit geval is de economie van het getalsysteem van bijzonder belang: het vermogen om een ​​zo groot mogelijk bereik aan getallen weer te geven met zo weinig mogelijk totale toestanden.

    Als het totale aantal toestanden gelijk is aan m, dan is het aantal triggers gelijk aan m/b, en het aantal getallen dat ze vertegenwoordigen is respectievelijk b^(m/b). Als functie van b bereikt deze uitdrukking een maximum bij b gelijk aan e = 2,718281828…. Voor gehele waarden van b wordt het maximum bereikt voor b = 3. Het meest economische is dus het ternaire getalsysteem (gebruikt in ternaire computers), gevolgd door het binaire getalsysteem (traditioneel gebruikt in de meest voorkomende computers) en het quaternair getalsysteem.

    Een beetje filosofie

    Binaire logica, die de basis vormt van het moderne computertechnologie, wordt tegenwoordig gezien als een soort axioma waarvan de waarheid niet in twijfel wordt getrokken. Het coderen van informatie met behulp van de aan- of afwezigheid van een signaal lijkt inderdaad het meest effectief op een passende manier uitvoering digitale systemen. Maar is dit waar?

    De regels voor de werking van computers worden bepaald door mensen. Binaire logica gebruiken in computerproces- geen natuurwet, maar een bewuste beslissing die iemand ooit heeft genomen omdat het computerontwerpers, programmeurs en gebruikers tevreden stelde bij het oplossen van hun problemen.

    Waarom werd binaire logica de basis? moderne computers? Het antwoord lijkt voor de hand liggend. Historisch gezien berustte de wiskundige logica op het idee van ‘er is geen derde optie’, waardoor het proces van logische gevolgtrekking tot binaire beslissingen werd beperkt.

    Dit dogma van de klassieke logica dankt zijn geboorte aan het principe van de bivalentie van logische oordelen, geïntroduceerd door de felle stoïcijnse Chrysippus en ondersteund door het gezag van Aristoteles. “De basis van de dialectiek is de stelling dat elke uitspraak (wat een “axioma” wordt genoemd) waar of onwaar is”, zei Cicero.

    De eenvoud van bivalentie beschrijft de logische realiteit van het leven eigenlijk heel goed. Het is de moeite waard om semaforen, oversteekplaatsen voor voetgangers en aan-uit-tuimelschakelaars te onthouden. Binair regeert het dagelijks leven vrij goed.

    Laten we twee objecten A en B wegen op een gewone weegschaal. Met de weegschaal kunnen we gemakkelijk twee tegenpolen bepalen: gewicht A > B en gewicht A
    Logica het dagelijkse leven het is moeilijk om in een zwart-witbeeld van bivalentie te passen - veel denkers beseften dit. Als gevolg hiervan verschenen niet-klassieke logici, die de wet van het uitgesloten midden achter zich lieten. Een van de eerste opties meerwaardige logica in de jaren twintig van de vorige eeuw werd het ontwikkeld door de Poolse wetenschapper Jan Łukasiewicz. In zijn logica met drie waarden verscheen naast de polaire ‘ja’ en ‘nee’ de betekenis ‘mogelijk’. De logische uitspraken met drie waarden van Lukasiewicz lieten een gebrek aan consistentie toe en werden modaal genoemd. Herinner je je het overleg in het sprookje over Pinokkio nog? "De kans is groter dat de patiënt nog leeft dan dood." 'Liever levend' is een modaal logische uitspraak.


    Lewis Carroll (Charles Lutwidge Dodgson)
    In het binaire systeem zijn niet-negatieve of niet-positieve getallen van nature representeerbaar, en aangezien beide noodzakelijk zijn, moeten we onze toevlucht nemen tot een extra of omgekeerde code of voer een speciaal stukje van het hekje in (“directe code”). Vergeleken met de ternaire code, waarmee je het teken (+, 0, -) kunt invoeren op het niveau van het trit-element, waardoor alle verdere constructies radicaal worden vereenvoudigd, zijn binaire constructies in principe inferieur, met uitzondering misschien , van de binair-ternaire, die trits in paren bits vertegenwoordigt. Feit is dat getallen (zoals al het andere in de wereld) drievoudig van aard zijn. Positief is immers niet niet-negatief (in tegenstelling tot hoe het in de Engelse literatuur wordt gevonden) en negatief is niet niet-positief, omdat er drie fundamentele klassen van getallen zijn: positief, negatief en nul. Dit is logica met drie waarden (niet Chrysippo-Booleaanse): positief is anti-negatief, en negatief is anti-positief, en complementair aan positief is negatief of nul, enz. Dit is de logica van hekjes, en hoewel er twee zijn (plus, min), zijn er nog steeds drie betekenissen: +, 0, -.

    In de Russische historische en wiskundige literatuur staat het ‘gewichtsprobleem’ bekend als het ‘Bachet-Mendeleev-probleem’, genoemd naar de 17e-eeuwse Franse wiskundige. Bachet de Meziriak, die dit probleem plaatste in zijn ‘Verzameling van aangename en onderhoudende problemen’ (1612) en de briljante Russische scheikundige Dmitri Ivanovitsj Mendelejev, die in dit probleem geïnteresseerd was als directeur van de Grote Kamer van Maten en Maten van Rusland.

    De essentie van het “Bachet-Mendelejev-probleem” is het volgende: met welk systeem van gewichten, als je ze één voor één hebt, kunnen alle mogelijke lasten Q worden gewogen van 0 tot de maximale last Qmax, zodat de waarde van de maximale last Qmax zou de grootste zijn van alle mogelijke variaties? Er zijn twee bekende oplossingen voor dit probleem: (1) wanneer de gewichten op een vrije weegschaal mogen worden geplaatst; (2) wanneer gewichten op beide weegschalen mogen worden geplaatst. In het eerste geval" optimaal systeem gewichten" wordt gereduceerd tot het binaire systeem van gewichten: 1, 2, 4, 8, 16, ..., en het "optimale" algoritme of de meetmethode die verschijnt, geeft aanleiding tot binair systeem notatie, die de basis vormt van moderne computers. In het tweede geval is het ternaire systeem van gewichten het beste: 1, 3, 9, 27, 81,…

    Chronologie


    Voordelen van ternaire computers

    Ternaire computers (computers) hebben een aantal voordelen ten opzichte van binaire computers(computers).

    Bij het optellen van trits in ternaire half-adders en ternaire optellers is het aantal optellingen ongeveer 1,5 keer minder dan bij het optellen van bits in binaire half-adders en binaire optellers, en daarom is de optellingssnelheid ongeveer 1,5 keer hoger.

    Bij gebruik van een symmetrisch ternair getalsysteem worden zowel optellen als aftrekken uitgevoerd in dezelfde optel-aftrekker met twee argumenten (twee operanden) of een volledige opteller met drie argumenten (drie operanden) zonder negatieve getallen om te zetten in extra codes, dat wil zeggen zelfs iets sneller dan bij binaire half-optellers en bij binaire volledige optellers bij de omzetting van negatieve getallen in complementaire codes.

    In 1959 ontwikkelde N.P. Brusentsov een unieke computer "Setun" voor de Staatsuniversiteit van Moskou. Het was gebaseerd op het ternaire getalsysteem en hoewel element basis gedeeltelijk binair was, wat leidde tot een overmatig verbruik van onderdelen, de machine bleek zuinig en betrouwbaar te zijn. Tegenwoordig is de ternaire machine alleen in een museum te zien, binaire code won.

    Communicatie met buitenwereld vindt plaats door te schrijven naar een geheugencel met een vooraf ingesteld adres met een waarde die door de host-uitvoerder zal worden verwerkt. U kunt op deze manier bijvoorbeeld een primitieve foutopsporingsconsole implementeren.
    Omdat we een webapplicatie hebben, zullen we deze console weergeven in een authentiek zwart venster met witte letters. Hiervoor zullen we gebruiken kant-en-klaar onderdeel en kansen standaard bibliotheek Dart voor webcontentbeheer.

    +-0. Eerste stappen

    Omdat de code van de werkende is virtuele machine Ik had er al een, ik zal kort de kenmerken van de uitvoering ervan beschrijven.

    Dus voor het flashen naar het geheugen gereed code Laten we een loaderklasse beschrijven die code van de server downloadt en in het geheugen schrijft. Codeer in JSON-formaat, vreemd maar waar, omdat elk binair opnameformaat niet volledig compatibel zou zijn met ternaire code.

    Volgens de canons van het Oberon-systeem voert de lader een wijziging uit van de sprongadressen; eenvoudige wiskunde introduceert een correctie in de code voor de offset van de geladen modulecode ten opzichte van de nulpositie, die door de compiler wordt gespecificeerd tijdens het compileren.

    Bootstrap is een aparte module; dit zijn verschillende opdrachten die machineconstanten in het geheugen instellen (geheugengrootte, moduletabeladres, enz.) en de processor overbrengen naar het adres van de eerste. uitvoerbare opdracht. Bootstrap werd handmatig voorbereid.

    De Core-module is gemaakt naar het beeld en de gelijkenis van de kernel van het Oberon-systeem, de Kernel-module, aangezien dit de kernel is, heeft deze veel directe geheugenbewerkingen, de implementatie van een allocator van dynamische structuren (soms met fouten), de implementatie van een uitzonderingsinterceptor, enz.
    Het is in de Core-module dat we de meest primitieve console implementeren. Om tekenreeksen en getallen uit te voeren, schrijven we de symboolwaarden in een geheugencel, zoals hierboven beschreven. De platformafhankelijke module SYSTEM is virtueel; de compiler vertaalt zijn oproepen rechtstreeks in machinecode.

    Niet-indrukwekkende schermafbeelding.
    U kunt hier de prestaties van de resulterende virtuele machine controleren. Natuurlijk leidde het complexe debuggen van zowel de processor als de compiler tegelijkertijd tot enkele bugs (die ik nog niet heb gevonden), maar als proof of concept leek het resultaat van het werk mij voldoende.

    +-+. Resultaten

    Als resultaat ontvingen we een volledig functionele, uitbreidbare analoog van de N. Wirth-processor van het Oberon 2013-project met een aanpassing voor het ternaire getalsysteem en ternaire code en verschillende modules om in het resulterende systeem te werken.

    In de oorspronkelijke tolk heb ik een poging gedaan om het succes te ontwikkelen en communicatie met de buitenwereld te implementeren met behulp van een analoog van de RS232-poort, met bestandssysteem gebaseerd op het 9p-protocol. En dit is wat ik tegenkwam. Hoewel beide technologieën als platformonafhankelijk worden bestempeld, verliezen ze snel hun platformonafhankelijke karakter wanneer er trits en kenmerken in het concept van platforms worden geïntroduceerd. De basis in de vorm van bytes en bits maakt het porten van dergelijke technologieën mogelijk niet-triviale taak.

    Natuurlijk zou je hier kunnen beargumenteren dat de betekenis en de prevalentie ervan ternaire systemen is gelijk aan nul, maar hier, zoals in de grap over Vovochka, is er een drie-eenheid, maar er zijn geen woorden over platformonafhankelijk. Misschien is dit een soort rem op de verspreiding van ternaire systemen. Alles werkt tenslotte zo.

    Persoonlijk heb ik slechts één gerechtvaardigd gebruik van ternaire machines gezien: de organisatie van tegen inbraak beveiligde communicatiekanalen. Zelfs als er directe toegang tot het kanaal is, heeft een hacker immers op zijn minst een hardware-signaaldecoder nodig, die nog moet worden ontwikkeld. Zo kan de strijd tussen pantser en projectiel leven geven aan de industriële toepassing van de beschreven technologieën.

    +0-. Koppelingen

    Nou ja, misschien een paar links voor degenen die geïnteresseerd zijn.
    • trinary.ru is een prachtige site met rekenmachines, kalenders en een besturingssysteemsimulator van de originele Setunya.
    • ternarycomp.cs.msu.ru is een serieuzere site, met een beschrijving van patenten en algoritmen
    • www.inf.ethz.ch/personal/wirth/ProjectOberon/index.html auteurspagina van het Oberon 2013-project.
    • github.com/kpmy/tri projectrepository
    • bitbucket.org/petryxa/trisc-repository van de originele emulator

    +00. P.S.

    N.P. Brusentsov stierf op 4 december 2014. Ik hoop dat zijn levenswerk niet zal worden vergeten.

    Tags: tags toevoegen