Н.Новгород: НГПУ им. К.Минина, 2015. – 80с.

advertisement
Министерство образования и науки Российской Федерации
ФГБОУ ВПО «Нижегородский государственный педагогический университет
имени Козьмы Минина»
(Мининский университет)
М.А.Иорданский
АРХИТЕКТУРА КОМПЬЮТЕРА
Учебное пособие
Нижний Новгород
2015
УДК 681.3 (07)
ББК 32.81р3
И756
Иорданский М.А.
И756 Архитектура компьютера: учебное пособие / М.А. Иорданский. 
Н.Новгород, Мининский университет, 2015.  80 с.
В учебном пособии рассматриваются: история развития средств вычислений, системы
счисления, компьютерная арифметика, устройство и режимы работы процессора, физическая
и логическая организация памяти, основные виды периферийных устройств, тенденции развития архитектуры компьютеров. Содержатся примеры перевода записей чисел из одной системы счисления в другую и выполнения арифметических операций над числами.
Пособие составлено на основе лекций и лабораторных занятий по курсу «Архитектура
компьютера», проводившихся автором в течении ряда лет со студентами математиками и
информатиками факультетов МИФ и ЕМиКН. Материал пособия может быть полезным учителям информатики и школьникам, интересующимся устройством и работой компьютера
УДК 681.3 (07)
ББК 32.81р3
 Иорданский М.А., 2015
 Мининский университет, 2015
2
Оглавление
Глава 1. История развития средств вычислений .................................... 4
1.1 Механизация и автоматизация этапов вычислений .................... 4
1.2 Электронные вычислительные машины ........................................6
1.3 Тенденции развития архитектуры компьютеров ..................... 166
Глава 2. Системы счисления ..................................................................... 19
2.1 История развития систем счисления ........................................... 19
2.2 Понятия «своей» и «чужой» системы счисления (СС) ............ 23
2.3 Перевод записей чисел из своей в чужую СС ............................ 24
2.4 Перевод записей чисел из чужой в свою СС ............................... 27
2.5 Алгоритмы сокращенного перевода .......................................... 28
Глава 3. Компьютерная арифметика ...................................................... 32
3.1 Представления чисел .................................................................. 322
3.2 Арифметика чисел с фиксированной запятой ........................... 35
3.3 Арифметика чисел с плавающей запятой ................................... 38
3.4 Особенности компьютерной арифметики .................................. 42
3.5 Памятка программиста ................................................................. 45
Глава 4. Процессор компьютера ............................................................. 48
4.1 Операционный блок ...................................................................... 48
4.2 Режимы работы и прерывания ..................................................... 49
4.3 Основные регистры ....................................................................... 54
4.4 Элементы программирования на ассемблере ............................ 56
Глава 5. Память компьютера ................................................................... 61
5.1 Физическая организация памяти ................................................. 61
5.2 Логическая организация памяти .................................................. 66
5.3 Способы управления памятью ..................................................... 67
Глава 6. Периферийные устройства ....................................................... 71
6.1 Устройства ввода информации .................................................... 72
6.2 Устройства вывода информации ................................................. 74
Список литературы .................................................................................. 80
3
Глава 1. История развития средств вычислений
1.1
Механизация и автоматизация этапов вычислений
Каждый человек начинает свой путь к большим вычислениям с нехитро-
го приспособления – пальцевого счета. Отсюда, кстати, возникла и десятичная
система счисления. Существенным недостатком пальцевого счета было неудобство хранения результата. Этот недостаток был устранен в приспособлении для
счета, называемом абак. Абак – счетная доска древних греков и римлян, в переводе с греческого буквально означает «пыль». Доска, посыпанная песком (пылью), разделялась на отдельные полосы, в которых помещались, а затем передвигались счетные камешки или костяшки. Их положение и позволяло запоминать и хранить результаты вычислений. Позднее костяшки стали нанизывать на
проволоки некоторого каркаса и абак превратился в счеты. В древнем Китае
абак использовался не только как вспомогательное устройство, на нем производили операцию деления и действия с дробями, извлекали квадратные и даже
кубические корни. Приведение задачи к виду, допускающему решение на абаке,
имело большое методологическое значение, исходя из подобных правил, позднее сформировалось и понятие алгоритма.
Взгляд на вычисления как на рутинный процесс, совершаемый механически, давно породил стремление людей переложить их выполнение на плечи
машин. Точно также как в производстве тканей стали использовать ткацкие
станки, а при изготовлении книг – печатные машины. Эскиз первой суммирующей машины был обнаружен в архивах еще Леонардо Давинчи. В начале 17 века в Германии (1623г., В.Шиккард) и во Франции (1641г., Б.Паскаль), были созданы первые образцы механических машинок, выполнявших все четыре арифметических действия. Они получили название «арифмометр» (от греческих
слов «арифмос» - число и «метрео» - измерение). Механические изделия обладают низкой надежностью и в последующие столетия конструкции арифмометров неоднократно совершенствовались (1673г., Лейбниц; конец XIX века,
Чебышев). Серийное производство арифмометров началось в 1818 г. в Герма4
нии, в России с 1899 г. Появление электричества, развитие электроники, а
позднее и микроэлектроники, переход на клавишный ввод чисел превратили
арифмометры в современные элегантные микрокалькуляторы.
Следует отметить, что использование микрокалькуляторов (без программного управления) не привело к существенному увеличению производительности вычислительного труда. Так, вручную человек способен совершить за сме
ну (7 часов) порядка 600 арифметических операций, а с помощью микрокалькулятора лишь в 4 раза больше - порядка 2500 операций. Это связано с тем, что
при использовании микрокалькуляторов автоматизируются лишь отдельные
этапы вычислительного процесса. Остается много ручного труда: набор чисел,
кодов операций, клавиш исполнения и т.п., что существенно снижает скорость
вычислений.
Мысль об автоматизации всего вычислительного процесса была впервые
высказана профессором математики Кэмбриджского университета Ч. Бэббиджем. В 1833 году им был построен действующий макет первой вычислительной машины с программным управлением. Машина была механической и содержала следующие составные части: «склад» - блок, в котором хранились числа; «фабрика» - устройство, в котором производились операции над числами;
«контора» - блок, в котором осуществлялось управление последовательностью
выполнения действий над числами.
Машина Ч.Бэббиджа выполняла операции сложения и вычитания за 1 секунду, операции умножения и деления за 1 минуту. Числа задавались в 10 системе счисления. На складе могло храниться до 100 чисел, содержащих до 50
разрядов. Каждое число задавалось фиксацией угла поворота зубчатых колес,
соответствующих каждому разряду числа .На каждом зубце помещалась одна
из 10 цифр (от 0 до 9). Числа передавались между складом и фабрикой с помощью специальных механических тяг. Последовательность выполнения операций задавалась программой. Первым в мире программистом оказалась А.Девис
дочь известного английского поэта Д.Байрона.
5
Полностью проект Ч.Бэббиджа осуществить не удалось из-за низкой
надежности механических конструкций. Его идея предвосхитила технические
возможности человека более чем на 100 лет.
1.2.
Электронные вычислительные машины
Успехи электроники позволили к середине XX века создать практически
безинерционные переключательные электрические элементы на базе электронных вакуумных ламп. Это позволило реализовать идеи Ч.Бэббиджа на новой
технологической основе. Публичная демонстрация первой в мире электронной
вычислительной машины (ЭВМ) состоялась в 1946 году в США. Эта машина,
реализованная на ламповых схемах, занимала площадь в несколько сот квадратных метров, потребляла сотни киловатт электроэнергии, требовала для своей
работы
десятки
человек
обслуживающего
персонала
(инженеры-
электронщики, механики, специалисты по холодильным установкам и др.). Работать на машине можно было не более нескольких часов в сутки, в основном
по ночам, поскольку схемы, содержащие тысячи радиоламп, выделяли значительное количество тепла и необходимо было с помощью холодильных установок поддерживать необходимый температурный режим.
Однако, все указанные выше несовершенства компенсировались тем, что
быстродействие первой ЭВМ оказалось в 1000 раз больше, чем у всех её электромеханических предшественников. Стало ясно, что будущее в вычислительной индустрии за ЭВМ. За прошедшие неполные 70 лет сменилось 4 поколения
ЭВМ, неузнаваемо преобразился их вешний вид, поразительно выросли их возможности.
ЭВМ первого поколения
Схемы машин были выполнены на электронных лампах. Выпускались
ЭВМ первого поколения со второй половины 40-х годов до середины 50-х годов.
Технические характеристики:
 быстродействие – 103 оп/сек;
6
 оперативное запоминающее устройство (ОЗУ) – порядка 103 ячеек,
каждая из которых содержит десятки двоичных разрядов;
 ввод информации – переключением тумблеров вручную, с перфорированной засвеченной фотопленки или бумажной ленты;
 вывод информации – на индикационное табло или цифровую печать.
Программное обеспечение:
 программирование в машинных кодах или с использованием мнемонических обозначений (различные автокоды на языках ассемблера):
 использование библиотек стандартных программ.
Структурная схема ЭВМ первого поколения
УВВ
АЛУ
ОЗУ
УУ
УВВ – устройства ввода-вывода информации;
АЛУ – арифметико-логическое устройство;
УУ – устройство управления;
ОЗУ – оперативное запоминающее устройство;
– передача управляющей информации;
– информационные потоки.
Программа, управляющая работой ЭВМ, состоит из последовательности
команд, хранящихся в ОЗУ. В командах выделяются операционные части, содержащие коды выполняемых операций, и адресные части, в которых указываются адреса (номера) ячеек, из которых необходимо считать и (или) записать
информацию. Каждая команда имеет свои исходные данные (операнды), свой
результат и правила его получения. В остальном выполнение любой команды
происходит по следующей схеме.
7
Элементарный цикл функционирования ЭВМ
1. Считывание по заданному адресу очередной (первой) команды из ОЗУ в
УУ.
2. Анализ команды в УУ: выделение операционной и адресной частей.
3. Настройка АЛУ на выполнение требуемой операции и считывание в
АЛУ необходимых операндов из ОЗУ или УУ.
4. Выполнение операции в АЛУ.
5. Выдача результата операции из АЛУ в ОЗУ или УУ.
6. Подготовка УУ к выполнению следующей команды программы: формирование адреса следующей выполняемой команды.
В ходе работы ЭВМ элементарный цикл многократно повторяется с незначительными изменениями. В качестве операндов может также использоваться
результат предыдущей операции. Адрес следующей команды обычно формируется путем увеличения адреса предыдущей команды на величину равную её
длине. Если же предыдущая команда была командой перехода условного или
безусловного, то адрес следующей команды формируется по адресу, указанному в команде перехода.
Недостатки в организации вычислительного процесса
ЭВМ первого поколения
1. Большая разница между временем выполнения программы и временем
действий оператора за пультом управления ЭВМ.
2. Огромная разница между скоростью работы АЛУ и УУ, с одной стороны, и скоростью работы УВВ, содержащих механические блоки, с другой стороны (порядка 103 раз).
3. Необходимость программирования управлением работой УВВ, имеющих различные физические основы и принципы действия.
В СССР стали производить ЭВМ первого поколения с 1950 года. Наиболее известными среди них были такие машины, как
«МЭСМ», «Стрела»,
«БЭСМ» и «Урал», не уступающие по своим характеристикам лучшим зарубежным ЭВМ первого поколения.
8
ЭВМ второго поколения
Схемы машин были выполнены на дискретных полупроводниковых элементах – транзисторах, что позволило существенно сократить габариты ЭВМ и
количество потребляемой электроэнергии. Значительно повысилась надежность
работы машин и оказалось возможно сократился штат обслуживающего персонала. Выпускались ЭВМ второго поколения с середины 50-х годов до конца
60-х годов.
Технические характеристики:
 быстродействие – до 106 оп/сек;
 оперативное запоминающее устройство (ОЗУ) – порядка 105 ячеек,
каждая из которых содержала десятки двоичных разрядов;
 ввод информации –
через электрифицированную пишущую ма-
шинку, перфоленты и перфокарты;
 вывод информации – на монитор и алфавитно-цифровое печатное
устройство.
В связи с дальнейшим увеличением разрыва в быстродействии процессора (УУ и АЛУ) и устройств ввода и вывода (УВВ) архитектура ЭВМ была изменена таким образом, чтобы работа процессора не тормозилась относительно
медленно работающими устройствами ввода-вывода.
Структурная схема ЭВМ второго поколения
АЛУ
УВВ
КД
ОЗУ
УУ
КД – канал данных, представляющий собой специализированный процессор, обеспечивающий управление передачей данных между ОЗУ и УВВ. Работой КД управляет центральный процессор (АЛУ и УУ). Использование КД
позволило совместить во времени операции ввода и вывода информации с работой центрального процессора (ЦП). Достигается это следующим образом.
9
При попадании ЦП на команду ввода или вывода информации её исполнение
поручается процессору КД, который выполняет все необходимые для этого
действия одновременно с работой ЦП над другими командами. После окончания выполнения операции ввода или вывода процессор КД прерывает работу
ЦП соответствующим сообщением, освобождая ЦП от необходимости следить
за выполнением этих операций.
Чтобы максимально загрузить ЦП в увеличившееся по объему ОЗУ одновременно стали помещать программы нескольких пользователей (пакетный
режим). Были разработаны программы буферизации ввода-вывода: выделения
участков ОЗУ для размещения и хранения данных до тех пор, пока они не потребуются, организации выходных очередей данных к устройствам вывода.
Программное обеспечение:
 операционная система (ОС) – совокупность управляющих программ, обеспечивающих обработку прерываний, управление устройствами ввода и вывода информации (программы-драйверы), контроль времени выполнения программы (программы-таймеры) и некоторые другие;
 системы программирования – совокупность обрабатывающих программ, обеспечивающих ввод, трансляцию и отладку программ на языках высокого уровня (Фортран, Алгол, Кобол и др.)

пакеты прикладных программ, предназначенных для решения кон-
кретных задач.
В СССР среди ЭВМ второго поколения наиболее распространенными
были машины серий «Минск» и «БЭСМ». Последней среди машин второй серии была «БЭСМ-6», считавшейся лучшей в мире для своего класса. Индикационные панели этой ЭВМ были специально так расположены, что на них
можно было прочитать слово «жду», когда ЦП находился в режиме ожидания.
В конце 60-х годов мне приходилось работать на БЭСМ-6 в институте прикладной математики АН СССР и я часто видел это зовущее слово.
10
ЭВМ третьего поколения
Транзисторные схемы этих машин выполнялись по интегральной технологии, обеспечивающей реализацию вместе с полупроводниковыми элементами
схем также и соединений между ними. Вначале уровень интеграции был относительно невелик (десятки элементов) позднее он существенно вырос (десятки
и сотни тысяч элементов). Это позволило еще больше сократить размеры схем,
а также значительно повысить их надежность. Выпускались ЭВМ третьего поколения в основном в течение 70-х годов XX столетия.
Технические характеристики:
 быстродействие – порядка 10 млн.оп/сек;
 оперативное запоминающее устройство (ОЗУ) – до 10 мбайт;
 ввод информации – клавиатура, магнитные диски (МД) и ленты (МЛ)
 вывод информации – на монитор, МД, МЛ и печатающие устройства.
Структурная схема ЭВМ третьего поколения принципиально не отличается от схемы ЭВМ второго поколения. Использование интегральной технологии привело к конструктивному объединению схем АЛУ и УУ в единый центральный процессор.
Учитывая, что процессор перешел с миллисекундного на микросекундный
цикла функционирования, а скорость работы УВВ практически не изменилась
из-за наличия в них механических компонент, актуальной стала проблема согласования их совместной работы. Были разработаны и внедрены новые способы организации вычислительного процесса:
1. Режим мультипрограммирования, обеспечивающий максимальную
пропускную способность вычислительной системы при одновременном выполнении нескольких задач. Прием этот аналогичен способу повышения эффективности использования гроссмейстера в игре с новичками путем организации
сеанса одновременной игры. В ЭВМ это достигается следующим образом: любое задание (задача), запросившее КД в ходе его обработки, прерывается и переводится в состояние ожидания. Из очереди заданий, ожидающих своего выполнения, извлекается следующее задание и начинает выполняться. КД тем
11
временем обслуживает запрос ввода-вывода предыдущего задания. И так по
очереди (в циклическом порядке) обслуживаются все задания.
К недостаткам режима мультипрограммирования можно отнести неравномерность по времени обслуживания заданий с различным количеством обращений к УВВ. Те задания, которым требуется меньше обращений к внешним
устройствам, пропускаются через компьютер быстрее. Для преодоления этой
неравномерности использовался следующий режим.
2. Режим разделения времени отводит каждой программе некоторый
фиксированный квант времени на ЦП, по истечении которого задание принудительно снимается и ставится в хвост циклической очереди, разумеется, если оно
не было еще раньше снято из-за обращения к КД. ЦП при этом переходит к обработке следующего задания из очереди.
В системах разделения времени организация вычислительного процесса
резко усложнилась, поскольку стали возможны одновременные обращения к
КД со стороны различных заданий. В связи с этим в состав ОС были добавлены
программы, определяющие порядок обслуживания прерываний, защиты ресурсов прерванных программ: сохранность используемых ими участков ОЗУ, состояние регистров ЦП и т.д. Общее число управляющих программ, входящих в
ОС, существенно возросло и их стали размещать во внешней дисковой памяти.
В ОЗУ постоянно находилась лишь относительно небольшая резидентная часть
ОС.
3. Режим реального времени обеспечивает выполнение задания в рамках
требуемых временных ограничений. Этот режим широко используется в системах управления различными технологическими процессами критичными по
времени.
ЭВМ третьего поколения выпускались, как правило, сериями программно-совместимых машин, отдельные представители которых обладали различной производительностью. Так, например, в СССР была разработана серия малых машин от СМ-1 до СМ-4. Они имели небольшие габариты и на их базе создавались
автоматизированные
рабочие
12
места
(АРМ)
для
инженеров-
проектировщиков самых разнообразных специальностей. В СССР и странах
СЭВ производились большие универсальные ЭВМ единой серии (ЕС), начиная
от ЕС-1010 до ЕС-1060, широко использовавшихся в самых разнообразных
сферах народного хозяйства. Эти машины по своей архитектуре соответствовали американским ЭВМ серии IBM-360, развитие архитектуры которых дало
тупиковую ветвь. Указанное заимствование затормозило развитие собственных
отечественных компьютерных разработок. В результате машина ЕС-1060 оказалась по производительности сравнимой с БЭСМ-6, выпускавшейся на десять
лет раньше.
ЭВМ четвертого поколения
К ним относятся ЭВМ, реализованные на больших интегральных схемах
(БИС). Их выпуск начался еще в конце 70-годы и продолжается до настоящего
времени. Уровень интеграции в БИС постоянно растет, достигнув величины в
десятки миллионной элементов на площадке размером 5 мм2. При этом имеем
дело со сверхбольшими интегральными схемами (СБИС). В некоторых классификациях ЭВМ на СБИС относят уже к пятому поколению. Учитывая значительный разброс машин по производительности и как следствие сферам применения, более актуальной в настоящее время стала классификация ЭВМ
именно по этим двум параметрам.
Классификация
1. Супер-ЭВМ, являющиеся рекордсменами по своей производительности. На данный момент времени к ним относят машины с производительностью, измеряемой в петафлопсах (1015 оп/сек). Современные суперкомпьютеры
представляют собой большое число высокопроизводительных серверных компьютеров, соединенных между собой локальной высокоскоростной магистралью. В России наибольшей производительностью обладает суперкомпьютер
«Ломоносов», расположенный в МГУ им. М.В.Ломоносова. Его наибольшая
производительность до 1,3 петафлопс. В мире суперкомпьютеров рекордсменом на сегодняшний день является «Тяньхэ-2»(Китайская народная республика) с наибольшая производительность до 40 петафлопс. Оперативная память
13
суперкомпьютеров имеет объем в сотни Тбайт (1012), а общий объем дисковой
памяти порядка Пбайт(1015). Используются супер-ЭВМ для решения задач
большой вычислительной сложности: математических (системы линейных алгебраических уравнений большой размерности), физических (гидродинамика),
экологических (прогноз погоды), национальной обороны (моделирование ядерных испытаний).
2. Универсальные ЭВМ общего назначения предназначены для решения
широкого круга народнохозяйственных задач. Максимальное быстродействие
около 1 гигафлопса (109 оп/сек). К этому классу машин относится большинство
моделей фирмы IBM (семейства 370 и 390) и их отечественные аналоги ЕС
ЭВМ.
3. Мини-ЭВМ, используемые для создания АРМ специалистов самого
разного профиля. Максимальное быстродействие около 1 мегафлопса (106
оп/сек). К мини-ЭВМ относятся рабочие станции SUN, машины серии PDP (затем VAX) фирмы DEC и некоторые их отечественные аналоги.
4. Микро-ЭВМ. Их отличительной особенностью является то, что на одной СБИС полностью реализован процессор - устройства АЛУ, УУ и связи
между ними, называемый, с учетом такой реализации, микропроцессором. Современные микро-ЭВМ обладают быстродействием сравнимым с быстродействием больших ЭВМ 2 поколения. При добавлении к микропроцессору периферийных устройств получаем следующие классы микро-ЭВМ:
а) микропроцессорные средства и системы, используемые в различных
производствах: автоматизированных линиях, станках с числовым программным
управлением (ЧПУ) и т.п., если к микропроцессору подключаются преобразователи аналог-цифра (ЦАП) и цифра-аналог (АЦП);
б) персональные компьютеры (ПК), если к микропроцессору подключаются клавиатура и монитор.
14
Персональные компьютеры
Первый ПК был собран в 1976 году. Его «родителями» были С.Джобс и
С.Возняк, основавшие 1 апреля 1976 года фирму «Apple Computer». С 1981 года
свой ПК начала выпускать фирма IBM. На производительность ПК влияют,
прежде всего, два фактора: разрядность процессора – сколько двоичных разрядов может обрабатываться одновременно (параллельно) и тактовая частота,
определяющая число элементарных действий, выполняемых в секунду. Быстродействие компьютера, очевидно, растет с увеличением каждого из этих факторов. За почти 40 лет производства разрядность ПК возросла с 8 до 64, тактовая частота с 4 МГц до 1,5 ГГц. Объем ОЗУ увеличился с десятков Кбайт до десятков Гбайт.
В СССР массовый выпуск ПК начался в 1984 году со школьного ПК
«Агат» (16 разрядный), бытовой ПК БК-0010 (8 разрядный), начиная с 1985 г., и
школьный ПК «Корвет» с 1988 г. (8 разрядной). Учебные классы отечественных школьных ПК наряду с японским классами ПК «Ямаха» (8 разрядный) широко использовались в ходе компьютеризации образования, начатой в 1985 года. С начала 90-х годов в нашу страну хлынул поток импортных IBM –
совместимых ПК сначала всех серий до 486 включительно, а позднее всех поколений Pentiun.
По конструктивным особенностям современные ПК подразделяются на
две группы: стационарные и переносные. Стационарные ПК предназначены для
организации автоматизированного рабочего места в офисе, учебном компьютерном классе и т.д. Переносные или мобильные ПК подразделяются на портативные (лаптопы), блокнотные (ноутбуки) и планшетные (ноутбуки с сенсорным экраном).
Стационарный ПК обычно имеет в качестве дополнительного устройства ввода информации манипулятор-указатель (мышь), для вывода информации, кроме монитора, используется печатающее устройство (принтер).
15
Структурная схема ПК
ЦП
Клавиатура
НЖМД
DD
школьСистемная магистраль ный
ПК
«Корвет»Д
ПЗУ
Мышь
ОЗУ
Монитор
Принтер
НОД
Модем
ЦП – центральный процессор; ПЗУ – постоянное запоминающее устройство; НЖМД – накопитель на жестких магнитных дисках; НОД – накопитель на
оптических дисках.
1.3.
Тенденции развития архитектуры компьютеров
Одной из важнейших характеристик компьютеров является их быстро-
действие. Как уже отмечалось современные супер-ЭВМ обладают быстродействием до 1015 оп/сек. ЭВМ первого поколения считали со скоростью всего 103
оп/сек. За счет чего был достигнут такой огромный прогресс? Среди многих
факторов можно выделить два основных: развитие элементной базы и использование новых решений в архитектуре компьютеров. Развитие элементной базы
шло по линии увеличения разрядности процессоров (от 8 разрядов первых ПК
до 128 разрядов у современных рабочих станций) и тактовой частоты (рост по
порядку от 10 Мгц до 10 Ггц). Значения обеих этих характеристики существенно влияют на скорость работы компьютера. Однако, только за их счет невозможно было добиться роста быстродействия на 12 порядков. Это было достигнуто, в первую очередь, за счет внедрения новых архитектурных решений,
направленных на распараллеливание вычислений.
Конвейеризация
Конвейеризация заключается в разбивке выполнения команд на отдельные
этапы, каждый из которых выполняется на своей ступени конвейера процессора. Каждая команда продвигается по конвейеру по мере освобождения после16
дующих ступеней. В результате, на конвейере одновременно могут обрабатываться несколько последовательных команд программы. Число ступеней (этапов) увеличивают, сокращая время пребывания команды на каждой из ступеней. Так, конвейер процессора первых ПК Pentium содержал 5 ступеней, а конвейер процессора ПК Pentium IV содержит 20 ступеней. Быстродействие (производительность) ЦП оценивается темпом выхода выполненных команд со всех
его конвейеров. ЦП, содержащий более одного конвейера, называется суперскалярным и скалярным при наличии одного конвейера. Все процессоры Intel
до 486 серии включительно были скалярными. При наличии нескольких конвейеров процесс выполнения команд может разбиваться на соответствующие
потоки – части процесса, реализующие выполнение последовательности команд на одном конвейере. Классический Pentium имеет двухпотоковый ЦП, а
процессор ПК Pentium IV является трехпотоковым. Конвейеризация по своей
сути является одним из способов распараллеливания вычислений с целью повышения быстродействия компьютера. Рассмотрим некоторые приемы явной
параллельной обработки данных.
Параллельные вычисления
Первый прием называется переименование регистров. Он применяется для
обеспечения одновременного исполнения нескольких команд, ссылающихся на
одно и тоже логическое имя регистра. Суть приема состоит в том, что в результате соответствующего переименования несколько регистров получают одинаковые логические имена (разумеется, вместе с одинаковым содержимым) на
время выполнения таких команд, что позволяет их одновременное исполнение
в различных потоках. Этот прием допустим, если между рассматриваемыми
командами нет причинно-следственных связей, приводящих к изменению значения регистра с общим логическим именем.
Другим приемом распараллеливания вычислений является упреждающая
выборка, или продвижение данных. Такая выборка означает возможность начала исполнения команды до готовности всех её операндов. При этом на одном
17
конвейере выполняются все возможные действия команды с готовым операндом, пока на другом конвейере готовится другой операнд.
Прием предсказание переходов предполагает продолжение выборки и обработки процессором команд, расположенных после команды ветвления
(условного перехода), не дожидаясь проверки самого условия. Выбор процессором ветки для продолжения вычислений производится на основе статистического анализа, опирающегося на предысторию вычислительного процесса. Для
каждого ветвления накапливается статистика переходов, на основе которой и
осуществляется выбор. Далее идет исполнение по предположению. Если предположение оказывается ложным, то конвейер выполнения соответствующих
команд останавливается (сбрасывается) и на нем начинается выполнение других команд.
Рассмотренные приемы позволяют производить параллельные вычисления
на базе одного процессора. Параллельные вычисления естественным образом
реализуются в многопроцессорных системах, на базе которых реализуются супер-ЭВМ.
Многопроцессорные системы
Векторно-конвейерные компьютеры. В многопроцессорных системах конвейерных компьютеров для эффективной загрузки множества доступных конвейеров используются векторные команды, каждая из которых оперирует с
массивами данных. При этом возможно одновременное выполнение одной и
той же операции над группой операндов. Векторные команды удобно использовать, например, при работе с векторами и матрицами. В однопроцессорных
системах векторные команды используют многоразрядные регистры, в которые
последовательно упакованы группы чисел. Так, например, в ПК Pentium MMX
используются с этой целью 80-разрядные регистры.
Массивно-параллельные компьютеры. Строятся на базе процессоров, обладающих своей локальной памятью, соединённых коммуникационной сетью.
К достоинствам данной архитектуры можно отнести высокую мобильность по
производительности: для достижения требуемой её величины достаточно варь18
ировать число используемых процессоров. Однако, для таких компьютеров
сложно составлять эффективные программы, использующие параллельные вычисления. Дело в том, что скорость обмена информацией между процессорами
существенно меньше скорости локальной обработки данных.
Параллельные компьютеры с общей памятью. Строятся на базе процессоров, имеющих прямой доступ к общей памяти. При этом снимается отмеченная
выше проблема эффективности программирования параллельных вычислений.
Основным недостатком данной архитектуры является ограниченность по техническим причинам числа процессоров, имеющих доступ к общей памяти.
Кластерные компьютеры строятся из узлов, каждый из которых состоит из
набора процессоров с общей памятью. Узлы соединяются между собой высокоскоростной магистралью. Процессоры могут быть как векторно-конвейерными,
так и традиционной архитектуры. Производительность системы регулируется
числом используемых узлов.
Отметим, что какой бы конкретной ни была архитектура многопроцессорной системы, эффективное её использование возможно лишь на параллельных алгоритмах, решающих задачи с одновременным выполнением серий однотипных операций
В дальнейшем устройство и работа основных блоков компьютера будут
рассматриваться в основном на примере ПК, как наиболее массового типа компьютера, в котором нашли свое отражение современные информационные технологии.
При вычислениях, компьютеру, как и человеку, необходимо использование определённых правил записи чисел.
Глава 2 . Системы счисления
2.1. История развития систем счисления
Система счисления – совокупность приёмов обозначения (записи) чисел с
помощью специальных символов (цифр). Число различных символов (цифр),
допустимых в записи чисел определяет основание СС В соответствии с исполь19
зуемыми правилами записи чисел все системы счисления (СС) можно разбить
на два класса: позиционные и непозиционные СС. В позиционных СС вклад
каждого символа (цифры) в величину числа зависит от его положения (позиции) в записи числа. В непозиционных СС такой зависимости нет и каждому
символу (цифре) записи числа соответствует фиксированный вклад в величину
числа.
Мы привыкли пользоваться позиционной СС с десятичным основанием.
Десять пальцев рук – вот причина, по которой десятичная СС стала общепринятой. Пальцевым счётом человек пользуется с доисторических времен. Древнее
изображение десятичных цифр связывалось с числом углов, использовавшихся
в их изображении. Например, 0 – углов нет, 1 – один угол, и т. д. Позднее написание десятичных цифр претерпело существенные изменения. Форма, которая
используется в настоящее время, установилась в XVI веке.
Десятичная система счисления впервые была введена в Индии. Позднее
десятичной СС стали пользоваться арабы. Европейцы заимствовали её у арабов,
назвав поэтому десятичную СС арабской. Следы этой исторической ошибки
можно встретить и в некоторых современных публикациях. Возникновение и
распространение десятичной СС явилось одним из важнейших достижений человечества. Для развития вычислительной деятельности оно имело такое же
значение, как появление письменности для фиксации общей мыслительной деятельности человека.
В различные исторические периоды в разных странах использовались СС с
другими основаниями. Ряд из них также имел анатомическое происхождение:
пятеричная СС древнего Китая, двадцатеричная СС ацтеков и майя, двенадцатеричная СС, используемая в английской системе мер (1 фут = 12 дюймов) и в
денежной системе (1 шиллинг = 12 пенсам). В двенадцатеричной СС счёт велся
дюжинами. Дюжина соответствовала числу фаланг четырёх пальцев (кроме
большого пальца). Кстати, наборы посуды, например, чайные сервизы, до сих
пор принято продавать дюжинами на 12 персон.
20
Основание шестидесятеричной СС, использовавшейся в Древнем Вавилоне
было выбрано, как гласит одна из легенд, в результате своеобразного «вычислительного компромисса» при слиянии двух племен, одно из которых пользовалось шестеричной, а другое – десятичной СС. По другой естественнонаучной
легенде выбор столь большого основания был обусловлен тем, что древние вавилоняне считали продолжительность года равной 360 суткам, что связано с
числом 60. Отголоски шестидесятеричной СС дошли до наших дней. В геометрии при измерении углов пользуется шестидесятеричная градусная мера. В шестидесятеричной СС записывают также время: 1 час = 60 минут, 1 минута = 60
секундам.
Человечество постепенно шло к позиционным СС от непозиционных. Одной из первых непозиционных систем была, по видимому, СС с единичным основанием, использующая для записи чисел всего один символ. Практически
каждый человек в детстве пользовался этой СС, задавая числа совокупностью
счётных палочек, число которых равно изображаемому числу. Для сокращения
объёма записи необходимо увеличение основания СС.
Так, например, в древнем Египте использовалась десятичная, но непозиционная СС. В ней для обозначения таких чисел как 1,10,102,103,…,107 были приняты специальные знаки. Числа записывались как комбинации этих знаков, в
которых каждый знак мог повторяться не более 9 раз. Величина числа равнялась сумме значений всех знаков, используемых в записи числа. Аналогична
египетской СС другая более известная римская СС. В ней для обозначения чисел 1,5,10,50,100,500 и 1000 приняты соответственно заглавные латинские буквы I,V,X,L,C,D и M. Числа записывались как комбинации этих букв, в которых
каждая буква могла повторяться подряд не более трёх раз. Значение числа в
римской СС подсчитывается с использованием следующих правил:
1. Числа, соответствующие одинаковым буквам, расположенным в записи
подряд, складываются.
21
2. Числа, соответствующие соседним буквам ряда, расположенным в обратном порядке (буква меньшего числа перед буквой большего числа), вычитаются (из большего - меньшее).
3. Числа, соответствующие группам букв, расположенным в записи слева
направо в порядке убывания их числовых значений, складываются.
Пример 2.1.1. Записать в римской СС следующие десятичные числа:
375 → СССLXXV
1942 → MCMXLII
2015 → MMXV
С числами, записанными в римской СС неудобно производить арифметические действия. По этой причине в настоящее время римская система счисления используется лишь в «украшательных» целях: в записи юбилейных дат, в
названиях столетий в обозначении реквизитов документов, на циферблатах часов и т.п.
Алфавитные СС, в которых для записи чисел использовался буквенный
алфавит, аналогичные римской СС использовались у древних славян. У одних
славянских народов числовые значения букв устанавливались в порядке следования букв славянского алфавита, у других, в частности у русских, роль цифр
играли не все буквы, а только те, которые имеются в греческом алфавите. Над
буквой, обозначающей цифру, ставился специальный знак – «титло». Славянская система счисления сохранилась в богослужебных книгах. Алфавитная система счисления была также распространена у древних армян, грузин, греков
(ионическая система счисления), арабов, евреев, и других народов Ближнего
востока.
Как уже отмечалось, в непозиционных СС неудобно производить арифметические операции над записями чисел. Кроме того, для расширения диапазона представимых чисел необходимо увеличивать основание системы - вводить в алфавит дополнительные символы. Всё это привело к тому, что в насто-
22
ящее время человечество окончательно перешло к использованию позиционных СС.
Преимущества позиционных СС: возможность записи сколь угодно
больших чисел при фиксированном основании, удобство реализации арифметических операций – выполнение одних и тех же действий в каждом разряде
записи чисел, ярко проявились в связи с разработкой схем ЭВМ и их программного обеспечения.
Поскольку физические элементы, из которых строятся схемы ЭВМ, могут
находиться в двух устойчивых состояниях, стало удобно использовать для записи чисел позиционную двоичную СС. Правила выполнения арифметических
действий в двоичной СС были сформулированы Г.В. Лейбницем ещё в 1703 г.
Они оказались востребованными в связи с развитием компьютерной арифметики.
2.2. Понятия «своей» и «чужой» системы счисления (СС)
В компьютере все числа записываются в двоичной позиционной системе
счисления (СС), так как физические элементы, из которых строятся схемы, могут находиться в двух устойчивых состояниях.
Поскольку человек оперирует с числами, записанными в десятичной позиционной СС, то при решении задач на ЭВМ возникает необходимость в переводе записей чисел из «своей» десятичной СС в «чужую» двоичную СС и обратно. В своей СС исполнитель (человек или машина) умеет выполнять преобразования чисел, соответствующие абстрактным арифметическим действий, а в
любой чужой СС исполнитель может лишь расчленять записи чисел на разряды
и нумеровать их в своей же СС. Обозначим основание своей СС через p, основание любой чужой СС обозначим через q. Номера позиций, в которых располагаются q-ичные символы, равно как и само основание q записывается в своей
СС. Записи в своей СС называются для краткости «числами».
23
Исполнители алгоритмов перевода записей чисел с основаниями p и q
должны знать таблицы соответствия символов p-ичного и q-ичного алфавитов,
чтобы:
- каждому числу  (0    q-1), задаваемому символом (при p > q) или последовательностью символов p-ичного алфавита (при p < q), сопоставлять
символ d()= из q-ичного алфавита;
- каждому символу  из q-ичного алфавита сопоставлять число n(), задаваемое символом или последовательностью символов p-ичного алфавита.
2.3. Перевод записей чисел из своей в чужую СС
Необходимо по заданному числу Х найти его q-ичную запись:
Х→ r . . . 0 ,-1 . . . -s.
Для получения искомой записи достаточно представить число Х в виде
разложения по степеням числа q:
Х=r qr+. . . +1 q1+0 q0+-1 q-1+. . . +-s q-s.
После этого, пользуясь принципом позиционности записи и таблицей соответствия символов p-ичного и q-ичного алфавитов, для решения задачи достаточно записать последовательно символы d(i)=i ,i=𝑟,
̅̅̅̅̅̅
−𝑠 q-ичного алфавита:
d(r) . . . d(1) d(0), d(-1) . . . d(-s)= r . . . 0 ,-1 . . . -s.
Как найти коэффициенты i,i=𝑟,
̅̅̅̅̅̅
−𝑠 ? Рассмотрим целую часть числа Х:
Хцел=r qr+. . . +1 q1+0 q0=(...(r) q+. . . +2) q +1) q1+0.
Таким образом, коэффициент 0 является остатком от деления на q числа
Хцел. Коэффициент 1 является остатком от деления на q частного от предыдущего деления и т.д. Процесс продолжается до тех пор, пока очередное частное
не станет меньше q, образуя последний коэффициент r. Учитывая способ получения коэффициентов, алгоритм перевода целых чисел из своей СС в чужую
называется алгоритмом последовательного деления. Так как коэффициенты
получаются от младших разрядов к старшим, то в результат они записываются
в обратном порядке.
24
Пример 2.3.1. 1.Записать число 610 в двоичной СС.
6:2=3(0), 3:2=1(1). Получаем 610=1102
2.Записать в двоичной СС число 910.
9:2=4(1), 4:2=2(0), 2:2=1(0). Получаем 910=10012.
Рассмотрим дробную часть числа Х. Для нахождения коэффициентов
̅̅̅̅̅̅̅̅̅
i,i=−1,
−𝑠 представим Хдр в следующем виде:
Хдр=-1 q-1+. . . +-s q-s=q-1(-1+ q-1(-2+ . . . + q-1(-s)…).
После умножения на q левой и правой частей предыдущего равенства получаем
Хдр q =-1+ q-1(-2+ . . . + q-1(-s)…).
Таким образом, коэффициент -1 является целой частью произведения Хдр
на q. Учитывая вид дробной части произведения, коэффициент -2 является целой частью её произведения на q и т.д. Учитывая способ получения коэффициентов, алгоритм перевода правильных дробей из своей СС в чужую называется
алгоритмом последовательного умножения.
Пример 2.3.2. 1.Записать в двоичной СС число 0,2510.
0,25 2 = 0,5; 0,5 2 = 1,0. Получаем 0,2510 = 0,012.
2.Записать в двоичной СС число 0,62510.
0,625 2 = 1,25; 0,25 2 = 0,5; 0,5 2 = 1,0. Получаем 0,62510 = 0,1012.
В общем случае при переводе правильных дробей возможно появление
периодических дробей. Так, например, 0,110 = 0,00011(0011)2. Возникает вопрос,
сколько знаков после запятой необходимо брать.
Дробные числа являются, как правило, приближенными и поэтому результат перевода также может быть лишь приближенным числом, даже если
при переводе очередное произведение является целым, как в рассмотренных
примерах. Точность приближенного числа равна единице младшего разряда его
записи. Для сохранения точности приближенных чисел необходимо равенство
единиц их младших разрядов. Критерий равноточности имеет вид: p-t = q-s, где
t - число знаков после запятой в p-ичной записи, s - число знаков после запятой
в q-ичной записи. На основе критерия равноточности получаем s=t log p/log q.
25
Отношение логарифмов не зависит от значения основания, поэтому для удобства вычислений его выбирают равным меньшему из чисел p и q. В рассматриваемых примерах p=10, q=2. Для первого примера получаем s=2 log210/log22
6,6. Поскольку s целочисленная величина, то в качестве результата выбирается
ближайшее целое, при этом s=7 и 0,2510  0,01000002. Для второго примера получаем s=3 log210/log22 9,9. Выбираем s=10 и 0,62510  0,10100000002. Для
числа 0,110 имеем s=log210/log22 3,3 и выбираем s=3. Поскольку отбрасываемая часть дроби не равна нулю, как в предыдущих примерах, то для повышения
точности предварительно производят симметрическое округление результата
до требуемого числа знаков. В рассматриваемом примере отбрасываемая часть
дроби больше половины единицы третьего разряда после запятой и получаем
0,110  0,0012.
Замечание. В рассмотренных примерах q p и каждый символ i из qичного алфавита совпадает с одноразрядным числом n(i) из p-ичного алфавита. С другой стороны, каждое одноразрядное число i (0  i  q-1) записывается
с помощью одного q-ичного символа d(i). Таким образом, имеют место графические равенства i=n(i) и i=d(i).
При q>p это не всегда так. Действительно, q-ичная запись любого числа
Х, из диапазона
p  X  q-1, являющегося, по крайней мере, двухразрядным,
будет содержать лишь один q-ичный символ, т.е. i≠n(i). Естественно, что в
общем случае и i≠d(i), поскольку в алгоритмах последовательного деления и
умножения делитель или частное содержит более одного разряда.
В следующей таблице приведены для примера десятинные эквиваленты
символов 16-ричного алфавита.
Таблица 2.3.1.
16 cc 0
1
2
3
4
5
6
7
8
9
А
В
С
D
E
F
10 cc 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
26
Пример 2.3.3. Записать в 16-ричной СС число 95,72510.
Для целой части числа получаем: 95:16=5(15), остаток 15 соответствует
символу F, т.е. 9510=5F16. Для дробной части определяем число знаков после запятой s=t log p/log q =3 log210/log216  2,47. При s=2 получаем 0,72516=11,6
(11→В); 0,616=9,6; 0,616=9,6. Так как первая отбрасываемая цифра (9) , больше половины 16-ричного «десятка», то после симметрического округления результата до двух знаков получаем во втором разряде после запятой число 10
(10→А). Итак, число 95,72510  5F,BA16.
2.4. Перевод записей чисел из чужой в свою СС
Необходимо по заданной q-ичной записи найти соответствующее число Х
(p-ичную запись)
r . . . 0 ,-1 . . . -s→ Х.
Учитывая принцип позиционности, подставляя вместо q-ичных символов
их числовые эквиваленты (p-ичные записи), получаем
X=n(r) qr+. . .+ n(1) q1+ n(0) q0+ n(-1) q-1+ . . .+ n(-s) q-s.
Алгоритм перевода q-ичной записи числа в p-ичную запись называется алгоритмом подстановки.
Пример 2.4.1. По двоичной записи 110,1012 найти соответствующее десятичной число.
Определим необходимое число знаков после запятой для десятичного
числа. По критерию равноточности t=s log q/log p=3 log22/log210  0,9. При t=1
получаем
110,1012=122+121+020+12-1+02-2+12-3  6,610.
Пример 2.4.2. По шестнадцатеричной записи DE,AC16 найти равноточное
десятичное число. По алгоритму подстановки, учитывая таблицу 2.3.1, имеем
X= n(D)161+n(E)160+n(A)16-1+n(C)16-2=
=13161+14160+1016-1+1216-2 =222+43/64
27
По критерию равноточности t=s log q/log p=2 log216/log210  2,4. Выбираем t=2. После вычислений и симметрического округления до двух знаков
после запятой получаем X  222,6710.
2.5. Алгоритмы сокращенного перевода
Если основания СС связаны между собой таким образом, что одно из них
равно целой степени другого, то задача перевода упрощается, распадаясь на
независимо решаемые подзадачи. Каждая из подзадач соответствует переводу
отдельных символов или групп символов исходной записи.
1. Пусть q=pl, где l>1 целое. Необходимо найти число Хp по исходной qичной записи. Применяя указанное равенство к алгоритму подстановок, получаем:
Xp=n(r)qr+. . .+n(1)q1+n(0)q0+n(-1)q-1+ . . .+n(-s)q-s=
=n(r)plr+. . .+n(1)pl+n(0)p0+n(-1)p-l+ . . .+n(-s)p-ls.
Таким образом, имеем разложение искомого числа по целым степеням
числа p. Чтобы получить запись в позиционной p-ичной системе необходимо
записать подряд слева - направо числа n(i), i=𝑟,
̅̅̅̅̅̅.
−𝑠 Если число разрядов в записи некоторых чисел n(i) меньше чем l, то их следует дополнить слева нулями до l разрядов, так как степени числа p идут в полученном разложении не
подряд, а со скважностью равной l.
Пример 2.5.1. По восьмеричной записи 673,2518 найти двоичное число
Х2. В данном случае q=8, p=2, т.е. q=p3. Так как q>p, то, как уже отмечалось, в
общем случае i≠n(i). Поскольку q 10, то символы исходной записи, графически совпадающие с соответствующими десятичными числами, могут быть
независимо переведены в двоичную СС с помощью алгоритма последовательного деления: 610 →1102, 710→1112, 310→112, 210→102, 510→1012, 110→12. Двоичные числа n(i), соответствующие символам десятичного алфавита, приведены
также в таблице 2.5.1.
28
После записи подряд слева - направо результатов посимвольного перевода, дополненных при необходимости слева нулями до трёх разрядов, получаем
Х2=110011111,010101001.
Таблица 2.5.1.
10 cc 0
1
2
3
4
2 cc
1
10
11
100
0
5
6
101 110
7
8
9
111
1000
1001
2. Пусть p=ql, где l>1 целое. Необходимо найти число Хp по исходной qичной записи. Выразим q чрез p: q=p 1/l. Применяя указанное равенство к алгоритму подстановок, получаем:
X=n(r)qr+. . .+ n(1)q1+n(0)q0+n(-1)q-1+ . . .+n(-s)q-s=
=n(r)pr/l+. . .+n(1)p1/l+n(0)p0+n(-1)p-1/l+ . . .+n(-s)p-s/l.
Таким образом, имеем разложение искомого числа по дробным степеням
числа p с шагом равным 1/l. Чтобы получить разложение по целым степеням
числа p выделим в полученном выражении группы по l слагаемых влево и
вправо от запятой, соответствующие группам по l разрядов влево и вправо от
запятой в исходной q-ичной записи. Вынесем за скобки из каждой группы последовательные целые степени числа p, получим разложение
Х=...+[n(2l-1) p(l-1)/l+...+n(1) p0]p1+[n(l-1) p(l-1)/l+...+n(0) p0] p0+
+[n(-1) p(l-1)/l+...+n(-l) p0] p-1+… .
В каждой квадратной скобке вернёмся к переменной q
Х=...+[n(2l-1) ql-1+...+n(1) q0] p1+[n(l-1) ql-1 +...+n(0) q0] p0+
+[n(-1) ql-1+...+n(-l) q0] p-1+… .
Выражения в квадратных скобках соответствуют записям алгоритма подстановок, переводящего l-разрядные q-ичные записи в p-ичную систему.
Таким образом, задача перевода из q-ичной системы в p-ичную систему
при условии, что p=ql, где l>1 целое, сводится к независимому переводу lразрядных групп, отсчитываемых влево и вправо от запятой. Если число разрядов целой части числа не кратно l, то число цифр старшей группы может быть
29
меньше l. Если число разрядов дробной части числа не кратно l, то недостающие разряды младшей группы можно дополнить по-разному и при этом указать
лишь диапазон, в котором может находиться последняя цифра результата.
Пример 2.5.2. По двоичной записи 1011101,01101012 найти соответствующее восьмеричное и шестнадцатеричное число.
В первом случае q=2, p=8, т.е. p=q3. Выделим влево и вправо от запятой
группы по три разряда. Старшая и младшая группы содержат при этом по одному разряду. Переведём каждую полученную группу в восьмеричную систему: 12→18, 0112→38, 1012→58, 0112→38, 0102→28. Границы для младшей группы
от 1002→48 до 1112→78. Получаем Х8=135,32{4÷7}.
Во втором случае q=2, p=16, т.е. p=q4. Выделим влево и вправо от запятой группы по четыре разряда. В старшую и младшую группы при этом попало
по три разряда. Переведём последовательно соответствующие двоичные записи
в шестнадцатеричную систему (можно вначале перейти в десятичную систему,
а затем в шестнадцатеричную, используя таблицу 2.3.1). Имеем слева - направо:
1012→516, 11012→D16, 01102→616. Границы для младшей группы от 10102→A16
до 10112→B16. Получаем Х16=5D,6{A÷B}.
Полезные советы
Если ни одно из оснований, исходное или результирующее, не равно целой степени другого, то можно попытаться найти такое третье число (основание), которое было бы связано с каждым из них требуемым образом. Используя
это основание как промежуточное, можно осуществить весь перевод с помощью сокращённых алгоритмов.
Пример 2.5.3. По восьмеричной записи 537,2468 найти четверичную запись. Этот перевод можно осуществить через двоичную систему как промежуточную. 537,2468→Х2=101011111,010100110 →11133,1103{0÷1}4.
Пример 2.5.4. По шестнадцатеричной записи Е2,Е416 найти восьмеричную запись. Используя двоичную систему как промежуточную, получаем
Е2,Е416→Х2=11100010,11100100 → 342,71{0÷1}8.
30
Если нет такого третьего основания, для которого бы в парах с основаниями q и p одно из оснований было бы равно целой степени другого, то для сокращения объёма вычислений можно в качестве промежуточного основания
использовать число равное целой степени меньшего из чисел q и p, ближайшее
к большему и з чисел q и p.
Пример 2.5.5. Записать в двоичной СС десятичное число 845,3610. Переведём сначала десятичное число в восьмеричную систему, а затем по алгоритму
сокращённого перевода в двоичную СС. Экономия в числе действий заключается в том, что каждое деление (умножение) на восемь заменяет три операции
деления (умножения) на два.
Переведём в восьмеричную СС целую часть числа:
845:8=105(5), 105:8=13(1), 13:8=1(5). Получаем 84510=15158.
Переведём в восьмеричную СС дробную часть числа. По критерию равноточности s=t log p/log q =2 log210/log28  2,2. При s=2 имеем
0,36 8 = 2,88; 0,88 8 =7,04. Получаем 0,3610  0,278. Итак
845,3610  1515,278=1101001101,0101112
Замечание. Кроме двоичной СС в компьютере используется также смешанная двоично-десятичная СС, когда в десятичной записи каждая цифра записывается в двоичной СС. Смешанная СС используется там, где основная часть
операций обработки связана не с хранением чисел, а лишь с вводом и выводом
их на различные индикаторные устройства.
Пример 2.5.6. Записать число 9210 в двоично-десятичной СС в упакованной (1) и неупакованной (2) форме.
1) 92=1001 0010
2) 92=0000 1001 0000 0010
Рассмотрим далее основные правила выполнения арифметических операций над числами, реализуемыми в компьютерах. Двоичная СС и ограниченность разрядной сетки регистров делают целесообразными существенные изменения этих правил по сравнению с теми правилами, которыми пользуется человек.
31
Глава 3. Компьютерная арифметика
3.1.
Представления чисел
Числа с фиксированной запятой
Такая форма представления чисел наиболее привычная для человека.
Запятая фиксируется между записями целой и дробной частей чисел. В современных компьютерах этот формат используется только для записи целых чисел. Целые числа используются как со знаком, так и в беззнаковой форме. Диапазоны целых чисел X, представимых на регистре, содержащем n разрядов:
0 ≤ X ≤ 2n − 1 – без знака
0 ≤ |X| ≤ 2n−1 − 1 – со знаком.
Например, в Паскале используются целые без знака с n=8 (тип данных
byte), с n=16(word) и со знаком для n=16(integer) и для n=32 (longint)
Компьютер может также оперировать с отдельными битами, битовыми
полями и строками бит; поддерживать работу с 16 -, 32 – и 64 – разрядными
целыми числами.
Числа с плавающей запятой
В этом формате каждое число X задается парой чисел: m – правильной
дробью со знаком (мантисса) и p – целым со знаком (порядок). Пусть q – основание СС, тогда X=m× qp. Выбирая разные мантиссы и порядок можно перемещать запятую по записи числа:
3,14 = 0,314×101 = 0,0314×102 = . . .
что и определило название данного формата. Для однозначной записи чисел с
плавающей запятой мантиссу всегда выбирают такой, чтобы первый знак после
запятой был отличен от нуля (нормализованная мантисса). В компьютере числа
с плавающей запятой записываются в двоичной СС (q =2).
Сравнение чисел с фиксированной и плавающей запятой
Числа с фиксированной запятой проще переводить из одной СС в другую и выполнять над ними арифметические операции по сравнению с числами
с плавающей запятой. Основными достоинствами чисел с плавающей запятой
является существенно больший диапазон представимых чисел.
32
Пусть для чисел с плавающей запятой под запись порядка p отведено r
двоичных разрядов, а под запись мантиссы m отведено s двоичных разрядов.
Под знаки мантиссы и порядка потребуется ещё по одному двоичному разряду
(0 - положительное число, 1 - отрицательное). Всего r+s+2 двоичных разрядов.
Модуль мантиссы принадлежит диапазону: 2−1 ≤ |𝑚| ≤ 1 − 2−𝑠 , поскольку
мантисса нормализована, а модуль порядка p не выходит из диапазона:
𝑟 −1)
2−(2
𝑟 −1)
≤ |𝑝| ≤ 2(2
. Тогда для числа с плавающей запятой 𝑋 = 𝑚 × 𝑞 𝑝
имеем диапазон:
𝑟
𝑟 −1)
2−2 ≈ 2−1 × 2−(2
𝑟 −1)
≤ |𝑋| ≤ (1 − 2−s ) × 2(2
𝑟
≈ 22 .
Для r=7 (соответствует типу данных real в Паскале) с учетом 210 ≈ 103 получаем диапазон:
10−38 ≈ 2−128 ≤ |𝑋| ≤ 2128 ≈ 1038
На регистре такой же длины можно разместить целые числа X с фиксированной запятой из диапазона:
0 ≤ |𝑋| ≤ 2𝑟+𝑠+1 − 1
Для s=39 (соответствует типу данных real в Паскале) с учетом 210 ≈ 103 получаем диапазон:
0 ≤ |𝑋| ≤ 247 − 1 ≈ 1016 ,
существенно меньшей величины по сравнению с числами с плавающей запятой.
Числами с плавающей запятой удобно пользоваться в приближённых
вычислениях. Пусть 𝑋 - некоторая величина, точное значение которой необходимо найти, x- приближённое значение величины 𝑋. Абсолютная погрешность
приближённого значения (числа) x полагается равной |X-x|=|Δx|. Поскольку истинное значение искомой величины неизвестно, то неизвестной остаётся и её
абсолютная погрешность. Поэтому вместо абсолютной погрешности приходится рассматривать предельную абсолютную погрешность 𝛥𝑥 , равную числу заведомо не меньшему абсолютной погрешности. Так, например, при измерениях
в качестве предельной абсолютной погрешности обычно выбирают величину
равную половине минимального деления шкалы измерительного прибора (ли33
нейки, сантиметра и т.п.). Относительная погрешность приближённого значения (числа) x полагается равной |𝛥𝑥|⁄|𝑋| = 𝛿𝑥. Так как фактически приходится
иметь дело с предельной абсолютной погрешностью и точное значение величины 𝑋 неизвестно, то рассматривают предельную относительную погрешность
𝛿𝑥 = 𝛥𝑥 ⁄|𝑥|, задаваемую отношением предельной абсолютной погрешности к
модулю приближенного значения вычисляемой величины.
Достоинством чисел с плавающей запятой является возможность сохранения постоянным значения величины предельной относительной погрешности
чисел. Действительно, величина предельной абсолютной погрешности не превосходит разности между двумя ближайшими числами с плавающей запятой,
равной 2−s ×2𝑝 , а нормализованная мантисса не меньше 2-1. При этом получаем
оценку
𝛥𝑥 2−𝑠 × 2𝑝 2−𝑠 2−𝑠
𝛿𝑥 =
=
=
≤ −1 = 2−𝑠+1 .
𝑝
|𝑋|
𝑚×𝑞
𝑚
2
Таким образом, при использовании в расчетах чисел с плавающей запятой все они имеют примерно одинаковые предельные относительные погрешности, определяющие качество соответствующих приближённых вычислений.
Знание лишь абсолютных погрешностей при использовании чисел с фиксированной запятой не даёт представления о качестве приближённых вычислений.
Например, если результат вычисления расстояния обладает абсолютной
погрешностью в 5 см, то для оценки его качества необходимо учитывать, что
при этом измерялось. Если это длина мебельной стенки, то степень приближения достаточно низкая, если же это расстояние от земли до луны, то можно говорить об использовании новой уникальной технологии.
Замечание. На практике в форматах представления чисел с плавающей
запятой используются различные приёмы, повышающие их эффективность.
Так, например, поскольку первый знак нормализованной мантиссы всегда
должен быть равен единице, то место на него не оставляют, увеличивая тем самым запись мантиссы на один разряд, работая фактически с таким форматом
представлением чисел с плавающей запятой: |𝑋| = 0,1𝑚 × 𝑞 𝑝 .
34
Чтобы сделать все порядки одного знака (положительного) порядки
смещают по числовой оси таким образом, чтобы нулевому порядку соответствовало бы самое маленькое по модулю число. При этом упрощается операция
сравнения с нулем чисел с плавающей запятой, так как число нуль будет содержать нули во всех своих разрядах.
3.2.
Арифметика чис ел с фиксированной запятой
Выполнение арифметических операций над целыми числами с фиксиро-
ванной запятой происходит, в основном, по обычным алгоритмам. Для сокращения объёмам записи операции над числами с фиксированной запятой будем
иллюстрировать на условном компьютере, регистры которого содержат по 8
двоичных разрядов. Старший знаковый разряд отделяется вертикальной чертой.
Операция сложения
Пример 3.2.1. Сложить в двоичной СС числа а=9 и в=5:
а=0|0001001
в=0|0000101
а+в=0|0001110=14
Пример 3.2.2. Сложить в упакованной форме двоично-десятичной СС
числа а=1889 и в=6376. (а+в=8265).
Запишем числа в двоично-десятичной СС в упакованной форме:
а=0001 1000 1000 1001
в=0110 0011 0111 0110.
Для того, чтобы операция сложения чисел в двоично-десятичной СС выполнялась корректно производится принудительный перенос единицы в старший
разряд из каждого десятичного разряда суммы, превышающей число девять,
путем прибавления числа шесть:
а=0001 1000 1000 1001
в=0110 0011 0111 0110
0111 1011 1111 1111
1 0110 0110 0110
1000 0001 0101 0101
1
1_____
1000 0010 0110 0101=8265
35
Операция вычитания
Ограниченная разрядная сетка регистров и двоичная СС делают целесообразной модификацию операции вычитания. Её сводят к операции сложения с
вычитаемым, записанным в дополнительном коде, представляющим собой запись числа, дополняющего исходное число до двойки в степени равной числу
разрядов регистра: 𝑋д = 2𝑛 − |𝑋|. В двоичной СС дополнительный код получается из исходного (прямого) переходом к обратному коду (заменой 1 ↔0 ) и
прибавлением затем единицы в младший разряд.
Пример 3.2.3. Вычесть из числа а=9 число в=5.
Выполним вначале традиционную операцию вычитания:
а = 9 = 0|0001001
в = 5 = 0|0000101
а - в = 4 = 0|0000100.
Запишем вычитаемое в обратном (во), а затем в дополнительном (вд) коде:
в= 0|0000101
во=1|1111010
вд=1|1111011.
Выполним операцию сложения с вычитаемым, записанном в дополнительном
коде:
а = 0|0001001
вд = 1|1111011
а +вд = 0|0000100 =4
При выполнении сложения единица переноса из старшего знакового разряда
выходит за разрядную сетку и пропадает. В итоге получили правильный результат (9-5=4)
В компьютере все отрицательные числа записываются в дополнительном
коде. Так как а-в=а+(-в), то в процессоре реализуется лишь операция сложения.
Замечание. Использование дополнительного кода для записи отрицательных чисел обладает следующими достоинствами:
1. Операции сложения и вычитания реализуются единообразно.
2. Число ноль записывается однозначно через ноль во всех разрядах.
36
3. Знаковый (старший) разряд записи чисел обрабатывается при выполнении операции сложения также как и все остальные.
Пример 3.2.4. Запись положительных и отрицательных n - разрядных чисел.
2n-1 -1: 0|1…11
…
2: 0|0…10
1: 0|0…01
0: 0|0…00
-1: 1|1…11
-2: 1|1…10
…
-2n-1: 1|0…00
Операция умножения
Учитывая использование двоичной СС, операция умножения сводится к
повторным операциям сложения и сдвига чисел. Операнды записываются в
прямых кодах: знак числа и его модуль. Знак произведения определяется как
сумма знаковых разрядов сомножителей.
Пример 3.2.5. Найти произведение чисел а=9 и в=5.
Знак произведения определяется как сумма значений знаковых разрядов.
Модуль произведения находится в результате перемножения модулей (прямых
кодов) сомножителей. Вычислим модуль произведения:
1001
101
1001
1001___
|а×в|= 101101
В однобайтовом формате получаем: а×в =0|0101101=45
Операция деления
Операция деления сводится к повторным операциям вычитания и сдвига
чисел. Операнды записываются в прямых кодах: знак числа и его модуль. Знак
частного определяется как сумма знаковых разрядов операндов.
37
Пример 3.2.6. Разделить число а=9 на в=3.
Знак частного определяется как сумма значений знаковых разрядов. Модуль частного находится в результате деления модуля делимого на модуль делителя. Вычислим модуль частного:
1001 |11
11 11 =|а/в|
11
11
0
В однобайтовом формате получаем: а/в =0|0000011=3
3.3.
Арифметика чисел с плавающей запятой
Арифметические операции над числами с плавающей запятой требуют
выполнения дополнительных действий, связанных с преобразованием порядков
чисел.
При сложении или вычитании чисел необходимо предварительно выровнить их порядки, чтобы одноименные разряды мантисс располагались в одинаковых разрядах регистров. Выравнивание порядков производится путем увеличения меньшего порядка до большего. При этом для сохранения величины числа его мантисса сдвигается вправо и за разрядную сетку могут выйти младшие
разряды записи числа. При сдвиге мантиссы влево по этой же причине могли
потерять старшие разряды записи числа, что привело бы к большей величине
ошибки. При умножении или делении чисел с плавающей запятой их порядки
соответственно складываются или вычитаются.
После указанных преобразований порядков мантиссы операндов обрабатываются как числа с фиксированной запятой. При этом возможны ситуации
переполнения разрядной сетки. Для диагностики таких ситуаций используются
модифицированные коды, в которых между старшим разрядом мантиссы и знаковым разрядом помещается дополнительный разряд переполнения. При сложении мантисс разряды переполнения и знаковый обрабатываются также как и
38
разряды мантисс, то есть складываются, при этом перенос из знакового разряда
пропадает.
Комбинации значений этих разрядов означают следующие ситуации:
00 – положительное число без переполнения;
01 - положительное число с переполнением;
10 – отрицательное число с переполнением;
11 - отрицательное число без переполнения.
При наличии ситуации переполнения мантисса, включая разряд переполнения, сдвигается вправо на один разряд - нормализация вправо. Порядок при
этом увеличивается на единицу. В случае, когда один или несколько старших
разрядов мантиссы оказываются равными нулю, производится сдвиг мантиссы
влево до тех пор, пока старший разряд мантиссы не станет равным единице нормализация влево. Порядок при этом уменьшается на величину, равную числу
сдвигов мантиссы.
Заключительным этапом выполнения арифметических действий над числами с плавающей запятой является операция округления результата до требуемого числа знаков. Оно производится либо путем отбрасывания лишних разрядов, либо симметрическим способом. Для реализации симметрического округления регистр, на котором формируется результат, снабжается младшим дополнительным разрядом. Симметрическое округление производится путем прибавления единицы в этот разряд. Если там уже была единица (например, в результате сдвига мантиссы вправо при выравнивании порядков), то при этом в
младший разряд мантиссы добавляется единица переноса. В противном случае
величина мантиссы не меняется.
Будем рассматривать везде в дальнейшем выполнение арифметических
операций над числами с плавающей запятой на условном компьютере. Регистры условного компьютера содержат пятиразрядные мантиссы и трехразрядные порядки, результат операции симметрически округляется.
Для большей наглядности знаковые разряды мантиссы и порядка, а также
разряд переполнения отделяются вертикальными линиями.
39
Пример 3.3.1. Сложить числа а=6,5 и в=-3,75. Результат
а=6,5=110,1=0,1101×23=0|0|11010|0|011
|b|=3,75=11,11=0,1111×22=0|0|11110|0|010
Отрицательное число b записывается в дополнительном коде:
|b|=0|0|11110|0|010
bд =1|1|00010|0|010
После выравнивания порядков число b запишется так:
b=1|1|10001|0|011
Произведем поразрядное сложение мантисс, включая разряды переполнения и
знака:
а=0|0|11010|0|011
b=1|1|10001|0|011
a+b=0|0|01011|0|011
После нормализации мантиссы влево получаем:
a+b=0|0|10110|0|010 = 0,1011×22=10,11=2,75.
Результат получился точно (a+b=2,75) поскольку не было операций округления.
Пример 3.3.2. Вычесть из числа а=6,5 число в=-3,75.
Так как вычитаемое записывается в дополнительном коде, то получаем
для отрицательного числа b запись, совпадающую с записью его модуля, поскольку дополнительный код к дополнительному совпадает с прямым кодом.
После выравнивания порядков имеем:
а=0|0|11010|0|011
|b|=0|0|01111|0|011
a-b=0|1|01001|0|011
После нормализации мантиссы вправо и симметрического округления результата получаем:
a-b=0|0|10101|0|100 = 0,10101×24=1010,1=10,5.
Результат получился с избытком (a-b=10,25) из-за выполнения симметрического округления. Если бы не было симметрического округления, то результат был
бы с недостатком:
a-b=0|0|10100|0|100 = 0,10100×24=1010,0=10.
40
Пример 3.3.3. Умножить число а=6,5 на число в=-3,75.
Вычислим мантиссу произведения, используя прямые коды операндов:
0,11010
0,11110
00000
11010
11010
11010
11010______
|a×b|= 0,1100001100
Порядок произведения равен сумме порядков сомножителей: 3+2=5. Знак произведения определяется по сумме знаковых разрядов: 0+1=1. Так как знак произведение отрицательный, то его мантиссу запишем в дополнительном коде:
|a×b|= 0,1100001100
|a×b|д=1,0011110100
В машине после симметрического округления будет записан такой результат:
a×b=1|1|01000|0|101
В привычном нам прямом коде: знак числа и его модуль, имеем:
a×b= - 0,11000×25= - 11000= - 24.
Результат получился с недостатком по модулю (a×b=-24,375), так как не все
разряды мантиссы произведения были учтены из-за небольшого числа разрядов
регистра результата. Не вошедший в результат «хвост» мантиссы равен
0,01100=0,375 , что соответствует величине ошибки.
Пример 3.3.4. Разделить число а=6,5 на число в=-3,75.
Порядок частного равен разности порядков делимого и делителя: 3-2=1.
Знак частного определяется по сумме знаковых разрядов операндов: 0+1=1.
Вычислим мантиссу частного, используя прямые коды операндов:
11010 |11110
110100 0,11011
11110
101100
11110
111000
11110
41
110100
11110
101100
11110
11100
Так как знак частного отрицательный, то его мантиссу запишем в дополнительном коде:
|a/b|= 0,11011
|a/b|д=1,00101
Итак, в машине будет записан такой результат: a/b=1|1 |00101|0|001
В привычном нам прямом коде: знак числа и его модуль, имеем:
a/b= - 0,11011×21= - 1,1011= - 1,6875.
Результат получился с недостатком по модулю (a/b=- 1,7333(3)), так как не все
разряды мантиссы частного были учтены из-за небольшого числа разрядов регистра результата.
3.4
Особенности компьютерной арифметики
Из способов представления чисел в ЭВМ следует, что далеко не всякое
число может быть записано в компьютере. Действительно, множество компьютерных чисел дискретно, так как между ближайшими машинными числами
существует конечная разность. При использовании чисел с фиксированной запятой имеем множество эквидистантных чисел с шагом равным 2-s, где s - число разрядов после запятой. Для целых чисел s=0 и шаг равен единице. Для чисел с плавающей запятой расстояние между двумя соседними машинными числами является переменно величиной равно 2-s×2p. Таким образом, множество
чисел с плавающей запятой имеет сгущение в окрестности нуля. Кроме того,
при любом способе представления чисел их множество конечно, поскольку
числа ограничены по модулю.
Если результат вычислений не принадлежит множеству чисел, представимых на данном компьютере, то в память помещается ближайшее компьютерное число (при использовании симметрическое округление) или ближайшее
42
компьютерное число, не превосходящее результат по модулю (при использовании округления типа отбрасывания). При этом возникает ошибка округления.
Ошибки могут накапливаться в ходе вычислений. Величина общей ошибки,
вообще говоря, зависит от порядка выполнения операций, и утверждения, справедливые при вычислениях с бесконечной точностью, могут оказаться некорректными для компьютерной арифметики. Так, например, операция сложения
не является в общем случае ассоциативной.
Пример 3.4.1. Рассмотрим вычисления по формулам ((a+b)+c) и (a+(b+c))
для чисел a=6,5, b=3,75 и c=0,25.
Вычислим ((a+b)+c). Первые два числа запишутся в компьютере так:
а=0|0|11010|0|011 и b= 0|0|11110|0|010.
После выравнивания порядков получаем b=0|0|01111|0|011
а=0|0|11010|0|011
b=0|0|01111|0|011
а+b=0|1|01001|0|011
Сумма оказалась с переполнением, поэтому производим нормализацию матиссы вправо. При этом с учетом симметрического округления результата получаем: а+b=0|0|10101|0|100. Число c=0,01=0|0|10000|1|111 (отрицательный порядок (-1) записан в дополнительном коде.). После выравнивания (увеличения)
порядка имеем с=0|0|00001|0|100 и получаем:
а+b=0|0|10101|0|100
с=0|0|00001|0|100
(a+b)+c=0|0|10110|0|100 = 1011=1110
Вычислим (a+(b+c)). После выравнивания порядков чисел b и с получаем:
b= 0|0|11110|0|010
с= 0|0|00010|0|010
b+c=0|1|00000|0|010.
Сумма оказалась с переполнением, поэтому производим нормализацию
мантиссы вправо:
b+c=0|0|10000|0|011.
Складывая число а и сумму (b+c), получаем:
а=0|0|11010|0|011
43
b+c=0|0|10000|0|011
(a+(b+c))=0|1|01010|0|011.
Сумма оказалась с переполнением, поэтому производим нормализацию
мантиссы вправо:
(a+(b+c))=0|0|10101|0|100=1010,1=10,5.
Итак, для заданных чисел a, b и c на рассматриваемом условном компьютере имеет место неравенство:
((a+b)+c ) ≠ (a+(b+c)).
Анализ вычислительных ошибок
Как оценить величину ошибки в вычислениях на ЭВМ? Для этого необходимо проследить весь ход вычислительного процесса, начиная от ввода исходных данных до получения конечного результата. Ошибки округления при
вводе исходных данных возникают всегда, когда соответствующие им числа не
принадлежат множеству чисел, представимых на используемом компьютере.
Далее ошибки округления из-за ограниченности разрядной сетки регистров могут также возникать при выполнении арифметических операций, например, при
сдвиге мантисс операндов в ходе выравнивания порядков операндов в операциях сложения и вычитания. Величина общей ошибки формируется как алгебраическая сумма ошибок всех этапов вычислительного процесса.
Пример 3.4.2. Вычислить погрешность операции сложения чисел а=5,27
и в =1,18 на рассматриваемом условном компьютере.
Введем числа в машину с симметрическим округлением мантисс до 5
разрядов:
а=5,27=101,010…  0,10101×23=0|0|10101|0|011,
в=1,18=1,00101… 0,10011×21=0|0|10011|0|001.
При этом возникли ошибки в исходных данных: Δа=|5,27-5,25|=0,02 и
Δв=|1,18- 1,1875|=0,0075. В ходе выравнивания порядков:
в=0|0|10011|0|001→0|0|01001|0|010→0|0|00101|0|011
происходит дополнительное увеличение второго слагаемого на Δв= 0,0625 за
счёт симметрического округления.
44
При сложении чисел с выровненными порядками ошибки округления нет:
+ 0|0|10101|0|011
0|0|00101|0|011
0|0|11010|0|011→110,1=6,510
Итак, результат получился с избытком равным 0,05 (а+в=6,45), из-за
ошибок округления как при вводе чисел в компьютер, так и при выполнении
операции сложения. Общая ошибка равна алгебраической сумме ошибок отдельных этапов вычислительного процесса: ошибки, уменьшающие результат,
учитываются со знаком «-», а ошибки, увеличивающие результат, учитываются
со знаком «+»:
-0,02 +0,0075+0,0625= 0,05.
Ошибки разного знака могут частично или полностью компенсировать друг
друга полностью или частично.
3.5.
Памятка программиста
Из курса математического анализа известно, что предельная абсолютная
погрешность Δy непрерывно дифференцируемой функции y=f(x1,x2,…,xn), вызываемая достаточно малыми абсолютными погрешностями аргументов, равна
𝑛
𝛥𝑦 = ∑ |
𝑖=1
𝜕𝑓
|𝛥 .
𝜕𝑥𝑖 𝑥𝑖
Используя эту формулу, найдем выражения для предельных абсолютных и
относительных погрешностей арифметических операций, вызываемых погрешностями аргументов.
1. Сложение: f(x1,x2)=x1+x2.
𝛥𝑥1+𝑥2 = 𝛥𝑥1 + 𝛥𝑥2
𝛿𝑥1+𝑥2 = |
𝑥1
𝑥2
| 𝛿𝑥1 + |
|𝛿
𝑥1 + 𝑥2
𝑥1 + 𝑥2 𝑥2
2. Вычитание: f(x1,x2)=x1-x2.
𝛥𝑥1−𝑥2 = 𝛥𝑥1 + 𝛥𝑥2
𝛿𝑥1+𝑥2 = |
𝑥1
𝑥2
| 𝛿𝑥1 + |
|𝛿
𝑥1 − 𝑥2
𝑥1 − 𝑥2 𝑥2
45
3. Умножение: f(x1,x2)=x1 x2.
𝛥𝑥1𝑥2 = |𝑥2 |𝛥𝑥1 + |𝑥1 |𝛥𝑥2
𝛿𝑥1𝑥2 = 𝛿𝑥1 + 𝛿𝑥2
4. Деление: f(x1,x2)=x1/x2.
𝛥𝑥1/𝑥2 =
|𝑥1 |
1
𝛥𝑥1 + 2 𝛥𝑥2
|𝑥2 |
𝑥2
𝛿𝑥1/𝑥2 = 𝛿𝑥1 + 𝛿𝑥2
Во всех приведённых формулах учитываются лишь погрешности аргументов. Следует иметь в виду, что при рассмотрении вычислительных процессов, включающих в себя последовательность арифметических операций необходимо учитывать также ошибки округления, возможные при выполнении самих операций. Величина общей ошибки округления может существенно зависеть от порядка выполнения операций. Вычисления на компьютере могут содержать многие сотни и тысячи арифметических операций. В каком порядке их
необходимо производить, чтобы сократить суммарную ошибку округлений.
1. Следует складывать последовательность чисел в порядке неубывания их модулей.
Покажем справедливость этого утверждения.
Пример 3.5.1. Вычислить предельную абсолютную погрешность величины y=x1+x2+x3+x4 при условии, что погрешности исходных данных отсутствуют, а предельная относительная погрешность результата каждой операции
сложения равна δ+.
Предельная абсолютная погрешность приближённой величины равна
произведению предельной относительной погрешности величины на её модуль.
После 1-ой операции сложения предельная абсолютная погрешность равна
произведению δ+ на |x1+x2|. После 2-ой операции погрешность равна сумме
произведений: δ+|x1+x2| + δ+|x1+x2+x3|, в которой первое слагаемое – погрешность на входе операции. После 3-ой операции аналогично получаем
46
Δy=δ+|x1+x2| + δ+|x1+x2+x3| + δ+|x1+x2+x3+x4|
Поскольку модуль суммы не превосходит суммы модулей, то
Δy δ+(3|x1|+3|x2|+2|x3|+|x4|).
̅̅̅̅ .
Полученное выражение минимально при неубывании значений |xi|, i=1,4
В общем случае, когда y=x1+x2+…+xn аналогично можно показать, что
Δy δ+ [(n-1)|x1|+(n-1)|x2|+(n-2)|x3|+ . . . +2|xn-1|+|xn|].
2. Следует избегать вычитания почти равных чисел
Учитывая формулу для погрешности операции вычитания, величина предельной относительной погрешности разности может быть при этом очень
большой. Избегать такого вычитания можно с помощью эквивалентных преобразований. Например, для почти равных чисел а и в выражение (а2-в2)/(а-в)
лучше заменить на (а+в).
3. Если всё же числа в разности близки, то следует производить
операцию вычитания до операций умножения или деления.
Это правило означает, что разности вида ав-ас или в/а-с/а лучше вычислять соответственно по формулам а(в-с) или (в-с)/а. Покажем справедливость правила относительно операции умножения.
Пример 3.5.2. Вычислить Δy и Δz - предельные абсолютные погрешности
величин y=ав-ас и z =а(в-с) при заданных значениях Δа , Δв и Δс.
В соответствии с приведёнными выше формулами для предельных абсолютных погрешностей арифметических операций, вызываемых погрешностями
аргументов имеем:
Δу=Δав+Δас=|в|Δа+|а|Δв+|с|Δа+|а|Δс= (|в|+|с|)Δа+(Δв+Δс)|а|
Δz= |в - с|Δа+|а|Δв-c= |в - с|Δа+(Δв+Δс)|а|.
Так как |в - с|  |в|+|с|, то Δz  Δу и следовательно при вычислениях по
4. В любом случае следует сводить к минимуму число необходимых
арифметических операций.
Организацией вычислений в компьютерах управляют процессоры. В ПК
это управление осуществляет центральный процессор.
47
Глава 4. Процессор компьютера
В современном компьютере используется множество различных процессорных устройств, иерархически связанных между собой по подчинённости.
Главный среди них центральный процессор (ЦП) конструктивно выполнен на
одной СБИС, включающей схемы не только УУ и АЛУ, но и некоторых блоков
памяти. СБИС, реализующие центральные процессоры современных ПК, содержат десятки миллионов транзисторов.
4.1.
Операционный блок
В ЦП выделяют устройство интерфейса системной магистрали, извле-
кающее команды (инструкции) из памяти и осуществляющее передачу данных
между ЦП и «внешним миром» и операционный блок, в котором происходит
выполнение команд программы. При считывании из ОЗУ происходит разделение информации на команды и данные. Данные размещаются на регистрах ЦП
в ожидании последующих действий над ними. Команды помещаются в очередь,
из которой они выбираются, анализируются и исполняются обработчиком инструкций, состоящим из устройства упреждающей выборки, дешифратора команд и устройства управления.
Обработчик инструкций решает следующие задачи:
1. Вычисляет по значению первого байта инструкции длину соответствующей команды (число байтов), степень готовности последующих байт инструкции к использованию: извлечены ли они из памяти. Если нет, то на
устройство интерфейса системной магистрали выдается запрос на считывание
этих байтов из памяти.
2. Определяет, какие данные нужны для выполнения текущей инструкции. Они могут содержаться в самой инструкции (непосредственные элементы
данных), находиться на регистрах ЦП или в ячейках ОЗУ, из которых данные
считываются на регистры ЦП.
3. Выполняет инструкцию после её идентификации: определения типа
операции команды. Исполнение простых инструкций реализуется схемным пу48
тем, а сложных - с помощью микропрограмм, выбираемых по коду операции из
библиотеки микропрограмм. Микропрограммная реализация основывается на
замене управляющих логических схем специальной программой, хранящейся в
ПЗУ. При этом исполнение каждой команды разделяется на ряд элементарных
этапов, получивших название микроопераций. Последовательность микрокоманд, выполняющих одну команду, представляет собой микропрограмму.
4.2.
Режимы работы и прерывания
Анализ режимов работы процессора производится по отношению к ло-
гически замкнутым заданиям, называемым задачами. Компьютер над задачами
может производить следующие действия: выполнять, приостанавливать и осуществлять диспетчеризацию. Примерами таких заданий могут быть: системная
или прикладная программа, обработчик прерывания или исключения и т.п.
По отношению к решаемым задам процессоры современных ПК могут
работать в 2 режимах:
1. Реальный режим. В этом режиме решается одна задача и используются упрощенные механизмы адресации с объемом физической памяти до 1 Мб.
2. Защищенный режим. Этот режим работы является основным для современных ПК. В нём компьютер обрабатывает одновременно несколько задач
(многозадачный режим). Делается это путем переключения с решения одной
задачи на другую на основе некоторых критериев (например, разделения времени). При каждом переключении от одной задачи к другой требуется сохранить текущее содержимое всех регистров, используемых при решении этой задачи, и загрузить в регистры значения необходимые для работы со следующей
задачей, которые также были сохранены в момент её прерывания (отсюда и
название – защищенный режим). Для записи и считывания соответствующей
информации используется стековая память (стек). В многозадачном режиме в
памяти компьютера одновременно могут находиться несколько стеков (для
каждой задачи свой).
49
В защищенном режиме программа оперирует с адресами, которые могут
относиться к физически отсутствующим ячейкам памяти, поэтому такое адресное пространство называется виртуальным. Размер виртуального адресного
пространства программы может превышать емкость физической памяти и достигать в настоящее время 64Тбайт. Для реализации виртуальной памяти используется подкачка: перемещения фрагментов программ или данных из ОЗУ
на диск и возвращение их обратно в случае необходимости. В защищенном режиме процессор может выполнять дополнительные инструкции, недоступные в
реальном режиме.
Прерывания и исключения
Прерывания и исключения - это события, которые указывают на возникновение в системе или в выполняемой в данный момент задаче определенных
условий, требующих вмешательства процессора. Возникновение таких событий
вынуждает процессор прерывать выполнение текущей задачи и передавать
управление специальной программе, называемой обработчиком прерывания
или обработчиком исключения. Текущая выполняемая задача автоматически
приостанавливается на время действий обработчика, после чего её выполнение
возобновляется, кроме случаев, когда обработка прерывания или исключения
вынуждает завершить программу.
Различные события в системе можно классифицировать следующим образом (рис. 4.2.1.):
1. Аппаратные прерывания. Они вызываются внешними (асинхронными)
причинами по отношению к исполняемому в данный момент процессу. Если
какое-то устройство хочет «обратить на себя внимание», оно генерирует аппаратное прерывание. Например, после нажатия клавиши клавиатуры, контроллер
клавиатуры генерирует специальное аппаратное прерывание, заставляющее ЦП
отвлечься от текущей работы и соответствующим образом отреагировать.
50
Рис. 4.2.1.
Прерывания по силе своего воздействия на ЦП делятся на нормальные
(маскируемые): их можно игнорировать программным путем, отложив обработку до тех пор, пока у ЦП появится такая возможность, и немаскируемые, на которые ЦП начинает реагировать сразу же после выполнения текущей инструкции программы (например, нажатие клавиш CTRL+ALT+DEL).
2. Программные прерывания. Они не нарушают последовательность выполнения инструкций программы, а лишь обеспечивают обращения программы
пользователя к различным сервисам операционной системы, функциям драйверов периферийных устройств - сервисным подпрограммам BIOS. После их выполнения работа прерванной программы продолжается.
3. Исключения являются для процессора внутренними (синхронными) событиями и сигнализируют о каких-либо ошибочных условиях при выполнении
той или иной инструкции. Эти прерывания используются для обработки проблем, обнаруженных самим процессором. Например, если процессору необходимо обратиться к области памяти (сегменту или странице сегмента), которая в
данный момент находится на диске - внешнем запоминающем устройстве, или
программа пытается обратиться к области памяти, на доступ к которой у неё
нет прав. В любом таком случае вызывается специальная программа – обработчик прерывания, которая выполняет соответствующие действия (например,
51
подгрузить сегмент или страницу сегмента в ОЗУ) после чего либо продолжает
выполнение программы, либо принудительно её завершает.
Исключения процессора, в зависимости от способа генерации и возможности рестарта (повторного исполнения команды от начала) вызвавшей исключение команды, подразделяются на ошибки, ловушки и аварии. ).
Ошибки (нарушения) – это исключения, которые обнаруживаются либо
перед исполнением, либо во время исполнения команды. При этом процессор
переходит в состояние, позволяющее осуществить повторное исполнение (рестарт) команды. В качестве адреса возврата в стек обработчика заносится адрес
вызвавшей исключение команды.
Ловушки возникают на границе команды сразу же после команды, вызвавшей это исключение. В стек обработчика при этом заносятся значения регистров, указывающих на очередную команду. В некоторых случаях для ловушек и нарушений невозможен рестарт команды, например, если один из операндов расположен по адресу памяти меньшему, чем вершина стека.
Аварии не позволяют осуществить рестарт программы, часто нельзя точно
локализовать команду, вызвавшую это исключение. Исключения типа авария
генерируются при обнаружении серьезных ошибок, таких как неразрешённые
или несовместимые значения в системных таблицах или аппаратные сбои.
Типичным случаем аварии является так называемая "двойная ошибка".
Двойная ошибка происходит, когда ЦП пытается обработать исключение, а его
обработчик генерирует еще одно исключение.
Механизмы обработки прерываний
При возникновении прерывания - появлении соответствующего сигнала
на регистре прерываний, ЦП после завершения выполнения текущей инструкции определяет, какое прерывание произошло. Каждое прерывание имеет свой
уникальный номер - один из 256, причем, номера с 0 по 31 зарезервированы
фирмой Intel для исключений.
ЦП обращается к памяти по адресу, соответствующему номеру прерывания в так называемой таблице векторов прерываний. Таблица векторов преры52
ваний занимает первые 1024 байта оперативной памяти в реальном режиме (по
4 байта на одно прерывание), в защищенном - 1024 байта в произвольной области физического адресного пространства. В каждом из 4 байтов записан адрес
памяти (вектор прерывания) – место, где находится программа, обрабатывающая это прерывание (обработчик прерывания). Такая двух ступенчатая схема
позволяет легко менять обработчики прерываний. Достаточно сменить вектор
прерываний, чтобы обратиться к другой программе - обработчику прерываний,
по тому же номеру прерывания.
Программы – обработчики могут обслуживать сразу по несколько прерываний, когда возникают обращения одной программы прерываний к другой.
После окончания работы обработчика он сообщает об этом ЦП, после чего процессор возвращается к прерванной программе. Возможна обработка сразу нескольких прерываний, когда обработка одного прерывания прерывается другим
прерыванием. Выполнение таких прерываний осуществляется с использованием стековой памяти.
Одни прерывания могут вызывать другие, при этом с текущей программой – обработчиком прерывания, поступают точно так же, как и с прикладной
программой, когда возникает прерывание: все текущие параметры прерванного
обработчика запоминаются и осуществляется переход к программе обработчику последнего по времени прерывания. По мере выполнения программ - обработчиков прерываний, осуществляется возврат к предыдущей программе обработки прерываний вплоть до возвращения в исходную прикладную программу,
после чего её выполнение продолжается. Обработчики прерываний могут не
только прерывать друг друга, но и вызывать друг друга. Этот механизм используется для замены одних программ – обработчиков прерываний другими.
Первоначальные обработчики прерываний содержатся в микросхеме базовой системы ввода-вывода (BIOS). У многих ПК имеются дополнительные
микросхемы, расположенные на различных устройствах, подключаемых к ПК.
В них содержатся альтернативные обработчики прерываний, соответствующие
специфике данного устройства. Во время первоначального запуска ПК осу53
ществляется замена адресов в таблице векторов прерывания исходных (старых)
адресов прерываний на новые адреса.
4.3.
Основные регистры
Регистры ЦП, как уже указывалось, предназначены для временного хра-
нения данных и выполнения над ними тех или иных операций. ЦП современных ПК содержит десятки регистров самого разного назначения. Часть из них
играет вспомогательную, техническую роль – они используются только в ходе
автоматического тестирования СБИС при их изготовлении, другие – активно
участвуют в выполнении команд программ.
Общие регистры данных и адресов
31
EAX
16 15
AH
AX
0
AL
EBX
BH
BX
BL
ECX
CH
CX
CL
EDX
DH
DX
DL
ESI
SI
EDI
DI
EBP
BP
ESP
SP
Первые четыре регистра (AX, BX, CX и DX) используются для записи
данных и выполнения над ними арифметических и логических операций. Если
регистры одержат по 32 разряда, то к именам регистров добавляется префикс
«E» (extended). Младшие половинки 16 -разрядных регистров содержат суффикс «L», старшие половинки – суффикс «H». Назначение регистров:
AX – регистр-аккумулятор (сумматор) служит для выполнения арифметических операций над числами и строками данных;
BX – базовый регистр, используемый при адресации данных;
CX – регистр-счётчик (число повторений цикла и т.п.);
DX – регистр данных
Последние четыре регистра являются регистрами указателей и индексов
массивов ячеек памяти:
54
SI – регистр индекса источника (содержит адрес начала массива перемещаемых данных);
DI – регистр индекса приёмника (содержит начальный адрес памяти, куда перемещается массив данных);
BP – регистр-указатель базы (начало области памяти, отводимой под
стек);
SP – регистр-указатель вершины стека.
Регистры сегментов
15
0
CS
DS
SS
ES
Они используются при формировании адресов данных и команд:
CS – регистр сегмента команд;
DS – регистр сегмента данных;
SS – регистр сегмента стека;
ES – регистр дополнительного сегмента.
Регистр – указатель команд
31
EIP
16 15
0
IP
Регистр IP хранит адрес текущей исполняемой команды, вычисляемый с
использованием регистра сегмента команд CS. При последовательном выполнении команд программы адрес автоматически увеличивается на величину,
равную числу байт (длине) выполняемой команды, в противном случае адрес
формируется с помощью команды перехода.
Регистр флагов
31
EFLAGS
16 15
0
FLAGS
За различными разрядами регистра FLAGS закреплена индикация тех
или иных фактов, влияющих на порядок выполнения операций. Например, ре55
зультат последней арифметической операции был ли положителен или отрицателен или равен нулю.
4.4.
Элементы программирования на ассемблере
Языки программирования ассемблерного типа позволяют писать про-
граммы на уровне команд ЦП: операторы языка находятся в отношении 1:1 к
машинным командам (такие языки называют языкам низкого уровня). Однако,
при этом не требуется записывать соответствующие двоичные коды, а достаточно указать мнемонические (символические) обозначения выполняемых
операций и их операндов. Перевод этих инструкций в двоичные коды осуществляет специальная программа транслятор языка ассемблера. Программа
на языке ассемблера называется исходным модулем, а результат её трансляции – объектным модулем (объектным кодом). Достоинства программ на ассемблере:
1. Высокая скорость выполнения по сравнению с программами, составленными на языках высокого уровня (операторы таких языков могут соответствовать подмножествам машинных команд). Это объясняется тем, что в языках высокого уровня результаты операций, как правило, возвращаются в память, что требует дополнительного времени. Программа на ассемблере оперирует, в основном, с данными, размещаемыми на регистрах ЦП.
2. Меньший объём необходимой памяти за счёт большей компактности
данных, поскольку операции на регистрах ЦП могут выполняться над отдельными разрядами (битами). В языках высокого уровня можно, как правило, работать только со всем словом.
3. Возможность оптимальным образом использовать прерывания путём
записи в программу относительно простых инструкций вместо громоздких обращений к процедурам, как это делается в языках высокого уровня.
Далее будут приведены для иллюстрации некоторые сведения о языке
ассемблера. Первоначальные навыки программирования на Ассемблере можно
получить с помощью тренажёра «Лампанель».
56
Структура программы на ассемблере
Программа состоит из последовательности строк: операторов или псевдооператоров. Операторы описывают выполняемые действия, псевдооператоры управляют работой транслятора. С помощью псевдооператоров резервируются рабочие области памяти, присваиваются имена элементам данных, командам и т.д. Кроме того, псевдооператоры могут автоматически вставлять в текст
программы часто используемые «куски» объектного кода в различные участки
программы. Такие участки кода называются макросами. Макросам присваиваются имена, по которым они идентифицируются. По сравнению с обычными
процедурами – подпрограммами здесь не происходит передача управления на
команды процедуры, хранящейся в одном экземпляре, а осуществляется вставка этих команд в каждое место программы, где указано имя макроса. При этом
увеличивается длина программы, но сокращается время её работы, поскольку
не надо выполнять дополнительных команд, связанных с переходом на процедуру и возвратом из неё. Кроме того, макроопределения более динамичны из-за
возможности использования макросов с параметрами, в которых можно изменять не только входные данные, как в процедурах, но выполняемые действия.
Состав операторов
[<Метка>:] <Мнемокод> [<Операнд>] [,<Операнд>] [;<комментарий>]
Обязательным является только поле мнемокода. В квадратных скобках
указаны необязательные поля. Число операндов зависит от типа мнемокода и не
превышает двух.
Метка является символическим адресом оператора в программе, позволяющим осуществлять переход к соответствующему оператору.
Мнемокод - символическое обозначение операции. В ассемблере используется арифметические и логические операции, а также операции сравнения и управления памятью.
Операндами могут быть константы: двоичные, десятичные, шестнадцатеричные или литерные; имена регистров ЦП (EAX, AH, BL и т.п.), имена элементов данных и метки операторов. Поле операнда отделяется от мнемокода
57
хотя бы одним пробелом. Если операндов два, то первый из них (ближайший к
мнемокоду) представляет собой приёмник (куда помещается результат выполнения операции), а второй – источник (откуда берутся исходные данные для
выполнения операции).
Команды, реализуемые операторами
1. Команды пересылки данных. Данные могут пересылаться между регистрами ЦП и ячейками памяти, помещаться и извлекаться из стека и портов
ввода - вывода. При этом могут использоваться различные режимы адресации:
1. Регистровая адресация. Данные извлекаются из регистров и в регистры помещаются.
2. Непосредственная адресация, когда в качестве операнда-источника
указывается значение константы.
3. Прямая адресация, когда в качестве операнда-источника указывается
идентификатор (имя) ячейки памяти
4. Косвенная адресация, при которой в операнд-приёмник пересылается
информация, адрес которой указан в регистре операнда-источника.
Пример 4.4.1. Команда MOV используется для пересылки данных. Все
вышерассмотренные способы адресации реализуются соответственно в следующих операторах:
MOV CX,DX - пересылает информацию из 16-разрядного регистра DX в
16-разрядный регистр CX;
MOV CX,500 - десятичная константа 500 загружается в 16-разрядный
регистр CX;
MOV EАX,TABLE - содержимое ячейки памяти с именем TABLE загружается в 32-разрядный регистр EAX;
MOV CX,[BX] – в регистр CX загружается ячейка памяти, адресуемая
значением регистра BX.
2. Арифметические команды. Выполняются непосредственно в ЦП над
целыми двоичными числами, а также над упакованными и неупакованными
двоично-десятичными числами. Операции над вещественными числами выпол58
няются с помощью микропрограмм. Используются мнемокоды: ADD, SUB,
MUL и DIV для обозначения соответственно операций сложения, вычитания,
умножения и деления.
Пример 4.4.2. Сложение и вычитание значений 16-разрядных регистров
AX и BX может быть реализовано соответственно командами: ADD AX,BX и
SUB AX,BX, в которых к целому числу, находящемуся в регистре AX прибавляется или вычитается целое число из регистра BX.
3. Логические команды. Они реализуют побитовую обработку информации. Для побитового выполнения логических операций «И», «ИЛИ» и «НЕ»
используются команды с мнемокодами соответственно: AND, OR и NOT.
Пример 4.4.3. В регистре AX содержится шестнадцатеричный код 1234,
в регистре BX шестнадцатеричный код 4321. После выполнения следующих
команд в регистре AX будут находиться шестнадцатеричные коды:
AND AX,BX → AX=0220
OR AX,BX → AX=5335
NOT AX→ AX=EDCB.
Команды сдвига. Они перемещают влево или вправо биты первого операнда на число разрядов, указанное во втором операнде (счётчике). Левый или
правый сдвиг выполняют соответственно команды с мнемокодами SHL и SHR,
обеспечивая при этом быстрое умножение или деление содержимого первого
операнда на число равное целой степени двух.
Пример 4.4.4. В регистре AX находится целое число без знака. Содержимое регистра AX можно умножить на 10 с помощью следующей программы:
MOV BX,AX
SHL AX,1
SHL AX,1
ADD AX,BX
SHL AX,1.
Первая команда пересылает содержимое регистра AX в регистр BX, создавая в BX копию регистра AX. Следующие две команды обеспечивают сдвиг
59
содержимого регистра AX влево на два разряда, умножая тем самым содержимое регистра AX на четыре. Далее к содержимому регистра AX прибавляется
содержимое регистра BX равное исходному целому числу регистра AX. После
этого в регистре AX находится число равное исходному числу, умноженному
на пять. Заключительная команда, сдвигая содержимое регистра AX влево на
один разряд, увеличивает ещё в два раза число, находящееся в регистре AX.
4. Команды передачи управления. Безусловная передача аналогичная команде goto в Паскале имеет мнемокод JMP (сокращение от английского слова
«прыжок»), за которым следует имя метки той команды, на которую необходимо перейти.
Команды условного перехода сравнивают значения операндов источника и приёмника, имеют мнемокод CMP (сокращение от английского слова
«сравнивать»), за которым следует мнемокод конкретного условия перехода
(например, JA соответствует условию «содержимое приёмника больше содержимого источника») и имя метки той команды, на которую необходимо перейти в случае выполнения проверяемого условия.
Состав псевдооператоров
[<Идентификатор>] <Мнемокод> [<Операнд>] [;<комментарий>]
Идентификатор – символическое имя константы или переменной. Мнемокод - обозначение псевдооперации. Операнд ом может быть константа, переменная, ссылка на адрес, другое символическое имя.
Псевдооператоры обычно используются для определения идентификаторов величин и резервирования памяти.
Пример 4.4.5. Псевдооператор, определяющий идентификаторы, имеет
следующую структуру:
<Имя идентификатора> EQU <Выражение>,
где : EQU - мнемоническое обозначение псевдооператора; выражение может
быть константой, другим символическим именем или названием регистра
K EQU 1024 – константе 1024 присвоено имя «K »
COUNT EQU СХ – регистру СХ присвоено имя «COUNT».
60
Глава 5. Память компьютера
5.1.
Физическая организация памяти
Память компьютера делится на внутреннюю (основную), выполненную
на микросхемах, и внешнюю (вторичную), реализованную устройствами хранения информации на магнитных и оптических дисках.
Внутренняя память
К внутренней памяти относятся регистры процессора, ОЗУ и некоторые
вспомогательные блоки памяти. Через регистры процессора осуществляется запись или считывание информации из ЦП. Двоичные разряды этих регистров
реализуются на триггерах - электронных элементах, имеющих два устойчивых
состояния. Быстрота переключения триггерных элементов позволяет им работать напрямую с процессором, не тормозя его работу. Роль двоичных разрядов
ячеек ОЗУ выполняют электрические конденсаторы, требующие для своей работы периодической подзарядки (примерно 1000 раз в секунду), что существенно снижает быстродействие ОЗУ.
Обмен информацией между регистрами ЦП и ОЗУ осуществляется через согласующие блоки кэш-памяти (от английского слова «cache», означающего «тайник»). Тайна состоит в том, что кэш-память не увеличивает адресуемое пространство ОЗУ, а лишь дублирует некоторые его участки блоками триггерной памяти, делая их быстро доступными для ЦП. В кэш-памяти хранится
ограниченное число блоков информации вместе со списками адресов ОЗУ, которым соответствуют эти блоки (каталог). Кэш-память используется для временного хранения данных и команд, недавно записанных или прочитанных из
ОЗУ. Кэшированная запись позволят процессору продолжать свою работу, не
дожидаясь пока завершится запись информации в ОЗУ, выполняемая в более
медленном темпе, чем запись из ЦП в кэш-память. Кэшированное чтение увеличивает производительность процессора лишь тогда, когда к некоторой информации (данным или командам) производится многократное обращение,
например, при реализации циклических процедур. При каждом чтении процес61
сором информации из ОЗУ контроллер кэш-памяти проверяет по каталогу её
наличие в блоках кэш-памяти. Если требуемая информация содержится в кэшпамяти (кэш-попадание), то она считывается в ЦП. Если же требуемой информации нет в кэш-памяти (кэш-промах), то она считывается непосредственно из
ОЗУ. При этом ЦП находится в режиме ожидания. Для сокращения времени такого ожидания одновременно с поиском информации в кэш-памяти производится поиск её и в ОЗУ. В случае кэш-попадания этот поиск прекращается. В
противном случае, экономится время поиска нужной информации в ОЗУ. В ситуациях кэш-промаха информация, извлекаемая из ОЗУ, замещает по определенным алгоритмам один из блоков кэш-памяти.
Для повышения эффективности кэширования часто используют раздельный кэш для данных и команд, делая при этом кэш-память многоуровневой (до четырех уровней). ЦП обменивается информацией непосредственно с
кэш-памятью 1 уровня, имеющей наименьший объем и содержащую наиболее
часто используемую процессором информацию. По мере увеличения номера
уровня кэш-памяти её объем увеличивается, а частота использования размещенной в ней информации уменьшается.
При кэшировании памяти необходимо обеспечить, чтобы в ячейках кэшпамяти и ОЗУ с одинаковыми адресами размещалась одна и та же информация.
Возможны, с одной стороны, несогласованность записи из-за того, что новые
значения передаются в ОЗУ через кэш-память с некоторым запаздыванием и
если эта информация потребуется другому устройству, то оно может взять
устаревшую информацию. С другой стороны, возможна и несогласованность
чтения при повторных считываниях информации в ЦП из кэш-памяти, поскольку за это время в ОЗУ по тому же адресу могла уже быть записана новая
информация из другого устройства ПК. Для предотвращения подобных ситуаций контроллер кэш-памяти напрямую соединяют с основной памятью, чтобы
можно было отслеживать каждый доступ к ОЗУ со стороны любых других
устройств ПК.
62
ОЗУ представляет собой упорядоченный массив однобайтовых ячеек,
каждая из которых имеет свой последовательный номер, начиная от нуля. Современные ПК имеют ОЗУ объемом до нескольких гигабайт. Поскольку кэшпамять реализована на относительно дорогих триггерных элементах, то объем
её существенно меньше объема ОЗУ и обычно не превосходит нескольких сотен килобайт. ОЗУ вместе с кэш-памятью всех уровней представляет собой
единый линейный массив ячеек памяти непосредственно доступный ЦП для
чтения и записи.
Внутренняя память является энергозависимой и теряет содержащуюся в
ней информацию при отключении питания. Исключением являются блоки постоянного запоминающего устройства (ПЗУ), в которых «прошиты» программа
первоначального запуска ПК, базовая система ввода-вывода (BIOS) и тесты.
Внешняя память
Внешняя память реализуется в основном на магнитных и оптических
дисках. Диски могут быть съемными и стационарными, гибкими и жесткими.
Их ёмкость колеблется от единиц мегабайт до десятков гигабайт. Соответствующие устройства хранения информации могут допускать: только чтение с дисков, чтение и однократную запись на диск, чтение и многократную запись на
диск. ЦП не имеет непосредственного доступа к внешней памяти по линейному
адресу. Он осуществляется с помощью специальных программ через контроллеры накопителей на дисках целыми блоками данных. Только после считывания этих данных ЦП может обратиться к соответствующей информации. Непосредственное обращение невозможно из-за слишком большой разницы в скоростях обмена.
Общими для всех устройств внешней памяти являются:
 дискретная (цифровая) форма представления информации;
 обмен информацией с внутренней памятью блоками данных;
непосредственный доступ к данным;
 энергонезависимость: сохранение информации при отключении питания.
63
Накопители на магнитных дисках
Магнитные диски делятся на:
 гибкие, диаметром 3,5” (флоппи-диски), съёмные, ёмкостью 1,44 Мб;
 жесткие, диаметром 5,25”, стационарные, ёмкостью до сотен Гб.
Гибкие диски могут деформироваться под воздействием внешней среды.
Достоинством жестких дисков является то, что они не подвержены таким деформациям и после записи информации можно вернуться к тому же самому месту для её воспроизведения. Поэтому для жестких дисков используются головки записи-чтения существенно меньшего размера, чем в дисководах гибких
дисков. В связи с этим плотность записи а, следовательно, и объём, на жёстких
дисках больше, чем на гибких.
На поверхности магнитных дисков располагаются концентрические
окружности - дорожки (треки), каждая из которых разбивается на отдельные
сектора. Число дорожек и секторов на них зависит от диаметра и типа диска
(гибкий или жесткий). Диски вращаются на специальных осях- шпинделях. Частота вращения от 360 об/мин для гибких дисков до порядка 104 об/мин для
жёстких дисков. Для обеспечения такой большой скорости вращения диски помещают в специальный герметичный корпус, наполненный инертным газом
(НЖМД типа Винчестер). Для увеличения ёмкости Винчестера на вращающемся шпинделе крепятся несколько дисков, а сами диски делают двусторонними.
Головки записи-чтения не касаются поверхностей вращающихся дисков, а
«плывут» над ними на расстоянии нескольких микрон, чтобы не испортить головки и диски от перегрева из-за трения. Высота «полета» определяется скоростью вращения дисков, аэродинамическими свойствами головок и давлением
пружин, прижимающих головки к дискам. В нерабочем состоянии блок головок
паркуется не над дисками, так как их падение на диски при внезапном отключении питания могло бы привести к повреждению, как дисков, так и самих головок (они бы прилипли друг к другу из-за молекулярного притяжения). Чтобы
избежать подобных ситуаций используются блоки бесперебойного питания
компьютеров.
64
Число дорожек на дисках современных Винчестеров возросло до величины порядка 104. Все дорожки, расположенные на одинаковом расстоянии от
шпинделя, образуют цилиндр. Цилиндры, как и дорожки, нумеруются от краёв
дисков к центру, начиная с нуля.
Организация обмена информацией с магнитными дисками
Информация на диски записывается и считывается посекторно. Каждый
сектор имеет в начале заголовок, содержащий служебную часть – поле идентификатора, включающего адрес (номер цилиндра, головки и сектора), а также
информацию о дефектности сектора (можно ли его использовать для хранения
данных). Достоверность поля идентификатора проверяется с помощью контрольного кода.
После заголовка сектора располагается поле данных (в 512 байт), отделяемое от заголовка небольшим зазором. Этот зазор необходим для того, чтобы
при операции записи головка успеть переключиться из режима чтения (заголовка) в режим записи (данных).
Весь сектор заканчивается контрольным кодом поля данных, позволяющим обнаруживать ошибки и исправлять их (при небольшой кратности). В
межсекторных промежутках может размещаться информация для точного наведения головки на дорожку.
В современных высокоскоростных Винчестерах работа организуется сразу с группой секторов одной дорожки, рассматриваемых как единый битовый
поток данных. Для их коррекции применяются специальные коды, позволяющие исправлять большинство ошибок «на лету», не требуя повторного считывания блока данных.
Поиск сектора по его заголовку, запись информации в поле данных вместе с контрольным кодом или считывание информации из поля данных с проверкой с помощью контрольного кода осуществляет свой периферийный микропроцессор - контроллер накопителя (Винчестера). Контроллер Винчестера
использует для своей работы буферную память (порядка 10 Мб). Часть её за65
нимает встроенное программное обеспечение, а часть - блоки данных, только
что считанных с диска или приготовленных для записи на диск.
5.2.
Логическая организация памяти
Физически память компьютера представляет собой линейный массив яче-
ек. Однако, при работе с памятью её удобно рассматривать как набор отдельных сегментов, в которых помещаются самостоятельные части программ (модули) или данные определенных типов. Сегменты могут размещаться в разных
областях памяти и по-разному использоваться. Сегментам, например, соответствуют отдельные участки памяти, хранящие информацию, которую могут использовать нескольких заданий в многозадачном режиме работы. Внутри каждого сегмента при этом поддерживается линейная адресация. Таким образом,
пользователям удобно рассматривать память не как линейную, а как двумерную
структуру. При этом адрес образуется из двух компонент: номера сегмента и
смещения внутри сегмента. Сегментация памяти удобна с токи зрения контроля
работы компьютера, например, можно указывать права доступа или типы операций, которые разрешается производить с информацией, хранящейся в том
или ином сегменте.
В программах пользователей указываются символически адреса, которые
в ходе трансляции программы превращаются в логические перемещаемые адреса, указывающие на величину смещения от начала транслируемого модуля.
Совокупность всех логических адресов образует логическое адресное пространство. Каждой программе соответствует свой набор сегментов в логическом адресном пространстве.
Логическое адресное пространство не совпадает с физическим адресным
пространством не только по своей организации, но и по размеру. Размер логического адресного пространства зависит от разрядности процессора. Максимальный размер логического адресного пространства оценивается величиной
2n, где n - разрядность процессора. Если n=32, то получаем максимальный размер 232=4 Гбайт, а при n=64 объем логического адресного пространства воз66
растает до 264 =16 Эбайт (1 Эбайт=1018 байт ), что значительно превышает размер физического адресного пространства. Поэтому память, использующую логическую адресацию, и называют виртуальной
Для выполнения программы необходимо отобразить логические адреса,
соответствующие ссылкам, указанным в тексте программы, в реальные физические адреса. Указанное связывание адресов может осуществляться как на этапе
загрузки программы, так и в ходе её выполнения. В последнем случае имеется
возможность перемещения исполняемой программы из одной области памяти в
другую.
5.3.
Способы управления памятью
Эффективное управление памятью требует от ОС решения следующих
задач:
 связывание логических и физических адресов программ;
 распределение памяти между различными программами;
 контроль доступа к адресным пространствам программ
 выгрузка программ во внешнюю память при недостатке места;
 учет свободной и занятой памяти.
В простейших схемах управления памятью все одновременно обрабатываемые программы полностью помещались в ОЗУ, занимая непрерывные области памяти. Позднее была добавлена возможность выгрузки целиком некоторых программ во внешнюю память с записью на освободившееся место целиком других программ.
Память с выделенными разделами
Разделы фиксированной величины. Вначале память ОЗУ разбивается на
такие разделы, в которые затем загружаются программы пользователей. При
загрузке или позднее на этапе компиляции происходит связывание логических
и физических адресов программ и выделенных им разделов. Программы поступают либо в общую очередь для всех разделов, либо в независимые очереди
67
каждого раздела. В первом случае система управления памятью оценивает размер поступающей программы и выбирает подходящий для неё раздел.
К недостаткам схемы с фиксированными разделами можно отнести
ограниченностьчисла одновременно выполняемых программ числом разделов,
а также потерю части памяти, выделяемой программе из-за внутренней фрагментации - неполного заполнения программой выделенного раздела или,
наоборот, отсутствия заполнения, если выделенный раздел меньше объема необходимого для размещения соответствующей программы
Внутренняя фрагментация частично компенсируется с помощью свопинга: перемещения целиком программ из ОЗУ на диск и обратно. Свопинг используется также в системах разделения времени в ситуациях, когда оказывается невозможным содержать в ОЗУ одновременно все пользовательские программы. Выгруженная программа может быть возвращена позднее как на то же
самое место в ОЗУ, так и на другое. Это зависит от того, на каком этапе производится связывание её логических и физических адресов. Так, для схемы связывания на этапе выполнения программы её можно загрузить из внешней памяти в другое место ОЗУ.
В схеме с переменными разделами вначале вся память свободна и заранее не разделена на разделы. Каждой поступающей программе выделяется
точно необходимое количество памяти. После окончания работы некоторой
программы её память освобождается. С течением времени память ОЗУ представляет собой переменное число занятых разделов разного размера вперемешку со свободными участками памяти. Смежные свободные участки при этом
могут быть объединены. Вновь поступающие программы (задания) помещаются в свободные разделы с использованием одной из трех следующих наиболее
распространенных стратегий:
 программа помещается в первый подходящий по размеру раздел;
 программа помещается в тот раздел, где останется меньше всего свободного места;
68
 программа помещается в самый большой раздел, чтобы в нем осталось
достаточно места для возможного размещения еще одной программы.
Практика показало, что доля полезно используемой памяти в первых двух случаях больше, при этом первый способ несколько быстрее.
Схема с переменными разделами обладает большей гибкостью по сравнению со схемой с фиксированными разделами. Однако, ей присуща внешняя
фрагментация – наличие большого числа участков неиспользуемой памяти, не
выделенной ни одной программе. Как показал статистический анализ в среднем остается неиспользуемой около трети памяти. Для сокращения объема неиспользуемой памяти применяется схема с перемещаемыми разделами, когда
все занятые (свободные) участки смещаются в сторону увеличения (уменьшения) адресов, чтобы свободная память образовывала единую область. Разумеется, подобные перемещения разделов требуют дополнительного времени.
Страничная организация памяти
Из-за недостаточной эффективности рассмотренных выше схем в современных схемах управления памятью программы не размещаются в ОЗУ одним
непрерывным блоком. Как логическое, так и физическое адресные пространства каждой программы рассматриваются состоящими из наборов блоков одинакового размера, называемых страницами. При этом логическим страницам
соответствуют физические страницы, называемые ещё страничными кадрами.
Страницы и страничные кадры не перекрываются и имеют фиксированную длину равную степени двойки (обычно 4 Кбайт). В каждом страничном
кадре содержится одна логическая страница. Внешняя фрагментация при этом
невозможна, а размер внутренней фрагментации не может превосходить части
последней страницы.
При использовании страничной системы логический адрес адресуемого
элемента задается упорядоченной парой чисел, в которой первое число – номер
страницы в виртуальной памяти, а второе число – смещение от начала страницы. Разбиение адресного пространства на страницы осуществляется вычисли69
тельной системой без вмешательства программиста, для которого адресное
пространство остается линейным.
Страничная организация памяти позволяет загрузить программу и при отсутствии непрерывной области кадров, достаточной для размещения её целиком. Система отображения логических адресов в физические задается таблицей
страниц, позволяющей по логическому адресу – номеру виртуальной страницы,
определять номер страничного кадра. Кроме того, атрибуты, добавляемые в
строки таблицы страниц, позволяют организовать контроль доступа к физической странице и её защиту.
Сегментная и сегментно-страничная организация памяти
Как уже ранее отмечалось, при работе с памятью её удобно рассматривать в виде набора отдельных сегментов. При сегментной организации логический, виртуальный адрес является двумерным как для программиста, так и для
ОС и состоит из двух полей – номера сегмента и смещения внутри сегмента.
Логическое адресное пространство задается набором сегментов. Каждый сегмент обладает линейной последовательностью адресов, начиная с нулевого номера. Размер сегмента ограничен сверху разрядностью процессора и может меняться динамически в ходе исполнения программы. Преобразование логических адресов в физические при сегментной организации памяти осуществляется
с помощью таблицы дескрипторов (описаний) сегментов. Элементы таблицы
позволяют по номеру сегмента получить физический адрес начала соответствующего сегмента и значения некоторых его атрибутов, например, длину
сегмента. После добавления к адресу начала сегмента величины смещения
внутри сегмента получается физический адрес, соответствующий исходному
логическому адресу.
При наличии больших по объему сегментов возникают такие же неудобства, как и при размещении программ непрерывным блоком. Поэтому большие
сегменты разбиваются в свою очередь страницы. При сегментно-страничной
организации логический адрес состоит из трех полей: номера сегмента, номера
страницы внутри сегмента и смещения внутри страницы. Преобразование логи70
ческих адресов в физические производится с помощью таблиц двух ярусов:
таблицы сегментов, определяющей адрес начала сегмента по его номеру, и таблиц страниц для каждого сегмента, формирующих адреса начал страницы по их
номерам. Для получения физического адреса к адресу начала страницы добавляется величина смещения внутри страницы.
Страничная и сегментно-страничная организации памяти удобны для реализации использования одних и тех же данных и(или) фрагментов программ
разными заданиями. Для этого достаточно разделяемые данные или фрагмент
программы отобразить в один и тот же блок физической памяти.
Глава 6. Периферийные устройства
В настоящее время большинство ПК соединены в локальные и глобальные компьютерные сети. Различные сегменты компьютерных сетей реализуются через телефонные линии, кабельные сети и радиорелейные линии. Для
согласования информационного сигнала, передаваемого по сети с её физической средой, используется периферийное устройство модем (от слов модулятор
и демодулятор). Модем обеспечивает переходы между дискретной (цифровой)
формой представления информации в компьютере и непрерывной (аналоговой)
формой, используемой в каналах связи. Модем может при этом играть роль, как
устройства ввода, так и устройства вывода информации.
Все другие периферийные устройства, подключаемые к ПК, являются либо устройствами ввода, либо устройствами вывода информации. Рассмотрим
наиболее распространенные из них.
6.1.
Устройства ввода информации
Клавиатура
Клавиатура – устройство ввода текстовой и цифровой информации в ПК.
Число клавиш, немногим более 100, постепенно увеличивается в связи с вынесением на отдельные клавиши обращений к наиболее популярным приложениям: интернет-навигатор, медиаплейер и т.д. По своему назначению клавиши де71
лятся на алфавитно-цифровые, функциональные и клавиши управления курсором.
При вводе информации в компьютер посылаются сигналы как о фактах
нажатия тех или иных клавиш, так и сигналы о фактах их отжатии. Соответствующие датчики клавиш имеют разную техническую реализацию: механические контакты (открытые или закрытые – сенсорного типа), электрические (ёмкостные) устройства и т.д.
Сами клавиатуры по своему внешнему виду могут быть оформлены весьма разнообразно, начиная от эргономных, «разламывающихся» на две половинки, имеющих подкладки для рук, до миниатюрных клавиатур, использующихся
в ноутбуках.
По ощущению от нажатия клавиш различают клавиатуры с «кликом» и
без него. Клик – щелчек, раздающийся при нажатии клавиши (акустический
или механиеский).
У клавиатуры имеется контроллер (свой встроенный компьютер). Он отмечает момент первого нажатия определенной клавиши и посылает в системный блок соответствующее сообщение. Если клавиша удерживается нажатой
более некоторого заданного интервала времени (обычно 0,5 сек), то контроллер
клавиатуры начнет периодически (с частотой 10 гц) посылать в ПК сообщения
о том, что эта клавиша снова нажата. После отжатия клавиши контроллер также
посылает соответствующее сообщение
Сообщения от клавиатуры поступают в системный блок через специальный выделенный последовательный порт клавиатуры. Из этого порта сообщения поступают в контроллер клавиатуры системного блока, который выполняет
следующие действия:
 помещает в буфер контроллера номер, идентифицирующий положение нажатой клавиши на клавиатуре (скан-код);
 инициирует соответствующее аппаратное прерывание.
Обработкой
прерывания
занимается
соответствующая
программа-
обработчик, «прошитая» в ПЗУ. Каждый принятый скан-код обрабатывается с
72
учетом состояния таких специальных клавиш, как «Ctrl», «Alt» или «Shift». Результатом обработки является двухбайтовое слово, содержащее в старшем байте скан-код нажатой клавиши, а в младшем байте ASCII код символа, соответствующего этой клавише. Данное слово помещается в клавиатурный буфер,
расположенный в ОЗУ, организованный по кольцевому принципу. В случае переполнения буфера очередное слово не записывается, а подается звуковой сигнал. Из клавиатурного буфера ASCII коды символов передаются либо в активную программу, работающую под управлением DOS (как результат работы
программы-обработчика аппаратного клавиатурного прерывания) либо они помещаются на регистры ЦП и резидентная программа ( ядро ОС Windows) передает их активному Windows-приложению через специальный буфер.
Манипуляторы-указатели
Механическая мышь. Устройство содержит резиновый шарик, выступающий за нижнюю поверхность корпуса мыши. При перемещении мыши по поверхности стола шарик вращается, воздействуя на датчики перемещения по
оси X и Y, которые в свою очередь изменяют положение курсора на экране.
Используются также и «летающие» мыши, у которых задается и третья координата Z, путем вращения дополнительного колёсика.
Трекбол представляет собой механическую мышь, корпус которой фиксирован. Позиционирование курсора осуществляется непосредственным воздействием на резиновый шарик, что обеспечивает более быструю и точную
настройку. ПК с трекболом используются для управления спецтехникой
в
условиях ограниченного пространства.
Трекпэд. Устройство, используемое, в основном, в ноутбуках. Управление
курсором осуществляется путем перемещения пальца по специальному окну.
При этом щелчек пальцем по окну эквивалентен щелку мыши.
Оптическая мышь. Устройство содержит сетку из линий координат X и
Y. При перемещении мыши по гладкой отражательной поверхности изменяется
интенсивность отраженного светового потока, накладывающегося на коорди73
натную сетку и вызывающего соответствующее изменение положения курсора
на экране.
Сканеры
Сканер- устройство преобразования изображений и печатных текстов в
цифровую форму для ввода информации в компьютер. По своему конструктиву
и возможностям сканеры делятся на ручные и настольные, монохромные и
цветные, сканирующие плоские или объемные изображения.
6.2.
Устройства вывода информации
Мониторы
Мониторы - устройства для наблюдения на экране за вводимой инфор-
мацией и за информацией, полученной в результате работы компьютера. Мониторы реализуются на базе электронно-лучевых трубок или на основе жидкокристаллических дисплеев.
Мониторы на базе электронно-лучевых трубок по своему конструктиву
похожи на обычные телевизоры. В горловине стеклянной колбы находятся 3
электронные пушки «стреляющие» электронами. Пластины отклоняющей системы воздействуют на электроны электромагнитными полями, разгоняя и позиционируя их на различные участки экрана, расположенного напротив горловины электронно-лучевых трубок. Экран покрыт слоем люминофора, вызывающего свечение при попадании на него электронов. Люминофор состоит из
элементов трех цветов: красного, зеленого и синего. В зависимости от интенсивности свечения каждого из этих элементов получаются любые нужные цвета. Отклоняющая система обеспечивает сканирование экрана каждым из трёх
электронных лучей. Специальная управляющая система создает при этом необходимое изменение их интенсивности. При этом один луч скользит по элементам красного цвета, другой – по элементам зеленого цвета, а третий - по элементам синего цвета. Апертурная маска – металлический лист с регулярными
отверстиями или матрица из параллельных проводов, обеспечивает необходимую дискретность изображения, отсекая электроны, отклоняющиеся от основ74
ного луча. Каждый элемент изображения называется пикселом (от английских
слов picture и element).
Расстояние между соседними пикселями определяет разрешающую способность монитора. Её обычно измеряют числом пикселей по горизонтали и
вертикали экрана монитора. Величина разрешающей способности зависит от
технических характеристик используемого оборудования (обычно 1024 на 768
пикселей). Она не может превосходить собственную (физическую) разрешающую способность самого монитора, определяемую расстоянием между световыми пятнами (пэлами) люминофора по горизонтали и вертикали. Каждый пэл
в свою очередь состоит из трех субпэлов: красного, зеленого и синего. Диаметр
пэла (оптимальным является 0,26 мм) определяет зерно монитора. При максимальном разрешении монитора размер пикселя совпадает с размером пэла. При
использовании более низкой разрешающей способности каждый пиксель формируется из некоторой совокупности соседних пэлов.
По способу создания изображений мониторы делятся на растровые и
векторные. Растровые изображения создаются по точкам в ходе сканирования
электронным лучём всего экрана. Векторное изображение строится из регулярных фигур (отрезков прямых, дуг окружностей и т.д.). Электронный луч описывает при этом траектории, задаваемые своими координатами и соответствующими функциями.
Цвет каждого пикселя растра или всех пикселей той или иной регулярной
фигуры может принимать 2n различных значений, где n – глубина цвета. В различных видеосистемах используются значения n=2,4,8,16 или 24. Информация,
выводимая на экран, разбивается в видеопамяти на n битовых слоёв, каждый из
которых содержит двоичное значение соответствующего бита для каждого пикселя в растровом режиме или всех пикселей регулярной фигуры.
При выводе информации о значении цветов (n – разрядных двоичных чисел) из видеопамяти на экран она преобразуется в три аналоговых сигнала (значений напряжения) с помощью соответствующих цифро-аналоговых преобразователей, вызывая свечение пикселя (пикселей) требуемым цветом.
75
Поскольку цветовые импульсы субпэлов, возникающие под воздействием
электронного луча, со временем исчезают, то для предотвращения мерцания
экрана его необходимо своевременно обновлять. Особенно это важно для получения движущихся изображений. Чтобы мозг не замечал смены кадров, и не
было бы повышенной утомляемости, частота кадровой развертки должна быть
не менее 75 Гц, При этом частота строчной развертки (в кадре 768 строк) составляет около 58 Кгц, а скорость вывода на экран каждого пикселя – почти
59Мгц.
Жидкокристаллические дисплеи строятся на базе жидкокристаллического
вещества, молекулы которого обладают способностью поворачивать плоскость
поляризации квантов света на угол, пропорциональный величине напряженности электрического поля, направленного параллельно пути светового потока.
Жидкокристаллическое вещество помещается в специальный плоский контейнер (панель). С внутренней стороны панели находится источник света. Световой поток пропускается через линейный горизонтальный поляризатор и попадает на панель. Моделируя по определенному закону величину напряжения для
разных участков панели с помощью системы вертикальных и горизонтальных
электродов, получаем различный поворот угла поляризации квантов света, выходящего из различных участков панели. Этот световой поток пропускается
через линейный вертикальный поляризатор, расположенный перед экраном,
вызывая различное по интенсивности свечение участков экрана.
Для получения цветных жидкокристаллических мониторов используются
три панели, каждая из которых окрашена в свой базовый цвет (красный, зеленый и синий), или покрывают отдельные части экрана цветными пластиковыми
фильтрами базовых цветов.
Как было указано выше, для получения качественного изображения необходимо переключать пэлы с частотой порядка 59 Мгц. Поскольку жидкокристаллические панели не обладают физически такой возможностью, в них используются другие механизмы создания изображений. В простейших жидкокристаллических панелях одновременно выводится вся строка пэлов. После
76
каждой установки пэлы сохраняют фиксированную яркость до следующей переустановки. Время установки яркости одного пэла составляет порядка нескольких миллисекунд. Так как в кадре 768 строк, то частота кадровой развертки будет порядка 10 Гц. Чтобы повысить частоту кадровой развертки до приемлемой величины (75 гц) используют жидкокристаллические панели с двойным
параллельным сканированием верхней и нижней половинок экрана. Это увеличивает в два раза частоту кадровой развертки. Дальнейшее увеличение частоты
кадровой развертки достигается за счет использования активной матрицы пэлов, когда в каждый субпэл помещается транзистор. Сканирующее устройство
просматривает весь массив элементов растра и устанавливает значения яркости
для каждого транзистор на всём экране. После этого транзисторы сохраняют
свою яркость до следующего обновления экрана.
Принтеры
Во всех печатающих устройствах, используемых в ПК, применяется один
из пяти следующих базовых методов нанесения изображения на бумагу или
другой материал, предназначенный для печати. Каждый из этих методов имеет
свои разновидности.
1. Контактные принтеры ударного действия. Они подразделяются на
символьные (используются подвижные элементы для печати всего символа) и
матричные (изображение строится из отдельных точек, наносимых последовательным способом, аналогично тому, как формируется изображение на экране
растрового монитора).
Символьные принтеры аналогичны обычным электрофицированным пишущим машинкам. Для повышения скорости их работы пресс-формы символов
помещают на лепестки вращающейся головки (принтеры типа «ромашка»), а не
на отдельные тяги.
Матричные принтеры различаются числом элементов (иголок), одновременно участвующих в формировании изображения (от 9 до 24 иголок).
Все контактные принтеры, являясь механическими устройствами, обладают относительно низкой надежностью и скоростью работы. Кроме того, они
77
не экологичны по уровню шума. Поэтому контактные принтеры в основном
применялись на первых ПК. Все далее рассматривающиеся методы печати основываются на бесконтактных технологиях.
2. Струйные принтеры. Изображение строится по матричному способу
из набора точек, но образуются они в результате распыления красящих чернил
через систему специальных отверстий (сопл).
3. Ксерографические принтеры. Суть ксерокопирования состоит в следующем: на поверхности листа бумаги с помощью соответствующего источника
индуцируется статическое электрическое поле. Затем эта поверхность обрабатывается специальным красящим порошком, который оставляет больший или
меньший след на бумаге в зависимости от величины напряженности электростатического поля, индуцированного в том или ином месте. В зависимости от
используемого источника излучения такие принтеры делятся на лазерные,
жидкокристаллические и светодиодные.
4. Термопринтеры. Их можно рассматривать как струйные принтеры, использующие твёрдые чернила, расплавляемые перед тем, как они попадают в
выходные сопла.
5. Сублимационные принтеры. Сублимация – процесс перехода твердого
вещества в газообразное состояние. В сублимационных принтерах лента, содержащая краситель, помещается рядом с бумагой, обработанной специальным
образом. При нагревании участка ленты краситель сублимируется и появившееся в результате этого облачко окрашенного газа осаждается на бумаге. Концентрация окрашенного газа, а следовательно, и интенсивность отпечатка зависят от степени нагрева того или иного участка ленты.
Замечание. Для получения цветного изображения в контактных принтерах используют разноцветные красящие ленты. В бесконтактных принтерах
используют либо разноцветные чернила (в струйных принтерах), либо разноцветные красящие порошки-тонеры (в ксерографических принтерах). В термопринтерах используют разноцветный окрашенный воск (пастель), а в сублимационных принтерах - ленту с комбинацией красителей.
78
Плоттеры
Плоттеры (графопостроители) предназначены для вывода карт, чертежей и т.п. Используется векторная графика: изображение строится из графических примитивов: точек, отрезков прямых, прямоугольников, дуг окружностей
и эллипсов. В отличие от принтеров плоттеры позволяют выводить изображения на листы разных форматов (от А4 до А0). Плоттеры делятся на
 планшетные, в которых изображение выводится на плоский лист,
над которым по осям X и Y перемещается пишущая головка (перьевая или
струйная). Точность позиционирования составляет десятые и даже сотые доли
миллиметра;
 рулонные, в которых бумага помещается на горизонтальный барабан. Пишущая головка может перемещаться только вдоль оси барабана. Вращение барабана и движение головки обеспечивают её перемещение в двух перпендикулярных направлениях.
В ходе работы перьевого плоттера возможна смена цвета, толщины и
типа перьев. У струйных рулонных плоттеров головка имеет несколько разноцветных сопл.
79
Список литературы
1. Е.А. Кузьменкова, В.С. Махнычев, В.А. Падарян. Семинары по курсу
«Архитектура ЭВМ и язык ассемблера»: учебно-методическое пособие.
Часть 1.Издательство: МАКС ПРЕСС, 2014, 78 стр. PDF
2. Е.А. Кузьменкова, В.А. Падарян, М.А. Соловьев. Семинары по курсу
«Архитектура ЭВМ и язык ассемблера»: учебно-методическое пособие.
Часть 2.Издательство: МАКС ПРЕСС, 2014, 100 стр. PDF
3. Таненбаум Э. Архитектура компьютеров. СПб.: Питер, 2007. - 848 с.
4. А.Н. Степанов. Архитектура вычислительных систем и компьютерных
сетей. Издательство: Питер, 2007 г. — 512 стр.
5. Цилькер Б. Я., Орлов С.А. Организация ЭВМ и систем. СПб.: Питер,
2006. - 668 с.
6. Столлингс В. Структурная организация и архитектура компьютерных систем. 5-е издание. - М.: Издательский дом "Вильямс", 2002. - 896 с.
7. В.В.Воеводин, Вл.В.Воеводин. Параллельные вычисления. - СПб.: БХВПетербург, 2002. - 608 с.
8. Грушин В.В. Выполнение математических операций в ЭВМ. Погрешности компьютерной арифметики: Учебное пособие / СПбГЭТУ "ЛЭТИ".
СПб., 1999. 56 с.
9. Программа-тренажёр «ЛамПанель» (http://kpolyakov.narod.ru).
80
Download