9789144110226

Page 1

10011110101101100 010010101101101010011010110 000101101100101001011001111001001010110110101 110101100001011011001010010110011110101101100 100101011011010100110101100001011011001010010 0011110101101100010010110011110101101100 0100 101101101010011010110000101101100101001011001 101010110110010100101011011010100110101100001 101100101001011001111010110110010100101011011 010011010110000101101100101001011001111010110 100010010100100101011011010100110101100001011 EN INLEDNING TILL DATAVETENSK AP OCH KOGNITIONSVETENSK AP 1001010010110011110101101100 0100101011011010 011010110000010110110010100101100111100100101 101101010011010110000101101100101001011001111 011011001010010101101101010011010110000101101 010100101100111101011011000100101100111101011 100101001010110110101001101011000010110110010 010110011110101011011001010010101101101010011 011000010110110010100101100111101011011001010 010110110101001101011000010110110010100101100 110101101100100101011011010100110101100001011 1001010010110011110101101100 0100101011011010 011010110000010110110010100101100111100100101 101101010011010110000101101100101001011001111 011011001010010101101101010011010110000101101 010100101100111101011011000100101100111101011 100101001010110110101001101011000010110110010 010110011110101011011001010010101101101010011 011000010110110010100101100111101011011001010 010110110101001101011000010110110010100101100 110101001010110110101001101011000010110110010 010110011110101101100 01001010110110101001101 100000101101100101001011001111001001010110110 010011010110000101101100101001011001111010110 001010010101101101010011010110000101101100101 10110011110101101100010010110011110101101100 001010110110101001101011000010110110010100101 011110101011011001010010101101101010011010110 010110110010100101100111101011011001010010101 110101001101010100101011011010100110101100001 L A R S -E RIK J A NL E R T 1011001010010110011110101101100 0100101011011 010011010110000010110110010100101100111100100

T채nkande och ber채kning


Kopieringsförbud Detta verk är skyddat av upphovsrättslagen. Kopiering, utöver lärares och studenters begränsade rätt att kopiera för undervisningsändamål enligt Bonus Copyright Access kopieringsavtal är förbjuden. För information om avtalet hänvisas till utbildningsanordnarens huvudman eller Bonus Copyright Access. Vid utgivning av detta verk som e-bok, är e-boken kopieringsskyddad. Den som bryter mot lagen om upphovsrätt kan åtalas av allmän åklagare och dömas till böter eller fängelse i upp till två år samt bli skyldig att erlägga ersättning till upphovsman eller rättsinnehavare. Studentlitteratur har både digital och traditionell bok­utgivning. Studentlitteraturs trycksaker är miljöanpassade, både när det gäller papper och tryckprocess.

Art.nr 7189 ISBN 978-91-44-11022-6 Upplaga 2:1 © Författaren och Studentlitteratur 2015 www.studentlitteratur.se Studentlitteratur AB, Lund Omslagslayout: Jesper Sjöstrand Omslagsbild: wikimedia.org/Robert Fludd Printed by Printed by Dimograf, Poland 2015


3

INNEHÅLL

Förord 7 1 Datavetenskap och kognitionsvetenskap  9

Två nya vetenskaper  9 Och ett nytt slags samhälle  11 Datavetenskapens upprinnelse  16 Det vetenskapliga spåret  16 Det tekniska spåret  20 Krigsansträngningen 23 Tre tvärvetare  25 Kognitionsvetenskapens tillkomst  28 Psykologi innan datorn  29 Beräkning som modell för kognition  30 Klassisk kognitionsvetenskap – utgångspunkter  32 2 Tänkande och beräkning  35

Kognition 35 Tvärvetenskaplig korseld  39 Beräkning 40 Externa och interna symboler  44 Möten mellan datavetenskap och kognitionsvetenskap  45 Representation och symboler  52 Symbolsystem 53 Data och information  55 Digitalitet 58 Digital approximation och precision  60 Digitalitetens djupare betydelse  62

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


4

I n ne h å l l

3 Processorer och program  65

Datorn är en universell symbolmaskin  65 Mekanisk och symbolisk universalitet  66 Symboliska och fysiska gränssnitt  68 Datorn i världen  69 Programmering är att beskriva och skapa beteende  71 Generalitet och portabilitet  74 Datorarkitektur 75 Minnespyramiden 80 Andra arkitekturer  81 Operativsystem 82 Programspråk 83 Programmering som allmän konst  87 4 Beräkning  89

Algoritm 89 Ändlighet och pseudoalgoritm  92 Beräkningsbarhet 94 Turingmaskiner 95 Markovalgoritmer 98 Datorns beräkningskraft  99 Universella turingmaskiner  100 Universell turingmaskin som teoretisk modell för datorn  101 Datorkraft 102 5 Beräkningars begränsningar  105

Beräkningsbarhetens gräns  105 Stopproblemet 106 Hur vanliga är icke-beräkningsbara problem?  108 Komplexitet 111 Tidskomplexitet 111 Exempel: insättningssortering  113 Exempel: samsortering  114 Rumskomplexitet 115 Hanterliga och ohanterliga problem  116 Icke-klassiska beräkningar  117 Nyttiga oäkta algoritmer  117 Beräkning med interaktion  118

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


I nnehåll  5

6 Datoranvändningens utveckling  119

Från verkstad till datorartefakt  119 Vad styr användningens utveckling?  128 Informationshantering och tillgänglighet  130 7 Programmets element och struktur  135

Datatyper 135 Enkla datatyper  135 Tilldelning 137 Sammansatta datatyper  138 Abstrakta datatyper  143 Kontrollmekanismer 145 Implementation 148 Exempel: Stack implementerad som Fält  148 Implementationsprincipen 150 Virtuella maskiner  151 Kognitiv arkitektur   153 Alternativa beräkningsmekanismer  153 Artificiella neurala nätverk  153 Cellulära automater  154 8 Algoritmiskt tänkande  157

Perspektiv på programmering  157 Programbyggnad 163 Vattenfallsmodellen 163 Problemlösning 166 Problemlösningsstrategier och kontrollmekanismer  169 Maskinell problemlösning: exemplet GPS  171 Datavetenskap och datavetenskapligt tänkande  176 9 Gränssnitt  179

Fysiska gränssnitt  179 Informationsgränssnitt 182 Omvärldsgränssnitt 183 Sensorteknik 185 Aktuator- och presentationsteknik  186 Användargränssnitt 187 Från idiotsäkerhet till användbarhet och nytta  189 Mentala modeller  190

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


6

I n ne h å l l

10 Interaktion och design  193

Interaktionsformer – fraser, handlingar, gester   193 Ny teknik, ny användningskontext – ny interaktionsform  196 Interaktion och tankestilar  198 Design   201 Kognitiv design  202 11 Tankens vägar  205

Informationsteknik och kunskapens rörelser  205 Vad har vi att vänta?  208 Teknik och konst  209 Teknik är vi  211 Mjuk teknik – hård konst?  212 Avförtrollandet av tekniken  213 Den inre och den yttre vägen möts  214 Informationsekonomi 217 Informationsexplosionen 219 Livet i tankesamhället  221 Läsförslag   223 Sak- och personregister  227

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


Processorer och program

Grundläggande sätt att förstå vad en dator är och vad programmering innebär: datorn är en symbolmanipulerande maskin; att programmera är att beskriva och generera symboliskt beteende. Med lämpliga gränssnitt kan detta beteende yttra sig såväl symboliskt som fysiskt. Grundläggande datorarkitektur: von Neumann-arkitektur. Programspråk.

Datorn är en universell symbolmaskin När den mekaniska ingenjörskonsten blommade under 1600- och 1700-talen var det vanligt att samla skisser av olika slags mekaniska anordningar i anteckningsböcker som fungerade som handböcker för den praktiserande mekanikern. Christopher Polhem (1661–1751) arrangerade ett antal mekanismer i vad han kallade ett ”mekaniskt alfabet”. Det är en rad olika elementära sätt att omvandla rörelsetyper (roterande, fram- och återgående, pendlande osv.), rörelseriktningar, hastigheter och krafter mellan varandra. Genom att kombinera ”bokstäver” i alfabetet kan man lösa mer komplicerade uppgifter: konstruera en klocka, en gruvpump, en kraftöverföringsmekanism från kraftkälla till användningsställe och så vidare. Idealiskt sett skulle man på detta sätt kunna lösa varje tänkbart mekaniskt formulerat problem genom att bygga en maskin som kombinerar olika elementära mekanismer – givet att man har den mekaniska problemlösningsförmåga och kreativitet som krävs för att hitta de rätta kombinationerna. Det är en strålande idé, men mekaniken har sina begränsningar. Det är svårt att göra mekaniska delar med hög precision, det är svårt att undvika friktion mellan delarna och energiförluster, att få dem tillräckligt starka och tåliga mot nötning, det kan vara svårt att uppfylla önskemål om lätthet och nätthet och så vidare.

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r

3


66

3  P r o c e ss o r e r o c h pr og ram

Figur 3.1  Delar av Polhems mekaniska alfabet (ur Carl Cronstedts antecknings­bok, 1729), samt ett tillämpningsexempel i form av Polhems berömda så kallade stånggång, eller konstgång. (Illustration: Jonny Hallberg)

MEK ANISK OCH SYMBOLISK UNIVERSALITET

Vi kan använda idén om det mekaniska alfabetet för att förstå vad en dator är. Polhems tanke tycks ha varit att man för varje beskrivningsbart mekaniskt samband mellan ”in- och utmatnings-mekanismer”, det vill säga önskade förhållanden mellan axlar som vrids, stänger som stöter osv., skulle kunna skapa en maskin som skulle upprätthålla just detta samband genom att kombinera mekanismer ur en universell och begränsad uppsättning av enkla, grundläggande mekanismer. Med en lätt variation kan man alternativt säga att varje önskat mekaniskt ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  67

beteende (givet en viss kraftinmatning) skulle åstadkommas genom kombinationer av sådana elementära mekaniska element. Byt nu mekanik mot symbolik: i stället för mekaniska samband och mekaniska beteenden, tänk på ”symboliska samband” och ”symboliska beteenden”. Om ett exempel på ett mekaniskt samband är att ’när axel A vrids, så vrids axel B dubbelt så mycket, i motsatt riktning’, är ett motsvarande exempel på ett symboliskt samband att ’när X är en talsymbol, så är Y en talsymbol vars värde är –2X’. Om ett exempel på mekaniskt beteende är att en slägga slår mot ett städ om och om igen med jämna mellanrum, är ett motsvarande exempel på symboliskt beteende att producera följden av primtal från 2 och uppåt. Symboliska samband och beteenden kan vara matematiska, eller logiska, eller av något annat slag, till exempel ett samband mellan X och Y som innebär att Y är en engelsk text som utgör översättningen av X som är en svensk text. Datorn är en symbolmaskin, det är en maskin som genererar symboliska beteenden och upprätthåller symboliska samband. Givet att vi kan definiera och beskriva ett visst symboliskt samband eller beteende, kan vi genom att i datorn kombinera olika slag av elementära symboliska mekanismer få den att upprätthålla just detta samband eller uppvisa detta beteende. Om Polhems dröm var ett universellt fysiskt ”meccano”, är datorn ett universellt symboliskt ”meccano”, och medan mekaniken i praktiken är rätt begränsad just av sin fysikalitet, finns inga sådana omedelbara begränsningar för datorns symboliska kapacitet. Det visar sig att med en mycket begränsad uppsättning av elementära symboliska mekanismer, kan man i princip åstadkomma vilket symboliskt samband, vilket symboliskt beteende som helst – nästan! Medan Polhems dröm om mekanisk universalitet i praktiken förblev en dröm, är symbolisk universalitet bra nära realiserad genom datorn. Möjlig­heterna och begränsningarna ska vi återkomma till i de följande kapitlen. Datorn, som jag nu har beskrivit den, är alltså en symbolmaskin. Inuti den kan man installera olika, mer eller mindre komplicerade symboliska ”mekanismer” som består av en kombination av vissa elementära symboliska mekanismer. Att hantera och sätta samman dessa symboliska mekanismer på önskat sätt gör man med hjälp av programspråk – detta går vi närmare in på i avsnittet Programspråk nedan. Figur 3.2  Till vänster: Den nakna datorn. Mitten: Dator med symboliska gränssnitt. Till höger: Dator med fysiska gränssnitt. (Illustration: Jonny Hallberg)

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


68

3  P r o c e ss o r e r o c h pr og ram

När symbolmaskinen är i gång bearbetar den – skapar, kombinerar, omvandlar, spjälkar upp osv. – symboler på ett sätt som bestäms av den symboliska mekanism som definierats genom programmeringen. Detta symboliska beteende är internt och inte något som vi direkt ser eller märker av. För att datorn ska bli av intresse för omgivningen, och för att omgivningen ska bli av intresse för datorn, krävs att datorn förses med gränssnitt till omgivningen. SYMBOLISK A OCH FYSISK A GRÄNSSNIT T

Datorns gränssnitt till omgivningen kan vara symboliska. Det innebär att vissa av de symboler datorn hanterar samtidigt är symboler också för människor i dess omgivning. Dataskärmar och tangentbord är vanliga exempel på sådana symboliska gränssnitt. Genom sådana gränssnitt blir det möjligt för en användare att påverka och att följa datorns beteende som det visar sig i gränssnittet, och därigenom dra praktisk nytta av vad datorn gör i symbolorienterade uppgifter, som till exempel ordbehandling, budgetarbete, informationssökning och elektronisk kommunikation. Datorns gränssnitt till omgivningen kan också vara fysiska. Det innebär att olika sensorer och olika motorer och aktuatorer är direkt kopplade till interna symboler i datorn. En temperatursensor någonstans utanför datorn kan till exempel ge upphov till en intern talsymbol som representerar den mätta temperaturen, och en annan intern symbol kan när den dyker upp få till effekt en elektrisk gnista i ett tändstift utanför datorn. Därigenom kan man utnyttja datorns symboliska arbete i en fysiskt orienterad uppgift, som till exempel att tända tändstiften i en bilmotor vid de rätta tidpunkterna. Sammanfattningsvis kan man säga att datorn är en symbolmaskin med en utomordentligt stor förmåga till varierade symboliska beteenden (hur stor ska vi se i kapitel 4, Beräkning) vars beräkningskraft genom symboliska och fysiska gränssnitt till omgivningen kan utnyttjas både i idéernas värld och i den fysiska världen. I datorns gränssnitt till omgivningen kan man skilja mellan indata och utdata – input och output (ibland tillsammans betecknat i/o). Indata ges av datorns omgivning, utdata påverkar datorns omgivning. I fysiska gränssnitt skapas indata av sensorer av olika slag, till exempel tryck­ givare, temperaturgivare, accelerometer, kamera – och utdata omsätts i fysiska beteenden och resultat genom motorer och andra aktuatorer. Vad beträffar symboliska gränssnitt kan indata matas in via olika slag av inmatningsenheter – input device. Några exempel är tangentbord, ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  69

styrplatta, mikrofon, streckkodsläsare, rfid-läsare. Utdata kan matas ut via olika slag av utmatningsenheter – output device. Några exempel är dataskärm, högtalare och skrivare. En inmatningsenhet kan samtidigt vara en utmatningsenhet, som i fallet med pekskärmar. Naturligtvis är även symboliska gränssnitt fysiska, när man synar dem närmare: ett vanligt tangentbord är till exempel ofta ett arrangemang av tryck­ sensorer – så skillnaden ligger i att dessa trycksensorer är avsedda att fungera som bokstavssymboler för en användare (jfr hur ”symbol” definierades i kapitel 2, Tänkande och beräkning). DATORN I VÄRLDEN

Jämförelsen med mekanik leder till tanken att man skulle kunna ersätta mekanik med datorer. Det är också vad som nu sker i växande omfattning. Tändningssystemet i en modern bil är ett exempel. I en bensinmotor är det väsentligt att bränsle–luft-blandningen i en cylinder tänds exakt när cylinderkolven befinner sig i lämpligt läge i cylindern. De olika cylinderkolvarna befinner sig genom att de är förbundna med den asymmetriska vevaxeln (motoraxeln) vid varje tidpunkt i olika lägen i sina respektive cylindrar, vilket innebär att de olika tändstiften måste tändas vid olika tidpunkter. Tidigare hade man för detta ändamål en mekanisk anordning som kopplade ihop vevaxeln med den så kallade strömfördelaren, ett slags vridströmbrytare som snurrade runt i takt med motorn. I en modern bil har man rensat bort denna mekanik. Med hjälp av en sensor som avläser motoraxelns vridningsvinkel kan en liten dator beräkna när varje tändstift lämpligast ska tändas och ta över styrningen av gnistbildningen. Men det behöver inte stanna vid det, det idealiska ögonblicket att tända ett bestämt tändstift kan bero av många andra faktorer – vi kan lätt föreställa oss (utan att fördjupa oss ytterligare i bilmotorer) att motorblockets temperatur, motorns varvtal, lufttemperaturen, motorns belastning, graden av inblandning av luft i bränslet med mera, också kan spela en viss roll. Genom att utöka datorns gränssnitt med ytterligare några sensorer för inhämta sådan information, och låta den göra en mer informerad, nyanserad och komplicerad beräkning, kan man på olika sätt förbättra resultatet jämfört med vad den enkla mekaniska lösningen kunde åstadkomma: jämnare gång, större kraft, bättre segdragnings­ förmåga, effektivare förbränning, mindre avgasutsläpp etcetera. En modern bil har ett stort antal små datorer som kontrollerar tändning, bränsleblandning, kylning, bromssystem, säkerhetssystem för att förebygga olyckor och för att mildra konsekvenserna av en kollision med ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


70

3  P r o c e ss o r e r o c h pr og ram

mera. Ett direkt märkbart resultat är hur enkelt det blivit att starta en bil i kallt väder. Man vrider på startnyckeln: bilen startar. Med gamla bilar utan modern IT var det en konst att starta. Beroende på yttertemperatur och hur länge sedan bilen körts måste man på ett speciellt och välkoordinerat sätt manövrera manuell choke, tändningsnyckel och gaspedal. Ett felgrepp kunde omöjliggöra ytterligare försök därför att det blivit för mycket bensin i cylindrarna eller att batteriet tappat orken. Bilens användargränssnitt till föraren har således även det förändrats genom datoriseringen av tändningssystemet. Förut var det en konst att starta bilen, nu är det trivialt. I viss mening kan man säga att man inte bara har ersatt mekaniken med beräkningar, man har samtidigt integrerat (eller eliminerat behovet av) vissa kunskaper som tidigare behövde finnas hos användaren. En viss kognitiv avlastning för föraren, med andra ord. Det kan finnas många olika anledningar till att göra sådana ersättningar av materia och energier och krafter med beräkningar, av mekanik med symbolik, av det slag tändningssystemet exemplifierar. Det kan bland annat bli billigare, det kan förbättra funktionen, det kan minska resursförbrukningen, det kan ge ökad säkerhet, ökad flexibilitet, det kan bli lättare att modifiera och utveckla vidare. Den här utvecklingen är ännu bara i början. Om man alls har uppmärksammat förbättringarna, igenkänns de kanske ändå inte så ofta som effekter av användningen av modern informationsteknik. Mer uppenbara är de många exempel på hur datorer ersatt symboliska funktioner och aktiviteter. Det räcker att nämna ett par exempel. Ännu på 1950-talet sköttes uppkopplingar av telefonsamtal av växeltelefonister. De ersattes av elektromekaniska automatväxlar, som i sin tur har ersatts av datoriserade växlar. I det här fallet har ersättningen gått via ett mekaniskt mellanled. Som exempel två kan vi ta kontantuttag av pengar: datoriseringen med bankautomater ersatte manuell kassa­ betjäning. Bankautomaterna har i sin tur redan en minskande roll i och med den minskade användningen av kontanter till fördel för elektroniska transaktioner. Just i bokföring och ekonomiska transaktioner av olika slag, liksom i koordinering och kommunikationer, har den moderna informationstekniken ersatt manuella och mekaniska (och elektro­mekaniska) system i stor skala – och att helt enkelt säga ”ersätta” är egentligen missvisande: med den omfattning sådan användning har idag skulle den vara omöjlig utan datorer och datornät. Kapaciteten, snabbheten, och den globala räckvidden i dagens ekonomiska transaktionssystem vore omöjlig att upprätthålla om allt skulle skötas av människor. Datorn som ersättning, kalkyler som substitut för fysiska proces©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  71

ser eller för mänskliga symboliska aktiviteter, är förstås bara början. Det som startar som en ersättning utvecklas snart till något annat och mer, och de intressantaste tillämpningarna är kanske de som börjar i en ny, originell idé som inte går ut på att ersätta eller förbättra något redan existerande.

Programmering är att beskriva och skapa beteende Datorn är inte den första programmerade maskinen. Ett välkänt historiskt exempel på en programstyrd maskin är den automatiska så kallade jacquardvävstolen, uppfunnen av Joseph Jacquard, tidigt 1800-tal. Vävmönstret bestäms av ett antal hålkort sammanknutna i en slinga som löper genom en mekanisk avläsningsanordning. Ett annat exempel är det självspelande pianot, pianolan, där en hålremsa kontrollerar spelningen. Redan detta steg, att från en maskin separera ut en särskild lätt löstagbar och utbytbar del som kontrollerar maskinens beteende är intressant. Vi får å ena sidan en processor, å andra sidan ett program. Processorn exekverar programmet. Det betyder att den beter sig i enlighet med och som en effekt av programmet. Nu räcker inte detta för att skapa en dator: jacquardvävstolar, pianolor och andra sådana tidiga programmerade maskiner skapar fysiskt snarare än symboliskt beteende, och deras förmåga att bete sig på olika sätt är svårt begränsad jämfört med en dator. Det är två villkor inblandade i definitionen av begreppet program: 1 programmet representerar – beskriver – det avsedda beteendet 2 programmet orsakar det avsedda beteendet. 1. Det första villkoret är att programmet är en beteendeplan. Planer är en gammal uppfinning, och man skulle nog till och med kunna hävda att så länge människan har varit människa, har hon skapat och följt planer. Med skrivkonsten underlättas planeringsarbete och spridandet, upprätthållandet och följandet av planer. En stor del av vår tid upptas i dagens samhälle av skapande, modifierande och följande av planer: många är dokumenterade, en del har vi bara i huvudet. Men dessa planer är inte program eftersom de inte automatiskt orsakar det beteende som planen representerar. Med instruktionerna i handen försöker jag att sätta samman Ikeamöbeln, men det är fullt möjligt att jag inte riktigt förstår vad som menas och misslyckas med hopsättningen. Och även om jag förstår allting så kan jag välja att sätta ihop delarna på ett annat sätt eller välja att inte alls sätta ihop dem.

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


72

3  P r o c e ss o r e r o c h pr og ram

2. Det andra villkoret avser ett nödvändigt orsakande som kan förstås fullkomligt i termer av kända naturlagar. Att någonting orsakar ett beteende räcker dock inte för att det ska vara ett program. Fjädern i en mekanisk klocka kan sägas vara orsak till timvisarens vandring runt urtavlan, men utgör ingen plan för den. Sandstrandens gropar och ojämnheter kanske orsakar myrans krokiga färdväg, men utgör ingen plan för den (figur 3.3). Ett program måste representera det beteende som det ytterst orsakar, det avsedda beteendet. Detta kräver ett förtydligande. Låt oss ta pianolan som exempel. Hålremsan passerar en avläsningsanordning. Låt oss anta att denna fungerar med hjälp av elektriska brytare, fjädrande kontakter som ligger an mot hålremsan, så att en strömkrets sluts när ett hål passerar en av brytarna. Det konkreta programmet, hålremsan, orsakar alltså en elektrisk ström, som i sin tur påverkar exempelvis en elektromagnet eller vad det kan vara, och händelsekedjan fortsätter fram till dess att en ton ljuder på avsett sätt. Det är endast den sista händelsen som hör till det programmerade, det avsedda beteendet. Betraktat som ett program beskriver hålremsan ”tonbeteendet”, medan andra händelser på vägen inte är representerade (men väl orsakade) av programmet. Den följd av

Figur 3.3  ”Simons myra” (Simon’s ant) är ett ofta citerat exempel från Herbert Simon. En myra vandrar över en sandstrand, dess färdväg är mycket oregelbunden och komplicerad. Simons poäng är att myrans onekligen komplicerade beteende inte nödvändigtvis härrör från en komplex färdplan inuti myran, utan snarare från omgivningens oregelbundna topologi. Myran använder kanske mycket enkla regler som att väja höger när den känner av ett motstånd till vänster. (Jämför även boids, figur 3.15 , s. 88) (Illustration: Jonny Hallberg)

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  73

händelser som leder från hålremsan fram till tonen är instrumentella för tonens frambringande. För fullständighetens skull ska jag också påpeka att det alltid finns andra händelser, andra effekter som orsakas av programmet, som varken är representerade eller instrumentella, de brukar kallas sidoeffekter. De kan exempelvis vara det klickande ljud som uppstår när ett hål i hålremsan passerar förbi en kontakt, och den värme som skapas av den elektriska strömmen. En viktig poäng här är att de instrumentella händelserna är nödvändiga för att det avsedda beteendet ska uppstå, men precis vilken kedja av instrumentella händelser som leder från program fram till det avsedda beteendet är fullkomligt godtyckligt. Vi kan till exempel byta den elektriska hålremsläsaren mot en optisk som fungerar med ljusstrålar och fotoceller och så vidare, medan programmet kan förbli oförändrat och beskriva och orsaka exakt samma avsedda beteende, trots att det första som händer inte längre är att en elektrisk kontakt sluts, utan att en ljusstråle släpps fram. Det är väsentligt att programmet är ett uttryck i ett språk, ett systematiskt representationssystem, så att den som programmerar kan koncentrera sig på det avsedda beteendet utan att behöva befatta sig med ”orsakandet”. Skulle man som programmerare börja tänka i termer av magnetfält på snurrande hårddiskar, elektriska strömmar i datorchip, på hur ett stort antal komplicerade orsakskedjor som förknippar fysiska händelser med varandra slutligen ska leda fram till att vissa pixlar på en dataskärm skiftar färg, så vore man förlorad redan innan man ens fått datorn att beräkna 1+1. Att programmet ska vara tillräckligt för att – givet processorn – i sträng mening orsaka det avsedda beteendet ställer hårda krav på fullständighet i programmet och hårda krav på exakthet och entydighet i programspråkets semantik. Att beskriva ett beteende med ett program­ språk skiljer sig därför åtskilligt från att uttrycka sig naturligt i ett naturligt språk. Detta är en av svårigheterna för nybörjaren i programmering: ingenting kan underförstås, ingenting kan bara antydas, allt måste beskrivas i detalj, klart och entydigt. Om ett program är en beteendeplan som orsakar det planerade beteendet, följer att programmering måste vara att utforma ett lämpligt beteende (ett beteende som svarar mot ett visst behov) och att representera denna utformning i ett lämpligt programspråk. Specifikt betyder det att datorprogrammering är att utforma och representera symboliska beteenden. I vilken mån är det möjligt att i detta arbete skilja utformandet av beteendet från formuleringen av planen? Vi återkommer till den frågan i kapitel 8, Algoritmiskt tänkande. ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


74

3  P r o c e ss o r e r o c h pr og ram

GENERALITET OCH PORTABILITET

En underförstådd förutsättning är att programmet ur materiell synpunkt är litet, enkelt och lätt att byta – jämfört med processorn. Om det inte vore så skulle det inte vara någon poäng med programmering; man kunde lika gärna byta eller göra om maskinerna själva i stället. Processorn, hård­ varan, maskinvaran är relativt stor, dyr och svårföränderlig. Programmet, programvaran eller mjukvaran, är materiellt sett mycket litet, billigt och lätt att förändra. Detta stämmer bra i exempel som pianolan och jacquardvävstolen. Men datorer blir ju allt mindre och billigare? Det är riktigt, men observera att vi talar om det relativa förhållandet mellan maskinvara och programvara, och det vi ska jämföra är egentligen kostnaden och besväret att byta ut ett program ställt emot kostnaden och besväret att byta ut en hårdvaruprodukt mot en annan hårdvaruprodukt. Att programvaror trots allt kan vara ganska dyra beror på att alltmer sofistikerade program kräver allt större arbetsinsatser för att konstru­eras, och denna utvecklingskostnad måste betalas på något sätt. Effektivi­sering och automatisering av programmeringsarbetet har inte kommit så långt som man skulle kunna önska, även om mycket har hänt när det till exempel gäller programspråk och utvecklingsverktyg. Det kan också diskuteras hur långt det är möjligt (och lämpligt) att gå när det gäller automatisering av programmering. Två viktiga egenskaper gäller programmerade maskiner i allmänhet och datorer i synnerhet: 1 generalitet 2 portabilitet. 1. Med generalitet menas här att en processor kan exekvera flera olika program. Medan en traditionell maskin har ett fixerat beteende, kan en programmerad maskin uppvisa ett helt spektrum av beteenden. Programmet kan bytas ut eller ändras, medan processorn förblir densamma. En jacquardmaskin kan på ett ögonblick ändras för att väva en matta med ett helt annat mönster. En pianola kan fås att spela vilket verk som helst ur pianolitteraturen. Beteenderummet är till och med ännu större: pianolan kommer att kunna spela även pianoverk som ännu inte har skrivits, melodier som ingen ännu har hört eller tänkt. 2. Med portabilitet menas att ett program kan exekveras av flera olika processorer. Ett program kan flyttas mellan två maskiner, eller – eftersom förutsättningen är att det konkreta programmet är litet och enkelt och utnyttjar ett billigt medium, ett billigt material – det kan lätt och ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  75

billigt kopieras och distribueras till flera maskiner som alla därför kommer att bete sig på samma sätt. Som vi redan har konstaterat är det inte heller ett nödvändigt krav att processorerna är exakt likadana, så länge deras interna kedjor av instrumentella händelser upprätthåller programspråkets semantik. Programmet är lätt och litet, enkelt att förändra och byta ut. Programmet kan lätt kopieras i så många exemplar man vill ha, och det är lätt att distribuera. Programmet kan vara komplext, utan risk att det börjar slira eller kärva. Det nöts inte ut. Eftersom programvaran har så många fördelar gentemot maskinvaran leder det naturligt till en strävan att flytta över mer och mer från maskinvara till programvara. Kan man åstadkomma samma funktioner med mer programmering och mindre mekanik och materia, så går utvecklingen med en viss ekonomisk nödvändighet i riktning mot mer programvara och mindre maskinvara. Vi får en allmän, ”avmaterialiserande” trend som illustreras av det tidigare exemplet med den moderna bilens tändningssystem. Det finns också en ekonomiskt viktig skillnad mellan att tillverka program och andra informationsprodukter och att tillverka bilar (eller att stå till hands med personliga tjänster som hårklippning, eller att odla potatis): Varje ny bil (eller hårklippning eller potatis) som produceras innebär en kostnad i materialförbrukning och arbetsinsatser. Med långa produktionsserier blir även en hög utvecklingskostnad eller investeringskostnad ändå bara en liten del av totalkostnaden för varje bil. Med programvaror är det tvärtom. Att skapa en ny kopia av programmet kostar i princip ingenting – utvecklingskostnaden är hela kostnaden. Denna skillnad mellan industrisamhällets (liksom jordbrukssamhällets) och tankesamhällets produktionsförutsättningar finns det anledning att komma ihåg och att reflektera över. Generalitet och portabilitet är en viktig del av förklaringen till datori­ seringens genomslagskraft, men det är långt ifrån hela förklaringen. Det är också en fråga om beräkningskraft, vilket vi ska gå närmare in på i kapitel 4, Beräkning.

Datorarkitektur Den grundläggande organisationen i en dator och hur det går till när ett program exekveras och beräkningar görs kallas datorarkitektur – computer architecture. Den så kallade von Neumann-arkitekturen (som nog mer rättvist borde ha fått heta Turing-arkitekturen) introducerades redan på 1940-talet och är ännu idag vanlig, med olika modifikationer och tillägg. ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


76

3  P r o c e ss o r e r o c h pr og ram

von Neumann-arkitekturen är uppbyggd kring en central processorenhet, centralenhet (CPU, central processing unit) och en minnesenhet, ett primärminne (primary storage, main memory); därtill kommer in- och utmatningsenheter. CPU:n består av en styrenhet (control unit) och en aritmetisk-logisk enhet (ALU, arithmetic logic unit). Styrenheten hämtar en instruktion i taget från programmet som är lagrat i primärminnet, avkodar den och ser till att den utförs, vilket sker i ALU:n, den aritmetisk-logiska enheten, som kan utföra olika grund­ läggande matematiska och logiska operationer på data som hämtas från primärminnet, med resultat som lagras i primärminnet. Eftersom väsentligen all bearbetning sker i CPU:n innebär detta ständiga transporter av data och instruktioner från och till primärminnet. Sådana transporter görs via en så kallad buss – bus – en intern kommunikationskanal i datorn. I den ursprungliga von Neumannarkitekturen delar rena datatransporter och instruktionstransporter på samma buss, medan man i en något modernare variant, den så kallade Harvard-arkitekturen, har separata bussar. Primärminnet består av en sekvens av minnesceller av konstant storlek vars innehåll kan avläsas och ändras genom referens till deras adress, dvs. ordningsnummer. Transport av adresser från CPU:n till primärminnet sker via en särskild adressbuss. Storleken på minnescellerna varierar mellan olika primärminnen: den kan till exempel vara 8, 16, 32, 64 eller 128 bitar. Bredden av olika databussar, maskininstruktionernas längd och storleken på registren (se nedan) är anpassade därefter. Ju större minne man har, ju fler minnes­ celler, desto fler adresser behövs, desto större adressrymd – address space – vilket också påverkar bredden på adressbussen.

Primärminne

Styrenhet

Aritmetisklogisk enhet

CPU

Figur 3.4  Översikt av von Neumann-arkitektur, med primärminne, in- och utmatningsenheter, samt centralenhet som består av aritmetisk-logisk enhet och styrenhet.

Ackumulator

Inmatning

Utmatning

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  77

Adress

Minne

00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 ...

0010111011000001 1101001100011000 0101001100001101 0000000110001010 0010111011000001 1001001111110000 0000000000011111 0010111011000001 1101001100011000 0101001100001101 0000000110001010 0010111011000001 1001001111110000 0000000000011111 0010111011000001 1101001100011000 0101001100001101 0000000110001010 0010111011000001 1001001111110000 0000000000011111 ...

Ladda CPU Lagra

Primärminnet är ett så kallat random access-minne, vilket betyder att åtkomsttiden – access time – tiden det tar att hämta innehållet i en minnes­cell till CPU:n, såväl som tiden det tar att lagra data i en minnescell – är i princip konstant, oavsett var i minnet den cell som adresseras finns, och oavsett vilken cell som adresserats dessförinnan. Detta kan kontrasteras mot ett minne med sekventiell åtkomst som det numera mindre vanliga magnetbandsminnet: man måste spola fram bandet till den del man vill läsa, och åtkomsttiden blir därmed kort eller lång, beroende av var på bandet man har varit och läst eller skrivit strax innan. Inte heller roterande minnen som hårddiskar, cd och dvd är random-access: skivan måste rotera fram till läshuvudet ett varierande antal grader och läshuvudet måste flytta radiellt till rätt spår ett mindre eller större avstånd. Idag refereras till vardags primärminnet ofta som ”RAM-minnet”. Det är korrekt såtillvida att primärminnet är av typen random-access; däremot är ju inte ett random-access-minne nödvändigtvis ett primärminne: ett exempel är vanliga usb-minnen: flashminnen som måste betraktas som sekundärminnen (se nedan). Såväl de data (symboler) som beräkningarna görs på, indata, utdata, mellanresultat, som de program, de symboliska representationerna av de ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r

Figur 3.5 Primärminnet, här visat med binär representation av adresser och minnesinnehåll.


78

3  P r o c e ss o r e r o c h pr og ram

procedurer som används i beräkningarna, lagras således i primärminnet – detta är en karakteristisk egenskap hos von Neumann-arkitektur. En annan karakteristisk egenskap är att alla beräkningar görs på ett och samma ställe (CPU:n) och väsentligen i sekvens. Nyare arkitekturer försöker på olika sätt att komma förbi den flaskhals som uppstår med detta arbetssätt. CPU:n innehåller ett mindre antal register, mycket små minnen med speciella uppgifter, bland annat för att lagra • kopia av den maskininstruktion som just exekveras

(instruktionsregister)

• nästa instruktions adress i primärminnet (programräknare) • ytterligare adresser för mer avancerad adressering

(olika adressregister)

• data som just bearbetas, tillfälliga mellanresultat (ett eller flera

register, ibland benämnt ackumulatorregister, där operationer verkligen utförs).

Dessa register är inte bara små: de är också mycket snabba och kan ha speciella kapaciteter för sina olika specifika uppgifter. En typisk arbetscykel kan se ut så här (se figur 3.6): 1 nästa instruktion hämtas från minnet till instruktionsregistret och tolkas där 2 eventuella extra data som behövs för att utföra instruktionen hämtas från minnet 3 instruktionen utförs av ALU:n – addition, multiplikation, jämförelse etcetera 4 uppdatering av programräknaren – ofta bara genom att addera 1; ibland kan en instruktion själv innehålla adressen till nästa instruktion. Alla datatransporter och operationer går i takt, och takten anges centralt av processorklockan. En typisk klockfrekvens på processorklockan i dagens datorer är omkring 2 GHz, dvs. 2 miljarder klockcykler per sekund, vilket innebär en klockcykel mindre än en nanosekund. En enskild maskininstruktion kan ta en eller flera klockcykler att utföra. Programmet är lagrat i form av maskinkod, det programspråk som direkt kan tolkas och exekveras av CPU:n som en serie instruktioner ur den specifika processorns instruktionsuppsättning – instruction set. Maskinkoden varierar mellan olika processormodeller och är ©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


3  Pr ocessorer och pr ogram  79

primärminne gränssnitt till minnet

instruktionshämtning

instruktionsavkodning

register

ALU

Figur 3.6  Instruktionshämtning, avkodning och utförande i CPU:n.

Figur 3.7  Instruktionsformat för så kallad ARM-processor. Överst en översiktstabell med olika formatvarianter för olika klasser av operationer. Nedre delen visar mer i detalj tolkningen av olika delar av en maskininstruktion av typ ”Data Processing”.

©  F ö r f a t t a r e n o c h S t u d e n t l i t t e r a t u r


Lars-Erik Janlert är professor i datavetenskap och kognitionsvetenskap vid Umeå universitet.

Tänkande och beräkning E N INLEDNING TILL DATAVETENSK AP OCH KOGNITIONSVETENSK AP Boken behandlar bland annat begreppen algoritm, beräkning, beräkningsbarhet, datatyp, digitalitet, gränssnitt, interaktion, kognition, komplexitet, problemlösning och program. Den diskuterar informationsteknikens användning och potential, dess betydelse för samhället, samt den omorganisering av kunskap och tankeprocesser som den för med sig. Syftet är att introducera centrala datavetenskapliga begrepp och visa deras kognitionsvetenskapliga relevans, ge en inblick i datavetenskapliga betraktelsesätt och metoder och hur de präglar kognitionsvetenskaplig teori och begreppsbildning. Boken ger även läsaren inblick i algoritmiskt tänkande och programmering, samt sätter detta i ett historiskt och samhälleligt sammanhang. Tänkande och beräkning – en inledning till datavetenskap och kognitionsvetenskap vänder sig i första hand till såväl blivande datavetare som blivande kognitionsvetare men även till alla som är intresserade av informationssamhället och förhållandet mellan den moderna informationstekniken och människors sätt att tänka och agera. Boken förutsätter inga förkunskaper utöver gymnasiekompetens.

Andra upplagan

Art.nr 7189

www.studentlitteratur.se


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.