В прошлых ЭВМ, как уже упоминали в статье 8, ёмкость ОЗУ была маленькой от 12 до 128 Кбайт.
В ЭВМ ЕС-1035 ёмкость ОЗУ была 3 Мегабайта.
В современных ПК ёмкость ОЗУ 4-64 Гигабайта и более.
Посмотрим, какое число битов в Регистре Адреса необходимо, чтоб адресовать ОЗУ при произвольной выборке.
Таким образом, для адресации 32 Гигабайт ОЗУ нужно 45 битов в Регистре Адреса или неполных 6 байтов.
Для адресации 128 Гигабайт ОЗУ нужно 47 битов или 6 полных байт в Регистре Адреса.
В статье 8 упоминались ЭВМ одноадресные, двухадресные и трехадресные.
Обычно длина команды ЦП бывает 2,3,4,6, 8 байт.
Спрашивается, не является ли препятствием для наращивания объёма ОЗУ ограниченная длина команды ЦП? Например, для двухадресной ЭВМ с 32 Гбайтами памяти требуется длина команды более 90 битов или более 11 байтов.
Ответ. Нет, не является. Прямая адресация очень редко применяется в команде ЦП. Прямая адресация требует большого размера адресного поля.
В современных ЭВМ применяется косвенная адресация, а именно косвенная адресация с Базированием и Индексированием. По сути это одинаковые механизмы с разными названиями. Суть этих методов в следующем. В составе ЭВМ есть много различных специализированных регистров и есть Регистры Общего Назначения (далее РОН0, РОН1…) для выполнения промежуточных вычислений. Регистры - это наиболее быстродействующие инструменты, быстрее локальной памяти и тем более ОЗУ. Регистры это чистая электроника, поэтому наиболее быстродействующая. Их количество может быть до 32. В системе косвенной адресации с Базированием и/или с Индексированием в какой-то Регистр Общего Назначения (далее РОН0, РОН1, …) заранее записывается адрес ОЗУ, с которого будут начинаться данные для конкретной программы, пусть это будет РОН0. А в самой команде ЦП будет указано только смещение. Действительный адрес памяти (ОЗУ) будет вычисляться целочисленным сложением содержимого регистра Базы (РОН0) и смещения. Для системы с Индексированием точно также будет вычисляться действительный адрес ОЗУ сложением содержимого регистра Индекса (пусть это будет РОН1) и соответствующего смещения в команде ЦП.
------------------------------------
Контроль информации в ОЗУ.
В ОЗУ чаще всего теряется информация. Т.е. вместо 0 где-то появляется 1 и наоборот. В ЭВМ потеря одного бита - это катастрофа и абсолютно недопустимое явление. В прошлых ЭВМ для контроля информации применялся и применяется сейчас в современных ЭВМ способ байта с контрольным битом. К байту из 8 бит присоединяется Контрольный бит (разряд) и в него записывается 0 или 1 так, чтобы общее количество 1 в байте вместе с Контрольным разрядом было нечётным. Например:
В прошлых ЭВМ, у которых была маленькая ОЗУ, такой метод был приемлемым. Начиная с ЭВМ ЕС-1035 и в современных ПК, где память стала более значительная по объёму, применяется более совершенный метод с автоматической коррекцией, если в двойном слове в ОЗУ возникла единичная ошибка. Единичная ошибка обнаруживается при чтении из ОЗУ и тут же исправляется автоматически. Если в двойном слове при чтении из ОЗУ возникла двойная ошибка, то она обнаруживается и работа ЭВМ прекращается по прерыванию от схем контроля. Происходит «тяжёлй останов». ЭВМ в буквальном смысле прекращает работу. В современных ПК в случае двойной ошибки в ОЗУ работа программы прекращается и на экран выводится сообщение об ошибке по такому-то адресу. Сам ПК продолжает работу с другими приложениями.
Рассмотрим, как работает автоматическая коррекция кода при одиночной и двойной ошибке в ОЗУ. Этим в ЭВМ заведует специальный блок BECC. Это аббревиатура с английского «Блок Электронный Коррекции Кода», произносится по-русски «Би-Си-Си».
При записи двойного слова в ОЗУ BECC делает свертку битов двойного слова по определённой схеме. Свёртка битов - это подсчет 1 в каком-то диапазоне. Если число битов чётное, то бит свёртки равен 0, если нечётное, то - 1. При чтении из ОЗУ двойного слова BECC снова делает свертку и сравнивает её с предыдущей свёрткой, сделанной при записи. Отличие битов двух сверток даёт положение бита, в котором произошла одиночная ошибка. Этот бит инвертируется и выдается в ЦП без ошибки. Рассмотрим это на схеме:
Бит 6 получается сверткой всех битов двойного слова.
Бит 5 получается свёрткой битов 32-63 двойного слова.
Бит 4 получается свёрткой битов 16-31 и битов 48-63 двойного слова.
Биты 3,2,1,0 получаются свёрткой битов двойного слова, закрашенных цветом.
Получается байт свёртки с битами 0-6.
Теперь посмотрим, что будет, если возникла одиночная ошибка, например в 39 бите двойного слова. Бит 39 закрашен коричневым цветом на рисунке ниже.
При чтении из ОЗУ BECC делает свёртку битов по такой же схеме, далее ищется отличие в байте сверки при записи в ОЗУ и при чтении.
Раз это одиночная ошибка, то изменения в новом байте свёртки будут, очевидно, в битах 0,1,2,5,6.
Изменение в бите 6 сигнализирует о том, что произошла одиночная ошибка.
Изменения в битах 0,1,2,5 дают положение бита, где произошла ошибка.
Сложим веса битов 0,1,2,5 : 1 + 2 + 4 + 32 = 39.
Вот и нашлось место одиночной ошибки. Инвертируем бит 39 и ошибка исправлена!
Приведу еще пример одиночной ошибки в другом месте двойного слова – в 12 бите.
На рисунке ниже показано, как находится одиночная ошибка в 12 бите двойного слова.
Отличие битов двух байтов свёрток будет в битах 3,2. Сложим веса этих двух битов. 8 +4 = 12. Это и есть 12й бит двойного слова, в котором произошла одиночная ошибка.
Двойная ошибка определяется так. В 6 бите свёртки при чтении отличия нет, а в других битах свёртки при чтении отличие есть.
Это были примеры работы блока BECC в идеальном случае при возникновении одиночной ошибки. Приведённая схема коррекции кода называется так – это прямой корректирующий код Хемминга.
В реальности в чистом виде такой код не применяется, так как байт свертки при записи в ОЗУ двойного слова хранится на месте контрольных разрядов в том же ОЗУ и в них тоже может возникнуть ошибка. Поэтому в реальности применяется модернизированный код Хэмминга, который учитывает, что в байте свертки тоже может произойти потеря информации. Тогда задействуется бит 7 байта свёртки, который не использовался в прямом коде Хэмминга.
Резюмируя, можно сказать следующее:
Модернизированный код Хэмминга можно построить для двойного слова или 8 байт. Его нельзя построить для 4х байтов, 6 и 7 байтов. Негде будет хранить 8 бит байта свёртки. Его можно построить для 12, 16 и более байт. Но это не выгодно, так как в памяти будут ячейки, которые никогда не будут задействованы при работе ОЗУ.
Во всех ПК ОЗУ работает только с двойным словом из 8 байт.
-------------------------------------
Память ключей защиты (ПКЗ).
Оперативная память или ОЗУ это единое пространство для хранения информации. ЭВМ ЕС-1035 могла выполнять одновременно 16 различных программ. Современные ПК также могут выполнять одновременно несколько независимых программ или приложений. Проблема в том, что какая-то программа в принципе может писать или читать данные, предназначенные для другой программы. Это недопустимо. Чтобы избежать такой ситуации, применяют механизм ключей защиты (КЗ). Ключ защиты это 4 бита. Четырмя битами можно изобразить 16 чисел в двоичной СС. Операционная система присваивает программам различные ключи защиты от 1 до 15. Биты ключей защиты находятся в PSW – в слове состояния программы. В PSW находится адрес следующей команды, код условия, биты ключей защиты и другая информация. Для каждой программы есть своё PSW. Кроме этого, есть Память Ключей Защиты – это небольшое запоминающее устройство, по сути, маленькая память на 16 адресов. В эту память записываются диапазоны адресов ОЗУ для каждой независимой программы, точнее начальный адрес. Отведённый диапазон для конкретной программы будет варьироваться от этого начального адреса до начального адреса следующей программы. Тогда при обращении программы к ОЗУ по некоторому адресу, ключ защиты читается из PSW, он является адресом для памяти КЗ. Читается эта память и устанавливается, находится ли адрес ОЗУ из PSW в разрешённом диапазоне. Если не находится, то происходит «тяжёлый останов» ЭВМ или ПК. Как правило, такие ошибки возникают очень редко, так как всё происходит под управлением ОС, а там всё отлажено и проверено. Если сама ПКЗ ломается, тогда будет ошибка и надо её чинить. Как правило, сама ОС работает с КЗ = 0, приложения работают с КЗ от 1 до 15. Поэтому можно одновременно работать на ЭВМ или ПК с 15 независимыми программами или приложениями.
-----------------------------
Распределение ОЗУ.
ОЗУ имеет заводское распределение от нулевого байта до 1 Кбайта примерно. Даже если на ПК или ЭВМ нет еще ОС, распределение начальной части ОЗУ уже зарезервированы. Например, положение PSW. При установке ОС распределение начальной части ОЗУ расширяется. Там резервируются места для системы Ввода-Вывода и системы Прерываний. Об этом будет речь впереди. Диапазон адресов ОЗУ для ОС начинается не с нулевого адреса ОЗУ в Памяти Ключей Защиты, а с некоторого другого небольшого адреса.
Поэтому начальную часть ОЗУ нельзя использовать для других целей и она так защищена ПКЗ.
------------------------------------
Сотрудники Вычислительного Центра Главсредволговодстроя г. Саратов, 1977-1993.
-------------------------------
Если Вам понравился материал статьи, подпишитесь пожалуйста на мой канал в целом.
Для этого пройдите по ссылке ниже и нажмите кнопку "Подписаться"
https://dzen.ru/profile/editor/id/62cd3cfc63f88417d7e74b79