Litt om maskinvare
Hvorfor lære om maskinvaren*? Hovedoppgaven til et OS er å styre maskinvare Vi må ha grunnleggende kjennskap til maskinvarens oppbygging for å forstå hvordan OS fungerer Skal bare se på grunnleggende prinsipper: Fokuserer på det som er relevant i forhold til OS Forenkler noe i forhold til læreboken (legger i stedet mer vekt på bruk av Linux litt senere i kurset) En del av dette er kjent stoff for de fleste (repetisjon fra Grunnleggende IT og andre emner) * aka hardware, elektronikken, leamikk
Hovedkomponenter* Central Processing Unit (CPU): Hjernen som utfører det meste av beregningene som får maskinen til å fungere. Krever kjøling. Er ofte koblet med en GPU (grafikkprosessor). Random-Access Memory (RAM): Minne/hukommelse/ arbeidslager/hurtiglager. Lagrer koden og dataene som brukes aktivt av CPU. Ikke permanent. Read-Only Memory** (ROM): Permanent minne som lagrer BIOS (Basic Input Output System), som kjøres når maskinen startes (booting/ bootstrapping). I/O-kretser (porter) som kommuniserer med eksterne komponenter som f.eks. lydkort og grafikkenheter. Busser: Parallelle signalveier som forbinder CPU både med andre interne komponenter og med eksterne I/O-kretser. * Foruten tastatur, skjerm, disk og andre nødvendigheter ** Se også firmware og UEFI
Hva inneholder (bl.a.) en CPU? Maskinens instruksjonssett: De grunnleggende operasjonene som kan utføres (ADD, SUB, MOV, JMP, JEQ...), hardkodet binært i CPU Registre Et lite antall minneceller som kan leses og skrives For regneoperasjoner og kontrolldata (f.eks. RAM-adressen til neste programinstruksjon) Arithmetic Logic Unit (ALU): Utfører alle regneoperasjoner og logiske tester Bruker oftest registrene som både operander og for å lagre resultater Kontrollenhet/instruksjonsdekoder: Henter inn neste instruksjon fra memory Dekoder, setter opp og kjører instruksjonen i ALU
CPU-ens virkemåte Utfører et (ferdig kompilert) program en og en maskininstruksjon om gangen: Neste instruksjon i RAM hentes ved overføringer på adresse- og databussen Instruksjonen dekodes og data legges i registrene hvis nødvendig ALU utfører selve instruksjonen (regneoperasjon, testing av en verdi, hopp til annen instruksjon...) Programutførelsen kan avbrytes midlertidig ved behov for å håndtere akutte behov (interrupts)
Effektivisering av CPU: Pipelining Benytter at kontroll-/dekoderenhet og ALU er separate enheter som kan jobbe parallelt. Neste instruksjon(er) hentes inn samtidig som som nåværende instruksjon utføres: Ingen stopp/ventetid for å hente instruksjoner Neste instruksjon ligger alltid klar for utførelse Virker ikke hvis det utføres et hopp i rekkefølgen av instruksjoner, pipelining må da avbrytes. Branch prediction: Gjetter hvilken instruksjon som er den neste Kan effektivisere løkkestrukturer
Minne: Adresserbare lagerceller Lagrer alminnelige programdata (oftest) i 8-bits celler Ikke permanent lagring Hver celle har en (heltalls)adresse som kan brukes for å lese verdien eller lagre en verdi Lesing og skriving skjer ved å overføre data på databussen, mellom cellen og et register i CPU Cellene ligger oftest i banker med minnebrikker på hovedkortet
Level 2 cache: Ekstern cachebrikke med egen buss *cache: depot, forråd Cache* minne Overføring av data mellom vanlig RAM og registrene i en CPU er (relativt) tidkrevende Level 1 cache: Eget minneområde i CPU der det lagres kopier av de mest brukte RAM-cellene Er mye raskere enn RAM, slipper å sende data ut på buss(ene). Krever mye bokholderi og testing for å sikre korrekthet og konsistens, caching-algoritmer er kompliserte. Håndteres av en egen cache-kontroller internt i CPU'en cache memory er transparent for programkoden,.
I/O-celler: Spesialisert minne CPU kommuniserer bare gjennom å lese og skrive minne Maskinvare for input/output har derfor et grensesnitt mot CPU som ser ut som minne: I/Oceller. I/O-celler brukes til kontroll og dataflyt fra/til disk, nettverk, tastatur, skjerm etc. Operativsystemet skal kjenne til (og skjule) detaljene for I/O-kretser og -enheter, og tilby et enklere I/O-grensesnitt til brukere/programmerere
Bussene In computer architecture, a bus (from the Latin omnibus, meaning 'for all') is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols Wikipedia
Databussen Overfører data mellom CPU og memory (RAM, ROM eller I/O-celler) Dataene overføres binært som elektriske signaler (0 eller 1) over minst 8 (evt. 16, 32) ledere.
Lesing og skriving av data CPU, minnebrikkene og I/O-enheter er alle koblet til og lytter på databussen. Det er kun én enhet om gangen som kan legge ut en verdi (elektrisk spenning) på databussen: Minnebrikken legger ut verdi hvis CPU vil lese innholdet av en minnecelle CPU legger ut en verdi på databussen hvis det skal skrives til en minnecelle CPU'en styrer kommunikasjonen på databussen og adresseringen av minne, ved i tillegg å sende signaler på adressebussen.
Adressebussen Det er bare CPU'en som kan legge en verdi på adressebussen, alle andre bare lytter * Før hver overføring av en verdi på databussen, legger CPU ut adressen som skal brukes på adressebussen. Det brukes egne dekodingskretser som leser denne adressen og sørger for at riktig minnebrikke kobles inn/vekkes opp for lesing/skriving ( chip select ). For å angi om en verdi skal leses eller skrives, og for å synkronisere CPU og minne/io, brukes enda en buss: Kontrollbussen * Dette er ikke helt sant, I/O til disk bruker også adressebussen
Kontrollbussen En toveis buss som hjelper til å styre samarbeidet mellom CPU og annen maskinvare: Angivelse av om verdien på databussen skal leses fra eller skrives til adressen på adressebussen ( write enable ). Synkronisering av CPU og minneceller eller I/O, slik at vi sikrer korrekt overføring av verdier på bussene Signaler fra I/O-enheter om at de har eller vil ha data, eller at noe akutt har skjedd (interrupt) Synkronisering mellom flere CPU'er Synkronisering av I/O til/fra disk
Busshastighet En buss-syklus (legge adresse på adresse-bussen, overføre verdi på databussen ved hjelp av kontrollbussen) kan typisk ta et hundre-milliondels sekund 100-MHz systembuss. F.eks. en 100-MHz 32-bits systembuss kan teoretisk klare å sende 32 bits/4 bytes med data til/fra CPU 100 millioner ganger i sekundet. CPU'er kan jobbe mye raskere enn dette, I Ghzområdet, bussen blir en flaskehals i maskinen. Kan forbedres ved: Asynkrone/synkrone busser (se læreboken for detaljer) Cacheminne som ikke krever overføring på systembussen
Multiprosessorer
Avbrudd / Interrupts I/O-kretser kan sende avbruddsignaler over kontrollbussen til CPU for å varsle om en asynkron hendelse som må håndteres, f.eks.: Tastetrykk Museklikk/bevegelse Innkommende data over en nettverksport Hardwarefeil CPU fullfører nåværende instruksjon og starter deretter en avbruddsrutine, før normal kjøring gjenopptas krever at systemstatus lagres før avbrudd håndteres. Avbrudd skjer også planlagt av timere, flere ganger i sekundet, for å kunne gjøre tidsstyring i OS'et.
Direct Memory Access (DMA) Spesiell maskinvare DMA-brikke for å flytte mye data raskere, typisk I/O mot disk. Data flyttes direkte mellom RAM og I/O-enhet uten å gå innom CPU. DMA-brikken legger, i likhet med CPU, adresser på adressebussen og slår av/på write enable i kontrollbussen. Konflikter med CPU på bussen unngås ved: Burst-mode: DMA stopper CPU med et avbruddsignal Cycle stealing: DMA bruker bussen når CPU sier fra at den er ledig.