Gå til indholdet

Hardware

For bedre at forstå softwareudvikling er det vigtigt at have en grundlæggende forståelse af, hvordan computere fungerer, herunder både traditionelle og kvantecomputere. Traditionelle computere bruger binær logik og transistorer til at behandle information. Kvantecomputere derimod opererer på principperne om kvantemekanik. De bruger qubits, som kan repræsentere flere tilstande samtidig, hvilket gør dem meget mere kraftfulde i visse scenarier. For nuværende skal du blot huske: traditionelle computere bruger binær logik og transistorer, mens kvantecomputere bruger qubits og kvanteporte.

Det er også vigtigt at skelne mellem hardware og software. Hardware er de fysiske dele af computeren, som CPU, hukommelse, lager og skærm. Software er de programmer og instruktioner, der fortæller hardwaren, hvad den skal gøre. De to kan ikke rigtigt adskilles i praksis: software giver mening, fordi hardwaren kan udføre instruktionerne, og hardware er kun nyttig, fordi software får den til at gøre noget konkret.

En kort historie om computing

“Computing” begyndte med simple mekaniske enheder til aritmetiske operationer. Disse udviklede sig til sofistikerede elektroniske systemer. Tidlige computere, som ENIAC og UNIVAC, var massive maskiner, der brugte relæer og radiorør. Opfindelsen af transistoren i slutningen af 1940’erne revolutionerede computing, hvilket muliggjorde mindre, hurtigere og mere pålidelige computere. Senere gjorde integrerede kredsløb og mikrochips computere endnu mindre og førte os ind i den digitale tidsalder.

I en dansk sammenhæng er DASK også værd at nævne. DASK stod for Dansk Aritmetisk Sekvens Kalkulator og var en af de første danske computere. Den blev udviklet i 1950’erne og er et vigtigt eksempel på, at computerhistorien ikke kun foregik i USA og Storbritannien.

Mens der er meget mere at fortælle om computerens historie, skal du for nuværende blot sætte pris på rejsen fra tidlige mekaniske enheder til nutidens kraftfulde computere.

Note

At udforske computerens historie kan være fascinerende og hjælper dig med at værdsætte moderne teknologi. Mange museer viser udviklingen af computing, som:

Der er også film og dokumentarer, der dækker computerens historie, såsom “The Imitation Game” (2014), “The Social Network” (2010), “Pirates of Silicon Valley” (1999), “Triumph of the Nerds” (1996) og “The Machine That Changed the World” (1992). Se i det mindste “The Imitation Game”—det er en fantastisk film om Alan Turing, Enigma-maskinen og kodebryderne i Bletchley Park under Anden Verdenskrig.

Transistorer

I hjertet af enhver moderne elektronisk enhed er transistoren. En transistor er en lille elektronisk switch, der kan tænde eller slukke en strøm, hvilket repræsenterer de binære tilstande 0 og 1 (tændt eller slukket, sandt eller falsk). Disse binære tilstande er grundlaget for al digital computing. Transistorer er pakket i integrerede kredsløb eller mikrochips, der udfører de logiske operationer og beregninger, der er nødvendige for at køre software. I dag kan milliarder af transistorer placeres på en enkelt mikrochip, hvilket muliggør de kraftfulde enheder, vi bruger hver dag.

Transistor

Info

Du har måske hørt om Moores lov, som siger, at antallet af transistorer på en mikrochip fordobles cirka hvert andet år. Denne observation, foretaget af Gordon Moore i 1965, har holdt stik i flere årtier og har drevet den hurtige udvikling af computerteknologi.

Moore’s lov (fra Wikipedia)

Traditionel computer

Traditionelle computere, ofte kaldet klassiske computere, er afhængige af binær logik til at behandle information. Transistorer og logiske porte er byggestenene i disse computere, hvilket giver dem mulighed for at udføre beregninger, lagre data og køre programmer. Som begynder behøver du ikke at vide meget om logiske porte, men det er godt at have en grundlæggende forståelse af, hvordan de fungerer.

Hvis man skal sige det meget enkelt, foregår der typisk noget i denne stil i en computer:

  1. Et input kommer ind, for eksempel fra tastatur, mus, netværk eller en fil.
  2. Data hentes ind i hukommelsen, så CPU’en kan arbejde med dem.
  3. CPU’en udfører instruktioner og behandler data.
  4. Resultatet gemmes enten i hukommelse eller på lager, eller sendes ud som output til skærm, printer eller netværk.

Det er denne bevægelse af data mellem input, hukommelse, CPU, lager og output, der er kernen i klassisk computing.

Porte og logik

En logisk port er en grundlæggende byggesten i digitale kredsløb, der udfører en grundlæggende logisk operation. Der er flere typer logiske porte, herunder AND-, OR- og NOT-porte, hver med deres egen funktion. Tænk på en port som en meget lille elektronisk komponent, der tager en eller flere indgange og producerer en udgang baseret på indgangene. Input og output er binære, hvilket betyder, at de kan være enten 0 eller 1.

Logiske porte/gates - se [her](https://mcronberg.github.io/csdemo/gates.html)

NOT-port

En NOT-port er den simpleste komponent. Den tager én input (A) og outputter den modsatte værdi (Q). Hvis A er 0, er Q 1, og omvendt. Dette kan skrives som Q = NOT A, og det kaldes også en inverter. Du vil se dette meget i programmering, især når du arbejder med binære værdier. NOT-porten kan vises i en sandhedstabel:

A Q
0 1
1 0

Læs tabellen sådan: Hvis A er 0, er Q 1. Hvis A er 1, er Q 0.

AND-port

En AND-port tager to eller flere inputs og producerer en output på 1, kun hvis alle inputs er 1. Hvis nogen input er 0, vil output være 0. Dette kan skrives som Q = A AND B. Sandhedstabellen for en to-input AND-port ser sådan ud:

A B Q
0 0 0
0 1 0
1 0 0
1 1 1

Læs tabellen sådan: Q er 1, kun når både A og B er 1.

OR-port

En OR-port tager to eller flere inputs og producerer en output på 1, hvis mindst én af inputs er 1. Output er 0, kun hvis alle inputs er 0. Dette kan skrives som Q = A OR B. Sandhedstabellen for en to-input OR-port er:

A B Q
0 0 0
0 1 1
1 0 1
1 1 1

Læs tabellen sådan: Q er 1, hvis enten A eller B er 1, eller hvis begge er 1.

XOR-port

En XOR (exclusive OR) port tager to inputs og producerer en output på 1, hvis præcis én af inputs er 1. Hvis begge inputs er ens, er output 0. Dette kan skrives som Q = A XOR B. Sandhedstabellen for en to-input XOR-port er:

A B Q
0 0 0
0 1 1
1 0 1
1 1 0

Læs tabellen sådan: Q er 1, kun når A og B er forskellige.

Tip

Du kan eksperimentere med logiske porte og sandhedstabeller på https://mcronberg.github.io/csdemo/gates.html. Prøv at ændre input og se, hvordan output ændres baseret på logikken for hver port.

NAND-, NOR- og NXOR-porte

NAND (NOT AND), NOR (NOT OR) og NXOR (NOT XOR) porte er kombinationer af de grundlæggende porte, vi har diskuteret. De kaldes universelle porte, fordi de kan bruges til at skabe enhver anden type logisk port. For eksempel kan en AND-port skabes ved at kombinere en NAND-port med en NOT-port. Disse porte er essentielle i digital kredsløbsdesign og er grundlaget for moderne computing.

Selvom du er nybegynder, kan forståelsen af disse grundlæggende begreber hjælpe dig med at sætte pris på, hvordan computere behandler information og udfører programmer.

Info

Alle programmeringssprog bruger binær logik og udtryk, så forståelse af hvordan binær logik fungerer, kan hjælpe dig med at skrive bedre kode og forstå, hvordan computere behandler information. Du vil skrive mange AND- og OR-operationer i kode, og du vil ofte se binære operationer i kode.

Kombinationer af logiske porte

Kombinationen af logiske porte og transistorer danner grundlaget for digital computing. Ved at kombinere disse byggesten kan du opbygge mere komplekse kredsløb, der udfører avancerede operationer og beregninger.

Her er et eksempel på en fuldadder, der bruger AND-, OR- og XOR-porte til at udføre en binær addition af to bits. Denne kreds tager to bits (A og B) som input og producerer to output (Sum og Carry). Sum er resultatet af additionen, mens Carry er en overførsel fra en tidligere beregning. Denne kreds er en grundlæggende byggesten i digitale computere og bruges til at udføre binære additioner.

Eksempel på beregning med porte (Full adder)

Prøv den selv på https://mcronberg.github.io/csdemo/fulladder.html.

Samme logiske porte bruges også til at gemme information. Når en transistor er tændt (1), kan den repræsentere et stykke data. Ved at organisere millioner af transistorer i et komplekst system af gates kan vi gemme og hente store mængder data.

Her er et eksempel på en latch, der bruger porte til at gemme en bit af data. Latchen kan gemme en bit, indtil den nulstilles. Dette er en simpel form for hukommelse, der bruges i computere til at gemme midlertidige data.

Hukommelse / Latch

Prøv den selv på https://mcronberg.github.io/csdemo/srandorlatch.html.

CPU

Alle disse logiske porte og transistorer samles i computerens centralenhed (CPU). CPU’en er computerens hjerne, der er ansvarlig for at udføre instruktioner, udføre beregninger og håndtere data. Den består af flere komponenter, herunder den aritmetiske logiske enhed (ALU), kontrolenheden og registre. CPU’en henter instruktioner fra hukommelsen, dekoder dem og udfører dem for at udføre de opgaver, som softwaren kræver. Dens kompleksitet er forbløffende, men helt grundlæggende er CPU’en en samling af logiske porte og transistorer, der arbejder sammen for at behandle information.

Alle de forskellige funktioner i CPU’en, såsom at udføre beregninger, håndtere hukommelse og udføre instruktioner, kan udføres af et antal instruktioner, som CPU’en kan forstå. Disse instruktioner er skrevet i maskinkode, som er et lavniveau programmeringssprog, der direkte svarer til de binære instruktioner, som CPU’en kan udføre.

Alle CPU’er har en klokfrekvens, som er antallet af cyklusser pr. sekund, som CPU’en kan udføre. Hver gang “uret” tikker, kan CPU’en udføre en instruktion eller en del af en instruktion. Jo hurtigere klokfrekvensen er, jo flere arbejdstrin kan CPU’en udføre på en given tid. Hastigheden måles i Hertz (Hz), og moderne CPU’er har klokfrekvenser i gigahertz (GHz)-området, hvilket betyder, at de kan udføre milliarder af cyklusser pr. sekund.

Hukommelse

Hukommelse er en anden væsentlig komponent i en computer. Den gemmer data og instruktioner, som CPU’en har brug for til at køre programmer. Der er forskellige typer hukommelse i en computer, såsom RAM (random access memory) og ROM (read-only memory). RAM er flygtig hukommelse, der gemmer data midlertidigt, mens computeren kører. Det er hurtigt, men mister sit indhold, når computeren slukkes. ROM, derimod, er ikke-flygtig hukommelse, der gemmer vigtige instruktioner til opstart af computeren.

Fra et elektronisk perspektiv er hukommelse (igen) lidt som en stor matrix af elektroniske komponenter baseret på transistorer, der kan tændes eller slukkes. Hver transistor kan gemme en bit (0 eller 1), og ved at kombinere mange komponenter kan du gemme en masse data. CPU’en kan læse og skrive til hukommelsen, og hukommelsen kan tilgås tilfældigt (deraf navnet random access memory).

En begynder kan let blive forvirret over, at der findes flere slags “hukommelse” i en computer. En enkel tommelfingerregel er:

  • Registre er bittesmå og ekstremt hurtige lagerpladser inde i CPU’en.
  • Cache er meget hurtig hukommelse tæt på CPU’en, som bruges til data, der ofte skal bruges.
  • RAM er arbejdshukommelsen, hvor programmer og data ligger, mens computeren kører.
  • Lager som SSD og harddisk er langsommere, men kan gemme meget mere og beholder data, når strømmen slukkes.

Jo tættere hukommelsen er på CPU’en, jo hurtigere er den typisk, men også jo mindre er der af den.

Når du tænder en computer, starter den heller ikke direkte i Windows, Linux eller et andet operativsystem. Først kører den små instruktioner fra firmware i ROM eller flashhukommelse, typisk BIOS eller UEFI. Derefter kontrolleres hardwaren, og først bagefter indlæses operativsystemet fra lagerenheden til RAM.

Lager

Udover hukommelse har computere lagringsenheder som harddiske, solid-state drives (SSD’er) og flashdrev. Disse enheder gemmer data permanent, selv når computeren er slukket. Lagringsenheder er langsommere end hukommelse, men har meget større kapacitet.

I/O-enheder

Input/output (I/O) enheder er periferiudstyr, der giver dig mulighed for at interagere med computeren. Disse enheder inkluderer tastaturer, mus, skærme, printere, scannere og netværksadaptere.

Bundkort

Bundkortet er computerens hovedkredsplade. Det forbinder alle computerens komponenter, såsom CPU, hukommelse, lagringsenheder og I/O-enheder. Bundkortet leverer de elektriske forbindelser og veje, der tillader data at flyde mellem komponenterne.

Man kan tænke på bundkortet som computerens vejnet. Her findes spor og forbindelser, som gør det muligt at sende data, adresser og styresignaler mellem delene. Når CPU’en skal læse fra RAM, skrive til lager eller sende noget til skærmen, sker det gennem disse forbindelser og forskellige busser på bundkortet.

En meget simpel CPU

Alle computere har basalt kun nogle få opgaver de kan udføre:

  • Opbevare og hente data fra hukommelsen
  • Flytte data fra et sted til et andet
  • Udføre beregninger
  • Kommunikere med omverdenen (tastatur, skærm, netværk, osv.)

Alle disse operationer udføres typisk af en CPU (Central Processing Unit), og består i virkeligheden af en meget stor samling af transistorer og andre elektroniske komponenter samlet i logiske gates. Komponenterne er samlet i forskellige overordnede blokke som kan udføre forskellige opgaver:

  • Registre - opbevarer data
  • Databus - forbindelse til andre enheder
  • Clock - flytter data fra et sted til et andet ved at åbne og lukke for forbindelser i en rasende fart
  • Control Unit - styrer de andre komponenter
  • Arithmetic Logic Unit (ALU) - udfører beregninger
  • RAM - hukommelse til midlertidig opbevaring af data
  • ROM - hukommelse til permanent opbevaring af data
  • I/O - kommunikation med omverdenen

Alle disse komponenter kan styres af kontrollinjer som kan tændes og slukkes - og den helt simple forklaring på hvad programmering er, er at tænde og slukke for disse kontrollinjer. Det sker med binære instruktioner som CPU’en kan forstå, og der er ikke noget i vejen for at du selv kan skrive disse instruktioner ved at kigge på CPU’ens instruktionsmanual.

3-tabel i SAP CPU (16 Hz)

Kvantecomputing

Kvantecomputing er et fascinerende og hurtigt udviklende felt, der lover at revolutionere computing. I modsætning til klassiske computere, der bruger binær logik og transistorer, opererer kvantecomputere på principperne om kvantemekanik (kvantefysik).

Designet af klassiske computere er baseret på transistorer og logiske porte til at behandle binær information. I sammenligning bruger kvantecomputere kvanteporte til at manipulere såkaldte qubits. Kvanteporte er mere komplekse og afhænger af kvantefænomener som superposition (superposition tillader qubits at være i flere tilstande på samme tid, hvilket betyder, at en qubit kan være både 0 og 1 samtidigt) og sammenfiltring (engelsk: entanglement, hvor to eller flere qubits bliver så tæt forbundne, at tilstanden af en qubit øjeblikkeligt kan påvirke tilstanden af en anden, uanset afstanden mellem dem).

Hardware i kvantecomputere er også meget anderledes end i klassiske computere. Mens klassiske computere bruger siliciumbaserede chips med transistorer, bruger kvantecomputere fysiske elementer som atomer, ioner, fotoner eller superledende kredsløb til at skabe og manipulere qubits.

For eksempel, for at løse en labyrint ville en klassisk computer tjekke hver sti én efter én. En kvantecomputer derimod kan udforske flere stier samtidig og potentielt finde løsningen meget hurtigere.

Tip

Hvis du er interesseret i kvantecomputing, er der mange ressourcer til at lære mere om emnet. IBM, Google, Microsoft og Rigetti er nogle af de førende virksomheder inden for kvantecomputing.

Næste skridt

Når du har set, hvordan hardware arbejder med signaler, hukommelse og instruktioner, giver det mening at gå videre til de sprog, vi bruger til at beskrive disse instruktioner på en mere menneskelig måde. Fortsæt med Programmeringssprog.