Computersystemen

Start Omhoog Computersystemen Besturingssystemen Processen Threads Gelijktijdigheid: Wederzijdse uitsluiting Gelijktijdigheid: deadlock en utisterving Geheugenbeheer Virtueel geheugen Uniprocessor planning Multiprocessor en real-time planning Bestandsbeheer I/O beheer en schijfplanning Bash Powershell Begrippen

1.1. Basiselementen

Op het hoogste niveau bestaat een computer uit een processor, geheugen en I/O componenten, met elk één of meer modules. Deze componenten zijn op een of andere manier onderling verbonden. Dus er zijn vier hoofdstructuurelementen:

  • Processor
    Bestuurt de werking van de computer en voert zijn data verwerkende functies uit. Als er maar één processor is wordt vaak gerefereerd naar de centrale verwerkingseenheid (CPU).
  • Hoofdgeheugen
    Opslag van data en programma's. Dit is meestal een vluchtig geheugen, wat wil zeggen als de computer wordt uitgeschakeld de inhoud verloren gaat. Hoofdgeheugen wordt ook wel echt- of primair geheugen genoemd.
  • I/O modules
    Verplaatst data tussen computer en zijn externe bronnen. De externe bronnen kunnen variëteit van apparaten zijn zoals secundaire geheugen (bv disks), communicatie apparatuur en terminals.
  • Systeembus
    Voorziet in de communicatie tussen processoren, hoofdgeheugen en I/O modules.
  • Figure 1.1 Computer Components: Top Level View

    1.2. Evolutie van de microprocessor

    De hardware revolutie dat ons desktop en mobiele rekenkracht bracht, was de uitvinding van de microprocessor, wat een processor op een enkel chip bevatte.

    Niet enkel zijn microprocessors de snelst voor algemene taken processoren beschikbaar, ze zijn nu ook multiprocessors; iedere chip (een socket genaamd) bevat meerdere processoren (cores), ieder met meerdere niveaus van grote cache geheugens en meerdere logische processoren die de uitvoereenheden van iedere core delen.

    Ondanks dat de processoren zeer goede prestaties leveren, is er toch een stijgende vraag naar numerieke rekenkracht. Grafische verwerkingseenheden (GPU) leveren efficiënte rekenkracht op arrays van data gebruikmakend van Single-Instruction Multiple Data (SIMD) technieken vanuit de supercomputers. GPU's worden niet alleen nog maar gebruikt voor het renderen van graphics, maar worden ook gebruikt van algemene numerieke rekenkracht zoals physics simulaties of om grote rekenbladen te verwerken.

    De CPU's zelf beginnen ook de mogelijkheid te krijgen om met arrays van data te kunnen werken, met sterkere en krachtige vector units ingebouwd in de processor architectuur van de x86, x64 en AMD64 families.

    Buiten CPU en GPU, bezitten moderne personal computers ook nog Digital Signal Processors (DSP's). De DSP's kunnen werken met streaming signalen, zoals audio en video en ook in ingebouwde I/O apparaten zoals modems. Nu zijn het eerste klasse rekenkundige apparaten geworden in voornamelijk mobiele apparatuur. Andere gespecialiseerde apparatuur (vaste functie eenheden) bestaan samen met de CPU om standaard verwerkingen te ondersteunen zoals het coderen en decoderen van spraak en video (codecs) of om support te bieden aan versleuteling.

    Om aan deze eisen van mobiele apparatuur te voldoen worden bij een System on a Chip (SoC) al deze functies op één chip geplaats.

    1.3. Uitvoeren van een instructie

    Een programma uitgevoerd door de computer bestaat uit een reeks instructies welke zijn opgeslagen in het geheugen. In de meest eenvoudige vorm bestaat de instructieverwerking uit twee stappen: De processor leest de instructies één voor één van het geheugen (fetch) en voert iedere instructie uit (execute).

    De instruction cycle is het process om één enkele instructie te verwerken. 

    Figure 1.2 Basic Instruction Cycle

    Aan het begin van iedere instructiecyclus haalt de processor een instructie op uit het geheugen. Normaal gesproken bevat de program counter (PC) het adres van de volgende op te halen instructie. Zolang er geen impliciete instructie wordt gegeven om de programmateller te veranderen zal de processor PC verhoogd worden na elke instructie fetch, zodat de volgende instructie in de sequentie kan worden verwerkt.

    De instructie wordt ingeladen in de instructie register (IR). De instructie bevat bits dat specifieert wat de processor moet doen. In het algemeen kan je deze acties in vier categorieën onderbrengen:

  • Processor-geheugen
    Data kan worden verplaatst tussen processor en geheugen of van geheugen naar processor
  • Processor-I/O
    Data kan worden verplaatst van en naar een randapparaat door verplaatsing tussen processor en I/O module
  • Dataverwerking
    De processor kan wiskundige of logische operatie op data uitvoeren
  • Controle
    Een instructie kan de sequentie van een instructie bewerken. Bv de processor moet een instructie ophalen van locatie 149 welke specifieert dat de volgende instructie van locatie 182 opgehaald moet worden. Dus de volgende fetch zorgt ervoor dat de volgende instructie op 182 wordt opgehaald i.p.v. 150.
  • Figure 1.4 Example of Program Execution

    Bovenstaand voorbeeld illustreert een gedeeltelijke programma uitvoer. Het laat de relevante delen van het geheugen en processor registers zien. Het programmafragment voegt de inhoud van het geheugenwoord van adres 940 toe aan de inhoud van het geheugenwoord op adres 941 en slaat het resultaat op in het laatstgenoemde locatie. Drie instructies, welke kunnen beschreven worden als een drie ophalings- en drie uitvoer-stages zijn nodig:

    1. The PC contains 300, the address of the first instruction. This instruction (the value 1940 in hexadecimal) is loaded into the IR and the PC is incremented. Note that this process involves the use of a memory address register (MAR) and a memory buffer register (MBR). For simplicity, these intermediate registers are not shown.
    2. The first 4 bits (fïrst hexadecimal digit) in the IR indicate that the AC is to be loaded from memory. The remaining 12 hits (three hexadecimal digits) specify the address. which is 940.
    3. The next instruction (5941) is fetched from location 301 and the PC is incremented.
    4. The old contents of the A’ and the contents of location 941 are added and the result is stored in the AC.
    5. The next instruction (2941) is fetched from location 302 and the PC is incremented.
    6. The contents of the AC are stored in location 941

    1.4. Interrupts

    Praktische alle computers beschikken over een mechanisme waardoor andere modules (I/O, geheugen) de normale sequentie van de processor kunnen onderbreken.

    Interrupts werden oorspronkelijk voorzien als een manier om de efficiënte van het processorgebruik te verbeteren. De meeste I/O apparaten zijn trager dan de processor. Stel voor het dat de processor data aan het verzenden is naar een printer volgens het eenvoudige fetch en execute schema. De processor zou moeten wachten na iedere schrijfoperatie totdat de printer weer bijgebeend heeft. In deze inactieve tijd had de processor nog miljoenen instructies kunnen uitvoeren.

    Stel een PC voor die op 1 Ghz werkt, welke ruwweg 109 instructies per seconde kan uitvoeren. Een typische harde schijf heeft een omloopsnelheid van 7200 rotaties per minuut voor een halve-track rotatie van 4 ms, welke is 4 miljoen keer trager dan een processor.

    Onderstaand figuur (a) illustreert deze zaak. Het gebruikersprogramma voor een serie van schrijfoperaties met tussenuitgevoerde verwerking. De ononderbroken lijnen stellen segmenten voor van code in het programma. Code segmenten 1, 2 en 3 zijn instructiesegmenten waar geen I/O voor nodig is. De SCHRIJF-opdrachten naar een I/O routine zijn een systeemhulpprogramma en zal de actuele I/O operatie uitvoeren. Het I/O programma bestaat uit drie secties:

  • Een sequentie van instructies (4) om de actuele I/O operatie voor te bereiden. Dit kan het kopiëren van data inhouden dat moet worden uitgevoerd naar een speciale buffer en het voorbereiden van de parameters voor het apparaat commando.
  • Het actueel I/O commando. Zonder het gebruik van, zodra dit commando is uitgegeven moet het programma blijven wachten tot het I/O apparaat de operatie heeft uitgevoerd. (of periodiek controleren de status van het I/O apparaat controleren.).
  • Een sequentie van instructies (5) om de operatie af te maken. Dit kan inhouden daar een flag te zetten als succes of fout van de operatie.
  • Figure 1.5 Program Flow of Control without and with Interrupts

    De gestreepte lijnen representeert het pad van uitvoering gevolgd door de processor. Dus nadat de eerste SCHRIJF-opdracht wordt tegengekomen, wordt het programma onderbroken en uitvoer gaat verder met het I/O programma. Nadat het I/O programma klaar is, gaat het gebruikersprogramma verder onmiddellijk gevolgd door een SCHRIJF-instructie.

    Omdat I/O operaties er relatief lang over doen om uitgevoerd te worden, het I/O programma blijft wachten tot hij klaar is. Het gebruikersprogramma is voor een behoorlijke tijd gestopt op het punt van de SCHRIJF-opdracht.

    1.4.1. Interrupts en instructiecyclus

    Met interrupts kan de processor andere instructies uitvoeren terwijl de I/O operatie in uitvoer is. Kijk naar de stroom in bovenstaande illustratie (b). Zoals eerder zal het gebruikersprogramma een punt bereiken waar een system call in de vorm van een SCHRIJF-opdracht moet maken. Het aangeroepen I/O programma is enkel datgene van de voorbereidende code en het actuele I/O commando. Na deze paar instructies wordt onmiddellijk verder gegaan met het gebruikersprogramma. In de tussentijd is het apparaat druk bezig is met het accepteren van data van het computergeheugen en bijvoorbeeld het afdrukken ervan.

    Zodra het apparaat klaar is en bijvoorbeeld onderhoud of meer data nodig heeft, doet de I/O module van het externe apparaat een interrupt request signaal afgeven aan de processor. De processor onderbreekt de huidige uitvoering van het programma en wijkt uit naar een routine om onderhoud (dienst) te geven aan het I/O apparaat. Dit is gekend als de interrupt handler en zal het oorspronkelijke programma verder zetter zodra het apparaat klaar is met onderhoud. De punten van zulke interrupts worden in de tekening aangegeven met een Ñ. De interrupt kan op elk punt van het programma voorkomen.

    Voor het gebruikersprogramma onderbreekt de interrupt de normale sequentie van uitvoering. Zodra interrupt verwerking is voldaan gaat de verwerking weer verder.

    Figure 1.6 Transfer of Control via Interrupts

    Dus het gebruikersprogramma hoeft geen special code te bevatten om te voorzien in interrupts. De processor en het besturingssysteem zijn verantwoordelijk voor de onderbreking van het gebruikersprogramma en het op dat punt weer verder gaan op hetzelfde punt.

    Om plaats te bieden aan interrupts is een interrupt stage toegevoegd aan de instructiecyclus. In de instructiecyclus controleert de processor of er interrupts zijn geweest, welke worden weergegeven door de aanwezigheid van een interruptsignaal.

    Als er geen interrupts zijn hangende gaat de processor verder naar de fetch stage en haalt de volgende instructie op van het huidige programma. Als een interrupt is hangend zal de processor het huidige programma onderbreken en een interrupt handler routine uitvoeren. In het algemeen is de interrupt handler routine een deel van het OS.

    Het is duidelijk dat dit enige overhead met zich meebrengt. Extra instructies moeten worden uitgevoerd (in de interrupt handler) om de bron van de interrupt te bepalen en de bijbehorende actie uit te voeren. Niettegenstaande door de relatief lange tijd dat verloren gaat door eenvoudig te wachten op I/O operaties, kan de processor veel efficiënter worden door het gebruik van interrupts.

    Onderstaand diagram laat je het timing diagram zien gebaseerd op de besturingsstroom van figuur 1.5a en 1.5b. Hieruit kun je aannemen dat de benodigde tijd voor een I/O operatie relatief kort is: minder dan de tijd nodig om de instructies uit te voeren tussen SCHRIJF-operaties in het gebruikersprogramma.

    Wat meer voorkomt, zoals het gebruik van een langzaam apparaat zoals een printer, is dat de I/O operatie meer tijd nodig heeft dan de uitvoering van een sequentie aan gebruikersinstructies. Zoals figuur 1.5c laat zien. In dit geval zal het gebruikersprogramma de twee SCHRIJF-bewerking bereiken voordat I/O operatie van de eerste aanroep is voltooid. Het resultaat is dat het gebruikersprogramma zal moeten wachten op dat punt. Pas als de voorafgaande I/O operatie is voltooid kan de volgende SCHRIJF-bewerking worden verwerkt en een nieuwe I/O operatie worden opgestart. Onderstaand figuur laat dit zien met en zonder gebruik van interrupts. We kunnen zien dat er toch een winst valt te behalen doordat een deel van tijd van I/O operatie overlapt met die van de uitvoer gebruikersinstructies.

    1.4.2. Interruptverwerking

    Een interrupt activeert een aantal gebeurtenissen, zowel in processor hardware als in de software. Onderstaand figuur laat je zo'n typische sequentie zien. Als een I/O apparaat een I/O operatie voltooid gebeuren de volgende hardware gebeurtenissen:

    1. Het apparaat geeft een interruptsignaal aan de processor.

    2. De processor voltooid de huidige instructie voordat het antwoord aan de interrupt.

    3. De processor test voor een lopende interruptaanvraag en zend een bevestigingssignaal naar het apparaat dat de interrupt heeft aangevraagd. De bevestiging laat toe het interruptsignaal te verwijderen.

    4. De processor bereidt voor dat de controle wordt overgedragen naar de interruptroutine. Om te beginnen zal het eerst informatie bewaren benodigd om het huidige programma voort te zetten op het punt van de interrupt. De benodigde minimum informatie bestaat uit het program status word (PSW) en de locatie van de volgende instructie die moet worden uitgevoerd welk zit in de program counter (PC). Deze kunnen worden doorgeschoven naar de control stack.

    1. Dan zal de processor de program counter inladen met het startpunt van de interrupt-handling routine en zal antwoorden op deze interrupt. Als er meer dan één interrupt-handling routine is, moet de processor bepalen welke hij aanroept. Deze informatie kan in het originele interrupt signaal hebben gezeten of de processor moet aanvraag uitvaardigen naar het apparaat dat de interrupt heeft aangevraagd om zo antwoord te krijgen wat benodigd is.

    Eenmaal dat de programmateller is geladen gaat de processor verder aan zijn volgende instructiecyclus. Omdat de instructie fetch is bepaald bij de inhoud van de programmateller zal de controle worden overgedragen aan de interrupt-handler routine. De uitvoer van dit programma resulteert in de volgende operaties:

    1. Op dit punt zal de programmateller en PSW van het onderbroken programma bewaard worden op de control stack. Echter is er nog informatie dat deel uitmaakt van de staat van het uitvoerende programma namelijk de registers welke ook dienen te worden bewaard, omdat deze registers kunnen worden gebruikt door de interruptroutine.
    2. De interrupt handler kan nu verder gaan met het verwerken van de interrupt. Dit bevat ook het onderzoek naar de status informatie betrekkende bij de I/O operatie of andere gebeurtenis dat een interrupt heeft veroorzaakt. Het kan ook betrokken zijn met het zenden van additionele commando's of bevestigingen naar het I/O apparaat.
    3. Als de interrupt verwerking is voltooid zullen de opgeslagen registerwaarden teruggehaald worden van de stack en hersteld worden naar de registers.
    4. De laatste stap is het herstellen van de PSW en de programmateller van de stack met als resultaat dat de volgende uitgevoerde instructie die zal zijn van het onderbroken programma.

    1.4.3. Meerdere interrupts

    Meerdere interrupt zouden kunnen voorkomen terwijl er een interrupt in uitvoering is. Twee mogelijke manieren van aanpak zijn mogelijk om af te handelen met meerdere interrupts.

  • Sequentiële interruptafhandeling
    Het eerste wat moet gebeuren is het uitschakelen van interrupts terwijl de interrupt wordt afgehandeld. Als een interrupt gebeurd tijdens deze tijd zal deze hangend blijven en pas gecontroleerd worden nadat de processor de interrupts weer mogelijk gemaakt heeft. Nadat de interrupt-handler routine gedaan heeft met zijn taak zal hij de interrupts weer activeren voordat hij verder gaat met het gebruikersprogramma. Het nadeel van dit systeem dat het geen rekening neemt met de relatieve prioriteit van tijd-kritieke noden. Als de eerste batch van invoer niet is verwerkt voordat de volgende batch aankomt, kan er data verloren gaan omdat de buffer van het I/O apparaat vol raakt en overloopt.
  • Geneste interruptverwerking
    Er kunnen ook prioriteiten worden ingesteld voor interrupts en het mogelijk maken een lagere-prioriteit interrupt-handler te onderbreken en toe te staan door een interrupt van een hoger niveau te laten onderbreken.
  • 1.5. Hiërarchie van het geheugen

    De ontwerpbeperkingen van een computergeheugen kan je opsommen door drie vragen:

  • Hoeveelheid
    Applicaties zodanig ontwerpen dat ze alle geheugen benutten. Dus hoe meer geheugen, hoe meer geheugen applicaties kunnen gebruiken.

  • Snelheid
    Om hogere prestaties te krijgen moet het geheugen de CPU kunnen volgen.

  • Kostprijs
    De kostprijs moet in verhouding zijn tot de andere componenten.

  • Zoals vermoedde is er een wisselwerking tussen deze drie sleutelelementen van het geheugen namelijk capaciteit, toegangstijd en kostprijs. Een variëteit van technologieën worden gebruikt om geheugensytemen te implementeren en in dit gebied van technologieën kun je volgende relaties onderscheiden:

  • Snellere toegangstijd, hogere kostprijs per bit

  • Grotere capaciteit, lagere kostprijs per bit

  • Grotere capaciteit, lagere toegangstijd

  • De ontwerper wil het liefst geheugen technologieën gebruiken dat voorziet in grote capaciteiten, voornamelijk omdat de capaciteit nodig is en kostprijs er bit laag is. Om te voldoen aan prestatie-eisen moet de ontwerper soms dure, met snelle toegangstijden maar relatief lage capaciteitsgeheugens gebruiken.

    Om dit op te lossen moet je niet afhankelijk zijn van een enkel geheugencomponent of technologie, maar gebruikmaken van een geheugenhiërarchie.

    Indien we zakken in lagen kun volgende bemerken:

  • Dalende kostprijs per bit
  • Toenemende capaciteit
  • Toenemende toegangstijd
  • Dalende toegangsfrequentie van processor naar het geheugen 
  • 1.6. Cache geheugen

    Alhoewel cache geheugen samenwerkt met andere hardware componenten is het onzichtbaar voor het besturingssysteem. Verder worden in cache geheugens veel principes gebruikt die ook worden gebruikt in virtuele geheugenschema's.

    1.6.1. Motivatie

    Van alle instructiecyclussen moet de processor minimaal eenmaal het geheugen benaderen, namelijk op die instructie op te halen (fetch). De snelheid waar waarmee de processor instructies kan uitvoeren is duidelijk beperkt door de cyclustijd van het geheugen. Dit is een significant probleem omdat er een voortdurend verhoudingsverschil tussen processor- en geheugensnelheid is.

    Door de jaren heen is de snelheid van de processor sneller gestegen dan de snelheid van de hoofdgeheugens. Ideaal zou zijn als de geheugentechnologie hetzelfde geconstrueerd zou zijn als die van de processorregisters, waardoor men geheugencyclustijden krijgen vergelijkbaar met de processorregisters.

    De oplossing is het gebruik van een snel tussengeheugen tussen de processor en het hoofdgeheugen, namelijk een cache.

    1.6.2. Cache principes

    Cache geheugen is bedoeld om geheugentoegangstijden te voorzien die de snelste geheugens beschikbaar benaderen en op het zelfde moment grote geheugens ondersteunen de een lagere kostprijs heeft van semiconductor geheugens.

    Dit concept wordt hieronder geïllustreerd.

    De cache bevat een kopie van een deel van het hoofgeheugen. Als de processor een byte of word van het geheugen probeert te lezen wordt er gecontroleerd of deze byte of word in de cache zit. Als dit niet het geval is wordt een blok uit het hoofdgeheugen in het cachegeheugen geladen en dan zal de byte of word aangeboden worden aan de processor. Door het fenomeen van lokale referentie is het waarschijnlijk dat veel van de volgende referenties in dat geheugenblok zitten.

    Onderstaande figuur laat meerdere niveaus van cache zien.

    De L3 cache is gebruikelijker trager dan de L2 cache welke op zijn beurt weer trager is dan de L1 cache.

    Onderstaand figuur toont de structuur van een cache/hoofdgeheugensyteem. Hoofdgeheugens bestaan uit 2n adresbare woorden, waarin elk woord een uniek n-bit adres heeft. Voor het in kaart brengen wordt dit geheugen verondersteld te bestaan uit een aantal vaste lengte blocks van K woorden elk. Dat betekend dat er M = 2n/K zijn. Cache bestaat uit C slots (ook gerefereerd als lines) van K words elk en het aantal beschikbare sloten aanzienlijk minder dan het aantal hoofdgeheugenblokken (C<<M).1

    1.6.3. Cache ontwerp

    We zullen geen gedetailleerd overzicht geven van het cacheontwerp maar zullen de sleutelelementen kort samenvatten.

    We zullen zien dat gelijkwaardige belangrijke ontwerppunten moeten worden gezocht in het ontwerp van virtuele geheugens en disk cache ontwerpen. Ze vallen in de volgende categorieën:

  • Grootte van de cache

  • Grootte van een blok

  • Mapping functie

  • Vervangingsalgoritme

  • Schrijfbeleid

  • Aantal cache niveaus

  • We hebben reeds de grootte van de cache behandelt en het is gebleken dat redelijke kleine cache geheugens weldegelijk een significant verschil in prestaties kan uitmaken. Een andere punt is dat van de blokgrootte: de eenheid van data dat wordt uitgewisseld tussen cache en hoofdgeheugen. Als de blokgrootte stijgt van heel klein naar groter, zal hit ratio in het begin stijgen door het principe van lokaliteit. Als de blokgrootte stijgt, wordt er meer bruikbare data in het geheugen gezet. De hit ratio zal beginnen te dalen, hoewel, als de blokgrootte groter wordt en de kans om nieuwe opgehaalde (fetched) data lager komt te liggen dan de kans om data te hergebruiken die we uit het cache geheugen hebben verplaatst om plaats te bieden aan een nieuw blok.

    Als een nieuw blok van data in het cache wordt ingeladen moet de mapping function bepalen welke cache locatie het gaat benutten. Twee beperkingen bepalen het ontwerp van de mapping functie. Eerst, als een blok is ingelezen, kan het nodig zijn een andere te verplaatsen. We willen dit op een manier doen om te vermijden dat we blokken verplaatsen die we waarschijnlijk in de nabije toekomst nodig zouden hebben. Hoe flexibeler de mapping functie, hoe groter het bereik van het vervangingsalgoritme dat we moeten ontwerpen om de hit ratio te maximaliseren. Ten tweede, hoe flexibeler de mapping functie, hoe complexer het circuit wordt om in de cache het gegeven blok te zoeken.

    De vervangingsalgoritme kiest binnen de beperkingen van de mapping functie elk blok moet worden vervangen als een nieuw blok in het cache moet worden ingeladen waar alle sloten reeds vol zitten met andere blokken. We willen graag dat blok vervangen dat het minst waarschijnlijk zal gebruikt worden in de toekomst. Het is nagenoeg onmogelijk dergelijke blokken te identificeren, maar een redelijke efficiënte strategie is het blog te vervangen dat het langst in de cache zit zonder referentie. Dit beleid wordt ook wel de least-recently-used (LRU) algoritme genoemd. Hardware mechanismen zijn nodig om least-recently-used blokken te identificeren.

    Als de inhoud van een cacheblok is veranderd, dan is het nodig om dit cacheblok terug te schrijven naar het hoofdgeheugen voordat je het overschrijft. Het schrijfbeleid dicteert wanneer een schrijfbewerking plaatsvindt. Het schrijven iedere keer gebeuren als het blok wordt aangepast of dat het schrijven enkel gebeurt als het blok moet worden vervangen. De laatste minimaliseert het aantal schrijfoperaties maar zorgt ervoor dat het hoofgeheugen in een verouderde staat terechtkomt. Dit kan interferentie problemen geven met meervoudige-processor operaties en met direct memory access van de I/O hardware modules.

    Uiteindelijk is het gebruikelijk meerdere niveaus van cache te hebben, gelabeld L1 (cache dat dicht bij de processor ligt), L2 en in veel gevallen en derde niveau L3.

    1.7. Directe geheugentoegang

    Er zijn drie technieken mogelijk voor I/O operaties: geprogrammeerde I/O, interrupt gebaseerde I/O en direct memory access (DMA). Voordat we verdergaan met DMA zullen we eerst de twee andere technieken kort uitleggen.

    Als de processor een programma aan het uitvoeren is en een I/O gerelateerde instructie tegenkomt, dan voert het de instructie uit door een commando uit te geven naar de bijbehorende I/O module. In het geval van geprogrammeerde I/O, zal de I/O module de gevraagde actie uitvoeren en zal de bijbehorende bits in het I/O status register zetten en zal verder geen actie ondernemen om de processor te onderbreken. Dus moet de processor zelf een actieve rol spelen om te bepalen of een I/O operatie is voltooid nadat de I/O instructie is aangeroepen. Hierdoor moet de processor regelmatig de status van een I/O module controleren tot de operatie is voltooid.

    Met geprogrammeerde I/O moet de processor lange tijd op de I/O module wachten om te weten of het klaar is om meer data te ontvangen. Terwijl de processor wachtende is moet het regelmatig de status van de I/O module controleren. Dit resulteert in een aanzienlijke prestatiedegradatie.

    Een alternatief, ook gekend als interrupt gestuurde I/O, is dat de processor I/O commando aan een module uitvaardigt en verder kan gaan andere nuttig werk. De I/O module zal de processor onderbreken met het verzoek tot onderhoud als het klaar is om data uit te wisselen met de processor. De processor zal de data uitwisseling voltooien en verder gaan met de oorspronkelijk verwerking.

    Alhoewel interrupt gebaseerde I/O efficiënter is dan eenvoudige geprogrammeerde I/O is toch actieve interventie nodig van de processor voor de data overdracht. Dus beide methoden van I/O lijden aan twee inherente nadelen:

    1. De I/O snelheid is beperkt door de snelheid waarmee de processor het apparaat kan testen en onderhouden.
    2. De processor is opgedeeld in het beheren van een I/O overdracht; een aantal instructies moet worden uitgevoerd voor iedere I/O overdracht.

    Als grote volumes van data moeten worden verplaatst is een meer efficiënter manier vereist: direct memory access (DMA). De DMA functie kan zowel uitgevoerd worden door een aparte module op de systeembus alsook ingebouwd in de I/O module. In beide gevallen werkt de techniek als volgt. Als de processor data wil verplaatsen stuurt het een commando naar de DMA module door de volgende informatie te sturen:

  • Of er lees- of schrijfoperatie wordt gevraagd
  • Het adres van het betrokken I/O apparaat
  • De start locatie in het geheugen om data te lezen of te schrijven
  • Het aantal woorden dat moet worden gelezen of geschreven
  • De processor kan doorgaan met zijn taken omdat het I/O gerelateerde werk gedelegeerd is aan de DMA module. De DMA module verplaatst het gehele datablok, één woord per keer direct van of naar het geheugen zonder tussenkomst van de processor. De processor is enkel betrokken bij het begin en het eind van de verplaatsing.

    De DMA module moet controle over de bus nemen en data van en naar geheugen verplaatsen. Soms door het concurrerend gebruik van de bus kan het zijn de processor moet DMA module voordat de bus wordt vrijgegeven. Weet dat dit niet een interrupt is; de processor moet geen context bewaren en iets anders doen. Beter gezegd moet de processor een buscyclus wachten (de tijd nodig om een woord te verplaatsen op de bus). Het totale effect is dat de processor lager presteert tijdens een DMA verplaatsing op het moment dat de processor de bus nodig heeft. Niettemin is voor meervoudig-woord I/O verplaatsing de DMA veel efficiënter dan interrupt gebaseerde of geprogrammeerde I/O.

    1.8. Multiprocessor en multicore organisatie

    Traditioneel werd de computer als een sequentiële machine gezien. De meeste computerprogrammeertalen vereisen dat de programmeur de algoritmes specifieert als sequenties van instructies. De processor voert de instructies één voor één in een sequentie uit.

    Op microniveau is dit niet helemaal waar. Meerdere controle signalen worden op hetzelfde moment gegenereerd. Instructie pipelining, op zijn minst tot de mate van overlapping van fetch en execute operaties, bestaan al geruime tijd. Beide zijn voorbeelden die parallel worden uitgevoerd.

    Naarmate computertechnologieën zijn geëvolueerd en de kostprijs van computer hardware is gezakt, hebben computerontwerpers manieren gezocht voor parallelisme om de performantie te verhogen.

    1.8.1. Symmetrische multiprocessors

    Een symmetrische multiprocessor (SMP) kan worden gedefinieerd als een alleenstaand systeem met de volgende eigenschappen:

    1. Twee of meer gelijkwaardige processoren.

    2. Processoren delen hetzelfde hoofdgeheugen en I/O modules en zijn intern verbonden via de systeembus.

    3.  Alle processoren delen toegang tot I/O apparaten, door dezelfde kanalen of door andere kanalen dat toegang biedt tot hetzelfde apparaat.

    4. Alle processoren kunnen dezelfde functies uitvoeren (symmetrisch).

    5. Het systeem wordt beheerd door een geïntegreerd besturingssysteem dat interactie kan bieden tussen processoren en hun programma's op de niveaus van job, taak, bestand- en dataelement niveaus.

    De eerste vier punten verklaren zich. Punt 5 illustreert de verschillen met een vaag gekoppeld meervoudig verwerkend systeem zoals een cluster. In het laatste is de fysische interactie eenheid gebruikelijk een bericht of een compleet bestand. In een SMP kunnen individuele dataelementen niveaus van interactie bevatten en kan er groot niveau van samenwerking tussen de processen plaatsvinden.

    Een SMP organisatie heeft een aantal potentiele pluspunten tegenover een uniprocessor organisatie:

  • Prestatie
    Als het werk zo georganiseerd kan worden dat delen van het werk parallel uitgevoerd kan worden, dan zal een systeem met meerdere processoren voordeel hebben dan een systeem met een enkele processor.
  • Beschikbaarheid
    Omdat alle processoren in een symmetrische multiprocessor dezelfde functies kunnen uitvoeren zal de uitval van een enkele processor niet leiden tot een halt van het systeem. Het systeem kan verder gaan met een verminderde prestatie.
  • Incrementele groei
    Een gebruiker kan de performantie van het systeem verhogen door het toevoegen van extra processoren.
  • Schaling
    Het systeem kan geoptimaliseerd worden voor het aantal geconfigureerde processoren in het systeem.
  • Het is belangrijk om te weten dat deze voordelen potentieel zijn dan dat ze gegarandeerd zijn. Het besturingssysteem moet hulpmiddelen en functies bieden om het parallelisme in SMP systemen te kunnen gebruiken.

    1.8.2. Multicorecomputers

    Een multicore computer, ook gekend als een chip multiprocessor, combineert twee of meer processors (cores) op een enkel stuk silicium (die). Iedere kern beschikt over alle elementen van een individuele processor, zoals registers, ALU, pipeline architectuur, controle unit, L1 instructie- en datacaches. In toevoeging tot meervoudige kernen bezitten hedendaagse multicore chips ook L2 en L3 cache.

    Herhalingsvragen

    1. Benoem en beschrijf beknopt de vier belangrijkste elementen van een computer.

      Een hoofdgeheugen, dat zowel gegevens en instructies opslaat; een rekenkundige en logische eenheid (ALU) die met binaire gegevens kunnen werken; een besturingseenheid, die instructies in het geheugen interpreteert en zorgt dat ze worden uitgevoerd; en input en output (I/O) apparatuur bediend door de besturingseenheid.
       
    2. Definieer de twee belangrijkste categorieën processorregisters.

      Gebruiker zichtbare registers: Maakt het mogelijk dat de machine- of assembly-taal programmeur de hoofdgeheugen referenties kan minimaliseren door het optimaliseren van het register gebruik. Op hogere programmeertalen, zal een optimaliserende compiler proberen om intelligente keuzes te maken welke variabelen toe te wijzen aan registers en welke aan het werkgeheugen. sommige hogere talen, zoals C, laten de programmeur toe om de compiler voor te stellen welke variabelen in de registers moeten blijven.
      Controle en status registers:
      Gebruikt door de processor om de werking van de processor en geprivilegieerde, besturingssysteem routines om het uitvoeren van programma's regelen.
       
    3. Wat zijn, in algemene termen, de vier te onderscheiden acties die een machine- instructie kan specificeren?

      Deze acties vallen in vier categorieën:
      Processor-geheugen:
      Gegevens kunnen verplaatst worden van processor naar geheugen of van geheugen naar processor.
      Processor-I/O:
      gegevens kunnen verplaatst worden van en naar een randapparaat door de het te verplaatsen tussen de processor en I/O-module.
      Gegevensverwerking:
      De processor kan enige rekenkundige- en logische bewerkingen uitvoeren op gegevens.
      Controle:
      Een instructie kan bepaalen dat de volgorde van uitvoering worden gewijzigd.
       
    4. Wat is een interrupt?

      Een interrupt is een mechanisme waarmee andere modules (I/O, geheugen) de normale sequentie van de processorkan onderbreken.
       
    5. Op welke manier worden de verschillende interrupts afgehandeld?

      Twee benaderingen kunnen genomen worden in het omgaan met meerdere interrupts. De eerste is om interrupts uit te schakelen als een interrupt wordt verwerkt. Een tweede aanpak is om prioriteiten te definiëren voor interrupts en om een interrupt van een hogere prioriteit toe te laten een lagere prioriteit interrupt handler te onderbreken.
       
    6. Welke kenmerken onderscheiden de verschillende elementen van een geheugenhiërarchie?

      De drie belangrijkste kenmerken van het geheugen zijn de kosten, capaciteit en toegangstijd.
       
    7. Wat is cache geheugen?

      Cachegeheugen is een geheugen dat kleiner en sneller is dan het hoofdgeheugen en dat zich tussen de processor en het hoofdgeheugen bevind. De cache werkt als een buffer voor recent gebruikte geheugen locaties.
       
    8. Wat is het verschil tussen een multiprocessor en een multicore systeem?

      Geprogrammeerde I/O: De processor geeft namens een proces een I/O-opdracht aan een I/O-module; dat proces dan bezig-wacht tot de bewerking wordt voltooid voordat het verder gaat.
      Interrupt-driven I/O:
      De processor geeft namens een proces een I/O-opdracht uit, gaat verder met het uitvoeren van instructies, en wordt dan door de I/O-module onderbroken wanneer deze klaar is met het werk. De daaropvolgende instructies kunnen in hetzelfde proces zitten, als het niet nodig dat proces moet wachten op de voltooiing van de I/O. Anders wordt het proces in afwachting van het interrupt opgeschort en wordt ander werk uitgevoerd.
      Direct Memory Access (DMA):
      Een DMA module controleert de uitwisseling van gegevens tussen het hoofdgeheugen en een I/O-module. De processor stuurt aan de DMA-module een verzoek voor overdracht van een gegevensblok en wordt enkel pas onderbroken nadat het hele blok is overgebracht.
       
    9. Wat is het onderscheid tussen ruimtelijke lokaliteit (spatial locality) en tijdsafhankelijke lokaliteit (temporal locality)?

      Ruimtelijke lokaliteit heeft betrekking op de neiging dat uitvoering van een aantal geheugenlocaties omvatten die geclusterd zijn.
      Tijdelijke lokaliteit
      heeft betrekking op de neiging dat een processor geheugen locaties benaderd die onlangs gebruikt zijn.
       
    10. In het algemeen, wat zijn de strategieën voor de exploitatie van de ruimtelijke lokaliteit en de tijdelijke lokaliteit?

      Ruimtelijke lokaliteit is meestal geëxploiteerd door grotere cache blokken en door het in prefetching mechanismen (het ophalen van items van verwacht gebruik) in de cache besturingslogica zijn.
      Tijdelijke lokaliteit wordt geëxploiteerd door het bijhouden van recent gebruikteinstructie en gegevenswaarden in cachegeheugen en door het exploiteren van een cache hiërarchie.

    Probleemvraagstukken

    1. De hypothetische machine uit figuur 1.3 heeft ook twee I/O-instructies:
          0011 = Laad AC uit I/O;
          0111 = Sla AC op in I/O.
      Bij deze instructies geeft het 12-bits adres een bepaald extern apparaat aan. Beschrijf de uitvoering (met de indeling van figuur 1-4) van het volgende programma:

      1. Laad AC uit apparaat 5
      2. Tel de inhoud van geheugenlocatie 940 op.
      3. Sla AC op naar apparaat 6.

      Veronderstel dat de volgende uit apparaat 5 op te vragen waarde 3 is en dat locatie 940 de waarde 2 bevat.

      Memory (contents in hex): 300: 3005; 301: 5940; 302: 7006
      Step 1: 3005 → IR; Step 2: 3 → AC
      Step 3: 5940 → IR; Step 4: 3 + 2 = 5 → AC
      Step 5: 7006 → IR; Step 6: AC → Device 6
       

    2. De uitvoering van het programma in figuur 1.4 wordt in de tekst beschreven met zes stappen. Geef hierbij een uitbreiding voor het gebruik van de registers MAR en
      MBR.
       
        1. The PC contains 300, the address of the first instruction. This value is loaded
          in to the MAR.
        2. The value in location 300 (which is the instruction with the value 1940 in hexadecimal) is loaded into the MBR, and the PC is incremented. These two steps can be done in parallel.
        3. The value in the MBR is loaded into the IR.
        1. The address portion of the IR (940) is loaded into the MAR.
        2. The value in location 940 is loaded into the MBR.
        3. The value in the MBR is loaded into the AC.
        1. The value in the PC (301) is loaded in to the MAR.
        2. The value in location 301 (which is the instruction with the value 5941) is loaded into the MBR, and the PC is incremented.
        3. The value in the MBR is loaded into the IR.
        1. The address portion of the IR (941) is loaded into the MAR.
        2. The value in location 941 is loaded into the MBR.
        3. The old value of the AC and the value of location MBR are added and the result is stored in the AC.
        1. The value in the PC (302) is loaded in to the MAR.
        2. The value in location 302 (which is the instruction with the value 2941) is loaded into the MBR, and the PC is incremented.
        3. The value in the MBR is loaded into the IR.
        1. The address portion of the IR (941) is loaded into the MAR.
        2. The value in the AC is loaded into the MBR.
        3. The value in the MBR is stored in location 941.
           
    3. Ga uit van een hypothetische, 32-bits microprocessor met 32-bits instructies die bestaan uit twee velden: de eerste byte bevat de opcode en de rest een directe operand of een operandadres.
      1. Wat is de maximale, direct adresseerbare geheugencapaciteit (in bytes)?

        224 = 16 MBytes
         
      2. Leg uit wat de invloed op de systeemsnelheid is als de microprocessorbus
        1. een 32-bits, lokale adresbus en een 16-bits, lokale databus heeft, of

          If the local address bus is 32 bits, the whole address can be transferred at once and decoded in memory. However, since the data bus is only 16 bits, it will require 2 cycles to fetch a 32-bit instruction or operand.
           
        2. een 16-bits, lokale adresbus en een 16-bits, lokale databus heeft.

          The 16 bits of the address placed on the address bus can't access the whole memory. Thus a more complex memory interface control is needed to latch the first part of the address and then the second part (since the microprocessor will end in two steps). For a 32-bit address, one may assume the first half will decode to access a "row" in memory, while the second half is sent later to access a "column" in memory. In addition to the two-step address operation, the microprocessor will need 2 cycles to fetch the 32 bit instruction/operand.
           
      3. Hoeveel bits zijn nodig voor de programmateller en het instructieregister?

        The program counter must be at least 24 bits. Typically, a 32-bit microprocessor will have a 32-bit external address bus and a 32-bit program counter, unless onchip segment registers are used that may work with a smaller program counter. If the instruction register is to contain the whole instruction, it will have to be 32-bits long; if it will contain only the op code (called the op code register) then it will have to be 8 bits long.
         
    4. Ga uit van een hypothetische microprocessor die een 16-bits adres genereert (veronderstel bijvoorbeeld dat de programmateller en de adresregisters 16 bits breed zijn) en een 16-bits databus heeft.
      1. Wat is de maximale geheugenadresruimte waartoe de processor rechtstreeks toegang kan krijgen als hij is verbonden met een ‘16-bits geheugen’?
      2. Wat is de maximale geheugenadresruimte waartoe de processor rechtstreeks toegang kan krijgen als hij is verbonden met een ‘8-bits geheugen’?
      3. Welke onderdelen van de architectuur maken het mogelijk dat deze microprocessor toegang heeft tot een afzonderlijke ‘I/O-ruimte’?
      4. Als een invoerinstructie en een uitvoerinstructie een 8-bits I/O-poortnummer kunnen opgeven, hoeveel 8-bits 1/0-poorten kan de processor dan ondersteunen? En hoeveel 16-bits poorten? Leg uit.

      In cases (a) and (b), the microprocessor will be able to access 216 = 64K bytes; the only difference is that with an 8-bit memory each access will transfer a byte, while with a 16-bit memory an access may transfer a byte or a 16-byte word. For case (c), separate input and output instructions are needed, whose execution will generate separate "I/O signals" (different from the "memory signals" generated with the execution of memory-type instructions); at a minimum, one additional output pin will be required to carry this new signal. For case (d), it can support 28 = 256 input and 28 = 256 output byte ports and the same number of input and output 16-bit ports; in either case, the distinction between an input and an output port is defined by the different signal that the executed input or output instruction generated.
       

    5. Ga uit van een 32-bits microprocessor met een 16-bits, externe databus, die wordt aangestuurd door een 8-MHz invoerklok. Veronderstel dat deze processor een buscydus heeft waarvan de minimale duur gelijk is aan 4 cycli van de invoerklok. Wat is de maximale gegevensoverdrachtssnelheid door de bus die deze processor aankan in bytes/s? Als de prestaties moeten worden verbeterd, is het dan beter de externe data- bus 32-bits te maken of de externe klokfrequentie die aan de processor wordt doorgegeven te verdubbelen? Noem eventuele andere aannamen en leg uit. Hint: stel het aantal bytes dat verplaatst kan worden per buscyclus.

      Clock cycle = 1/8 MHz = 125 ns
      Bus cycle = 4 × 125 ns = 500 ns
      2 bytes transferred every 500 ns; thus transfer rate = 4 MBytes/sec

      Doubling the frequency may mean adopting a new chip manufacturing technology (assuming each instructions will have the same number of clock cycles); doubling the external data bus means wider (maybe newer) on-chip data bus drivers/latches and modifications to the bus control logic. In the first case, the speed of the memory chips will also need to double (roughly) not to slow down the microprocessor; in the second case, the "word length" of the memory will have to double to be able to send/receive 32-bit quantities.
       
    6. Een computersysteem bevat een I/O-module die een eenvoudige telex met een toetsenbord en een printer bestuurt. De CPU bevat de volgende registers, die rechtstreeks zijn verbonden met de systeembus:
          INVR: Invoerregister, 8 bits
          UITR: Uitvoerregister, 8 bits
          FGI: Invoervlag, 1 bit
          FGU: Uitvoervlag, 1 bit
          IIN: Interrupt ingeschakeld, 1 bit
      De invoer van toetsaanslagen op de telex en de uitvoer naar de printer worden bestuurd door de 1/0-module. De telex kan een alfanumeriek symbool coderen tot een 8-bits woord eh een 8-bits woord decoderen tot een alfanumeriek symbool. De invoervlag wordt ingeschakeld als een 8-bits woord van de telex het invoerregister bereikt. De uitvoervlag wordt ingeschakeld als een woord is afgedrukt.
      1. Beschrjf hoe de CPU met de eerste vier registers I/O kan bereiken met de telex.

        Input from the Teletype is stored in INPR. The INPR will only accept data from the Teletype when FGI=0. When data arrives, it is stored in INPR, and FGI is set to 1. The CPU periodically checks FGI. If FGI =1, the CPU transfers the contents of INPR to the AC and sets FGI to 0. When the CPU has data to send to the Teletype, it checks FGO. If FGO = 0,
        the CPU must wait. If FGO = 1, the CPU transfers the contents of the AC to
        OUTR and sets FGO to 0. The Teletype sets FGI to 1 after the word is printed.
         
      2. Beschrjf hoe de functie efficiënter kan worden uitgevoerd door ook het register IIN toe te passen.

        The process described in (a) is very wasteful. The CPU, which is much faster than the Teletype, must repeatedly check FGI and FGO. If interrupts are used, the Teletype can issue an interrupt to the CPU whenever it is ready to accept or send data. The IEN register can be set by the CPU (under programmer control)
         
    7. Bij vrijwel alle systemen met DMA-modules wordt aan DMA-toegang tot het hoofdgeheugen een hogere prioriteit gegeven dan aan processortoegang tot het hoofdgeheugen. Wat is daarvoor de reden?

      If a processor is held up in attempting to read or write memory, usually no damage occurs except a slight loss of time. However, a DMA transfer may be to or from a device that is receiving or sending data in a stream (e.g., disk or tape), and cannot be stopped. Thus, if the DMA module is held up (denied continuing access to main memory), data will be lost.
       
    8. Een DMA-module draagt tekens over naar het hoofdgeheugen vanuit een extern apparaat dat verzendt met een snelheid van 9600 bits per seconde (bps). De processor kan instructies ophalen met een snelheid van 1 miljoen instructies per seconde. Hoe sterk wordt de processor vertraagd door de DMA-activiteit?

      Let us ignore data read/write operations and assume the processor only fetches instructions. Then the processor needs access to main memory once every microsecond. The DMA module is transferring characters at a rate of 1200 characters per second, or one every 833 μs. The DMA therefore "steals" every 833rd cycle.

      This slows down the processor approximately 1/833 × 100% = 0.12%
       
    9. Een computer bestaat uit een CPU en een I/O-apparaat D dat met het hoofdgeheugen M is verbonden via een gedeelde bus met een databusbreedte van één woord. De CPU kan maximaal 106 instructies per seconde uitvoeren. Een gemiddelde instructie vereist vijf machinecyci, waarvan er drie de geheugenbus gebruiken. Een lees- of schijfbewerking van het geheugen gebruikt één machinecyclus. Veronderstel dat de CPU voortdurend programma’s op de ‘achtergrond’ uitvoert die 95% van de uitvoering van instructies vereisen maar geen enkele I/O-instructie. Veronderstel dat één processorcyclus gelijk is aan één buscyclus. Veronderstel ten slotte dat zeer grote blokken gegevens worden overgedragen tussen M en D.
      1. Als een geprogrammeerde I/O wordt gebruikt en elke I/O-overdracht van één woord vereist dat de processor twee instructies uitvoert, schat dan de maximale I/O-overdrachtssnelheid, in woorden per seconde, die mogelijk is via D.

        The processor can only devote 5% of its time to I/O. Thus the maximum I/O instruction execution rate is 106 × 0.05 = 50,000 instructions per second. The I/O transfer rate is therefore 25,000 words/second.
         
      2. Schat dezelfdë snelheid als DMA-overdracht wordt gebruikt.

        The number of machine cycles available for DMA control is

        106(0.05 × 5 + 0.95 × 2) = 2.15 × 106

        If we assume that the DMA module can use all of these cycles, and ignore any setup or status-checking time, then this value is the maximum I/O transfer rate.
         
    10. Ga uit van de hierna volgende code:
          for (i = 0; i < 20; i+÷)
              for(j = 0; j<10; j++)
              a[i] a[i] * j
      1. Geef een voorbeeld van ruimtelijke lokaliteit in deze code.

        A reference to the first instruction is immediately followed by a reference to the second.
         
      2. Geef een voorbeeld van tijdsafhankeljke lokaliteit in deze code.

        The ten accesses to a[i] within the inner for loop which occur within a short interval of time.
         
    11. Generaliseer vergelijking 1.1 en 1.2 in bijlage 1.A tot een geheugenhiërarchie met n niveaus.

      Define
      Ci = Average cost per bit, memory level i
      Si = Size of memory level i
      Ti = Time to access a word in memory level i
      Hi = Probability that a word is in memory i and in no higher-level memory
      Bi = Time to transfer a block of data from memory level (i + 1) to memory level i
      Let cache be memory level 1; main memory, memory level 2; and so on, for a total of N levels of memory. Then



      The derivation of Ts is more complicated. We begin with the result from probability theory that:



      We can write:



      We need to realize that if a word is in M1 (cache), it is read immediately. If it is in M2 but not M1, then a block of data is transferred from M2 to M1 and then read.
      Thus:



      Further



      Generalizing:



      So



      But



      Finally



       
    12. Voor een geheugensysteem gelden de volgende parameters: Tc = 100 ns, Kc = 0.01 cents/bit, Th = 1200 ns en Kh = 0,001 dollarcent/bit.
      1. Wat kost 1 megabyte hoofdgeheugen?

        Cost = Cm × 8 × 106 = 8 × 103 ¢ = $80
         
      2. Wat kost 1 megabyte hoofdgeheugen bij de cachegeheugentechnologie?

        Cost = Cc × 8 × 106 = 8 × 104 ¢ = $800
         
      3. Als de effectieve toegangstijd 10% groter is dan de cachetoegangstijd, wat is dan de hit-ratio H?

        From Equation 1.1:
        1.1 × T1 = T1 + (1 – H)T2
        (0.1)(100) = (1 – H)(1200)
        H = 1190/1200
         
    13. Een computer heeft een cache, hoofdgeheugen en een schijf die wordt gebruikt voor virtueel geheugen. Bevindt een woord waarnaar wordt verwezen zich in de cache, dan is 20 ns nodig voor de toegang tot het woord. Bevindt het zich in het hoofdgeheugen maar niet in de cache, dan is 60 ns nodig om het in de cache te laden en wordt de verwijzing vervolgens opnieuw uitgevoerd. Bevindt het woord zich niet in het hoofdgeheugen, dan is 12 ms nodig om het woord op te vragen van de schijf, gevolgd door 60 ns om het naar de cache te kopiëren, waarna de verwijzing opnieuw wordt uitgevoerd. De hit-ratio van de cache is 0,9 en de hit-ratio van het hoofdgeheugen is 0,6. Wat is bij dit systeem de gemiddelde tijd in nanoseconden die nodig is voor de toegang tot een woord waarnaar wordt verwezen?

      There are three cases to consider:

       
      Location of referenced word Probability Totaltime for accessin ns
      In cache 0.9 20
      Not in cache, but in main memory (0.1)(0.6) = 0.06 60 + 20 = 80
      Not in cache or main memory (0.1)(0.4) = 0.04 12ms + 60 + 20 = 12,000,080

      So the average access time would be:
      Avg = (0.9)(20) + (0.06)(80) + (0.04)(12000080) = 480026 ns
       

    14. Veronderstel dat een stack moet worden gebruikt door de processor voor het beheren van alle aanroepen en terugkeer. Kan de programmateller worden geëlimineerd door de top van de stack te gebruiken als programmateller?

      Yes, if the stack is only used to hold the return address. If the stack is also used to pass parameters, then the scheme will work only if it is the control unit that removes parameters, rather than machine instructions. In the latter case, the processor would need both a parameter and the PC on top of the stack at the same time.