Mälardalens högskola Institutionen för datateknik (IDt) Västerås Von Neumanns bidrag till datavetenskapen John von Neumann. Källa: http://www.physics.umd.edu/robot/neumann.html Vetenskapsmetodik för teknikområdet, CT3620, Västerås, 2004-10-17 Författare: Johan Åkerberg Examinator: Gordana Dodig-Crnkovic 1
SAMMANFATTNING Att John von Neumann spelade en avgörande roll inom den moderna datorvetenskapen och programmeringstekniken är det inget tvivel om. Han var en briljant matematiker som definierade begrepp som maskinkod, där maskinkoden hämtas från ett minne. Datorerna kan tolka och utföra maskinkoden som finns lagrad i minnet, s.k. von Neumann-arkitektur. Denna till synes enkla lösning på problemet att de tidigaste datorerna programmerades med hjälp av sladdar och strömbrytare, möjliggjorde att datorerna kunde användas mer effektivt och bli användbara för andra ändamål än rena beräkningsverktyg. Han introducerade även nya typer av minnen som lade grunden för dagens moderna DRAM (Dynamic Random Access Memory). Von Neumann lade även grunden till den moderna programmeringstekniken med introduktionen av subrutinsbibliotek, där lösningar på vanligt förekommande problem kan återanvändas, vilket blev möjligt med hjälp av adresseringsoperatorn. Von Neumann programmerade även den första sorteringsalgoritmen, där en godtycklig mängd data kan sorteras i alfabetisk ordning. När von Neumann återvände till logiken under 1940-talet undersökte han möjligheterna till självreproducering. Arbetet resulterade i cellautomater, där en maskin som har en ritning över sig själv kan reproducera sig så att även ritningen reproduceras till kopian, så att även kopian kan reproducera sig. DNA skulle senare visa sig ha just dessa egenskaper. Von Neumanns arbete med cellautomater lade grunden för över 50 års forskning inom självreproducerande och självläkande maskiner för att utforska rymden och andra svårtillgängliga miljöer. 2
INNEHÅLLSFÖRTECKNING SAMMANFATTNING... 2 INLEDNING... 4 VON NEUMANNS BIDRAG TILL DATAVETENSKAPEN... 5 Vem var John von Neumann?... 5 Von Neumann-arkitektur... 5 Subrutinsbibliotek... 7 Dynamiska minnen... 7 Sorteringsalgoritm... 7 Artificiellt liv... 8 SLUTSATSER... 9 REFERENSER... 10 3
INLEDNING John von Neumann (1903-1957) var en briljant matematiker och fysiker. Han lade grunden för sina bidrag till datorvetenskapen redan på 1920-talet, då han började arbeta med matematisk logik och mängdlära. Han och andra logiker trodde att man kunde konstruera ett formellt system av logik, mängdlära och grundläggande matematik. Förhoppningen var att konstruera ett formellt system sådant att systemet består av grundläggande teorem och att allting kan bevisas inom systemet. 1925 publicerade von Neumann sin första artikel i matematisk logik och han var den som var närmast att konstruera detta formella system. Men 1931 bevisade Kurt Gödel att något liknande system inte kan existera. En del av beviset i detta teorem skulle von Neumann senare använda för att utveckla konceptet med adresseringsoperatorn vilken är grunden i modern programmering [Burks02]. Den elektroniska datorrevolutionen började på tidigt 1940-tal, då datorerna inte var konstruerade för att lösa ett begränsat antal uppgifter, utan kunde programmeras för att klara i stort sett vilka uppgifter som helst om datorns resurser räckte till. Programmeringen av datorerna var manuell och gjordes genom att ansluta sladdar och ställa in strömbrytare, data som skulle bearbetas lagrades på hålkort och programmeringen tog alltifrån en halvtimme till en hel dag. Den första datorn av denna typ var ENIAC (Electronic Numerical Integrator and Calculator), byggd av J. Presper Eckert och John Mauchly mellan 1943 och 1946. ENIAC byggdes för att beräkna ballistiktabeller för artilleriet [Hennesy03]. Denna typ av dator var både stor och dyr och eftersom datorn var tvungen att programmeras om mellan varje körning av olika program blev den inte tillräckligt kostnadseffektiv för den breda massan. 1944 blev John von Neumann intresserad av ENIAC, då han letade efter snabba beräkningsverktyg för beräkningar av den första atombomben [Aspray90], vilket han givetvis inte kunde avslöja. Med von Neumanns bakgrund var det kanske inte så konstigt att han fokuserade på realtidsberäkningar istället för på tidigare beräknade tabeller som användes för uppslag. Efter att von Neumann fått en introduktion i ENIAC s arkitektur och programmering av Eckert och Mauchly, såg von Neumann förbryllad ut och ifrågasatte varför ENIAC är konstruerad som den är. Eckert och Mauchly frågade då hur det skulle se ut men von Neumann svarade efter ett tag att han inte visste [Burks02]. Detta var början till hur von Neumann senare skulle presentera en datorarkitektur som nästan alla moderna datorer baseras på än i dag. 4
VON NEUMANNS BIDRAG TILL DATAVETENSKAPEN Vem var John von Neumann? John von Neumann föddes i Budapest, Ungern, 1903 och dog 1957 i Washington DC. Innan von Neumann var färdig med gymnasiet behandlade matematiker honom som en kollega. Vid 20 års ålder fick han sin doktorstitel och vid 30 års ålder blev han den yngsta professorn vid Institute for Advanced Study vid Princeton University. I Amerika fick von Neumann ett rykte att han gärna delade med sig av sina kunskaper. Von Neumann brydde sig inte om vem som fick äran, nöjet var på hans sida eftersom han fick använda sina kunskaper. Folk gav von Neumann gärna problem som han löste i huvudet på ett par minuter, som andra hade löst i bästa fall på ett par timmar. Von Neumann kämpade för att hans genombrott inom datavetenskapen skulle komma den breda massan till användning, inte att det skulle patenteras. Detta för att inte hämma utvecklingen och undvika att endast ett fåtal skulle få ta del av den nya tekniken [Parshall98]. Von Neumann-arkitektur Stored program concept, att lagra program i minnet, är ett av de viktigaste bidragen i datorns historia. Att just lagra program i minnet, kallas för von Neumann-arkitektur efter John von Neumann. Den stora fördelen är att datorn enkelt kan byta program genom att ladda in ett nytt program och exekvera det, vilket var en stor fördel jämfört med tidigare datorer där programmen bestod av att ansluta sladdar och ställa in strömbrytare. Nästan alla datorer som har producerats de senaste 50 åren har varit konstruerade med von Neumann-arkitektur [Aspray90]. Von Neumann hade tidigare arbetat med matematisk logik och mängdlära och för honom föll det sig naturligt att representera programmen med siffror, s.k. maskinkod. Maskinkoden, som först definierades av von Neumann [Burks02], är uppbyggd av en instruktion och ingen eller flera operander, likt matematiska funktioner [Godfrey93]. Flödet i en klassisk von Neumann-arkitektur: 1. Läs in instruktionen som programräknaren (Program Counter, PC) pekar på. 2. Utför (exekvera) instruktionen 3. Ändra PC så att det pekar på nästa instruktion. 4. Läs in instruktionen som PC pekar på. 5. O.s.v. I ovanstående instruktionsbearbetningsmaskin kan maskinkod bearbetas för att lösa uppgiften programmeraren har givit åt datorn. Denna maskin kallas för kontrollenhet (Control Unit, CU), och styr övriga komponenter i processorn (Central Processing Unit, CPU). Processorn består dessutom av en ALU (Arithmetic and Logic Unit) som utför alla beräkningar [Aspray90]. 5
De fem beståndsdelarna i en von Neumann arkitektur. Källa: [Aspray90], bearbetad 2004 I denna enkla och begränsade beskrivning av von Neumann-arkitekturen missas lätt en viktig detalj, adresseringsoperatorn som var viktig för att arkitekturen skulle fungera i praktiken. Med hjälp av adresseringsoperatorn kan man spara en adress i minnet för att senare läsa in det som finns lagrat på denna adress och referera till adressen som finns lagrad där, det vi idag kallar för pekarhantering. Adresseringsoperatorn som von Neumann uppfann var något som föddes från delar av beviset i Gödels ofullständighetsteorem [Burks02]. För att tydliggöra hur kontrollenheten styr flödet när instruktioner betas av delas flödet upp i fem olika steg som förklaras närmare. Instruktionshämtning Här läses instruktionen som PC pekar på in i ett register, där snabbtillgänglig data lagras, instruktionsregistret. PC ändras så det pekar på nästa instruktion. Instruktionsavkodning Data i instruktionsregistret tolkas, vilken är instruktionen, var finns operanderna och var ska resultatet av instruktionen lagras? Exekvering Med hjälp av informationen från instruktionsavkodningsfasen kan kontrollenheten programmera upp ALU för att beräkna resultatet av instruktionen. Minnesaccess Resultatet av instruktionen skrivs tillbaka till minnet. Registerskrivning Resultatet av instruktionen skrivs tillbaka till internregister och PC ändras vid hoppinstruktioner. Ovanstående uppdelning är inte på något sätt associerad till von Neumann-arkitekturen utan har presenterats för att beskriva flödet mer detaljerat. Ovanstående uppdelning finns däremot i mer avancerad processordesign med pipelining [Hennesy03]. Det bör noteras att inte alla instruktioner passerar alla fem faserna, utan endast de faser som krävs för den aktuella instruktionen, t.ex. har en hoppinstruktion ingen minnesaccess. I von Neumann-arkitekturen hämtas instruktionerna och exekveras i sekventiell ordning och eftersom programmen ligger lagrade i minnet så kan man skriva program som förändrar sin egen programkod, men knappast någon utnyttjar den möjligheten. Men denna princip använder sig moderna datorer sig av dagligen, nämligen genom att ett program kan skapa ett annat program och lagra det i minnet. Viktigt att notera är att den interna representationen av maskinkoden är unik för varje processortyp och måste studeras av programmeraren eller den som skriver kompilatorn. 6
Subrutinsbibliotek Adresseringsoperatorn möjliggjorde att von Neumann kunde introducera ett nytt begrepp, subrutinsbibliotek [Burks02]. Biblioteken skapades genom att skriva samlingar av de mest använda datorprogrammen och behandla de olika startadresserna som variabler för att sedan skriva ett kombineringsprogram, d.v.s. att anropa de olika subrutinerna. Detta var ett stort genombrott för datortekniken då man enkelt kunde återanvända vanligt förkommande program för att lösa större uppgifter. Betänk att tidigare programmerades datorerna med hjälp av sladdar och strömbrytare, det gick helt enkelt inte att återanvända program på ett bra sätt. Tidigare datorarkitekturer kunde endast hantera ett begränsat antal programnivåer, medan von Neumann-arkitekturen inte har några begränsningar i anropsdjup eller programuppbyggnad. Von Neumann lade alltså grunden för dagens moderna programmeringsteknik. Dynamiska minnen Von Neumann föreslog en ny sorts minne; ett elektronrör med de kombinerade egenskaperna från rören som omvandlar ljus till elektriska laddningar och rören som omvandlar elektriska laddningar till ljus. Dessa elektronrör kräver kontinuerlig återskrivning för att inte tappa minnet och von Neumanns nästa uppfinning inom datorarkitekturen var konceptet att använda 40 sådana rör, där varje rör representerar en bit av ett 40 bitars ord. Detta är principen för det moderna DRAM (Dynamic Random Access Memory) [Burks02]. Sorteringsalgoritm I det sista mötet von Neumann hade med Goldstine, Eckert, Mauchly, Waren och Burks beskrev von Neumann en procedur för att sortera slumpvis ordnade listor i alfabetisk ordning. Von Neumann förutsatte att det behövdes fyra tillförlitliga bandstationer till EDVAC (Electronic Discrete Variable Automatic Computer), efterföljaren till ENIAC. Han beskrev att problemet startades med filerna sparade på bandstation 1 och 2. Sedan läses en fil från band 1 och 2 vardera och det sorterade resultatet sparas på band 3 och 4 varannan gång. Sedan iterera detta steg så att alla sorterade par fanns lagrade på band 3 och 4. Processen skulle sedan reverseras så att alla sorterade grupper om fyra var lagrade på band 1 och 2. Efter 2 n steg finns hela listan sorterad. Von Neumann skrev senare ner denna algoritm och skickade den till Goldstine, som mycket senare visade algoritmen för Donald Knuth. Knuth publicerade algoritmen tillsammans med sina kommentarer. [Burks02]. 7
Artificiellt liv På 1940-talet undersökte von Neumann teoretiska möjligheter till självreproducering. Han påstod att en självreproducerande maskin behöver en beskrivning av sig själv för att reproducera sig. När reproduceringen sker reproduceras även ritningen till kopian så att även kopian kan reproducera sig. DNA skulle senare visa sig ha just dessa egenskaper. Von Neumann gjorde ett antagande över livets mekanism som biologerna senare skulle upptäcka. Sanningen visar sig dock vara mer komplicerad än så [Brooks04]. Forskning kring självreproducerande strukturer eller maskiner har pågått i snart ett halvt århundrade. Syftet med denna forskning har varit att förstå principerna och algoritmerna för självreproducering, oberoende av dess implementation. Visionerna är att i framtiden kunna konstruera självläkande och självreproducerande maskiner för att utforska rymden och andra svårtillgängliga miljöer eller rentav för nanoteknologi [Sipper98]. Resultatet av möjligheterna till självreproducering blev von Neumanns cellautomater (Cellular Automata, CA). Cellautomater är diskreta i både rummet och tiden och består av en flerdimensionell vektor av celler. Varje cell kan endast inta ett tillstånd av ett begränsat antal tillstånd och uppdateras synkront i diskreta tidsintervall enligt givna interaktionsregler [Sipper98]. 1966 publicerade Burks, som var en nära vän och kollega till von Neumann, ett kompendium om cellautomater i von Neumanns namn. Burks hade färdigställt von Neumanns arbete om cellautomater [Sipper98]. Von Neumann lade grunden för dagens forskning inom självläkande/reproducerande maskiner, redan innan DNA var upptäckt. För en överblick om forskningen inom området se [Sipper98]. Exempel på verkligheten och bilder skapade med hjälp av cellautomater. Källa: http://www.rufenacht.com/ca/animalsim.html 8
SLUTSATSER John von Neumann spelade en avgörande roll i den elektroniska datorrevolutionen och datavetenskapen. Von Neumann lade grunden till den moderna datorarkitekturen och till den moderna programmeringstekniken och mjukvarudesignen. Trots detta var han den första som försökte komma ifrån von Neumann-arkitekturen, vilken han insåg hade en begränsning, den arbetar sekventiellt. Von Neumann insåg att det fanns många fördelar med ett parallellt beteende och komma ifrån den s.k. von Neumann flaskhalsen. Trots att von Neumann redan strax efter att han presenterat von Neumann-arkitekturen började leta efter lösningar med parallellt beteende så använder dagens datorarkitekturer fortfarande von Neumann-arkitektur, men med lösningar så som pipelining, hyperthreading och parallella processorer. Se [Hennesy03] för mer information. Von Neumanns bidrag kan kännas futtiga och rentav löjliga idag, eftersom begrepp som maskinkod, pekare, mjukvarubibliotek och att lagra program i minnet är grunden inom datorvetenskapen idag, saker som vi tar för givet. Enkla lösningar är oftast de bästa, är de dessutom generiska så de kan appliceras i över 50 år på olika teknologiska plattformar, är de genialiska. Tänk att behöva koppla kablar och ställa in strömbrytare i veckor bara för att använda en ordbehandlare. Sedan koppla om allting för att redigera en bild som ska finnas med i rapporten Datortekniken skulle inte ha varit så utbredd och så välanvänd om inte von Neumann-arkitekturen, eller någonting liknande, hade uppfunnits. Att söka generiska och enkla lösningar ligger i en matematikers natur, vilket von Neumann verkligen lyckades med, fast inom ett helt annat område än det han var van vid. Att von Neumann-arkitekturen är enkel att förstå och kräver lite resurser kan exemplifieras i att författaren har konstruerat en processor med pipelining och inbyggt cache-minne från början till slut och kunnat exekvera godtyckliga program på den inom ramen för en 5 poängs kurs. Att von Neumann även har bidragit till grunderna i artificiellt liv, vilket är ett hett forskningsområde, kunde han knappast ana när har började arbeta med cellautomater. Tyvärr hann von Neumann inte slutföra arbetet med cellautomater, men hans vän och kollega Burks slutförde arbetet och publicerade det i hans namn. 9
REFERENSER [Aspray90] William Aspray, The stored program concept, IEEE Spectrum, page 51, 1990 [Burks02] A.W. Burks, The invention of the universal electronic computer how the Electronic Computer Revolution began, Future Generation Computer Systems 18, pages 871-892, 2002 [Brooks04] Rodney Brooks, The Cell Hijackers, Technology Review, page 31, June 2004 [Godfrey93] M.D. Godfrey & D.F. Hendry, The Computer as von Neumann Planned It, IEEE Annals of the History of Computing, Vol 15, No. 1, pages 11-21, 1993 [Hennesy03] John L. Hennessy & David A. Pattersson, Computer Architecture A Quantitative Approach, Third edition, Morgan Kaufmann Publishers, ISBN 1-55860-596-7, 2003 [Parshall98] Gerald Parshall, A calculating man, U.S. News & World Report, Vol. 125 Issue 7, page 69-71, 1998 [Sipper98] Moshe Sipper, Fifty years of Research on Self-Replication: An overview, Artificial Life volume 4, number 4, pages 237-257, 1998 10