Samenvatting: gestructureerde computerarchitectuur – Jelle De

advertisement
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
Download