Popek och Goldbergs virtualiseringskrav
Popek och Goldbergs virtualiseringskrav är en uppsättning villkor som är tillräckliga för att en datorarkitektur ska stödja systemvirtualisering effektivt . De introducerades av Gerald J. Popek och Robert P. Goldberg i deras 1974 artikel "Formal Requirements for Virtualizable Third Generation Architectures". Även om kraven härleds under förenklade antaganden, representerar de fortfarande ett bekvämt sätt att avgöra om en datorarkitektur stöder effektiv virtualisering och ger riktlinjer för utformningen av virtualiserade datorarkitekturer.
VMM definition
Virtuella systemmaskiner kan virtualisera en hel uppsättning hårdvaruresurser, inklusive en processor (eller processorer), minnes- och lagringsresurser och kringutrustning. En virtuell maskinmonitor (VMM, även kallad hypervisor ) är den mjukvara som tillhandahåller abstraktionen av en virtuell maskin. Det finns tre egenskaper av intresse när man analyserar miljön som skapas av en VMM:
- Ekvivalens/tillförlitlighet
- Ett program som körs under VMM bör uppvisa ett beteende som är väsentligen identiskt med det som visas när det körs på en likvärdig maskin direkt.
- Resurskontroll / Säkerhet
- VMM måste ha fullständig kontroll över de virtualiserade resurserna.
- Effektivitet/prestanda
- En statistiskt dominerande del av maskininstruktionerna måste utföras utan VMM-intervention.
Enligt Popek och Goldbergs terminologi måste en VMM presentera alla tre egenskaperna. I den terminologi som används i uppslagsboken av Smith och Nair (2005) antas VMM vanligtvis uppfylla ekvivalens- och resurskontrollegenskaperna, och de som dessutom uppfyller prestandaegenskapen kallas effektiva VMM .
Popek och Goldberg beskriver de egenskaper som den fysiska maskinens instruktionsuppsättningsarkitektur (ISA) måste ha för att kunna köra VMM:er som har ovanstående egenskaper. Deras analys härleder sådana egenskaper genom att använda en modell av "tredje generationens arkitekturer" (t.ex. IBM 360, Honeywell 6000, DEC PDP-10) som ändå är tillräckligt generell för att kunna utvidgas till moderna maskiner. Denna modell inkluderar en processor som fungerar i antingen system- eller användarläge och har tillgång till linjärt, enhetligt adresserbart minne. Det antas att en delmängd av instruktionsuppsättningen endast är tillgänglig i systemmod och att minnet är adresserat i förhållande till ett omlokaliseringsregister. I/O och avbrott modelleras inte.
Virtualiseringsteorem
För att härleda sina virtualiseringsteorem, som ger tillräckliga (men inte nödvändiga) förutsättningar för virtualisering, introducerar Popek och Goldberg en klassificering av några instruktioner för en ISA i 3 olika grupper:
- Privilegierade instruktioner
- De som fäller om processorn är i användarläge och inte fäller om den är i systemläge ( övervakarläge) .
- Kontrollkänsliga instruktioner
- De som försöker ändra konfigurationen av resurser i systemet.
- Beteendekänsliga instruktioner
- De vars beteende eller resultat beror på konfigurationen av resurser (innehållet i flyttregistret eller processorns läge).
Huvudresultatet av Popek och Goldbergs analys kan då uttryckas på följande sätt.
Sats 1 . För vilken konventionell tredje generationens dator som helst kan en effektiv VMM konstrueras om uppsättningen av känsliga instruktioner för den datorn är en delmängd av uppsättningen privilegierade instruktioner.
Intuitivt säger teoremet att för att bygga en VMM är det tillräckligt att alla instruktioner som kan påverka den korrekta funktionen hos VMM (känsliga instruktioner) alltid fångar och skickar kontrollen till VMM. Detta garanterar resurskontrollegenskapen. Icke-privilegierade instruktioner måste istället exekveras naturligt (dvs. effektivt). Innehavet av ekvivalensegendomen följer också.
Detta teorem tillhandahåller också en enkel teknik för att implementera en VMM, kallad trap-and-emulate virtualization, mer nyligen kallad klassisk virtualisering : eftersom alla känsliga instruktioner beter sig snyggt, behöver VMM bara fånga och emulera varje gång av dem.
Ett relaterat problem är att härleda tillräckliga villkor för rekursiv virtualisering, det vill säga villkoren under vilka en VMM som kan köras på en kopia av sig själv kan byggas. Popek och Goldberg presenterar följande (tillräckliga) villkor.
Sats 2 . En konventionell tredje generationens dator är rekursivt virtualiserbar om:
- det är virtualiserbart och
- en VMM utan några tidsberoende kan konstrueras för den.
Vissa arkitekturer, som den icke-maskinvaruassisterade x86 , uppfyller inte dessa villkor, så de kan inte virtualiseras på klassiskt sätt. Men arkitekturer kan fortfarande virtualiseras fullt ut (i x86-fallet, alltså på CPU- och MMU-nivå) genom att använda olika tekniker som binär översättning, som ersätter de känsliga instruktionerna som inte genererar fällor, som ibland kallas kritiska instruktioner. Denna extra bearbetning gör dock VMM mindre effektiv i teorin, men hårdvarufällor har också en icke försumbar prestandakostnad. [ citat behövs ] Ett väl avstämt binärt översättningssystem för cachning kan uppnå jämförbar prestanda, och det gör det i fallet med x86 binär översättning i förhållande till första generationens x86-hårdvaruhjälp, vilket bara gjorde att känsliga instruktioner kunde fångas in. Detta ger i praktiken en sats med olika tillräcklighetsvillkor. [ citat behövs ]
Sats 3 . En hybrid VMM kan konstrueras för vilken tredje generationens maskin som helst där uppsättningen av användarkänsliga instruktioner är en delmängd av uppsättningen privilegierade instruktioner:
Hantera kritiska instruktioner
Villkoren för ISA-virtualisering som uttrycks i sats 1 kan mildras på bekostnad av effektivitetsegenskapen. VMM:er för icke-virtualiserbara ISA:er (i Popek och Goldbergs mening) har rutinmässigt byggts.
Virtualiseringen av sådana arkitekturer kräver korrekt hantering av kritiska instruktioner , dvs känsliga men oprivilegierade instruktioner. Ett tillvägagångssätt, känt som patchning , använder tekniker som vanligtvis används vid dynamisk omkompilering : kritiska instruktioner upptäcks vid körning och ersätts med en fälla i VMM. Olika mekanismer, såsom cachelagring av emuleringskod eller hårdvaruhjälp , har föreslagits för att göra lappningsprocessen mer effektiv. Ett annat tillvägagångssätt är paravirtualisering , som kräver att gästoperativsystem modifieras ( porteras ) innan de körs i den virtuella miljön.
Instruktionsuppsättningar av vanliga arkitekturer
Det här avsnittet presenterar några relevanta arkitekturer och hur de relaterar till virtualiseringskraven.
PDP-10
PDP -10- arkitekturen har några instruktioner som är känsliga (ändrar eller frågar efter processorns läge) men inte privilegierade. Dessa instruktioner sparar eller återställer villkorskoderna som innehåller USER- eller IOT-bitar:
- JSR: hoppa till subrutin
- JSP: hoppa och spara programräknare
- PUSHJ: tryck ner och hoppa
- JRST: hoppa och återställ
System/370
Alla känsliga instruktioner i System/370 är privilegierade: den uppfyller virtualiseringskraven.
Motorola MC68000
Motorola MC68000 har en enda oprivilegierad känslig instruktion:
- FLYTTA från SR
Denna instruktion är känslig eftersom den tillåter åtkomst till hela statusregistret, som inte bara inkluderar villkorskoderna utan även användar-/övervakarbiten, avbrottsnivå och spårningskontroll. I de flesta senare familjemedlemmar, med början med MC68010 , gjordes MOVE from SR-instruktionen privilegierad, och en ny MOVE from CCR-instruktion gavs för att endast tillåta åtkomst till villkorskodregistret.
IA-32 (x86)
IA -32- instruktionsuppsättningen för Pentium- processorn innehåller 18 känsliga, oprivilegierade instruktioner. De kan delas in i två grupper:
- Instruktioner för känsliga register: läs eller ändra känsliga register eller minnesplatser som ett klockregister eller avbrottsregister:
- SGDT, SIDT, SLDT
- SMSW
- PUSHF, POPF
- Instruktioner för skyddssystem: referera till lagringsskyddssystemet, minnes- eller adressflyttningssystemet:
- LAR, LSL, VERR, VERW
- POP
- SKJUTA PÅ
- CALL FAR, JMP FAR, INT n, RETF
- STR
- MOV (segmentregister)
Introduktionen av AMD-V- och Intel VT-x- instruktionsuppsättningarna 2005 tillåter x86-processorer att uppfylla Popek och Goldbergs virtualiseringskrav.
IA-64
Ansträngningen som behövs för att stödja virtualisering på IA-64- arkitekturen beskrivs i en artikel från 2000 av Magenheimer och Christian.
SPARC
Ett "överprivilegierat" läge för UltraSPARC -arkitekturen specificerades i UltraSPARC Architecture 2005. ' Den definierar en sun4v -plattform som är en superuppsättning av sun4u -plattformen, men som fortfarande är kompatibel med SPARC v9 Level-1-specifikationen.
PowerPC
Alla känsliga instruktioner i PowerPC- instruktionsuppsättningen är privilegierade.
Prestanda i praktiken
Effektivitetskravet i Popek och Goldbergs definition av en VMM avser endast exekvering av icke-privilegierade instruktioner, som måste utföras inbyggt. Detta är vad som skiljer en VMM från den mer allmänna klassen av hårdvaruemuleringsprogramvara . Tyvärr, även på en arkitektur som uppfyller Popek och Goldbergs krav, kan prestandan hos en virtuell maskin skilja sig betydligt från den faktiska hårdvaran. Tidiga experiment utförda på System/370 (som uppfyller de formella kraven i sats 1) visade att prestandan för en virtuell maskin kunde vara så låg som 21 % av den ursprungliga maskinen i vissa riktmärken. Kostnaden för att fånga och emulera privilegierade instruktioner i VMM kan vara betydande. Detta ledde till att IBM-ingenjörerna introducerade ett antal hårdvaruhjälp , vilket ungefär fördubblade prestandan för de virtuella System/370-maskinerna. Assist tillkom i flera steg. Till slut blev det över 100 assists på de sena modellerna System/370.
En av de främsta drivande faktorerna för utvecklingen av hårdvaruhjälp för System/370 var det virtuella minnet i sig. När gästen var ett operativsystem som självt implementerade virtuellt minne, kunde till och med icke-privilegierade instruktioner uppleva längre exekveringstider - en påföljd som påfördes av kravet på att få åtkomst till översättningstabeller som inte används i inhemsk exekvering (se skuggsidtabeller ) .
- Anteckningar
- Smith, James; Ravi Nair (2005). Virtuella maskiner . Morgan Kaufmann. ISBN 1-55860-910-5 .
- Adams, Keith; Agesen, Ole (21–25 oktober 2006). "En jämförelse av mjukvaru- och maskinvarutekniker för x86-virtualisering" ( PDF) . Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems, San Jose, CA, USA, 2006 . ACM 1-59593-451-0/06/0010 . Hämtad 2006-12-22 .
- PH Gum, System/370 Extended Architecture: Facilities for Virtual Machines , IBM J. Res. Dev., vol. 27, nr 6, nov. 1983, s. 530–544