Переключение банков — это метод, используемый в компьютерном проектировании для увеличения объема используемой памяти сверх объема, непосредственно адресуемого инструкциями процессора [1] . Его можно использовать для настройки системы по-разному в разное время; например, ПЗУ, необходимое для запуска системы с дискеты, можно отключить, когда оно больше не нужно. В видеоигровых системах переключение банков позволило разрабатывать более крупные игры для игры на существующих консолях.
Переключение банков возникло в миникомпьютерных системах. [2] Многие современные микроконтроллеры и микропроцессоры используют переключение банков для управления оперативной памятью , энергонезависимой памятью, устройствами ввода-вывода и регистрами управления системой в небольших встроенных системах . Этот метод был распространен в 8-битных микрокомпьютерных системах. Переключение банков также может использоваться для обхода ограничений ширины адресной шины, где некоторые аппаратные ограничения не позволяют напрямую добавлять больше адресных линий, и для обхода ограничений в ISA , где генерируемые адреса уже ширины адресной шины. Некоторые микропроцессоры, ориентированные на управление, используют метод переключения банков для доступа к внутренним регистрам ввода-вывода и управления, что ограничивает количество битов адреса регистра, которые должны использоваться в каждой инструкции.
В отличие от управления памятью с помощью страничного обмена , данные не обмениваются с запоминающим устройством большой емкости, таким как дисковое хранилище . Данные остаются в состоянии покоя в области памяти, которая в данный момент недоступна процессору (хотя она может быть доступна видеодисплею, контроллеру DMA или другим подсистемам компьютера) без использования специальных префиксных инструкций.
Переключение банков можно рассматривать как способ расширения адресного пространства инструкций процессора с помощью некоторого регистра. Примеры:
Часто одна база данных охватывает несколько банков, и возникает необходимость перемещать записи между банками (как при сортировке). Если одновременно доступен только один банк, необходимо перемещать каждый байт дважды: сначала в общую область памяти, выполнять переключение банка на целевой банк, а затем фактически перемещать байт в целевой банк. Если архитектура компьютера имеет DMA- движок или второй ЦП, а его ограничения доступа к банку различаются, следует использовать ту подсистему, которая может передавать данные напрямую между банками.
В отличие от схемы виртуальной памяти , переключение банков должно явно управляться запущенной программой или операционной системой; аппаратное обеспечение процессора не может автоматически определить, что требуются данные, которые в данный момент не отображены в активный банк. Прикладная программа должна отслеживать, какой банк памяти содержит требуемый фрагмент данных, а затем вызывать процедуру переключения банков, чтобы сделать этот банк активным. [6] Однако переключение банков может получить доступ к данным гораздо быстрее, чем, например, извлечение данных из дискового хранилища.
Процессоры с 16-битной адресацией ( 8080 , Z80 , 6502 , 6809 и т. д.), обычно используемые в ранних игровых консолях и домашних компьютерах, могут напрямую адресовать только 64 КБ . Системы с большим объемом памяти должны были разделить адресное пространство на несколько блоков, которые могли динамически отображаться в части большего адресного пространства. Для достижения этого большего адресного пространства использовалось переключение банков путем организации памяти в отдельные банки объемом до 64 КБ каждый. [8] Блоки различных размеров включались и выключались с помощью регистров выбора банка или аналогичных механизмов. Cromemco была первым производителем микрокомпьютеров, использовавшим переключение банков, поддерживая в своих системах 8 банков по 64 КБ. [9]
При использовании переключения банков требовалась определенная осторожность, чтобы не повредить обработку вызовов подпрограмм , прерываний , машинного стека и т. д. Хотя содержимое памяти, временно отключенной от ЦП, было недоступно для процессора, оно могло использоваться другим оборудованием, таким как видеодисплей, DMA , устройства ввода-вывода и т. д. CP/M-80 3.0, выпущенный в 1983 году, и TRS-80 на базе Z80 , Model 4 и Model II, поддерживали переключение банков, чтобы разрешить использование более 64 КБ памяти, к которой мог обратиться процессор 8080 или Z80. [10]
Переключение банков позволяло добавлять дополнительную память и функции в конструкцию компьютера без расходов и несовместимости переключения на процессор с более широкой адресной шиной . Например, C64 использовал переключение банков, чтобы обеспечить полные 64 КБ ОЗУ и при этом обеспечить ПЗУ и отображаемый в память ввод-вывод . Atari 130XE мог позволить своим двум процессорам (6502 и ANTIC ) получать доступ к отдельным банкам ОЗУ, что позволяло программистам создавать большие игровые поля и другие графические объекты, не используя память, видимую для ЦП.
Микроконтроллеры (микропроцессоры со значительным количеством оборудования ввода/вывода, интегрированного на кристалле) могут использовать переключение банков, например, для доступа к нескольким регистрам конфигурации или памяти чтения/записи на кристалле. Примером является микроконтроллер PIC . Это позволяет использовать короткие слова инструкций для экономии места во время выполнения обычной программы за счет дополнительных инструкций, необходимых для доступа к относительно редко используемым регистрам, например, тем, которые используются для конфигурации системы при запуске.
В 1985 году компании Lotus и Intel представили Expanded Memory Specification (EMS) 3.0 для использования в IBM PC-совместимых компьютерах под управлением MS-DOS . Microsoft присоединилась для версий 3.2 в 1986 году и 4.0 в 1987 году, и спецификация стала известна как Lotus-Intel-Microsoft EMS или LIM EMS. [6] [11] [12] Это форма техники переключения банков, которая позволяет использовать больше, чем 640 КБ ОЗУ, определенных оригинальной архитектурой IBM PC, позволяя ей появляться по частям в 64 КБ «окне», расположенном в верхней области памяти . [13] 64 КБ делятся на четыре 16 КБ «страницы», каждая из которых может переключаться независимо. Некоторые компьютерные игры использовали это, и хотя EMS устарела, эта функция в настоящее время эмулируется более поздними операционными системами Microsoft Windows для обеспечения обратной совместимости с этими программами.
Более поздняя спецификация расширенной памяти (XMS), также теперь устаревшая, является стандартом для, в принципе, имитации переключения банков для памяти свыше 1 МБ (называемой « расширенной памятью »), которая не адресуется напрямую в реальном режиме процессоров x86 , в которых работает MS-DOS. XMS позволяет копировать расширенную память в любое место обычной памяти, поэтому границы «банков» не фиксированы, но во всех остальных отношениях она работает как переключение банков EMS , с точки зрения программы, которая ее использует. Более поздние версии MS-DOS (начиная примерно с версии 5.0) включали драйвер EMM386, который имитирует память EMS с помощью XMS, позволяя программам использовать расширенную память, даже если они были написаны для EMS. Microsoft Windows также эмулирует XMS для тех программ, которым это требуется.
Переключение банков также использовалось в некоторых игровых консолях . [14] Atari 2600 , например, могла адресовать только 4 КБ ПЗУ, поэтому более поздние игровые картриджи 2600 содержали собственное аппаратное обеспечение переключения банков, чтобы разрешить использование большего объема ПЗУ и, таким образом, обеспечить более сложные игры (через больше программного кода и, что не менее важно, большие объемы игровых данных, таких как графика и различные игровые этапы). [15] Nintendo Entertainment System содержала модифицированную 6502 , но ее картриджи иногда содержали мегабит или более ПЗУ, адресуемого через переключение банков, называемое контроллером Multi-Memory . Картриджи Game Boy использовали чип под названием MBC (контроллер банка памяти), который предлагал не только переключение банков ПЗУ, но и переключение банков SRAM картриджа , и даже доступ к таким периферийным устройствам, как инфракрасные каналы связи или вибрационные двигатели. Переключение банков все еще использовалось в более поздних игровых системах. Несколько картриджей Sega Mega Drive , такие как Super Street Fighter II, имели размер более 4 МБ и требовали использования этой техники (4 МБ — максимальный размер адреса). Портативная консоль GP2X от Gamepark Holdings использует переключение банков для управления начальным адресом (или смещением памяти) для второго процессора.
В некоторых типах компьютерных видеодисплеев может использоваться связанная техника двойной буферизации для улучшения производительности видео. В этом случае, пока процессор обновляет содержимое одного набора ячеек физической памяти, аппаратное обеспечение генерации видео обращается к содержимому второго набора и отображает его. Когда процессор завершает обновление, он может подать сигнал оборудованию видеодисплея о необходимости поменять активные банки, чтобы видимый на экране переход был свободен от артефактов или искажений. В этом случае процессор может иметь доступ ко всей памяти одновременно, но оборудование видеодисплея переключается между банками между частями видеопамяти. Если два (или более) банка видеопамяти содержат немного отличающиеся изображения, быстрое циклическое переключение (перелистывание страниц) между ними может создавать анимацию или другие визуальные эффекты, которые процессор в противном случае мог бы выполнить слишком медленно.
Банк коммутации позже был вытеснен сегментацией во многих 16-битных системах , что в свою очередь уступило место блокам управления страничной памятью . Однако во встроенных системах банк коммутации по-прежнему часто используется из-за его простоты, низкой стоимости и часто лучшей адаптации к этим контекстам, чем к вычислениям общего назначения.
Восьмипозиционный DIP-переключатель на таких картах используется для выбора одного (или нескольких) из восьми банков памяти.
При выборе банка памяти пространство памяти распределяется по нескольким отдельным банкам объемом до 64 КБ каждый.
Cromemco была первым производителем микрокомпьютеров, усовершенствовавшим и использовавшим переключение банков.