Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 12 september 2016
Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management 2 Assemblerprogrammeren: Programmeren voor een simpele CPU Met een assemblertaaltje Gebruik van een stack Lennart Herlaar Computerarchitectuur en netwerken 2 1
Protectie We willen het O.S. beschermen tegen foute of kwaadwillende programma s (programmeurs). 1 Gewone programma s mogen niet het geheugen van andere programma s manipuleren 2 Gewone programma s mogen niet het geheugen 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 interfaces komen zonder toestemming van het O.S. Lennart Herlaar Computerarchitectuur en netwerken 2 2
Protectie: modes 1 User/system mode 2 Geheugenbeheer Lennart Herlaar Computerarchitectuur en netwerken 2 3
Protectie: modes 1 User/system mode 2 Geheugenbeheer User mode = uitvoeren van gewone programma s Gevaarlijke operaties (o.a. I/O) niet toegestaan Lennart Herlaar Computerarchitectuur en netwerken 2 3
Protectie: modes 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 Lennart Herlaar Computerarchitectuur en netwerken 2 3
Protectie: modes 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 Lennart Herlaar Computerarchitectuur en netwerken 2 3
Adresruimte Adresruimte van een programma = de verzameling van alle adressen die een programma zou kunnen gebruiken uit te voeren instructies adressen van datastructuren en variabelen 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) geheugen Lennart Herlaar Computerarchitectuur en netwerken 2 4
Adresruimte Adresruimte van een programma = de verzameling van alle adressen die een programma zou kunnen gebruiken uit te voeren instructies adressen van datastructuren en variabelen 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) geheugen 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 geheugen gebruikt worden (fysieke adressen). Lennart Herlaar Computerarchitectuur en netwerken 2 4
Memory management 1 Eenvoudige ontkoppeling: Het begin van een programma krijgt virtueel adres 0 Het fysieke adres waar het programma staat (BASE) wordt bij elk virtueel adres opgeteld Dit gebeurt tussen de CPU en de bus Het programma heeft dit niet in de gaten Lennart Herlaar Computerarchitectuur en netwerken 2 5
Memory management 1 Eenvoudige ontkoppeling: Het begin van een programma krijgt virtueel adres 0 Het fysieke adres waar het programma staat (BASE) wordt bij elk virtueel adres opgeteld Dit gebeurt tussen de CPU en de bus Het programma heeft dit niet in de gaten fysieke adressen x+base 0 BASE LIMIT max programma virtuele adressen 0 x limit Lennart Herlaar Computerarchitectuur en netwerken 2 5
Memory management 2 Voordelen: Je kunt het programma op ieder adres in het fysieke geheugen draaien Door ook de lengte op te nemen kan de rest van het geheugen beschermd worden (de electronica test virtuele adressen 0 <= x < limit) Lennart Herlaar Computerarchitectuur en netwerken 2 6
Memory management 2 Voordelen: Je kunt het programma op ieder adres in het fysieke geheugen draaien Door ook de lengte op te nemen kan de rest van het geheugen beschermd worden (de electronica test virtuele adressen 0 <= x < limit) Nadelen: Grootte beperkt door fysiek geheugen Onmogelijk om te sharen (eenzelfde stuk geheugen in twee programma s te gebruiken) Lennart Herlaar Computerarchitectuur en netwerken 2 6
Memory management 2 Voordelen: Je kunt het programma op ieder adres in het fysieke geheugen draaien Door ook de lengte op te nemen kan de rest van het geheugen beschermd worden (de electronica test virtuele adressen 0 <= x < limit) Nadelen: Grootte beperkt door fysiek geheugen Onmogelijk om te sharen (eenzelfde stuk geheugen in twee programma s te gebruiken) Oplossingen: 1 Segmentatie (segmentering) 2 Paginering Lennart Herlaar Computerarchitectuur en netwerken 2 6
Segmentering programma 1 programma 2 fysiek geheugen instructies instructies data virtueel geheugen virtueel geheugen data Lennart Herlaar Computerarchitectuur en netwerken 2 7
programma 1 programma 2 Segmentering fysiek geheugen instructies data virtueel geheugen virtueel geheugen instructies data 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 geheugen passen Lennart Herlaar Computerarchitectuur en netwerken 2 7
CPU en stacks 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) Een speciaal register wordt gebruikt om te onthouden waar de top van de stack staat (stack-pointer). LIFO = Last In First Out (wat er het laatst opgezet is gaat er het eerst weer af) Push(waarde) = zet waarde op stack en pas SP aan Pop() = return top van de stack en pas SP aan Objecten die niet in de LIFO discipline passen worden in een heap geplaatst. Lennart Herlaar Computerarchitectuur en netwerken 2 8
Stack groei stack push/pop SP 0 Lennart Herlaar Computerarchitectuur en netwerken 2 9
Stack/heap segmenten instructies heap stack segment 0 segment 1 segment 2 Stack segment groeit naar beneden Heap segment groeit naar boven Code segment is vast en kan geshared worden Nog meer segmenten mogelijk voor shared data of libraries Lennart Herlaar Computerarchitectuur en netwerken 2 10
Adresberekening Dit gebeurt in de hardware segment offset virtueel adres BASE LIMIT protect. etc. BASE LIMIT protect. etc. + fysiek adres Lennart Herlaar Computerarchitectuur en netwerken 2 11
Paginering 1 virtueel geheugen A fysiek geheugen virtueel geheugen B Lennart Herlaar Computerarchitectuur en netwerken 2 12
Paginering 2 De virtuele adresruimte en het fysieke geheugen 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 geheugen aanwezig te zijn: In dat geval gebeurt er een trap (page fault) Bij geheugengebrek kunnen pagina s bijv. op de harde schijf opgeslagen worden (demand paging), of in het netwerk. Page tables kunnen erg groot worden, dan opsplitsen via indirectie Lennart Herlaar Computerarchitectuur en netwerken 2 13
Simpele page table virtueel adres page nr offset page nr = index page table fysiek pagina nr offset fysiek adres fysiek geheugen Lennart Herlaar Computerarchitectuur en netwerken 2 14
Meer fysiek dan virtueel geheugen Wat doen we als het fysieke geheugen groter is dan de virtuele adresruimte? Bijvoorbeeld: oorspronkelijk MS-DOS/Intel 8086 16 bits machine, 1MB fysiek geheugen Eveneens oplosbaar met segmentering Virtueel geheugen is venster in het fysieke geheugen Venster hoeft niet aaneengesloten in fysieke geheugen te liggen (paginering). Lennart Herlaar Computerarchitectuur en netwerken 2 15
Assemblerprogrammeren Lennart Herlaar Computerarchitectuur en netwerken 2 16
Assembler programmeren Registers Memory PC SP Code 0 MP RR Stack 2000 We gebruiken een hypothetische CPU: Simple Stack Machine (SSM) De meeste operaties gebeuren op een stack Enkele registers: PC = program counter SP = stack pointer MP = mark pointer RR = resultaat register Lennart Herlaar Computerarchitectuur en netwerken 2 17
Hexadecimale notatie Bij gewone decimale notatie betekent 237 : 2 100 + 3 10 + 7 algemeen: pqr = p 10 2 + q 10 1 + r 10 0 Lennart Herlaar Computerarchitectuur en netwerken 2 18
Hexadecimale notatie Bij gewone decimale notatie betekent 237 : 2 100 + 3 10 + 7 algemeen: pqr = p 10 2 + q 10 1 + r 10 0 Bij hexadecimale notatie gebruiken we 16 cijfers in plaats van 10: 0123456789abcdef (of hoofdletters) a=10, b=11, c=12, d=13, e=14, f=15 Lennart Herlaar Computerarchitectuur en netwerken 2 18
Hexadecimale notatie Bij gewone decimale notatie betekent 237 : 2 100 + 3 10 + 7 algemeen: pqr = p 10 2 + q 10 1 + r 10 0 Bij hexadecimale notatie gebruiken we 16 cijfers in plaats van 10: 0123456789abcdef (of hoofdletters) a=10, b=11, c=12, d=13, e=14, f=15 hex: pqr = p 16 2 + q 16 1 + r 16 0 bijv: hex 2A = 2 16 + 10 = 42(decimaal) Lennart Herlaar Computerarchitectuur en netwerken 2 18
Hexadecimale notatie Bij gewone decimale notatie betekent 237 : 2 100 + 3 10 + 7 algemeen: pqr = p 10 2 + q 10 1 + r 10 0 Bij hexadecimale notatie gebruiken we 16 cijfers in plaats van 10: 0123456789abcdef (of hoofdletters) a=10, b=11, c=12, d=13, e=14, f=15 hex: pqr = p 16 2 + q 16 1 + r 16 0 bijv: hex 2A = 2 16 + 10 = 42(decimaal) Om verwarring te voorkomen schrijven we soms pqr 10 of pqr 16 Voor hex wordt ook wel de notatie 0xpqr gebruikt Dus 0x2A = 42 10 Lennart Herlaar Computerarchitectuur en netwerken 2 18
Stack operaties Variabelen staan ergens in het geheugen (meestal in de stack) Operaties: bijv. aftrekken push a op de stack push b op de stack doe de sub operatie SP a b SP a b Voor de operatie Na de operatie Lennart Herlaar Computerarchitectuur en netwerken 2 19
Push en Pop operaties Om een constante op de stack te pushen: ldc n n is de constante Om een variabele uit de stack te dupliceren naar de top van de stack (push): lds n n = offset (= afstand tussen stackpointer en variabele) voorbeeld: lds 2 Lennart Herlaar Computerarchitectuur en netwerken 2 20
Push en Pop operaties Om een constante op de stack te pushen: ldc n n is de constante Om een variabele uit de stack te dupliceren naar de top van de stack (push): lds n n = offset (= afstand tussen stackpointer en variabele) voorbeeld: lds 2-2 -1 SP a b c a b c SP a Voor de operatie Na de operatie Lennart Herlaar Computerarchitectuur en netwerken 2 20
Voorbeeld sts n is de pop operatie: berg de top van de stack op in een variabele Code voor a = b c lds -1 // b lds -1 // c mul sts -3 // a = Omdat de stackpointer continu verandert moeten we de offsets iedere keer opnieuw bepalen. Lennart Herlaar Computerarchitectuur en netwerken 2 21
Demo 1 Bereken c = (a-b)*(a+b) Lennart Herlaar Computerarchitectuur en netwerken 2 22
Demo 1 Bereken c = (a-b)*(a+b) ldc 3 // a = 3 ldc 7 // b = 7 ldc 9 // c = 9 lds -2 // a lds -2 // b sub // a-b lds -3 // a lds -3 // b add // a+b mul // (a-b)*(a+b) sts -1 // c = Lennart Herlaar Computerarchitectuur en netwerken 2 22
Markpointer Adresseren t.o.v stackpointer is niet handig Markpointer: wijst naar de locale variabelen van een methode Wordt tevens gebruikt voor de parameters MP +1 +2 a b ldl n voor pushen van variabele stl n voor poppen van variabele n is de offset t.o.v. MP Lennart Herlaar Computerarchitectuur en netwerken 2 23
Demo 2 Zelfde berekening met MP Lennart Herlaar Computerarchitectuur en netwerken 2 24
Demo 2 Zelfde berekening met MP ldc 3 // a = 3 ldc 7 // b = 7 ldc 9 // c = 9 ldl 1 // a ldl 2 // b sub // a-b ldl 1 // a ldl 2 // b add // a+b mul // (a-b)*(a+b) stl 3 // c = Lennart Herlaar Computerarchitectuur en netwerken 2 24
Besturing If, while, for, methode-aanroep Bij sequentiele verwerking wordt telkens de volgende instructie uitgevoerd (PC wordt opgehoogd) Bij if, while etc. wordt een andere volgorde genomen Zogenaamde branch of sprong instructies Soms afhankelijk van een conditie (boolean) We hebben ook instructies om booleans uit te rekenen lt vervangt de top twee elementen van de stack (x en y) door de boolean x < y True = woord met allemaal 1-bits (FFFFFFFF), False = 0. Op dezelfde manier le, gt, ge, eq, ne Lennart Herlaar Computerarchitectuur en netwerken 2 25
Besturing De instructie brt label springt naar instructie label als de waarde op de top van de stack True is ( 0) Ook zo brf label bra label springt altijd (kijkt niet naar de stack). Lennart Herlaar Computerarchitectuur en netwerken 2 26
Demo 3 Spring als a < b Lennart Herlaar Computerarchitectuur en netwerken 2 27
Demo 3 Spring als a < b label: ldc 3 // a = 3 ldc 7 // b = 7 ldc 9 // c = 9 ldl 1 // a ldl 2 // b lt // a<b brt label ldl 1 // a ldl 2 // b add // a+b stl 3 // c = Lennart Herlaar Computerarchitectuur en netwerken 2 27
Loops (demo 4) for (int i=1; i<=10; i++) sum = sum+i Lennart Herlaar Computerarchitectuur en netwerken 2 28
Loops (demo 4) for (int i=1; i<=10; i++) sum = sum+i ldc 0 // sum ldc 1 // i loop: ldl 2 // i ldc 10 le // i<=10 brf klaar ldl 1 // sum ldl 2 // i add // sum+i stl 1 // sum = ldl 2 // i ldc 1 add // i+1 stl 2 // i = bra loop klaar: halt Lennart Herlaar Computerarchitectuur en netwerken 2 28
Methode-aanroep Bij een methode aanroep moeten we na afloop terugkeren (return) programma bsr methode methode ret return Lennart Herlaar Computerarchitectuur en netwerken 2 29
Methode-aanroep Bij een methode aanroep moeten we na afloop terugkeren (return) programma bsr methode methode ret return bsr methode // hier gaan we later verder... methode:... ret Lennart Herlaar Computerarchitectuur en netwerken 2 29
Stack bij bsr bsr label zet eerst de waarde van de PC op de stack Dit is het adres van de volgende instructie Springt dan naar label Lennart Herlaar Computerarchitectuur en netwerken 2 30
Stack bij bsr bsr label zet eerst de waarde van de PC op de stack Dit is het adres van de volgende instructie Springt dan naar label ret popt het adres van de stack en zet het in de PC SP xxxx PC na de instructie SP xxxx Na de bsr instructie Na de ret instructie PC Lennart Herlaar Computerarchitectuur en netwerken 2 30
Parameters en resultaat Parameters zetten we op de stack voor de bsr aanroep In de methode reserveren we ruimte voor de locale variabelen We moeten ook de markpointer goed zetten We beginnen de methode met de instructie link n n = aantal woorden voor locale variabelen Voorbeeld: methode vermenigvuldig met 2 parameters en 1 locale variabele (die we niet gebruiken) -3-2 MP +1 SP a = 5 b = 12 oude PC oude MP x Lennart Herlaar Computerarchitectuur en netwerken 2 31
Demo 5 print vermenigvuldig(7,9) Lennart Herlaar Computerarchitectuur en netwerken 2 32
Demo 5 print vermenigvuldig(7,9) ldc 7 // a ldc 9 // b bsr vermenigvuldig ajs -2 // verwijder parameters ldr RR // resultaat trap 0 halt Lennart Herlaar Computerarchitectuur en netwerken 2 32
Demo 5 int vermenigvuldig(int a, int b) { int x; return a*b; } Lennart Herlaar Computerarchitectuur en netwerken 2 33
Demo 5 int vermenigvuldig(int a, int b) { int x; return a*b; } vermenigvuldig: link 1 ldl -3 ldl -2 mul str RR unlink ret // a // b // a*b Lennart Herlaar Computerarchitectuur en netwerken 2 33
Samenvatting 1 We hebben gezien hoe het O.S. programma s tegen elkaar kan beschermen en zichzelf kan beschermen met behulp van modes (system en user mode) memory management (segmentering en paginering) paginering geeft tevens de mogelijkheid om meer virtueel geheugen te gebruiken dan er fysiek aanwezig is 2 Assemblerprogrammeren: We hebben een simpele virtuele machine gebruikt Met assemblerprogrammeren kun je programma s schrijven die direct door de CPU uitgevoerd kunnen worden zonder dat er een ingewikkelde compiler nodig is. Maar C# is toch makkelijker! We hebben het gebruik van een stack gezien Lennart Herlaar Computerarchitectuur en netwerken 2 34