Программно конвейеризованные циклы

РЕГИСТРЫ

Рассмотрим теперь файлы регистров IA-64. В их число входят: 128 регистров общего назначения GR; 128 регистров с плавающей запятой FR; 64 регистра предикатов PR; 8 регистров перехода BR; 128 прикладных регистра AR; не менее 4 регистров идентификатора процессора CPUID; cчетчик команд IP, указывающий на адрес связки, содержащей исполняемую команду; регистр маркера текущего окна CFM, описывающий окно стека регистров и др.

Регистры CPUID являются 64-разрядными. В CPUID-регистрах 0 и 1 лежит информация о производителе, в регистре 2 находится серийный номер процессора, а в регистре 3 задается тип процессора (cемейство, модель, версия архитектуры и т.п.) и число CPUID-регистров. Разряды регистра 4 указывают на поддержку конкретных особенностей IA-64, т.е. тех, которые реализованы в данном процессоре.

Прикладные регистры AR0-AR127 - специализированные (в основном 64-разрядные) регистры, применяемые в IA-64 и IA-32. AR0-7 называются регистрами ядра; запись в них привилегирована, но они доступны на чтение в любом приложении и используются для передачи приложению сообщений от операционной системы.

Среди других прикладных регистров укажем на AR16 (RSC) - регистр конфигурации стека регистров, используемый для управления работой "машиной" стека регистров IA-64 (RSE); AR17 (BSP), в котором находится адрес в памяти, где сохраняется положение GR32 в текущем окне стека; AR40 (FPSR) - регистр состояния для команд с плавающей запятой IA-64; AR44 (ITC) - интервальный таймер; AR64 (PFS) - регистр предыдущего состояния функции, куда автоматически копируются некоторые другие регистры при вызове подпрограмм; AR65 (LC), используемый для организации циклов со счетчиком, и, наконец, 6-разрядный регистр эпилога AR66 (EC). Ряд AR-регистров является фактически регистрами IA-32 (дескриптор сегмента кодов, дескриптор сегмента стека и др.).

64-разрядные регистры GR0-127 применяются не только для целочисленных операций IA-64; GR8-31 в режиме IA-32 используются также под целочисленные регистры и регистры селекторов и дескрипторов сегментов IA-32. GR0-31 называются статическими регистрами (GR0 всегда содержит 0), а GR32-127 - стекируемыми регистрами. Статические регистры "видны" всем программам. Стекируемые регистры становятся доступными в программной единице через окно стека регистров, включающее локальные и выходные регистры, число которых задается командой alloc.

82-разрядные регистры с плавающей запятой FR0-127 также подразделяются на статические (FR0-31, причем всегда FR0=0.0, FR1=1.0) и вращаемые (FR32-127). FR8-31 в режиме IA-32 содержат числа с плавающей запятой и мультимедийные регистры.

Вращение регистров является в некотором роде частным случаем переименования регистров, применяемого во многих современных суперскалярных процессоров с внеочередным спекулятивным выполнением команд. В отличие от них, вращение регистров в IA-64 управляется программно. К обсуждению вращения регистров мы вернемся ниже, а содержимое FR будет рассмотрено в разделе, посвященном операциям с плавающей запятой.

64-разрядные регистры переходов BR0-7 применяются для указания адреса перехода в соответствующих командах перехода (если адрес перехода не кодируется в команде явно). Регистры предикатов PR0-63 являются одноразрядными; в них помещаются результаты команд сравнения. Обычно эти команды устанавливают сразу два геистра PR в зависимости от условия - соответственно истинность условия и его отрицания. Такая избыточность обеспечивает дополнительную гибкость.

В отечественном микропроцессоре E2K [3] предикатных регистров в два раза меньше. Хотя это позволяет хранить столько же условий, сколько в IA-64, в последней предикатные регистры применяются еще и для организации программно конвейеризованных циклов (Software Pipelining - SWP). Использование предикатных регистров - важнейшая особенность, кардинально отличающая IA-64 от всех других микропроцессоров, кроме E2K.

PR0-15 являются статическими (PR0 всегда равен 1), а PR16-63 - вращаемыми. Статические предикатные регистры используются в командах условного перехода. Кроме того, почти все команды IA-64 могут быть выполнены "под предикатом".

ПРОГРАММНО КОНВЕЙЕРИЗОВАННЫЕ ЦИКЛЫ

Cовременные оптимизирующие компиляторы суперскалярных RISC-процессоров активно используют технику SWP ([4]). Аппаратная поддержка SWP в IA-64 имеет принципиальное значение для увеличения производительности и эффективности использования оперативной памяти.

SWP-циклы аналогичны обычным аппаратным конвейерам. В таком цикле также имеется три фазы. В фазе заполнения конвейера (пролог) новая итерация цикла запускается на выполнение на каждой стадии. В фазе ядра на каждой стадии запускается одна итерация, и одна итерация завершается (конвейер заполнен). В фазе эпилога новых итераций не запускается, а завершается выполнение ранее запущенных итераций (см. Пример 3).

Пример 3.

Фрагмент программы в фортрановском представлении:

DO I=1,N       IND(I)=JND(I)+KENDDO

в ассемблерном:

Lbl:ld8 r8=[r5],8;; //Загрузка JND(I)add r9=r8,r7;; //r9=r8+r7st8 [r6]=r9,8 //Запись IND(I)br.cloop Lbl;; //Переход по счетчикуSWP-аналог:mov lc=99 //Установка LCmov ec=4 //Установка ECmov pr.rot=1<<16 //Установка PRLbl:(p16) ld8 r32=[r5],8;; //Загрузка JND(I)(p18) add r35=r34,r7;; //r35=r34+r7(p19) st8 [r6]=r36,8 //Запись IND(I) br.ctop Lbl;;

Число тактов T между запуском последовательных итераций цикла называется интервалом инициации. Мы рассмотрим только случай постоянного числа тактов. В простейшем случае T равно 1, очередная итерация цикла может запускаться на каждом такте.

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

Пример 4.

Фрагмент программы в фортрановском представлении:

DO I=1,N       S=S+A(I)*B(I)ENDDO

SWP-аналог:

Lbl:(p16) ldfd f50=[r5],8 //Загрузка A(I)(p16) ldfd f60=[r6],8 //Загрузка B(I)(p25) fma f41=f59,f69,f46 //f41=f59*f69+f46 br.ctop.sptk Lbl;; fadd f7=f42,f43 //Частичная сумма 1 fadd f8=f44,f45;; //Частичная сумма 2 fadd f9=f7,f8;; //Их сумма fadd f10=f9,f46 //Окончательная сумма

SWP поддерживается как для исходных циклов со счетчиком, использующих команду br.cloop, так и для циклов while. Для циклов со счетчиком на первой стадии цикла должен применяться PR16, а для циклов while - любой PR-регистр из области вращения. Предикаты последующих стадий должны иметь более высокие номера PR. Инициализация предикативных стадий возложена на программиста.

Как мы увидим, применение PR-регистров, вращаемых регистров GR и FR и специальных SWP-команд перехода позволяет не увеличивать размер кода SWP-цикла, что характерно для оптимизации циклов в RISC-процессорах. Вращение на одну регистрную позицию вышеупомянутых регистров осуществляется аппаратно при выполнении SWP-команды перехода (br.ctop - для циклов со счетчиком при расположении команды перехода в конце тела цикла).

Таблица 2. Прокрутка SWP-цикла (Пример 3(в)) по тактам

Номер такта

Команды и порты

Значения регистров перед br.ctop

  M I M B p16 p17 p18 p19 LC EC
1 ld8     br.ctop 1 0 0 0 99 4
2 ld8     br.ctop 1 1 0 0 98 4
3 ld8 add   br.ctop 1 1 1 0 97 4
4 ld8 add st8 br.ctop 1 1 1 1 96 4
... ... ... ... ... ... ... ... ... ... ...
99 ld8 add st8 br.ctop 1 1 1 1 0 4
100   add st8 br.ctop 0 1 1 1 0 3
101   add st8 br.ctop 0 0 1 1 0 2
102     st8 br.ctop 0 0 0 1 0 1
...         0 0 0 0 0 0

При выполнении такой команды вращение регистров осуществляется путем их переименования благодаря уменьшению на 1 базовых значений в CFM - соответственно полей CFM.rrb.gr, CFM.rrb.fr и CFM.rrb.pr. Вообще изменение полей rrb, приводящее к переименованию регистров, происходит при выполнении команд очистки rrb (clrrrb, clrrrb.pr) и переходов типа вызова процедур/возврата (br.call/br.ret) и SWP-переходов, в том числе br.ctop. Файлы вращаемых регистров с точки зрения их переименования зациклены: регистр с максимальным номером после вращения переходит в регистр с минимальным номером из области вращения. Так, PR63 после вращения становится PR16.

Рассмотрим теперь, как организовывается работа SWP-цикла со счетчиком. При этом используется регистр LC, в который помещается значение N-1 (N - число итераций цикла), и регистр ЕС, куда надо поместить число стадий в теле цикла. Пока LC больше 0, br.ctop продолжает выполнение цикла, уменьшая LC на 1 и вращая регистры на 1 путем уменьшения rrb. Команда br.ctop, принявшая решение о продолжении цикла, устанавливает в 1 регистр PR63, который после вращения становится PR16.

Когда LC становится равным 0, начинается фаза эпилога. В ней br.ctop будет продолжать цикл, уменьшая EC на 1 - до тех пор, пока EC не обнулится. Тогда br.ctop завершит цикл, передав управление на следующую команду.

Проиллюстрируем сказанное выше на конкретном примере SWP-цикла (в примере 3 мы незначительно модернизировали соответствующий пример из [1]).

Предположим, что все целые величины - 64-разрядные.

Предполагается, что в регистре GR5 лежит адрес начала массива IND, а в GR6 - адрес начала JND; K загружена в GR7. Первая команда ld8 загружает 8 байт из адреса, указанного в GR5, в GR8. В конце ее выполнения к GR5 прибавляется 8. Команда add складывает GR8 и GR7, помещая результат в GR9. Команда st8 записывает содержимое этого регистра в память, адрес которой находится в GR6, и в конце выполнения увеличивает его на 8.

В [1] соответствующий пример относится к 32-разрядным целым и предполагается, что команда ld4 занимает два такта. Это типично для микропроцессоров, и мы предполагаем, что ld8 также занимает два такта. Можно предположить, что в теле цикла (без br.cloop) остальные команды занимают один такт, тогда это тело состоит из четырех стадий, вторая из которых - пустая (ожидание завершения ld8 на втором такте).

Вследствие наличия большого числа ФИУ и соответствующих портов, команды цикла, представленные в примере 3, могли бы в принципе выполняться одновременно, если бы они работали с разными регистрами (т.е. не было бы взаимозависимости). Это хорошо видно из табл. 2, в которой нетрудно разглядеть аналогии с заполнением аппаратных конвейеров.

На тактах 1-3 происходит заполнение конвейера (пролог), такты 4-5 относятся к фазе ядра, такты 6-8 отвечают эпилогу. Если бы не было взаимозависимости, команды ld8, add и st8 могли бы работать параллельно в фазе ядра (предполагается, что имеется два порта памяти). Скажем, когда add начинает работу, ld8 могла бы начать новую загрузку, но уже в другой GR-регистр. В суперскалярных RISC-процессорах для достижения подобных целей приходится создавать отдельные коды для пролога и эпилога, раскручивать циклы, что приводит к увеличению длины кода.

В IA-64 эти проблемы решены элегантно и эффективно. Нет необходимости вручную заниматься переименованием регистров, чтобы избавиться от взаимозависимости - для этого есть вращение регистров. Не нужно писать пролог и эпилог - все автоматизировано за счет применения PR-регистров и SWP-команд.

SWP-аналог примера 3 использует команду br.ctop. Соответственно первой стадии (команда ld8) выделяется PR16, второй (add) - PR18, четвертой (st8) - PR19. Вместо статических GR7-9 мы будем использовать вращаемые регистры, начиная с GR32. Перед началом выполнения цикла в LC загружается значение N-1 (99), а в EC - 4 (на 1 больше числа стадий эпилога). Кроме того, нужно установить вращаемые PR-регистры, что делается сразу для всех предикативных регистров командой mov pr.rot.

Вследствие вращения регистров величина JND(I), загружаемая в GR32, двумя тактами позднее (по завершению ld8) уже оказывается в GR34. Аналогично, IND(I)+K, помещаемая в GR35, по завершению команды add (один такт) окажется в GR36. Эти "измененные" номера регистров должны кодироваться в программе.

Приведем, наконец, завершающий пример - цикл, рассчитывающий скалярное произведение векторов [1]. В примере 4 адреса начал A и B лежат в GR5 и GR6; предполагается, что ldfd используют два порта памяти, а времена выполнения ldfd и fma составляют 9 и 5 тактов соответственно (в [1] предполагается 9 тактов на ldfs). В команде br.ctop.sptk последняя компонента мнемокода - статическая "подсказка": статическое предсказание, что переход будет осуществлен.

В цикле вычисляются пять частичных сумм: A(1)*B(1)+A(6)*B(6)+..., A(2)*B(2)+ A(7)*B(7)+...,..., A(5)*B(5)+A(10)*B(10)+..., и все эти суммирования идут с шагом 5. В этом можно убедиться, если прокрутить вручную первые итерации цикла и учесть, что каждый раз при br.ctop происходит переименование регистров FR (как и PR). Поэтому A(I) попадает в f50 при ldfd, и девять итераций (девять тактов) спустя будет в f59, а B(I) из f60 окажется в f69, и т.д.

В примере 4 опущено обнуление регистров частичных сумм и другие подобные "мелочи" (до начала цикла). По завершению цикла пять частичных сумм складываются, и результирующая сумма S оказывается в f10. Если проанализировать этот исходно простой пример, отследив, почему используются те или иные номера регистров, то станет ясно, что SWP-оптимизация требует от программиста большой тщательности и знания времен выполнения команд. Более того, такая привязка означает, что если в процессорах IA-64 нового поколения изменятся времена выполнения команд (например, при переходе от Merced к McKinley), то оптимизированную программу для достижения высокой производительности необходимо переделать. Однако компактность и эффективность оптимизированных кодов несомненны.

IA-64 в первом приближении

Некоторые приведенные в статье данные о времени выполнения команд (ldfd/ldfs, fma), основанные на примерах в [1], могут оказаться иными в конкретной реализации Itanium. Однако если предположить, что оценки эти окажутся близкими к реальности, становится понятным высказывавшееся мнение о том, что Itanium будет эффективно работать с векторизуемыми кодами. Действительно, в этом случае большие задержки команд типа ldfs или fma будут исключены благодаря использованию SWP.

В рамках одной журнальной статьи трудно дать полное введение в такую сложную архитектуру, как IA-64. Автор же постарался представить наиболее важные отличительные особенности IA-64.

Об авторe

 

28.​ Защита информации в ЭВМ. Защита оперативной памяти.

Программные методы защиты основаны на использовании ключевых слов – паролей.

Классификация:

1. По типу идентифицируемых объектов.

· Пароли терминалов – обеспечивают доступ для входа в систему.

· Программ (файлов, записей, элементов) – определяют право пользования ПО.

· Пользователей – определяют статус учётной записи в рамках системы.

· Данных – определяют право на получения доступа к данным.

2. По структуре.

· Цифровые.

· Буквенные

3. По способу ввода.

· Аппаратные.

· С помощью электронных карт

· С помощью клавиатуры.

4. По месторасположению.

· Внутренние (часть текста запроса).

· Внешние.

· С фикс местоположением.

· Плавающие.

5. По времени использования

· Неограниченное.

· Разовое.

· Периодически заменяемые.

Аппаратная защита информации на внешнем носители невозможна.

Организация защиты оперативной памяти.

В современных ВМ, возможно одновременное выполнение нескольких программ. Каждой программе предоставлено своё адресное пространство и права доступа по отношению к адресным пространствам других программ. Необходимо установить механизм защиты, обеспечивающий невмешательство одной программы, в адресное пространство другой.

Чтобы воспрепятствовать разрушению целостности данных программы, нужно установить запрет на модифицируемость данных, со стороны другой программы. Более того, иногда нужно запретить и чтение данных.

Рассмотрим механизмы защиты памяти:

· Защита отдельных ячеек. В каждой ячейки памяти выделяется бит защиты, установка этого бита в единицу, запрещает запись в данную ячейку. Не типичен для современных ПК.

· Кольцевая система защиты. Происходит разделения прав доступа на несколько уровней, каждый из уровней называется уровнем привилегий. Предусматривают как минимум два режима работы ЦП: пользовательский и системный ( его часто называют режимом супервизора – «надзирателя» ). Системный уровень самый привилегированный, ему доступны все ресурсы ВМ. Переход из пользовательского режима в системный и наоборот осуществляется специальной командой. Такую систему защиты часто изображают в виде концентрических окружностей (откуда и произошло название). В центре окружности располагают самую приоритетную системную зону, а все остальные располагают вокруг нею в порядке уменьшения приоритета.

· Метод граничных регистров. Наиболее распространённый метод. Реализация предполагает наличие в ЦП двух граничных регистров. Заполнение граничных регистров производится ОС при загрузке программы. При каждом обращении к памяти проверяется, попадает ли используемый адрес в установленные границы. Такую проверку, например, можно организовать на этапе преобразования виртуального адреса в физический. При нарушении границы доступ к памяти блокируется, и формируется запрос прерывания, вызывающий соответствующую процедуру операционной системы. Запись в граничные регистры возможно только в системном режиме.

Метод ключей защиты. Метод позволяет организовать защиту несмежных областей памяти. Каждому блоку ставится в соответствие некоторый код, называемый ключом защиты памяти. Каждой программе, в свою очередь, присваивается код защиты программы. Условием доступа программы к конкретному блоку памяти служит совпадение ключей защиты памяти и программы, либо равенство одного из этих ключей нулю. Нулевое значение ключа защиты программы разрешает доступ ко всему адресному пространству и используется только программами операционной системы. Распределением ключей защиты программы ведает операционная система. Ключ защиты программы обычно представлен в виде отдельного поля слова состояния программы, хранящегося в специальном регистре. Ключи защиты памяти хранятся в специальной памяти. При каждом обращении к ОП специальная комбинационная схема производит сравнение ключей защиты памяти и программы. При совпадении доступ к памяти разрешается. Действия в случае несовпадения ключей зависят от того, какой вид доступа запрещен: при записи, при чтении или в обоих случаях. Если выяснилось, что данный вид доступа запрещен, то так же как и в методе граничных регистров формируется запрос прерывания и вызывается соответствующая процедура операционной системы.

Защита в IA-32.

Рассмотрим лишь основные тезисы, реализованные в системе защиты IA-32:

· Защита по всем сегментам.

· Защита по страницам. Реализована крайне примитивно, за счёт введения бита режима. Одно состояние отвечает за режим супервизора, а второе за пользовательский режим.

· Операции разбиты по привилегиям.

Код может обращаться к коду только того же уровня, но может обращаться к данным более низкого уровня привилегий и своего.

 

29.​ Архитектура и виды ввода-вывода в ЭВМ. Способы организации адресного пространства ввода-вывода. Технология plug & play.

Помимо центрального процессора (ЦП) и памяти, третьим ключевым элементом архитектуры ВМ является системаввода/вывода (СВВ). СВВ призвана обеспечить обмен информацией между ядром ВМ и периферийными устройствами.

Две основные функции CВВ:

· обеспечение интерфейса с ЦП и памятью;

· обеспечение интерфейса с одним или несколькими периферийными устройствами. Можно выделить три основных способа подключения СВВ к ядру процессора:

а — раздельными шинами памяти и ввода/вывода; б — с совместно используемыми линиями данных и адреса; е — подключение на общих правах с процессором и памятью

CPU отличает устройства по адресам (не ОП!)=> два уровня адресации.

Адресное пространство системы ввода/вывода

За каждым периферийным устройством закрепляется 3 адреса: RGD, RGC, RGS (регистр данных команд, состояния). Адреса регистров могут настраиваться. Регистр состояния чаще всего 1 байт. Если их не хватает – то добавляют «байты уточненного состояния» - у них отдельные адреса.

Существует 2 способа организации адресного пространства:

1. С раздельными адресными пространствами для ОП и устройств в/в.

В шине управления добавляется линия Memory/IO. M/IO=1 соответствует адресу памяти на шине адреса. M/IO=0 соотв. адресу IO. M/IO фактически адресный бит.

Достоинства выделенного адресного пространства:

- адрес внешнего устройства в команде ввода/вывода может быть коротким. В большинстве СВВ количество внешних устройств намного меньше количества ячеек памяти. Короткий адрес ВУ подразумевает такие же короткие команды ввода/вывода и простые дешифраторы;

- программы становятся более наглядными, так как операции ввода/вывода выполняются с помощью специальных команд;

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

Недостатки выделенного адресного пространства:

- ввод/вывод производится только через аккумулятор центрального процессора. Для передачи информации от ВУ в РОН, если аккумулятор занят, требуется выполнение четырех команд (сохранение содержимого аккумулятора, ввод из ВУ, пересылка из аккумулятора в РОН, восстановление содержимого аккумулятора);

- перед обработкой содержимого ВУ это содержимое нужно переслать в ЦП.

2. I/O с отображением в память.

Достоинства совмещенного адресного пространства:

- расширение набора команд для обращения к внешним устройствам, что позволяет сократить длину программы и повысить быстродействие;

- значительное увеличение количества подключаемых внешних устройств;

- возможность внепроцессорного обмена данными между внешними устройствами, если в системе команд есть команды пересылки между ячейками памяти;

- возможность обмена информацией не только с аккумулятором, но и с любым регистром центрального процессора.

Недостатки совмещенного адресного пространства:

- сокращение области адресного пространства памяти;

- усложнение декодирующих схем адресов в СВВ;

- трудности распознавания операций передачи информации при вводе/выводе среди других операций. Сложности в чтении и отладке программы, в которой простые команды вызывают выполнение сложных операций ввода/вывода;

Виды I/O.

Существуют 3 типа:

1. Программно – управляемый (условный).

2. По прерываниям.

3. С прямым доступом к памяти DMA.

1. Программно - управляемый обмен.

Самый простой не требует аппаратной поддержки в CPU, но затраты времени больше.

1) Чтение RGS. Анализируется бит готовности периферийного устройства.

2) В RGC команд записывается управляющее слово.

3) Происходит обмен.

Инициатива по ВВ принадлежит CPU. Инициатива по обмену между регистрами – устройствам ВВ.

Минус – сильная загрузка CPU.

Плюс – хорошо работает с быстрыми устройствами на быстрой шине.

2. В/в по прерыванию. CPU не ждет когда устройство готово – оно выдает прерывание. Обработчик прерывания реализует алгоритм обмена. Лучше подходит для медленных устройств.

Нужно добавить линию INT, средство формирования вектора прерывания. Более медленный способ (сохранение текущего состояния при организации прерывания), однако улучшается использование CPU/

Минус – затраты оборудования, ниже скорость обмена.

Плюс – меньше загрузка CPU.

3. Прямой доступ к памяти.

Чтение\запись происходит в два этапа по причине, что команд для обмена ОП-RG(ПУ) не существует, а существуют две команды (вариант для записи):

IN RG(IO), I\O

MOV MEM, RG(IO)

CPU участвует в управление ПДП, но это участие коротко.

Другие варианты:

Соотношение способов организации ввода/вывода

• Средства, необходимые для организации условного ввода/вывода, требуются и для ввода/вывода по прерываниям.

• Средства, необходимые для организации условного ввода/вывода, ввода/вывода по прерываниям, требуются и при прямом доступе к памяти.

CPU отличает устройства по адресам (не ОП!)=> два уровня адресации.

Адресное пространство системы ввода/вывода

За каждым периферийным устройством закрепляется 3 адреса: RGD, RGC, RGS (регистр данных команд, состояния). Адреса регистров могут настраиваться. Регистр состояния чаще всего 1 байт. Если их не хватает – то добавляют «байты уточненного состояния» - у них отдельные адреса.

Существует 2 способа организации адресного пространства:

1. С раздельными адресными пространствами для ОП и устройств в/в.

В шине управления добавляется линия Memory/IO. M/IO=1 соответствует адресу памяти на шине адреса. M/IO=0 соотв. адресу IO. M/IO фактически адресный бит.

Достоинства выделенного адресного пространства:

- адрес внешнего устройства в команде ввода/вывода может быть коротким. В большинстве СВВ количество внешних устройств намного меньше количества ячеек памяти. Короткий адрес ВУ подразумевает такие же короткие команды ввода/вывода и простые дешифраторы;

- программы становятся более наглядными, так как операции ввода/вывода выполняются с помощью специальных команд;

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

Недостатки выделенного адресного пространства:

- ввод/вывод производится только через аккумулятор центрального процессора. Для передачи информации от ВУ в РОН, если аккумулятор занят, требуется выполнение четырех команд (сохранение содержимого аккумулятора, ввод из ВУ, пересылка из аккумулятора в РОН, восстановление содержимого аккумулятора);

- перед обработкой содержимого ВУ это содержимое нужно переслать в ЦП.

2. I/O с отображением в память.

Достоинства совмещенного адресного пространства:

- расширение набора команд для обращения к внешним устройствам, что позволяет сократить длину программы и повысить быстродействие;

- значительное увеличение количества подключаемых внешних устройств;

- возможность внепроцессорного обмена данными между внешними устройствами, если в системе команд есть команды пересылки между ячейками памяти;

- возможность обмена информацией не только с аккумулятором, но и с любым регистром центрального процессора.

Недостатки совмещенного адресного пространства:

- сокращение области адресного пространства памяти;

- усложнение декодирующих схем адресов в СВВ;

- трудности распознавания операций передачи информации при вводе/выводе среди других операций. Сложности в чтении и отладке программы, в которой простые команды вызывают выполнение сложных операций ввода/вывода;

Plug-And-Play (PNP) - Букв. вставляй и играй. Технологий автоматического распределения ресурсов компьютера между его компонентами и периферийными устройствами. Аппаратные средства Plug and Play - это множество устройств компьютера, которые автоконфигурируемы операционной системой Plug and Play.

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

Подключаемые к PCI устройства (платы) имеют несколько (зависит от устройства) регистров для конфигурирования, инициализации и обработки серьезных ошибок. Адресацию к ним обеспечивает конфигурационное адресное пространство.

Для чтения конфигурационной информации каждой платы, устройство выбирается, когда сигнал IDSЕL (выбор устройства инициализации для чтения/записи) активен.

Устройство обязательно содержит три конфигурационных регистра ADRESS, READ_DATA, WRITE_DATA.

Во время фазы адреса конфигурационного цикла конфигурационная шина адресует один из регистров

Таким образом, при чтении/записи конфигурационной информации плата выбирается, когда активен сигнал IDSEL (Initialization Device Select).

Порты WRITE_DATA и READ_DATA используются для обмена данными с регистрми PnP. Адрес порта WRITE_DATA

После конфигурирования устройство не откликается ни на какие сигналы на конфигурационной шине.

Все шаги конфигурирования выполняет процедура POST (если BIOS имеет поддержку PnP) или операционная система при загрузке. PnP BIOS может ограничиться конфигурированием и активацией только устройств, участвующих в загрузке, оставляя конфигурирование и активацию дополнительных устройств операционной системе. BIOS без поддержки PnP может использовать необходимые для загрузки устройства, сконфигурированные с параметрами по умолчанию, а изоляцией карт, сбором информации и конфигурированием займется операционная система при загрузке.

30.​ Программно – управляемый ввод-вывод. Ввод-вывод по прерываниям.

(под МВВ (модуль ввода/вывода) понимать СПВВ, либо, в более простом случае, канал в/в)

Наиболее простым методом управления вводом/выводом является программно управляемый ввод/вывод, часто называемый также вводом /выводом с опросом. Здесь ввод/вывод происходит под полным контролем центрального процессора и реализуется специальной процедурой ввода/вывода. В этой процедуре ЦП с помощью команды ввода/вывода сообщает модулю ввода/вывода, а через него и внешнему устройству о предстоящей операции. Адрес модуля и ВУ, к которому производится обращение, указывается в адресной части команды ввода или вывода. Модуль исполняет затребованное действие, после чего устанавливает в единицу соответствующий бит в своем регистре состояния. Ничего другого, чтобы уведомить ЦП, модуль не предпринимает. Следовательно, для определения момента завершения операции или пересылки очередного элемента блока данных процессор должен периодически опрашивать и анализировать содержимое регистра состояния МВВ.

Иллюстрация процедуры программно управляемого ввода блока данных с устройства ввода приведена на рис. 1. Данные читаются пословно. Для каждого читаемого слова ЦП должен оставаться в цикле проверки, пока не определит, что слово находится в регистре данных МВВ, то есть доступно для считывания.

Процедура начинается с выдачи процессором команды ввода, в которой указан адрес конкретного МВВ и конкретного ВУ. Существуют четыре типа команд В/ВЫВ, которые может получить МВВ: управление, проверка, чтение и запись.

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

Команда проверки применяется для проверки различных ситуаций, возникающих в МВВ и ВУ в процессе ввода/вывода. С помощью таких команд ЦП способен выяснить, включено ли ВУ, готово ли оно к работе, завершена ли последняя операция ввода/вывода и не возникли ли в ходе ее выполнения какие-либо ошибки. Действие команды сводится к установке или сбросу соответствующих разрядов регистра состояния МВВ.

Команда чтения побуждает модуль получить элемент данных из ВУ и занести его в регистр данных (РД). ЦП может получить этот элемент данных, запросив МВВ поместить его на шину данных.

Команда записи заставляет модуль принять элемент данных (байт или слово) с шины данных и переслать его в РД с последующей передачей в ВУ.

ßРис. 1. Программно управляемый ввод данных

Если к МВВ подключено несколько ВУ, то в процедуре ввода/вывода нужно производить циклический опрос всех устройств, с которыми в данный момент производятся операции В/ВЫВ.

Из блок-схемы (см. рис. 1) явно виден основной недостаток программно управляемого В/ВЫВ — неэффективное использование процессора из-за ожидания готовности очередной порции информации, в течение которого никаких иных полезных действий ЦП не выполняет. Кроме того, пересылка даже одного слова требует выполнения нескольких команд. ЦП должен тратить время на анализ битов состояния МВВ, запись в МВВ битов управления, чтение или запись данных со скоростью, определяемой внешним устройством. Все это также отрицательно сказывается на эффективности ввода/вывода.

Главным аргументом в пользу программно управляемого ввода/вывода является простота МВВ, поскольку основные функции по управлению В/ВЫВ берет на себя процессор. При одновременной работе с несколькими ВУ приоритет устройств легко изменить программными средствами (последовательностью опроса). Наконец, подключение к СВВ новых внешних устройств или отключение ранее подключенных также реализуется без особых сложностей.

Ввод/вывод по прерываниям

Основным недостатком программно управляемого B/BЫВ являются простои процессора в ожидании, пока модуль ввода/вывода выполнит очередную операцию. Альтернативой может быть вариант, когда ЦП выдает команду В/ВЫВ, а затем продолжает делать другую полезную работу. Когда ВУ готово к обмену данными, оно через МВВ извещает об этом процессор с помощью запроса на прерывание. ЦП осуществляет передачу очередного элемента данных, после чего возобновляет выполнение прерванной программы.

Обсудим процесс ввода блока данных с использованием В/ВЫВ по прерываниям (рис. 2). Оставим без внимания такие подробности, как сохранение и восстановления контекста, действия, выполняемые при завершении пересылки блока данных, а также в случае возникновения ошибок.

ßРис. 2. Ввод данных по прерыванию

Процедура ввода блока данных по прерываниям реализуется следующим образом. ЦП выдает команду чтения, а затем продолжает выполнение других заданий, например другой программы. Получив команду, МВВ приступает к вводу элемента данных с ВУ. Когда считанное слово оказывается в регистре данных модуля, МВВ формирует на управляющей линии сигнал прерывания ЦП. Выставив запрос, МВВ помещает введенную информацию на шину данных, после чего он готов к следующей операции В/ВЫВ. ЦП в конце каждого цикла команды проверяет наличие запросов прерывания. Когда от МВВ приходит такой сигнал, ЦП сохраняет контекст текущей программы и обрабатывает прерывание. В рассматриваемом случае ЦП читает слово из модуля, записывает его в память и выдает модулю команду на считывание очередного слова. Далее ЦП восстанавливает контекст прерванной программы и возобновляет ее выполнение.

Этот метод эффективнее программно управляемого В/ВЫВ, поскольку устраняет ненужные ожидания, однако обработка прерывания занимает достаточно много времени ЦП. Кроме того, каждое слово, пересылаемое из памяти в модуль В/ВЫВ или в противоположном направлении, как и при программно управляемом В/ВЫВ, проходит через ЦП.

Реализация ввода/вывода по прерываниям

При реализации ввода/вывода по прерываниям необходимо дать ответы два вопроса. Во-первых, определить, каким образом ЦП может выяснить, какой из МВВ и какое из подключенных к этому модулю внешних устройств выставили запрос. Во-вторых, при множественных прерываниях требуется решить, какое из них должно быть обслужено в первую очередь.

Сначала рассмотрим вопрос идентификации устройства. Здесь возможны три основных метода:

■ множественные линии прерывания;

■ программная идентификация;

■ векторное прерывание.

Наиболее простой подход к решению проблемы определения источника запроса — применение множественных линий прерывания между ЦП и модулями ввода/вывода, хотя выделение слишком большого количества управляющих линий для этих целей нерационально. Более того, даже если присутствует несколько линий прерывания, желательно, чтобы каждая линия использовалась всеми МВВ, при этом для каждой линии действует один из двух остальных методов идентификации устройства.

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

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

Наиболее распространены два варианта векторной идентификации источника запроса прерывания: цепочечный опрос и арбитраж шины.

Рис. 3. Идентификация запроса с помощью вектора прерывания

При цепочечном методе для передачи запроса прерывания модули ввода/вывода совместно используют одну общую линию. Линия подтверждения прерывания последовательно проходит через все МВВ. Когда ЦП обнаруживает запрос прерывания, он посылает сигнал по линии подтверждения прерывания. Этот сигнал движется через цепочку модулей, пока не достигнет того, который выставил запрос. Запросивший модуль реагирует путем выдачи на шину данных своего вектора прерывания.

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

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

//===========дополнение на всякий случай==============

Модуль ввода/вывода в составе вычислительной машины отвечает за управление одним или несколькими ВУ и за обмен данными между этими устройствами с одной стороны, и основной памятью или регистрами ЦП — с другой. Основные функции МВВ можно сформулировать следующим образом:

- локализация данных;

- управление и синхронизация;

- обмен информацией;

- буферизация данных;

- обнаружение ошибок.

31.​ Ввод-вывод с прямым доступом к памяти.

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

Чтение\запись происходит в два этапа по причине, что команд для обмена ОП-RG(ПУ) не существует, а существуют две команды (вариант для записи):

IN RG(IO), I\O

MOV MEM, RG(IO)

CPU участвует в управление ПДП, но это участие коротко.

Контроллер ПДП может управлять системной шиной. Активными наз. устройства. способные управлять сис. шиной. Возможен конфликт в борьбе за системную шину => необходим орбитр. Существуют два типа:

- централизованный – схема в CPU

- распределенный – схема в ПУ(i) i=1…n

 

32.​ Структура и функции контроллера ПДП.

Поскольку ЦП не участвует в обмене с ПДП, а обменом нужно управлять, в состав системы вводится контроллер прямого доступа к памяти (КПДП), который и вырабатывает необходимые управляющие сигналы и адреса ОП.

КПДП выполняет следующие функции:

1. Управление инициируемой ЦП или ПУ передачей данных между ОП и ПУ.

2. Задание размера блока данных, который подлежит передаче, и области памяти, используемой при передаче.

3. Формирование адресов ячеек ОП, участвующих в передаче.

4. Подсчет числа единиц данных (байт, слов), передаваемых от ОП к ПУ или обратно, и определение момента завершения операции ввода-вывода.

КПДП может быть как один на несколько ПУ, так и каждое ПУ может иметь свой КПДП.

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

Когда пересылка завершена (при нулевом значении в ТСчД), КПДП снимает сигнал «Запрос ПДП», в ответ на что ЦП снимает сигнал «Подтверждение ПДП» и вновь берет на себя управление системной шиной, то есть ЦП вовлечен в процесс ввода/вывода только в начале и конце передачи.

Эффективность ПДП зависит от того, каким образом реализовано распределение системной шины между ЦП и КПДП в процессе пересылки блока. Здесь может применяться один из трех режимов:

■ блочная пересылка;

■ пропуск цикла;

■ прозрачный режим.

При блочной пересылке КПДП полностью захватывает системную шину с момента начала пересылки и до момента завершения передачи всего блока. На весь этот период ЦП не имеет доступа к шине.

В режиме пропуска цикла КПДП после передачи каждого слова на один цикл шины освобождает системную шину, предоставляя ее на это время процессору. Поскольку КПДП все равно должен ждать готовности ПУ, это позволяет ЦП эффективно распорядиться данным обстоятельством.

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

На практике используется следующий механизм:

КПДП инициализирует регистры РгТАД ТСчД сам, считывая управляющие слова (УС) из области ОП, которую ему укажет процессор. Эта последовательность управляющих слов наз. программа работы КПДП, её формирует процессор.

Формат УС.

КОП Начальный адрес размер

Регистр, куда пишется УС содержит не менее 4 слов. При завершении обработки очередного УС, КПДП посылает запрос на прерывание и устанавливает соотв. бит в состояние завершения. CPU анализирует бит, если он в заверш. состоянии, то процессор разрешает контроллеру выполнение следующ. команды.

 

33.​ Сопроцессоры (каналы) ввода–вывода: назначение структуры, режимы работы. Основное отличие сопроцессора ввода–вывода и контроллера ПДП.

Классификация сопроцессоров I/O

В зависимости от соотношения быстродействия ОП и ПУ в каналах I/O могут реализовываться два режима работы: монопольный (селекторный), разделения времени (мультиплексирования).

Монопольный режим. После установки связи между каналом и ПУ последнее монополизирует канал на все время, пока полностью не завершится инициированная процессором программа управлением сопроцессором I/O работы с данным ПУ и не будут произведены все предусмотренные этой программой передачи данных между ОП и ПУ. На все время выполнения данной программы I/O канал оказывается занятым для других ПУ.

Режим разделения времени (мультиплексный). Несколько ПУ разделяют во времени канал I/O, при этом каждое из параллельно работающих с данным каналом ПУ связывается с каналом на короткие промежутки времени только после того, как ПУ подготовлено к приему или выдаче очередной порции информации. Промежуток времени, в течение которого происходит передача информации между каналом и подготовленным к этому ПУ, может быть назван сеансом связи. Сеансы связи различных ПУ чередуются между собой. Во время сеанса связи одного из устройств с каналом другие устройства могут выполнять работу не требующую использования средств канала.

В соответствии с преимущественно реализуемым режимом работы различают каналы I/O мультиплексный, осуществляющий мультиплексирование ПУ, и селекторный, взаимодействующий с ПУ в монопольном режиме.

В монопольном режиме после установления связи между каналом и ВУ последнее монополизирует канал на все время до завершения инициированной процессором канальной программы и всех предусмотренных этой программой пересылок данных между ВУ и ОП. На все время выполнения канальной программы канал оказывается недоступным для других ВУ. Данную процедуру обеспечивает селекторный канал ввода/вывода. Отметим, что в блок-мультиплексном канале в рамках сеанса связи пересылка блока осуществляется в монопольном режиме.

 


СПВВ работая в селекторном режиме может вести обмен только с одним ПУ, при этом могут одновременно работать несколько ПУ, но обмен СПВВ будет вести только с одним. При работе

Подканал – средства канала, выделенные для обслуживания одного ПУ.

 

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

С учетом производительности ВУ в КВВ реализуются два режима работы: мультиплексный (режим разделения времени) и монопольный.

В мультиплексном режиме несколько внешних устройств разделяют канал во времени, при этом каждое из параллельно работающих с каналом ВУ связывается с КВВ на короткие промежутки времени только после того, как ВУ будет готово к приему или выдаче очередной порции информации (байта, группы байтов и т. д.). Такая схема принята в мультиплексном канале ввода/вывода. Если в течение сеанса связи пересылается один байт или несколько байтов, образующих одно машинное слово, канал называется байт-мультиплексным. Канал, в котором в пределах сеанса связи пересылка данных выполняется поблочно, носит название блок-4 мультиплексного.

Подканал – средства канала, выделенные для обслуживания одного ПУ.

 

 

 


Мультиплексный канал обслуживает несколько параллельно работающих ПУ, попеременно организуя с ними сеансы связи для передачи между ОП и ПУ небольших порций информации (1 байта или нескольких). Если несколько ПУ готовы к сеансу связи и запрашивают обслуживание со стороны мультиплексного канала, то канал выбирает одно из них в соответствии с принятыми для данной системы приоритетными правилами, например в порядке подключения устройств к каналу. Остальные устройства, готовые к сеансу связи, должны ожидать, когда подойдёт очередь их обслуживания. Мультиплексный канал, предназначен главным образом для работы со сравнительно медленными устройствами, способными ожидать обслуживание без потери информации. Аппаратурные средства мультиплексного канала можно разделить на две части: средства предназначенные для обслуживания отдельных ПУ, присоединённых к каналу, и оборудования, являющимся общим для всех устройств и разделяемой со всеми устройствами во времени.

Число подканалов, определяет число одновременно работающих с данным каналом ПУ. Физически подканал реализуется в виде участка памяти, в котором хранятся параметры операции ввода-вывода, выполняемой данным устройством: текущее значение адреса и счётчика данных, код и указатели операции ввода-вывода. В качестве памяти для хранения данных параметров может использоваться либо специализированная память, встроенная в мультиплексный канал, либо участок ОП машины.

 

34.​ Принципы организации контроля функционирования ЭВМ. Классификация методов контроля. Контроль оперативной памяти. Код Хемминга.

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

Аппаратный:

Наличие аппаратного контроля означает, что операционный контроль осуществляется непосредственно во время процесса выполнения операций. При введении аппаратного контроля вводится избыточность разрядов (пространственная).

Должен обеспечивать:

1) контроль данных

2) контроль команд – имеется дескриптор выполняемости, если он взведен – это команда, иначе – данные.

3) контроль адресов – не выходит ли адрес за пределы сегмента (при сегментно-страничной организации)

Оперативный контроль – это контроль, который производится постоянно:

- сквозной (контролируются все устройства)

- локальный (контролируется конкретное устройство)

Встроенный контроль – контроль, при котором в систему встраиваются специальные датчики, которые контролируют электрические параметры. Чаще всего используются в источниках питания.

Тестовый – различного рода тестирование:

- контролирующий – тестовые программы с заранее известным результатом

- диагностирующий – тестовые программы, выявляющие место сбоя

Программно-логический контроль:

Контроль основан на формировании результата выполнения операции 2-мя различными независимыми путями и дальнейшем их сравнении. Необходимо выявлять как случайные ошибки, так и ошибки вызванные отказами.

Можно выделить следующие методы:

- метод программного счета. Одна и та же программа прокручивается несколько раз, зачастую достаточно двух прогонов. Плохо определяются ошибки вызванные отказами.

- метод обратного счета. Сначала решается прямая задача, затем обратная, при этом возникает необходимость писать 2 программы, сравнивать результаты прямого и обратного счета с учетом погрешностей. Выгоден только при небольших размерах обратного алгоритма.

- решение задачи по двум алгоритмам: более и менее точному. Недостатки: необходимость написания двух программ; собственно, поиск второго, более простого, алгоритма.

- метод контрольных точек. В этом случае в программу вводится процедура для выполнения контроля. Этот метод реагирует не на случайные ошибки, а на отказ.

2-ой и 3-ий методы взаимодополняют друг друга.

Для реализации контроля вводится избыточность:

1) временная – увеличение времени выполнения операций для контроля.

2) пространственная – увеличение разрядности данных для контроля.

Обнаружение и исправление ошибок

При работе с полупроводниковой памятью не исключено возникновение различного рода отказов и сбоев. Причиной отказов могут быть производственные дефекты, повреждение микросхем или их физический износ. Проявляются отказы в том, что в отдельных разрядах одной или нескольких ячеек постоянно считывается 0 или 1, вне зависимости от реально записанной туда информации. Сбой - это случайное событие, выражающееся в неверном считывании или записи информации в отдельных разрядах одной или нескольких ячеек, не связанное с дефектами микросхемы. Как отказы, так и сбои крайне нежелательны, поэтому в большинстве систем основной памяти содержатся схемы, служащие для обнаружения и исправления ошибок.

Рассмотрим принципы контроля, связанные с введением избыточных данных.

На рисунке показано, каким образом осуществляются обнаружение и исправление ошибок. Перед записью М-разрядных данных в память производится их обработка, обозначенная на схеме функцией «f», в результате которой формируется добавочный К-разрядный код. В память заносятся как данные, так и этот вычис­ленный код, то есть (М+К)-разрядная информация. При чтении информации повторно формируется К-разрядный код, который сравнивается с аналогичным кодом, считанным из ячейки. Сравнение приводит к одному из трех результатов:

- Не обнаружено ни одной ошибки. Извлеченные данные подаются на выход памяти.

- Обнаружена исправимая ошибка. Биты данных и добавочного кода подаются на схему коррекции. После исправления ошибки в данных они поступают на выход памяти.

- Обнаружена неисправимая ошибка. Выдается сообщение о неисправимой ошибке.

Коды, используемые для подобных операций, называют корректирующими кодами или кодами с исправлением ошибок.

В основе корректирующих кодов лежит следующая идея. Для кон­троля двоичного информационного кода длиной М бит добавим к ней К дополни­тельных контрольных разрядов. В этом случае из возможных N = 2М"К комбинаций интерес представляют только L = 2м последовательностей, которые называют: разрешенными. Оставшиеся N - L последовательностей назовем запрещенными. Если при обработке (записи в память, считывании или передаче) разрешенной кодовой последовательности произойдут ошибки и возникнет одна из запрещенных после­довательностей, то тем самым эти ошибки обнаруживаются. Если же ошибки пре­вратят одну разрешенную последовательность в другую, то такие ошибки не могут быть обнаружены. Благодаря свойствам контрольных разрядов, характерным для конкретных методов контроля, в некоторых случаях возможно определить не только наличие, но и местоположение ошибки, а также произвести её коррекцию.

Простейший вид корректирующего кода основан на добавлении к каждому байту инфор­мации одного бита паритета. Бит паритета — это дополнительный бит, значение которого устанавливается таким, чтобы суммарное число единиц в данных, с уче­том этого дополнительного разряда, было четным (или нечетным). При чтении из памяти вычисляется бит паритета для считанных информационных битов, результат сравнивается с битом па­ритета, вычисленным при записи и хранившимся в памяти. Метод позволяет об­наружить ошибку, если исказилось нечетное количество битов, при четном числе ошибок метод неработоспособен. Данный метод позволяет только обнаруживать ошибки, причём местоположение ошибки остаётся неизвестным.

Существует более совершенный метод, основанный на использовании битов паритета. При его использовании биты данных представляются в виде матрицы, к каждой строке и столбцу которой добавляется бит паритета. Для 64-разрядных данных этот подход иллюстрирует таблица 1:

Таблица 1. Формирование корректирующего кода для 64-битовых данных

  0 1 2 3 4 5 6 7  
0 D0 D1 D2 D3 D4 D5 D6 D7 C0
1 D8 D9 D10 D11 D12 D13 D14 D15 C1
2 D16 D17 D18 D19 D20 D21 D22 D23 C2
3 D24 D25 D26 D27 D28 D29 D30 D31 C3
4 D32 D33 D34 D35 D36 D37 D38 D39 C4
5 D40 D41 D42 D43 D44 D45 D46 D47 C5
6 D48 D49 D50 D51 D52 D53 D54 D55 C6
7 D56 D57 D58 D59 D60 D61 D62 D63 C7
  K0 K1 K2 K3 K4 K5 K6 K7 P

Здесь D — биты данных, С — столбец битов паритета строк, К — строка битов паритета столбцов, Р — бит паритета, кон­тролирующий столбец С и строку К. Таким образом, к 64 битам данных нужно до­бавить 17 бит паритета: по 8 бит на строки и столбцы и один дополнительный бит для контроля строки и столбца битов паритета. Если в одной строке и одном столбце обнаружено нарушение паритета, для исправления ошибки достаточно просто инвертировать бит на пересечении этих строки и столбца. Если ошибка паритета выявлена только в одной строке или только одном столбце либо одновременно в нескольких строках и столбцах, фиксируется многобитовая ошибка и формирует­ся признак невозможности коррекции.

Недостаток рассмотренного приема в том, что он требует большого числа до­полнительных разрядов. Более эффективным представляется код, предложенный Ричардом Хэммингом и носящий его имя (код Хэмминга).

В качестве иллюстрации использования данной концепции, приведём код, обнаруживающий и исправляющий однобитовые ошибки в 8-разрядных словах.

Сначала определим требуемую длину корректирующего кода. В соответствии с рис., на вход схемы сравнения поступают два К-разрядных зн


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



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