A bankváltás egy módja annak, hogy növeljük a felhasznált memória mennyiségét ahhoz képest, amelyet a processzor közvetlenül meg tud szólítani [1] [2] . Ezzel a módszerrel módosítható a rendszer konfigurációja: például a rendszer hajlékonylemezről történő indításához szükséges ROM letiltható, ha már nincs rá szükség. A videojáték-konzolokon a bankváltás lehetővé teszi nagyobb játékok fejlesztését a jelenlegi generációs konzolokon való használatra.
A bankváltás először a miniszámítógépekben jelent meg [3] . Sok modern mikrovezérlő és mikroprocesszor bankváltást használ a RAM , ROM, I/O eszközök és rendszervezérlő regiszterek vezérlésére kis beágyazott rendszerekben . Ezt a módszert széles körben használták a 8 bites mikroszámítógépekben . A bankváltás akkor is használható, ha a címbusz szélessége mesterségesen korlátozott, és hardveres korlátok vannak, amelyek nem teszik lehetővé a címsorok számának növelését. Egyes mikrokontrollerek hardverben támogatják a bankváltást, ami csökkenti az utasításokban használt címbitek számát.
A lapozási mechanizmussal ellentétben az adatok nem lapozódnak tárolóeszközre (merevlemezre). Az adatok változatlanok maradnak azon a memóriaterületen, amely jelenleg nem érhető el a processzor számára (bár ez a terület elérhető a videovezérlő , a DMA-vezérlő vagy más számítógépes alrendszerek számára).
A bankváltást úgy lehet felfogni, mint a processzor címbuszának külső regiszterrel történő bővítését . Például egy 16 bites külső címbusszal rendelkező processzor 2 16 = 65536 memóriahelyet tud megcímezni. Ha külső triggert adnak a rendszerhez , akkor ezzel szabályozható, hogy a két 65536 cellából álló memóriablokk közül melyik legyen elérhető. A processzor a flip-flop beállításával vagy törlésével tudja váltani a használt blokkok halmazát.
A triggert többféleképpen lehet alaphelyzetbe állítani vagy beállítani: egy adott memóriacím elérésével, vagy a dedikált I/O utasításokkal rendelkező processzorokon egy adott I/O port elérésével. Több bankváltást vezérlő flip-flop összevonható egy regiszterbe, így a regiszter minden bitje megközelítőleg megkétszerezheti a címezhető cellák számát.
Mivel a bankválasztó trigger (regiszter) nem kapcsolódik közvetlenül a processzor programszámlálójához, nem változtatja meg automatikusan az állapotát, amikor a programszámláló túlcsordul . A túlcsordulás nem észlelhető külső triggerrel, mivel a programszámláló egy belső processzorregiszter. A programok nem használhatják az extra memóriát módosítás nélkül. Mivel a processzor belső regisztereinek hossza nem változik, a processzor nem tudja közvetlenül megcímezni az összes bank memóriacelláját például egy belső regiszter növekmény miatt [4] . Ehelyett a processzornak kifejezetten bankváltási műveletet kell végrehajtania a memóriában lévő LOB-okhoz való hozzáféréshez. Vannak más korlátozások is. Általában egy bankkapcsolt rendszer egy programmemóriát tartalmaz, amelyet minden bank megoszt. Az aktuálisan kiválasztott banktól függetlenül a címtér egy része ugyanarra a memóriaterületre lesz leképezve. Ez a terület tartalmazza a bankváltást és a megszakításokat kezelő kódot .
A virtuális memória technológiával ellentétben a bankváltást kifejezetten a végrehajtó programnak vagy operációs rendszernek kell vezérelnie. A processzor hardvere nem tudja automatikusan megállapítani, hogy olyan adatokra van szükség, amelyek jelenleg nem állnak rendelkezésre a kiválasztott bankon keresztül. Az alkalmazási programnak nyomon kell követnie, hogy melyik memóriabank tartalmazza a szükséges adatokat, és fel kell hívnia a bankváltási rutint, hogy az adott bank aktív legyen [5] . Ugyanakkor a bankváltás lehetővé teszi az adatok gyorsabb elérését, mint például az oldalak lemezről történő betöltése.
Az első játékkonzolokban és otthoni számítógépekben széles körben használt, 16 bites címbusszal rendelkező processzorok ( Z80 , 6502 , 6809 és mások) csak 64 KB -ot tudtak közvetlenül megcímezni . A több memóriával rendelkező rendszereken a címteret blokkokra kellett felosztani, amelyek dinamikusan leképezhetők a nagyobb címtéren belüli blokkokra. A különböző méretű memóriablokkokat bankkiválasztó regiszterek vagy hasonló mechanizmusok segítségével csatlakoztatták és bontották le. Általában néhány blokk mindig elérhető volt. Ügyelni kellett arra, hogy ne sértse meg a szubrutinhívások helyességét , a megszakítások kezelését, a hívásverem integritását és hasonlókat. Míg a letiltott memóriablokk tartalma elérhetetlenné vált a processzor számára, más hardverek, például videovezérlő, DMA vezérlő, I/O eszközök használhatták . A CP/M utolsó , 1982-ben kiadott verziója támogatta a bankváltást, hogy több mint 64 KB-os memóriát használjon, amely a 8080-as és Z80-as processzorokat képes kezelni [6] .
A bankváltás lehetővé tette további memória és funkcionalitás hozzáadását a számítógépes kialakításhoz anélkül, hogy szélesebb címbusszal rendelkező processzorra kellett volna áttérni, ami a kapcsolódó költségekkel és inkompatibilitási problémákkal járt. Például a Commodore 64 számítógép bankváltást használt a teljes 64 KB RAM használatához, és továbbra is használja a ROM és a memória I/O regiszter leképezését . Az Atari 130XE lehetővé tette a 6502-es processzor és az ANTIC videóvezérlő számára, hogy külön-külön RAM-bankokhoz férhessenek hozzá, így a főprocesszor grafikus objektumokat készíthetett a memóriabankban, majd kikapcsolta, a videovezérlő pedig továbbra is használta ezeket az objektumokat, bár a memória bank már nem volt látható a főprocesszor számára.
A Sojourner rover 80C85 -ös processzort használ külső bankkapcsoló áramkörrel, amely lehetővé teszi több mint 512 KB memória megcímzését 16 KB-os oldalakon keresztül [7] . Egy másik prototípus rover egy 80C51 mikrokontrollert használ külső bankkapcsoló áramkörrel, hogy hozzáférjen 256 KB statikus RAM-hoz [8] .
1985-ben a Lotus Software és az Intel bemutatta az Expanded Memory Specification ( EMS ) 3.0-s verzióját az IBM PC-kompatibilis , MS-DOS rendszert futtató számítógépeken való használatra . A 3.2-es verzió 1986-ban és a 4.0-s verzió 1987-es kiadásával a Microsoft csatlakozott ehhez a csoporthoz , és a specifikáció Lotus-Intel-Microsoft EMS vagy LIM EMS néven vált ismertté [5] [9] [10] . Az Extended Memory egy ISA busz memóriakártya , amely bankváltást használ, és több mint 640 KB RAM-ot tesz lehetővé az eredeti IBM PC architektúra által megengedett. A kiterjesztett memória a " magas memóriaterületen " [11] található 64 KB-os címtérben található "ablakon" keresztül érhető el . Ez a 64 KB négy 16 KB-os „oldalra” van osztva, amelyek egymástól függetlenül válthatók. Számos , a 90-es évek eleje előtt kiadott alkalmazásprogram és számítógépes játék bővített memóriát használt. Bár az EMS mára elavult technológia, a Microsoft Windows operációs rendszer 32 bites verziói továbbra is támogatják .
Később szabványosították a kiegészítő memória specifikációját ( English eXtended Memory Specification, XMS ), amely jelenleg szintén elavult. Az XMS lehetővé teszi a valós módú MS-DOS alkalmazások számára, hogy a címtér első megabájtján túl is hozzáférjenek a memóriához. A kiegészítő memória blokkjai a fő memóriába és vissza másolhatók, és a felső memóriaterületen is megjeleníthetők, szimulálva a bankváltást (a „bankok” ebben az esetben tetszőleges méretűek lehetnek). Az EMS memóriát használó alkalmazásokkal való kompatibilitás biztosítása érdekében a 4.01-es verziótól kezdődően az MS-DOS bevezette az EMM386 illesztőprogramot, amely XMS memóriát használ az EMS memóriabank váltási technikájának szimulálására. Az XMS támogatás megmarad a Microsoft Windows operációs rendszer jelenlegi 32 bites verzióiban .
A bankváltást egyes játékkonzolokon is alkalmazták [12] . Például az Atari 2600 csak 4 KB ROM megszólítását tette lehetővé, így a későbbi 2600-as játékkazetták saját bankváltási sémákat tartalmaztak, hogy több ROM-ot lehessen használni, és így bonyolultabbak is elférjenek (több kód árán). és játékadatok, például grafikák és szintek) játékok [13] . A Nintendo Entertainment System egy módosított 6502-es processzort tartalmazott , de a kazettái néha egy megabites vagy több ROM-ot tartalmaztak, amely a Multi-Memory Controller nevű bankkapcsoló áramkörön keresztül címezhető. A Game Boy kazetták egy MBC-nek (Memory Bank Controller) nevezett chipet használtak, amely nemcsak a ROM bankváltást, hanem a belső SRAM bankváltást is végrehajtotta , és még külső eszközökhöz is hozzáfért, például infravörös portokhoz vagy vibrációs motorokhoz. A bankváltást a későbbi játékrendszerekben is alkalmazták.
Egyes típusú videoadapterek hasonló kettős pufferelési technikát alkalmazhatnak a videolejátszás javítása érdekében . Ebben az esetben, amíg a processzor frissíti a videomemória egyik területének tartalmát, a képalkotó áramkör beolvassa és megjeleníti a második terület tartalmát. Amikor a processzor befejezi a frissítést, jelet küld a videoadapter áramkörének az aktív bankok váltására, hogy a képváltás pillanatát ne kísérje műtermékek vagy torzulások. Ebben az esetben a processzor hozzáférhet a teljes videomemóriához, de a videoadapter áramköre bankváltást használ a videomemória különböző területeinek eléréséhez. Ha két vagy több videomemóriabank kissé eltérő képeket tartalmaz, a köztük lévő gyors váltás (lapozás) lehetővé teszi olyan animációk vagy más vizuális effektusok létrehozását, amelyeket a processzor teljesítménye nem tud közvetlenül végrehajtani.
A bankváltást sok 16 bites rendszerben felváltotta a memóriaszegmentáció , amely viszont átadta helyét a lapozó memóriavezérlő egységeknek . A beágyazott rendszerekben azonban a bankváltás továbbra is népszerű egyszerűsége, alacsony költsége és a területen gyakran nagyobb relevanciája miatt, mint az általános célú számítógépeknél.