Bankväxling är ett sätt att öka mängden minne som används jämfört med mängden som processorn kan adressera direkt [1] [2] . Den här metoden kan användas för att ändra systemets konfiguration: till exempel kan ROM -minnet som krävs för att starta upp systemet från en diskett inaktiveras när det inte längre behövs. I videospelskonsoler tillåter bankbyte att större spel kan utvecklas för användning på den nuvarande generationen av konsoler.
Bankbyte dök först upp i minidatorer [3] . Många moderna mikrokontroller och mikroprocessorer använder bankväxling för att styra RAM , ROM, I/O-enheter och systemkontrollregister i små inbyggda system . Denna metod användes flitigt i 8-bitars mikrodatorer . Bankväxling kan också användas om adressbussbredden är artificiellt begränsad och det finns hårdvarubegränsningar som inte tillåter ökning av antalet adresslinjer. Vissa mikrokontroller stöder bankväxling i hårdvara, vilket minskar antalet adressbitar som används i instruktioner.
Till skillnad från " personsöknings "-mekanismen söks inte data ut till en lagringsenhet (hårddisk). Data förblir oförändrade i ett minnesområde som för närvarande är otillgängligt för processorn (även om detta område kan vara tillgängligt för videostyrenheten , DMA-styrenheten eller andra datorundersystem).
Bankväxling kan ses som ett sätt att utöka processorns adressbuss med ett externt register . Till exempel kan en processor med en 16-bitars extern adressbuss adressera 2 16 = 65536 minnesplatser. Om en extern trigger läggs till i systemet kan den användas för att styra vilken av de två uppsättningarna minnesblock med 65536 celler vardera som kommer att nås. Processorn kan byta uppsättning block som används genom att ställa in eller rensa flip-flop.
En trigger kan återställas eller ställas in på flera sätt: genom att komma åt en specifik minnesadress, eller, på processorer med dedikerade I/O-instruktioner , genom att komma åt en specifik I/O-port. Flera vippor som styr bankväxling kan kombineras till ett register, varvid varje bit i registret kan ungefär fördubbla antalet adresserbara celler.
Eftersom bankväljarutlösaren (registret) inte är direkt relaterad till processorprogramräknaren, ändrar den inte automatiskt sitt tillstånd när programräknaren svämmar över . Ett spill kan inte detekteras av en extern trigger, eftersom programräknaren är ett internt processorregister. Program kan inte använda det extra minnet utan ändringar. Eftersom längden på processorns interna register inte ändras kan processorn inte direkt adressera minnescellerna i alla banker på grund av till exempel ett internt registerökning [4] . Istället måste processorn explicit utföra en bankväxlingsoperation för att komma åt LOB:er i minnet. Det finns andra restriktioner också. Vanligtvis kommer ett bankomkopplat system att innehålla ett programminne som delas av alla banker. Oavsett vald bank kommer en del av adressutrymmet att mappas till samma minnesområde. Detta område kommer att innehålla koden som hanterar bankväxling och hanterar avbrott .
Till skillnad från virtuell minnesteknik måste bankväxling uttryckligen kontrolleras av det körande programmet eller operativsystemet. Processorns hårdvara kan inte automatiskt avgöra att data krävs som för närvarande inte är tillgänglig via den valda banken. Applikationsprogrammet måste hålla reda på vilken minnesbank som innehåller nödvändiga data och anropa bankväxlingsrutinen för att göra den banken aktiv [5] . Samtidigt kan du genom att byta bank komma åt data snabbare än att till exempel ladda sidor från disk.
Processorer med en 16-bitars adressbuss ( Z80 , 6502 , 6809 och andra), som ofta användes i de första spelkonsolerna och hemdatorerna, kunde bara adressera 64 KB direkt . På system med mer minne var adressutrymmet tvunget att delas upp i block som dynamiskt kunde mappas till block inom det större adressutrymmet. Minnesblock av olika storlekar kopplades in och ur med hjälp av bankvalsregister eller liknande mekanismer. Vanligtvis fanns alltid några block tillgängliga. Det krävdes försiktighet för att inte bryta mot korrektheten av subrutinsamtal , avbrottshantering, samtalsstackintegritet och liknande. Även om innehållet i det inaktiverade minnesblocket blev otillgängligt för processorn, kunde det användas av annan hårdvara, såsom en videokontroller, DMA-kontroller, I/O-enheter . Den senaste versionen av CP/M , som släpptes 1982, stödde bankväxling för att använda mer än 64KB minne som kunde adressera 8080- och Z80-processorerna [6] .
Bankväxling gjorde att ytterligare minne och funktionalitet kunde läggas till en datordesign utan att behöva flytta till en processor med en bredare adressbuss , med tillhörande kostnader och inkompatibilitetsproblem. Till exempel använde Commodore 64 -datorn bankväxling för att använda hela 64 KB RAM och fortfarande använda ROM och minnes I/O-registermappning . Atari 130XE tillät 6502-processorn och ANTIC-videokontrollern att komma åt separata RAM-banker, varvid huvudprocessorn kunde förbereda grafikobjekt i minnesbanken och sedan stänga av den, och videokontrollern fortsatte att använda dessa objekt, även om minnet Bank var inte längre synlig för huvudprocessorn.
Sojourner-rovern använder en 80C85- processor med en extern bankväxlingskrets som gör att mer än 512 KB minne kan adresseras genom 16 KB-sidor [7] . En annan prototyp rover använder en 80C51 mikrokontroller med en extern bankväxlingskrets för att komma åt 256 KB statiskt RAM [8] .
1985 introducerade Lotus Software och Intel den utökade minnesspecifikationen ( EMS ) version 3.0 för användning i IBM PC-kompatibla datorer som kör MS-DOS . När versionerna 3.2 släpptes 1986 och 4.0 1987 gick Microsoft med i denna grupp och specifikationen blev känd som Lotus-Intel-Microsoft EMS eller LIM EMS [5] [9] [10] . Extended Memory är ett ISA -bussminneskort som använder bankväxling och tillåter mer än 640 KB RAM som tillåts av den ursprungliga IBM PC-arkitekturen. Utökat minne nås genom ett "fönster" i ett 64 KB adressutrymme beläget i " högminnesområdet " [11] . Dessa 64 KB är uppdelade i fyra 16 KB "sidor" som kan bytas oberoende av varandra. Många applikationsprogram och datorspel som släpptes före början av 90-talet använde utökat minne. Även om EMS nu är en föråldrad teknik, stöds den fortfarande i 32-bitarsversioner av Microsoft Windows operativsystem .
Senare standardiserades specifikationen av ytterligare minne ( engelska eXtended Memory Specification, XMS ) vilket också är föråldrat för tillfället. XMS tillåter real-mode MS-DOS-applikationer att komma åt minne utöver den första megabyten av adressutrymmet. Block med extra minne kan kopieras till huvudminnet och tillbaka, och även visas i det övre minnesområdet, vilket simulerar bankväxling ("banker" i detta fall kan vara av godtycklig storlek). För att säkerställa kompatibilitet med applikationer som använder EMS-minne, från och med version 4.01, introducerade MS-DOS drivrutinen EMM386, som använder XMS-minne för att simulera EMS-minnesbanksväxlingstekniken. XMS-stöd behålls i nuvarande 32-bitarsversioner av Microsoft Windows operativsystem .
Bankbyte har också använts i vissa spelkonsoler [12] . Till exempel tillät Atari 2600 bara att adressera 4 KB ROM, så senare spelkassetter från 2600 inkluderade sina egna bankväxlingsscheman för att tillåta mer ROM att användas och därmed passa mer komplexa (till bekostnad av mer kod och speldata såsom grafik och nivåer) spel [13] . Nintendo Entertainment System innehöll en modifierad 6502-processor , men dess kassetter innehöll ibland en megabit eller mer av ROM som kan adresseras via en bankväxlingskrets som kallas Multi-Memory Controller. Game Boy - kassetter använde ett chip som kallas en MBC (Memory Bank Controller) som inte bara utförde ROM-bankväxling utan även intern SRAM -bankväxling och till och med tillgång till externa enheter som infraröda portar eller vibrationsmotorer. Bankbyte användes även i senare spelsystem.
Vissa typer av videoadaptrar kan använda en liknande dubbelbuffringsteknik för att förbättra videouppspelningen . I det här fallet, medan processorn uppdaterar innehållet i ett område av videominnet, läser och visar bildkretsen innehållet i det andra området. När processorn slutför uppdateringen skickar den en signal till videoadapterkretsen för att byta aktiva banker, så att ögonblicket för att ändra bilden inte åtföljs av artefakter eller förvrängningar. I detta fall kan processorn ha tillgång till hela videominnet, men videoadapterkretsen använder bankväxling för att komma åt olika områden av videominnet. Om två eller flera videominnesbanker innehåller något olika bilder kan du snabbt växla (växla) mellan dem skapa animationer eller andra visuella effekter som processorprestanda kanske inte kan utföra direkt.
Bankväxling har ersatts i många 16-bitarssystem genom minnessegmentering , vilket i sin tur har gett vika för personsökningsminneskontrollenheter . Men i inbyggda system är bankbyte fortfarande populärt på grund av dess enkelhet, låga kostnad och ofta större relevans inom området än i datorer för allmänna ändamål.