Regisztrációs ablak – a processzorregiszterekkel végzett munka megszervezésének egyik módszere , amelyet a veremmel való munka többletköltségének csökkentésére használnak szubrutinok hívásakor .
A regiszterablak paradigmáját a RISC mikroprocesszor projekt során fejlesztették ki az UC Berkeley -ben 1980-1984 között.
A processzorok túlnyomó többsége korlátozott számú regisztert tartalmaz - rendkívül gyors memóriacellákat, amelyek szolgáltatási információk tárolására szolgálnak (szolgáltatási regiszterek) és a program működésének közbenső eredményei (általános célú regiszterek). A hagyományos paradigmában a szubrutin meghívásakor a processzornak el kell mentenie az aktuális állapotát (a legtöbb szolgáltatási regiszter és néhány általános célú regiszter tartalmát), át kell adnia a vezérlést az eljárás elejére, majd annak befejezése után vissza kell állítania. a korábban elmentett regiszterértékeket. Ez a gyakorlatban azt jelenti, hogy minden egyes eljáráshívásnál több tíz vagy száz bájtnyi információt kell a RAM -ba írni.
A regiszterablak paradigmában az általános célú processzorregisztereket globális regiszterekre ( globális változók tárolására ) és egy regiszterfájlra osztják , amely egyetlen program számára sem látható teljesen.
Álljon a regiszterfájl K regiszterből, amelyek körbe vannak rendezve. Minden program csak az aktuális regiszter ablakot alkotó L = L 1 + L 2 + L 3 regiszterekhez (L < K) fér hozzá. Az ablak három részre oszlik:
Az alprogram meghívása előtt az aktuális program a kimeneti regiszterekbe írja azon paraméterek értékeit, amelyeket át kell adni az alprogramnak. Amikor a vezérlést átadjuk egy szubrutinnak, a regiszterablak eltolódik, és az előző aktív program kimeneti regiszterei az alprogram bemeneti regisztereivé válnak. A vezérlés visszaadása előtt a rutin az eredményeket (visszatérési értékeket) a bemeneti regisztereibe írja. Az a program, amely a regiszterablak fordított eltolása után hívta meg, hozzáférhet hozzájuk. [1] [2]
Az aktuális regiszter ablak elejére mutató mutatót egy speciális CWP (Current Window Pointer) regiszter tárolja, és hardver módosítja. [3]
Abban az esetben, ha minden regiszter érintett, a következő szubrutin meghívásához az első regiszterek értékeit a RAM-ban kell tárolni (a lapozáshoz hasonló művelet ) .
A klasszikus modell feltételezi, hogy a regiszterablak mérete rögzített. Egyes megvalósítások (például az AMD Am29000 ) változó méretű regiszter ablakokat használnak.
A regisztrációs ablakokat SPARC , Elbrus , Intel i960 és AMD Am29000 processzorok használják .
A regiszterablakok fő előnye, hogy szubrutinok hívásakor nem kell dolgozni a veremmel. Ezenkívül a regiszterablakok memóriavédelmet valósítanak meg: egy szubrutin nem tudja megváltoztatni az őt hívó program legtöbb regiszterének értékét. Ennek a megközelítésnek a hátrányai között megjegyezhető az alprogramok maximális beágyazási mélysége, amely felett az alprogramok hívásakor az általános költségek meredeken emelkednek. John Hennessy , a versengő RISC architektúra MIPS főtervezője úgy gondolta , hogy a fordító jobban tudna szabad regisztereket találni a paraméterek átadásához egy szubrutinnak . E munka elvégzését hardver szinten indokolatlannak tartotta.
processzortechnológiák | Digitális|||||||||
---|---|---|---|---|---|---|---|---|---|
Építészet | |||||||||
Instruction Set Architecture | |||||||||
gépszó | |||||||||
Párhuzamosság |
| ||||||||
Megvalósítások | |||||||||
Alkatrészek | |||||||||
Energiagazdálkodás |