Datamaskin, elektronisk innretning som kan: Lagre, flytte, søke i, og utføre matematiske og logiske operasjoner på data. Data kan tolkes som tall (heltall, relle tall), symbol (tegn), tekst, logisk verdi, instruksjon, mm. Tallene kan representere verdier i beregninger, men vel så ofte representerer tall og bokstaver noe som er digitalisert: bokstavformer, tekst, bilder, lyd, kurver, noe som er målt, osv. 

Bortsett fra en håndfull eksperimentelle arkitekturer er de  aller fleste datamaskiner, fra bittesmå mikrokontrollere i vaskemaskiner til kraftige superdatamaskiner, bygget av de samme grunnleggende elementene. Maskinene fungerer og kommuniserer på samme måte og kan programmeres på samme måte - i prinsippet. Det er stor variasjonsbredde både med hensyn til ytelse og sammensetning. Mange elementer i et datasystem er standardisert slik at både maskiner og programmer kan spille sammen i store, komplekse systemer. Dessverre kan det eksistere mange forskjellige standarder på samme område, for eksempel innen fast og trådløs kommunikasjon, programmeringsgrensesnitt,  osv. Det må en være oppmerksom på når en setter sammen systemer på egen hånd. 

Datamaskiner arbeider med tall. Derfor sier vi at de er digitale. Tallene i seg selv, uten noen form for fortolkning, kalles gjerne for data. Tallene vil som regel også være informasjonsbærere, de vil representere noe som har betydning for oss. Det kan være vanlige tallstørrelser som heltall og desimaltall, eller andre typer informasjon. For eksempel er det vanlig at tallet 65 representerer bokstaven “A”. Tallene kan også settes sammen til mer kompleks informasjon. For eksempel vil tallsekvensen 65, 66, 67 ofte representere ordet “ABC”. På samme måte kan tallene i en datamaskin bli brukt til å representere omfattende og kompleks informasjon, for eksempel musikk, tegninger, tabeller og lignende.

Tall som er satt sammen i et bestemt mønster, representerer mer enn enkelttall, og kalles for en datastruktur. Eksempler på enkle datastrukturer er: koordinat-2d = <x,y>, koordinat-3d=<x,y,z>, navn=<etternavn, mellomnavn, fornavn>.

Hvorvidt datamaskiner kan forstå informasjonsinnholdet i tallene,  er et filosofisk spørsmål. Det går an å få datamaskiner til å imitere menneskelig intelligens, men til syvende og sist kan de aldri gjøre mer enn å utføre matematiske og logiske  operasjoner på ufortolkede data. Fra et rendyrket materialistisk ståsted, gjelder dette imidlertid også for menneskehjernen. Da blir skillet mellom maskinell og menneskelig intelligens mindre tydelig.

Skillet mellom data og informasjon avhenger også av hvem som betrakter tallene og hvorfor vedkommende betrakter dem. Det som fremstår uforståelige data for en vanlig bruker, kan være interessant informasjon for en erfaren programmerer.

Data som beskriver data kalles metadata. Beskrivelse av, eller en forklaring på betydningen av en datatype kan være viktig og omfattende, særlig for data som oppbevares over lang tid - for eksempel måleverdier i en pasientjournal. 

Selv de minste mikrokontrollere kan utføre millioner av instruksjoner per sekund. Det utnyttes for eksempel i motorstyringer. I en motor som gjør 3000 rotasjoner i minuttet  (ganske høyt turtall) bruker stempelet 10 millisekunder (0,010 sekund) fra topp til bunn eller omvendt. En mikrokontroller kan beregne og styre innsprøyting av drivstoff mange ganger i løpet av 10 millisekunder. Antall innsprøytinger og lengden av hver "dusj" avhenger av turtall, belastning og "gasspådrag" fra bilfører. Slik anvendelse av datateknikk er av stor betydning for utviklingen av mer effektive motorer. 

En datamaskin har alltid en eller flere prosessorer. Det er de som som utfører operasjonene i maskinen. En prosessor har et fastlagt instruksjonssett som definerer hvilke operasjoner den kan gjennomføre. I likhet med alt annet i maskinen, er instruksjonene representert i form av tall. Hver instruksjon er knyttet til en bestemt tallkombinasjon.  Ved å legge disse inn i maskinen, kan vi bestemme hva prosessoren skal gjøre og hvilke tall den skal operere på.

Det finnes mange typer prosessorer. Alle datamaskiner har en CPU (Central Processing Unit). Den gjør hovedjobben i maskinen og brukes til å koordinere alt som foregår. I tillegg finnes det spesialprosessorer som er konstruert for å utføre bestemte typer oppgaver. For eksempel har mange datamaskiner en egen grafikkprosessor (GPU).

En prosessor kan også ha flere kjerner som kan utføre operasjoner samtidig. Dette bidrar til å øke ytelsen til datamaskinen

Tallene som datamaskinen opererer på er lagret i maskinens arbeidslager. Tallene lagret i binærformat. Det vil si at de er de er beskrevet i totallsystemet, ikke titallsystemet som vi bruker til daglig. Grunnen til det, er at det er enklere å lage elektronikk som forholder seg til to tilstander enn til flere. Man kan for eksempel lagre tallene ved hjelp av små magnetiserbare punkter hvor polene kan vendes. En vei tolkes som verdien 0, når polene er motsatt tolkes det som 1. Det er slik data er lagret på magnetbånd og magnetisk disk. Andre alternativ er bruke små elektroniske brytere (vipper) som leses som 0 eller 1 - avhengig av om de er påslått eller ikke (statisk RAM), eller en elektronisk brønn - med eller uten ladning lagrer 0 og 1 (dynamisk RAM).

Et fysisk fenomen som kan skille mellom to tilstander  brukes til å lagre binære sifre - 0 og 1. Et binært siffer kalles for en bit (flertall på norsk: bit) - som er en sammentrekking av det engelske uttrykket "binary digit". Det er vanlig å gruppere åtte bit til en byte som kan holde 256 forskjellige verdier. Det er også vanlig å ha tegnsett med én byte for hvert tegn. I datamaskinens arbeidslager er det vanlig å adressere hver byte som da er den minste enhet som kan leses eller skrives i en operasjon. Et antall byte, helst en toerpotens, 2, 4 eller 8 byte danner et dataord som er den største dataenhet som kan skrives eller leses i arbeidslager i en operasjon. Jo flere bit det er i et ord, desto flere verdier kan det representere. Ordlengden til en datamaskin definerer hvor mange bit den kan behandle og overføre samtidig.

Enkle mikrokontrollere har gjerne en ordlengde på 8 eller 16 bit. Maskiner vi bruker til daglig, inkludert smarttelefoner, nettbrett og lignende, har som regel en ordlengde på 32 eller 64 bit. 64 bit kan representere positive heltall med en verdi opp til 264 - 1 = 18446744073709551615.

Dataord - ett eller flere påfølgende - blir tolket slik at de representerer negative tall, flyttall (kommatall), bokstaver, tekster, bitmatriser, osv.

Primærhukommelsen (arbeidslager) i en datamaskin er bygget opp slik man på ethvert tidspunkt kan lese og skrive data hvor som helst i hukommelsen. Dette kalles for RAM (Random Access Memory).

Hvert enkelt ord (og som regel byte) i hukommelsen har en fast adresse som prosessoren bruker til å finne frem til akkurat det dataelementet. Antall mulige adresser, og dermed også maksimal størrelse på primærhukommelsen, er begrenset av ordlengden til adressene - adresseregisterets størrelse. Adressen settes ut på bussen som er transportveien når et ord eller en byte skal skrives eller leses i arbeidslager. Bussen inneholder et antall adresselinjer som samsvarer med antall bit i adresseregistret og et antall datalinjer som tilsvarer antall bit i et dataord. 

Et dataprogram består av instruksjoner og data som har plass i arbeidslager når programmet er aktivt. Adressen til en operand som skal leses eller skrives finnes i instruksjonen enten direkte ved at adressen inngår som en del av instruksjonen eller indirekte ved at instruksjonen inneholder adressen til et register som inneholder adressen til operanden.

Den største adressen som kan oppgis i et program er normalt det største tallet som et dataord kan inneholde. Den logiske adressen er den som instruksjonen lager, den er altså begrenset av datamaskinens ordlengde. I enkle maskiner for eksempel kontrollere er logisk adresse også den fysiske adresse, og maksimal størrelse på arbeidslager er begrenset av ordlengden. 

Programmet består av et antall segmenter for eksempel ett for data og ett for instruksjoner. Sett fra programmet starter alle segmenter med adresse 0. Segmentregisteret innholder den fysiske adressen til logisk adresse 0 i segmentet.

Dette gjør det mulig å plassere programmer forholdsvis fritt i arbeidslager uten å endre logiske adresser i programmet. Og en kan ha et mye større arbeidslager enn det som er begrenset av maskinens ordlengde. 

Intels x86-prosessorer er eksempel på denne arkitekturen. Segmentregisterets innhold blir forskjøvet 4 bit til venstre når en beregner fysisk adresse. Dermed blir adressen 20 bit og en kan adressere 1 megabyte. 

\( \begin{array}{|l|c|c|c|c|c|}\hline \texttt{segmentregister}&0111&0000&0000&0111&\\\hline \texttt{addresse}&&0000&0000&0011&0010\\\hline \texttt{fysisk adresse}&0111&0000&0000&1010&0010\\\hline\end{array} \)

Et 16 bit segmentregister adresserer lagersegmenter på 16 byte, det vil si at et segment kan sarte på en adresse som er et multiplum av 16 byte: 0, 16, 32, 48, ... . 

Segmenter er gjerne få og kan ha vilkårlig lengde. Sidedeling er basert på at det fysiske lageret er delt opp i "sider" (eng.: pages) av fast lengde, ofte 4 KB. "Bildet" av  hele det kjørbare programmet inklusive data ligger på disk eller tilsvarende. Hele programmet består av et antall sider. Når programmet kjører er det en tabell i arbeidslager som blir administrert av operativsystemet. Tabellen sier om og hvor en side er plassert i arbeidslager, og om en side er skrevet til siden den ble lest inn fra disk. Når en logisk adresse blir brukt finnes den fysiske adressen ved å:

1. finne sidens innslag i sidetabellen. Hvis siden ikke har fysisk plass må siden leses inn fra disk etter først å ha funnet en ledig plass. Det kan innebære at en side mister plassen sin, og hvis den er endret må den også skrives tilbake til hovedkopien på disk. 

2. Den riktige fysiske adressen beregnes ut fra sidens plassering og de siste sifre i den logiske adressen. 

Denne algoritmen kalles kravstyrt sidedeling. Mesteparten av adresseringen skjer i maskinvare, men valg av "offer" - siden som mister plass - skjer i operativsystemet. Det gjør også eventuell utskriving av modifisert side og innlesing av siden som er referert. Operativsystemet bestemmer også hvor mange sider et program får lov til å bruke samtidig. 

Sidedelingens fordeler er at det er enkelt å finne plass, og det er bare nylig aktive deler av programmet som opptar fysisk lager. Ulempen er at innlesing av sider og utskrift av modifiserte sider kan ta mye tid. Sidedeling er effektivt der en har lokalitet både i program og bruk av data. 

Datamaskiner har som regel også hukommelse som prosessoren kan lese på samme måte som RAM'en, men ikke endre. Dette kalles for fasthukommelse eller ROM (Read Only Memory). 

Fasthukommelsen kan enten være helt uforanderlig, eller den kan kreve spesialutstyr og bestemte prosedyrer for å bli endret. ROM bidrar til å gjøre maskinen forutsigbar. Man kan lagre informasjon som forblir uforandret, nesten uansett hva som skjer. Programmer som ikke skal endres, for eksempel oppstartprogrammer ligger i ROM og kalles fastvare.

er lager som holder på data uten å bruke energi (strøm). Den viktigste lagringsformen er basert på lagring i magnetiserbart materiale.

Mediet skrives fortløpende. Hver skriveoperasjon lager et lite gap - eller uskrevet medium. Lesing skjer også forfra og en leser til en kommer til det en søker.  Dette kan lang tid, det vil si sekunder kanskje minutter. Sekvensielle medier er ikke adresserbare. De er mye langsommere  enn RAM og ROM, men er billigere, har stor kapasitet og holder på data uten å bruke strøm. Magnetbånd er det viktigste sekvensielle medium.

for varig lagring er floppydisk, magnetisk disk, magneto-optisk disk som alle er basert på magnetisk eller magneto-optisk lagring. I tillegg kommer minnepinner og SSD - Solid State Disk som begge bruker flash-lager. Adresseringsenheten som også er minste skrive- og lese-enhet er normalt fra 512 byte  til 4 KB.

Datamaskiner bruker som regel mange lagertyper. Noen typer er svært raske og er plassert tett på prosessoren slik at det går fort å transportere data frem og tilbake. Både instruksjoner og data blir som regel fraktet dit før de blir lest og behandlet av prosessoren.

Andre typer er langsommere og ligger lengre unna. Her lagrer man data som ikke er i bruk. Så flytter man tallene til og fra den raske hukommelsen etter behov. Denne skyflingen frem og tilbake kalles for mellomlagring (eng. caching).

Hvordan man setter sammen hukommelse og lagringsenheter i en maskin, er en avveining mellom praktiske hensyn, ytelse og kostnader. Jo raskere hukommelse man har, desto fortere kommer instruksjoner og data frem til prosessoren og desto fortere vil hele maskinen jobbe. Problemet er at rask hukommelse er dyrere enn langsom hukommelse. Det er også begrenset hvor mye hukommelse som kan plasseres i nærheten av prosessoren. Dyre prosessorer kan håndtere mer hurtighukommelse enn billige prosessorer.

For at en datamaskin skal fungere, må den kunne overføre data mellom de ulike komponentene i maskinen. Dette foregår ved hjelp av kommunikasjonskanaler som kalles for databusser. Disse er bygget opp ved help av et omfattende ledningsnett i maskinen og gjør det mulig å overføre data, oversatt til høy og lav spenning, frem og tilbake mellom enhetene .

Adresserering foregår ved hjelp av en separat adressebuss

Det finnes mange typer databusser med forskjellige hastigheter og tilkoblingsmuligheter. De raskeste bruker mange ledninger ved siden av hverandre slik at de kan overføre mange enere og nuller samtidig.

Datamaskiner kan gjerne inneholde flere typer databusser. I likhet med hukommelsen, er sammensetningen av dette interne transportsystemet en avveining mellom kostnader og ytelse. Raske databusser er som regel kortere enn langsomme.

En datamaskin har alltid en eller flere klokker. Klokken er en taktgiver, den bidrar til å produsere pulser med høy og lav spenning med bestemt varighet. Pulsene fordeles  til andre enheter slik at de kan gå i takt. Klokkefrekvensen sier noe om ytelsen til maskinen. Jo flere pulser per sekund desto raskere jobber den.

Instruksjonene som styrer datamaskinen ligger lagret i hukommelsen. Når prosessoren i en datamaskin startes opp, vil den begynne med å hente instruksjoner fra en forhåndsdefinert adresse i arbeidslageret, vanligvis i fastlageret. Når den første instruksjonen er gjennomført, vil den gå videre til den neste. Slik vil den fortsette til den blir stoppet eller at utførende instruksjon er en hoppinstruksjon. Da vil hoppadressen bestemme hvor neste instruksjon hentes. Man kan også få prosessoren til hoppe tilbake og gjennomføre de samme instruksjonene mange ganger.

Ved å kjede sammen instruksjoner på denne måten, kan man få maskinen til å gjennomføre sammensatte og komplekse operasjoner. Slike sekvenser av instruksjoner kalles for et dataprogram.

Dataprogrammer blir alltid beskrevet tekstlig ved hjelp av et lesbart programmeringsspråk. Slike tekster kalles for kildekode.

Kildekoden kan samsvare direkte med instruksjonssettet til maskinen. Dette kalles for assemblykode. For at prosessoren skal kunne kjøre slike programmer, må man benytte et annet program, en assembler, til å omforme den tekstlige beskrivelsen til instruksjoner (tallkombinasjoner)  som prosessoren kan utføre. Dette kalles for maskinkode.

Programmene kan også beskrives på en mer praktisk og lettlest måte ved hjelp av et høynivåspråk. Slike språk gjør det mulig å generere lange sekvenser av instruksjoner med bare noen få setninger. Da blir omformingen til maskinkode mer komplisert. Et program som omformer kildekode fra et høynivåspråk til maskinkode, kalles for en kompilator.

Alternativt kan man benytte en fortolker (eng. interpreter). Det er et program som leser kildekoden og utfører den på egen hånd, uten å oversette til maskinkode først.

I noen tilfeller blir fortolkeren brukt sammen med en kompilator. Da brukes kompilatoren til  å omforme kildekoden til et mellomformat som gjør fortolkningsprosessen enklere og mer effektiv. Slike mellomformat kalles vanligvis for bytekode.

En tredje måte å programmere en datamaskin på, er å benytte et program som definerer et kjøretidsmiljø (operativsystem) og et instruksjonssett som vertsmaskinen egentlig ikke har. Den nye "maskinen" kalles en virtuell maskin. Fordelen ved dette er at en kan kjøre de samme kompilerte dataprogrammene på mange forskjellige fysiske maskiner, forutsatt at man har tilgang på en virtuell maskin for det aktuelle språket. Man slipper altså å skreddersy programmene for hver enkelt maskintype.

Kjøring av et program med et annet instruksjonssett enn maskinenes eget kalles emulering

Alle datamaskiner, bortsett fra de aller enkleste, har egne programmer som koordinerer det som foregår i maskinene, får dem til å kommunisere med omverdenen og gjør dem brukbare i praksis. Denne samlingen av programmer kalles for et operativsystem og er en viktig del av infrastrukturen i en datamaskin. Den delen av operativsystemet som ligger tettest på maskinvaren, for eksempel programmer som styrer mellomlagring av data og programmer som avgjør hvilke programmer CPU’en skal kjøre, kalles for kjernen i operativsystemet (eng. kernel)

For at datamaskiner skal gjøre nytte for seg, må de kommunisere med omverdenen. Dette kan foregå ved hjelp av inn-enheter som oversetter fysiske inntrykk til tall som prosessoren kan lese, for eksempel bilder fra et kamera, tastetrykk på et tastatur eller avlesning fra en temperaturføler. 

Ut-enheter gjør det motsatte. De oversetter tall fra datamaskinen til fysiske uttrykk som vi kan oppfatte, for eksempel, bilder på en skjerm eller lyd fra digitale høyttalere. Slike enheter kan også få ting til å skje i omgivelsene, for eksempel styre en ventil eller skru av og på en elektrisk bryter.

Datamaskiner kan også kommunisere med andre digitale innretninger, for eksempel andre datamaskiner, lagringsmedier og lignende.

Dataene kan overføres til og fra maskinen på mange måter. Hvis den er knyttet til Internettet kan den kommunisere med milliarder av enheter over hele verden. 

Foreslå endringer i tekst

Foreslå bilder til artikkelen

Kommentarer

29. juni 2012 skrev Walter Grønli

Ytre lager ?
Høres ut som en maskindel. Det menes nok "Ytre lagre"?

Ut-enheter - de vanligste er vel ikke lenger katodestråleskjermer men LCD? Hva menes med "kan vise flere detaljer" ? (Flere detaljer enn ...?

2. juli 2012 skrev Erik Dyrhaug

Hei Walter. Ytre lager er nettopp en maskindel. Men denne artikkelen stammer fra papirleksikonet og trenger ganske riktig en oppdatering. Vi jobber for tiden med å skaffe fagansvarlige så vi får oppdatert artikler som denne.

Med vennlig hilsen,

Erik Dyrhaug
Redaksjonsmedarbeider

Har du spørsmål om eller kommentarer til artikkelen?

Kommentaren din vil bli publisert under artikkelen, og fagansvarlig eller redaktør vil svare når de har mulighet.

Du må være logget inn for å kommentere.