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.
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.
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])
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.
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.
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.)
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. PrinterAkkurekisterit (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.
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).
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ä.
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.
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).
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.
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 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 |
- [1] Goldstine, Herman H., The computer from Pascal to von Neumann, Princeton University Press, 1972
- [2] Wilkes, Maurice Vincent, Automatic Digital Computers, Methuen & Co. Ltd, 1956
- [3] Stern, Nancy, From ENIAC to UNIVAC, Bedford Digital, 1981
- [4] Electronic Computers Within The Ordnance Corps (http://ftp.arl.mil/~mike/comphist/61ordnance/index.html)
- [5] The Atanasoff Berry Computer (http://www.cs.iastate.edu/jva/jva-archive.shtml)
- [6] John W. Mauchly and the Development of the ENIAC Computer (http://www.library.upenn.edu/special/gallery/mauchly/jwm9.html)
- [7] USA:n War Departmentin lehdistötiedote 30.1.1946. (Löytyy lähteen [6] sivuilta.)