Registreringsfönstret

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 2 september 2016; kontroller kräver 5 redigeringar .

Registerfönster  - en av metoderna för att organisera arbetet med processorregister , som används för att minska omkostnaderna för att arbeta med stacken vid anrop av subrutiner .

Historik

Registerfönsterparadigmet utvecklades under RISC-mikroprocessorprojektet vid UC Berkeley 1980-1984.

Funktionsprinciper

De allra flesta processorer innehåller ett begränsat antal register  - ultrasnabba minnesceller som används för att lagra serviceinformation (serviceregister) och mellanliggande resultat av programdrift (allmänna register). I det traditionella paradigmet, i det ögonblick då subrutinen anropas, måste processorn spara sitt nuvarande tillstånd (innehållet i de flesta tjänsteregister och vissa allmänna register), överföra kontrollen till början av proceduren och efter att den är klar, återställa de tidigare sparade registervärdena. I praktiken innebär detta behovet av att skriva tiotals eller hundratals byte information i RAM med varje proceduranrop.

I registerfönsterparadigmet är processorregister för allmänna ändamål uppdelade i globala register (för lagring av globala variabler ) och en registerfil , som inte är helt synlig för något program.

Låt registerfilen bestå av K register ordnade i en cirkel. Varje program har tillgång till endast L = L 1 + L 2 + L 3 register (L < K) som utgör det aktuella registerfönstret. Fönstret är uppdelat i tre delar:

Innan subrutinen anropas, skriver det aktuella programmet till utgångsregistren värdena för de parametrar som måste skickas till subrutinen. När kontrollen överförs till en subrutin, skiftar registerfönstret, och utgångsregistren från det tidigare aktiva programmet blir ingångsregister för subrutinen. Innan kontrollen överförs tillbaka, skriver rutinen resultaten (returvärden) till sina ingångsregister. Programmet som anropade det efter omvänd ändring av registerfönstret kommer att ha tillgång till dem. [1] [2]

Pekaren till början av det aktuella registerfönstret lagras i ett speciellt CWP-register (Current Window Pointer) och ändras av hårdvara. [3]

I händelse av att alla register är inblandade, för att anropa nästa subrutin, måste värdena för de första registren lagras i RAM (en åtgärd som liknar personsökning ).

Den klassiska modellen förutsätter att storleken på registerfönstret är fast. Vissa implementeringar (som AMD Am29000 ) använder registerfönster med variabel storlek.

Implementeringar

Registerfönster används i SPARC , Elbrus , Intel i960 och AMD Am29000-processorer .

Fördelar och nackdelar

Den största fördelen med registerfönster är bristen på arbete med stacken när du anropar subrutiner. Dessutom implementerar registerfönster minnesskydd: en subrutin kan inte ändra värdena för de flesta av registren i programmet som anropade den. Bland nackdelarna med detta tillvägagångssätt kan man notera närvaron av ett maximalt kapsdjup för subrutiner, över vilket de overheadkostnaderna vid anrop av subrutiner ökar kraftigt. John Hennessy , chefsdesigner för den konkurrerande RISC-arkitekturen MIPS , trodde att kompilatorn kunde göra ett bättre jobb med att hitta fria register för att skicka parametrar till en subrutin . Att utföra detta arbete på hårdvarunivå ansåg han vara omotiverat.

Anteckningar

  1. Processorarkitektur. MIPS , Sparc, ARM och PowerPC
  2. CPU-registerminnesorganisation Arkiverad 1 mars 2016 på Wayback Machine / eSyrs Wiki- sidor
  3. E. A. EREMIN, Stack Arkivkopia daterad 20 januari 2017 på Wayback Machine , del 2 Arkivkopia daterad 4 mars 2016 på Wayback Machine // Informatics Magazine - Into the World of Informatics # 102 (16–31 januari), nr 4 /2008 "Windows kan maskinvaruväxlas till andra register med CWP (Current Window Pointer) specialregister"