Regisztrációs ablak

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2016. szeptember 2-án felülvizsgált verziótól ; az ellenőrzések 5 szerkesztést igényelnek .

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 .

Történelem

A regiszterablak paradigmáját a RISC mikroprocesszor projekt során fejlesztették ki az UC Berkeley -ben 1980-1984 között.

Működési elvek

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.

Megvalósítások

A regisztrációs ablakokat SPARC , Elbrus , Intel i960 és AMD Am29000 processzorok használják .

Előnyök és hátrányok

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.

Jegyzetek

  1. Processzor architektúra. MIPS , Sparc, ARM és PowerPC
  2. CPU-regiszter-memória szervezet Archivált : 2016. március 1. a Wayback Machine / eSyr Wiki oldalain
  3. A _ _ _ _ _ _ _ _ _ _ _ 4 /2008 "A Windows hardveresen átkapcsolható más regiszterekre a CWP (Current Window Pointer) speciális regiszter segítségével"