Wat is Instructiesetarchitectuur (ISA)?

Specificatie van de processor zoals die voor software zichtbaar is, zoals de uitvoerbare instructies en registers. Voorbeelden: x86, Arm, RISC-V.

Japanse benaming: 命令セットアーキテクチャ(ISA)

“Instructiesetarchitectuur (ISA)” komt voor in 12 oefenvragen uit 4 onderwerpen, bijv. Instructieset en assembly, CPU en architectuur, Prestatiemeting en profiling.

Vakgebied: CPU en architectuur

Wat een ISA vastlegt

Een instructiesetarchitectuur (ISA) is het contract tussen software en processorhardware. Ze definieert de instructies en hun bitcoderingen, de registers die voor programma's zichtbaar zijn, de datatypen en adresseringsmodi, de volgorde van geheugentoegangen, de privilegeniveaus en het gedrag van interrupts en exceptions. Alles wat de ISA definieert, is architecturale toestand die machinecode kan waarnemen en waarop ze kan vertrouwen. Een assembler vertaalt assemblymnemonics vrijwel één-op-één naar deze coderingen, en daarom heeft elke ISA haar eigen assemblytaal.

ISA versus microarchitectuur

De microarchitectuur is de manier waarop een bepaalde processor de ISA implementeert: pipelinediepte, cachegroottes, branch predictors, het aantal instructies dat per cyclus wordt uitgegeven. Eén ISA kan worden geïmplementeerd door zeer kleine low-power cores en door grote out-of-order cores die dezelfde machinecode met zeer verschillende snelheden uitvoeren. In de prestatievergelijking, uitvoeringstijd = aantal instructies × cycli per instructie (CPI) × cyclustijd, bepalen de ISA en de compiler vooral het aantal instructies, de microarchitectuur de CPI, en de schakelingen en procestechnologie de cyclustijd. Aanvallen van het type Spectre misbruiken die grens: architecturale toestand na een verkeerde speculatie wordt teruggedraaid, maar de cache-inhoud niet.

Ontwerpkeuzes die de hardware vormen

Details van de ISA hebben blijvende gevolgen voor de hardware. De basisinstructies van RISC-V zijn vast 32 bits (16-bitsvormen alleen met de compressed-extensie C), zodat de grenzen tussen instructies duidelijk zijn, terwijl x86-instructies van 1 tot 15 bytes lang zijn en deels moeten worden gedecodeerd om te bepalen waar de volgende begint, wat brede decoders complex maakt. x86-sprongen testen flags die door een eerdere vergelijking zijn gezet; RISC-V vergelijkt twee registers binnen de sprong zelf, zodat er geen impliciete flag-toestand hoeft te worden bijgehouden. De branch delay slot van MIPS liet het risico zien van het vastleggen van de eigenaardigheden van één pipeline in een ISA die langer meegaat dan die pipeline.

Modulaire en open ISA's

RISC-V is een open ISA waarvan iedereen de specificatie zonder licentiekosten mag implementeren. Ze combineert een kleine basisset voor gehele getallen (RV32I of RV64I, ongeveer 40 instructies) met optionele extensies: M voor vermenigvuldigen en delen, A voor atomaire bewerkingen, F en D voor floating point, C voor gecomprimeerde instructies, V voor vectoren, plus eigen (custom) instructies. Een extensie weglaten bespaart oppervlak maar kost snelheid: zonder M zet de compiler een vermenigvuldiging in C om in een aanroep van een bibliotheekroutine die met schuif- en optelbewerkingen vermenigvuldigt. Arm en x86 zijn propriëtair en worden door hun eigenaars in licentie gegeven of geïmplementeerd.

Nu oefenen: vragen over Instructiesetarchitectuur (ISA)

Welke uitspraak over twee CPU's met dezelfde instructiesetarchitectuur (ISA) is juist?

  1. AOmdat ze met dezelfde circuitopbouw zijn gemaakt, zijn prestaties en vermogensverbruik gelijk
  2. BOok als de interne circuitopbouw verschilt, kunnen ze hetzelfde machinecodeprogramma uitvoeren
  3. CZe moeten in dezelfde halfgeleiderfabriek met hetzelfde productieproces worden gemaakt
Antwoord en toelichting tonen

Antwoord: B. Ook als de interne circuitopbouw verschilt, kunnen ze hetzelfde machinecodeprogramma uitvoeren

Een ISA is een afspraak tussen software en hardware die onder meer de soorten instructies, de bitindeling van instructies en het aantal registers vastlegt. De interne opbouw, zoals het aantal pipelinetrappen, de cachegrootte en de methode van sprongvoorspelling, heet microarchitectuur en wordt los van de ISA vastgesteld. Daarom zijn er bij dezelfde ISA kleine zuinige cores en grote krachtige cores, met verschillende prestaties en vermogen, maar draait hetzelfde machinecodeprogramma. Ook fabriek en productieproces hebben niets met de ISA te maken.

Veelgestelde vragen

Wat is het verschil tussen een ISA en een microarchitectuur?

De ISA is de specificatie die software ziet: instructies, registers en gedrag. De microarchitectuur is een specifiek hardwareontwerp dat die specificatie implementeert, zodat twee processors met verschillende microarchitecturen dezelfde programma's kunnen uitvoeren als ze dezelfde ISA delen.

Zijn x86, Arm en RISC-V instructiesetarchitecturen?

Ja. Het zijn drie verschillende ISA's, dus machinecode die voor de ene is gecompileerd, kan niet direct op een andere draaien, ook al wordt elk door veel verschillende processorontwerpen geïmplementeerd.

Wat is het verschil tussen een ISA en een ABI?

De ISA definieert wat de processor uitvoert, terwijl de ABI een softwareconventie daarbovenop is die calling conventions, groottes van datatypen en systeemaanroepen regelt. Eén ISA kan meerdere ABI's hebben, bijvoorbeeld voor verschillende besturingssystemen.

“Instructiesetarchitectuur (ISA)” in de toelichting

Vragen met “Instructiesetarchitectuur (ISA)” (12)

  1. Welke uitspraak over twee CPU's met dezelfde instructiesetarchitectuur (ISA) is juist?
  2. Waarvoor staan namen als ARM, x86 en RISC-V in de eerste plaats?
  3. Welke uitspraak over RISC-V is juist?
  4. Welke relatie tussen assembleertaal en machinecode is juist?
  5. Wat is de gebruikelijke methode in RISC-V om een 32-bits constante die niet in een immediate van 12 bits past (bijvoorbeeld 0x12345678) in een register te plaatsen?
  6. Wat is het juiste doel van het uitvoeren van „addi sp, sp, -16” aan het begin van een RISC-V-functie?
  7. Welke instructies voegt de RISC-V M-extensie toe aan de basisinstructieset voor gehele getallen?
  8. Wat gebeurt er in het algemeen als „a * b” (vermenigvuldiging van ints) in C wordt gecompileerd voor een RV32I-CPU zonder M-extensie?
  9. Welke uitspraak is juist over de branch delay slot die bij het vroegere MIPS en dergelijke bestond (de afspraak dat de ene instructie direct na een sprong-instructie wordt uitgevoerd, ongeacht of er wordt gesprongen)?
  10. Welke omschrijving van de ABI (application binary interface) is juist?
  11. Welke formule geeft de uitvoeringstijd van een programma op de CPU juist weer?
  12. Waarom lekt bij aanvallen zoals Spectre informatie, ook als het resultaat van speculatief uitgevoerde instructies wordt ingetrokken?

Vergelijkingen met deze term

Verwante termen

Sprongvoorspelling (branch prediction) Assembler Immediate (directe waarde) Stackframe Gecomprimeerde instructies Branch delay slot Numerieke apertuur (NA) ABI (application binary interface) Aanroepconventie (calling convention) CPI

Naar de woordenlijst