Werking van CPU CSN CS2 CPU, I/O en Memory management Piet van Oostrum 12 april 2002 De ALU kan alleen eenvoudige operaties uitvoeren (bijv. twee getallen optellen, vermenigvuldigen of testen of iets > 0 is. De uit te voeren operaties (instructies) staan in het Elke operatie heeft een code (instructiecode). In een instructie staat ook waar de gegevens (operanden) vandaan komen resp. naar toe gaan (register of ) De CPU heeft een speciaal register (program counter of instruction pointer) die aangeeft op welk adres de uit te voeren instructie staat. Een compiler breekt ingewikkelder operaties af tot een rij instructies CSN-CS2 1 CSN-CS2 1 Binair rekenen CPU en stacks Binair tellen 0 000 1 001 2 010 3 011 4 100 Optellen 0 0 00 0 1 01 1 0 01 1 1 10 Hoe kan je optellen met de logische operaties AND, OR en NOT? (1 = waar, 0 = onwaar) Voor het opslaan van tussenresultaten van ingewikkelde berekeningen wordt vaak een stack gebruikt. Voor het onthouden van een terugkeeradres van een functie- of methode-aanroep idem (terugkeeradres = waarde van PC/IP) Ook argumenten van functie- of methode-aanroep Een speciaal register wordt gebruikt om te onthouden waar de top van de stack staat (stack-pointer). Bij moderne machines loopt de stack meestal van hoge naar lage adressen. Push(waarde) = MEM[SP] = waarde; SP = SP - lengte Pop() = SP = SP + lengte; return MEM[SP] CSN-CS2 2 CSN-CS2 3 Stack Bus 1 stack push/pop SP Een bus is een soort snelweg voor gegevens Verzameling draden en connectors (slots) Afspraak over electrische signalen (welke spanningen) Afspraak over betekenis van de signalen (welke draad wat betekent) Protocol: in welke volgorde moeten de signalen gegeven worden Snelheid: hoeveel keer per sec. wordt er verstuurd Multiplexing: gaan en adressen tegelijk over de bus of na elkaar Welk onderdeel is de baas over de bus CSN-CS2 4 0 CSN-CS2 5 slides2.pdf April 12, 2002 1
Bus 2 CPU//cache Op de bus zitten verschillende onderdelen aangesloten die met elkaar kunnen communiceren: CPU,,,... Er kan maar één transport tegelijk plaatsvinden De snelheid wordt bepaald door: De frequentie van de bus (bijv. 33 MHz) De hoeveelheid gegevens die tegelijkertijd op de bus getransporteerd kan worden (de breedte van de bus). Of er multiplexing plaats vindt Vb: ISA bus: 8MHz, 8 of 16 bits Probleem: (betaalbaar) is meestal langzamer dan CPU. vb: CPU 500-1000MHz, 10 nsec (=100MHz). Andere beperkingen: bus, andere toegang Gevolg: CPU moet wachten tot gegevens uit beschikbaar zijn. Snel is superduur. Oplossing: zet een klein stukje snel (cache) tussen de CPU en het gewone. Waar? tussen de CPU en de bus Of: in de CPU. (zie CPU plaatje) PCI bus, 33 of 66 MHz, 32 bits en adressen. CSN-CS2 6 CSN-CS2 7 Cache 1 Cache 2 CPU cache Registers intern cache (level 1) level 2 cache Cache is sneller dan Cache is (veel) kleiner dan Vraag: wat stop je in de cache? Liefst: datgene dat je het meest nodig zult hebben Onmogelijk te voorspellen Daarom: wat het meest recent gebruikt is bus Principe van localiteit: programma s hebben de neiging om langere tijd in dezelfde buurt te blijven zowel m.b.t. instructies als Als de gevraagde plaats in de cache is, dan hit Anders mis : de CPU moet wachten Bij een mis moet iets anders weggegooid worden: bijv. iets dat het langst geleden gebruikt is Bij het ophalen wordt meestal een flink stuk tegelijk gepakt. Schrijven via cache: writethrough of delayed-write. CSN-CS2 8 CSN-CS2 9 In- en uitvoer I/O 1 Gegevens moeten van de CPU naar s en omgekeerd. De zit op de bus en krijgt/stuurt electrische signalen Het apparaat op de (muis, toetsenbord, printer,... ) krijgt/stuurt elctrische signalen van/naar de. Hoe communiceert de CPU met de? De moet instructies van de CPU herkennen Er moeten meerdere s kunnen zijn die elkaar niet in de weg zitten. De volgende mogelijkheden worden gebruikt: 1. Speciale IN/OUT put instructies 2. Speciale adressen voor s bus input buffer output buffer control register IN UIT 3. Direct memory access (DMA) status register device CSN-CS2 10 CSN-CS2 11 slides2.pdf April 12, 2002 2
I/O instructies I/O instructies De CPU heeft speciale instructies voor in- en output Deze instructies hebben een I/O adres als parameter (of in een apart register) De komt van/naar een ander register of adres vb. INP 16, R1 of: OUT 16, waarde I/O = 1 als er INP/OUT instructie uitgevoerd wordt I/O = 0 als er benaderd wordt R/W = 1 als van CPU bus R/W = 0 als van bus CPU Interface zet op de bus als I/O == 1 R/W = 0 adres == 16 Interface haalt van de bus als I/O == 1 R/W = 1 adres == 16 I/O R/W adres CSN-CS2 12 CSN-CS2 13 Memory-mapped I/O Memory-mapped I/O Geen speciale I/O instructies Deel van de adresruimte wordt gebruikt voor I/O Gewoon reageert niet op deze adressen Interfaces reageren op hun adresbereik Vb: MOVE R1, 0x40000010 of MOVE 0x40000010, R1 Nadeel: gat in adresruimte Vb: IBM-PC tussen 640KB en 1MB N.B soms combinatie van INP/OUT instructie en memory-mapped I/O R/W = 1 als van CPU bus R/W = 0 als van bus CPU Interface zet op de bus als R/W = 0 adres == (bijv.) 2 30 + 16 Interface haalt van de bus als R/W = 1 adres == 2 30 + 16 R/W adres CSN-CS2 14 CSN-CS2 15 DMA 1 DMA 2 Zowel I/O instructies als memory-mapped I/O verplaatsen kleine hoeveelheden CPU is intensief bezig met I/O Voor sommige toepassingen kost dit teveel CPU tijd Vooral bij real-time werk vgl het afspelen van een geluids- of videobestand DMA (Direct Memory Access) verplaatst blokken tussen en I.h.a. moet de eigen hebben BUS DMA controller DMA controller is ook een De CPU geeft DMA controler opdracht, adres, I/O adres DMA controller doet I/O na CPU heeft tijdens DMA alle tijd voor andere instructies Geheugen wordt af en toe vertraagd wegens DMA (cycle stealing) oppassen met DMA en cache. CSN-CS2 16 CSN-CS2 17 slides2.pdf April 12, 2002 3
Polling Polling vs. Interrupt Hoe weten we dat een I/O kan accepteren? (Bijv dat er een input klaar staat of dat de output kan verwerken) Simpel systeem: polling vb: toetsenbord : Als er een toets ingedrukt is wordt de code in het KB DATA register gezet De zet een bit (KB READY) aan in het status register KB STATUS Als het KB DATA register gelezen is wordt de KB READY bit weer uitgezet. while (KB_STATUS & KB_READY == 0) /* wait */ ; = KB_DATA; Nadelen van Polling: verspilling van tijd. Als je meer dan één in de gaten moet houden dan wordt het lastig Bij snelle apparaten kun je gemakkelijk iets missen als je ook iets anders wilt doen Interrupts: Laat de aangeven wanneer het nodig is. CSN-CS2 18 CSN-CS2 19 Interrupt Interrupt architectuur 1 Interface geeft een signaal aan de CPU dat er iets interessants gebeurd is De CPU onderbreekt het lopende programma om een ander stuk programma te gaan uitvoeren (Interrupt-routine) Dit vindt uit wat er aan de hand is en neemt actie Na afloop gaat de CPU verder met het onderbroken programma (meestal) programma interrupt signaal Bij het uitvoeren van een interrupt moet essentiele informatie betreffende het onderbroken programma gered (opgeborgen) worden: In ieder geval de PC (program counter) en het PSW (Processor Status Word) PSW = register, verzameling bits die toestand van de CPU aangeeft. Andere registers kunnen gered worden in de interrupt routine Bij terugkeer (RTI) moet alles weer teruggezet worden. Hiervoor wordt een stack gebruikt, meestal een aparte stack De Stackpointer moet evt. ook gered worden (oef!) return-int. int.routine CSN-CS2 20 driver CSN-CS2 21 Interrupt architectuur 2 Traps Verschillende interrupts kunnen verschillende prioriteit hebben: hogere prioriteit interrupts kunnen lagere onderbreken, omgekeerd niet In het PSW staat de huidige prioriteit (moet ook gered worden!) Om te weten welke aandacht vraagt is het goed om elke interrupt een eigen interrupt routine te geven. Dit kan door elke interrupt een nummer te geven en de adressen in een tabel te zetten (vectored interrupt) Evt. kan het nummer in een speciaal register gezet worden en via software de juiste interrupt routine aangeroepen worden (switch) Traps zijn interrupts die niet door een gegenereerd worden maar door de CPU zelf. Meestal gerelateerd aan het uitvoeren van een specifieke instructie vb. door 0 delen gebruik een adres dat niet bestaat Instructies die niet bestaan vb. float berekeningen in simpele CPU. een speciale TRAP instructie Sommige trap instructies worden voor debuggen gebruikt: trapt bij iedere of sommige (gebruikers) instructie(s) CSN-CS2 22 CSN-CS2 23 slides2.pdf April 12, 2002 4
programma 1 programma 2 Protectie Protectie: modes We willen het O.S. beschermen tegen foute of kwaadwillende programma s (programmeurs). 1. Gewone programma s mogen niet het van andere programma s manipuleren 2. Gewone programma s mogen niet het van het O.S. veranderen 3. Het O.S. mag wel aan andere programma s komen 4. Gewone programma s mogen niet speciale registers veranderen 5. Gewone programma s mogen niet rechtstreeks aan s komen zonder toestemming van het O.S. 1. User/system mode 2. Geheugenbeheer User mode = uitvoeren van gewone programma s Gevaarlijke operaties (o.a. I/O) niet toegestaan System mode = uitvoering O.S. onderdelen Alle operaties toegestaan Soms nog fijnere verdeling zodat ook binnen het O.S. onderscheid gemaakt kan worden Bij een interrupt/trap overgang naar system mode Aanroep van het O.S. dan ook via een TRAP mechanisme of speciale controle De mode staat in het PSW CSN-CS2 24 CSN-CS2 25 Adresruimte Memory management 1 Adresruimte van een programma = de verzameling van alle adressen die een programma zou kunnen gebruiken uit te voeren instructies adressen van structuren en variabelen stack heap ( = die langer bestaat dan de functie-aanroep waar hij gemaakt is) Op een 32-bits machine kan dat in principe 2 32 bytes (4GB) zijn In principe kan het meer zijn dan het aanwezige echte (fysieke) Memory management: de adressen die in een programma gebruikt worden (virtuele adressen) hoeven niet hetzelfde te zijn als de echte adressen die in het fysieke gebruikt worden (fysieke adressen). Eenvoudige ontkoppeling: Het begin van een programma krijgt adres 0 Het fysieke adres waar het programma staat (BASE) wordt bij elk adres opgeteld Dit gebeurt door de CPU (voor het adres de bus op gaat) Het programma heeft dit niet in de gaten 0 fysieke adressen BASE x+base programma LIMIT max virtuele adressen 0 x limit CSN-CS2 26 CSN-CS2 27 Memory management 2 Segmentering Voordelen: Je kunt het programma op ieder adres in het fysieke draaien Door ook de lengte op te nemen kan de rest van het beschermd worden (de CPU test virtuele adressen 0 <= x < limit) Nadelen: grootte beperkt door fysiek Onmogelijk om te sharen (eenzelfde stuk in twee programma s te gebruiken) Oplossingen: Segmentatie (segmentering) Paginering instructies fysiek instructies CSN-CS2 28 CSN-CS2 29 slides2.pdf April 12, 2002 5
Eigenschappen van segmenten: Segmenten kunnen geshared worden Elk programma kan aparte permissies hebben per segment vb. Read, Write, Execute Segmenten kunnen vast, of groeiend zijn. Elk segment moet in het fysieke passen Stack/heap segmenten instructies heap stack segment 0 segment 1 segment 2 segment BASE LIMIT protect. etc. BASE LIMIT protect. etc. + fysiek adres Stack segment groeit naar beneden Heap segment groeit naar boven Code segment is vast en kan geshared worden Nog meer segmenten mogelijk voor shared of libraries CSN-CS2 30 CSN-CS2 31 Paginering 1 Paginering 2 A CSN-CS2 32 fysiek B De virtuele adresruimte en het fysieke worden opgedeeld in pagina s van vaste grootte Elke virtuele pagina kan in een willekeurige fysieke pagina staan De afbeelding van virtuele naar fysieke paginanummers gaat via een tabel (pagetable). Pagina s kunnen eigen protecties hebben Pagina s kunnen geshared worden Een pagina hoeft niet in het fysieke aanwezig te zijn In dat geval gebeurt er een trap (page fault) Niet aanwezige pagina s kunnen bijv. op de harde schijf opgeslagen worden (demand paging), of in het netwerk. Page tables kunnen erg groot worden, dan opsplitsen via indirectie CSN-CS2 33 Paginering 3 Paginering 4 adres 16 32 0 page nr selector adres segment descriptor + page nr = index descriptor table lineair adres directory page fysieke pagina page table fysiek adres page directory page table fysiek pagina nr fysiek adres fysiek Simpele page table directory entry page table entry CSN-CS2 34 segment register CSN-CS2 35 Complexe page table (80386 Pentium) slides2.pdf April 12, 2002 6
Meer fysiek dan Wat doen we als het fysieke groter is dan de virtuele adresruimte? Oorspronkelijk MS-DOS/Intel 8086 16 bits machine, 1MB fysiek andere vorm van segmentering: Met 16-bits adressen 65536 bytes tegelijk te adresseren (segment) segmentregister geeft aan welk deel van fysieke adresruimte dit segment staat. In Windows 95/96/NT, Linux e.d. niet nodig In Windows 2000, meest uitgebreide versie: Met 32-bits adressen 4GB nodig Behoefte aan meer fysiek (grote servers) Memory management van 80386 Pentium heeft segmentregisters Virtueel is venster in het fysieke Venster hoeft niet aaneengesloten in fysieke te liggen (paginering). CSN-CS2 36 slides2.pdf April 12, 2002 7