ENIAC ja EDVAC

ensimmäiset elektroniset ja digitaaliset tietokoneet


Helsingin yliopisto, Tietojenkäsittelytieteen laitos
Tietojenkäsittelytieteen historia - seminaari, kevät 2000
Seminaarialustus
Kimmo Hämäläinen
22.2.2000


Esihistoria

Jo ennen 1800-lukua ranskalainen Blaise Pascal (1623-1662) ja saksalainen Gottfried Leibniz (1646-1716) kehittelivät mekaanisia (ja digitaalisia) laskukoneita, joilla voitiin laskea yhteen ja vähentää lukuja toisistaan. Leibnizin koneessa oli myös jako- ja kertolasku. Ilmeisesti maailmalla ei vielä tuolloin ollut kuitenkaan suurta tarvetta laskukoneille.

Merkittävä virstanpylväs digitaalisten laskukoneiden kehityksessä oli englantilaisen Charles Babbagen (1791-1871) elämäntyö. Babbage kehitti kahta konetta; Difference Engineä ja Analytical Engineä, joista kumpikaan ei valmistunut Babbagen elinaikana. Molemmat olivat digitaalisia ja mekaanisia. Difference Enginen kehittelyn Babbage aloitti vuonna 1823, kun hän oli saanut tarpeekseen tähtitieteen laskujen käsin laskemisesta. Difference Enginellä oli tarkoitus laskea korkeintaan kuudennen asteen polynomien arvoja annetuilla kertoimilla. Keskeneräisen koneen kokeilut kuitenkin osoittivat, ettei sen nopeus ollut paljoakaan ihmislaskijaa nopeampi. Differencen Enginen kehittelyssä oli paljon ongelmia ja se osoittautui odotettua suuritöisemmäksi. Babbage koki hermoromahduksen 1827 ja piti lomaa manner-euroopassa. Useat Babbagen kollegoista olivat sitä mieltä, että Difference Engine oli turha ja niin Babbagen rahoituskin lopulta loppui. Babbage lopetti koneen kehittelyn 1833, jolloin hän sai idean yleiskäyttöisemmästä laskukoneesta nimeltään Analytical Engine.

Analytical Enginen pääajatus oli käyttää reijitettyjä pahvikortteja muuttujien, vakioiden ja haluttujen laskutoimitusten syöttämiseksi koneeseen, siitä olisi siis tullut jo ensimmäinen ohjelmoitava laskukone. Idean reikäkorttien käyttämiseen Babbage sai kutomakoneiden lisälaitteesta, jonka ranskalainen Joseph Marie Jacquard oli keksinyt vuonna 1805.

Ruotsalainen Pehr Georg Scheutz (1785-1873) rakensi 1834 poikansa Edvardin kanssa Babbagen ideoiden pohjalta parannellun version Difference Enginestä. Rahoitusvaikeuksien jälkeen Scheutz teki isomman ja paremman version koneesta ja laittoi sen näytille Pariisin näyttelyyn 1855, jossa se voitti kultamitalin.

Babbagen aikalainen oli myös englantilainen George Boole (1815-1864), itseoppinut matemaatikko. Boole määritteli ensimmäisenä formaalin logiikan peruslauseet ja aksiomit matemaattisesti, mikä oli edellytyksenä myöhempien matemaatikkojen von Neumannin ja Turingin töille tietokoneiden parissa.

Sähkömekaaniset ja analogiset laskukoneet

Digitaaliset laskukoneet assosioituivat Babbagen hitaisiin Engineihin ja niitä ei yleisesti pidetty käyttökelpoisina 1800-luvulla ja 1900-luvun alussa. Monet tiedemiehet ja keksijät kehittelivät analogisia ja mekaanisia laskukoneita 1800-luvulla, mm. James Clerk Maxwell ja veljekset James ja William Thomson. William Thomson (alias Lord Kelvin) innostui veljensä 1860 keksimästä laitteesta, jolla voitaisiin ratkaista integraaleja mekaanisesti. Kelvinin kiinnostuksen kohteena oli aallot, ja niiden mallintaminen vaati runsaasti Fourier-sarjojen kertoimien laskemista, jotka voitiin ratkaista tietyistä integraaleista. Kelvin keksi miten mielivaltaista astetta olevat integraalit voitaisiin ratkaista Jamesin laitteesta kehitetyllä versiolla. Kelvin ei voinut kuitenkaan toteuttaa laitetta tekniikan kehittymättömyyden vuoksi.

Vuonna 1931 Vannevar Bush ja Harold Hazen MIT:sta (Massachusetts Institute of Technology) tekivät Thomsonien laitteeseen perustuvan mekaanisen laskukoneen integraalien laskemiseen. Laitteen valmistamisen teki mahdolliseksi C. W. Niemannin keksimä vääntömomentin vahvistin. Bushin laitteen nimeksi tuli Differential Analyzer. Laskukoneella voitiin ratkaista toisen asteen integraaleja 2%-3% tarkkuudella. Laskimen ohjelmoiminen uuteen tehtävään saattoi kestää yli päivän ja vaati useiden fyysisten kontaktien muuttamista, Bush tekikin parannellun version koneesta S. H. Caldwellin kanssa vuonna 1942, jossa mekaaniset kontaktit oli muutettu sähköisiksi. Alkuperäisiä Bushin koneita valmistettiin ainakin seitsemän ja ne olivat käytössä ympäri maailmaa.

Siirtyminen digitaalisiin tietokoneisiin

Noin vuonna 1928 Douglas R. Hartree Manchesterin yliopistosta huomasi, ettei Bushin kone soveltunut hyvin osittaisintegraalien ratkaisemiseen, joita tarvitaan monissa fysiikan ongelmissa. Bushin kone ei ollut myöskään analogisena riittävän tarkka esimerkiksi tähtitieteen laskentatarpeisiin. Tieteellinen tutkimus alkoi myös yleisesti vaatia enemmän laskentaa kuin aikaisemmin, jolloin tiedemiehet olivat lähinnä tehneet tutkimusta havainnoimalla ympäristöä, esim. uusi fysiikan osa-alue kvanttimekaniikka.

Vuonna 1937 Howard H. Aiken Harvardin yliopistosta määritteli tieteelliseen laskentaan soveltuvan tietokoneen ominaisuudet: laskeminen sekä positiivisilla että negatiivisilla luvuilla, usean matemaattisen funktion käyttömahdollisuus, täysi automaattisuus ja matemaattisten tapahtumien mukainen laskentajärjestys. Claude E. Shannon MIT:sta esitti gradussaan 1938 kuinka Boolen algebraa voitiin käyttää monimutkaisten relepiirien analysointiin.

Fyysikko John V. Atanasoff Iowa State Collegesta tutustui Bushin koneeseen differentiaaliyhtälöiden ratkaisutapoja etsiessään. Vuonna 1937 hän oli vakuuttunut siitä, että digitaalinen ja elektroninen laskentatapa oli paras. Atanasoff tajusi myös minkälaisiin nopeuksiin tällaiset laitteet voisivat pystyä ja miten niitä voitaisiin käyttää datan sarjalliseen prosessointiin. Hän oli myös sitä mieltä, että tulisi käyttää binäärilukujärjestelmää, idean hän sai eräältä ranskalaiselta tiedemieheltä.

Vuosina 1939-42 Atanasoff teki kollegansa Clifford Berryn kanssa prototyypin digitaalisesta ja elektronisesta tietokoneesta, jota voitiin käyttää lineaaristen yhtälöryhmien ratkaisemiseen Gaussin eliminoinnin avulla. Tietokoneen nimeksi tuli Atanasoff-Berry Computer (ABC). Atanasoffin tietokone oli tehty tyhjiöputkista ja se käytti reikäkortteja syötteenä. Koneen muisti oli toteutettu pienillä kondensaattoreilla, joita virkistettiin sähköisesti aika ajoin. Laskin käytti myös jo binäärilukujärjestelmää. Kerto- ja jakolasku oli toteutettu yhteen- ja vähennyslaskujen avulla. Atanasoffilla oli myös ideoita yleiskäyttöisemmästä elektronisesta tietokoneesta. John W. Mauchly (1907-1980) Ursinus Collegesta tutustui perinpohjaisesti Atanasoffin ideoihin vuonna 1941. Myöhemmin Mauchly oli yksi ENIACin kehittäjistä. (Vuoteen 1973 asti Mauchly ja J. Presper Eckert olivat virallisesti elektronisen ja digitaalisen tietokoneen keksijät, sen jälkeen keksijäksi nimettiin oikeuden päätöksellä Atanasoff. [5])

Sähkömekaaniset ja digitaaliset tietokoneet

Merkittävä 1900-luvun sähkömekaaninen laite oli vuoden 1944 jälkeen valmistunut Bell Telephone Laboratoriesin relepohjainen, sähkömekaaninen ja digitaalinen tietokone. Projektia johti George R. Stibitz ja tekijöinä olivat mm. insinöörit Samuel B. Williams ja Ernest G. Andrews. Kone pystyi laskemaan kahden seitsennumeroisen luvun kertolaskun sekunnissa ja jakolaskun viidessä. Tietokone painoi kymmenen tonnia, sisälti 9000 relettä ja vaati yli 100m² lattiatilaa. Idea laskukoneen tekemiseen releistä tuli tietysti puhelinkeskuksista.

Aikenin aloitteesta vuonna 1939 aloitettiin digitaalisen tietokoneen valmistus Harvardin yliopiston ja IBM:n yhteistyönä. Työ saatettiin päätökseen vuonna 1944 ja koneen nimeksi tuli IBM Automatic Sequence Controlled Calculator ja myöhemmin Mark I. Tietokone oli tehty vartavasten tieteellistä laskentaa silmälläpitäen ja niinpä sillä voitiin laskea 23-numeroisilla etumerkillisillä luvuilla. Koneen nopeudessa ei sen sijaan ollut hurraamista; kertolasku vei kuusi sekuntia ja jakolasku peräti kaksitoista. IBM:n kone muistutti jo paljon nykyisiä tietokoneita, sillä se ohjelmoitiin kolmiosaisia konekäskyjä käyttäen reikänauhalla.

Ballistic Research Laboratory, Aberdeen, (Virginia, USA)

Ensimmäisen (jos ABC:tä ei lasketa) digitaalisen ja elektronisen tietokoneen syntypaikka oli USA:n armeijan Ballistic Research Laboratory (BRL). BRL:n johdossa oli ensin vuosina 1935-1941 Hermann H. Zornig ja sen jälkeen Leslie E. Simon. Johtavana tiedemiehenä BRL:ssä toimi Zornigin valitsema maineikas Oswald Veblen. Sodan ajaksi BRL:ään värvättiin Veblenin avulla kymmeniä huipputiedemiehiä, mm. kuuluisa astronomi E. P. Hubble ja matemaatikko Herman H. Goldstine. BRL:n tärkeimpiä tehtäviä oli taulukoiden laskeminen tykistölle ja pommikoneille. Ballistiikkalaskennan johdossa oli Paul N. Gillon, joka teki Pennsylvanian yliopiston Moore Schoolin (Moore School of Electrical Engineering) kanssa sopimuksen yliopiston tiloissa olevan Bushin differential analyzerin käyttämisestä BRL:n laskentatarpeisiin sodan ajaksi. Gillon aloitti myös naisien kurssituksen Moore Schoolissa ballistiikkalaskentaan. Bushin koneen lisäksi laboratorioon hankittiin IBM:n reikäkortti- ja kertolaskukoneita.

BRL:n laskemia taulukoita käytettiin tykistössä määrittelemään piipun kulma halutulle ammuksen lentomatkalle. Taulukot piti laskea erikseen jokaiselle erilaiselle tykki-ammus-lataus -kombinaatiolle. Jokaista lentorataa varten piti tehdä noin 750 kertolaskutoimitusta ja yhteen taulukkoon tarvittiin noin 3000 lentorataa. Bushin koneella yhden taulukon laskeminen kesti 30 päivää. Ennen taulukoiden saamista uusia aseita ei voitu ottaa käyttöön rintamalle, joten niiden laskemisella oli kiire ja Gillon ja Goldstine etsivät jatkuvasti uusia keinoja laskennan nopeuttamiseksi.

ENIACin synty

John Mauchly innostui vuonna 1941 keskusteluista Atanasoffin kanssa ja sai häneltä uusia ideoita, vaikka hän oli jo aiemmin askerrellut digitaalisen elektroniikan kanssa yrittäessään kehittää ratkaisuja sään ennustukseen. Mauchly kirjoitti elokuussa 1942 muistion ideoistaan, joka kiersi Mauchlyn kollegojen parissa Moore Schoolissa. Muistio päätyi nuoren (24v) vastavalmistuneen elektroniikkainsinöörin J. Presper Eckertin käsiin, joka puolestaan innostui Mauchlyn ideoista siinä määrin, että opiskeli itsensä laskuripiirien asiantuntijaksi alan suppean kirjallisuuden pohjalta.

Sähkömekaaninen laskuri oli kiekko, jolla esitettiin yksi kymmenjärjestelmän numero ja jota käänneltiin (kasvatettiin yhdellä) sähköimpulsseilla. Laittamalla useita laskureita rinnakkain voitiin esittää kymmenjärjestelmän lukuja siten, että ympäri mennessään laskurikiekko aina kasvatti seuraavan kiekon arvoa yhdellä (kuten auton matkamittari). Elektroninen laskuri tehtiin kymmenellä vierekkäisellä (kahdesta tyhjiöputkesta tehdyllä) kiikulla (flip-flop), jossa vain yksi kiikku on kerrallaan 1 ja muut 0. Ykkösen sisältämän kiikun asema rivistössä ilmoittaa mitä numeroa laskuri esittää. Rinnakkaiset kiikut oli lisäksi kytketty renkaaksi niin, että laskuri meni ympäri samaan tapaan kuin kiekkokin. Tyhjiöputkilaskureita voitiin linkittää sitten kuin kiekkojakin ja näin esittää halutun kokoinen luku. ENIACin akkurekisterit perustuivat tällaisiin tyhjiöputkilaskureihin.

Näihin aikoihin (n. 1942) Mauchly, Eckert ja Goldstine kehittelivät ja testasivat tyhjiöputkiin perustuvia elektronisia piirejä Moore Schoolissa. Tyhjiöputkia pidettiin epäluotettavimpina kuin releitä ja niiden käytöstäkin tiedettiin hyvin vähän - toisin kuin releiden, joita oli jo pitkään käytetty esim. puhelinkeskuksissa. Oikeastaan mitään ei siis ollut valmiina, Eckert kehitti jopa oman oskilloskoopin ENIACin testaamista varten, koska riittävän hyvät laitteet olisivat maksaneet lähes puolet ENIACin budjetista.

Epäileviä kollegoja riitti, sillä hallituksen siviilielin uusien aseiden kehittämiseen toiseen maailmansotaan NDRC (National Defense Research Committee) oli aiemmin tutkinut tyhjiöputkipiirejä vuosia ja todennut ne liian epäluotettaviksi, lisäksi kammoksuttiin tarvittavien tyhjiöputkien suurta määrää. Yleinen ajattelutapa oli, että tietokoneen luotettavuus oli ensisijaista, eikä nopeus ollut tärkeää, vaan laskentatehon lisäämiseksi lisättäisiin vain koneiden määrää. Trendinä oli tietokoneiden yksinkertaistaminen ja kustannusten laskeminen.

Maaliskuussa 1943 Goldstine keskusteli suunnitellusta tietokoneesta Moore Schoolin johtajan J. Grist Brainerdin ja ballistisesta laskennasta BRL:ssä vastaavan Paul Gillonin kanssa. Brainerd ja Gillon olivat hankkeen kannalla ja niin myöhemmin kesäkuussa Moore Schoolin ja BRL:n välille tehtiin sopimus tietokoneen valmistamisesta. Tietokone kasattaisiin Moore Schoolissa ja myöhemmin siirrettäisiin BRL:n laskentarakennukseen (joka oli vielä rakentamatta). Brainerd laski projektin maksavan n. $150.000. Ennen töiden aloittamista pidettiin kokous, jossa Gillon risti tietokoneen ENIACiksi (Electronic Numerical Integrator And Computer).

ENIAC tulisi sisältämään lähes 18.000 tyhjiöputkea, 70.000 vastusta, 10.000 kondensaattoria ja 6.000 kytkintä (mm. relettä). Johtavana insinöörinä toimiva Eckert tiedosti, että luotettavuuteen tulisi panostaa ja suunnitteli alhaisemman jännitteen käyttämistä tyhjiöputkissa kuin normaalisti niiden käyttöiän pidentämiseksi. Virtaa ei myöskään katkaistaisi koskaan koneesta, jotteivat tyhjiöputkien hehkulangat rasittuisi. ENIACissa tultaisiin käyttämään 0,1MHz:n kellopulssia, joka oli muuten syynä laadukkaan oskilloskoopin tarpeeseen. Eckert suunnitteli kriittisimmät piirit itse ja määräsi ettei muunlaisia saisi käyttää. (seur. kuva on ENIACista.)

yleiskuva ENIACista
Suunnittelijoiden ydinryhmä oli Eckert, Mauchly, Goldstine, Arthur Burks ja Kite Sharpless, lisäksi oli kymmenkunta muuta insinööriä (mm. Goldstinen vaimo Adele). Projektin edetessä huomattiin, että laskennan nopeus ja reikäkorttikoneiden hitaus tulisi sovittaa jotenkin yhteen siten ettei laskentaa tarvitsisi hidastaa. Ratkaisuksi keksittiin vakionlähetin (constant transmitter), joka olisi releihin perustuva muisti, johon data luettaisiin reikäkorteilta ja sitten lähetettäisiin tarvittaessa akkurekistereihin.

ENIACin rakenne

ENIAC oli U:n muotoinen, 30m pitkä, 3m korkea ja painoi 30 tonnia. ENIAC jakaantui 40:een paneeliin, joista 16 oli U:n molemmilla sivuilla ja 8 päädyssä. Paneelit muodostivat 30 toiminnallista yksikköä. Paneelit U:n sisältä katsottuna vasemmalta oikealle ovat englanniksi [7]:
    1.     Control and initiating unit    18-20. Multiplier
    2.     Cycling unit                   21-28. Accumulators 11 - 18
    3-4.   Master Programmer              29-30. Second function table
    5-6.   First function table           31-32. Third function table
    7-8.   Accumulators 1 and 2           33-34. Accumulators 19 and 20
    9.     Divider and square rooter      35-37. Constant transmitters
    10-17. Accumulators 3 - 10            38-40. Printer
Akkurekisterit (accumulators) olivat siis tyhjiöputkilaskureilla toteutettuja yhden luvun muisteja, jotka automaattisesti lisäsivät niille lähetetyn luvun omaan arvoonsa. Paneelin 1 initaatioyksikkö sisälti lähinnä on/off-kytkimen ja laskennan käynnistysnapin. Cycling unit kehitti tarvittavan kellopulssin. Master Programmer -yksiköllä voitiin toteuttaa toistorakenteita (silmukoita) laskennassa ja määrittää vaikka yksikköjen välisiä kytkentöjen muutoksia tietyllä kellopulssilla.

Funktiotauluyksiköt (function table) koostuivat irrotettavista levyistä, joissa oli kytkinmatriisi 104:lle 12-numeroiselle, etumerkilliselle luvulle. Käsin levyjen kytkimiä kääntelemällä voitiin syöttää (read-only) taulukkotietoa koneeseen. Paneelissa 9 oli jakolasku- ja neliöjuuriyksikkö, jonka nopeus oli keskimäärin 2,8 millisekuntia per laskutoimitus. Paneeleissa 18-20 oli jakolaskuyksikkö, joka pystyi laskemaan yhden jakolaskun noin 24:ssä millisekunnissa.

Printteri (38-40) luki reikäkortteja ja myös teki niitä. Reikäkortteja voitiin käyttää myös laskennan välituloksien tallentamiseen, elleivät akkurekisterit riittäneet. Reikäkortteihin tulostetut tulokset saatiin ihmisten luettaviksi taulukoiksi IBM Tabulator -koneella. Koska reikäkortilta lukeminen oli hidasta, niillä olevat tiedot luettiin vakion lähettimien (35-37) sisältämään relemuistiin.

Yhteen- ja vähennyslasku ENIACissa

Yhteenlaskuun kuluva aika oli 0,2 millisekuntia. Siinä ajassa voitiin siirtää kymmennumeroinen etumerkillinen luku yksiköstä toiseen käyttämällä yhtätoista johdinta - kymmenen numeroille ja yksi etumerkille. Kymmenjärjestelmän luvut lähetettiin rinnakkain siten, että pulssien määrä kullakin johtimella vastasi siirrettävää numeroa ja etumerkin siirtämiseen käytetyllä johtimella nolla pulssia vastasi plussaa ja yhdeksän pulssia miinusta. Erillisiä yhteen- tai vähennyslaskuyksiköitä ei ollut, vaan akkurekisterit automaattisesti lisäsivät vanhaan arvoonsa niille lähetetyn luvun. Vähennyslasku toteutettiin muuttamalla vähennettävä luku N luvuksi (10^10-N), ns. ykkösen komplementiksi, ja lisäämällä näin saadun luvun vastaluku. Esim. vähennyslaskut 8429-1843 ja 1843-8429 [1]:

     0 0000008429       0 0000001843
   + 9 9999998157     + 9 9999991571
   --------------     --------------
    10 0000006586       9 9999993414

Jossa 9999998157 on luvun 1843 ja 9999991571 on luvun 8429 ykkösen komplementti. Nolla ja yhdeksän yhteenlaskettavien lukujen edessä vastaavat etumerkkejä. Etumerkit siis laskettiin yhteen aivan kuten ne kuuluisivat itse lukuun (0+9+muistinumero=10), mutta kymmeniä ei enää otettu huomioon (10 -> 0).

ENIACin ohjelmointi

ENIACissa ei ollut vielä muistiin tallennettua ohjelmaa, vaan sen osaamat operaatiot olivat ennalta määriteltyjä ja laitteisiin (yksiköihin) rakennettuja. Useimmissa yksiköissä oli erikseen pistokkeet johdoille, joita pitkin tietoa lähetettiin (output) ja vastaanotettiin (input). Akkurekistereissä oli kaksi kanavaa lukujen lähetykseen ja viisi vastaanottoon [2] sekä kaksitoista kanavaa ohjelmapulsseille.

Ohjelmointi tarkoitti johtoverkoston rakentamista yksiköiden välille ja sopivien kytkinasetusten tekemistä kertomaan miten yksiköt käyttäytyisivät milläkin ohjelmapulssilla. Ohjelmapulssi oli eräänlainen yhden tapahtuman tai käskyn merkki. Yksiköt tekivät kytkimillä asetetun operaation sen mukaan mihin kanavaan ohjelmapulssi tuli ja operaation jälkeen ne lähettivät uuden ohjelmapulssin jälleen johonkin kytkimillä ja johdoilla asetettuun yksikköön (tai yksiköihin). Esim. Akkurekisteri voitiin ohjelmoida lähettämään luku (tai sen ykkösen komplementti) johonkin output-kanavaan viisi kertaa ja sitten lähettämään ohjelmapulssi eteenpäin merkiksi operaation päättymisestä; tai akkurekisteri voitiin ohjelmoida ottamaan vastaan luku kaksi kertaa tietystä input-kanavasta tiettyyn (ohjelma)kanavaan tulleen ohjelmapulssin jälkeen. ENIAC oli rinnakkaiseen laskentaan kykenevä kone siinä mielessä, että ohjelmapulssi voitiin lähettää eteenpäin yhdelle tai useammalle yksikölle yhtäaikaa ja niin voitiin vaikkapa laskea lukuja yhteen viidessä akkurekisterissä samanaikaisesti.

Seuraavaksi esimerkki ohjelman toiminnasta. Ohjelma laskee taulukon lukujen 0-99 neliöille [1]. Ohjelmaan osallistuvat kuusi yksikköä ilmenevät seuraavasta kuvasta. Kuvan nuolet kuvaavat ohjelmapulssien ja/tai tiedon siirtymistä.

kaaviokuva esim. ohjelmasta
Aluksi oletetaan, että kuvan akkurekisterit 1 ja 2 (merk. acc1 ja acc2) sisältävät kumpikin luvun nolla, ja Master Programmer -yksikkö (MP) on asetettu lähettämään ohjelmapulssin aina, kun se itse saa ohjelmapulssin - kuitenkin yhteensä vain 100. MP siis määrää milloin ohjelma on päättynyt. Lisäksi "read-only relemuisti" Constant Transmitter (CT) sisältää luvun yksi. Jokaista kuvan nuolta vastaa yksi tai useampi kytkentä yksikköjen välillä.

Ohjelma käynnistetään painamalla nappia Initiating Unitissa, joka lähettää ohjelmapulssin MP:lle (1). MP lähettää ohjelmapulssin tulostimelle ja pienentää samalla sisäistä laskuriaan yhdellä (2). Tulostin lähettää ohjelmapulssin molemmille akkurekistereille (3), mikä aiheuttaa sen että ne lähettävät sisältönsä tulostimelle (4) (käytännössä ehkä eri input-kanaviin). Samalla kun tulostin tulostaa ensimmäisen rivin "0 0", acc1 lähettää sisältönsä kaksi kertaa acc2:lle (5), joka lisää kaksi kertaa nollan arvoonsa. Seuraavaksi acc1 lähettää ohjelmapulssin CT:lle (6), mikä aiheuttaa sen, että CT lähettää luvun yksi molemmille akkurekistereille (7) ja samalla ohjelmapulssin MP:lle (ehkä eri kanavaa pitkin). Seuraavan kierroksen alussa molemmat akkurekisterit sisältävät luvun yksi ja kierros alkaa jälleen nuolesta (2). Näin jatketaan, kunnes MP:n laskuri on nollassa ja se pysäyttää ohjelman. (Allekirjoittaneen yllätykseksi ohjelma tuntuu jopa toimivan ilman ainoatakaan kertolaskua.)

Huomioitavaa on, että tässä vain kuvattiin erään ohjelman toiminta, eikä itse ohjelmointia, joka siis tarkoittaa sopivien johtojen vetämistä yksikköjen välille sekä yksikköjen reagoinnin määräämistä ohjelmapulssin saapuessa johonkin yksikön kanavista.

Kohti EDVACia

Vaikka ENIAC saatiin käyttökuntoon vasta kesäkuussa 1946, sen suunnitelmalliset ongelmat oli jo ratkaistu aiemmin ja syksyllä 1944 näytti siltä, että jäljellä on vain rakentamisen loppuun saattaminen. Kesällä 1944 Goldstine tapasi sattumalta kuuluisan matemaatikon John von Neumannin Aberdeenin rautatieasemalla. Von Neumann kiinnostui kovasti tietokoneprojektista, jossa Goldstine kertoi olevansa mukana. Elokuussa 1944 von Neumann alkoi käymään säännöllisesti BRL:n suunnittelukokouksissa.

ENIAC oli kömpelö ja työläs ohjelmoida, eikä siinä ollut kuin 20 elektronisesti käsiteltävää muistipaikkaa (akkurekisterit). ENIACissa oli myös liian paljon tyhjiöputkia ja se oli liian iso. Erilaisten ongelmien ratkaisua rajoitti se, että ENIACin yksiköt määräsivät minkälaisia operaatioita sillä voitiin tehdä. Luvuiksi koodattujen käskyjen käyttäminen tietokoneen ohjelmointiin oli jo keksitty, mutta ei tiedetty minkälaisia käskyjen pitäisi olla ja minne ne voitaisiin tallentaa.

Eckert keksi, että hiljakkain keksittyjä nesteellä täytettyjä sylintereitä voitaisiin käyttää muistina elektronisissa piireissä. Nestesylinterien idea oli hidastaa sähköpulssin nopeutta piirissä, jolloin johdinsilmukassa voisi olla matkalla useita pulsseja yhtäaikaa. Sähköpulssin hidastaminen perustui siihen, että se muutettiin sylinterin alussa värähtelevän (kvartsi)kiteen avulla paineaalloksi, joka kulkee elohopeanesteen läpi ja muutetaan takaisin sähköpulssiksi toisessa päässä sylinteriä samanlaisen kiteen avulla (ks. kuva).

elohopeasylinteri
Elohopeasylinterin läpi mennyt pulssi on kuitenkin vaimentunut ja sen tähden tarvitsee vahvistusta, joka saadaan aikaan noin kymmenen tyhjiöputken vahvistinpiirillä. Koska paineaalto elohopeassa etenee vain äänen nopeudella, voidaan sähköisesti laittaa useita pulsseja elohopeaputkeen ennen kuin ne tulevat toisesta päästä ulos. Sähköpulssien oli tarkoitus kiertää sylinterin ja vahvistimen läpi niin kauan kuin virta oli päällä, ja siten toimia elektronisena muistina. Vahvistinosassa myös synkronisoitiin lukeminen ja kirjoittaminen kellosignaalilla. Esimerkiksi 1,45 metrin sylinteriin voitiin varastoida 1000 bittiä, mikä tarkoitti noin sata kertaa tehokkaampaa tyhjiöputkien käyttöä kuin pelkkiin kiikkuihin perustuvassa muistissa. Kuvan vahvistinosa sisälti myös piirilogiikan, jolla tiedon lukeminen oli mahdollista (yksinkertaisesti AND-portilla).

Elokuussa 1944 ajatukset uudesta tietokoneesta olivat kypsyneet siinä määrin, että Goldstine ehdotti kirjeessään BRL:n johtajalle Leslie Simonille uuden "parannellun ENIACin" rakentamista. Simon ja Moore Schoolin johtaja Brainerd kannattivat asiaa. Koneen nimeksi tuli Electronic Discrete Variable Automatic Computer, eli EDVAC.

Von Neumannin First Draft

Vuoden 1945 kesällä von Neumann kirjoitti kuuluisan raporttiluonnoksensa "First Draft of a Report on the EDVAC" (joka löytyy ainakin osin lähteestä [3]). 101-sivuinen raporttiluonnos perustui syksyn -44 ja kevään -45 ideoihin, joista kaikki eivät olleet von Neumannin omia. Raporttiluonnos sisälti loogisen mallin tietokoneelle - malli, joka on käytössä vielä tänäänkin. Von Neumann jakoi raportissaan tietokoneen viiteen osaan: Laskentayksikköön (central arithmetical organ, CA), kontrolliyksikköön (central control organ, CC tai C), muistiin (memory, M), syötelaitteeseen (input, I) ja tulostuslaitteeseen (output, O). (Elimiin viittaavat termit johtuivat siitä, että von Neumann käytti ihmisen hermojärjestelmän mallia käsittelevää W. S. McCullochin ja W. Pittsin kirjan notaatiota.)

Edellä mainittujen lisäksi malliin kuului vielä ulkoinen muisti (outside recording medium, R), josta I lukee ja johon O kirjoittaa. Muisti toimi puskurina R:n ja C:n välissä siten, että tieto kulki aina I:stä M:n kautta C:hen ja C:stä M:n kautta O:hon. C luki käskyt M:stä ja suoritti ne yksitellen CA:n avulla. Von Neumann antoi raportissaan yksinkertaisen tietokoneen käskykannan ja myöhemmin erillisessä kirjeessä sort ja merge-algoritmien toteutuksen tälle käskykannalle, joita pidetään maailman ensimmäisinä tietokoneohjelmina.

EDVACin erot ENIACiin

EDVAC oli täysin sarjallisesti toimiva tietokone, joka suoritti käskyjä yksi kerrallaan ja vieläpä mahdollisimman pienissä osissa. Sarjallisuus yksinkertaisti laitteistoa ja helpotti ohjelmoijan työtä, koska eri operaatioiden kestoaikoja ei tarvinnut ottaa huomioon. ENIAC laski kymmenjärjestelmän luvuilla, kun taas EDVAC käytti (von Neumannin aloitteesta) binäärijärjestelmän lukuja. Binäärijärjestelmän ansiosta piirit voitiin tehdä paljon yksinkertaisimmiksi, joka tarkoitti vähempää tyhjiöputkea. Esimerkiksi yhteen- ja kertolaskussa kahdella binäärinumerolla (1 tai 0) on molemmissa vain neljä eri tapausta, kun taas kymmenjärjestelmässä kertolaskussa on 100 eri tapausta (kertotaulu). Yksinkertaistaminen tarkoitti määrällisesti enemmän operaatioita, mutta jo silloin ajateltiin, että elektroniikassa voidaan tehdä paljon operaatioita nopeasti - toisin kuin aiemmissa sähkömekaanisissa laitteissa. (kuva EDVACista.)
EDVAC
EDVACissa oli paljon enemmän elektronista muistia (1024 44-bittistä sanaa) kuin ENIACissa (20 10-numeroista lukua) ja se oli toteutettu kiikkujen sijasta elohopeasylintereillä. Sekä käskyt että data pidettiin numeromuotoisena elektronisessa muistissa. Ulkoisena massamuistina voitiin käyttää magneettinauhaa tai reikäkortteja. EDVACilla voitiin ratkaista monipuolisempia ongelmia kuin ENIACilla, koska ENIAC osasi vain hyvin rajallisen määrän yksinkertaisia operaatioita, kun taas EDVACin käskyt mahdollistivat lukuisien ja monimutkaisten algoritmien koodaamisen. EDVACissa oli numeroidut muistipaikat, joihin käskyt viittasivat.

EDVACin normaalit käskyt olivat viisiosaisia: Operaatiokoodi, 1. lähdeosoite, 2. lähdeosoite, kohdeosoite ja seuraavan käskyn osoite. Operaatiokoodi saattoi siis esim. kertoa, että 1. ja 2. osoitteesta löytyvät luvut lasketaan yhteen CA:ssa ja tulos tallennetaan kohdeosoitteeseen. Ehdollinen hyppykäsky vertasi 1. ja 2. osoitteen lukuja ja vertailun tuloksesta riippuen seuraava käsky haettiin kolmannesta tai neljännestä osoitteesta. EDVACissa oli myös erilliset I/O-käskyt magneettinauhalta lukemista ja kirjoittamista varten, jotka olivat kuusiosaisia. I/O-käskyissä 2. osoite oli jaettu kahteen osaan, joista ensimmäinen kertoi oliko kyseessä luku- vai kirjoitusoperaatio ja toinen kertoi magneettinauhan numeron. I/O-käskyjen 1. osoite kertoi aloitusmuistiosoitteen ja 3. osoite lopetusosoitteen luvulle/kirjoitukselle, 4. osoite kertoi seuraavan käskyn hakuosoitteen ja operaatiokoodi kertoi käskyn tyypin olevan I/O-käsky.

Seuraavassa taulukosta selviävät EDVACin ja ENIACin tekniset tiedot ([3] ja [4]). Vaikka EDVAC valmistui jo 1949 se saatiin käyttökuntoon BRL:ään vasta myöhään 1951 teknisten ongelmien takia, kuten kaikkien vahvistinpiirien uusiminen liian heikkotehoisina ja I/O-laitteiden suunnitteleminen ja asentaminen.

ENIAC EDVAC ENIAC EDVAC
käyttövuodet 1946-55 1949-62 (ainakin) valmistaja Moore School of Electrical Engineering, University of Pennsylvania
käyttäjä U.S. Army Ordnance Corps Ballistic Research Lab, APG
hinta (n.) $750.000 $467.000 tilavaatimus n. 160 m² n. 45 m²
virrankulutus n. 170 kW n. 50 kW keskimäär. vikaväli 5,6 h 8 h
lukujärj. 10-järj. binääri lukualue 10^10-1 - 1-10^10 2^43-1 - 1-2^43
laskenta rinnakkainen sarjallinen kellotaajuus 0,1 MHz 1 MHz
sis. muisti tyhjiöputket, yht. 20 lukua nestesylinterit, yht. 1024 sanaa ulk. muisti IBM reikäkortit IBM reikäkortit, magneettinauha
yhteenlasku 0,4 ms 0,9 ms kertolasku 3,0 ms 2,9 ms
jakolasku 24 ms 2,9 ms tyhjiöputket 17.468 3.563
vastukset n. 70.000 n. 12.000 diodit 7.200 8.000
kondens. n. 10.000 n. 5.500 magn. osat 4.100 1.325


Lähteet