- •Глава 5 Память
- •Характеристики систем памяти
- •Иерархия запоминающих устройств
- •Основная память
- •Блочная организация основной памяти
- •Расслоение памяти
- •Организация микросхем памяти
- •Регистровый режим
- •Страничный режим
- •Последовательный режим
- •Конвейерный режим
- •Режим быстрого страничного доступа
- •Пакетный режим
- •Режим удвоенной скорости
- •Синхронные и асинхронные запоминающие устройства
- •Оперативные запоминающие устройства
- •Статическая и динамическая оперативная память
- •Статические оперативные запоминающие устройства
- •Динамические оперативные запоминающие устройства
- •Постоянные запоминающие устройства
- •Пзу, программируемые при изготовлении
- •Однократно программируемые пзу
- •Многократно программируемые пзу
- •Специальные типы оперативной памяти
- •Многопортовые озу
- •Память типа fifo
- •Обнаружение и исправление ошибок
- •Стековая память
- •Ассоциативная память
- •Кэш-память
- •Емкость кэш-памяти
- •Размер строки
- •Способы отображения оперативной памяти на кэш-память
- •Прямое отображение
- •Полностью ассоциативное отображение
- •Множественно-ассоциативное отображение
- •Отображение секторов
- •Алгоритмы замещения информации в заполненной кэш-памяти
- •Алгоритмы согласования содержимого кэш-памяти и основной памяти
- •Смешанная и разделенная кэш-память
- •Одноуровневая и многоуровневая кэш-память
- •Дисковая кэш-память
- •Понятие виртуальной памяти
- •Страничная организация памяти
- •Сегментно-страничная организация памяти
- •Организация защиты памяти
- •Защита отдельных ячеек памяти
- •Кольца защиты
- •Метод граничных регистров
- •Метод ключей защиты
- •Внешняя память
- •Магнитные диски
- •Организация данных и форматирование
- •Характеристики дисковых систем
- •Массивы магнитных дисков с избыточностью
- •Повышение производительности дисковой подсистемы
- •Повышение отказоустойчивости дисковой подсистемы
- •Raid уровня о
- •Raid уровня 1
- •Raid уровня 2
- •Raid уровня 3
- •Raid уровня 4
- •Raid уровня 5
- •Raid уровня 6
- •Raid уровня 7
- •Raid уровня 10
- •Raid уровня 53
- •Особенности реализации raid-систем
- •Оптическая память
- •Eod — оптические диски со стиранием
- •Магнитные ленты
- •Контрольные вопросы
Память типа fifo
Во многих случаях ОЗУ применяется для буферизации потока данных, когда данные считываются из памяти в той же последовательности, в которой они туда заносились, но поступление и считывание происходят с различной скоростью. Часто для этой цели применяют обычное ОЗУ, однако здесь одновременная запись и считывание информации невозможны. Более эффективным видом ОЗУ, где оба действия могут вестись одновременно, служит память типа FIFO. Микросхема представляет собой двухпортовое ОЗУ, где один порт предназначен для занесения информации, а второй — для считывания. Для FIFO-памяти характерны все технологические приемы, свойственные двухпортовой памяти, в частности способы арбитража при одномоментном обращении к одной и той же ячейке.
В то же время есть и существенные отличия.
Первое состоит в том, что у микросхемы нет входов для указания адреса ячейки, занесение и считывание данных производится в порядке их поступления через одну входную точку и одну выходную.
Второе отличие связано с необходимостью слежения за состоянием очереди. Для этого в микросхеме имеются регистры-указатели адресов начала и конца очереди, а также специальные флаги, которые указывают на две ситуации: отсутствие данных (в этом случае блокируется считывание из микросхемы) и полное заполнение памяти (блокируется запись).
Обнаружение и исправление ошибок
При работе с полупроводниковой памятью не исключено возникновение различного рода отказов и сбоев. Причиной отказов могут быть производственные дефекты, повреждение микросхем или их физический износ. Проявляются отказы в том, что в отдельных разрядах одной или нескольких ячеек постоянно считывается 0 или 1, вне зависимости от реально записанной туда информации. Сбой- это случайное событие, выражающееся в неверном считывании или записи информации в отдельных разрядах одной или нескольких ячеек, не связанное с дефектами микросхемы. Сбои обычно обусловлены проблемами с источником питания или с воздействием альфа-частиц, возникающих в результате распада радиоактивных элементов, которые в небольших количествах присутствуют практически в любых материалах. Как отказы, так и сбои крайне нежелательны, поэтому в большинстве систем основной памяти содержатся схемы, служащие для обнаружения и исправления ошибок.
Вне зависимости от того, как именно реализуется контроль и исправление ошибок, в основе их всегда лежит введение избыточности. Это означает, что контролируемые разряды дополняются контрольными разрядами, благодаря которым и возможно детектирование ошибок, а в ряде методов — их коррекция. Общую схему обнаружения и исправления ошибок иллюстрирует рис. 5.15.
На рисунке показано, каким образом осуществляются обнаружение и исправление ошибок. Перед записью М-разрядных данных в память производится их обработка, обозначенная на схеме функцией «f», в результате которой формируется добавочный К-разрядный код. В память заносятся как данные, так и этот вычисленный код, то есть (М+К)-разрядная информация. При чтении информации повторно формируется К-разрядный код, который сравнивается с аналогичным кодом, считанным из ячейки. Сравнение приводит к одному из трех результатов:
- Не обнаружено ни одной ошибки. Извлеченные из ячейки данные подаются на выход памяти.
- Обнаружена ошибка, и она может быть исправлена. Биты данных и добавочного кода подаются на схему коррекции. После исправления ошибки в М-разрядных данных они поступают на выход памяти.
- Обнаружена ошибка, и она не может быть исправлена. Выдается сообщение о неисправимой ошибке.

Коды, используемые для подобных операций, называют корректирующими кодами или кодами с исправлением ошибок.
Простейший вид такого кода основан на добавлении к каждому байту информации одного бита паритета. Бит паритета — это дополнительный бит, значение которого устанавливается таким, чтобы суммарное число единиц в данных, с учетом этого дополнительного разряда, было четным (или нечетным). В ряде систем за основу берется четность, в иных — нечетность. Для 64-разрядного слова требуется восемь битов паритета, то есть ячейка памяти должна хранить 36 разрядов. При записи слова в память для каждого байта формируется бит паритета. Это может быть сделано с помощью схемы в виде дерева, составленного из схем сложения по модулю 2. При чтении из памяти выполняется аналогичная операция над считанными информационными битами, а ее результат сравнивается с битом паритета, вычисленным при записи и хранившимся в памяти. Метод позволяет обнаружить ошибку, если исказилось нечетное количество битов. При четном числе ошибок метод неработоспособен. К сожалению, фиксируя ошибку, данный способ кодирования не может указать на ее местоположение, что позволило бы внести исправления, в силу чего его называют кодом с обнаружением ошибки (EDC — Error Detection Code).
В основе корректирующих кодов лежит достаточно простая идея [39]. Для контроля двоичного информационного кода длиной М бит добавим к ней К дополнительных контрольных разрядов так, что общая длина последовательности теперь будет равна М + К разрядам. В этом случае из возможных N = 2М"К комбинаций интерес представляют только L = 2м последовательностей, которые называют: разрешенными. Оставшиеся N- L последовательностей назовем запрещенными. Если при обработке (записи в память, считывании или передаче) разрешенной кодовой последовательности произойдут ошибки и возникнет одна из запрещенных последовательностей, то тем самым эти ошибки обнаруживаются. Если же ошибки превратят одну разрешенную последовательность в другую, то такие ошибки не могут быть обнаружены. Для исправления ошибок необходимо произвести разбиение множества запрещенных последовательностей на L непересекающихся подмножеств и каждому подмножеству поставить в соответствие одну из разрешенных последовательностей. Тогда, если была принята некоторая запрещенная последовательность, входящая в одно из подмножеств, считается, что передана разрешенная последовательность, соответствующая этому подмножеству, производится замена, чем и исправляется возникшая ошибка.
Простейший вариант корректирующего кода также может быть построен на базе битов паритета. Для этого биты данных представляются в виде матрицы, к каждой строке и столбцу которой добавляется бит паритета. Для 64-разрядных данных этот подход иллюстрирует табл. 5.1 [200]. Здесь D — биты данных, С — столбец битов паритета строк, К — строка битов паритета столбцов, Р — бит паритета, контролирующий столбец С и строку К. Таким образом, к 64 битам данных нужно добавить 17 бит паритета: по 8 бит на строки и столбцы и один дополнительный бит для контроля строки и столбца битов паритета. Если в одной строке и одном столбце обнаружено нарушение паритета, для исправления ошибки достаточно просто инвертировать бит на пересечении этих строки и столбца. Если ошибка паритета выявлена только в одной строке или только одном столбце либо одновременно в нескольких строках и столбцах, фиксируется многобитовая ошибка и формируется признак невозможности коррекции.
Таблица 5.1. Формирование корректирующего кода для 64-битовых данных

Недостаток рассмотренного приема в том, что он требует большого числа дополнительных разрядов. Более эффективным представляется код, предложенный Ричардом Хэммингом и носящий его имя (код Хэмминга). Логику этого кода для четырехразрядных слов (М = 4) иллюстрирует диаграмма Венна2, приведенная на рис. 5.16
Три пересекающихся окружности
образуют семь сегментов. Четырем битам
данных назначаются внутренние сегменты
(см. рис. 5.16, а), а
остальные сегменты заполняются битами
паритета. Биты паритета

Рис. 5.16. Иллюстрация кода Хэмминга для четырехразрядного слова
выбираются таким образом, чтобы общее число единиц в каждой окружности было четным (см. рис.. 5.16, б). Так, поскольку окружность А содержит одну единицу, бит паритета для нее принимается равным 1. Теперь, если в результате ошибки изменится один из битов данных (см. рис. 5.16, в), это легко выявить. Путем проверки паритета обнаруживаются несоответствия в окружностях А и В. Для окружности Б несоответствия нет. Только один из семи сегментов присутствует в окружностях А и В и отсутствует в Б, и ошибка может быть исправлена за счет изменения бита в этом сегменте (см. рис. 5.16, г).
Для пояснения концепции, положенной в основу кода Хэмминга, построим код, обнаруживающий и исправляющий однобитовые ошибки в 8-разрядных словах (пример взят из [47]).
Сначала определим требуемую длину корректирующего кода. В соответствии с рис. 5.15, на вход схемы сравнения поступают два К-разрядных значения. Сравнение производится путем поразрядной операции «исключающее ИЛИ» (сложение по модулю 2) над входными кодами. Результатом является так называемое слово синдрома. В зависимости от того, было ли совпадение входных кодов или нет, соответствующий бит синдрома будет равен 0 или 1.
Слово синдрома состоит из К разрядов, то есть его возможные значения лежат в диапазоне от 0 до 2К - 1. Значение 0 соответствует случаю, когда ошибки не обнаружено, остальные 2К — 1 случая свидетельствуют о наличии ошибки и указывают на ее местоположение.
Поскольку ошибка может возникнуть в любом из М битов данных или К контрольных битов, мы должны иметь 2к - 1 > М + К. Это выражение позволяет определить число битов, необходимое для исправления одиночной ошибки в М-разрядных данных.
В табл. 5.2 приведено количество корректирующих разрядов, нужное для контроля данных различной разрядности. Из таблицы видно, что для 8-разрядных слов требуется четыре корректирующих разряда.
Для удобства будем формировать четырехразрядный синдром со следующими характеристиками:
- Если синдром содержит все нули, значит, не обнаружено ни одной ошибки.
- Если синдром содержит единственную единицу в одном из разрядов, это означает, что выявлена ошибка в одном из четырех корректирующих разрядов и никакой коррекции не требуется.
- Если в синдроме в единичное состояние установлены несколько битов, то численное значение синдрома соответствует позиции ошибки в данных, для исправления которой необходимо инвертировать бит в этой позиции.
Таблица 5.2. Количество корректирующих разрядов, используемое в коде Хэмминга
|
Разрядность |
Исправление одиночной ошибки |
Исправление одиночной ошибки Обнаружение двойной ошибки | ||
|
Контрольные биты |
% увеличения длины кода |
Контрольные биты |
% увеличения длины кода | |
|
8 |
4 |
50 |
5 |
62,5 |
|
16 |
5 |
31,25 |
6 |
37,5 |
|
32 |
6 |
18,75 |
7 |
21,875 |
|
64 |
7 |
10,94 |
8 |
12,5 |
|
128 |
8 |
6,25 |
9 |
7,03 |
|
256 |
9 |
3,52 |
10 |
3,91 |
Под контрольные разряды
отводятся те биты, чьи позиционные
номера представляют собой
степень числа 2
(табл. 5.3). Отдельный
контрольный разряд отвечает за
определенные биты данных. Так, разрядная
позиция п контролируется
теми битами Р/, которые
делают справедливым
соотношение
= п. Например,
разряд данных с позиционным номером
710
(01112)
контролируется битами 4, 2 и 1 (7 = 4 + 2 + 1),
а разряд с номером 1010
(10102)
- битами 8 и 2 (10 = 8 + 2).
Таблица 5.3. Распределение разрядов 12-разрядного слова между данными и контрольным кодом
|
Десятичный номер позиции |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 | |||
|
Двоичный код номера позиции |
1100 |
1011 |
1010 |
1001 |
1000 |
0111 |
оно |
0101 |
0100 |
0011 |
0010 |
0001 | |||
|
Биты данных |
D8 |
D7 |
D6 |
D5 |
|
D4 |
D3 |
D2 |
|
D1 |
|
| |||
|
Контрольные |
|
|
|
|
Р3 |
|
|
|
Р4 |
|
Р2 |
Р | |||
|
биты |
|
|
|
|
|
|
|
|
|
|
|
| |||
Таким образом, для рассматриваемого случая значения контрольных разрядов вычисляются по следующим правилам:

Проверим корректность такой схемы на примере. Пусть входной код равен 00101011, где разряду Д соответствует правая цифра. Контрольные разряды вычисляются следующим образом:

Предположим, что данные в бите 3 содержат ошибку и там вместо 0 находится 1. После пересчета контрольных разрядов имеем

Путем сложения по модулю двух результатов старой и новой проверок получим слово синдрома (S8S4S2S1)

Результат 01102 (610) означает, что в разряде 6, содержащем третий бит данных, присутствует ошибка.
Описанный код называется кодом с исправлением одиночной ошибки (SEC — Single Error Correcting). В большинстве микросхем памяти используется код с исправлением одиночной и обнаружением двойной ошибки (SECDED — Single Error Correcting, Double Error Detecting). Из табл. 5.2 видно, что, по сравнению с SEC, такой код требует одного дополнительного контрольного разряда.
Коды с исправлением ошибок применяются в большинстве ВМ. Например, в основной памяти ВМ типа IBM ЗОхх используется 8-разрядный код SECDED на каждые 64 бита данных, то есть емкость памяти примерно на 12% больше, чем имеет в своем распоряжении пользователь. В ВМ типа VAX на каждые 32 разряда данных добавлен 7-разрядный код SECDED, следовательно, избыточность составляет 22%.
242
Структура одного из вариантов построения устройства для обнаружения одинарных и двойных ошибок с коррекцией одинарных ошибок приведена на рис. 5.17. Схема предназначена для контроля 16-разрядных данных и размещается между процессором и памятью. Из табл. 5.2 видно, что код SECDED предполагает шесть дополнительных разрядов. Таким образом, из процессора и в процессор поступают 16-разрядные коды (UD15 ...UD0), а в память заносятся 22-разрядные данные (М21... М0). Хранящаяся в ячейках памяти информация состоит из 16 бит информации (MD15... MD0) и 6 контрольных битов (МР5... МР„). В последующем первые буквы в обозначении разрядов могут быть опущены, при этом D будет означать информационный разряд кода, а Р — контрольный разряд.
Система размещения основных и контрольных разрядов была рассмотрена ранее, и для данной схемы она приведена в табл. 5.4.
Таблица 5.4. Распределение информационных и контрольных разрядов в 22-разрядном слове
|
Номер позиции |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
|
Биты данных |
|
D15 |
D14 |
D13 |
D12 |
D11 |
|
D10 |
D9 |
D8 |
D7 |
|
Контрольные биты |
Р5 |
|
|
|
|
|
P4 |
|
|
|
|
|
Номер позиции |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
|
Биты данных |
D6 |
D5 |
D4 |
|
D3 |
D2 |
|
D1 |
D0 |
|
|
|
Контрольные биты |
|
|
|
Р3 |
|
|
|
Р2 |
|
Р1 |
P0 |
Контрольные разряды Р4... Р0 вычисляются по стандартной схеме кода Хэмминга:

Особенность, рассматриваемой схемы состоит в способе формирования контрольного разряда Р5. Он вычисляется путем суммирования по модулю 2 всех остальных 21 разрядов кода (D15... Da и МР4... МР„). По мнению авторов рассматриваемой схемы, это облегчает фиксацию факта неисправимой двойной ошибки.
При чтении из памяти формирователем синдрома вычисляется синдром S4... S0:

Здесь Р4... Р0 — контрольные разряды, вычисленные генератором контрольных разрядов на основании информационных битов считанного из памяти кода (MD15... MD0). MP5... МР0 — такие же контрольные разряды, полученные тем же генератором, но перед записью информации в память и хранившиеся там вместе с основной информацией.

Рис. 5.17. Схема обнаружения одинарных и двойных ошибок с коррекцией одинарных.
Если синдром не равен нулю, то он указывает на позицию исказившегося бита при одиночной ошибке. С учетом контрольного разряда Р5 возможны четыре ситуации, показанные в табл. 5.5.
Таблица 5.5. Обнаружение ошибок
|
Синдром |
Р5 |
Тип ошибки |
Примечания |
|
0 |
0 |
Ошибки нет |
|
|
#0 |
1 |
Одиночная ошибка |
Корректируемая: синдром указывает на позицию искаженного разряда |
|
#0 |
0 |
Двойная ошибка |
Неисправимая |
|
0 |
1 |
Ошибка в контрольном разряде |
Искажен контрольный разряд Р5, и он может быть откорректирован |
Сигнал Чт/Зп на схеме определяет выполняемую операцию. Чт/Зп = 1 означает чтение из памяти, а Чт/Зп = 0 — запись в память.
Проанализировав полученный синдром и разряд Р5, обнаружитель ошибки формирует двухразрядный код ошибки Е1Е0 (табл. 5.6).
Таблица 5.6. Кодирование ошибок
|
Код ошибки (Е1 , ЕО) |
Описание |
|
00 |
Ошибки нет |
|
01 |
Одиночная ошибка — исправимая |
|
10 |
Двойная ошибка — неисправимая |
|
11 |
Ошибка в контрольном разряде — исправимая |
