Register vindue

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 2. september 2016; checks kræver 5 redigeringer .

Registervindue  - en af ​​metoderne til at organisere arbejde med processorregistre , der bruges til at reducere overheaden ved at arbejde med stakken, når du kalder subrutiner .

Historie

Registervindue-paradigmet blev udviklet under RISC-mikroprocessorprojektet ved UC Berkeley i 1980-1984.

Funktionsprincipper

Langt de fleste processorer indeholder et begrænset antal registre  - ultrahurtige hukommelsesceller, der bruges til at lagre serviceinformation (serviceregistre) og mellemresultater af programdrift (generelle registre). I det traditionelle paradigme, i det øjeblik subrutinen kaldes, skal processoren gemme sin nuværende tilstand (indholdet af de fleste serviceregistre og nogle generelle registre), overføre kontrollen til begyndelsen af ​​proceduren og efter dens afslutning genoprette de tidligere gemte registerværdier. I praksis betyder dette behovet for at skrive titusinder eller hundredvis af bytes information i RAM med hvert procedurekald.

I registervinduets paradigme er processorregistre til generelle formål opdelt i globale registre (til lagring af globale variabler ) og en registerfil , som ikke er helt synlig for noget program.

Lad registerfilen bestå af K registre arrangeret i en cirkel. Hvert program har kun adgang til L = L 1 + L 2 + L 3 registre (L < K), der udgør det aktuelle registervindue. Vinduet er opdelt i tre dele:

Før du kalder subrutinen, skriver det aktuelle program til outputregistrene værdierne af de parametre, der skal sendes til subrutinen. Når styringen overføres til en underrutine, skifter registervinduet, og udgangsregistrene for det tidligere aktive program bliver inputregistre for underrutinen. Før kontrollen overføres tilbage, skriver rutinen resultaterne (returværdier) til sine inputregistre. Det program, der kaldte det efter omvendt skift af registervinduet, vil have adgang til dem. [1] [2]

Markøren til begyndelsen af ​​det aktuelle registervindue er gemt i et særligt CWP-register (Current Window Pointer) og ændres af hardware. [3]

I tilfælde af at alle registre er involveret, for at kalde den næste subrutine, skal værdierne af de første registre gemmes i RAM (en handling, der ligner personsøgning ).

Den klassiske model antager, at størrelsen af ​​registervinduet er fast. Nogle implementeringer (såsom AMD Am29000 ) bruger registervinduer med variabel størrelse.

Implementeringer

Registervinduer bruges i SPARC , Elbrus , Intel i960 og AMD Am29000 processorer .

Fordele og ulemper

Den største fordel ved registervinduer er manglen på arbejde med stakken, når du kalder subrutiner. Derudover implementerer registervinduer hukommelsesbeskyttelse: en subrutine kan ikke ændre værdierne for de fleste af registrene i det program, der kaldte den. Blandt ulemperne ved denne tilgang kan man bemærke tilstedeværelsen af ​​en maksimal indlejringsdybde af subrutiner, over hvilken de overheadomkostninger ved opkald af subrutiner stiger kraftigt. John Hennessy , chefdesigner af den konkurrerende RISC-arkitektur MIPS , mente, at compileren kunne gøre et bedre stykke arbejde med at finde gratis registre til at overføre parametre til en underrutine . At udføre dette arbejde på hardwareniveau anså han for uberettiget.

Noter

  1. Processorarkitektur. MIPS , Sparc, ARM og PowerPC
  2. CPU-registreringshukommelsesorganisation Arkiveret 1. marts 2016 på Wayback Machine / eSyr's Wiki- sider
  3. E. A. EREMIN, Stack Arkivkopi dateret 20. januar 2017 på Wayback Machine , del 2 Arkivkopi dateret 4. marts 2016 på Wayback Machine // Informatics Magazine - Into the World of Informatics # 102 (16.–31. januar), nr. 4 /2008 "Windows kan hardware-skiftes til andre registre ved hjælp af CWP (Current Window Pointer) specialregister"