Теневая память - Shadow ROM и Shadow RAM

В области верхней памяти UMA обычно располагаются устройства с медленной памятью: системная BIOS (System ROM BIOS), расширения BIOS на графическом адаптере (Video ROM BIOS), на контроллерах дисков и интерфейсов (Adapter ROM), ПЗУ начальной загрузки на сетевой карте (Boot ROM), видеопамять (Video Memory Buffer). Они, как правило, реализованы на 8- или 16-битных микросхемах с довольно большим временем доступа. Обращение к полноразрядному системному ОЗУ выполняется гораздо быстрее. Для ускорения обращений к памяти этих устройств применяется теневая память (Shadow Memory) - подмена ее системным ОЗУ. Теневая память появилась на развитых моделях AT-286, где она была реализована аппаратно. Процессоры класса 386+ позволили реализовать ее программно, с помощью страничной переадресации. Затенение ОЗУ и ПЗУ устройств выполняется по-разному.
При инициализации теневого ПЗУ (Shadow ROM) содержимое затеняемой области копируется в ОЗУ, и при дальнейшем чтении по этим адресам подставляется ОЗУ, а запись в эту область блокируется.
При использовании теневого ОЗУ (Shadow RAM) запись производится одновременно в физическую память затеняемой области и в системное ОЗУ, наложенное на эту область. При чтении затененной области обращение идет только к системной памяти, что происходит гораздо быстрее. Особенно велик эффект от затенения видеопамяти старых графических адаптеров, которая по чтению была доступна только во время обратного хода развертки, и процессору приходилось долго ждать этого момента. Однако затенение областей разделяемой памяти, модифицируемых со стороны адаптеров, недопустимо - эти изменения не будут восприняты процессором. К разделяемой относится буферная память сетевых адаптеров, видеопамять адаптеров с графическими сопроцессорами (акселераторами). Из этого следует, что затенение видеопамяти было применимо только к примитивным графическим картам, и то не во всех режимах.
Обычно теневая память включается через CMOS Setup отдельными областями размером по 16 Кбайт или более крупными, и для каждой области указывают режим затенения (Shadow ROM или Shadow RAM). На современных системных платах затенение области системной BIOS выполняется всегда, на старых платах затенением этой области можно было управлять. Затенение BIOS видеоадаптера (Video BIOS Shadowing) для работы в среде Windows с "родными" драйверами графического адаптера может и не давать прироста производительности.
Все программные настройки, влияющие на объем доступной памяти, кроются в файлах CONFIG.SYS и AUTOEXEC.BAT, размещенных в корневом каталоге загрузочного диска.
Резидентные драйверы (русификаторы клавиатуры, экрана и принтера, драйвер мыши) по умолчанию обычно загружаются в стандартную память.
Увеличение физического объема оперативной памяти в ряде случаев может привести к неожиданному снижению производительности компьютера. Это возможно, когда системная плата (или процессор со вторичным кэшем) не способна кэшировать весь объем ОЗУ. У многих системных плат для процессоров Pentium кэшируются только первые 64 Мбайт ОЗУ; у первых процессоров Pentium II кэшировались только 512 Мбайт. Память, выходящая за размеры кэшируемой области, конечно же доступна, но ее производительность гораздо ниже кэшируемой. ОС Windows 9x распределяет память, начиная с верхней границы доступной памяти, причем наверх попадает ее ядро, скорость работы которого существенна для работы многих приложений. Если после увеличения ОЗУ ядро попадает в некэшируемую область, можно наблюдать снижение производительности.

Как операционная система использует память? Рассмотрим использование памяти операционной системой Windows. Оперативная память, к которой непосредственно может обратиться процессор образует адресное пространство. 32-разрядное адресное пространство в процессорах 80386 и старше делится на страницы памяти размером 4 Кб каждая. Управление каждой из этих страниц осуществляется независимо от других. Реальное (физическое) адресное пространство доступно только ядру (основным программам) операционной системы и программам драйверам (обеспечивающим управление работой внешних устройств), лишь они могут непосредственно обратиться к физической памяти. Другие компоненты системы и все прикладные программы работают в виртуальных адресных пространствах, с виртуальными адресами.

Все виртуальное адресное пространство программ делится на четыре области. Первая область занимает диапазон адресов от нуля до 4 Мб и недоступна для программ управляемых Windows. Здесь располагаются адреса подпрограмм обработки прерываний, программы ДОС и драйверы внешних устройств.

Область от 4 Мб до 2 Гб является рабочим пространством программ. Каждой программе отводится свое адресное пространство.

Третий гигабайт используется как виртуальное адресное пространство, общее для всех программ и для системы. В эту область Windows загружает свое графическое ядро, а также динамические библиотеки. Фактически эти модули находятся в реально имеющейся физической памяти в области гораздо меньших адресов, но нужен механизм, дающий программам возможность обращаться к системным модулям. Виртуализация памяти и является таким механизмом.

Четвертый гигабайт (адреса C0000000-FFFFFFFF) также является общим для всех программ и для системы. В него система загружает свое ядро, драйверы и другие модули, работающие на уровне ядра (если такие модули имеются в системе). В этом адресном пространстве выделяется также область памяти, используемая дисковой кэш памятью (VCACHE). В этом же гигабайте находятся адреса памяти (реальные, а не виртуальные) тех устройств ввода-вывода, которым предоставляется возможность прямого доступа к памяти.
Модуль VCACHE впервые появился в Windows 3.11 для рабочих групп, вышедшей в 1993 году. В первой IBM PC, выпущенной в 1980 году, стояло 64 Кб ОЗУ, а в 1993 году нормой были компьютеры с четырьмя мегабайтами оперативной памяти. В 2006 обычной стала память 256 - 512 Мб.

Под кэш жесткого диска было выделено линейное виртуальное адресное пространство и затем средствами диспетчера памяти содержимое кэш отображалось на реально используемую физическую память. Поэтому на этапе загрузки системы часть адресного пространства в четвертом гигабайте резервируется под использование дисковой кэш памятью. Размер этой части зависит от версии операционной системы, от некоторых характеристик оборудования и от количества оперативной памяти, установленной в компьютере.
Еще одно использование четвертого гигабайта - обеспечение доступа к памяти устройств. По-прежнему прямая запись осталась наиболее быстрым способом обращения к устройству, только адреса памяти устройств были вынесены из первого мегабайта в конец адресуемой области, в тот же самый четвертый гигабайт.
В четвертом гигабайте выделяется адресное пространство и для виртуальных машин ДОС, в которых выполняются программы для ДОС. При этом возникает необходимость в двойной переадресации: когда программа обращается к адресу в первом мегабайте, вместо него подставляется соответствующий адрес виртуальной машины (в четвертом гигабайте), а поскольку этот адрес виртуальный, то происходит вторая переадресация - на адрес физической памяти, в котором находится нужная страница виртуальной машины. Такова плата за поддержку старых программ. Впрочем, на деле накладные расходы оказываются невелики.
Влиять на использование адресов памяти устройствами операционная система, как правило, не может - эти адреса в большинстве случаев зафиксированы самим оборудованием.


Распределение памяти при загрузке Windows.
Самый первый этап - загрузка ДОС. Затем из нее запускается ядро Windows - VMM.VXD. Этот файл содержит много модулей, и один из них - диспетчер виртуальных машин (именно он управляет распределением памяти) по своей структуре является обычной программой для ДОС. Но только по структуре и только для того, чтобы его можно было запустить из ДОС. После своего запуска он переводит процессор в защищенный режим и использует ДОС преимущественно как драйвер различных устройств, в первую очередь диска и видеоадаптера.
Затем диспетчер виртуальных машин начинает загружать в память другие модули (драйверы), находящиеся в файле VMM.VXD, драйверы, на которые есть ссылки в реестре или в файле system.ini, а также затребованные ранее загруженными программами для ДОС.
Но тут возникает порочный круг. Чтобы загрузить драйвер в память, ему эту память надо выделить, а при выделении памяти - сделать соответствующие пометки в таблице страниц. А чтобы выделить место для таблицы страниц, нужно предварительно выполнить распределение памяти. Поэтому диспетчер виртуальных машин выполняет распределение в два приема: вначале выделяется небольшая гарантированно имеющаяся область памяти, в которую загружаются тела драйверов. В ней также строится таблица страниц. На втором этапе, собственно инициализации, анализируются требования драйверов к памяти и им выделяются виртуальные адреса в четвертом гигабайте.
Если при загрузке Windows включить создание протокола загрузки, то в нем (файл bootlog.txt) эти стадии отчетливо видны. Сначала идут пары сообщений Loading и LoadSuccess для каждого драйвера, затем выполняется инициализация диспетчера виртуальных машин и драйверов.
Современные драйверы дисплея, как правило, состоят из двух частей - ядра, выполненного в виде драйвера виртуального устройства (vxd) и основной части, выполненной в виде динамически загружаемых библиотек. Когда грузится ядро системы, загружается и ядро видеоадаптера. Оно обычно обеспечивает реализацию только базовых функций видеоадаптера, приблизительно на уровне адаптера VGA, поэтому вполне обходится соответствующей областью адресов в первом мегабайте или, в добавление к нему, небольшим участком памяти, занимаемым адаптером в верхних адресах четвертого гигабайта. При выполнении инициализации памяти диспетчер виртуальных машин выделяет ядру видеоадаптера запрошенную им область. Диспетчер памяти отводит незанятые участки под адресное пространство кэш жесткого диска (VCACHE).
Затем запускается графическое ядро Windows, а с ним - и полный драйвер видеоадаптера. Этот драйвер инициализирует всю функциональность видеоадаптера, и в используемой адаптером зоне адресов начинает существовать физическое устройство.

Задание.

Определите, как распределяется оперативная память в вашей вычислительной системе.

Откройте <Пуск>/<Настройка>/<Панель управления>/<Система>.

Запишите все сведения о системе.

Определите, на какой вкладке можно определить состояние системы (запишите эти данные),

Рассмотрите свойства файловой системы (какие устройства здесь рассматриваются? Запишите эти данные).

Обратите особое внимание на вкладку <Виртуальная память>. Запишите, какие возможности Вы имеете для настройки системы виртуальной памяти.

Нажмите комбинацию кнопок <ctrl>/ <alt>/ <del>.

Запишите какие задачи решаются в системе. Определите объем страницы для вашей системы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: