Nadaljujemo s serijo objav iz zgodovine računalništva v Sloveniji, ki je rezultat izvirnih raziskav kustodiata Računalniškega muzeja.
Pregled vsebine:
- Definicija računalnika
- George Boole, Alan Turing, John von Neumann
- Magnetni boben in drugi magnetni mediji
- ENIAC, EDSAC, Manchester Baby/Mark 1
- Prvi programi na elektronskih računalnikih
- Strojni programski jezik
V tokratni objavi bomo posvetili še nekaj pozornosti izredno pomembni prelomnici pojava prvih elektronskih računalnikov. Podrobneje si bomo ogledali kaj elektronski računalniki pravzaprav so in kako so se ti programirali pred razvojem prvih simboličnih in višjih programskih jezikov.
V štiridesetih, ko so v praktični uporabi še vedno prednjačili predvsem klasični relejski računski stroji, je v laboratorijih in na univerzah-predvsem v Ameriki in Angliji-že potekal razvoj prvih pravih računalnikov izdelanih iz elektronskih komponent. Sprva še precej zanemarjen in motiviran izključno s potrebami znanosti, je razvoj v tem času dobival vse večjo pozornost in spodbudo tudi s strani vojaške industrije.
Ta razvoj se je dogajal po drugačnih tirnicah kot razvoj računskih strojev, in sicer v smeri univerzalnih računalnikov z drugačno arhitekturo in logično zasnovo. Elektronska logična vezja, ki so nadomestila relejske elektromehanske rešitve, so bila sprva realizirana s tehnologijo vakuumskih elektronk. Po drugi strani je razvoj računalnikov potekal v smeri novih, vedno bolj zanesljivih in večjih spominskih kapacitet, predvsem v obliki magnetnih medijev. Ti so imeli zelo velik vpliv na splošno smer in razvoj oblik in načinov programiranja, kot jih poznamo še danes.
Boole-ova matematična logika
Celoten razvoj elektronskega računalništva temelji na ideji, da je možno z elektronskimi elementi simulirati pogojno kombinatoriko dvo-vrednostne matematične logike, kot jo je zasnoval George Boole. Šele v tridesetih je bila ta ideja praktično potrjena in se je kmalu začela uporabljati v raznovrstnih novih elektronskih vezjih.
Boole-ova logika in algebra temeljita na kombinatoriki z dvema osnovnima vrednostima: resnično in neresnično, ena in nič. Tri osnovne operacije, ki so v tem sistemu možne, so konjunkcija (IN), disjunkcija (ALI) in negacija (NE), pogosto pa se uporabljajo tudi druge operacije izpeljane iz osnovnih. Na tej matematični osnovi so lahko zgrajena tudi preprosta logična elektronska vezja, ki opravljajo osnovne logične operacije in se običajno imenujejo logična vrata.
Logična vrata so elektronski elementi, ki vhodnim logičnim stanjem dodelijo ustrezno izhodno logično stanje. Kombinacije učinkov posameznih vrat lahko proizvedejo vse možne kombinacije matematične logike in z ustrezno vezavo lahko služijo za izgradnjo logično-aritmetične in kontrolne enote računalnika. Nekoliko drugačna preprosta logična vrata imenovana flip-flop pa se običajno uporabljajo za tvorjenje spominske enote računalnika. (P59/01, P71/05, W/09, W/14b, W/14c, W/20a, WIKI/41)
Računalnik in njegovo delovanje
Računalnik je po najbolj razširjeni definiciji stroj, ki je sposoben v sebi hraniti in izvajati svoja lastna navodila. V spominu lahko shranjuje poljubne črkovne ali številske podatke, torej tudi lastna programska navodila. Računski stroj in računalnik z zunanjim programom tega za razliko od računalnika ne zmoreta. Koncept notranjega programa je torej v definiciji modernega računalnika bistven in odločujoč.
Vsi podatki v računalniku so kodirani po vnaprej določenem ključu v obliki številskih informacij. V začetku so vse do šestdesetih mnogi računalniki, predvsem IBM-ovi, sledili tradiciji in so kot osnovo uporabljali desetiški številski sistem z različnimi pristopi kodiranja decimalnih števil v dvojiškem sistemu (BCD-Binary coded decimal). Desetiški sistem je uporabljalo precej IBM-ovih zgodnjih računalnikov kot so bili modeli 650, 702, 705, 1620, pa tudi nekateri njihovi računalniki druge generacije kot serija 1400 in nekaj modelov serije 7000. Desetiški sistem pa je uporabljal tudi prvi elektronski računalnik ENIAC.
Postopno se je kot osnova računalniških sistemov uveljavil dvojiški številski sistem, ki je za uporabo v sistemih zgrajenih iz elektronskih komponent veliko bolj praktično uporaben. (P59/01, P71/05, W/08, W/09, W/10c, W/10d, W/10r, W/14b, W/20a, WIKI/42)
Kontrolna enota
Vsa osnovna navodila po katerih določen računalnik lahko deluje so implementirana strojno v njegovi kontrolni enoti. To so v prvi vrsti ravno navodila za kodiranje številk, črk in simbolov vhodnih podatkov v številski sistem računalnika, sledijo pa še navodila za izvajanje osnovnih logičnih in aritmetičnih operacij, navodila za ravnanje z vhodno-izhodnimi signali in operacije branja in pisanja v spominski enoti. V kontrolni enoti je bil postopno implementiran tudi naslovni register vseh spominskih mest, kar je programerjem precej olajšalo delo naslavljanja podatkov in navodil.
Funkcionalno je kontrolna enota morda en izmed najbistvenejših povezovalnih delov računalnika, ki ga ločuje od računskih strojev. Ta upravlja z ostalimi deli računalnika in omogoča interakcijo in prenos podatkov med njimi. Omogoča pa tudi interakcijo uporabnika z računalnikom in interakcijo računalnika z izhodnimi napravami. Kontrolna enota v osnovi sprejema ukaze in podatke iz spominske enote, jih interpretira glede na vgrajen nabor navodil, prevede v specifične električne signale in jih posreduje aritmetično-logični enoti, ki nato izvaja operacije. (P59/01, P71/05, W/09, W/10cc, W/10r, WIKI/05)
Združitev matematičnih teorij, tehnoloških inovacij in veščine programiranja
Če pogledamo malo širše lahko vidimo, da je moderni elektronski računalnik edinstvena mešanica matematičnega koncepta, ki mu daje teoretično osnovo, tehnološke naprave, ki ga preko elektronike praktično omogoča, in programske opreme, ki ga napravlja intelektualno uporabnega. Združitev teh treh sestavin lahko opazujemo že v pojavu prvega elektronskega računalnika ENIAC in za njim vseh sledečih modernih računalnikov.
Glavne teoretične osnove računalnika lahko najdemo v osnovnih principih elektronike in elektro-magnetizma, kot sta se razvila v začetku prejšnjega stoletja, v matematični logiki George-a Boole-a in fundamentalnih matematičnih teorijah Bertrand-a Russell-a, v teoriji avtomatov Alan-a Touring-a in konceptu računalnika z notranjim programom, ki ga je razvil John von Neumann.
Tehnološke inovacije, ki so omogočile prvo generacijo elektronskih računalnikov so bile sprva predvsem triodne vakuumske elektronke, kot osnovni diskretni elementi za izgradnjo računalniških elektronskih vezij in različni magnetni mediji, ki so omogočili izgradnjo vedno bolj zanesljivih in zmogljivih spominskih enot.
Programska osnova računalnika pa temelji predvsem na konceptu kontrolne enote, ki služi kot vsestransko posredovalni, interpretativni in združevalni element in strojnega jezika prek katerega uporabnik posreduje ukaze/navodila za delovanje računalnika. (W/10cc, W/14a, WIKI/08, WIKI/10, WIKI/11, WIKI/41, WIKI/43)
Magnetni boben
Pri elektronskih računalnikih prve generacije je v petdesetih prišlo do implementacije različnih spominskih inovacij, ki so izredno vplivale na možnosti programiranja. Sprva je bil spomin računalnikov realiziran z množicami vakuumskih elektronk, kasneje pa z množicami specialnih elektronk podobnih današnjim zaslonom, vendar sta bila oba načina preveč nezanesljiva.
Najbolj pomembna in vplivna rešitev za širšo uporabo je bil najprej magnetni boben, ki je lahko shranil veliko večje količine informacij kot druge do tedaj uporabljene tehnologije. Prvič je bil uporabljen v računalnikih IBM 650 leta 1953, nato pa še v računalnikih UNIVAC v sredini petdesetih in mnogih drugih. Magnetni boben je kot glavni spomin uporabljal tudi prvi elektronski računalnik pri nas Zuse Z-23. Magnetni bobni so imeli običajno do nekaj tisoč besed spomina, kar je primerljivo z nekaj kilobajti. (P59/01, W/10ca, WIKI/44)
Programiranje za magnetne bobne
Pred razvojem prvih zbirnih programov so na računalnikih z magnetnim bobnom morali programerji navodila naslavljali na določena mesta v magnetnem bobnu po zaporedju, ki je omogočal čim hitrejše izvajanje. Boben se je moral namreč zavrteti in ustrezno premakniti glavo, da je lahko dostopal do posameznih spominskih mest, ki so bila razporejena po obodu bobna na več deset plasteh.
Podobno kot so imele nadzorne plošče računskih strojev po dve seriji vtičev, ki so predstavljali vhodno in izhodno kartico s podatki, so imeli tudi magnetni bobni dve rezervirani seriji spominskih mest, ki so predstavljala polja vhodne in polja izhodne kartice. Računalnik je prebral luknjano kartico in vhodne podatke shranil v rezervirano serijo mest magnetnega bobna, program pa je rezultate izračunov shranjeval na drugo serijo rezerviranih mesta magnetnega bobna, ki so predstavljala polja izhodne kartice. Od tu je luknjalnik rezultate ob zaključku programa lahko naluknjal na ustrezna polja izhodne kartice. (P59/01, W/10ca, WIKI/44)
Drugi magnetni mediji
V petdesetih je v prišlo tudi do razvoja več drugih vrst spomina na osnovi magnetnih medijev. Na primer spomin na osnovi magnetnega jedra, ki je kmalu postal glavna oblika notranjega hitrega spomina računalnikov in je bil prvič uporabljen že leta 1953 v računalniku Whirlwind, kasneje pa še v IBM računalnikih serije 700. Spomin na osnovi magnetnega jedra je bil zelo uspešen in se je množično uporabljal od sredine petdesetih pa vse do sredine sedemdesetih let.
V petdesetih je močno napredoval tudi razvoj magnetnih trakov, ki so bili prvič uporabljeni v računalnikih UNIVAC 1 leta 1952 in magnetnih diskov prvič uporabljenih na računalniku IBM 305 RAMAC in 650 RAMAC v sredini petdesetih. Te tehnologije so relativno hitro prišle v splošno uporabo. Diskovne enote IBM 350, ki so se začele uporabljati leta 1956, so lahko shranile že 5 miljonov 6-mestnih besed in so tako še bistveno bolj povečale možnosti za programiranje in obdelavo podatkov.
Z razvojem računalnikov so nekateri stroji klasičnih garnitur postali pomožni stroji, predvsem kot sredstvo za zajemanje podatkov v obliki luknjanih kartic ali luknjanega traku in za njihovo vnašanje v računalnik. Sama obdelava teh podatkov je že v šestdesetih postala skoraj izključno domena elektronskih računalnikov. Novi načini shranjevanja in zajemanja podatkov pa so začeli šele z vse bolj interaktivnimi računalniškimi sistemi v poznih šestdesetih počasi izpodrivati luknjane kartice kot primarni medij. (P71/05, W/08, W/09, W/20a, WIKI/44)
$> V muzeju hranimo več različnih vrst magnetnih medijev, med njimi tudi nekaj zgodnjih različic pomnilnika z magnetnimi jedri.
Prvi računalniki z notranjim programom
S pomočjo vakuumskih elektronk in magnetnih medijev, predvsem magnetnega bobna, je bilo konec štiridesetih tako mogoče že zelo racionalno realizirati koncept univerzalnega računalnika z notranjim programom po modelu računalniške arhitekture, ki so jo razvili Alan Turing, John von Neumann in drugi. Koncept računalnika z notranjim programom kot ga poznamo danes izhaja predvsem iz Von Neumann-ovega predloga za izboljšave v načrtu računalnika EDVAC, predvidenem nasledniku ENIAC-a.
Njegov predlog je idejno sicer močno črpal iz matematičnih modelov Alan-a Turing-a, ki je v tridesetih zasnoval princip univerzalnega stroja. Alan Turing je preučeval možnosti za avtomatično reševanje problemov v okviru dvojiškega številskega sistema. Njegov univerzalni mehanizem naj bi bil sposoben simulirati vsak poljuben mehanizem za reševanje problemov na način, da bi iz vhoda poleg samih podatkov črpal tudi navodila za lasten mehanizem, ki bi te podatke obdeloval.
Neodvisno je tudi Konrad Zuse že v tridesetih razvil idejo o hranjenju navodil programa in podatkov v spominu računalnika. Njegovi prvi relejski računalniki pa te ideje takrat niso realizirali. (P59/01, W/08, W/09, W/10cc, W/20a, WIKI/04, WIKI/42, WIKI/43)
$> V muzeju lahko vidite in praktično preizkusite enostaven primer univerzalnega turingovega stroja.
Von Neumann-ov model računalnika
Von Neumann-ov model je predlagal univerzalno zgradbo računalnika s tremi ločenimi enotami. Procesno aritmetično-logično enoto, ki izvaja operacije, spominsko enoto, ki shranjuje vse podatke in navodila programov, ter kontrolno enoto, ki vključuje register strojnih navodil računalnika, register spominskih mest in programski števec. Tak računalnik naj bi vseboval še sistemsko vodilo za pretok podatkov med temi enotami.
Deloval naj bi na principu dvojiškega številskega sistema in bi imel v kontrolni enoti strojno realiziran osnovni nabor navodil, ki bi jih bilo mogoče izvajati glede na specifično strojno arhitekturo računalnika. V spominski enoti bi imel shranjene tako vse podatke, kot tudi sama programska navodila, ki bi se prek različnih sklicnih kod nanašala na osnovni nabor navodil v kontrolni enoti.
Potem ko je bil ta model računalniške arhitekture prvič uporabljen v računalnikih EDSAC, Manchester Mark 1 in EDVAC, so na več univerzah in raziskovalnih laboratorijih po vsem svetu začeli izdelovati svoje lastne sisteme. Uporabljen je bil pri izgradnji skoraj vseh elektronskih računalnikov, razen predhodnih ENIAC-a in Colossus-a. (W/09, W/10r, WIKI/04, WIKI/42, WIKI/43, WIKI/45)
ENIAC, Manchester Baby in EDSAC
S konceptom računalnika z notranjim programom je bil uspešno rešen problem programabilnosti prvih elektronskih računalnikov, ki je predstavljal izredno veliko prepreko v primeru prvih računalnikov ENIAC in Colossus. V tem času namreč še ni bilo jasno, na kakšen način naj bi tak elektronski sistem sploh uporabno programirali.
Prva programska izvedba za izračun tirnic balističnih izstrelkov je bila takrat na ENIAC-u z velikimi napori realizirana na način ožičenja. Leta 1948 pa je bil računalnik že prilagojen po modelu računalnika z notranjim programom in je omogočal izvajanje strojnih programov naluknjanih na karticah. V tem letu so tudi na Manchesterski univerzi že proizvedli prvi prototip imenovan Manchaster Baby, ki je bil sposoben izvajati navodila iz lastnega spomina. Leta 1949 pa je bil na angleški univerzi v Cambridge-u izdelan drugi računalnik z notranjim programom EDSAC. (W/09, WIKI/11, WIKI/45)
Prvi programi konec štiridesetih
Na prilagojenem ENIAC-u so najprej izvedli izračune potrebne za test vodikove bombe. Izračuni so takrat pokazali, da je bil prvotni načrt bombe pomanjkljiv in neprimeren. Za te izračune bi takrat sicer potrebovali mesece ročnega računanja. Nadalje so na ENIAC-u izvedli izračune povezane z Monte Carlovo metodo.
Medtem so na manchesterski univerzi na računalniku Mark 1 leta 1949 izvedli prvi program za izračun Mersennovih praštevil, ki se je brez napak izvajal kar devet ur. Izvedli so še uspešne programe povezane z Riemannovo hipotezo in izračune s področja optike. Najstarejši obstoječ uporabljen program napisan leta 1948 za računalnik Manchester Baby, ki je bil predhodnik računalnika Manchester Mark 1 in menda tudi prvi računalnik z notranjim programom, je sicer preprost testni program za izračun največjega skupnega delitelja dveh števil.
Na računalniku EDSAC, drugem računalniku z notranjim programom izdelanem na Univerzi v Cambridge-u, pa je bil prvi program prav tako izveden leta 1949 in sicer program za izračun tabel kvadratnih korenov in seznama praštevil. Že ti prvi uspešno izvedeni programi so nemudoma demonstrirali kakšne velike koristi lahko elektronski računalniki z notranjim programom nudijo znanosti. Od tu je bil njihov razvoj eksponenten in je presegel vsa dotedanja pričakovanja. (WIKI/11, WIKI/45, WIKI/46)
Strojni jezik
Programi prvih univerzalnih računalnikov so bili izdelani na nivoju strojnega jezika, ki je običajno temeljil na dvojiških ali desetiških navodilih in je bil nekaj časa tudi edini način programiranja zanje. Navodila teh strojnih programov so bila tem računalnikom oziroma njihovi kontrolni enoti neposredno razumljiva zato dodatni prevajalni ali interpretativni členi niso bili potrebni.
Točno določene binarne kode so odgovarjale vnaprej v kontrolni enoti strojno omogočenim osnovnim operacijam računalnika. Nabor navodil v kontrolni enoti je bil implementiran z uporabo logičnih enot. Te so bile sestavljene iz različnih kombinacij logičnih vrat realiziranih v obliki elektronskih vezij. Ob ustreznem navodilu programa so proizvedle ustrezne odzive, ti pa so se kot signali prenašali naprej do ostalih enot računalnika, na primer do aritmetično logične enote, in ustrezno prvotnemu navodilu programa vplivale na njihovo delovanje.
Programi v strojnem jeziku so se sicer lahko hitro izvajali, kar je bilo pomembno zaradi zelo omejenih zmogljivosti teh računalnikov, vendar pa je bilo programiranje, odkrivanje napak in popravljanje zelo težavno in zamudno. V tem času je bilo delo programerjev močno vezano na njihovo široko matematično znanje in je bilo neke vrste izumiteljstvo in umetnost. Reševani problemi pa so se nanašali predvsem na izvedbo osnovnih matematičnih, numeričnih in logičnih postopkov. (P59/01, W/09, W/10cc, WIKI/04, WIKI/46, WIKI/47)
Programiranje v binarnem strojnem jeziku
Programski ukaz običajnega binarnega strojnega jezika je bil sestavljen iz serije ničel in enic, imenovanih tudi biti, ki so glede na specifično arhitekturo posameznega računalnika tvorile besede določenih dolžin. Besede, ki so jih ti zgodnji računalniki razumeli so bile dolge vse od 8 pa do 36 bitov. Vsak ukaz je moral dosledno upoštevati uporabljeno dolžino besede, sicer se program ni pravilno izvajal.
Te besede so, tako kot pred njimi posamezni koraki programov računskih strojev, po predpisani strukturi predstavljale operacijo, naslov podatka/vrednosti na katerem se izvaja operacija in naslov naslednjega ukaza. Program za 8-bitni računalnik bi na primer izgledal kot serija 8-mestnih binarnih vrednosti:
01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100.
Programer ob pogledu na takšno kodo strojnega programa ni imel nikakršnega pregleda nad strukturo programa, elementov programa kot so ukazi, naslovi, spremenljivke in vrednosti pa ni mogel ločiti med sabo, saj so vsi izgledali isto in so se izgubljali v nepreglednih nizih enic in ničel. Ker je morala biti koda teh programov prilagojena specifični logični arhitekturi vsakega računalnika, jo je bilo tudi nemogoče prenašati med različnimi računalniki.
Zaradi izredne zahtevnosti programiranja v strojnem jeziku, ki je zahtevala ogromno programerskega in računalniškega časa, so proizvajalci prvih univerzalnih računalnikov takrat že vlagali velike napore v razvoj bolj praktičnih in cenejših metod programiranja. Navsezadnje so računalniki uporabni le toliko, kolikor je programsko omogočena in racionalizirana uporaba njihovih potencialnih zmogljivosti. (P59/01, W/10ca, W/10cc, WIKI/47)
.. zbral in sestavil Miha Urh
Sledi
V naslednji objavi bomo še naprej spremljali razvoj sodobnih programskih metod in konceptov v letih od 1952 do 1958. Takrat je v okviru prve generacije elektronskih računalnikov prišlo do razvoja več dodatnih programskih plasti nad samim strojnim jezikom računalnika, od različnih simboličnih strojnih jezikov(Assembly) in višjih programskih jezikov(Fortran, Cobol in Algol), pa do prvih zametkov operacijskih sistemov.
Nato pa se bomo vrnili k obravnavi prvih računalnikov v Sloveniji z objavo o prvem elektronskem računalniku Zuse Z-23, ki je bil leta 1962 nameščen v Ljubljani in se je takrat že lahko programiral na vse te načine.
Viri
P60/01 : France Križanič – Elektronski aritmetični računalnik | P71/05 : Zbornik IFIP 1971 – Elektronski računalniki : osnove, programiranje, uporaba | W/08 : CHM Computer History museum Timelines | W/09 : Bit by bit (LINK) | W/10c : IBM 704, IBM 650, Univac 1 | W/10ca : IBM 650 Magnetic drum data processing machine, IBM 650 Basic operation codes, program optimizing and loading, Richard Andree Programming the IBM 650 magnetic drum computer, W.Y.Stevens A simplified system for the use of an automatic calcultor, SOAP II for IBM 650, Fortran for IBM 650 | W/10cc : Robert Ledley Digital computer and control engineering, IBM Introduction to engineering analysis for computers, Course on Computer Architecture and Engineering, IBM Principles of digital computers, O.L.MacSorley Highspeed arithmetic in binary computers, Paul McJones Elements of programing, Douglas Ross Gestalt programming: A new concept in automatic programming | W/10d : IBM 705 | W/10r : George Saxenmeyer Logical principles and operation of digital computers | W/14a : Michael Mahoney History of Computing in the History of Technology | W/14b : Francis Murray The theory of mathematical machines | W/14c : Bertrand Russell The principles of mathematics | W/20a : Creatures of thought-The switch (LINK) WIKI/04 : Stored program computer, Von Neumann architecture, Computer architecture | WIKI/05 : Control unit | WIKI/08 : Electronics & Electronic circuits, Vacuum tube | WIKI/10 : Digital computer, Digital signal, Digital data, Digital electronics, Binary data | WIKI/11 : Vacuum tube, ENIAC | WIKI/41 : George Boole, Bertrand Russell, Boolean algebra, Binary numbers, Numeral system | WIKI/42 : Computer, Stored-program, Digital electronics | WIKI/43 : Alan Turing, John von Neumann, First Draft of a Report on the EDVAC | WIKI/44 : Drum memory, Magnetic core, Magnetic tape, Hard disk, Magnetic storage | WIKI/45 : EDVAC, Manchester Baby, Manchester Mark 1 | WIKI/46 : Computer programming, Programmer, Computer program | WIKI/47 : Programming language, Programming language generations, Machine code