Ячейки памяти и их адреса. Общая структурная схема процессора

Архитектура компьютера

Основные элементы компьютера.

Компьютер состоит из 4-х структурных компонентов:

1) Процессор.

Осуществляет контроль за действиями компьютера, а также выполняет функции обработки данных. Если в системе есть только один процессор, он часто называется центральным процессором (CPU – central processing unit)

2) Основная память.

Здесь хранятся данные и программы. Эта память является временной. Часто её называют реальной или оперативной памятью.

3) Устройства ввода-вывода.

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

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

Основная память

PC – программный счетчик

IR – регистр команд

MAR – регистр адреса памяти

MBR – регистр буфера памяти

I/O AR – регистр адреса ввода-вывода

I/O BR – регистр буфера ввода-вывода

Рисунок 1. Компоненты компьютера: общая структура.

Одной из функций процессора является обмен данными с памятью. Для этого он обычно использует два внутренних (по отношению к процессору) регистра: регистр адреса памяти (memory address register – MAR), куда заносится адрес ячейки памяти, в которой будет производиться операция чтения – записи, и регистр буфера памяти (memory buffers register – MBR), куда заносятся данные, предназначенные для записи в память, или те, которые были прочитаны из неё. Аналогично, номер устройства ввода-вывода задается в регистре адреса ввода-вывода (I/O address register – I/O AR). Регистр буфера ввода-вывода (I/O buffer register – I/O BR) служит для обмена данными между устройством ввода-вывода и процессором.

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

Регистры процессора

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

Регистры процессора (выполняют две функции) делятся на 2 группы:

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

Регистры управления и регистры состояния. Используются в процессоре для контроля над выполняемыми операциями; с их помощью привилегированные программы операционной системы могут контролировать ход выполнения других программ.

Регистры, доступные пользователю:

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

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

Управляющие регистры и регистры состояния.

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

Кроме упомянутых регистров MAR, MBR, I/O AR, I/O BR, важными для выполнения команд, являются следующие:

Программный счетчик (program counter – PC). Содержит адрес команды, которая должна быть выбрана из памяти.

Регистр команд (instruction register – IR). Содержит последнюю выбранную из памяти команду.

В состав всех процессоров входит также регистр, известный под названием регистра слова состояния программы (program status word – PSW). В нем, как правило, содержатся коды условий и другая информация о состоянии, например, бит разрешения/запрещения прерываний или бит режима системный/пользовательский.

Коды условий (известные как флаги) – это последовательность битов, устанавливаемых или сбрасываемых процессором в зависимости от результата выполненных операций. Например, в результате выполнения арифметического действия может получиться положительное число, отрицательное, ноль, или может произойти переполнение.

Адресация операндов в командах программы может быть:

l непосредственной;

l косвенной;

l ассоциативной;

l неявной.

Непосредственная адресация заключается в указании в команде самого значения операнда, а не его адреса.

Прямая адресация состоит в указании в команде непосредственно абсолютного или исполнительного адреса операнда. Прямая адресация регистра состоит в указании его имени.

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

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

Неявная адресация - адреса операнда в команде не указано, но он подразумевается кодом операции.

Адресация ячеек основной памяти ПК имеет две важных разновидности: относительную и стековую.

Относительная адресация

Абсолютный (A инд) адрес формируется как сумма адресов исполнительного (Aисп) и сегментного (A сегм):

A абс = A сегм + A исп.

A сегм - 20-битовый начальный адрес сегмента , который является увеличенным в 16 раз (сдвинутым на 4 бита влево) 16-битовым адресом сегмента A" сегм, хранящемся в одном из 16-битовых сегментных регистров. Начальный адрес сегмента в таком варианте всегда кратен 16 байтам, и он может быть полностью идентифицирован значением A" сегм (сегмент всегда состоит из целого числа параграфов, а параграф равен 16, то есть:

A сегм = 16 · A" сегм = A" сегм 0000.

16-битовый исполнительный адрес может в ПК представлять собой сумму 3-х адресов:

A исп = A смещ [+A баз ][+A инд ]

l A смещ - 16-битовый адрес смещения относительно начала сегмента (или относительно базы, если есть A баз);



l A баз - 16-битовый адрес смещения базы адреса операнда относительно начала сегмента;

l A инд - адрес индекса (или просто индекс) - дополнительная составляющая адреса операнда, использующаяся часто при программировании циклических процессов с массивами и таблицами. Индекс должен быть непосредственно задан в соответствующем регистре МПП.

При адресации данных могут использоваться все составляющие адреса:

A абс данных = A сегм + A исп = A сегм + A смещ [+A баз ][+A инд ]

A сегм = 16 A" сегм, A" сегм берется из регистра DS по умолчанию или из регистра ES, если это указано в программе. A баз и A инд берутся, соответственно, из регистров BX и индексных (SI или DI), а A смещ в явном или неявном виде указываются в программе.

При адресации команд программы могут использоваться только две составляющие адреса:

A абс команд = A сегм + A исп = A сегм + A смещ

A" сегм берется из регистра CS, а A смещ - из регистра IP.

Стековая адресация

В стековой памяти (стеке) доступ к ячейкам памяти не произвольный, а по принципу «последний записанный операнд первым считывается» (FILO).

A абс стека = A сегм + + A смещ

16-битовый адрес сегмента A" сегм берется из регистра SS, смещения относительно начала сегмента стека автоматически считываются из регистров BP (смещение базы стека - A баз) и SP (смещение активной ячейки стека, в которую записывается или из которой считывается информация, - «вершины стека» относительно базы - A смещ).

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

Вопросы для самопроверки

1. Сформулируйте основные свойства алгоритма.

2. Рассмотрите способы записи алгоритма.

3. Приведите и поясните типовой состав машинных команд.

4. Рассмотрите возможные структуры машинных команд.

5. Поясните назначение системного и прикладного программного обеспечения.

6. Назовите основные режимы работы компьютеров и дайте им краткую характеристику.

7. Что такое прерывания работы программы и каково их назначение?

8. Назовите и поясните виды прерываний.

9. Рассмотрите последовательность действий машины при выполнении прерывания.

10. Назовите виды и особенности адресации ячеек памяти в ПК.

11. Напишите формулу для расчета абсолютного адреса данных.

12. Какие регистры микропроцессорной памяти используются для адресации данных?

13. Напишите формулу для расчета абсолютного адреса команды программы.

14. Какие регистры микропроцессорной памяти используются для адресации команд программы?

15. Напишите формулу для расчета адреса стека.

16. Какие регистры микропроцессорной памяти используются для адресации ячеек стековой памяти?


Глава 19.Элементы программирования на языке Ассемблер

После изучения главы студент должен знать:

· -назначение и области использования языка Ассемблера;

· -основные компоненты языка;

· -основные команды, директивы, модификаторы;

· -адресацию регистров МПП и ячеек памяти в ассемблере;

· -программирование процедур вывода информации на дисплей и ввода информации с клавиатуры;

· -структуру ассемблерной программы;

· -процедуры формирования программы формата EXE;

· -назначение, команды и варианты использования отладчика программ Debug.

Пользователь компьютера, равно как и прикладной программист, программы составляет, как правило, на машинно-независимом алгоритмическом языке высокого уровня (Basic, Pascal, FORTRAN, C, PROLOG и др.), однако иметь представление об основах программирования и на машинно-ориентированных языках грамотному пользователю весьма полезно для:

l лучшего понимания архитектуры ПК и более грамотного использования компьютеров; для разработки более рациональных структур алгоритмов и программ решения прикладных задач;

l возможности просмотра и корректировки исполняемых программ с расширениями EXE и COM, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программ DEBUG и деассемблировав их, можно получить их отображение на языке Ассемблера);

l составления программ решения наиболее ответственных задач (машинная программа, подготовленная на машинно-ориентированном языке, обычно эффективнее (короче и быстрее на 30–60%) программ, полученных в результате трансляции с языков высокого уровня) и для реализации процедур, включаемых в основную программу в виде отдельных фрагментов в том случае, если они не могут быть реализованы ни на используемом языке высокого уровня.

Основные компоненты языка ассемблер

Алфавит языка

Алфавит языка составляют символы ASCII:

l буквы от А до Z (или от а до z, строчные и прописные буквы в ассемблере не различаются);

l цифры от 0 до 9;

l специальные символы: @, $, ?, ., _,–, +, *, ", “, ; ,: и др.

Из букв, цифр и символов: @, $, ?, .,_ формируются:

l простые сообщения: имена (идентификаторы) процедур (подпрограмм), переменных, директив, команд (метки), значения констант и переменных;

l составные сообщения: команды (операторы);

l директивы (псевдооператоры);

l модификаторы (операции).

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

Константы (числа и строки)

Только целые числа

Различают:

l двоичные числа; заканчиваются буквой В;

l десятичные числа; без специального окончания или заканчиваются буквой D;

l шестнадцатеричные числа; заканчиваются буквой Н.

Для обозначения цифр 10, 11, 12, 13, 14, 15 в шестнадцатеричной системе счисления используются, соответственно, буквы A, B, C, D, E, F; но начинаться шестнадцатеричные числа должны обязательно с цифры, например: выражение F19Н - не число, а идентификатор, правильно число надо записать так: 0F19Н.

Запись отрицательных чисел:

l десятичные числа записываются обычным образом, просто со знаком: –32, –32D;

l двоичные числа записываются только в дополнительном модифицированном коде: –32D ® 11.100000B, –19D ® 11.01101B;

l шестнадцатеричные числа записываются только в дополнительном коде:

l –32D выглядит как 1.E0H, –119D - как 1.89H.

Строки (литералы)

Строки символов: включают в себя любые буквы, цифры и символы, но заключаются в кавычки: "ПК IBM PC с микропроцессором Pentium D ".

Команды (операторы)

Формат команды:

[Метка [:]] КОП [Операнд] [,Операнд] [;Комментарий].

Между элементами команды вставлены пробелы. Здесь и далее элементы, заключенные в квадратные скобки, необязательны.

КОП (Код ОПератора) - мнемокод команды (состоит из 2–6 букв). Может быть до 256 различных кодов (в ассемблере IBM PC их число изменяется в зависимости от типа МП).

Операнд - явно заданный адрес (прямой или косвенный); имя метки, переменной; само значение переменной; ассоциативный признак. Количество необходимых в команде операндов ассемблер узнает по КОП. В большинстве двухадресных команд присутствуют операнды приемника (dst - destination) и источника (src - source); источник не изменяет своего содержания, в приемнике 1-е число, участвующее в операции, заменяется результатом.

Память - часть компьютера, где хранятся программы и данные. Можно также употреблять термин «запоминающее устройство». Без памяти, откуда процессоры считывают и куда записывают информацию, не было бы цифровых компьютеров со встроенными программами.

Основной единицей памяти является двоичный разряд, который называется битом. Бит может содержать 0 или 1. Эта самая маленькая единица памяти. (Устройство, в котором хранятся только нули, вряд ли могло быть основой памяти. Необходимы по крайней мере две величины.) Многие полагают, что в компьютерах используется бинарная арифметика, потому что это «эффективно». Они имеют в виду (хотя сами это редко осознают),

что цифровая информация может храниться благодаря различию между разными величинами какой-либо физической характеристики, например напряжения или тока. Чем больше величин, которые нужно различать, тем меньше различий между смежными величинами и тем менее надежна память. Двоичная система требует различения всего двух величин, следовательно, это самый надежный метод кодирования цифровой информации. Если вы не знакомы с двоичной системой счисления, смотрите Приложение А.

Считается, что некоторые компьютеры, например большие IBM, используют и десятичную, и двоичную арифметику. На самом деле здесь применяется так называемый двоично-десятичный код. Для хранения одного десятичного разряда используется 4 бита. Эти 4 бита дают 16 комбинаций для размещения 10 различных значений (от 0 до 9). При этом 6 оставшихся комбинаций не используются. Ниже показано число 1944 в двоично-десятичной и чисто двоичной системах счисления; в обоих случаях используется 16 битов:

десятичное: 0001 10010100 0100 двоичное: 0000011110011000

16 битов в двоично-десятичном формате могут хранить числа от 0 до 9999, то есть всего 10000 различных комбинаций, а 16 битов в двоичном формате - 65536 комбинаций. Именно по этой причине говорят, что двоичная система эффективнее.

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

ный молодой инженер придумал очень надежное электронное устройство, которое могло бы хранить разряды от 0 до 9, разделив участок напряжения от 0 до 10 В на 10 интервалов. Четыре таких устройства могли бы хранить десятичное число от 0 до 9999, то есть 10 000 комбинаций. А если бы те же устройства использовались для хранения двоичных чисел, они могли бы содержать всего 16 комбинаций. Естественно, в этом случае десятичная система была бы более эффективной.

1.2.Адреса памяти

Память состоит из ячеек, каждая из которых может хранить некоторую порцию информации. Каждая ячейка имеет номер, который называется адресом, По адресу программы могут ссылаться на определенную ячейку. Если память содержит п ячеек, они будут иметь адреса от 0 до п-1. Все ячейки памяти содержат одинаковое число битов. Если ячейка состоит из к битов, она может содержать любую из 2к комбинаций. На рис. 2.8 показаны 3 различных способа организации 96-битной памяти. Отметим, что соседние ячейки по определению имеют последовательные адреса.

В компьютерах, где используется двоичная система счисления (включая восьмеричное и шестнадцатеричное представление двоичных чисел), адреса памяти также выражаются в двоичных числах. Если адрес состоит из m битов, максимальное число адресованных ячеек будет составлять 2П|. Например, адрес для обращения к памяти, изображенной на рис. 2.8, а, должен состоять, по крайней мере, из 4 битов, чтобы выражать все числа от 0 до 11. При устройстве памяти, показанном на рис. 2.8, 6 и 2.8, в, достаточно 3-битного адреса. Число битов в адресе определяет максимальное количество адресованных ячеек памяти и не зависит от числа битов в ячейке. 12-битные адреса нужны и памяти с 212 ячеек по 8 битов каждая, и памяти с 212 ячеек по 64 бита каждая.

В табл. 2.1 показано число битов в ячейке для некоторых коммерческих компьютеров.

Ячейка - минимальная единица, к которой можно обращаться, В последние

годы практически все производители выпускают компьютеры с 8-битными ячейками, которые называются байтами, Байты группируются в слова. Компьютер с 32-битными словами имеет 4 байта на каждое слово, а компьютер с 64-битными словами - 8 байтов на каждое слово. Такая единица, как слово, необходима, поскольку большинство команд производят операции над целыми словами (например, складывают два слова). Таким образом, 32-битная машина будет содержать 32-битные регистры и команды для манипуляций с 32-битными словами, тогда как 64-битная машина будет иметь 64-битные регистры и команды для перемещения, сложения, вычитания и других операций над 64-битными словами.

1.3.Упорядочение байтов

Байты в слове могут нумероваться слева направо или справа налево. На первый взгляд может показаться, что между этими двумя вариантами нет разницы, но мы скоро увидим, что выбор имеет большое значение. На рис. 2.9, а изображена часть памяти 32-битного компьютера, в котором байты пронумерованы слева направо (как у компьютеров SPARC или больших IBM). Рисунок 2.9,6 показывает аналогичную репрезентацию 32-битного компьютера с нумерацией байтов справа налево (как у компьютеров Intel).

Важно понимать, что в обеих системах 32-битное целое число (например, 6)

представлено битами 110 в трех крайних правых битах слова, а остальные 29 битов представлены нулями. Если байты нумеруются слева направо, биты 110 находятся в байте 3 (или 7, или 11 и т. д.). Если байты нумеруются справа налево, биты 110 находятся в байте 0 (или 4, или 8 и т. д.). В обоих случаях слово, содержащее это целое число, имеет адрес 0.

Если компьютеры содержат только целые числа, никаких сложностей не возникает. Однако многие прикладные задачи требуют использования не только целых чисел, но и цепочек символов и других типов данных. Рассмотрим, например, простую запись данных персонала, состоящую из цепочки символов (имя сотрудника) и двух целых чисел (возраст и номер отдела). Цепочка символов завершается одним или несколькими байтами 0, чтобы заполнить слово. На рис. 2.10, а представлена схема с нумерацией байтов слева направо, а на рис. 2.10, б - с нумерацией байтов

справа налево для записи «Jim Smith, 21 год, отдел 260» (1x256+4=260).

Оба эти представления хороши и внутренне последовательны. Проблемы начинаются тогда, когда один из компьютеров пытается переслать эту запись на Другой компьютер по сети. Предположим, что машина с нумерацией байтов слева направо пересылает запись на компьютер с нумерацией байтов справа налево по одному байту, начиная с байта 0 и заканчивая байтом 19. Для простоты будем считать, что биты, не инвертируются при передаче. Таким образом, байт 0 переносится из первой машины на вторую в байт 0 и т. д., как показано на рис. 2.10, в.

Компьютер, получивший запись, имя печатает правильно, но возраст получа-

ется 21х224, и номер отдела тоже искажается. Такая ситуация возникает, поскольку при передаче записи порядок букв в слове меняется так, как нужно, но при этом порядок байтов целых чисел тоже изменяется, что приводит к неверному результату.

Очевидное решение этой проблемы - наличие программного обеспечения, которое инвертировало бы байты в слове после того, как сделана копия. Результат такой операции изображен на рис. 2.10, г. Мы видим, что числа стали правильными, но цепочка символов превратилась в «MIJTIMS», при этом «Н» вообще поместилась отдельно. Цепочка переворачивается потому, что компьютер сначала считывает байт 0 (пробел), затем байт 1 (М) и т. д.

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

1.4.Код с исправлением ошибок

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

Пусть общая длина слова будет п (то есть п=т+г). n-битную единицу, содержащую m битов данных и г контрольных разрядов, часто называют кодированным словом. Для любых двух кодированных слов, например 10001001 и 10110001, можно определить, сколько соответствующих битов в них различается. В данном примере таких бита три. Чтобы определить количество различающихся битов, нужно над двумя кодированными словами произвести логическую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ и сосчитать число битов со значением 1 в полученном результате. Число битовых позиций, по которым различаются два слова, называется интервалом Хэмминга. Если интервал Хэмминга для двух слов равен d, это значит, что достаточно d битовых ошибок, чтобы превратить одно слово в другое. Например, интервал Хэмминга кодированных слов 11110001 и 00110000 равен 3, поскольку для превращения первого слова во второе достаточно 3 ошибок в битах.

Память состоит из m-битных слов, и следовательно, существует 2т вариантов

сочетания битов. Кодированные слова состоят из п битов, но из-за способа подсчета контрольных разрядов допустимы только 2Ш из 2" кодированных слов. Если в памяти обнаруживается недопустимое кодированное слово, компьютер знает, что произошла ошибка. При наличии алгоритма для подсчета контрольных разрядов можно составить полный список допустимых кодированных слов и из этого списка найти два слова, для которых интервал Хэмминга будет минимальным. Это интервал Хэмминга полного кода.

Свойства проверки и исправления ошибок определенного кода зависят от его

интервала Хэмминга. Чтобы обнаружить d ошибок в битах, необходим код с интервалом d+1, поскольку d ошибок не могут изменить одно допустимое кодированное слово на другое допустимое кодированное слово Соответственно, чтобы исправить d ошибок в битах, необходим код с интервалом 2d+l, поскольку в этом случае допустимые кодированные слова так сильно отличаются друг от друга, что даже если произойдет d изменений, изначальное кодированное слово будет ближе к ошибочному, чем любое другое кодированное слово, поэтому его без труда можно будет определить.

В качестве простого примера кода с обнаружением ошибок рассмотрим код, в котором к данным присоединяется один бит четности. Бит четности выбирается таким образом, что число битов со значением 1 в кодированном слове четное (или нечетное). Интервал этого кода равен 2, поскольку любая ошибка в битах приводит к кодированному слову с неправильной четностью. Другими словами, достаточно двух ошибок в битах для перехода от одного допустимого кодированного слова к другому допустимому слову. Такой код может использоваться для обнаружения одиночных ошибок. Если из памяти считывается слово, содержащее неверную четность, поступает сигнал об ошибке. Программа не сможет продолжаться, но зато не будет неверных результатов. В качестве простого примера кода с исправлением ошибок рассмотрим код с четырьмя допустимыми кодированными словами:

0000000000,0000011111, ШИОООООи 1111111111

Интервал этого кода равен 5. Это значит, что он может исправлять двойные

ошибки. Если появляется кодированное слово 0000000111, компьютер знает, что изначальное слово должно быть 0000011111 (если произошло не более двух ошибок). При наличии трех ошибок, если, например, слово 0000000000 изменилось на 0000000111, этот метод недопустим.

Представим, что мы хотим разработать код с m битами данных и г контрольных разрядов, который позволил бы исправлять все ошибки в битах. Каждое из 2т допустимых слов имеет п недопустимых кодированных слов, которые отличаются от допустимого одним битом. Они образуются инвертированием каждого из п битов в n-битном кодированном слове. Следовательно, каждое из 2т допустимых слов требует п+1 возможных сочетаний битов, приписываемых этому слову (п возможных ошибочных вариантов и один правильный). Поскольку общее число различных сочетаний битов равно 2П, то (п+1)2га<2п. Так как n-ш+г, следовательно,

(т+г+ 1)<2Г. Эта формула дает нижний предел числа контрольных разрядов, необходимых для исправления одиночных ошибок. В табл 2.2 показано необходимое количество контрольных разрядов для слов разного размера.

Этого теоретического нижнего предела можно достичь, используя метод Ричарда Хэмминга. Но прежде чем обратиться к этому алгоритму, давайте рассмотрим простую графическую схему, которая четко иллюстрирует идею кода с исправлением ошибок для 4-битных слов. Диаграмма Венна на рис. 2.11 содержит 3 круга, А, В и С, которые вместе образуют семь секторов. Давайте закодируем в качестве примера слово из 4 битов 1100 в сектора АВ, ABC, AC и ВС, по одному биту в каждом секторе (в алфавитном порядке). Кодирование показано на рис. 2.11, а.

Далее мы добавим бит четности к каждому из трех пустых секторов, чтобы получилась положительная четность, как показано на рис. 2.11, б. По определению сумма битов в каждом из трех кругов, А, В, и С, должна быть четной. В круге А находится 4 числа: 0, 0, 1 и 1, которые в сумме дают четное число 2. В круге В находятся числа 1, 1, 0 и 0, которые также при сложении дают четное число 2. То же имеет силу и для круга С. В данном примере получилось так, что все суммы одинаковы, но вообще возможны случаи с суммами 0 и 4. Рисунок соответствует кодированному слову, состоящему из 4 битов данных и 3 битов четности. Предположим, что бит в секторе АС изменился с 0 на 1, как показано на рис. 2.11, в. Компьютер видит, что круги А и С имеют отрицательную четность. Единственный способ исправить ошибку, изменив только один бит, -возвраще-

ние биту АС значения 0. Таким способом компьютер может исправлять одиночные ошибки автоматически.

А теперь посмотрим, как может использоваться алгоритм Хэмминга при создании кодов с исправлением ошибок для слов любого размера. В коде Хэмминга к слову, состоящему из m битов, добавляется г битов четности, при этом образуется слово длиной т+г битов. Биты нумеруются с единицы (а не с нуля), причем первым считается крайний левый. Все биты, номера которых - степени двойки, являются битами четности; остальные используются для данных. Например, к 16-битному слову нужно добавить 5 битов четности. Биты с номерами 1, 2, 4, 8 и 16 - биты четности, а все остальные - биты данных. Всего слово содержит 21 бит (16 битов данных и 5 битов четности). В рассматриваемом примере мы будем использовать

положительную четность (выбор произвольный). Каждый бит четности проверяет определенные битовые позиции. Общее число битов со значением 1 в проверяемых позициях должно быть четным. Ниже указаны позиции проверки для каждого бита четности:

Бит 1 проверяет биты 1, 3, 5,7, 9,11, 13,15,17,19, 21.

Бит 2 проверяет биты 2, 3, 6, 7,10,11,14,15,18,19.

Бит 4 проверяет биты 4, 5,6, 7,12,13,14,15, 20, 21.

Бит 8 проверяет биты 8,9,10, И, 12,13,14, 15.

Бит 16 проверяет биты 16,17,18,19, 20, 21.

В общем случае бит b проверяется битамиЪи Ь2,..., bJt такими что bi+b2+... +b,=b. Например, бит 5 проверяется битами 1 и 4, поскольку 1+4=5. Бит 6 проверяется битами 2 и 4, поскольку 2+4=6 и т. д.

На рис. 2.12 показано построение кода Хэмминга для 16-битного слова

1111000010101110 Соответствующим 21-битным кодированным словом является 001011100000101101110. Чтобы увидеть, как происходит исправление ошибок, рассмотрим, что произойдет, если бит 5 изменит значение из-за резкого скачка напряжения на линии электропередачи. В результате вместо кодированного слова 001011100000101101110 получится 001001100000101101 ПО. Будут проверены 5 битов четности.

Вот результаты проверки:

Бит четности 1 неправильный (биты 1, 3, 5, 7,9, 11, 13, 15, 17, 19, 21 содержат

пять единиц).

Бит четности 2 правильный (биты 2, 3, 6,7,10,11,14,15,18,19 содержат шесть

Бит четности 4 неправильный (биты 4,5,6,7,12,13,14,15,20,21 содержат пять

Бит четности 8 правильный (биты 8,9,10,11,12,13,14,15 содержат две единицы).

Битчетности 16 правильный (биты 16,17,18,19,20,21 содержат четыре единицы).

Общее число единиц в битах 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 и 21 должно быть

четным, поскольку в данном случае используется положительная четность. Неправильным должен быть один из битов, проверяемых битом четности 1 (а именно 1,3,5,7,9,11,13,15,17,19 и 21). Бит четности 4 тоже неправильный. Это значит, чтоизменил значение один из следующих битов: 4,5,6,7,12,13,14,15,20,21. Ошибка должна быть в бите, который содержится в обоих списках. В данном случае общими являются биты 5,7,13,15 и 21. Поскольку бит четности 2 правильный, биты 7 и 15 исключаются. Правильность бита четности 8 исключает наличие ошибки в бите 13.

Наконец, бит 21 также исключается, поскольку бит четности 16 правильный. В итоге остается бит 5, в котором и содержится ошибка. Поскольку этот бит имеет значение 1, он должен принять значение 0. Именно таким образом исправляются ошибки.

Чтобы найти неправильный бит, сначала нужно подсчитать все биты четности. Если они правильные, ошибки нет (или есть, но больше одной). Если обнаружились неправильные биты четности, то нужно сложить их номера. Сумма, полученная в результате, даст номер позиции неправильного бита. Например, если биты четности 1 и 4 неправильные, а 2,8 и 16 правильные, то ошибка произошла в бите 5 (1+4).

2.Кэш-память

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

которое ему нужно. Чем медленнее работает память, тем дольше процессору приходится ждать, тем больше циклов должно пройти.

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

Другое решение проблемы - сконструировать машину, которая не приостанавливает работу, но следит, чтобы программы-компиляторы не использовали слова до того, как они считаются из памяти. Однако это не так просто осуществить на практике. Часто при выполнении команды загрузки машина не может выполнять другие действия, поэтому компилятор вынужден вставлять пустые команды, которые не производят никаких операций, но при этом занимают место в памяти. В действительности при таком подходе простаивает не аппаратное, а программное обеспечение, но снижение производительности при этом такое же. На самом деле эта проблема не технологическая, а экономическая. Инженеры знают, как построить память, которая будет работать так же быстро, как и процессор, но при этом ее приходится помещать прямо на микросхему процессора (поскольку информация через шину поступает очень медленно). Установка большой памяти на микросхему процессора делает его больше и, следовательно, дороже, и даже если бы стоимость не имела значения, все равно существуют ограничения в размерах процессора, который можно сконструировать. Таким образом, приходится выбирать между быстрой памятью небольшого размера и медленной памятью большого размера. Мы бы предпочли память большого размера с высокой скоростью работы по низкой цене. Интересно отметить, что существуют технологии сочетания маленькой и быстрой памяти с большой и медленной, что позволяет получить и высокую скорость работы, и большую емкость по разумной цене. Маленькая память с высокой скоростью работы называется кэш-памятью (от французского слова cacher «прятать»1;читается «кэш»). Ниже мы кратко опишем, как используется кэш-память и как она работает. Более подробное описание см. в главе 4. Основная идея кэш-памяти проста: в ней находятся слова, которые чаще всего используются. Если процессору нужно какое-нибудь слово, сначала он обращается к кэш-памяти. Только в том случае, если слова там нет, он обращается к основной памяти. Если значительная часть слов находится в кэш-памяти, среднее время доступа значительно сокращается. Таким образом, успех или неудача зависит от того, какая часть слов находится в кэш-памяти. Давно известно, что программы не обращаются к памяти наугад. Если программе нужен доступ к адресу А, то скорее всего после этого ей понадобится доступ к адресу, расположенному поблизости от А. Практически все команды обычной программы (за исключением команд перехода и вызова процедур) вызываются из последовательных участков памяти. Кроме того, большую часть времени программа тратит на циклы, когда ограниченный набор команд выполняется снова и снова. Точно так же при манипулировании матрицами программа, скорее всего, будет обращаться много раз к одной и той же матрице, прежде чем перейдет к чему-либо другому. То, что при последовательных отсылках к памяти в течение некоторого промежутка времени используется только небольшой ее участок, называется принципом локальности. Этот принцип составляет основу всех систем кэш-памяти. Идея состоит в следующем: когда определенное слово вызывается из памяти, оно вместе с соседними словами переносится в кэш-память, что позволяет при очередном запросе быстро обращаться к следующим словам. Общее устройство процессора, кэш-памяти и основной памяти показано на рис. 2.13. Если слово считывается или записывается к раз, компьютеру понадобится сделать 1 обращение к медленной основной памяти и к-1 обращений к быстрой кэш-памяти. Чем больше к, тем выше общая производительность.

Мы можем сделать более строгие вычисления. Пусть с - время доступа к кэш-памяти, m - время доступа к основной памяти и h - коэффициент совпадения, который показывает соотношение числа ссылок к кэш-памяти и общего числа всех ссылок. В нашем примере h=(k~l)/k. Таким образом, мы можем вычислить среднее время доступа:

среднее время доступа =с+(1 -h)m.

Если h-И и все обращения делаются только к кэш-памяти, то время доступа стремится к с. С другой стороны, если h-»0 и каждый раз нужно обращаться к основной памяти, то время доступа стремится к с+ш: сначала требуется время с для проверки кэш-памяти (в данном случае безуспешной), а затем время m для обращения к основной памяти. В некоторых системах обращение к основной памятиможет начинаться параллельно с исследованием кэш-памяти, чтобы в случае неудачного поиска цикл обращения к основной памяти уже начался. Однако эта стратегия требует способности останавливать процесс обращения к основной памяти в случае результативного обращения к кэш-памяти, что делает разработку такого компьютера более сложной. Основная память и кэш-память делятся на блоки фиксированного размера с учетом принципа локальности. Блоки внутри кэш-памяти обычно называют строками кэш-памяти (cache lines). Если обращение к кэш-памяти нерезультативно, из основной памяти в кэш-память загружается вся строка, а не только необходимое слово. Например, если строка состоит из 64 байтов, обращение к адресу 260 повлечет за собой загрузку в кэш-память всей строки, то есть с 256-го по 319-й байт.

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

Разработка кэш-памяти очень важна для процессоров с высокой производительностью.

Первый вопрос - размер кэш-памяти. Чем больше размер, тем лучше работает память, но тем дороже она стоит.

Второй вопрос - размер строки кэш-памяти. Кэш-память объемом 16 Кбайт можно разделить на 1К строк по 16 байтов, 2К строк по 8 байтов и т. д. Третий вопрос - как устроена кэш-память, то есть, как она определяет, какие именно слова содержатся в ней в данный момент. Устройство кэш-памяти мы рассмотрим подробно в главе 4.

Четвертый вопрос - должны ли команды и данные находиться вместе в общей кэш-памяти. Проще разработать смежную кэш-память, в которой хранятся и данные, и команды. При этом вызов команд и данных автоматически уравновешивается. Тем не менее, в настоящее время существует тенденция к использованию разделенной кэш-памяти, когда команды хранятся в одной кэш-памяти, а данные - в другой. Такая структура также называется Гарвардской (Harvard Architecture), поскольку идея использования отдельной памяти для команд и отдельной памяти для данных впервые воплотилась в компьютере Маге III, который был создай Говардом Айкеном в Гарварде. Современные разработчики пошли по этому пути, поскольку сейчас широко используются процессоры с конвейерами, а при такой организации должна быть возможность одновременного доступа и к командам, и к данным (операндам). Разделенная кэш-память позволяет осуществлять параллельный доступ, а общая - нет. К тому же, поскольку команды обычно не меняются во время выполнения, содержание командной кэш-памяти никогда не приходится записывать обратно в основную память.

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

Страница 4

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

Нумерацию разрядов в ячейке принято вести справа налево, самый правый разряд имеет порядковый номер 0. Это младший разряд ячейки памяти, старший разряд имеет порядковый номер (n-1) в n-разрядной ячейке памяти. Содержимым любого разряда может быть либо 0, либо 1.

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

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

Машинное слово для конкретной ЭВМ – это всегда фиксированное число разрядов. Данное число является одной из важнейших характеристик любой ЭВМ и называется разрядностью машины.

Например, самые современные персональные компьютеры являются 64-разрядным, то есть машинное слово и соответственно, ячейка памяти, состоит из 64 разрядов или битов.

Бит - минимальная единица измерения информации.

Каждый бит может принимать значение 0 или 1. Битом также называют разряд ячейки памяти ЭВМ. Стандартный размер наименьшей ячейки памяти равен восьми битам, то есть восьми двоичным разрядам. Совокупность из 8 битов является основной единицей представления данных – байт.

Байт (от английского byte – слог) – часть машинного слова, состоящая из 8 бит, обрабатываемая в ЭВМ как одно целое. На экране – ячейка памяти, состоящая из 8 разрядов – это байт. Младший разряд имеет порядковый номер 0, старший разряд – порядковый номер 7.

Для записи чисел также используют 32-разрядный формат (машинное слово), 16-разрядный формат (полуслово) и 64-разрядный формат (двойное слово).

Для измерения объема хранимой информации используются более крупные единицы объема памяти:

1 Килобайт (Кбайт) = 1024 байт = 210 байт;

1 Мегабайт (Мбайт) = 1024 Кбайт = 220 байт;

1 Гигабайт (Гбайт) = 1024 Мбайт = 230 байт;

1 Терабайт (Тбайт) = 1024 Гбайт = 240 байт;

1 Петабайт (Пбайт) = 1024 Тбайт = 250 байт.

Число 1024 как множитель при переходе к более высшей единице измерения информации имеет своим происхождением двоичную систему счисления (1024 - это десятая степень двойки).

Общие сведения о системах счисления

Система счисления - это совокупность правил записи чисел с помощью определенного набора символов.

Для записи чисел могут использоваться не только цифры, но и буквы (запись римскими цифрами).

В зависимости от способа изображения чисел системы счисления делятся на позиционные и непозиционные.

В позиционной системе счисления значение каждой цифры зависит от того, в каком месте она записана.

В непозиционной системе счисления цифры не изменяют своего значения при изменении их расположения в числе. * Римская система счисления I(1), V(5), X(10), L(50), C(100), D(500), M(1000).

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

Пример:CCXXXII=232 или IX =9

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

Максимальное число, записанное в восьми разрядах ячейки соответствует восьми единицам и равно:

111111112 = 1*27 + 1*26 + 1*25 + 1*24 + 1*23 + 1*22 + 1*21 + 1*20 = 255.

Знаковые положительные числа в байте можно представить только

от 0 до 127.

Старший (левый) разряд отводится под знак числа, остальные

7 разрядов под само число. Максимальное число в знаковом представлении соответствует семи единицам и равно:

Информация о ообразовании:

Методические особенности организации семинарского занятия
При разработке методики семинарских занятий важное место занимает вопрос о взаимосвязи между семинаром и лекцией, семинаром и самостоятельной работой студентов, о характере и способах такой взаимосвязи. Семинар не должен повторять лекцию, и, вместе с тем, его руководителю необходимо сохранить связь...

Качество подготовки специалистов
Требования при приёме. Порядок приема молодежи на обучение определяется законом "Об образовании" РФ, типовым положением об учреждении НПО, Уставом ГОУ НПО ПУ № 73, внутриучилищным локальным актом "Правила приема в училище и отчисления из училища". Внутренний локальный акт приним...

Как преодолевать проблемы
Будьте готовы к тому, что время от времени у вас будут возникать проблемы. Это могут быть проблемы разного рода – личные, связанные с учебой, со взаимоотношениями между людьми – с подобными проблемами встречается каждый. Можно сказать, что если у вас есть проблемы, значит вы живете нормальной жизнь...

Ячейка памяти Память компьютера состоит из отдельных «частиц» битов, объединенных в группы (регистры) по 8 бит (байт). 1 байт элементарная единица памяти. Каждый байт имеет свой помер (адрес), и содержимое двоичный код. Когда процессор обрабатывает информацию, он находит по адресу в памяти нужную ячейку, читает из содержимое, выполняет необходимые действия и записывает результат в другую ячейку памяти. Ячейка памяти группа последовательных байтов внутренней памяти. Машинное слово содержимое ячейки памяти Разрядность ячейки памяти и размер машинного слова в битах равны разрядности процессора






Быстродействующее ЗУ, реализованное в виде электронной схемы. ОЗУ доступно для чтения и для записи информации. Именно в ОЗУ хранится выполняемая в текущий момент программа и необходимые для нее данные, в ОЗУ данные можно редактировать, удалять, добавлять. Это память временного хранения. ОЗУ хранит информацию лишь в течение сеанса работы с ЭВМ – после выключения ЭВМ из сети, данные, хранимые в ОЗУ, теряются безвозвратно. ОЗУ энергозависимое устройство. Емкость современных моделей колеблется от 512 до 1024 Мбайт. ОЗУ – оперативное ЗУ (RAM – random access memory - память с произвольным доступом).


ПЗУ – постоянное ЗУ (ROM – read only memory - память только для чтения). Во многих ЭВМ ПЗУ реализуется отдельной микросхемой, в которой при изготовлении помещаются основные команды, осуществляющие первоначальное взаимодействие аппаратного и программного обеспечения. Этот вид памяти доступен лишь для чтения. После выключения ЭВМ информация сохраняется. ПЗУ – энергонезависимое устройство. В ПЗУ находится часть операционной системы BIOS (Basic Input- Output System).


КЭШ-память – промежуточная память между ОЗУ и ПЗУ «Сache» - тайник, склад (англ. слово). Используется для увеличения быстродействия компьютера. «Секретность» КЭШа заключается в том, что он невидим для пользователя и данные, хранящиеся там, недоступны для прикладного программного обеспечения. Использование этого вида внутренней памяти сокращает число обращений к жесткому диску. Отсутствие кэш-памяти может существенно (20-30%) снизить общую производительность компьютера.


Энергонезависимая память (CMOS-память, Complementary Metal-Oxid-Semicondactor) Различные параметры конфигурации компьютера, например количество и тип дисковых накопителей, тип видеоадаптера, наличие сопроцессора и некоторые другие данные, хранятся в так называемой CMOS- памяти. Микросхема CMOS-памяти также содержит обыкновенные электронные часы. Благодаря ним в любой момент можно узнать текущую дату и время. Чтобы при отключении питания компьютера содержимое CMOS-памяти не стиралось, и часы продолжали отсчитывать время, микросхема CMOS- памяти питается от специальной маленькой батарейки или аккумулятора, которые также находятся на системной плате