ECC, Parity

 

Устройствам динамической памяти присущ один серьезный недостаток - вероятность ошибки считывания информации из ячейки. Для обнаружения ошибок памяти и их корректировки используются схемы проверки целостности данных. Существует 2 способа контроля - с помощью проверки бита четности и с помощью кода коррекции ошибок (ECC - Error Correction Code или Error Checking and Correction). Второй способ надежнее, хотя сравнивать эти методы можно с большой натяжкой.

Для пpовеpки ошибок памяти по четности (во время проведения POST, обычного режима работы) каждый байт информации должен иметь дополнительный девятый pазpяд, котоpый пpи каждом обpащении к ОЗУ по записи устанавливается таким обpазом, чтобы общее число единиц было нечетным. Пpи каждом обpащении по чтению пpовеpяется признак нечетности. Естественно, что поддерживающие проверку по нечетности модули памяти должны содержать дополнительный модуль для хранения этой дополнительной информации. Пpи обнаpужении ошибки возникает немаскиpуемое пpеpывание NMI, котоpое нельзя блокиpовать. Компьютер при этом пpекpащает pаботу, и на мониторе отобpажается сообщение об ошибке памяти, обычно в виде "PARITY ERROR AT 0AB5:00BE SYSTEM HALTED".

Недостаток такой схемы очевиден. Невозможно на основе такого метода контроля целостности исправлять обнаруженные ошибки. Метод же ECC, применяемый на высокоуровневых ПК, серверах, позволяет обнаруживать и исправлять двух-, трех- и даже четырехбитовые ошибки памяти. В отличие от метода по четности при реализации коррекции ошибок каждый бит входит более чем в одну контрольную сумму, что позволяет в случае возникновения ошибки в некотором бите восстановить адрес ошибки и исправить ее. Далеко не все чипсеты поддерживали и поддерживают коррекцию ошибок. К тому же с середины 90-х годов схемы обычного контроля четности применяются все реже. Надо отметить, что ECC не является панацеей от дефектной памяти и применяется для исправления случайных ошибок.

Контроль четности (или метод по модулю 2) существует уже давно. В военной цифровой технике передачи данных существуют более сложные методы, например, по модулю 15. Методы коррекции ошибок также имеют свою предысторию. В системах передачи данных (в частности, телемеханике) также давно применяются и коды Хэмминга, и циклические коды с образующим полиномом, и т.п.

SmartCorrect - технология автоматической коррекции ошибок, разработанная корпорацией "Distributed Processing Technology" (DPT), предназначена для защиты всей подсистемы массовой памяти. Благодаря платам памяти с системой автокоррекции ошибок, высокопроизводительные адаптеры фирмы DPT могут обнаруживать и устранять любые нарушения целостности данных, возникшие на уровне кэш-памяти адаптера или на участках прохождения данных.

CPU Level 2 Cache ECC Check

опция включения/отключения коррекции ошибок кэша второго уровня у процессоров архитектуры Pentium II и выше, которые поддерживают эту опцию. К примеру, процессоры Pentium II поддерживает коррекцию ошибок, начиная с частоты в 333 МГц. ECC-коррекция несомненно повышает надежность системы, но при этом ее работа, как правило, несколько замедляется. В некоторых процессорах допущены ошибки, и включение этого режима может привести к нестабильной работе системы. К тому же фактор надежности играет значительную роль только в сетевых средах. Естественно, что при отсутствии кэш-памяти второго уровня или ее блокировке данная опция будет также недоступна. Может принимать значения:

"Enabled" - разрешено,

"Disabled" - запрещено.

Чуть другие названия этой же опции: "CPU Level 2 ECC checking", "CPU L2 Cache ECC Checking" и "L2 Cache ECC Support".

"AMI BIOS" предлагает несколько иное наименование опции, но речь идет о том же кэше второго уровня - "Cache Bus ECC". Еще одна опция - "ECC CPU Checking".

Data Integrity (PAR/ECC)

- (целостность данных). Опция разрешения/запрещения контроля памяти на ошибки. Вид контроля устанавливается параметром "DRAM ECC/PARITY SELECT". Может принимать значения:

"Enabled" - разрешено,

"Disabled" - запрещено.

DRAM Data Integrity Mode

- опция включения/отключения проверки целостности памяти. Включение опции позволит системе отслеживать и корректировать однобитные ошибки. Так же будут обнаруживаться двухбитные ошибки, но без исправления. Использование режима коррекции ошибок обеспечивает увеличение стабильности и целостности данных в системе, правда, при небольшой потере производительности. Если в системе не используются ECC-модули памяти, то опция должна быть отключена. Опция может быть отключена и при наличии ECC-модулей, но если ситуация в системе благоприятствует сохранению более высокой производительности. Может принимать значения:

"ECC" - разрешена коррекция,

"Non-ECC" - коррекция запрещена.

В некоторых случаях опция с тем же названием может иметь другой "набор" параметров: "Parity" и "ECC". При этом меняется и содержание функции. Опция может называться "DRAM Integrity Mode".

В "Phoenix BIOS" содержится аналогичная опция с названием "ECC Control". "Enabled" разрешает проведение коррекции (по умолчанию), "Disabled" запрещает. То же содержание вложено в опцию "ECC Memory Checking".

Значения "non-ECC" и "ECC" принадлежат и опциям "Memory Configuration", "ECC Configuration", хотя первая из них не совсем однозначна в наименовании.

В некоторых случаях к имеющимся параметрам может быть добавлено еще одно - "EC only" (режим проверки на четность, но только с выводом сообщений о возникновении ошибки). В зтом случае данная опция становится аналогичной одному из вариантов опции "DRAM ECC/PARITY Select", но при этом возникновение ошибки не приводит к полной остановке системы.

DRAM ECC/PARITY Select

- опция выбора режима коррекции ошибок/проверки по четности. Эта опция появляется только в BIOS тех материнских плат, в которых чипсет поддерживает ECC, и может быть использована только в том случае, если установлены модули памяти с истинной четностью. В некоторых вариантах BIOS этим параметром может устанавливаться только вид проверки, а разрешение на проверку устанавливается параметром "Data Integrity (PAR/ECC)" или аналогичным. Параметр может принимать значения:

"Parity" (по умолчанию) - в случае возникновения ошибки на монитор выдается сообщение о сбое по четности в памяти и работа компьютера останавливается,

"ECC" - в случае возникновения одиночной ошибки она исправляется (без вывода каких-либо сообщений) и работа системы продолжается. Если имеет место не одиночная ошибка, то работа компьютера также приостанавливается. Следует только учесть, что, по данным "Intel", скорость обмена с памятью при включении этого режима уменьшается приблизительно на 3%.

"Phoenix BIOS" содержит аналогичную опцию под названием "Parity Mode" и со следующими значениями:

"Disabled" - проверка памяти запрещена,

"Parity" (по умолчанию) - аналогично, как и в "Award BIOS",

"ECC" - так же аналогично, как и в "Award BIOS", сообщение выводится только при двухбитной (и более) ошибке.

"AMI BIOS" "подарил" нам два варианта опции "Memory Error Detection". В одном случае значения параметра оказались уже знакомыми: "Disabled", "ECC", "Parity". Другой же вариант по сути стал аналогом функции "DRAM Data Integrity Mode"(141) с разрешением или запрещением коррекции ошибок ("Enabled"/"Disabled").

Memory Parity/ECC Check

- опция разрешения/запрещения проверки целостности данных. Может принимать значения: разрешен контроль памяти на ошибки ("Enabled"), запрещен ("Disabled") и "Auto". Последняя установка активизирует проверку памяти автоматически с автоматическим же определением возможностей модулей памяти, как по четности, так и по коррекции ошибок. В другой версии BIOS в этой же опции может отсутствовать параметр "Auto".

Только два параметра ("Enabled"/"Disabled") предлагает и опция "Memory Parity (Error) Check". При включении опции и отсутствии необходимых модулей памяти загрузка ПК может прерваться с выводом сообщения "Parity Error".

Single Bit Error Report

- (сообщение об однобитовой ошибке). Если включен режим коррекции ошибок, то установка опции в "Enabled" позволит системе вывести сообщение о имеющей место однобитовой ошибке и ее коррекции. Решение этой задачи берет на себя контроллер памяти, он же направляет центральному процессору сообщение об ошибке памяти. Отключение опции ведет к отказу от вывода сообщений, но коррекция никак не отменяется.

 


 

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

 

"shadow memory" - это так называемая "теневая" память. В адресах памяти от 640 КБ до 1 МБ (a0000h - fffffh) находятся "окна", через которые "видно" содержимое различных системных ПЗУ. Например, адреса f0000h - fffffh занимает системное ПЗУ, содержащее bios системы, окно c0000h - c7fffh - ПЗУ видеоадаптера (видео-bios) и т.п. При включении режима "shadow" для каких-либо адресных диапазонов, соответствующих системным ПЗУ либо картам расширения, содержимое их ПЗУ копируется в участки основной памяти, которые затем подключаются к этим же адресам вместо ПЗУ, "затеняя" их.

Дает ли это какие-нибудь преимущества? Повышается ли при этом производительность системы? Включение "затенения" дает в первую очередь значительное ускорение работы с данными ПЗУ за счет более высокого быстродействия микросхем ОЗУ (в сравнении со временем доступа к ROM BIOS в 150-200 нс). Кроме того, при обращении к микросхемам BIOS непосредственно используется 8-разрядный доступ, что включение "затенения" ПЗУ делает еще более эффективным. Кроме этого, появляется возможность модифицировать видимое содержимое ПЗУ: все современные системные BIOS используют это для самонастройки, а в область видео-BIOS обычно загружаются экранные шрифты и т.п.

Что это за теневая память физически? Этот вопрос связан с распределением памяти вообще. В первом мегабайте памяти используются по прямому назначению, т.е. как основная память, 640 КБ, а остальные 384 КБ оказываются в адресном пространстве, зарезервированном для ПЗУ и внешних устройств. В современных платах вся память представляет собой непрерывный массив, поэтому разрывать адресное пространство модулей памяти на две части нельзя и поэтому часть системной области приходится аппаратно исключать, теряя при этом 384 КБ.

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

1) Организация "Shadow Memory". Доступ к ней регулирует чипсет. Как правило, "Shadow Memory" находится в адресном пространстве в том же месте, где и исходное ПЗУ. Поскольку две области памяти в одном месте физически находиться не могут, для управления этой памятью в чипсете есть специальная схема, которая может подключить в этот фрагмент адресного пространства либо исходное ПЗУ, либо ОЗУ.

2) Несколько слов о защите от записи. Обычно "Shadow Memory" в нормальном состоянии находится в режиме "Read Only" (только для чтения). Это породило проблемы, например, при написании русификаторов, так как приходится открывать "затененные" участки той же видеопамяти. Различные версии BIOS позволяют решать эту проблему, имея опции с возможностью указания, следует ли оставлять требуемый диапазон "Read Write" или "Read Only".

3) Но не только BIOS способен управлять Shadow-функциями чипсета. Такое управление может осуществлять программа, умеющая корректно обращаться к регистрам чипсета на низком уровне. Начиная с 386-х в защищенном режиме работы процессора имеется страничная организация памяти, обеспечивающая формирование физического (реального) адреса из виртуального адреса программы. Именно эта возможность и обеспечивает в большинстве распространенных драйверов памяти (менеджеров) не только выполнение функций затенения, но и получение памяти EMS при наличии расширенной памяти в компьютере. Программно возможности "Shadow"-функций менеджеров памяти значительно более гибкие, чем у чипсета, управляемого BIOS. В частности, управление размерами памяти, выделяемой для "Shadow Memory", может производиться достаточно малыми по размеру страницами - 4 КБ, что позволяет эффективнее использовать адресное пространство первого мегабайта. В MS-DOS возможность управления "Shadow"-памятью имеет драйвер памяти HIMEM.SYS (ключ /SHADOWRAM:ON|OFF).

4) Затенение полезно, главным образом, в 16-разрядных ОС. 32-разрядные системы не используют 16-разрядный код из ROM. Вместо него они загружают 32-разрядные драйверы в ОЗУ, заменяя ими 16-разрядный код BIOS, который, таким образом, используется только в процессе загрузки системы.

5) 2) Организация блоков верхней памяти UMB (Upper memory blocks), по сути аналогия предыдущему варианту.

6) 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

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

Adaptor ROM Shadow D800,16K

Adaptor ROM Shadow DC00,16K

Adaptor ROM Shadow E000,16K

Adaptor ROM Shadow E400,16K

Adaptor ROM Shadow E800,16K

Adaptor ROM Shadow EC00,16K

- эта область могла быть использована системой после копирования SCSI-контроллерами своего BIOS. Hекотоpые SCSI-контроллеры могли иметь несколько другие области "затенения" ОЗУ (в зависимости от их марки).

Совершенно аналогично "работали" следующие опции:

C8000-CBFFF Shadow

CC000-CFFFF Shadow

D0000-D3FFF Shadow

D4000-D7FFF Shadow

D8000-DBFFF Shadow

DC000-DFFFF Shadow

Совершенно те же опции предложил "Phoenix BIOS" в меню под названием "Shadow Memory Regions".

И совершенно ясно, что возможны также другие вариации по "затенению". Например, опция "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-карты.

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
PAM1[3:0] 0C0000h - 0C3FFFh ISA Add-on BIOS*
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
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-шиной.

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

- опция установки размера линейного буфера кадра (LFB - Linear Frame Buffer). Опция "AMI-BIOS", аналогичная или близкая по смыслу нижерасположенной "Memory Hole At 15M-16M". Кроме размещения ROM-адреса в пределах 15-16 МБ, опция позволяла (в таком виде она уже не встречается) установить размер линейного видеобуфера графических адаптеров в области основной памяти, доступной для ISA-шины (1, 2, 4 МБ). Это суть диапазоны 15-16, 14-16 и 12-16 МБ соответственно. Еще одним значением являлось "Disabled" с отказом от выделения под ISA-адаптер линейного буфера кадра. Такое же значение потребуется при объеме памяти не более 8 МБ (в 96-м г. это было почти пределом) и при работе с MS-DOS. Если же какое-то из значений ("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". Дополнительная информация может быть почерпнута из упомянутой и приведенной ниже опции.