4.2. "Затенение" памяти, выделенная память

"Shadow Memory" - это так называемая "теневая" память. В адресах памяти от 640 КБ до 1 МБ (A0000h - FFFFFh) находятся "окна", через которые "видно" содержимое различных системных ПЗУ. Например, адреса F0000h - FFFFFh занимает системное ПЗУ, содержащее BIOS системы, окно C0000h - C7FFFh - ПЗУ видеоадаптера (видео-BIOS) и т.п. При включении режима "Shadow" для каких-либо адресных диапазонов, соответствующих системным ПЗУ либо картам расширения, содержимое их ПЗУ копируется в участки основной памяти, которые затем подключаются к этим же адресам вместо ПЗУ, "затеняя" их.
Дает ли это какие-нибудь преимущества? Повышается ли при этом производительность системы? Включение "затенения" дает в первую очередь значительное ускорение работы с данными ПЗУ за счет более высокого быстродействия микросхем ОЗУ (в сравнении со временем доступа к ROM BIOS в 150-200 нс). Кроме того, при обращении к микросхемам BIOS непосредственно используется 8-разрядный доступ (8-битная шина "X-bus"), что включение "затенения" ПЗУ делает еще более эффективным. Это означает, что при обращении к постоянной памяти за один такт можно считать только один байт в отличие от 32-разрядного, как минимум, доступа к оперативной памяти (16-битный доступ ушел в историю с уходом 286-х систем). Кроме этого, появляется возможность модифицировать видимое содержимое ПЗУ: все современные системные BIOS используют это для самонастройки, а в область видео-BIOS обычно загружаются экранные шрифты и т.п.
Что это за теневая память физически? Этот вопрос связан с распределением памяти вообще. В первом мегабайте памяти используются по прямому назначению, т.е. как основная память, 640 КБ, а остальные 384 КБ оказываются в адресном пространстве, зарезервированном для ПЗУ и внешних устройств. В современных платах вся память представляет собой непрерывный массив, поэтому разрывать адресное пространство модулей памяти на две части нельзя и поэтому часть системной области приходится аппаратно исключать, теряя при этом 384 КБ.


Как скопировать в эту память содержимое ПЗУ? Для этого применяют несколько способов:

1) Организация "Shadow Memory". Доступ к ней регулирует чипсет. Как правило, "Shadow Memory" находится в адресном пространстве в том же месте, где и исходное ПЗУ. Поскольку две области памяти в одном месте физически находиться не могут, для управления этой памятью в чипсете есть специальная схема, которая может подключить в этот фрагмент адресного пространства либо исходное ПЗУ, либо ОЗУ.
Несколько слов о защите от записи. Обычно "Shadow Memory" в нормальном состоянии находится в режиме "Read Only" (только для чтения). Это породило проблемы, например, при написании русификаторов, так как приходится открывать "затененные" участки той же видеопамяти. Различные версии BIOS позволяют решать эту проблему, имея опции с возможностью указания, следует ли оставлять требуемый диапазон "Read Write" или "Read Only".
Но не только BIOS способен управлять Shadow-функциями чипсета. Такое управ­ление может осуществлять программа, умеющая корректно обращаться к регистрам чипсета на низком уровне. Начиная с 386-х в защищенном режиме работы процессора имеется страничная организация памяти, обеспечивающая формирование физического (реального) ад­реса из виртуального адреса программы. Именно эта возможность и обеспечива­ет в большинстве распространенных драйверов памяти (менеджеров) не только выполнение функций затенения, но и получение памяти EMS при наличии расширенной памяти в компьютере. Программно возможности "Shadow"-функций менеджеров памяти значительно более гибкие, чем у чипсета, управляемого BIOS. В частности, управление размерами памяти, выделяемой для "Shadow Memory", может производиться достаточно малыми по размеру страницами - 4 КБ, что позволяет эффективнее использовать адресное пространство первого мегабайта. В MS-DOS возможность управления "Shadow"-памятью имеет драйвер памяти HIMEM.SYS (ключ /SHADOWRAM:ON|OFF).
Затенение полезно, главным образом, в 16-разрядных ОС. 32-разрядные системы не используют 16-разрядный код из ROM. Вместо него они загружают 32-разрядные драйверы в ОЗУ, заменяя ими 16-разрядный код BIOS, который, таким образом, используется только в процессе загрузки системы.
2) ;Организация блоков верхней памяти UMB (Upper memory blocks), по сути аналогия предыдущему варианту.
3) ;Перемещение (relocation). Это перенос неиспользуемой памяти из системной области (640 КБ - 1 МБ) в область расширенной (Extended) памяти. Чаще всего перемещаться может весь фрагмент сразу, то есть все 384 КБ. Это связано со сложностью схемы управления адресными линиями. В этом случае освободить остаток первого мегабайта можно, только выключив все без исключения установки "Shadow". В первых IBM PC устанавливалось 640 КБ основной памяти и отдельно расширенная память, поэтому со старшими 384 КБ проблем не возникало. Позднее, а это также было давно, некоторые чипсеты (Neat, OPTi495, SiS471, др.) имели возможность переносить старшие 384 КБ за пределы пеpвого мегабайта, пpисоединяя их к pасширенной памяти. Одни чипсеты могли переносить свободные от "затенения" участки, другие - только все 384 КБ целиком.
Последующая серия опций объединена одной темой ("Теневое ПЗУ адаптеpа ХХХХ,16K") и представляет собой, в основном, устаревшие аппаратные решения.

Adaptor ROM Shadow C800,16K


- опция для маскиpования ПЗУ некотоpых специальных каpт - сетевых, различных контpоллеpов и т.п. По умолчанию устанавливается "Disabled". Установка в "Enabled" допустима только тогда, когда в систему инсталлирована каpта расширения с ПЗУ, занимающим эти адpеса. В свое время большинство дисплейных видеоадаптеров, таких как MDA, Hercules, использовали ПЗУ с адpесом C800. Поскольку эти каpты были низкоскоростными, затенение этого адpеса улучшало общую пpоизводительность системы.
Дополнительная и интересная информация! Некотоpые версии BIOS допускали включение теневого ОЗУ со снятой защитой от записи. Пpи помощи дpайвеpа возможно было использование "теневой памяти" в качестве области UMB. Это давало некотоpое пpеимущество в скоpости в сpавнении с UMB-областью, обеспечиваемой пpи помощи драйвера EMM386.
Возможна вполне современная ситуация, когда затенению может быть подвергнут загрузочный BIOS сетевого адаптера. В этом нет никакой необходимости, т.к. загрузка удаленной системы вряд ли есть непрерывный процесс.

Adaptor ROM Shadow CC00,16K


- эта область предназначалась для некоторых (естественно, старых) адаптеpов жестких дисков.

Adaptor ROM Shadow D000,16K


- адресная область для использования сетевыми картами.

Adaptor ROM Shadow D400,16K


- некоторые специальные контроллеры (это было давно) для четырех floppy-дисководов имели отображаемый BIOS ROM в диапазоне адресов D400...D7FF.

Adaptor ROM Shadow D800,16K
Adaptor ROM Shadow DC00,16K
Adaptor ROM Shadow E000,16K


- возможная область для размещения EMS-страницы.

Adaptor ROM Shadow E400,16K
Adaptor ROM Shadow E800,16K
Adaptor ROM Shadow EC00,16K

- эта область могла быть использована системой после копирования SCSI-контроллерами своего BIOS.
Некоторые SCSI-контроллеры не использовали адресов ввода/вывода. Их адресный BIOS-диапазон содержал перезаписываемые адреса, которые в действительности являлись I/O-портами. Это означало, что эти адреса не должны были затеняться и даже кэшироваться.
Совершенно аналогично "работали" следующие опции:
C8000-CBFFF Shadow
CC000-CFFFF Shadow
D0000-D3FFF Shadow
D4000-D7FFF Shadow
D8000-DBFFF Shadow
DC000-DFFFF Shadow
Совершенно те же опции предложил "Phoenix BIOS" в меню под названием "Shadow Memory Regions". Хотя то же меню "Phoenix BIOS" в другом варианте предложило "укрупненные" области памяти "C8000-CFFFF" (и т.д.) со значениями "Disabled" и "Shadow".
И совершенно ясно, что возможны также другие вариации по "затенению". Например, опция "E8000 - EFFFF Shadow" может быть использована для поддержки интегрированного SCSI-контроллера.
И еще одно важное замечание, не утратившее актуальности и по сей день. Речь идет о специализированных ISA-адаптерах с микропроцессорами, память которых организована как двухпортовая. Если память такого микропроцессора по одному из портов со стороны компьютера адресуется как страница в области указанных адресов, то "затенение" для этой области должно быть запрещено ("Disabled").
Обобщая сказанное, необходимо отметить, что затенение разделяемой ("shared") памяти недопустимо. Разделяемая память служит также в качестве буферов сетевых контроллеров, т.п.
Еще пример затенения адресных областей:
C000,16K Shadow
C400,16K Shadow
C800,16K Shadow
CC00,16K Shadow
D000,16K Shadow
D400,16K Shadow
D800,16K Shadow
DC00,16K Shadow
Ничего нового, разве что первые две опции меню неявно предназначены для затенения видео-BIOS (см. подробно ниже). На этом остановимся, ибо есть еще вариации по затенению областей памяти в виде отдельных меню, но пользователю уже несложно будет с ними разобраться.

Base Memory Address


- данной опцией устанавливается начальный адрес адресного диапазона, выделяемого под потребности некоторой PCI-карты. Понятно, что возможности адресации обеспечиваются 32-разрядной шиной.
Опция может называться "Memory Start Address".

BIOS Devnode for Shadow RAM


- эта опция используется (включается при "Enabled") для некоторых карт расширения, чья ROM-память не требует коррекции того региона основной памяти, который эта карта занимает. "Disabled" позволяет разблокировать фиксированный начальный адрес области памяти для устройства и изменять его динамически.

CD Hole


- столь необычная опция "AMI BIOS" предназначена для управления адресной областью в диапазоне DC000h - DFFFFh. Если установлено значение "Disabled", то любое обращение, запрос к данному пространству направляется основному SCSI-контроллеру (хотя это может быть и сетевое устройство). Если же выбрано "Enabled", доступ к этому региону памяти контролируется одним из PAM (Programmable Attribute Map) регистров, т.е. стандартным способом.
Стоит остановиться на этой теме подробнее.


В состав "северного" (Host-to-PCI Bridge) моста чипсета, среди множества других, входят и семь программируемых PAM-регистров. Через установку различных аттрибутов они позволяют управлять тринадцатью адресными сегментами различного размера в диапазоне от 640 КБ до 1 МБ адресного пространства. С другой стороны, кэширование этими областями осуществляется через MTRR-регистры центрального процессора (о них будет сказано ниже).
Каждый PAM-регистр (см. таблицу) контролирует два региона, обычно по 16 КБ каждый. Каждый из регионов "обслуживается" четырьмя битами, два из которых зарезервированы, а два остальных - это "Read Enable" и "Write Enable". В зависимости от состояния этих бит ("0" или "1") осуществляется либо доступ к основной памяти, либо запросы перенаправляются на PCI-шину. Поэтому, если установлены два "0", доступ к выбранному диапазону памяти невозможен.
В процессе начальной загрузки и выполнения инструкций BIOS при копировании некоторого BIOS в выбранную "затеняемую" область в соответствующем регистре по соответствующему аттрибуту "Write Enable" устанавливается "1". После окончания всех процедур, связанных с затенением, для данного диапазона (регистра) устанавливается режим "только для чтения" (read only), что соответствует аттрибутам "Read Enable", равным "1", и "Write Enable", равным "0". При этом все циклы записи в данную область перенаправляются непосредственно шине расширения.
Понятно, что если речь идет о выделенной RAM-памяти, то оба аттрибута будут равными "1".

PAM-регистр

Сегмент памяти

Назначение

Примечание

PAM0[3:0]

Зарезервировано

PAM0[7:4]

0F0000h - 0FFFFFh

BIOS Area

Область системного BIOS. 64K-байтный сегмент, который может кэшироваться, читаться и перезаписываться. При блокировке этой области данная адресная зона "выпадает" из карты памяти

PAM1[3:0]

0C0000h - 0C3FFFh

ISA Add-on BIOS*

Expansion Area (C0000h-DFFFFh), или область расширения, - это 128К-байтная область, разделенная на восемь 16K-байтных сегментов. Каждый из сегментов может находиться в одном из четырех состояний: только для чтения, только для записи, чтения/записи или заблокированном. Каждый из сегменов может кэшироваться. При блокировке этой области данная адресная зона "выпадает" из карты памяти

PAM1[7:4]

0C4000h - 0C7FFFh

ISA Add-on BIOS*

PAM2[3:0]

0C8000h - 0CBFFFh

ISA Add-on BIOS*

PAM2[7:4]

0CC000h - 0CFFFFh

ISA Add-on BIOS*

PAM3[3:0]

0D0000h - 0D3FFFh

ISA Add-on BIOS

PAM3[7:4]

0D4000h - 0D7FFFh

ISA Add-on BIOS

PAM4[3:0]

0D8000h - 0DBFFFh

ISA Add-on BIOS

PAM4[7:4]

0DC000h - 0DFFFFh

ISA Add-on BIOS

PAM5[3:0]

0E0000h - 0E3FFFh

BIOS Extension

Расширенная область системного BIOS (E0000h-EFFFFh) разделена на четыре 16К-байтных сегмента. Каждый сегмент независимо от других может кэшироваться, считываться и быть перезаписываемым. При блокировке этой области данная адресная зона "выпадает" из карты памяти

PAM5[7:4]

0E4000h - 0E7FFFh

BIOS Extension

PAM6[3:0]

0E8000h - 0EBFFFh

BIOS Extension

PAM6[7:4]

0EC000h - 0EFFFFh

BIOS Extension

Примечание.
* - Сегмент C0000h - CFFFFh может быть использован SMM-пространством, если используется SMRAM-регистр (об SMM см. ниже).

E0000 ROM belongs to ATBUS


- один из примеров "стареньких" опций по выделению фрагмента из "верхней" памяти для использования системными устройствами. В данном случае "Yes" позволяло зарезервировать такой фрагмент за AT-шиной. Обычно, E000-область зарезервирована за кодом системного BIOS, но некоторые системы не использовали его стандартным образом. Например, "OS/2" использовала этот диапазон для работы в защищенном режиме и "грузила" код Advanced BIOS в область E000h-EFFFh.

E8000 32K Accessible


- аналогичная опция, хотя и не такая "древняя", поскольку предназначалась для использования (и опция, и адресная область) PS/2-системами, 32-разрядными ОС, под "PnP"-область.

Extended ROM RAM Area


- наличие этой опции характерно для старых версий "AMI BIOS". Пользователю предоставлялся выбор, где хранить данные о жестком диске: в верхнем килобайте базовой системной памяти, начиная с 639-го килобайта, или в адресах нижней памяти в области DOS-памяти или системного BIOS (0:300). Необходимо было помнить, что вторая адресная область могла также использоваться некоторой периферией (звуковыми, сетевыми и т.п. картами расширения). В этом случае конфликтов можно было избежать, если система через BIOS могла использовать полноценные механизмы "затенения", которые впрочем могли и отсутствовать в очень старых системах. Вполне возможна была ситуация с изменением параметров жесткого диска в этой области памяти перед ее полным отображением, так как в ней содержался блок параметров фиксированного диска. В некоторых случаях могло потребоваться изучение документации на соответствующие платы расширения или контроллеры по использованию ими данной области памяти.
Опция могла (или может) называться "RAM Area" или "Hard Disk Type 47 - RAM Area". Последняя опция напоминает нам о процедуре пользовательской установки параметров жесткого диска.

ISA LFB Size


- опция "AMI-BIOS" для установки размера линейного буфера кадра (LFB - Linear Frame Buffer), во многом аналогичная или близкая по смыслу нижерасположенной "Memory Hole At 15M-16M". Кроме размещения ROM-адреса в пределах 15-16 МБ, опция позволяла (в таком виде она уже не встречается) установить размер линейного видеобуфера графических адаптеров в области основной памяти, доступной для ISA-шины (1, 2, 4 МБ). Это суть диапазоны 15-16, 14-16 и 12-16 МБ соответственно. Еще одним значением являлось "Disabled" с отказом от выделения под ISA-адаптер линейного буфера кадра. "Disabled" могло потребоваться при объеме памяти не более 8 МБ (в 96-м г. это было почти пределом) и при работе с MS-DOS. Такое же значение необходимо было установить при использовании ISA-карт с отсутствующим кадровым буфером. Запрещение опции не позволяло использовать "Plug and Play's Configuration Manager" или "ISA Configuration Utility". Если же какое-то из значений ("1 MB", "2MB" или "4MB") было выбрано, то следующая опция "ISA LFB Base Address" становилась доступной.
DOS-приложение могло использовать стандартно под видеопамять только 64 КБ основной памяти. В этом объеме не "поместится" и "хороший" графический файл. Совместно развивающиеся технологии памяти и работы с ней позволили создать механизм пейджинга, суть которого заключается в том, что можно отображать разные части видеопамяти на один и тот же видеосегмент (0a000h) поочередно. Но это переключение отнимает время у процессора, снижая эффективность метода. Идеальным вариантом стало использование линейного буфера кадра, который доступен только в защищенном режиме работы процессора, а значит за пределами первого мегабайта, и с использованием расширения VBE (VESA BIOS Extension) не ниже версии 2.0.
Для графических PCI-карт с использованием линейного буфера кадра стало возможным применение возможностей чипсета (PCI Burst Mode).
Опция может называться "ISA VGA Frame Buffer Size" или "ISA Linear Frame Buffer". Дополнительная информация может быть почерпнута из упомянутой и приведенной ниже опции.

x ISA LFB Base Address


- данная опция не имеет параметров и носит информационный характер. Показы­вает основной адрес LFB, если установлен размер в предыдущей функции. Адрес устанавливается автоматически.

ISA Mem Block Base
ISA Mem Block Size


- об этих опциях см. ниже.

ISA Shared Memory Size


- (размер разделяемой памяти ISA). Опция позволяет выделить блок в "верхней" (upper) памяти, который обычно "затеняется" и который не будет в данном случае использован для дублирования (shadowing) содержимого ПЗУ в основную память, для доступа к ней ISA-карты. Через установку опции в "Disabled" (по умолчанию) мы отключаем возможность установки такого блока в системной памяти. Данную опцию необходимо включать только при установке в систему ISA-карты, которая использует верхние адреса памяти. Это означает, что в системе используются не "Plug and Play" ISA-карты (т.н. "legacy card"), конфигурируемые "вручную". Указывая размер требуемого блока, пользователь и "включает" опцию. Размер блока выбирается в пределах от 16 до 96 кБ с шагом в 16 кБ.
Необходимо знать еще вот о чем! В системе могут быть использованы ISA-адаптеры, у которых память собственного микропроцессора является двухпортовой и организована так, что со стороны адаптера она имеет некоторые физические адреса, а по второму порту она адресуется со стороны IBM PC/AT как страница памяти компьютера, расположенная в области адресов (в зависимости от установки перемычек на плате), например: C800h, D000h, т.п. В этом случае задачи адресации решаются на уровне специального прикладного ПО и драйвера. Таких специальных плат расширения в свое время было разработано достаточно много для использования в системах реального времени под MS-DOS.
К вышесказанному еще несколько слов. Некоторые "настоящие" (legacy) платы ISA имеют встроенную память (ПЗУ), которая не видна без специального программного драйвера. Поскольку об этой памяти BIOS ничего не знает, BIOS может (по ошибке) приписать адреса этой памяти другим платам PCI или ISA. При использовании таких карт расширения требуется серьезное изучение документации.

x ISA Shared Memory Base Address


- (базовый адрес разделяемой памяти ISA). Опция доступна при включении предыдущей функции. При этом устанавливается начальный адрес "ISA Shared Memory". Опциально устанавливается C8000h, CC000h и т.д. Необходимо помнить, что при выборе начального адреса не должен быть использован E0000h-адрес. Если же в предыдущей опции выбран блок памяти размером в 64 кБ, то может быть использован в качестве начального адреса адрес D0000 или ниже.
В других версиях BIOS могут встретиться другие наименования такой функции, точнее такой пары, - "ISA Mem Block Base" и "ISA Mem Block Size". В качестве значений для первой могут быть указаны адреса C800, CC00, D000, D400, D800 и DC00, а также значение "No/ICU" (нет/ICU), оставляющее управление этим параметром на усмотрение BIOS или программы ICU (ISA Configuration Utility). А размер блока выбирается из ряда: 8K, 16K, 32K, 64K. Необходимо также добавить, что при выборе самого размера блока надо ориентироваться на "потребности" конкретной карты, а также на ...количество таких "вредных" ISA- карт.
И еще одна интересная пара функций. Только "начальной" является опция "Used Mem Base Addr". Она как бы "охватывает" более широкий спектр устройств. Предполагается, что к некоторой области верхней памяти пожелают иметь доступ не только ISA-устройства. Для выбора предлагается, как и выше, любой сегмент памяти между C800H и DC00H адресного пространства (6 возможных адресов), а также по умолчанию - "N/A" (как "Disabled"). При включении опции активируется поле "Used Mem Lenght" для установки размера блока: 8, 16, 32 или 64 кБ.
Теперь "AMI BIOS"!
"Reserved Memory Size" и
x "Reserved Memory Address".
Параметры основной опции: "Disabled", "16K", "32K", "64K". Параметры же второй: C000, C400, C800, CC00, D000, D400, D800 или DC00.

Memory Hole At 15M-16M


- (буквально - "дырка" в памяти в диапазоне 15-16 МБ). При включенном состоянии параметра система, для повышения производительности, будет копировать более медленную память устройства, например, подключенного к ISA-шине, в более быструю основную память. Это происходит за счет выделения специальной области памяти и перемещения в нее данных ROM-памяти карты расширения или устройства сопряжения. Естественно, что действие этой функции представляет собой механизм "эатенения", который позволяет обращаться, в данном случае к устройствам ввода/вывода, как к адресному пространству ОЗУ и за счет этого увеличить скорость доступа к таким устройствам. Для функционирования этого механизма необходимо исключить для всех обычных программ возможность использования указанной области памяти, что и делает BIOS при разрешении этого параметра. При отсутствии ISA-устройств данная опция должна быть отключена ("Disabled"). По умолчанию эта опция, как правило, включена.
Общее представление есть! Рассмотрим некоторые уточнения и дополнения. Разрешать этот параметр следует в том случае, если это требуется в документации на используемую в системе плату расширения или устройство. Некоторые старые ISA-карты (например, ранние видеокарты высокого разрешения) требуют выделения для них специального адреса памяти, лежащего в некотором диапазоне. Кроме того, это выделение запрещает доступ в старшие адреса памяти, расположенные выше 16 МБ. Это означает, что, независимо от объема инсталлированной в системе памяти, операционная система не сможет обращаться к этому адресному пространству. Поэтому включение данной опции должно быть оправдано. По сути, данная функция сохранена в "BIOS Setup" по причине фактора совместимости со старыми картами. Необходимо помнить и о том, что когда мы говорим вообще об ISA-картах, то должны подразумевать и функционирование DMA-каналов, которое достаточно жестко вписывается в канву ограничений ISA-шины. Но об этом будет сказано отдельно. Может принимать значения: "Enabled" (разрешено), "Disabled" (запрещено).
Немного дополнительной информации. Включение функции позволяет создать пропуск в динамической памяти, а точнее разрыв. Для адресов, попадающих в этот диапазон, циклы процессора и PCI будут игнорироваться самим чипсетом. Последствия для неподготовленного пользователя при создании "дырки" могут быть самыми непредсказуемыми. Возможна ситуация, когда такой режим может понадобиться и PCI-плате, если она нуждается в отдельном управлении адресами. Поэтому не должно удивлять присутствие такой опции и в системах, уже лишенных привычной ISA-шины.
И что также очень важно, выбранный диапазон "выпадает" и из объема кэшируемой памяти, а во-вторых, и из возможности воздействия на него (управляемости) операционной системы. Последнее, естественно, связано уже с функционированием аппаратных компонент.
В более "старых" версиях BIOS могут встретиться другое наименование такой функции - "Memory Hole", и значения параметров: "None", "at 512 kB", "at 15 MB". Действие некоторых параметров уже понятно, а для значения "at 512 kB" стоит указать, что для "затенения" используется часть базовой памяти в пределах 512-640 КБ. Есть еще один вариант и абсолютно идентичный. С тем же названием и фактически с теми же значениями: "Disabled", "512KB-640KB", "15MB-16MB". Те же значения предлагает опция "Fixed Memory Hole".
Был встречен и такой вариант опции "Memory hole": значения "Disabled" (по умолчанию), "Conventional" и "Extended". Все эти необычные параметры также предназначались для выделения адресного пространства под "стандартные" (legacy) ISA-устройства.
"AMI BIOS" может содержать опцию под названием "Memory Hole at 15M Addr.", т.е. близкую к исходной.
Необходимо также достаточно определенно представлять себе, что выделение некоего объема памяти предназначалось не только (и даже не столько) для переноса данных ROM-памяти какого-либо устройства, сколько для формирования в системной памяти области, являющейся по сути локальной памятью этого устройства или даже локальной памятью шины. Иначе зачем выделять под область "затенения" 1 МБ и более. Например, в некоторых версиях BIOS можно было встретить такой набор значений: "Disabled", "14M-16M", "15M-16M".
Более определенно на сей счет "говорит" старенькая функция "Memory Hole Size" с такими предложениями: "1 Mb", "2 Mb", "4 Mb", "8 Mb", "Disabled". Все это богатство предназначалось для системной AT-шины, а также резервировалось под потребности ISA-карт. Исходя из вышесказанного, станет более понятна опция "15-16M Memory Location" с параметрами: "Local" (по умолчанию) и "Non-local". Аналогичная опция могла называться и "Local Memory 15-16M".
Может возникнуть еще один вопрос. Почему все рассматриваемые функции "привязаны" к 16 МБ? Еще раз стоит подчеркнуть, что наличие всех этих функций в более современных версиях BIOS связано только с принципом совместимости с возможно эксплуатируемыми или специально разработанными картами расширения, устройствами сопряжения, или, как иногда говорят, устройствами связи с объектом (УСО), т.п. Появление же на свет божий всех этих опций "совпало" с появлением в середине 80-х славной 16-разрядной ISA-шины, для которой добавление 4 дополнительных адресных линий означало увеличение максимального размера адресуемой памяти до 16 МБ. Поэтому, задавая некий размер адресной области, мы однозначно определяем ей место "в конце" 16-мегабайтного адресного пространства.
Еще несколько слов о "Phoenix BIOS", предлагавшем аналогичную опцию под названием "ISA Memory Gap". Правда, в различные времена предлагалось два варианта опции. В одном из них была возможность использовать/не использовать последний мегабайт памяти, как "ISA memory area". Другой вариант опции предлагал также уже знакомые значения: "1 Mb", "2 Mb", "4 Mb", "8 Mb" и "Disabled".
Ну и напоследок не отдельные опции, а пары совместных функций или даже отдельные подменю. "Memory Hole Start Address" (а могут быть и такие варианты - "Memory Map Hole Start Address" или "Memory Map Hole End Address") дает возможность установить начальный адрес "дырки" из ряда, начиная с 1-го по 15-й МБ с шагом в один мегабайт. Но эта опция становится доступной, если включена базовая опция "Memory Map Hole".
Очень давние предложения от "AWARD"! Поверьте, такие системы до сих пор функционируют! Необходимо вначале включить ("Enabled") опцию "Allocate Memory Hole", а затем поработать над "Hole Start Adress" и "Hole Size". Причем размер "дырки" варьируется в пределах (!) от 64 КБ до 8 МБ (через удвоение шага), а установка начального адреса позволяет перемещать по адресному пространству выбранную область.
Напоследок вполне современный и весьма неожиданный эффект от применения "нашей" опции. В периодике как-то появилась информация, что включение опции помогло решить проблему нестабильной работы чипсетов VIA в системе с установленными звуковыми картами Creative SB Live! и Aureal, причем PCI-картами!. Хотя еще раньше была озвучена информация о конфликтах со звуковыми картами, такими как Diamond MX300 или Soundblaster той же "Creative Labs", и что эти конфликты системных ресурсов удалось разрешить за счет использования "дырки" в памяти. Так что пусть опция еще поживет?! ;

Memory Remapping


- (перераспределение памяти). Поскольку аналогичная опция может называться "Memory Relocation", то пользователь уже знает, о чем идет речь. Очень старенькая опция, применение которой имело смысл в системе с ограниченным объемом оперативной памяти. Включение опции ("Enabled") требовало запрещения всех видов "затенения" в области адресов A0000 - FFFFF, в т.ч. "затенения" видео- и системного BIOS. Детальнее см. выше.

Memory Reservation


- так называется меню с "низкой" опций ("C800 - CBFF" и т.д., см. выше), из возможных параметров которых ("Available" и "Reserved) следует, что выбранный 16К-байтный диапазон может быть соответственно либо доступен для использования некоторым устройством (пример "выделенной" памяти), либо зарезервирован для использования любым программным обеспечением.
Нечто подобное предлагает "Phoenix BIOS" в меню "PCI/PNP ISA UMB Region Exclusion". Правда, т.н. "Upper Memory Blocks" не предназначены для использования стандартными ISA-картами (не Plug&Play-картами). А в остальном и диапазоны те же, и значения.

Shadowing Address Ranges (xxxxx-xxxxx Shadow)


- данная опция подобна вышепредставленным и позволяет разрешать ("Enabled") или запрещать ("Disabled") "затенение" указанного адресного диапазона для использования некоторой картой расширения. Запрещение допустимо, если такая карта не используется, или для такой карты в той же "Windows9x" функционирует соответствующий драйвер. Стоит напомнить, что "Windows NT" не использует механизмов "затенения", и что некоторые карты, использующие диапазон CXXXh-EFFFh для операций ввода/вывода, могут не работать при включенном "затенении". В последнем случае запросы чтения/записи памяти могут не проходить, например, к той же ISA-шине.

System BIOS Shadow


- опция разрешения применения теневой памяти на область системной ROM BIOS. Рекомендуется установить в "Enabled" для повышения производительности системы, однако необходимо еще раз подчеркнуть, что улучшения эффективности системы можно добиться только в "MS-DOS" или "Windows 3x". При этом старшие 384 КБ из первого мегабайта памяти станут недоступными в качестве ОЗУ.
Некоторые старые версии BIOS (речь идет об устаревших системах) давали возможность "затенения" отдельных областей из выделенных под системный BIOS 64 КБ. Это было достаточно удобно, так как такие адресные зоны - суть фрагменты по 16 КБ (шаг адресов в 400h). В современных системах такой возможности нет, прежде всего аппаратной. Поэтому при включении режима "затенения" системный BIOS затеняется целиком.
Опция может называться "System Shadow" или "System ROM Shadow F000, 64K". Когда-то такая функция называлась совсем просто - "BIOS Shadow".

VGA Type


- данные этой опции используются BIOS системы, когда затенение видео BIOS включено. Оказывается, важно и то (см. чуть ниже), о какой видеокарте (читай, шине) идет речь. Отсюда и возможные значения: "Standard" ("стандартное затенение" - по умолчанию), "PCI", "ISA/VESA".

Video BIOS Shadowing


- при включении этой опции ("Enabled") BIOS видеокарты, как мы уже знаем, будет скопирован в оперативную память (по адресам C0000h-C7FFFh), что ускорит обращение к нему. За счет чего? Это уже известно! За счет различной разрядности шин памяти и времени доступа к ячейкам памяти. Но современные операционные системы обращаются к видеокартам напрямую, минуя их BIOS. Ну а "Windows NT" вообще не использует затеняемую память. А вот производительность графики в "старушке" MS-DOS сильно зависит от того, включена данная опция или нет. Если при включении теневой памяти не наблюдается какого-либо ускорения работы графических функций, то необходимо проверить соответствие адресов ROM BIOS видеокарты и установленной затеняемой области. Если не используются старые программы, лучше опцию отключить, так как, если какое-нибудь приложение обратится к адресам, занятым Video BIOS, возможны сбои.
Опция может называться "Video ROM Shadow C000, 32K", "Video ROM BIOS Shadow", "Video ROM Shadow", "Video BIOS Shadow" или "Video Shadow".
Некоторые версии BIOS также предлагают "затенение" отдельных областей, и тогда вместо одной, а точнее как дополнение к основной опции, предлагается набор из, например, следующих опций:
"Video ROM Shadow C000, 16K"
"Video ROM Shadow C400, 16K"
Такой вариант с опциями появился по причине того, что видеокарта на своем "борту" могла иметь и 16K-байтный объем ROM-памяти. В этом случае затенялся только диапазон C400h. Современные видеокарты, по сути предназначенные для использования в мощнейших программных средах, имеют значительно большие размеры Video BIOS, и только часть этого кода (32 КБ) может быть затенена. Нонсенс! При этом возможны сбои, т.к. при обращении к видео BIOS обращение будет происходить по адресам, принадлежащим физически разной памяти.
Еще одно важное замечание, которое не было отображено выше. Современные видеокарты хранят свой BIOS в микросхемах, допускающих перепрограммирование (во Flash BIOS), позволяющем получить доступ на скоpостях, сpавнимых со скоpостью обpащения к ОЗУ. Скоpость обpащения к VGA BIOS опpеделяется также и скоpостью шины (ISA, EISA или VLB). А если речь идет о PCI или AGP? И тогда может оказаться, что необходимости затенять VGA BIOS нет, и при этом появляется возможность освободить 384 кб ОЗУ для других целей. Но все же к VGA BIOS обращения происходят часто, особенно это характерно для игрового ПО. Так что решает проблему каждый пользователь сам и в каждом конкретном случае.
Также необходимо помнить о том, что BIOS интегрированного видеоадаптера располагается, как правило, по адресам системного BIOS. Тут как раз и необходимо дополнительно упомянуть, что функционирование видеоканала в современной системе обеспечивается управлением графического процессора через видеодрайвер, а не с помощью набора команд от центрального процессора. В последнем случае BIOS видеокарты обеспечивал определенный набор функций, совершенно игнорируемых в современной системе. Поэтому можно сказать, что первородное назначение видео BIOS сохраняется по причине обратной совместимости со стандартным VGA-интерфейсом.

Bios