Samenvatting: gestructureerde computerarchitectuur – Jelle De Weerdt DEEL 1 – INLEIDING MICROPROCESSOREN 1.1 Gestructureede computerarchitectuur 1.1.1 Talen, niveaus en virtuele machines pg 2 Vertaling: Elke instructie in T1 te vervangen door een equivalente serie instructies in T0. Interpretatie: Een programma schrijven in T0 dat programma’s in T1 als invoerdata accepteert en ze uitvoert door de instructies een voor een te analyseren en de equivalente T0 instructies uit te voeren. Verschil tussen de twee: Bij vertaling wordt het hele T1 programma omgezet in een T0 programma, en dan wordt dat programma uitgevoerd. De controle ligt dus in handen van het T0programma. Bij interpretatie wordt elke instructie na analyse en decodering direct uitgevoerd. Er is geen vertaald programma, de interpreter heeft de controle over de computer. 1.1.2 Hedendaagse machines met meerdere niveaus pg 5 Een computer valt te beschouwen als een serie lagen of niveau’s. De onderste zijnde de eenvoudigste, de bovenste de meest geavanceerde. Voor de hedendaagse niveau en hun overgangen, zie figuur 1-2 op p.5 1.1.3 De evolutie van machines met meerdere niveaus pg 8 Geschiedenis-gedoe, lees ik wel eens als ik de rest beu ben maar betwijfel dat het zo enorm belangrijk is. 2.1 Processors Registers: klein, snel geheugen voor het opslaan van tussenresultaten en bepaalde besturingsinformatie.De belangrijksten: - Program Counter (PC): wijst naar de volgende uit te voeren instructie - Instructieregister (IR): hierin staat de in uitvoering zijnde instructie 2.1.1 de organisatie van de CPU pg 52 De interne organisatie wordt het datapad genoemd, en bestaat uit registers, de ALU en een aantal bussen die onderdelen met elkaar verbinden. De ALU zorgt voor rekenkundige bewerkingen. De meeste instructies kunnen worden ingedeeld in twee categorieen: -> register-geheugen: geheugenwoorden worden in registers gestoken om bijv. Als ALU input gebruikt te worden -> register-register: Bijv. 2 operanden uit de registers halen, in de ALU een optelling ofzo doen ermee, en het resultaat terug in een van de 2 steken (conf. ‘add A,R0’ ofzo) Het proces waarbij twee operanden door de ALU worden gehaald en het resultaat wordt opgeslagen, noemen we de datapadcyclus. 2.1.2 Het uitvoeren van een instructie pg 53 2.1.3 RISC vs CISC pg 57 einde jaren 70: zeer complexe instructies CISC(Complex Instruction Set Computer) 1980: CPU-chips ontwerpen die geen interpretatie gebruikten = RISC( Reduced Instruction Set Computer) 1981: iets andere chip = MIPS => hieruit komt SPARC en MIPS, deze CPU's zijn niet terugwaards compatibel, simpele, snelle instructies => instucties die snel kunnen gestart worden bleken belangrijker dan de lengteduur vn een instructie RISC: simpele set instructies die in 1 cyclus v/h datapad konden worden uigevoerd: 2 registers ophalen, ze op de een of andere manier combineren en het resultaat weer opslaan in een register RISC veel sneller als CISC, waarom vleef CISC bestaan? - Kwestie v terugwaardse compatibiliteit en Intel corp. - Intel integreerde RISC in CISC( RISC kern die de simpelste instructies in 1 datacyclus toepaste terwijl de gecompliceerde op de CISC manier werden verwerkt. 2.1.4 Ontwerpprincipes voor tegenwoordige computers pg 59 Alle instructies kunnen het best door hardware worden uitgevoerd Maximaliseer de frequentie waarmee instructies worden gestart Instructies moeten gemakkelijk te decoderen zijn Alleen LOAD en STORE moeten toegang tot het geheugen hebben Zorg voor voldoende registers 2.1.5 Parallellism op instructieniveau pg 60 Pipelining Superscalaire architecturen 2.1.6 Parallellisme op processorniveau pg 64 Arraycomputers - arrayprocessor bestaat uit een groot aantal identieke processors die dezelfde serie instructies uitvoeren op verschillende gegevens oorspronkelijk: 4kwadranten: 8x8 processor/geheugenelementen, 1besturingseenheid per kwadrant zond instructies uit, die dan netjes in de maat door alle processors werden uitgevoerd, waarbij elke processor zijn eigen data uit zijn eigen geheugen gebruikte: SIMD (Single Instruction-stream Multiple Data-stream) maar: kosten te groot: slechts 1 kwadrant gemaakt - vectorprocessor, anders dan arrayprocessor worden alle optellingsoperaties uitgevoerd in 1opteller die sterk van pipelining gebruikt maakt zowel array- als vectorprocessors werken op arrays van data. Beide voeren instructies uit die bijv. de elementen van 2 vectoren bij elkaar optellen. In een arrayprocessor gebeurt dit doordat er evenveel optellers zijn als elementen in de vector, terwijl de vectorprocessor een vectorregister heeft, dat bestaat uit een aantal conventionele registers die in 1 instructie vanuit het geheugen kunnen worden geladen Multiprocessors meerdere zelfstandige CPU's 1 gemeenschappelijk geheugen => gemakkelijk werken gemakkelijk te programmeren => nood aan coördinatie (elke CPU klein deel lokaal geheugen, voor niet gemeenschappelijke zaken, wordt niet via de bus aangesproken) 2 of meerdere CPU's mogelijkheid hebben van nauwe interactie = tight coupled Multicomputers = groot aantal onderling verbonden computers geen gemeenschappelijk geheugen gemakkelijk te bouwen CPU's in multicomputers = loosely coupled 2.2 primair geheugen geheugen, memory, store, storage 2.2.1 Bits pg 68 bit: 0 of 1 decimale als binaire aritmetiek : BCD (Binary Coded Decimal) 2.2.2 Geheugenadressen pg 69 geheugens bestaan uit een aantal cellen, elke cel heeft een adres (als een geheugen n plaatsen heeft: 0 -> n-1) 8 bits = 1 byte n bytes = woorden computer met 32 woorden = > heef 4 bytes per woord 2.2.3 De volgorde van bytes pg 70 big endian: MSB ---> LSB little endian: LSB ---> MSB 2.2.5. Cachegeheugen pg 77 capaciteit van geheugens ipv snelheid worden steeds groter => te traag voor CPU bijtehouden snel geheugen : indien ze op de chip staan: te weinig plaats => kleine hoeveelheid snel geheugen (cache) en grote hoeveelheid lanzaam geheugen in de cache zitten de meest gebruikte geheugenwoorden als een bepaalde instructie wordt opgehaald dan ook de x daaropvolgende omdat die waarschijnlijk ook gebruikt worden lokaliteitsbeginsel = de observatie dat de geheugenreferenties die in een kort tijdsinterval plaatsvinden slechts een fractie van het totale geheugen gebruiken k = aantal keer woord gelezen/geschreven c = toegangstijd to de cache m = toegangstijd tot geheugen h = trefkans h=(k-1)/k miskans = 1-h gemiddelde toegangstijd=c+(1-h)m op grond v lokaliteitsbeginsel worden cache en geheugen in blokken van vaste grootte verdeeld = cacheregels ontwerp van caches: - grootte cache? - grootte cacheregel? - hoe cache organiseren? - instructies en data in zelfde cache of in verschillende? - verenigde cache (instructies en data samen) is eenvoudiger - gesplitste cache(instructies ene en data andere cache) = Harvard-architectuur - aantal caches? gesplitste cache is nu populairder => door veelvoorkomend gebruik van CPU's met pipelining, de eenheid die instructies ophaalt, moet op dezelfde moment toegang tot instructies hebben als de eenheid voor het ophalen van operanden toegang tot data moeten hebben 2.4 Input/output 2.4.1 Bussen pg 102 moederbord bevat CPU, enkel slots waarin DIMM-modules kunnen worden geklikt, verschillende hulpchips en een bus. Elk I/O-apparaat bestaat uit 2 delen: controller(besturingseenheid) en het I/Oapparaat zelf. controller = regelt bustoegang controller die blok data naar het geheugen schrijft/leest zonder tussenkomst van CPU : DMA (Direct Memory Acces) na afloop van een transfer : interrupt => CPU stopt draaiend programma en start interrupt-handler CPU gebruikt ook bus voor het ophalen van instructies en data busarbiter regelt het verkeer( I/O voorgand op CPU) cycle stealing: I/O krijgt bustoegang naar mate CPU , I/O en geheugens sneller werden = > bus overbelasting => snel busontwerp => men wil oude I/O blijven gebruiken => oude bus (ISA: Industry Standard Architecture of de terugwaarts compatibele opvolger EISA (Extended ISA)) + nieuwe bus (populairste: PCI (Peripheral Component Interconnect) 3.2 Elementaire digitale logische circuits 3.2.3 Rekenkundige circuits pg 155 ALU(Arithmetic Logic Unit): 1 circuit voor het bepalen van de AND, de OR, som van 2 machinewoorden en inversie 3.2.4 Klokken pg 158 gebruikt voor synchronisatie klok = circuit die een serie pulsen uitzendt met een precieze pulsbreedte en een prcies interval tss opeenvolgende pulsen interval = cyclustijd gebeurtenissen in een bepaalde volgorde : klokcyclus aftappen met vertraging van het origineel, timingdiagram : stijgende flank van signalen en dalende flank van de signalen = 4 tijdsstippen 3.3 Geheugen 3.3.4 Geheugenorganisatie pg 166 => afzonderlijke woorden moeten kunnen geadresseerd worden 3.3.5 Geheugenchips pg 170 3.3.6 RAM en ROM pg 173 RAM (Random Acces Memories) : lezen en schrijven SRAM (Static RAM) : interne flipflops, inhoud bewaard zolang stroom ingeschakeld is DRAM (Dynamic RAM) : geen flipflops, elke cel 1 transistor en 1 condensator, moet ververst worden om te voorkomen dat data weglekt => zeer hoge dichtheid, traag => SRAM als cache en DRAM als als hoofdgeheugen verschillende types DRAM: - FPM (Fast Page Mode) : matrix v bits - EDO-RAM (Extended Data Output RAM) : een 2de geheugenverwijzing kan beginnen voordat de vorige geheugenverwijzing afgelopen is: vergroot geheugenbandbreedte SDRAM (Synchronous DRAM) : kruising tss SRAM & DRAM, de klok maakt besturingssignalen naar de geheugenchip overbodig DDR (Double Date Rate) SDRAM: ouput bij zoel de stijgende als de dalende flank van de klok ROM (Read-Only Memory) : niet-vluchtig, kunnen niet gewijzigt worden PROM (Programmable ROM) : kunnen na fabricage 1 keer gewijzigt worden EPROM (Erasable PROM) : kan wel gewijzigt worden EEPROM : kan gewist worden door elektrische pulsen, kan terplaatste worden geherprogrammeerd fash memory : kan per blok gewist worden en herschreven 3.4 CPU-chips en bussen 3.4.1 CPU-chips pg 176 CPU nu op 1 chip sommige pinnen uitvoer andere invoer pinnen: adres-, data- of besturingspinnen om een instructie omtehalen zet de CPU eerst het geheugenadres van die instructie op zijn adrespinnen, dan zet de CPU 1 of meerdere besturingslijnen aan om het geheugen te laten weten dat hij (bijv) een woord wil lezen. Het geheugen antoord door het gewenste woord op de datapinnen v/d CPU te zetten en een signaal aan te zetten dat aangeeft dat het geheugen klaar is. Als de CPU dit signaal ziet, neemt hij het woord in ontvangst en voert de instructie uit. prestatiebepalend : aantal adrespinnen en het aantal datapinnen De besturingspinnen regelen de stroming en timing van data naar en van de CPU en hebben nog diverse andere doelen. Er zijn verschillende soorten: - busbesturing: om de rest v/h systeem te besturen en mee te delen wat de CPU wil doen - interrups: inputs die van de IO naar de CPU komen - busarbitrage: regelt het verkeer op de bus - coprocessorsignalering: communicatie tss CPU en coprocessors te vergemakkelijken - status: leveren of ontvangen toestandsinformatie - diversen: resetten v/d computer, ... 3.4.2 Computerbussen pg 178 bus = gemeenschappelijk elektrish pas tss meerdere apparaten binnen CPU: data van en naar de ALU te transporteren buiten CPU: om CPU met geheugen of I/O-apparaten te verbinden systeembus: tegenwoordig 1 geheugenbus en 1 I/O-bus busprotocol + mechanische en elektrische specificaties nodig om kaarten van 3den intepluggen hoe werken? Actieve apparaten en passieve, actieve (=masters) kunnen bustransfers in gang zetten, (=slaves) wachten op aanvragen. busmasters hebben een busdriver: digitale versterker nodig terwijl busslaves een busontvanger nodig hebben, voor master/slaves is er bustransciever open connector <-> 3toestandslijnen wired-OR: als er meerdere apparaten op een openconnector lijn worden aangezet is het resultaat een logische OR van alle signalen 3.4.3 Busbreedte pg 180 hoe meer adreslijnen een bus heeft, hoe meer geheugen de CPU rechtstreeks kan adresseren => bredere bussen nodig, meer draden => meer ruimte in beslag databandbreedte v/e bus te vergroten: de cyclustijd v/d bus verkleinen of de databusbreedte vergroten probleem: - bus skew: verschillende lijnen, verschillende snelheden - niet meer terugwaarts compatibel probleem zeer brede bussen te omzeilen => gemultiplexte bus = 32 lijnen voor het adres en data samen => minder brede bussen maar trager 3.4.4 Het klokken van een bus pg 181 synchrone bus: een lijn die door een kristaloscillator wordt aangedreven, signaal = blokgolf, alle busacties duren een geheel aantal van deze cycli (=buscycli) asynchrone bus: geen masterklok Synchrone bussen: pg182 Asynchrone bussen : pg184 3.4.5 Busarbitrage pg 186 regelt de bus als er meerdere masters zijn arbitrage kan gecentraliseerd of gedecentraliseerd zijn gecentraliseerde: daisy chaining: als de arbiter ziet dat de bus wordt aangevraagd, geeft hij een vergunning door de vergunningslijn aan te zetten. Deze lijn doorloopt alle I/O in serie, als het apparaat dat het dichtst bij de arbiter staat opgesteld, de verunning ziet, kijkt het of het een aanvraag heeft gedaan. Als het geen aanvraag heeft gedaan, geeft het de verunning door an het volgende apparaat op de lijn, enzo... tot er een apparaat is dat van de vergunning gebruikt maakt en de bus in bezit neemt het dichtsbijzijnde apparaat heeft dus meer prioriteit dan verder gelegen apparaten, om dit te voorkomen => verschillende prioriteitsniveaus met elk een aparte aanvraaglijn en vergunningslijn elk apparaat is dus verbonden met meerdere lijnen, hoogste prioriteit wint, bij gelijke prioriteit wordt gebruikt gemaakt van daisy chaining soms ook een 3de lijn = bevestigingslijn : wordt aangezet als een apparaat en vergunning hefet geaccepteerd, zodra deze aanstaat, kunnen aanvraag- en vergunningslijnen afgezet worden, hierdoor kunnen andere apparaten de bus aanvragen, en wanneer de bus weer vrij is is er onmiddelijk een volgende master gevonden CPU: laagste prioriteit I/O-apparaten: moeten de bus snel hebben om geen data te verliezen => tegenwoordig geheugen op een andere bus, zodat er geen concurrentie is gedecentraliseerde: bijv: 16 busaanvraaglijnen met prioriteiten Als een apparaat de bus wil gebruiken, zet het zijn aanvraaglijn aan. Alle apparaten hiuden de aanvraaglijnen in de gaten, zodat elk apparaat aan het einde van elke buscyclus wet of het de aanvrager met de hoogste prioriteit is => meer buslijnen, geen kosten voor arbiter andere gedecentraliseerde methode: 3lijnen, ongeacht aantal apparaten, 1 wired-OR lijn voor de aanvragen, 1 BUSY buslijn wordt aangezet door de actuele master en een 3de lijn gebruikt voor arbitrage. Hij loopt als daisy chaining door alle apparaten. Als geen enkel apparaat de bus wil, wordt de aangezette arbitragelijn door alle apparaten voortgeplant. Om de bus te krijgen kijkt een apparaat eerst of de bus vrij is en of het arbitragesignaal IN dat het ontvangt, aan staat. Als IN uit staat, kan het apparaat niet master van de bus worden en zet UIT uit. Maar als IN aan staat, zet het apparaat UIT uit, wat ervoor zorgt dat de buur stroomafwaarts IN uit ziet staan en UIT uitzet. Zo zien alle apparaten stroomafwaarts IN uit staan en zetten in overeenstemming daarmee UIT uit. Als alles weer tot rust komt heeft 1 apparaat IN aan staan en UIT uit staan. Dit apparaat wordt busmaster, zet BUSY en UIT aan en begnt zijn transfer => lijkt op oorspronkelijke arbitrae met daisy chaining maar zonder arbitrage dus goedkoper en sneller en is niet gevoelig voor stroingen in de arbiter 3.4.6 Busoperaties pg 189 gewoon: master schrijft/leest van slave gewoon: 1 woord tegelijk overbrengen maar bij caches is is het wenselijk een hele cacheregel optehalen, wanneer het lezen van een blok star, deelte de master de slave mee hoeveel woorden er moeten overgebracht worden => extra signaal BLOCK dat wordt aangezet om aantegeven dat er een bloktransfer wordt aangevraagd multiprocessorsystemen: willen unieke toegange tot kritische datastructuren variabele O of 1 zetten => kan problemen opleveren => speciale lees-wijzig-schrijf-buscyclus voorkomt dit problem = geeft bus niet vrij voor deze cyclus gedaan is buscyclus voor afhandelen interrups: meerder interrups tegelijk => gecentraliseerde arbitrage nodig + apparaten prioriteiten geven 3.6 Voorbeelden van bussen 3.6.1 De ISA-bus pg 205 ISA = Industry Standard Architecture compatibiliteit met bestaande machines en kaarten uitbreiding tot 32 bits = EISA (Extended ISA) 3.6.2 De PCI-bus pg 206 PCI = Peripheral Component Interconnect oorspronkelijk: 32bits/cyclus aan 33MHz = 133 MB/s PCI 2.2: 64bits/cyclus aan 66 Mhz = 528 MB/s 528MB/s => niet voldoende voor een geheugenbus en de bus is niet compatibel met alle oude ISAkaarten => opl: 3 of meer bussen: CPU via speciale geheugenbus met gehuegen praten en een ISAbus met de PCI-bus verbonden wordt => deze architecture wordt aanvaard belangrijkste componenten: 2 bridgechips: de PCI-bridge verbindt de CPU, het geheugen en de PCI-bus, de ISA-bridge verbindt de PCI-bus met de ISA-bus en ondersteunt ook 1 of 2 IDEschijven voordeel: CPU extreem hoge bandbreedte naar het geheugen heeft en dat de oude ISA-kaarten nog steeds kunnen worden gebruikt er bestaan veel PCI-kaarten, er bestaan opties voor voeding, breedte en timing eind jaren 90: ISA verouderd, toevoeging AGP (Accelerated Graphics Port)-bus in het ontwerp staat de bridgechip centraal, deze verbindt de CPU, het geheugen, de grafische kaart, de ATAPI-controller en de PCI-bus intern is de bridgechip gesplitst in een geheugenbridge en de I/O-bridge PCI-bus is synchroon master = initiator en slave = taret maar 64 pinnen voor adres- en datasignalen = gemultiplext busarbitrage bij de PCI: => gecentraliseerde busarbiter elk PCI-apparaat heeft 2 dedicated lijnen die van het apparaat naar de arbiter lopen: - REQ# : wordt gebruikt om de bus aan te vragen - GNT# : wordt de busaanvraag gehonoreerd om een bus aantevragen zet een PCI-apparaat REQ# aan en wacht tot het ziet dat zijn GNT#-lijn door de arbiter aangezet is de bus wordt voor slechts 1 transactie gegeven indien er maar 1 kandidaat master is : GNT#-lijn uitzetten , dit systeem maakt lange trasfers mogelijk maar geeft toch een snelle respons aan concurrerende apparaten Signalen op de PCI-bus: er zijn verplichte en optionele signalen in elke soort PCI-bus de rest van de pinnen wordt gebruikt als voeding, aarde en andere uiteenlopende funties CLK: stuurt de bus aan, PCI-bustransactie begint bij dalende flank van CLK 32 AD-signalen: voor adres en data PAR: pariteitsbits voor AD C/BE#: in cyclus 1 bevat dit het busommando, in cyclus 2 bevat het een bitmap van 4bits die aangeeft welke bytes v/h 32-bits woord geldig zijn FRAME#: wordt door de busmaster aangezet om een bustransactie te starten IRDY#: geeft aan dat de master klaarstaat om de binnenkomende data te ontvangen signalen door slave aangezet: DEVSEL#: kondigt aan dat de slave zijn adres op de AD-lijnen heeft gedetecteerd en klaar is om aan de transactie te beginnen TRDY#: kondigt aan dat de data op de AD-lijnen staat en bij schrijfacties om aan te kondigen dat hij klaarstaat om data in ontvangst te nemen melden van fouten: STOP#: zet master aan als er iets rampzaligs gebeurt en hij de transactie wilt afbreken PERR#: meldt datapariteitsfout in vorige cyclus SERR#: melden van adresfouten en systeemfouten REQ# en GNT# : voor busarbitrage RST#: om het systeem te resetten optionele signalen: meeste voor uitbreiding van 32 naar 64 bits: REQ64# en ACK64# kan de master vergunning vragen om een 64-bits transactie uit te voeren AD, PAR64, C/BE# : extensies v/d corresponderende 32-bits signalen te maken van multiprocessorsystemen: LOCK: kan de bus een aantal transacties op slot zetten INTx: aanvragen van interrups JTAG-signalen: testprocedure M66EN: hoog of laag om de kloksnelheid in te stellen PCI-bustransacties: pg 213 3.6.3 PCI Express pg 214 => behoefte meer I/O-banddreedte => ... => PCI Express architectuur v/d PCI Express: gooit parallelle bus met zijn vele masters en slaves overboord en stapt over naar een ontwerp dat gebaseerd is op snelle seriële punt-tot-puntverbindingen => staat recht tegenover ISA/EISA/PCI PCI Express levert een een general-purpose schakelaar om chips met seriële links te verbinden traditionele bridgechip + een switch die verbonden is met de bridge, elk van de I/O-chips heeft een dedicated punt-tot-puntverbinding met de switch 3 belangrijke verschillen met vroeger: - gecentraliseerde switch <=> multidrop-bus - smalle seriële p2p-verbindinen <=> brede parallelle bus - master-slave <=> apparaat zend datapakket naar ander pakket pakket = header + payload, header bevat besturingsinformatie, payload bevat de data kleine verschillen: - foutcorrigerende code voor de paketten = hoge betrouwbaarheid - verbinding tss chip en switch is langer - systeem is uitbreidbaar geworden - apparaten zijn 'hot plugable'= kunnen toegevoegd of verwijderd worden terwijl het systeem draait - apparaten en computers zijn kleiner De Protocolstack van PCI Express: => gelaagde protocolstack protocol = verzameling regeld die de conversatie tss 2 kanten regelt protocol bestaat uit fysieke laag, linklaag, transactielaag en softwarelaag fysieke laag: overbrengen van bits van een zender naar een ontvanger via p2p-verbinding elke p2p-verbinding bestaat uit 1 of meer paren van simplex links, elke link wordt een lane genoemt. PCI Express heeft geen masterklok, apparaten mogen zenden van zodra ze data te zenden hebben => maakt het systeem sneller => probleem als bericht alleen nullen bevat , lijkt op geen bericht => opl: 8b/10b-codering = 10 bits gebruiken om 1 byte werkelijke data in ee 10bits symbool te coderen linklaag: behandelt pakkettransmissie, neemt de header en payload die hij van de transactielaag krijgt en voegt er een volgnr en een foutcorrigerende code (CRC=Cyclic Redundancy Check) aan toe bij ontvangst controle , indien juist => bevestigingspakket, indien fout => herhaling van transmissie flow control: zorgt dat een snelle zender een trage ontvanger nie begraaft onder pakketten die hij niet kan verwerken transactielaag: handelt busacties af om een woord uit het geheugen te lezen zijn er 2 transacties: de ene wordt gestart door het CPU- of DMA-kanaal en vraagt om data, de andere wordt gestart door de target en levert data de transactielaag voegt ook waarde toe aan de kale pakkettransmissie door de linklaag - lane verdelen in maximaal 8 virtuele circuits - pakketten een tag geven softwarelaag: verzorgt de interface v/h PCI Express systeem naar het besturingssyteem totaal proces: opdracht gegeven aan softwarelaag => deze geeft die door aan de transactielaag => deze formuleert de opdracht in termen van ene header en payload => deze 2 delen worden doorgegeven aan de linklaag => deze hangt een volgnr aan de voorkant en een CRC aan de achterkant => dit pakket wordt dan naar de fysieke laag doorgegeven die frameinformatie aan beide kanten toevoegt en dit wordt dan verzonden. Aan de ontvanger kant gebeurt net het omgekeerde 3.6.4 De Universal Serial Bus pg 219 PCI-bus en PCI Express zijn prima om snelle randapparaten op een computer aan te sluiten maar wat met de trage zoals muis, toetsenbord,... => USB (Universal Serial Bus) doelstellingen USB: - Gebruikers hoeven geen schakelaars of jumpers op kaarten of apparaten in te stellen - Gebruikers hoeven de kast niet open te maken om nieuwe I/O-apparaten in te stellen - Er is maar 1 soort kabel, waarmee alle apparaten kunnen worden aangesloten - I/O-apparaten krijgen geen voeding via de kabel - Op 1 computer kunnen max 127 apparaten worden aangesloten - Het systeem kan met real-time apparaten werken - Apparaten kunnen geïnstaleerd worden terwijl de computer in werking is - Het is niet nodig de computer opnieuw op te starten na installatie van een apparaat - De nieuwe bus en de bijhorende I/O-apparaten zijn goedkoop te produceren USB voldoet aan alle doelstellingen USB systeem bestaat uit een root hub die in de hoofdbus wordt geplugd, deze hub heeft sockets voor kabels die verbinding met I/O-apparaten kunnen maken of voor expansiehubs zodat de topologie van een USB-systeem een boom is met de root hub binnen de computer als top wanneer een nieuw I/O-apparaat wordt ingeplug, detecteert de root hub dit en onderbreekt het besturingssysteem, het besturingsysteem vraagt dan aan het apparaat wat het is en hoeveel USBbandbreedte het nodig heeft. Indien er voldoende bandbreedte is krijgt het apparaat een uniek adres(1-127) en downloadt dit adres en andere informatie naar configuratieregisters binnen het apparaat. ... aanvullen ... 3.7 Interfaces 3.7.1 I/O-chips pg 223 via deze chips communiceert de computer met de buitenwereld er zijn veel gangbare soorten chips in omloop: - UART (Universal Asynchronous Reciever Transmitter): is een chip die een byte uit de databus kan lezen en deze bit voor bit op een lijn kan zetten voor een terminal, of die data van een terminal kan invoeren. -USART( Universal Synchronous Asynchronous Reciever Transmitter): kan naast alle UART-functies ook synchrone transmissie afhandelen op basis van allerlei protocollen PIO-chips: (Parallel Input/Output) heeft 24 I/O-lijnen die als interface kunnen dienen met elk TTL-compatibel apparaat het CPU-programma kan een 0 of een 1 naar een willekeurige lijn schrijven of ervan lezen => veel flexibiliteit CPU kan op vele manieren geconfigureerd worden simpelste manier om de chip te gebruiken is als 3 onafhankelijke 8bits poorten A,B en C, bij elke poort hoort een 8-bits lachregister. 3.7.2 Adrescodering p 224 de PIO kan op 2 manieren worden geselecteerd: als echt I/O-apparaat of als deel van het geheugen voor echt I/O-apparaat moeten we hem selecteren door middel van expliciete buslijn die aangeeft dat er naar een I/O-apparaat wirdt verwezen. En niet naar het geheugen. Als we de andere methode kiezen (memory mapped I/O) moeten we de PIO 4 bytes v/d geheugenruimte geven voor de 3 poorten en het besturingsregister vb pg 224-225 DEEL 2 – NIVEAU VAN DE MICROARCHITECTUUR ISA-niveau = instruction set architecture 4.1 Een voorbeeld van een microarchitectuur er zijn geen algemen principes over de architectuur als vb nemen we IJVM = Integer Java Virtuel Machine IJVM bevat ingewikkelde instructies deze microarchitecture zal een microprogramma in ROM bevatten dat tot taak heeft de IJVNinstructies op te halen, te decoderen en uit te voeren het microprogramma bevat een verzameling variablen die samen de toestand van de computer bepalen en die door alle functies kunnen worden benaderd instructie = opcode (operation code) + operand( welke variabele men wil) uitvoeren van deze instructies = fetch-execute cyclus 4.1.1 Het datapad pg 233 datapad is het gedeelte van de CPU dat de LU bevat met de bijhorende input en output fig 4-1 pg 235-236-237 Timing van het datapad pg 237-23 Werking van het geheugen pg 239-241 4.1.2 Micro-instructies pg 241 MAR MBR JAM ... 4.1.3 Micro-instructiebesturing: de Mic-1 pg 243 sequencer: bepaald welke signalen worden gestuurd moet tijdens elke cyclus 2 soorten informatie produceren: - de status van ieder stuursignaal binnen het systeem - het adres van de volgonde uit te voeren micro-instructie Mic-1: fig 4-6 pg 245 uitleg pg 244-248 control store MPC (Micro Program Counter) MIR (Micro Instruction Register) 4.2 Een voorbeeld ISA:IJVM 4.2.1 Stacks pg 249 4.2.2 Het IJVM-geheugenmodel pg 251 - constantenpool - het lokale variabelenframe - de operand-stack - het method-gebied 4.2.3 De IJVM-instructieset fig 4-11 pg 253: overzicht van de instructies 4.2.4 Compileren van Java naar IJVM fig 4-14 pg 257: Java - assembler 4.3 Een voorbeeld van implementatie 4.3.1 Micro-instructies en hun notatie pg 258-264 4.3.2 Implementatie van IJVM met de Mic-1 pg 264-276 4.4 Ontwerp van het microarchitectuurniveau 4.4.1 Snelheid vs kosten pg 276-279 4.4.2 Reductie van de lengte van het executiepad pg 279-285 4.4.3 Een ontwerp met prefetching: de Mic-2 pg 285-287 4.4.4 Een ontwerp met pipelining: de Mic-3 pg 287-294 4.4.5 Pipelining in 7 stadia: de Mic-4 pg 294-298 4.5 Verbetering van de prestaties 4.5.1 Cachgeheugen pg 299-305 4.5.2 Sprongvoorstelling pg 305-311 4.5.3 Out-of-order uitvoering en herbenoemen van registers pg 311-316 4.5.4 Speculatieve uitvoering pg 317-319 DEEL 3 – NIVEAU VAN DE INSTRUCTIESETARCHITECTUUR 5.3 Instructieformaten 5.3.1 Ontwerpcriteria voor instructieformaten pg 363 5.3.2 Expanderende opcodes pg 366 5.4 Adressering adressering = de methode die aangeeft waar de operanden te vinden zijn 5.4.1 Adresseringsmodi pg 372 adresseringsmodi = de ijze waarop bits in een adresveld worden geïnterpreteerd bij het bepalen van de operand 5.4.2 Onmiddellijke adressering pg 372 = immediate operand bijv MOV R1,4 5.4.3 Directe adressering pg 372 = het volledige adres te vermelden 5.4.4 Registeradressering pg 373 = zelfde als directe adressering maar specificeert een register ipv een geheugenlocatie 5.4.5 Registerindirecte adressering pg 373 de te specificeren operand heeft als bron of als bestemming het geheugen, maar het adres wordt niet permanent in de instructie opgenomen 5.4.6 Geïndexeerde adressering pg 375 = adresseren van het geheugen via een register plus een constante offset 5.4.7 Basisgeïndexeerde adressering pg 376 sommige machines bezitten een adresseringsmodus waarbij een geheugenadres wordt berekend door 2 registers op te tellen en te verhogen met een offset, deze modus = based-indexed adressing 5.4.8 Stack-adressering pg 377 Omgekeerde Poolse notatie: pg 377 Evalueren van formules in omgekeerde Poolse notatie: pg 379 5.4.9 Adresseringsmodi voor sprongopdrachten pg 380 - directe adressering - registerindirecte adressering - geïndexeerde modus - PC-relatieve adressering 5.4.10 Orthogonaliteit van opcodes en adresseringsmodi pg 381 DEEL 4 – HET ASSEMBLEERNIVEAU wordt geïmplementeerd door middel van vertaling ipv interpretatie vertalers: programmas die in een bepaalde taal geschreven gebruikersprogramma's naar een andere taal converteren brontaal: de taal waarin het oorspronkelijke programma is geschreven doeltaal: de taak naarwaar het wordt geconverteerd vertaling wordt gebruikt als er een processor bschikbaar is voor de doeltaal maar niet voor de brontaal vertaling <-> interpretatie vertaling : 1 het genereren van een equivalent programma in de doeltaal 2 het uitvoeren van het equivalente programma interpretatie: 1 het uitvoeren van het bronprogramma 7.1 Inleiding tot assembleertalen vertaler is een assembler als de brontaal in feite een symbolische representatie voor een numerieke machinetaal is, als de brontaal een hogere taal zoals Java of c is, wordt de vertaler een compiler genoemd 7.1.1 Wat is een assembleertaal? pg 524 een zuivere assembleertaal is een taal waarn elk statement precies 1 machineinstructie produceert => makkelijker symbolische namen en adressen te gebruiken dan binaire of octale adressen => toegang tot alle faciliteiten en instructies op de doelmachine alles wat in machinetaal kan, kan ook in assembleertaal assembleertaalprogramma is machineafhankelijk, hogere talen niet 7.1.2 Waarom assembleertalen gebruiken? Pg 525 => snelheid => toegang tot de machine 4 goede redenen: - soms nood aan snelle procedures - soms enige mogelijkheid wanneer men weinig geheugen heeft - compiler uitvoer wordt door assembler gebruikt = belangrijk die te begrijpen - inzicht: maakt de echte machine zichtbaar 7.1.3 Een statement in assembleertaal pg 528 pg 528-530 7.1.4 Pseudo-instructies pg 531 opdrachten aan de assembler zelf noemt men pseudo-instructies of assemblerdirectieven fig 7-3 lijst pg 531 7.2 Macro's = oplossing voor veelvuldig herhalen van dezelfde serie instructies 7.2.1 Definitie, aanroep en expansie van macro's pg 534 macrodefinitie: is een methode om een stuk tekst een naam te geven hierna kan men de naam schrijven ipv de code zelf = veel korter macrodefinitie bevat macroheader die de naam definiërt, een tekst met de body v/d macro en een pseudo-instructie die het einde v/d macro aangeeft bijv ENDM macroaanroep:als assembler macro tegenkomt slaat hij deze op in een macrodefinitietabel, vanaf dat moment vervangt deze elke coorkomen van de naam van de macro als opcode door de body van de macro, het gebruik van de macronaam als opcode noemt macroaanroep en de vervanging ervan door de body van de macro :macro-expansie (gebeurt tijdens het assembleren, niet tijdens uitvoering) macroaanroep <-> procedureaanroep macroaanroep: een instructie is voor de assembler om de macronaam door de body te vervangen procedureaanroep: is een machine-instructie die in het objectprogramma wordt gezet en later wordt uitgevoerd om de procedure uit te voeren fig 7-5 pg 535 7.2.2 Macro's met parameters pg 536 formele parameters actuele parameters 7.2.3 Geavanceerde aspecten pg 537 MASM probleem macros: dubbele labels => label als LOCAL declareren macro kan recursief zijn 7.2.4 Implementatie van een macrofaciliteit in een assembler pg 537 om een macrofaciliteit te hebben moet een assembler in staat zijn macrodefinities opteslaan en macroaanroepen te expanderen 7.3 Het assembleerproces 7.3.1 Two-pass-assemblers pg 538 probleem: voorwaartse referenties (bijv sprong staat pas verder gedefinieert, dus op het moment zelf weet hij niet waar de sprong naar verwijst) = er is een referentie naar een symbool gmaakt waarvan de definitie pas later komt oplossing: 1) leest het bronprogramma 2 keer (elke lezing noemt pass) = two-pass-vertaler in pass1 worden de definities van symbolen en labels verzameld en in ene tabel gezet in pass2: alle definitities zijn gekent dus kan elk statement gelezen, geassembleerd en als uitvoer gegeven worden 2) programma 1 keer lezen, en naar een tussenvorm converteren, dan een 2de pass door tabel (niet door bestand) 7.3.2 Pass1 pg 539 voornaamste functie : opbouwen van een symbooltabel ILC (Instruction Location Counter) pg 539 ... literals pg 541 7.3.3 Pass2 pg 543 functie: genereren van het objectprogramma en eventueel afdrukken van de listing van het geassembleerde programma, verder ook bepaalde informatie produceren die de linker nodig heeft 7.3.4 De symbooltabel pg 545 verschillende methodes mmar allemaal proberen ze een associatief geheugen te simuleren dat conceptueel een verzameling paren (symbool , waarde) is 1) array van paren => langzaam 2) op symbool te sorteren en dan algorutme van binair zoeken te gebruiken => sneller maar gesorteerde tabel nodig 3) hashing of hash coding: pg 545-546 7.4 Linken en laden voor de vertaling van een bronprogramma zijn 2 stappen nodig: 1) compileren of assembleren van de bronprocedures 2) linken van de objectmodules de functie van de linker: afzonderlijke vertaalde procedures te verzamelen en te koppelen tot een uit te voeren geheel dat een uitvoerbaar binair programma wordt genoemd 7.4.1 Door de linker uitgevoerde taken pg 548 fig 7-14 pg 548 fig 7-15 pg 549 relocatieprobleem: pg 550 relocatieconstate 7.4.2 De structuur van een objectmodule pg 551 bestaat uit 6delen: - bevat de naam v/d module, informatie tbv de linker - lijst met de in de module gedefinieerde symbolen = waarde - lijst met symbolen die in de module gebruikt worden - geassembleerde code en de constanten - reloactiedictionary - aanduiding v/h einde v/d module 7.4.3 Bindingtijdschip en dynamische relocatie pg 552 binding bindingstijd fig 7-17 pg 553 7.4.4 Dynamische linken pg 554 in Multics pg 555 in Windows pg 555 in UNIX pg 558