Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

.1 Архитектура организация и конфигурация ЭВМ 4 1

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.11.2024

ОГЛАВЛЕНИЕ

1 ВВЕДЕНИЕ 4

1.1 Архитектура, организация и конфигурация ЭВМ 4

1.2 Общие требования к современным компьютерам 5

1.3 Классификация компьютеров по областям применения 8

1.4 Оценка производительности вычислительных систем 16

2 Архитектура системы команд 26

2.1 Классификация архитектур системы команд 27

2.2 Классификация по месту хранения операндов 29

2.3 CISC и RISC архитектуры 35

2.4 Типы и форматы операндов 37

2.5 Символьная информация 49

2.6 Логические данные и строки 51

2.7 Прочие виды информации 52

2.8 Типы и форматы команд 54

2.9 Способы адресации операндов 63

2.10 Система операций 71

^ 3 ОСНОВЫ ОРГАНИЗАЦИИ ЭВМ 73

3.1 Основные понятия 73

3.2 Информационная модель ЭВМ 73

3.3 Принципы Джона фон Неймана. 77

3.4 Основные компоненты ЭВМ 79

4 ЭВМ фон НЕЙМАНА 83

4.1 ЭВМ с шинной организацией 83

4.2 ЭВМ с канальной организацией 87

5 ОРГАНИЗАЦИЯ памяти ЭВМ 92

5.1 Иерархия памяти 92

5.2 Организация кэш-памяти 93

5.3 Организация основной памяти 98

^  1 ВВЕДЕНИЕ

1.1 Архитектура, организация и конфигурация ЭВМ

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

Термин организация ЭВМ определяет описание того, как реализованы возможности ЭВМ.

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

Таким образом, по цепочке архитектура → организация → конфигурация мы переходим от абстрактного определения к описанию конкретной ЭВМ.

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

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

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

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

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

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

^ 1.2 Общие требования к современным компьютерам

1.2.1 Отношение стоимость/производительность

У разработчиков компьютеров нет одной единственной цели. Для достижения поставленных целей при проектировании высокопроизводительных конструкций приходится игнорировать стоимостные характеристики. Суперкомпьютеры фирмы Cray Research и высокопроизводительные мейнфреймы компании IBM относятся именно к этой категории компьютеров.

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

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

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

^ 1.2.2 Надежность и отказоустойчивость

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

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

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

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

1.2.3 Масштабируемость

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

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

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

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

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

^ 1.2.4 Совместимость и мобильность программного обеспечения

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

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

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

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

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

Одним из вариантов моделей открытой среды является модель OSE (Open System Environment), предложенная комитетом IEEE POSIX. На основе этой модели национальный институт стандартов и технологии США выпустил документ "Application Portability Profile (APP). The U.S. Government's Open System Environment Profile OSE/1 Version 2.0", который определяет рекомендуемые для федеральных учреждений США спецификации в области информационных технологий, обеспечивающие мобильность системного и прикладного программного обеспечения. Все ведущие производители компьютеров и программного обеспечения в США в настоящее время придерживаются требований этого документа.

1.3 Классификация компьютеров по областям применения

1.3.1 Персональные компьютеры и рабочие станции

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

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

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

Тем не менее быстрый рост производительности ПК на базе новейших микропроцессоров Intel в сочетании с резким снижением цен на эти изделия и развитием технологии локальных шин (VESA и PCI), позволяющей устранить многие "узкие места" в архитектуре ПК, делают современные персональные компьютеры весьма привлекательной альтернативой рабочим станциям.

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

Поэтому в настоящее время появилось понятие персональной рабочей станции, которое объединяет оба направления.

Среди других факторов, способствующих этому процессу, следует выделить:

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

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

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

1.3.2 X-терминалы

X-терминалы представляют собой комбинацию бездисковых рабочих станций и стандартных ASCII-терминалов.

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

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

Типовой X-терминал включает следующие элементы:

Экран высокого разрешения - обычно размером от 14 до 21 дюйма по диагонали;

Микропроцессор на базе Motorola 68xxx или RISC-процессор типа Intel i960, MIPS R3000 или AMD29000;

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

Базовые системные программы, на которых работает система X-Windows и выполняются сетевые протоколы;

Программное обеспечение сервера X11;

Переменный объем локальной памяти (от 2 до 8 Мбайт) для дисплея, сетевого интерфейса, поддерживающего TCP/IP и другие сетевые протоколы.

Порты для подключения клавиатуры и мыши.

X-терминалы отличаются от ПК и рабочих станций не только тем, что не выполняет функции обычной локальной обработки. Работа X-терминалов зависит от главной (хост) системы, к которой они подключены посредством сети. Для того, чтобы X-терминал мог работать, пользователи должны инсталлировать программное обеспечение многооконного сервера X11 на главном процессоре, выполняющим прикладную задачу (наиболее известная версия X11 Release 5).

Х-терминалы отличаются также от стандартных алфавитно-цифровых ASCII и традиционных графических дисплейных терминалов тем, что они могут быть подключены к любой главной системе, которая поддерживает стандарт X-Windows. Более того, локальная вычислительная мощь X-терминала обычно используется для обработки отображения, а не обработки приложений, которые выполняются удаленно на главном компьютере (сервере). Вывод такого удаленного приложения просто отображается на экране X-терминала.

Оснащенный стандартной системой X-Windows, X-терминал может отображать на одном и том же экране множество приложений одновременно. Каждое приложение может выполняться в своем окне и пользователь может изменять размеры окон, их месторасположение и манипулировать ими в любом месте экрана.

X-Windows - результат совместной работы Масачусетского технологического института (MIT) и корпорации DEC. Система X-Windows (известная также под именем X) в настоящее время является открытым де-факто стандартом для доступа к множеству одновременно выполняющихся приложений с возможностями многооконного режима и графикой высокого разрешения на интеллектуальных терминалах, персональных компьютерах, рабочих станциях и X-терминалах.

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

В настоящее время X-Windows является также стандартом для разработки пользовательского интерфейса. Более 90% поставщиков UNIX-рабочих станций и многие поставщики персональных компьютеров адаптировали систему X-Windows и применяют в качестве стандарта.

1.3.3 Серверы

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

Существует несколько типов серверов, ориентированных на разные применения:

файл-сервер;

сервер базы данных;

принт-сервер;

вычислительный сервер;

сервер приложений.

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

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

сервер рабочей группы;

сервер отдела;

сервер масштаба предприятия (корпоративный сервер).

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

Файловые серверы небольших рабочих групп (не более 20-30 человек) проще всего реализуются на платформе персональных компьютеров и программном обеспечении Novell NetWare. Файл-сервер, в данном случае, выполняет роль центрального хранилища данных.

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

Скорость процессора для серверов с интенсивным вводом/выводом некритична. Они должны быть оснащены достаточно мощными блоками питания для возможности установки дополнительных плат расширения и дисковых накопителей. Желательно применение устройства бесперебойного питания. Как правило, для работы с многозадачными операционными системами такие серверы оснащаются интерфейсом SCSI (или Fast SCSI). Распределение данных по нескольким жестким дискам может значительно повысить производительность.

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

Однако для файл-серверов общего доступа, с которыми одновременно могут работать несколько десятков, а то и сотен человек, простой однопроцессорной платформы и программного обеспечения Novell может оказаться недостаточно. В этом случае используются мощные многопроцессорные серверы с возможностями наращивания оперативной памяти до нескольких гигабайт, дискового пространства до сотен гигабайт, быстрыми интерфейсами дискового обмена (типа Fast SCSI-2, Fast&Wide SCSI-2 и Fiber Channel) и несколькими сетевыми интерфейсами. Эти серверы используют операционную систему UNIX, сетевые протоколы TCP/IP и NFS. Подобного рода серверы получили название суперсерверов.

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

наличием двух или более центральных процессоров RISC, либо Pentium, либо Intel 486;

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

поддержкой технологии дисковых массивов RAID;

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

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

^ 1.3.4 Мейнфреймы (Main Frame)

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

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

Основными поставщиками мейнфреймов являются известные компьютерные компании IBM, Amdahl, ICL, Siemens Nixdorf и некоторые другие, но ведущая роль принадлежит безусловно компании IBM. Именно архитектура системы IBM/360, выпущенной в 1964 году, и ее последующие поколения стали образцом для подражания. В нашей стране в течение многих лет выпускались машины ряда ЕС ЭВМ, являвшиеся отечественным аналогом этой системы.

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

Первоначально мейнфреймы ориентировались на централизованную модель вычислений, работали под управлением патентованных операционных систем и имели ограниченные возможности для объединения в единую систему оборудования различных фирм-поставщиков. Однако повышенный интерес потребителей к открытым системам заставил поставщиков мейнфреймов существенно расширить возможности своих операционных систем в направлении совместимости. В настоящее время они демонстрирует свою открытость, обеспечивая соответствие со спецификациями POSIX 1003.3, возможность использования протоколов межсоединений OSI и TCP/IP или предоставляя возможность работы на своих компьютерах под управлением операционной системы UNIX собственной разработки.

Главным недостатком мейнфреймов в настоящее время остается относительно низкое соотношение производительность/стоимость. Однако фирмами-поставщиками мейнфреймов предпринимаются значительные усилия по улучшению этого показателя.

^ 1.3.5 Системы высокой готовности и кластерные архитектуры

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

Задача обеспечения продолжительного функционирования системы имеет три составляющих:

надежность;

готовность;

удобство обслуживания.

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

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

Основные эксплуатационные характеристики системы существенно зависят от удобства ее обслуживания, в частности от ремонтопригодности, контролепригодности и т.д.

В последние годы в литературе по вычислительной технике все чаще употребляется термин «системы высокой готовности» (High Availability Systems). Все типы систем высокой готовности имеют общую цель - минимизацию времени простоя.

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

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

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

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

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

VAX-кластер обладает следующими свойствами:

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

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

^ Высокая пропускная способность. Ряд прикладных систем могут пользоваться возможностью параллельного выполнения заданий на нескольких компьютерах кластера.

^ Удобство обслуживания системы. Общие базы данных могут обслуживаться с единственного места. Прикладные программы могут инсталлироваться только однажды на общих дисках кластера и разделяться между всеми компьютерами кластера.

Расширяемость. Увеличение вычислительной мощности кластера достигается подключением к нему дополнительных VAX-компьютеров. Дополнительные накопители на магнитных дисках и магнитных лентах становятся доступными для всех компьютеров, входящих в кластер.

1.4 Оценка производительности вычислительных систем

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

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

Наиболее простой способ определения времени называется астрономическим временем, временем ответа (response time), временем выполнения (execution time) или прошедшим временем (elapsed time). Это задержка выполнения задания, включающая буквально все: работу процессора, обращения к диску, обращения к памяти, ввод/вывод и накладные расходы операционной системы. Однако при работе в мультипрограммном режиме во время ожидания ввода/вывода для одной программы, процессор может выполнять другую программу, и система не обязательно будет минимизировать время выполнения данной конкретной программы.

Для измерения времени работы процессора на данной программе используется специальный параметр - время ЦП (CPU time), которое не включает время ожидания ввода/вывода или время выполнения другой программы. Очевидно, что время ответа, видимое пользователем, является полным временем выполнения программы, а не временем ЦП. Время ЦП может далее делиться на время, потраченное ЦП непосредственно на выполнение программы пользователя и называемое пользовательским временем ЦП, и время ЦП, затраченное операционной системой на выполнение заданий, затребованных программой, и называемое системным временем ЦП.

В большинстве современных процессоров скорость протекания процессов взаимодействия внутренних функциональных устройств определяется не естественными задержками в этих устройствах, а задается единой системой синхросигналов, вырабатываемых некоторым генератором тактовых импульсов, как правило, работающим с постоянной скоростью. Дискретные временные события называются тактами синхронизации (clock ticks), просто тактами (ticks), периодами синхронизации (clock periods), циклами (cycles) или циклами синхронизации (clock cycles). Разработчики компьютеров обычно говорят о периоде синхронизации, который определяется либо своей длительностью (например, 10 наносекунд), либо частотой (например, 100 МГц). Длительность периода синхронизации есть величина, обратная к частоте синхронизации.

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

Важной характеристикой, часто публикуемой в отчетах по процессорам, является среднее количество тактов синхронизации на одну команду - CPI (clock cycles per instruction). При известном количестве выполняемых команд в программе этот параметр позволяет быстро оценить время ЦП для данной программы.

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

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

1.4.1. MIPS

Одной из альтернативных единиц измерения производительности процессора (по отношению к времени выполнения) является MIPS - (миллион команд в секунду). Имеется несколько различных вариантов интерпретации определения MIPS.

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

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

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

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

Другое определение MIPS связано с очень популярным когда-то компьютером VAX 11/780 компании DEC. Именно этот компьютер был принят в качестве эталона для сравнения производительности различных машин. Считалось, что производительность VAX 11/780 равна 1MIPS (одному миллиону команд в секунду).

Третье определение MIPS связано с IBM RS/6000 MIPS. Дело в том, что ряд производителей и пользователей (последователей фирмы IBM) предпочитают сравнивать производительность своих компьютеров с производительностью современных компьютеров IBM, а не со старой машиной компании DEC. Соотношение между VAX MIPS и RS/6000 MIPS никогда широко не публиковались, но 1 RS/6000 MIPS примерно равен 1.6 VAX 11/780 MIPS.

1.4.2 MFLOP

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

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

Ясно, что рейтинг MFLOPS зависит от машины и от программы. Этот термин менее безобидный, чем MIPS. Он базируется на количестве выполняемых операций, а не на количестве выполняемых команд. По мнению многих программистов, одна и та же программа, работающая на различных компьютерах, будет выполнять различное количество команд, но одно и то же количество операций с плавающей точкой. Именно поэтому рейтинг MFLOPS предназначался для справедливого сравнения различных машин между собой.

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

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

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

1.4.3 LINPACK.

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

В основе алгоритмов действующего варианта LINPACK лежит метод декомпозиции. Исходная матрица размером 100х100 элементов (в последнем варианте размером 1000х1000) сначала представляется в виде произведения двух матриц стандартной структуры, над которыми затем выполняется собственно алгоритм нахождения решения. Подпрограммы, входящие в LINPACK, структурированы. В стандартном варианте LINPACK выделен внутренний уровень базовых подпрограмм, каждая из которых выполняет элементарную операцию над векторами. Набор базовых подпрограмм называется BLAS (Basic Linear Algebra Subprograms). Например, в BLAS входят две простые подпрограммы SAXPY (умножение вектора на скаляр и сложение векторов) и SDOT (скалярное произведение векторов). Все операции выполняются над числами с плавающей точкой, представленными с двойной точностью. Результат измеряется в MFLOPS.

Использование результатов работы тестового пакета LINPACK с двойной точностью как основы для демонстрации рейтинга MFLOPS стало общепринятой практикой в компьютерной промышленности. При этом следует помнить, что при использовании исходной матрицы размером 100х100, она полностью может размещаться в кэш-памяти емкостью, например, 1 Мбайт. Если при проведении испытаний используется матрица размером 1000х1000, то емкости такого кэша уже недостаточно и некоторые обращения к памяти будут ускоряться благодаря наличию такого кэша, другие же будут приводить к промахам и потребуют большего времени на обработку обращений к памяти. Для многопроцессорных систем также имеются параллельные версии LINPACK и такие системы часто показывают линейное увеличение производительности с ростом числа процессоров.

^ 1.4.4 SPECint92, SPECfp92

Важность создания пакетов тестов, базирующихся на реальных прикладных программах широкого круга пользователей и обеспечивающих эффективную оценку производительности процессоров, была осознана большинством крупнейших производителей компьютерного оборудования, которые в 1988 году учредили бесприбыльную корпорацию SPEC (Standard Performance Evaluation Corporation). Основной целью этой организации является разработка и поддержка стандартизованного набора специально подобранных тестовых программ для оценки производительности новейших поколений высокопроизводительных компьютеров.

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

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

Набор тестов CFP92, измеряющий производительность процессора при обработке чисел с плавающей точкой, состоит из 14 программ, также выбранных из различных прикладных областей: разработка аналоговых схем, моделирование методом Монте-Карло, квантовая химия, оптика, робототехника, квантовая физика, астрофизика, прогноз погоды и другие научные и инженерные задачи. Две программы из этого набора написаны на языке Си, а остальные 12 - на Фортране. В пяти программах используется одинарная, а в остальных - двойная точность.

Результаты прогона каждого индивидуального теста из этих двух наборов выражаются отношением времени выполнения одной копии теста на тестируемой машине к времени ее выполнения на эталонной машине. В качестве эталонной машины используется VAX 11/780. SPEC публикует результаты прогона каждого отдельного теста, а также две составные оценки: SPECint92 - среднее геометрическое 6 результатов индивидуальных тестов из набора CINT92 и SPECfp92 - среднее геометрическое 14 результатов индивидуальных тестов из набора CFP92.

^ 1.4.5 SPECrate_int92, SPECrate_fp92

Составные оценки SPECint92 и SPECfp92 достаточно хорошо характеризуют производительность процессора и системы памяти при работе в однозадачном режиме, но они совершенно не подходят для оценки производительности многопроцессорных и однопроцессорных систем, работающих в многозадачном режиме. Для этого нужна оценка пропускной способности системы или ее емкости, показывающая количество заданий, которое система может выполнить в течение заданного интервала времени. Пропускная способность системы определяется прежде всего количеством ресурсов (числом процессоров, емкостью оперативной и кэш-памяти, пропускной способностью шины), которые система может предоставить в распоряжение пользователя в каждый момент времени. Именно такую оценку, названную SPECrate и заменившую ранее применявшуюся оценку SPECthruput89, SPEC предложила в качестве единицы измерения производительности многопроцессорных систем.

При этом для измерения выбран метод "однородной нагрузки" (homogenous capacity metod), заключающийся в том, что одновременно выполняются несколько копий одной и той же тестовой программы. Результаты этих тестов показывают, как много задач конкретного типа могут быть выполнены в указанное время, а их средние геометрические значения (SPECrate_int92 - на наборе тестов, измеряющих производительность целочисленных операций и SPECrate_fp92 - на наборе тестов, измеряющих производительность на операциях с плавающей точкой) наглядно отражают пропускную способность однопроцессорных и многопроцессорных конфигураций при работе в многозадачном режиме в системах коллективного пользования. В качестве тестовых программ для проведения испытаний на пропускную способность выбраны те же наборы CINT92 и CFT92.

^ 1.4.6 TPC-A, TPC-B, TPC-C

По мере расширения использования компьютеров при обработке транзакций в сфере бизнеса все более важной становится возможность справедливого сравнения систем между собой. С этой целью в 1988 году был создан Совет по оценке производительности обработки транзакций (TPC - Transaction Processing Performance Council). К настоящему времени TPC создал три тестовых пакета для обеспечения объективного сравнения различных систем обработки транзакций и планирует создать новые оценочные тесты.

Выпущенный в ноябре 1989 года, тест TCP-A предназначался для оценки производительности систем, работающих в среде интенсивно обновляемых баз данных, типичной для приложений интерактивной обработки данных (OLDP - on-line data processing). Практически при выполнении теста эмулируется типичная вычислительная среда банка, включающая сервер базы данных, терминалы и линии связи. Этот тест использует одиночные, простые транзакции, интенсивно обновляющие базу данных. Одиночная транзакция (подобная обычной операции обновления счета клиента) обеспечивает простую, повторяемую единицу работы, которая проверяет ключевые компоненты системы OLTP. Тест TPC-A определяет пропускную способность системы, измеряемую количеством транзакций в секунду (tps A), которые система может выполнить при работе с множеством терминалов.

В августе 1990 года TPC одобрил TPC-B, интенсивный тест базы данных. TPC-B измеряет пропускную способность системы в транзакциях в секунду (tpsB). Поскольку имеются существенные различия между двумя тестами TPC-A и TPC-B (в частности, в TPC-B не выполняется эмуляция терминалов и линий связи), их нельзя прямо сравнивать.

Тестовый пакет TPC-C моделирует прикладную задачу обработки заказов. Он моделирует достаточно сложную систему OLTP, которая должна управлять приемом заказов, управлением учетом товаров и распространением товаров и услуг. Тест TPC-C осуществляет тестирование всех основных компонентов системы: терминалов, линий связи, ЦП, дискового в/в и базы данных. База данных TPC-C основана на модели оптового поставщика с удаленными районами и товарными складами. База данных содержит девять таблиц: товарные склады, район, покупатель, заказ, порядок заказов, новый заказ, статья счета, складские запасы и история.

Обычно публикуются два результата. Один из них, tpm-C, представляет пиковую скорость выполнения транзакций (выражается в количестве транзакций в минуту). Второй результат, $/tpm-C, представляет собой нормализованную стоимость системы. Стоимость системы включает все аппаратные средства и программное обеспечение, используемые в тесте, плюс стоимость обслуживания в течение пяти лет.

1.4.7 AIM

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

За время своего существования компания разработала специальное программное обеспечение, позволяющее легко создавать различные рабочие нагрузки, соответствующие уровню тестируемой системы и требованиям по ее использованию. Это программное обеспечение состоит из двух основных частей: генератора тестовых пакетов (Benchmark Generator) и нагрузочных смесей (Load Mixes) прикладных задач.

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

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

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

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

Универсальная смесь для рабочих станций (General Workstation Mix) - моделирует работу рабочей станции в среде разработки программного обеспечения.

Смесь для механического САПР (Mechanical CAD Mix) моделирует рабочую станцию, используемую для трехмерного моделирования и среды системы автоматизации проектирования в механике.

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

Смесь универсальных деловых приложений (General Business) - моделирует рабочую станцию, используемую для выполнения таких стандартных инструментальных средств, как электронная почта, электронные таблицы, база данных, текстовый процессор и т.д.

Многопользовательская смесь (Shared/Multiuser Mix) моделирует многопользовательскую систему, обеспечивающую обслуживание приложений для множества работающих в ней пользователей.

Смесь для вычислительного (счетного) сервера (ComputeServer Mix) - моделирует систему, используемую для выполнения заданий с большим объемом вычислений, таких как маршрутизация PCB, гидростатическое моделирование, вычислительная химия, взламывание кодов и т.д.

Смесь для файл-сервера (File Server Mix) - моделирует запросы, поступающие в систему, используемую в качестве централизованного файлового сервера, включая ввод/вывод и вычислительные мощности для других услуг по запросу.

Смесь СУБД (RBMS Mix) - моделирует систему, выполняющую ответственные приложения управления базой данных.

Рейтинг производительности по AIM - стандартная единица измерения пиковой производительности, установленная AIM Technology. Этот рейтинг определяет наивысший уровень производительности системы, который достигается при оптимальном использовании ЦП, операций с плавающей точкой и кэширования диска. Рейтинг машины VAX 11/780 обычно составляет 1 AIM.

2 Архитектура системы команд

Системой команд вычислительной машины называют полный перечень команд, которые способна выполнять данная ЭВМ. В свою очередь, под архитектурой системы команд (АСК) принято определять те средства вычислительной машины, которые видны и доступны программисту.

Компьютер представляет собой неделимую совокупность материального и идеального: аппаратных и программных компонентов. АСК можно рассматривать как линию согласования нужд разработчиков программного обеспечения с возможностями создателей аппаратуры вычислительной машины. Таким образом, АСК служит интерфейсом между программной (идеальной) и аппаратной (материальной) частями компьютера (рисунок 2.1).

Рисунок 2.1 – Основные компоненты компьютера

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

В упрощенной трактовке время выполнения программы Tвыч можно определить через число команд в программе Nком, среднее количество тактов процессора, приходящихся на одну команду CPI и длительность тактового периода тп:

Tвыч = Nком*CPI*тп.

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

Рисунок 2.2 – АСК и эффективность вычислений

Общая характеристика архитектуры системы команд вычислительной машины складывается из ответов на следующие вопросы:

1.Какого вида данные будут представлены в вычислительной машине и в какой форме?

2.Где эти данные могут храниться помимо основной памяти?

3.Каким образом будет осуществляться доступ к данным?

4.Какие операции могут быть выполнены над данными?

5.Сколько операндов может присутствовать в команде?

6.Как будет определяться адрес очередной команды?

7.Каким образом будут закодированы команды?

В данном разделе обсудим наиболее распространенные архитектуры системы команд.

^ 2.1 Классификация архитектур системы команд

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

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

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

стековую;

аккумуляторную;

регистровую;

с выделенным доступом к памяти.

Рисунок 2.3 – Классификация АСК

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

^ 2.2 Классификация по месту хранения операндов

2.2.1 Стековая архитектура

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

Стек образует множество логически взаимосвязанных ячеек (рисунок 2.4), взаимодействующих по принципу «последним вошел, первым вышел» (LIFO, Last In First Out).

Верхнюю ячейку называют вершиной стека (SP). Для работы со стеком предусмотрены две операции: push (проталкивание данных в стек) и pop (выталкивание данных из стека). Запись возможна только в ячейку стека с адресом SP-1, при этом указатель стека смещается на одну позицию вниз. Чтение допустимо только из вершины стека (ячейка с адресом SP). Извлеченная информация удаляется из стека, а указатель продвигается вверх – принимает значение SP+1.

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

а = а + b + а*с.

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

а = ab+ ac*+.

Данная форма записи однозначно определяет порядок загрузки операндов и выполнения операций в стековой архитектуре. Порядок выполнения команд в стековой АСК представлен на рисунке 2.5.

Основные узлы и информационные тракты одного из возможных вариантов ЭВМ на основе стековой АСК показаны на рисунке 2.6.

Информация может быть занесена в вершину стека из памяти или из АЛУ. Для записи в стек содержимого ячейки памяти с адресом х выполняется команда push x, по которой информация считывается из ячейки памяти, заносится в регистр данных, а затем проталкивается в стек. Результат операции из АЛУ заносится в вершину стека автоматически.

Сохранение содержимого вершины стека в ячейке памяти с адресом x производится командой pop x. По этой команде содержимое верхней ячейки стека подается на шину, с которой и производится запись в ячейку х, после чего производится инкремент указателя стека: SP+1.

Для выполнения арифметической или логической операции на вход АЛУ по дается информация, считанная из двух верхних ячеек стека (при этом содержимое стека продвигается на две позиции вверх, то есть операнды из стека удаляются). Результат операции заталкивается в вершину стека. Возможен вариант, когда результат сразу же переписывается в память с помощью автоматически выполняемой операции pop х.

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

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

Рисунок 2.6 – Архитектура ЭВМ на основе стековой АСК

С другой стороны, стековая АСК по определению не предполагает произвольного доступа к памяти, из-за чего компилятору трудно создать эффективный программный код, хотя создание самих компиляторов упрощается. Кроме того, стек становится «узким местом» ЭВМ в плане повышения производительности.

^  2.2.2 Аккумуляторная архитектура

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

Типичная архитектура ЭВМ на базе аккумулятора показана на риунке 2.7.

Для загрузки в аккумулятор содержимого ячейки х предусмотрена команда загрузки load x. По этой команде информация считывается из ячейки памяти х, выход памяти подключается к входам аккумулятора и происходит занесение считанных данных в аккумулятор.

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

Рисунок 2.7 – Архитектура ЭВМ на основе аккумуляторной АСК

Для выполнения операции в АЛУ производится считывание одного из операндов из памяти в регистр данных. Второй операнд находится в аккумуляторе. Выходы регистра данных и аккумулятора подключаются к соответствующим входам АЛУ. По окончании предписанной операции результат с выхода АЛУ заносится в аккумулятор.

Достоинствами аккумуляторной АСК можно считать короткие команды и простоту декодирования команд. Однако наличие всего одного регистра порождает многократные обращения к основной памяти.

^ 2.2.3 Регистровая архитектура

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

Размер регистров обычно фиксирован и совпадает с размером машинного слова, К любому регистру можно обратиться, указав его номер. Количество РОН в архитектурах типа CISC обычно невелико (от 8 до 32), и для представления номера конкретного регистра необходимо не более пяти разрядов, благодаря чему в адресной части команд обработки допустимо одновременно указать номера двух, а зачастую и трех регистров (двух регистров операндов и регистра результата). RISC-архитектура предполагает использование существенно большего числа РОН (до нескольких сотен), однако типичная для таких ЭВМ длина команды (обычно 32 разряда) позволяет определить в команде до трех регистров.

Т а б л и ц а 2.1 – Сравнение вариантов размещения операндов

Тип команд

Достоинства

Недостатки

Регистр-регистр

(0, 3)

Простота реализации; фиксированная длина команды; простые алгоритмы компиляции; одинаковый CPI для всех команд.

Большой объем объектного кода; не всегда используются все поля команды.

Регистр-память

(1, 2)

Компактный объектный код; простота создания исходного кода.

Длинное поле адреса в команде; потеря одного из операндов.

Память-память

(3,3)

Компактный объектный код; малая потребность в РОН.

Низкое быстродействие; разнообразие форматов команд.

Регистровая архитектура допускает расположение операндов в одной из двух запоминающих сред: основной памяти или регистрах. С учетом возможного размещения операндов в рамках регистровых АСК выделяют три подвида команд обработки:

регистр-регистр;

регистр-память;

память-память.

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

В выражениях вида (m, n) в первом столбце таблицы m означает количество операндов, хранящихся в основной памяти, a n – общее число операндов в команде арифметической или логической обработки.

Вариант «регистр-регистр» является основным в вычислительных машинах типа RISC, Команды типа «регистр-память» характерны для CISC-машин. Наконец, вариант «память-память» считается неэффективным, хотя и остается в наиболее сложных моделях машин класса CISC.

Возможную структуру и информационные тракты вычислительной машины с регистровой архитектурой системы команд иллюстрирует рисунок 2.8.

Рисунок 2.8 – Архитектура ЭВМ на основе регистровой АСК

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

Выполнение операции в АЛУ включает в себя:

выбор регистра первого операнда;

определение расположения второго операнда (память или регистр);

подачу на вход АЛУ операндов и выполнение операции;

выбор регистра результата и занесение в него результата операции из АЛУ.

Обратим внимание на то, что между АЛУ и регистровым файлом должны быть по крайней мере три шины (рисунок 2.8).

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

^ 2.2.4 Архитектура с выделенным доступом к памяти

В архитектуре с выделенным доступом к памяти обращение к основной памяти возможно только с помощью двух специальных команд: load и store. В английской транскрипции данную архитектуру называют Load/Store architecture. Команда load (загрузка) обеспечивает считывание значения из основной памяти и занесение его в регистр процессора (в команде обычно указывается адрес ячейки памяти и номер регистра). Пересылка информации в противоположном направлении производится командой store (сохранение). Операнды во всех командах обработки информации могут находиться только в регистрах процессора (чаще всего в регистрах общего назначения). Результат операции также заносится в регистр. В архитектуре отсутствуют команды обработки, допускающие прямое обращение к основной памяти. Допускается наличие в АСК ограниченного числа команд, где операнд является частью кода команды.

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

АСК с выделенным доступом к памяти характерна для всех вычислительных машин с RISC-архитектурой. Команды в таких ЭВМ, как правило, имеют длину 32 бита и трехадресный формат. К достоинствам АСК следует отнести простоту декодирования и исполнения команды.

2.3 CISC и RISC архитектуры

Другой подход к классификации системы команд ЭВМ основан на составе и степени сложности команд.

Современная технология программирования ориентирована на языки высокого уровня (ЯВУ), главная цель которых — облегчить процесс программирования. Переход к ЯВУ, однако, породил серьезную проблему: сложные операторы, характерные для ЯВУ, существенно отличаются от простых машинных операций, реализуемых в большинстве вычислительных машин. Проблема получила название семантического разрыва, а ее следствием становится недостаточно эффективное выполнение программ на ЭВМ. Пытаясь преодолеть семантический разрыв, разработчики вычислительных машин в настоящее время выбирают один из трех подходов и, соответственно, один из трех типов АСК:

архитектуру с полным набором команд: CISC (Complex Instruction Set Computer);

архитектуру с сокращенным набором команд: RISC (Reduced Instruction Set Computer);

архитектуру с командными словами сверхбольшой длины: VLIW (Very Long Instruction Word).

В вычислительных машинах типа CISC проблема семантического разрыва решается за счет расширения системы команд, дополнения ее сложными командами, семантически аналогичными операторам ЯВУ. Основоположником CISC архитектуры считается компания IBM, которая начала применять данный подход с семейства машин IBM 360 и продолжает его в своих мощных современных универсальных ЭВМ. таких как IBM ES/9000. Аналогичный подход характерен и для компании Intel в ее микропроцессорах серии 8086 и Pentium. Для CISC-архитектуры типичны:

наличие в процессоре сравнительно небольшого числа регистров общего назначения;

большое количество машинных команд, некоторые из них аппаратно реализуют сложные операторы ЯВУ;

разнообразие способов адресации операндов;

множество форматов команд различной разрядности;

наличие команд, где обработка совещается с обращением к памяти (регистр-память и память-память).

К типу CISC можно отнести практически все ЭВМ, выпускавшиеся до середины 1980-х годов, и значительную часть производящихся в настоящее время. Рассмотренный способ решения проблемы семантического разрыва вместе с тем ведет к усложнению аппаратуры ЭВМ, главным образом устройства управления, что, в свою очередь, негативно сказывается на производительности ЭВМ в целом. Это заставило более внимательно проанализировать программы, получаемые после компиляции с ЯВУ. Был предпринят комплекс исследований, в результате которых обнаружилось, что доля дополнительных команд, эквивалентных операторам ЯВУ, в общем объеме программ не превышает 10-20%, а для некоторых наиболее сложных команд даже 0,2%. В то же время объем аппаратных средств, требуемых для реализации дополнительных команд, возрастает весьма существенно. Так, емкость микропрограммной памяти при поддержании сложных команд может увеличиваться на 60%.

Детальный анализ результатов упомянутых исследований привел к серьезному пересмотру традиционных решений, следствием чего стало появление RISC-архитектуры. Термин RISC впервые был использован Д. Паттерсоном и Д. Дитцелем в 1980 году. Идея заключается в ограничении списка команд ЭВМ наиболее часто используемыми простейшими командами, оперирующими данными, размещенными только в регистрах процессорах. Обращение к памяти допускается лишь с помощью специальных команд чтения и записи – выделенный доступ кпамяти. Резко уменьшено количество форматов команд и способов указания адресов операндов. Сокращение числа форматов команд и их простота, использование ограниченного количества способов адресации, отделение операций обработки данных от операций обращения к памяти позволяет существенно упростить аппаратные средства ЭВМ и повысить их быстродействие.

RISC-архитектура разрабатывалась таким образом, чтобы уменьшить Tвыч за счет сокращения CPI и тп . Как следствие, реализация сложных команд за счет последовательности из простых, но быстрых RISC-команд оказывается не менее эффективной, чем аппаратный вариант сложных команд в CISC-архитектуре.

Элементы RISC-архитектуры впервые появились в вычислительных машинах CDC 6600 и суперЭВМ компании Cray Research. Достаточно успешно реализуется RISC-архитектура и в современных ЭВМ, например, в процессорах Alpha фирмы DEC, серии РА фирмы Hewlett-Packard, семействе PowerPC и т.п. Отметим, что в последних микропроцессорах фирмы Intel и AMD широко используются идеи, свойственные RISC-архитектуре, так что многие различия между CISC и RISC постепенно стираются.

Помимо CISC- и RISC-архитектур в общей классификации был упомянут еще один тип АСК — архитектура с командными словами сверхбольшой длины (VL1W). Концепция VLIW базируется на RISC-архитектуре, где несколько простых RISC-команд объединяются в одну сверхдлинную команду и выполняются параллельно. В плане АСК архитектура VLIW сравнительно мало отличается от RISC. Появился лишь дополнительный уровень параллелизма вычислений, в силу чего архитектуру VLIW логичнее адресовать не к вычислительным машинам, а к вычислительным системам.

Наиболее существенные различия в архитектурах типа CISC, RISC и VLIW приведены таблице 2.2.

Т а б л и ц а 2.2 – Сравнительная оценка CISC-, RISC- и VLIW-архитектур

Характеристика

CISC

RISC

VLIW

Длина команды

Переменная

Постоянная

Постоянная

Расположение полей

Варьируется

Неизменно

Неизменно

Количество РОН

Несколько

Много

Много

Доступ к памяти

Выполняется как часть команды обработки

Выделенный

Выделенный

^ 2.4 Типы и форматы операндов

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

^ 2.4.1 Числовая информация

Среди цифровых данных можно выделить две группы:

целые типы, используемые для представления целых чисел;

вещественные типы для представления рациональных чисел.

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

^  2.4.2 Числа в форме с фиксированной запятой

Представление числа X в форме с фиксированной запятой (ФЗ), которую иногда называют также естественной формой, включает в себя знак числа и его модуль в q-ичном коде. Здесь q — основание системы счисления или база. Для современных ЭВМ характерна двоичная система (q=2), но иногда используются также восьмеричная (q= 8) или шестнадцатеричная (q =16) системы счисления. Запятую в записи числа называют соответственно двоичной, восьмеричной или шестнадцатеричной. Знак положительного числа кодируется двоичной цифрой 0, а знак отрицательного числа — цифрой 1.

Числам с ФЭ соответствует запись вида

X = ±an-1an-2…a1a0,a-1a-2…a-r.

Отрицательные числа обычно представляются в дополнительном коде. Разряд кода числа, в котором размешается знак, называется знаковым разрядом кода. Разряды, где располагаются значащие цифры числа, называются цифровыми разрядами кода. Знаковый разряд размещается левее старшего цифрового разряда. Положение запятой одинаково для всех чисел и в процессе решения задач не меняется. Хотя запятая и фиксируется, в коде числа она никак не выделяется, а только подразумевается. В общем случае разрядная сетка ЭВМ для размещения чисел в форме с ФЗ имеет вид, представленный на рисунке 2.9, где n разрядов используются для записи целой части числа и r разрядов — для дробной части.

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

qn > |X| ≥ q-r.

Если число является смешанным (содержит целую и дробную части), оно обрабатываются как целое, хотя и не является таковым (в этом случае применяют термин масштабируемое целое). Обработка смешанных чисел в ЭВМ встречается крайне редко.

Рисунок 2.11 – Целочисленные форматы в микропроцессорах фирмы Intel

Как правило, используются ЭВМ с целочисленной арифметикой. Целые числа представимы при фиксации запятой после младшего разряда (r=0). Это наиболее распространенный способ, поэтому фактически понятие ФЗ относится исключительно к целым числам, и операции с числами в форме ФЗ будут характеризоваться как целочисленные. Возможные форматы целых чисел со знаком и без знака показаны на рисунке 2.10.

Отрицательные целые числа в двоичном счислении (q=2) представляются в дополнительном формате, что позволяет избежать двойного представления нуля: ±0. Дополнительный формат получается следующим образом:

производится инверсия всех разрядов в представлении модуля исходного числа;

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

Тогда число «–0» (все цифровые разряды нулевые) фактически будет представлять число «–2n-1».

На рисунке 2.11 приведены целочисленные форматы с фиксированной запятой, принятые в микропроцессорах фирмы Intel.

Целые числа применяются также для работы с адресами. На рисунке 2.11 это 32-разрядный формат ближнего и 48-разрядный формат дальнего указателей.

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

^ 2.4.3 Упакованные целые числа

Рисунок 2.12 – Форматы упакованных чисел в технологиях MMX и 3D Now!

В АСК современных микропроцессоров имеются команды, оперирующие целыми числами, представленными в упакованном виде. Связано это с обработкой мультимедийной информации. Формат предполагает упаковку в пределах достаточно длинного слова (обычно 64-разрядного) нескольких небольших целых чисел, а соответствующие команды обрабатывают все эти числа параллельно. Если каждое из чисел состоит из четырех двоичных разрядов, то в 64-разрядное слово можно поместить до 16 таких чисел. Неиспользованные разряды заполняются нулями, В микропроцессорах фирмы Intel, начиная с Pentium ММХ, присутствуют специальные команды для обработки мультимедийной информации (ММХ-команды), оперирующие целыми числами, упакованными в квадрослова (64-разрядные слова). Предусмотрены три формата (рисунок 2.12): упакованные байты (восемь 8-разрядных чисел); упакованные слова (четыре 16-разрядных числа) и упакованные двойные слова (два 32-разрядных числа).

Байты в формате упакованных байтов нумеруются от 0 до 7, причем байт 0 располагается в младших разрядах квадрослова. Аналогичная система нумерации и размещения упакованных чисел применяется для упакованных слов (номера 0-3) и упакованных двойных слов (номера 0-1).

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

^ 2.4.4 Десятичные числа

А) – зонный; Б) – уплотненный

Рисунок 2.13 – Форматы десятичных чисел

В ряде задач, главным образом, учетно-статистического характера, приходится иметь дело с хранением, обработкой и пересылкой десятичной информации. Особенность таких задач состоит в том, что обрабатываемые числа могут состоять из различного и весьма большого количества десятичных цифр. Традиционные методы обработки с переводом исходных данных в двоичную систему счисления и обратным преобразованием результата зачастую сопряжены с существенными накладными расходами. По этой причине в ЭВМ применяются иные специальные формы представления десятичных данных. В их основу положен принцип кодирования каждой десятичной цифры эквивалентным двоичным числом из четырех битов (тетрадой), то есть так называемым двоично-десятичным кодом (BCD – Binary Coded Decimal).

Используются два формата представления десятичных чисел (все числа рассматриваются как целые): зонный (распакованный) уплотненный (упакованный). В обоих форматах каждая десятичная цифра представляется двоичной тетрадой, то есть заменяется двоично-десятичным кодом. Из оставшихся задействованных шести четырехразрядных двоичных комбинации (24= 16) две служат для кодирования знаков «плюс» и «минус». Например, в ЭВМ семейства IBM 360/370/390 для знака «плюс» выбран код 11002 =С16, а для знака «минус» — код 11012 =D16.

Зонный формат, приведенный на рисунке 2.13, А), применяется в операциях ввода/вывода. В нем под каждую цифру выделяется один байт, где младшие четыре разряда отводятся под код цифры, а в старшую тетраду (поле зоны) записывается специальный код «зона», не совпадающий с кодами цифр и знаков. В IBM 360/370/390 это код 11112- F16 Исключение составляет байт, содержащий младшую цифру десятичного числа, где в поле зоны хранится знак числа. На рисунке 2.14 показана запись числа «–7396» в зонном формате. В некоторых ЭВМ принят вариант зонного формата, где поле зоны заполняется нулями.

Рисунок 2.14 – Представление числа «–7396» в зонном формате

При выполнении операций сложения и вычитания над десятичными числами обычно используется упакованный формат и в нем же получается результат. Умножение и деление возможно только в зонном формате.

В упакованном формате, показанном на рисунке 2.13, Б), каждый байт содержит коды двух десятичных цифр. Правая тетрада последнего байта предназначается для записи знака числа. Десятичное число должно занимать целое количество байтов. Если это условие не выполняется, то четыре старших двоичных разряда левого байта заполняется нулями. Так, представление числа -7396 в упакованном формате имеет вид, приведенный на рисунке 2.15.

Рисунок 2.15 – Представление числа «–7396» в упакованном формате

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

^ 2.4.5 Числа в форме с плавающей запятой

От недостатков ФЗ в значительной степени свободна форма представления чисел с плавающей запятой (ПЗ), известная также под названиями нормальной или полулогарифмической формы. В данном варианте каждое число разбивается на две группы цифр. Первая группа цифр называется мантиссой, вторая — порядком. Число представляется в виде произведения

X = ± mq±p,

где т – мантисса числа X, р – порядок числа, q – основание системы счисления.

Для представления числа в форме с ПЗ требуется задать знаки мантиссы и порядка, их модули в q-ичном коде, а также основание системы счисления q. Формат представления числа с ПЗ показан на рисунке 2.16. Нормальная форма неоднозначна, так как взаимное изменение m и p приводит к «плаванию» запятой, чем и обусловлено название этой формы.

Диапазон и точность представления чисел с ПТ зависят от числа разрядов, отводимых под порядок и мантиссу. На рисунке 2.17 показаны диапазоны разрядностей порядка и мантиссы, характерные для известных ЭВМ.

В большинстве вычислительных машин для упрощения операций над порядками последние приводят к целым положительным числам, применяя так называемый смещенный порядок. Для этого к истинному порядку добавляется целое положительное число – смещение. Например, в системе со смещением 128 порядок «–3» представляется как «125» (–3 + 128). Обычно смещение выбирается равным половине представимого диапазона порядков. Отметим, что смещенный порядок занимает все биты поля порядка, в том числе и тот, который ранее использовался для записи знака порядка.

Рисунок 2.17 – Типовые разрядности порядка и мантиссы

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

Для представления числа с ПЗ в ЭВМ используется база 2 (q = 2). При этом применяют еще один способ повышения точности представления мантиссы, называемый приемом скрытой единицы. Суть его в том, что в нормализованной мантиссе старшая цифра всегда равна единице, следовательно, эта цифра может не записываться, а подразумеваться. Запись мантиссы начинают с ее второй цифры, и это позволяет задействовать дополнительный значащий бит для более точного представления числа. Следует отметить, что значение порядка в данном случае не меняется. Скрытая единица перед выполнением арифметических операций восстанавливается, а при записи результата — удаляется. Таким образом, нормализованная мантисса 0,101000(1) при использовании способа «скрытой единицы» будет иметь вид 0,010001 (в скобках указана цифра, не поместившаяся в поле мантиссы при стандартной записи).

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

Примеры. На рисунке 2.18 представлен типичный 32-битовый формат числа с ПЗ. Старший (левый) бит содержит знак числа. Значение смешенного порядка хранится в разрядах с 1-го по 8-й и может находиться в диапазоне от 0 до 255. Для получения фактического значения порядка из содержимого этого поля нужно вычесть фиксированное значение, равное 128. С таким смещением фактические значения порядка могут лежать в диапазоне от -128 до +127. Третье поле слова содержит нормализованную мантиссу со скрытым разрядом (единицей). Благодаря такому приему 23-разрядное поле позволяет хранить 24-разрядную мантиссу в диапазоне от 0,5 до 1,0.

Рисунок 2.18 – 32-битовый формат числа с ПЗ

На рис. 2.19 приведены диапазоны чисел, которые могут быть записаны с помощью 32-разрядного слова.

Рисунок 2.19 – Числа, представимые в 32-битовых форматах:

А) – целые числа; Б) – числа с ПЗ

В варианте для целых чисел в дополнительном коде могут быть представлены все целые числа от -231 до (231 – 1), то есть всего 232 различных чисел (см. рисунок 2.19, А).

Для случая ПЗ представимы два диапазона чисел (см. рисунок 2.19, Б):

отрицательные числа: –(1-2–24)*2127 ≤ X ≤ –0,5*2–128;

положительные числа: 0,5*2–128 ≤ X ≤ (1-2–24)*2127 .

В эту область не включены пять участков:

отрицательные числа, меньшие чем –(1-2–24)*2127 – отрицательное переполнение;

отрицательные числа, большие чем –0,5*2–128 – отрицательная потеря значимости;

положительные числа, меньшие чем 0,5*2–128 – положительная потеря значимости;

положительные числа, большие чем (1-2–24)*2127 – положительное переполнение.

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

Кроме этого, числа в форме с ПЗ, в отличие от чисел в форме с ФЗ, размешены на числовой оси неравномерно. Расстояние между соседними представимыми числами увеличивается с ростом порядка n. Возможные значения в начале числовой оси расположены плотнее, а по мере движения вправо – все реже, что иллюстрирует рисунок 2.20. Это означает, что чаще всего вычисления приводят к результату, который не является точным, а представляет собой округление до ближайшего представимого значения.

Рисунок 2.20 – Плотность представимых чисел с ПЗ на числовой оси

Для формата с ПЗ имеет место противоречие между диапазоном и точностью. Если увеличить число битов, отведенных под порядок, расширяется диапазон представимых чисел. Однако, поскольку может быть представлено только фиксированное число различных значений, уменьшается плотность и тем самым точность. Единственный путь увеличения как диапазона, так и точности – увеличение количества разрядов, поэтому в большинстве ЭВМ предлагается использовать числа в одинарном и двойном форматах. Например, число одинарного формата может занимать 32 бита, а двойного (double) – 64 бита.

Числа с плавающей запятой в разных ЭВМ имеют несколько различных форматов. В настоящее время для всех ЭВМ рекомендован стандарт, разработанный общепризнанным международным центром стандартизации IEEE (Institute of Electrical and Electronics Engineers). Этот стандарт был разработан с целью облегчить перенос программ с одного процессора на другие и нашел широкое применение практически во всех процессорах и арифметических сопроцессорах.

Стандарт определяет 32-битовый (float) и 64-битовый (double) форматы с 8- и 11-разрядным порядком, соответственно. Основанием системы счисления является 2.

Не все кодовые комбинации в форматах ШЕЕ интерпретируются обычным путем – некоторые комбинации используются для представления специальных значений. Предельные значения порядка, содержащие все нули (0) и все единицы (255 — в одинарном формате и 2047 — в двойном формате), определяют специальные значения. Нулевой порядок совместно с нулевой мантиссой представляют положительный или отрицательный 0, в зависимости от состояния бита знака мантиссы. Порядок, содержащий единицы во всех разрядах, совокупно с нулевой мантиссой представляют положительную или отрицательную бесконечность, в зависимости от состояния бита знака, что позволяет пользователю самому решить, считать ли это ошибкой или продолжать вычисления со значением, равным бесконечности. Кодовая комбинация, в которой порядок содержит все единицы, а мантисса не равна 0, используется как признак «не числа» (NAN — Not a Number) и служит для предупреждения о различных исключительных ситуациях.

^ 2.4.7 Единицы разрядности типов данных

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

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

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

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

Разрядность целочисленного АЛУ обычно выбирается равной разрядности адреса (для большинства современных ЭВМ это 32 разряда). Следовательно, наиболее выгодными в плане быстродействия являются такие целые числа, длина которых совпадает с разрядностью адреса. Использование более коротких чисел позволяет сэкономить на памяти, но выигрыша в производительности не дает.

Рисунок 2.21 – Стандартные единицы разрядности

Блоки операций с плавающей запятой обычно согласованы со стандартом IEEE 754 и рассчитаны на обработку чисел в формате двойной длины (64 бита). В большинстве ЭВМ реальная разрядность таких блоков даже больше (80 бит). Таким образом, наилучшим вариантом при проведении вычислений с плавающей запятой можно считать формат двойного слова. При выборе формата меньшей длины (32 разряда) вычисления все равно ведутся с большей точностью, после чего результат округляется. Таким образом, использование короткого формата чисел с плавающей запятой, как и в случае целых чисел с фиксированной запятой, помимо экономии памяти никаких иных преимуществ также не дает.

^ 2.4.8 Размещение числовых данных в памяти

В современных ЭВМ разрядность одной ячейки памяти, как правило, равна одному байту (8 бит). В то же время реальная длина кодов чисел составляет 2, 4, 8 или 16 байт. При хранении таких чисел в памяти последовательные байты числа размещают в нескольких ячейках с последовательными адресами, при этом для доступа к числу указывается только наименьший из адресов. При разработке архитектуры системы команд необходимо определить порядок размещения байтов в памяти, то есть какому из байтов (старшему или младшему) будет соответствовать этот наименьший адрес. На рисунке 2.22 показаны оба варианта размещения 32-разрядного числа в четырех последовательных ячейках памяти, начиная с адреса X.

Рисунок 2.22 – Варианты размещения 32-разрядного числа

В вычислительном плане оба способа записи равноценны. Так, фирмы DEC и Intel отдают предпочтения размещению в первой ячейке младшего байта, a IBM и Motorola ориентируются на противоположный вариант. Выбор обычно связан с некими иными соображениями разработчиков ЭВМ. В настоящее время в большинстве машин предусматривается использование обоих вариантов, причем выбор может быть произведен программным путем за счет соответствующей установки регистра конфигурации.

Помимо порядка размещения байтов, существенным бывает и выбор адреса, с которого может начинаться запись числа. Связано это с физической реализацией полупроводниковых запоминающих устройств, где обычно предусматривается возможность считывания (записи) четырех байтов подряд. Причем данная операция выполняется быстрее, если адрес первого байта А отвечает условию A mod S = 0, S= 2, 4, 8, 16. Числа, размешенные в памяти в соответствии с этим правилом, называются выровненными. Большинство компиляторов генерируют код, в котором предусмотрено выравнивание чисел в памяти,

2.5 Символьная информация

В общем объеме вычислительных действий все большая доля приходится на обработку символьной информации, содержащей буквы, цифры, знаки препинания, математические и другие символы. Каждому символу ставится в соответствие определенная двоичная комбинация. Совокупность возможных символов и назначенных им двоичных кодов образует таблицу кодировки. В настоящее время применяется множество различных таблиц кодировки. Объединяет их весовой принцип, при котором коды цифр возрастают по мере увеличения цифры, а коды символов увеличиваются в алфавитном порядке. Так код буквы «Б» на единицу больше кода буквы «А». Это способствует упрощению обработки в ЭВМ.

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

расширенный двоично-кодированный код EBCDIC (Extended Binary Coded Decimal Interchange Code);

 американский стандартный код для обмена информацией ASCII (American ' Standard Code for Information Interchange).

 Код EBCDIC используется в качестве внутреннего кода в универсальных ЭВМ фирмы IBM. Он же известен под названием ДКОИ (двоичный код для обработки информации).

Стандартный код ASCII – 7-разрядный, восьмая позиция отводится для записи бита четности. Это обеспечивает представление 128 символов, включая все латинские буквы, цифры, знаки основных математических операций и знаки пунктуации. Позже появилась европейская модификация ASCII, называемая Latin 1 (стандарт ISO 8859-1). В ней «полезно» используются все 8 разрядов. Дополнительные комбинации (коды 128-255) в новом варианте отводятся для представления специфических букв алфавитов западноевропейских языков, символов псевдографики, некоторых букв греческого алфавита, а также ряда математических и финансовых символов. Именно эта кодовая таблица считается мировым стандартом де-факто, который применяется с различными модификациями во всех странах.

Хотя код ASCII достаточно удобен, он все же слишком тесен и не вмещает множества необходимых символов. По этой причине в 1993 году консорциумом компаний Apple Computer, Microsoft, Hewlett-Packard, DEC и IBM был разработан 16-битовый стандарт ISO 10646, определяющий универсальный набор символов (UCS, Universal Character Set). Новый код, известный под названием Unicode, позволяет задать до 65536 символов, то есть дает возможность одновременно представить символы всех основных «живых» и «мертвых» языков. Для букв русского языка выделены коды 1040-1093.

В «естественном» варианте кодировки Unicode, известном как UCS-2, каждый символ описывается двумя последовательными байтами т и n, так что номеру символа соответствует численное значение 256*т + п. Таким образом, кодовый номер представлен 16-разрядным двоичным числом.

Наряду с UCS-2 в рамках Unicode существуют еще несколько вариантов кодировки Unicode (UTF, Unicode Transformation Formats), основные из которых UTF-8 и UTF-7. В кодировке UTF-8 коды символов меньшие, чем 128, представляются одним байтом. Все остальные коды формируются по более сложным правилам. В зависимости от символа его код может занимать от двух до шести байтов, причем старший бит каждого байта всегда имеет единичное значение. Иными словами, значение байта лежит в диапазоне от 128 до 255. Ноль в старшем бите байта означает, что код занимает один байт и совпадает по кодировке с ASCII.

В UTF-7 код символа также может занимать один или более байтов, однако в каждом из байтов значение не превышает 127 (старший бит байта содержит ноль). Многие символы кодируются одним байтом, и их кодировка совпадает с ASCII, однако некоторые коды зарезервированы для использования в качестве преамбулы, характеризующей последующие байты многобайтового кода.

Стандарт Unicode обратно совместим с кодировкой ASCII, однако если в ASCII для представления схожих по виду символов (минус, тире, знак переноса) применялся общий код, в Unicode каждый из этих символов имеет уникальную кодировку. Впервые Unicode был использован в операционной системе Windows NT.

Параллельно с развитием Unicode исследовательская группа ISO проводит работы над 32-битовой кодовой таблицей, однако ввиду широкой распространенности кодировки Unicode дальнейшие перспективы новой разработки представляются неопределенными.

^ 2.6 Логические данные и строки

Элементом логических данных является логическая (булева) переменная, которая может принимать лишь два значения: «истина» или «ложь». Кодирование логического значения принято осуществлять битом информации: единицей кодируют истинное значение, нулем — ложное. Как правило, в ЭВМ оперируют наборами логических переменных длиной в машинное слово. Обрабатываются такие слова с помощью команд логических операций (И, ИЛИ, НЕ и т. д.), при этом все биты обрабатываются одинаково, но независимо друг от друга, то есть никаких переносов между разрядами не возникает.

^ Строки — это непрерывная последовательность битов, байтов, слов или двойных слов. Битовая строка может начинаться в любой позиции байта и содержать до 232 бит. Байтовая строка может состоять из байтов, слов или двойных слов. Длина такой строки варьируется от нуля до (232 – 1) байт (4 Гбайт). Приведенные цифры характерны для превалирующих в настоящее время 32-разрядных ЭВМ.

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

^ 2.7 Прочие виды информации

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

2.7.1 Видеоинформация

Видеоинформация бывает как статической, так и динамической. ^ Статическая видеоинформация включает в себя текст, рисунки, графики, чертежи, таблицы и др. Рисунки делятся также на плоские – двумерные и объемные – трехмерные.

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

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

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

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

Векторное представление, в отличие от матричной графики, определяет описание изображения не пикселями, а кривыми – сплайнами. Сплайн - это гладкая кривая, которая проходит через две или более опорные точки, управляющие формой сплайна. В векторной графике наиболее распространены сплайны на основе кривых Безье, Суть сплайна: любую элементарную кривую можно построить, зная четыре коэффициента Р0, Р1, Р2 и Р3, соответствующие четырем точкам на плоскости. Перемещение этих точек влечет за собой изменение формы кривой, как показано на рисунке 2.23.

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

Основное достоинство векторной графики состоит в том, что описание объекта является простым и занимает мало памяти. Кроме того, векторная графика в сравнении с матричной имеет следующие преимущества:

простота масштабирования изображения без ухудшения его качества;

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

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

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

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

2.7.2 Аудиоинформация

Понятие аудио связано со звуками, которые способно воспринимать человеческое ухо. Частоты аудиосигналов лежат в диапазоне от 15 Гц до 20 КГц, а сигналы по своей природе являются непрерывными (аналоговыми). Прежде чем быть представленной в ЭВМ, аудиоинформация должна быть преобразована в цифровую форму (оцифрована). Для этого значения звуковых сигналов (выборки, samples), взятые через малые промежутки времени, с помощью аналого-цифровых преобразователей (АЦП) переводятся в двоичный код. Обратное действие выполняется цифро-аналоговыми преобразователями (ЦАП). Чем чаще производятся выборки, тем выше может быть точность последующего воспроизведения исходного сигнала, но тем большая емкость памяти требуется для хранения оцифрованного звука.

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

2.8 Типы и форматы команд

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

команды пересылки данных;

команды арифметической и логической обработки;

команды работы со строками;

команды SIMD;

команды преобразования;

команды ввода/вывода;

команды управления потоком команд.

^ 2.8.1 Команды пересылки данных

Это наиболее распространенный тип машинных команд. В таких командах должна содержаться следующая информация:

адреса источника и получателя операндов – адреса ячеек памяти, номера регистров процессора или информация о том, что операнды расположены в стеке;

длина подлежащих пересылке данных (обычно в байтах или словах), заданная явно или косвенно;

способ адресации каждого из операндов, с помощью которого содержимое адресной части команды может быть пересчитано в физический адрес операнда.

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

^  2.8.2 Команды арифметической и логической обработки

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

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

Z (Zero) — нулевой результат;

N (Negative) — отрицательный результат;

V (oVerflow) — переполнение разрядной сетки;

С (Carry) — наличие переноса.

К стандартному набору операций над целыми числами, представленными в форме с фиксированной запятой, следует отнести:

двухместные арифметические операции (операции с двумя операндами): сложение, вычитание, умножение и деление;

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

операции сравнения, обеспечивающие сравнение двух целых чисел и выработку признаков, характеризующих соотношение между сопоставляемыми величинами (=, <>, >, <, <=, >=).

Часто этот перечень дополняют такими операциями, как вычисление остатка от целочисленного деления, сложение с учетом переноса, вычитание с учетом заема, увеличение значения операнда на единицу (инкремент), уменьшение значения операнда на единицу (декремент).

Отметим, что выполнение арифметических команд может дополнительно сопровождаться перемещением данных из устройства ввода в АЛУ или из АЛУ на устройство вывода.

Для работы с числами, представленными в форме с плавающей запятой, в АСК большинства машин предусмотрены:

основные арифметические операции;

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

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

Стандартная система команд ЭВМ содержит команды для выполнения различных логических операций над отдельными битами слов или других адресуемых единиц. Такие команды предназначены для обработки символьных и логических данных. Минимальный набор поддерживаемых логических операций — это «НЕ», «И», «ИЛИ» и сложение по модулю 2.

В дополнение к побитовым логическим операциям, практически во всех АСК предусмотрены команды для реализации операций логического, арифметического и циклического сдвигов.

При логическом сдвиге влево или вправо сдвигаются все разряды слова. Биты, вышедшие за пределы разрядной сетки, теряются, а освободившиеся позиции заполняются нулями.

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

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

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

^ Команды преобразования осуществляют изменение формата представления данных. Примером может служить преобразование из десятичной системы счисления в двоичную или перевод 8-разрядного кода символа из кодировки ASCII в кодировку EBCDIC, и наоборот.

2.8.3 SIMD-команды

Название данного типа команд представляет собой аббревиатуру от Single Instruction Multiple Data — буквально «одна инструкция — много данных». В отличие от обычных команд, оперирующих двумя числами, SIMD-команды обрабатывают сразу две группы чисел (в принципе их можно называть групповыми командами). Операнды таких команд обычно представлены в одном из упакованных форматов.

Идея SIMD-обработки была выдвинута в Институте точной механики и вычислительной техники им. С.А. Лебедева в 1978 году в рамках проекта «Эльбрус-1». С 1992 года команды типа SIMD становятся неотъемлемым элементом АСК микропроцессоров фирм Intel и AMD, Поводом послужило широкое распространение мультимедийных приложений. Видео, трехмерная графика и звук в ЭВМ представляются большими массивами данных, элементы которых чаше всего обрабатываются идентично. Так, при сжатии видео и преобразовании его в формат MPEG один и тот же алгоритм применяется к тысячам битов данных. В трехмерной графике часто встречаются операции, которые можно выполнить за один такт: интерполирование и нормировка векторов, вычисление скалярного произведения векторов, интерполяция компонентов цвета и т. д. Включение SIMD-команд в АСК позволяет существенно ускорить подобные вычисления.

Первой на мультимедийный бум отреагировала фирма Intel, добавив в систему команд своего микропроцессора Pentium ММХ 57 SIMD-команд. Название МMX (MultiMedia eXtention – мультимедийное расширение) разработчики обосновывали тем, что при выборе состава новых команд были проанализированы алгоритмы, применяемые в различных мультимедийных приложениях. Команды ММХ обеспечивали параллельную обработку упакованных целых чисел. При выполнении арифметических операций каждое из чисел, входящих в группу, рассматривается как самостоятельное, без связи с соседними числами. Учитывая специфику обрабатываемой информации, команды ММХ реализуют так называемую арифметику с насыщением: если в результате сложения образуется число, выходящее за пределы отведенных под него позиций, оно заменяется наибольшим двоичным числом, которое в эти позиции вмещается.

Следующим шагом стало создание новых наборов SIMD-команд, работающих также с операндами, представленными в виде упакованных чисел с плавающей запятой. Такие команды в соответствующих приложениях повышают производительность процессора примерно вдвое. Первой подобную технологию в середине 1998 года предложила фирма AMD. Это мультимедийное расширение включало в себя 21 SIMD-команду и получило название 3DNow!. Расширение 3DNow! в дополнение к SIMD-обработке целочисленной информации типа ММХ позволяло оперировать парой упакованных чисел в формате с плавающей запятой.

Полугодом позже фирма Intel ввела в свои микропроцессоры так называемые потоковые SIMD-команды, обозначив их аббревиатурой SSE — Streaming SIMD Extension (потоковая обработка по принципу «одна команда — много данных»). Сначала это были 70 команд в микропроцессоре Pentium III. Команды дополняли групповые целочисленные операции МMX и расширяли их за счет групповых операций с 32-разрядными вещественными числами.

^ 2.8.4 Команды ввода/вывода

Команды этой группы могут быть подразделены на команды управления периферийным устройством (ПУ), проверки его состояния, ввода и вывода.

Команды управления периферийным устройством служат для запуска ПУ и указания ему требуемого действия. Трактовка подобных инструкций зависит от типа ПУ.

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

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

^ 2.8.5 Команды управления системой

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

^ 2.8.6 Команды управления потоком команд

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

В системе команд ЭВМ можно выделить три типа команд, способных изменить последовательность вычислений:

безусловные переходы;

условные переходы (ветвления);

вызовы процедур и возвраты из процедур.

Несмотря на то что присутствие в программе большого числа команд безусловного перехода считается признаком плохого стиля программирования, такие команды обязательно входят в АСК любой ЭВМ. Для их обозначения в языке ассемблера обычно используется английское слово jump (прыжок). Команда безусловного перехода обеспечивает переход по заданному адресу без проверки каких-либо условий.

^ Условный переход происходит только при соблюдении определенного условия, в противном случае выполняется следующая по порядку команда программы. Большинство производителей ЭВМ в своих ассемблерах обозначают подобные команды словом branch (ветвление). Условием, на основании которого осуществляется переход, чаще всего выступают признаки результата предшествующей арифметической или логической операции. Каждый из признаков фиксируется в своем разряде регистра флагов процессора. Возможен и иной подход, когда решение о переходе принимается в зависимости от состояния одного из регистров общего назначения, куда предварительно помещается результат операции сравнения. Третий вариант — это объединение операций сравнения и перехода в одной команде.

В системе команд ЭВМ для каждого признака результата предусматривается своя команда ветвления (иногда — две: переход при наличии признака и переход при его отсутствии). Большая часть условных переходов связана с проверкой взаимного соотношения двух величин или с равенством (неравенством) некоторой величины нулю. Последний вид проверок используется в программах наиболее интенсивно.

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

^ 2.8.7 Форматы команд

Типовая команда, в общем случае, должка указывать:

подлежащую выполнению операцию;

адреса исходных данных (операндов), над которыми выполняется операция;

адрес, по которому должен быть помещен результат операции.

В соответствии с этим команда состоит из двух частей: операционной и адресной, как показано на рисунке 2.24.

Рисунок 2.24 – Структура машинной команды

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

общее число различных команд;

общую длину команды;

тип полей команды (фиксированной или переменной длины) и их длина;

простоту декодирования;

адресуемость и способы адресации;

стоимость оборудования для декодирования и исполнения команд.

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

В рамках системы команд одной ЭВМ могут использоваться разные форматы команд. Обычно это связано с применением различных способов адресации. В таком случае операционная часть команды содержит поле кода операции (КОп) и поле для задания способа адресации (СА).

Общая длина команды RK может быть определена следующим соотношением:

,

где l – количество адресов в команде; RAi – количество разрядов для записи i-го адреса; RКОп – разрядность поля кода операции; RСА – разрядность поля способа адресации.

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

RКОп = int(log2(NКОп)),

где int означает округление в большую сторону до целого числа.

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

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

Разрядности полей и рассчитываются по формулам:

RAi = int(log2(Ni)), RCA = int(log2(NCA)),

где Ni, – количество ячеек памяти, к которому можно обратиться с помощью i-ro адреса; NСА – количество способов адресации.

Для определения количества адресов, включаемых в адресную часть, будем использовать термин адресность. В «максимальном» варианте необходимо указать три компонента: адрес первого операнда, адрес второго операнда и адрес ячейки, куда заносится результат операции. В принципе может быть добавлен еще один адрес, указывающий место хранения следующей инструкции. В итоге имеет место четырехадресный формат команды. Такой формат представлен на рисунке 2.25.

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

К сожалению, и в трехадресном формате длина команды может оказаться весьма большой. Так, если адрес ячейки основной памяти имеет длину 32 бита, а длина кода операции – 8 бит, то длина команды составит 104 бита (13 байт).

Рисунок 2.25 – Четырехадресный формат команды

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

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

Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры ЦП. Так как число регистров к ЦП невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата.

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

При выборе количества адресов в адресной части команды обычно руководствуются следующими критериями:

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

временем выполнения программы;

эффективностью использования ячеек памяти при хранении программы.

Время выполнения одной команды складывается из времени выполнения операции и времени обращения к памяти. Для трехадресной команды последнее суммируется из четырех составляющих времени:

выборки команды;

выборки первого операнда;

выборки второго операнда;

Одноадресная команда требует двух обращений к памяти:

выборки команды;

выборки операнда.

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

2.9 Способы адресации операндов

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

Приступая к рассмотрению способов адресации, вначале определим понятия «исполнительный» и «адресный кол».

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

^ Адресный код команды (АК) — это двоичный код в адресном поле команды, из которого необходимо сформировать исполнительный адрес операнда,

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

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

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

С = СВА + СЗУ,

где СВА – затраты аппаратных средств, обеспечивающих вычисление исполнительных адресов; СЗУ – затраты памяти на хранение адресных кодов команд. Обычно СЗУ >> СВА , поэтому при оценке затрат оборудования ограничиваются учетом величины СЗУ. Затраты времени Т определяются суммой времени tФИА формирования исполнительного адреса и времени tЗУ выборки или записи операнда:

T = tФИА + tЗУ.

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

^ 2.9.1 Непосредственная и прямая адресации

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

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

Непосредственная адресация сокращает время выполнения команды, так как не требуется обращение к памяти за операндом. Кроме того, экономится память, поскольку отпадает необходимость в ячейке для хранения операнда. В плане эффективности этот способ можно считать «идеальным» (СНА = 0, ТНА = 0), и его можно рекомендовать к использованию во всех ситуациях, когда тому не препятствуют вышеупомянутые ограничения.

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

При всей простоте использования способ имеет существенный недостаток – ограниченный размер адресного пространства, так как для адресации к памяти большой емкости нужно «длинное» адресное поле. Однако более существенным несовершенством можно считать то, что адрес, указанный в команде, не может быть изменен в процессе вычислений. Это ограничивает возможности по произвольному размещению программы в памяти.

Прямую адресацию характеризуют следующие показатели эффективности СПА = int(log2(Ni)), TПА = tЗУ, где Ni – количество адресуемых операндов.

^  2.9.2 Косвенная адресация

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

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

Недостатком косвенной адресации является необходимость в двукратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду (TКА =2* tЗУ). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда.

^ 2.9.3 Регистровая адресация

Регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора. Идентификатор регистра в дальнейшем будем обозначать буквой R. Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один па 8 или 16 регистров общего назначения (РОН).

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

^ 2.9.4 Косвенная регистровая адресация

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

Рисунок 2.26 – Косвенная регистровая адресация

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

^ 2.9.5 Адресация со смещением

При адресации со смешением исполнительный адрес формируется в результате суммирования содержимого адресного поля команды с содержимым одного или нескольких регистров процессора.

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

Если же составляющая адреса может располагаться в произвольном регистре общего назначения, то для указания конкретного регистра в команду включается дополнительное поле R (при составлении адреса более чем из двух составляющих в команде будет несколько таких полей). Еще одно поле Я может появиться в командах, где смещение перед вычислением исполнительного адреса умножается на масштабный коэффициент. Такой коэффициент заносится в один из РОН, на который и указывает это дополнительное поле. В наиболее общем случае адресация со смещением подразумевает наличие двух адресных полей: Ак и R. Общая схема адресации со смещением представлена на рисунке 2.26.

Рисунок 2.26 –Адресация со смещением

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

Ниже рассматриваются основные способы адресации со смещением, каждый из которых, впрочем, имеет собственное название.

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

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

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

^ 2.9.7 Базовая регистровая адресация

В случае базовой регистровой адресации (БРА) регистр, называемый базовым, содержит полноразрядный адрес, а подполе АС, - смешение относительно этого адреса. Ссылка на базовый регистр может быть явной или неявной. В некоторых ЭВМ имеется специальным базовый регистр и его использование является неявным, то есть подполе R в команде отсутствует.

Более типичен случаи, когда в роли базового регистра выступает один из регистров общего назначения, тогда его номер явно указывается в подполе R команды.

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

^ 2.9.8 Индексная адресация

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

Индексная адресация предоставляет удобный механизм для организации итеративных вычислении. Пусть, например, имеется массив чисел, расположенных и памяти последовательно, начиная с адреса N и мы хотим увеличить на единицу все элементы данного массива. Для этого требуется извлечь каждое число из памяти, прибавить к нему 1 и вернуть обратно, а последовательность исполнительных адресов будет следующей: N, N+1, N+2,..., вплоть до последней ячейки, занимаемой рассматриваемым массивом. Значение N берется из подполя АС команды, а и выбранный регистр, насыпаемый индексным регистром, сначала заносится 0. После каждой операции содержимое индексного регистра увеличивается на 1.

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

Автоиндексирование с увеличением содержимого индексного регистра носит название автоинкрементной адресации и может быть описано следующим образом:

АИСП = АС + (R),  или , АИСП = АС + (R).

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

Аналогично реализуется автоиндексирование с уменьшением содержимого индексного регистра. Оно носит название автодекрементной адресации. Здесь также возможны два варианта, отличающиеся последовательностью выполнения операции уменьшения содержимого индексного регистра и вычисления исполнительного адреса; постдекрементное автоиндексирование и предекрементное автоиндексирование

Интересным и весьма полезным является еще один вариант индексной адресации — индексная адресация с масштабированием и смещением: содержимое индексного регистра умножается на масштабный коэффициент и суммируется с АС. Масштабным коэффициент может принимать значения 1, 2, 4 или 8. для чего в адресной части команды выделяется дополнительное поле. Описанный способ адресации реализован, например, в микропроцессорах фирмы Intel.

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

^ 2.9.9 Страничная адресация

Страничная адресация (СТА) предполагает разбиение адресного пространства на страницы. Страница определяется своим начальным адресом, выступающим в качестве базы. Старшая часть этого адреса хранится в специальном регистре — регистре адреса страницы (РАС). В адресном коде команды указывается смещение внутри страницы, рассматриваемое как младшая часть исполнительного адреса. Исполнительный адрес образуется конкатенацией (присоединением) АС к содержимому РАС.

^ 2.9.10 Блочная адресация

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

^ 2.9.11 Использование видов адресации

Частота использования различных способов адресации существенно зависит от типа АСК. Для машин со стековой архитектурой очевидно, что основным способам адресации является стековая адресация. Для ЭВМ с аккумуляторной АСК главные способы адресации – это прямая и непосредственная.

Достаточно ясна и ситуация с RISC-архитектурой. Из самой идеи этого подхода вытекает, что преимущественный способ адресации здесь – регистровая адресация.

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

Основными способами адресации в командах управления потоком команд являются прямая и относительная.

Для команд безусловного и условного перехода (ветвления) наиболее типична относительная адресация, когда в адресной части команды указывается смещение адреса точки перехода относительно текущей команды, то есть смещение относительно текущего содержимого счетчика команд. Использование данного способа адресации позволяет программе выполняется в любом месте памяти – программы становятся перемещаемыми. Среди команд безусловного перехода доля относительной адресации составляет около 90%

2.10 Система операций

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

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

Обоснованный выбор системы операции (СО) возможен лишь исходя из анализа подлежащих реализации алгоритмов. Для этого определяется частотный вектор используемых в алгоритме операторов (q1, …, qn). Изучив вектор, составляют список основных, наиболее часто встречающихся операторов. Операторы основного списка реализуются системой машинных операций ЭВМ (каждому оператору сопоставляется своя машинная операция). Остальные операторы получают путем их разложения на операторы основного списка,

^ 2.10.1 Показатели эффективности системы операций

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

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

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

Затраты оборудования ^ С можно описать выражением

С = СПР + СЗУ,

где СПР – затраты в процессоре на реализацию системы операции. СЗУ – затраты памяти на размещение данных и программ, представляющих алгоритм в терминах заданной системы операции.

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

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

^  3 ОСНОВЫ ОРГАНИЗАЦИИ ЭВМ

3.1 Основные понятия

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

Дать определение такому явлению, как ЭВМ, представляется сложным. Достаточно сказать, что само по себе название ЭВМ, т.е. электронные вычислительные машины, не отражает полностью сущность концепции. Слово «электронные» подразумевало электронные лампы в качестве элементной базы, современные ЭВМ правильнее следовало бы называть микроэлектронными. Слово «вычислительный» подразумевает, что устройство предназначено для проведения вычислений, однако анализ программ показывает, что современные ЭВМ не более 10 - 15% времени тратят на чисто вычислительную работу — сложение, вычитание, умножение и т.д. Основное время затрачивается на выполнение операций пересылки данных, сравнения, ввода-вывода и т.д. То же самое относится и к англоязычному термину «компьютер», т.е. «вычислитель». К понятию ЭВМ можно подходить с нескольких точек зрения.

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

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

^ 3.2 Информационная модель ЭВМ

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

хранение двоичной информации;

передача от одного хранилища к другому;

преобразование.

ЭВМ можно представить как совокупность N узлов (У), соединенных каналами связи, как показано на рисунке 3.1. Узлы соединяют в себе функции хранения и преобразования. По каналам связи передается информация от узла к узлу. Мы будем говорить о потоках информации в каналах связи. Некоторые узлы могут иметь специальную функцию ввода информации в систему и вывода из нее.

Показанная на рисунке 3.1 модель не имеет ограничений на связи между отдельными узлами. Реализовать такую систему весьма сложно. Реально существующие системы имеют ряд ограничений на связи и четкое функциональное назначение отдельных узлов Функции отдельного узла могут зависеть от его состояния. Состояние узла описывается значениями его внутренних полей (регистров), может определяться процессом его функционирования или задаваться извне. Состояние узла будем называть его режимом Физически режим может определяться значением регистра узла Тогда установить режим узла означает присвоить регистру определенное значение.

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

Информационная модель позволяет определить основные характеристики ЭВМ.

1) Узлы хранения имеют:

вместимость – максимальную, среднюю или минимальную;

скорость выборки;

разрядность выборки.

2) Преобразующие узлы имеют скорость преобразования.

3) Каналы определяются:

скоростью передачи информации (пропускная способность);

разрядностью передачи.

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

с шинной организацией;

специализированные процессоры (каналы);

схемы с коммутацией;

архитектуры с распределенными функциями (распределенный интеллект);

с конвейерной организацией.

Рассмотрим некоторые частные модели ЭВМ, имеющие широкое распространение или представляющие теоретический интерес.

^ 3.2.1. Шинная организация.

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

^ 3.2.2 Канальная организация.

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

^  3.2.3 Организация с перекрестной коммутацией.

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

^ 3.2.4 Архитектура с распределенными функциями.

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

^ 3.2.5 Конвейерная организация.

Здесь обрабатывающее устройство разделяется на последовательно включенные операционные блоки, каждый из которых специализирован на выполнение строго определенной части операции. При этом работа осуществляется следующим образом: когда i-ый операционный блок выполняет i-ую часть j-ой операции, (i - 1)-ый операционный блок выполняет (i - 1)-ую часть (j + 1)-й операции, а (i + 1)-ый операционный блок выполняет (i + 1)-ую часть (j - 1)-ой операции. В результате образуется своего рода конвейер обработки и за счет этого повышается производительность системы.
3.3 Принципы Джона фон Неймана.

Большинство современных ЭВМ строится на базе принципов, сформулированных американским ученым, одним из «отцов» кибернетики ^ Дж. фон Нейманом. Впервые эти принципы были опубликованы фон Нейманом в 1945 г. в его предложениях по машине EDVAC. Эта ЭВМ была одной из первых машин с хранимой программой, т.е. с программой, запомненной в памяти машины, а не считываемой с перфокарты или другого подобного устройства.

В целом эти принципы фон Неймана сводятся к следующему:

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

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

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

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

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

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

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

^ 3.4 Основные компоненты ЭВМ

Центральный процессор (ЦП) (Central Processing Unit – CPU) – функциональная часть ЭВМ, выполняющая основные операции по обработке данных и управлению работой других блоков. Это наиболее сложный компонент ЭВМ как с точки зрения электроники, так и с точки зрения функциональных возможностей. Центральный процессор состоит из следующих взаимосвязанных составных элементов:

арифметико-логического устройства;

устройства управления;

регистров.

^ 3.4.1 Арифметико-логическое устройство (АЛУ)

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

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

АЛУ содержит в своем составе устройство, хранящее характеристику результата выполнения операции над данными и называемое флаговым регистром или регистром флагов. Отдельные разряды этого регистра указывают на равенство результата операции нулю, знак результата операции (+ или —), правильность выполнения операции (наличие переноса за пределы разрядной сетки или переполнения). Программный анализ флагов позволяет производить операции ветвления программы в зависимости от конкретных значений данных.

3.4.2 Регистры

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

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

^ Регистр данных — служит для временного хранения промежуточных результатов при выполнении операций.

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

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

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

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

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

Кроме перечисленных регистров в состав АЛУ могут входить внутренние системные регистры, не доступные программно и используемые во время внутренних пересылок информации при выполнении команд.

^  3.4.3 Устройство управления (УУ)

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

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

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

В простейшем случае УУ имеет в своем составе три устройства:

регистр команды, который содержит код команды (КОП) во время ее выполнения;

программный счетчик, в котором содержится адрес очередной подлежащей выполнению команды;

регистр адреса, в котором вычисляются адреса операндов, находящихся в памяти.

3.4.4 Память

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

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

В большинстве современных ЭВМ минимально адресуемым элементом памяти является байт — поле из 8 бит.

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

^ 3.4.5 Оперативная память (ОП)

ОП – это функциональный блок, хранящий информацию для УУ (команды) и АЛУ (данные). Задачи, решаемые с помощью ЭВМ, требуют хранения в памяти различного количества информации, зависящего от сложности реализуемого алгоритма, количества исходных данных и т.п. Поэтому память должна вмещать достаточно большое количество информации, т.е. должна иметь большую емкость.

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

Т а б л и ц а 3.1 – Основные параметры устройств памяти

Устройства памяти

Время доступа, с

Ёмкость, бит

Регистры

(2 - 20)∙10-9

103 - 104

Оперативная память

(0.2 - 20)∙10-6

106 - 109

Внешняя память

(10 - 100)∙10-3

1011 - 1013

Оперативная память собирается на ферритовых сердечниках или полупроводниковых микросхемах и состоит из отдельных ячеек.

^ 3.4.6 Периферийные устройства (ПУ)

В их число входят устройства двух типов:

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

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

Обмен данными с внешним устройством осуществляется через порты ввода-вывода. Порт (в переводе с английского, port — ворота, дверь, отверстие) – это абстрактное понятие, на самом деле несуществующее. По аналогии с ячейками памяти порты можно рассматривать как ячейки, через которые можно записать в ПУ, или, наоборот — прочитать из него. Так же как и ячейки памяти, порты имеют уникальные номера — адреса портов ввода-вывода.

4 ЭВМ фон НЕЙМАНА

4.1 ЭВМ с шинной организацией

Шинная организация является простейшей формой организации ЭВМ. В соответствии с приведенными выше принципами фон-Неймана подобная ЭВМ имеет в своем составе функциональные блоки, показанные на рисунке 4.1.

^ 4.1.1 Система шин

Объединение функциональных блоков в ЭВМ с шинной архитектурой осуществляется посредством следующей системы шин:

шины данных, по которой осуществляется обмен информацией между блоками ЭВМ;

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

шины управления для передачи управляющих сигналов.

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

Шина состоит из отдельных проводников (линий). Сигналы по линиям шины могут передаваться либо импульсами (наличие импульса соответствует логической 1, а отсутствие импульса — 0), либо уровнем напряжения (например, высокий уровень — логическая 1 , низкий — 0).

^ Шириной шины называется количество линий (проводников), входящих в состав шины. Ширина шины адреса определяет размер адресного пространства ЭВМ. Если, например, количество линий адреса, используемых для адресации памяти, равно 20, то общее количество адресуемых ячеек памяти составит 220, т.е. примерно, один миллион ячеек (точнее, 1 048 576 ячеек).

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

Из управляющих линий выделим следующие.

^ Линии занятости. Если она в состоянии «шина свободна», любо задатчик, включая процесс, может начать операцию обмена данным на шине, иначе задатчику придется ожидать, пока шина не освободится.

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

чтение (задатчик принимает данные от исполнителя);

запись (задатчик передает данные исполнителю).

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

^ 4.1.2 Алгоритмы функционирования ЭВМ с шинной архитектурой

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

П

ри операции записи в память процессору необходимо выполнить следующие действия. Шина переводится в состояние занято, адрес требуемой ячейки памяти помещается на шину адреса. Данные, которые необходимо записать в память, помещаются на шину данных. На шине управления устанавливается сигнал запись, выдается сигнал синхронизации задатчика. Память принимает адрес, дешифрирует его, помещает в соответствующую ячейку данные с шины и выдает сигнал синхронизации исполнителя. Получив ответ от памяти, процессор снимает управляющие сигналы и освобождает шину. Такой способ обмена данными называется асинхронным ответом , а сама операция запроса — подтверждения носит название квитирования или рукопожатия (handshake) и широко применяется при построении системы шин различного назначения в разных АРМ.

Функционирование ЭВМ с шинной структурой можно описать алгоритмом, представленным на рисунке 4.3.

1) Инициализация. После включения ЭВМ или операции сброса в регистры центрального процессора заносятся некоторые начальные значения. Обычно в процессе инициализации в память ЭВМ помещается программа, называемая первичным загрузчиком. Основное назначение первичного загрузчика — загрузить в память с устройства внешней памяти операционную систему. Эта программа может быть размещена в энергонезависимом устройстве памяти или автоматически считываться с некоторого устройства внешней памяти. Мы не будем здесь подробно останавливаться на механизмах загрузки операционной системы, тем более что они могут существенно различаться для разных типов ЭВМ. Пока будем полагать, что в памяти некоторым образом оказалась первая из подлежащих выполнению программ. Программному счетчику присваивается начальное значение, равное адресу первой команды программы, указанной выше.

2) Центральный процессор производит операцию считывания команды из памяти. В качестве адреса ячейки памяти используется содержимое программного счетчика.

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

4) По адресным полям команды устройство управления определяет, имеет ли команда операнды в памяти. Если это так, то на основе указанных в адресных полях режимов адресации вычисляются адреса операндов и производятся операции чтения памяти для считывания операндов.

5) Устройство управления и арифметико-логическое устройство выполняют операцию, указанную в поле кода операции команды. Во флаговом регистре процессора запоминаются признаки результата операции (равно нулю или нет, знак результата, наличие переполнения и т.д.).

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

7) Если последняя команда не была командой ОСТАНОВИТЬ ПРОЦЕССОР, то описанная последовательность действий повторяется, начиная с шага 1.

Описанная последовательность действий центрального процессора с шага 1 до шага 6 называется циклом процессора.

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

4.2 ЭВМ с канальной организацией

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

Все фон-неймановские ЭВМ очень похожи друг на друга и алгоритм функционирования центрального процессора по сути ничем не отличается от описанного в разделе 3.

4.2.1 Каналы

Помимо уже знакомого набора устройств (центральный процессор, память, устройства ввода-вывода) в состав ЭВМ с канальной организацией входят устройства, называемые каналами.

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

Устройства группируются по характерной скорости и подключаются к соответствующим каналам. «Быстрые» устройства (например, накопители на магнитных дисках) подсоединяются к селекторным каналам. Такое устройство получает селекторный канал в монопольное использование на все время выполнения операции обмена данными.

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

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

За счет существенного усложнения организации ЭВМ упрощается архитектура ввода-вывода. Связь между отдельными узлами осуществляется по схеме, напоминающей треугольник. Операции обмена данными становятся более простыми. Канал, по сути, представляет собой специализированный «интеллектуальный» контроллер прямого доступа к оперативной памяти. Для ускорения обмена данными реализованы несколько трактов обмена данными (процессор — основная память и каналы — основная память).

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

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

^ 4.2.2 Канальные программы

Канал, являясь хотя и специализированным, но все-таки процессором, выполняет свою канальную программу. Она состоит из канальных команд и хранится в оперативной памяти. Длина канальной программы произвольна, последняя команда канальной программы содержит признак конца. Подготовку канальной программы и загрузку ее в оперативную память осуществляет операционная система. После того как канальная программа подготовлена, адрес ее начала размещается в фиксированной ячейке памяти, называемой словом адреса канала CAW (Chanel Adress Word).

Для управления каналами процессор имеет всего несколько команд. Операция обмена данными инициируется центральным процессором с помощью команды НАЧАТЬ ВВОД-ВЫВОД (Start Input — Output): SIO M, N.

Операндами команды являются: М – номер канала и N — номер устройства в канале. Выдав команду запуска обмена, процессор, не обращая внимания на обменный процесс, продолжает выполнять свою программу.

Центральный процессор может проверить состояние канала с помощью команды ОПРОСИТЬ ВВОД-ВЫВОД (Test Input — Output): TIO.

Команда SIO M,N передается во все каналы, но воспринимает ее только канал М. Если канал занят, то он устанавливает соответствующее состояние своих регистров, и процессор по команде TIO может выяснить, что запуск канальной программы не состоялся.

Если канал свободен, он выполняет следующие действия. Во-первых, выбирает из оперативной памяти CAW в свой регистр, во-вторых, передает подключенным к нему устройствам команду SIO. Команда запуска ввода-вывода SIO M,N передается всем устройствам, но воспринимает ее только устройство N. Если устройство занято или не готово, в регистрах канала устанавливается соответствующее состояние и процессор по команде TIO может узнать о том, что операция обмена данными не состоялась.

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

^ 4.2.3 Канальные команды

Канальные команды могут быть подготовительными или командами обмена данными.

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

^ Обменные команды содержат коды операций и адреса оперативной памяти. Обмен происходит по асинхронной схеме по инициативе внешнего устройства. Данные извлекаются из памяти и помещаются в нее напрямую, без посредников.

После выполнения команды канал проверяет в выполненной команде признак конца. Если это не последняя команда, меняется адрес CAW и выбирается следующая команда. Если команда последняя, канал «привлекает к себе внимание» процессора с помощью сигнала прерывания. По сигналу прерывания запускается обработчиком, который является частью операционной системы. Обработчик прерывания выполняет операции, завершающие обмен.

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

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

Одной из первых машин с каналами была ЭВМ второго поколения IBM-704. Ярким примером ЭВМ с каналами являются машины семейства IBM-360/370. Появление этих ЭВМ произвело переворот в вычислительной технике и на долгие годы они стали образцом для подражания у создателей ЭВМ. Хотя в настоящее время эти машины ушли в прошлое, они оставили богатое наследие в виде интересных архитектурных решений, программных и алгоритмических разработок. В настоящее время схемы со специализированными процессорами ввода-вывода часто встречаются в ЭВМ различных типов. Несомненно, идея схемы с каналами не умерла, и к ней еще неоднократно будут возвращаться.

^ 5 ОРГАНИЗАЦИЯ памяти ЭВМ

5.1 Иерархия памяти

В основе иерархии памяти современных компьютеров лежат два принципа:

принцип локальности обращений;

соотношение стоимость/производительность.

Локальность обращений подразделяется на пространственную и временную локальность. ^ Пространственная локальность означает, что после обращения к некоторой ячейке памяти наиболее вероятно, что следующее обращение произойдет к одной из соседних (или близлежащих) ячеек. Временная локальность означает, что в ближайшее после обращения к ячейке памяти время с большой долей вероятности вновь потребуется содержимое этой ячейки.

Иерархия памяти современных компьютеров, представленная на рисунке 5.1, строится на нескольких уровнях, причем более высокий уровень меньше по объему, быстрее и имеет большую стоимость в пересчете на байт, чем более низкий уровень. Такой подход оптимизирует соотношение стоимость/производительность.

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

Уровни памяти, расположенные между регистровой и основной памятью, принято называть кэш-памятью. Блок кэш-памяти называется строкой (line).

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

^ Доля попаданий (hit rate) или коэффициент попаданий (hit ratio) есть доля обращений, найденных на более высоком уровне (часто представляется процентами). Доля промахов (miss rate) есть доля обращений, которые не найдены на более высоком уровне.

Поскольку повышение производительности является главной причиной появления иерархии памяти, доля попаданий и промахов является важной характеристикой. Время обращения при попадании (hit time) есть время обращения к более высокому уровню иерархии, которое включает в себя, в частности, и время, необходимое для определения того, является ли обращение попаданием или промахом. Потери на промах (miss penalty) есть время для замещения блока в более высоком уровне на блок из более низкого уровня плюс время для пересылки этого блока в требуемое устройство (обычно в процессор). Потери на промах включают в себя две компоненты: время доступа (access time) – время обращения к первому слову блока при промахе, и время пересылки (transfer time) – дополнительное время для пересылки оставшихся слов блока. Время доступа связано с задержкой памяти более низкого уровня, в то время как время пересылки связано с полосой пропускания канала между устройствами памяти двух смежных уровней.

Чтобы описать некоторый уровень иерархии памяти надо ответить на следующие четыре вопроса:

1) Где может размещаться блок на верхнем уровне иерархии? (размещение блока).

2) Как найти блок, когда он находится на верхнем уровне? (идентификация блока).

3) Какой блок должен быть замещен в случае промаха? (замещение блоков).

4) Что происходит во время записи? (стратегия записи).

5.2 Организация кэш-памяти

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

Т а б л и ц а 5.1 – Типовые значения ключевых параметров для кэш-памяти

Размер блока (строки)

4-128 байт

Время попадания (hit time)

1-4 такта синхронизации

(обычно 1 такт)

Потери при промахе (miss penalty)

(Время доступа - access time)

(Время пересылки - transfer time)

 8-32 такта синхронизации

(6-10 тактов синхронизации)

(2-22 такта синхронизации)

Доля промахов (miss rate)

1%-20%

Объем кэш-памяти

4 Кбайт - 16 Мбайт

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

^ 5.2.1 Архитектура кэш-памяти

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

1) ^ Кэш с прямым отображением. Если каждый блок основной памяти может быть помещен только в строго определенную для него строку в кэш-памяти, то такая кэш-память называется кэшем с прямым отображением (direct mapped). Это наиболее простая организация кэш-памяти, при которой для отображения адресов блоков основной памяти на адреса кэш-памяти просто используются младшие разряды адреса блока. Таким образом, все блоки основной памяти, имеющие одинаковые младшие разряды в своем адресе, попадают в один блок кэш-памяти, т.е.

(адрес блока кэш-памяти) =

(адрес блока основной памяти) mod (число блоков в кэш-памяти)

2) Если некоторый блок основной памяти может располагаться на любом месте кэш-памяти, то кэш называется полностью ассоциативным (fully associative).

3) Если некоторый блок основной памяти может располагаться на ограниченном множестве мест в кэш-памяти, то кэш называется множественно-ассоциативным (set associative). Обычно множество представляет собой группу из двух или большего числа блоков в кэше. Если множество состоит из n блоков, то такое размещение называется множественно-ассоциативным с n каналами (n-way set associative). Для размещения блока прежде всего необходимо определить множество. Множество определяется младшими разрядами адреса блока памяти (индексом):

(адрес множества кэш-памяти) =

(адрес блока основной памяти) mod (число множеств в кэш-памяти)

Далее, блок может размещаться на любом месте данного множества.

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

^ 5.2.2 Поиск в кэш-паияти

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

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

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

^ 5.2.3 Замещение блоков кэш-памяти

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

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

Во втором случае, чтобы уменьшить вероятность выбрасывания информации, которая скоро может потребоваться, все обращения к блокам фиксируются. Заменяется тот блок, который не использовался дольше всех (LRU - Least-Recently Used).

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

Т а б л и ц а 5.2 – Доли промахов (%) для алгоритмов LRU и Random

Ассоциативность

2-канальная

4-канальная

8-канальная

Размер кэш-памяти

 LRU

Random

LRU

Random

LRU

 Random

16 KB

5.18

5.69

4.67

5.29

4.39

4.96

64 KB

1.88

2.01

1.54

1.66

1.39

1.53

256 KB

1.15

1.17

1.13

1.13

1.12

1.12

^ 5.2.4 Запись в кэш-память

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

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

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

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

сквозная запись (write through, store through) - информация записывается в два места: в блок кэш-памяти и в блок более низкого уровня памяти.

запись с обратным копированием (write back, copy back, store in) - информация записывается только в блок кэш-памяти. Модифицированный блок кэш-памяти записывается в основную память только когда он замещается.

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

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

Когда процессор ожидает завершения записи при выполнении сквозной записи, то говорят, что он приостанавливается для записи (write stall). Общий прием минимизации остановов по записи связан с использованием буфера записи (write buffer), который позволяет процессору продолжить выполнение команд во время обновления содержимого памяти. Следует отметить, что остановы по записи могут возникать и при наличии буфера записи.

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

разместить запись в кэш-памяти (write allocate) (называется также выборкой при записи (fetch on write)). Блок загружается в кэш-память, вслед за чем выполняются действия аналогичные выполняющимся при выполнении записи с попаданием. Это похоже на промах при чтении.

не размещать запись в кэш-памяти (называется также записью в окружение (write around)). Блок модифицируется на более низком уровне и не загружается в кэш-память.

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

^  5.2.5 Производительность кэш-памяти

Формула для среднего времени доступа к памяти в системах с кэш-памятью выглядит следующим образом:

ТСР = ТП + КПР*ТПР,

где ТП – время обращения при попадании, КПР – доля промахов, ТПР – потери при промахе.

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

5.3 Организация основной памяти

5.3.1 Общие положения

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

Задержка памяти традиционно оценивается двумя параметрами: временем доступа (access time) и длительностью цикла памяти (cycle time). Время доступа представляет собой промежуток времени между выдачей запроса на чтение и моментом поступления запрошенного слова из памяти. Длительность цикла памяти определяется минимальным временем между двумя последовательными обращениями к памяти.

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

В процессе развития ДЗУВП с ростом их емкости основным вопросом стоимости таких микросхем был вопрос о количестве адресных линий и стоимости соответствующего корпуса. В те годы было принято решение о необходимости мультиплексирования адресных линий, позволившее сократить наполовину количество контактов корпуса, необходимых для передачи адреса. Поэтому обращение к ДЗУВП обычно происходит в два этапа. Первый этап начинается с выдачи сигнала RAS - row-access strobe (строб адреса строки), который фиксирует в микросхеме поступивший адрес строки. Второй этап включает переключение адреса для указания адреса столбца и подачу сигнала CAS - column-access stobe (строб адреса столбца), который фиксирует этот адрес и разрешает работу выходных буферов микросхемы. Названия этих сигналов связаны с внутренней организацией микросхемы, которая как правило представляет собой прямоугольную матрицу, к элементам которой можно адресоваться с помощью указания адреса строки и адреса столбца.

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

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

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

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

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

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

^  5.3.2 Разрядность основной памяти

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

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

Примером организации широкой основной памяти является система Alpha AXP 21064, в которой кэш второго уровня, шина памяти и сама память имеют разрядность в 256 бит.

^  5.3.3 Память с расслоением

Наличие в системе множества микросхем памяти позволяет использовать потенциальный параллелизм, заложенный в такой организации. Для этого микросхемы памяти часто объединяются в банки или модули, содержащие фиксированное число слов, причем только к одному из этих слов банка возможно обращение в каждый момент времени. Как уже отмечалось, в реальных системах имеющаяся скорость доступа к таким банкам памяти редко оказывается достаточной . Следовательно, чтобы получить большую скорость доступа, нужно осуществлять одновременный доступ ко многим банкам памяти. Одна из общих методик, используемых для этого, называется расслоением памяти. При расслоении банки памяти обычно упорядочиваются так, чтобы N последовательных адресов памяти i, i+1, i+2, ..., i+ N-1 приходились на N различных банков. В i-том банке памяти находятся только слова, адреса которых имеют вид kN + i (где 0 ( k ( M-1, а M число слов в одном банке). Можно достичь в N раз большей скорости доступа к памяти в целом, чем у отдельного ее банка, если обеспечить при каждом доступе обращение к данным в каждом из банков. Имеются разные способы реализации таких расслоенных структур. Большинство из них напоминают конвейеры, обеспечивающие рассылку адресов в различные банки и мультиплексирующие поступающие из банков данные. Таким образом, степень или коэффициент расслоения определяют распределение адресов по банкам памяти. Такие системы оптимизируют обращения по последовательным адресам памяти, что является характерным при подкачке информации в кэш-память при чтении, а также при записи, в случае использования кэш-памятью механизмов обратного копирования. Однако, если требуется доступ к непоследовательно расположенным словам памяти, производительность расслоенной памяти может значительно снижаться.

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

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

Подобные проблемы могут быть решены как программными, так и аппаратными средствами.

^  5.3.4 Динамические ЗУПВ

Как упоминалось раньше, обращение к ДЗУПВ состоит из двух этапов: обращения к строке и обращения к столбцу. При этом внутри микросхемы осуществляется буферизация битов строки, прежде чем происходит обращение к столбцу. Размер строки обычно является корнем квадратным от емкости кристалла памяти: 1024 бита для 1Мбит, 2048 бит для 4 Мбит и т.д. С целью увеличения производительности все современные микросхемы памяти обеспечивают возможность подачи сигналов синхронизации, которые позволяют выполнять последовательные обращения к буферу без дополнительного времени обращения к строке. Имеются три способа подобной оптимизации:

блочный режим (nibble mode) – ДЗУВП может обеспечить выдачу четырех последовательных ячеек для каждого сигнала RAS.

страничный режим (page mode) – буфер работает как статическое ЗУПВ; при изменении адреса столбца возможен доступ к произвольным битам в буфере до тех пор, пока не поступит новое обращение к строке или не наступит время регенерации.

режим статического столбца (static column) – очень похож на страничный режим за исключением того, что не обязательно переключать строб адреса столбца каждый раз для изменения адреса столбца.

Преимуществом такой оптимизации является то, что она основана на внутренних схемах ДЗУПВ и незначительно увеличивает стоимость системы, позволяя практически учетверить пропускную способность памяти. Например, nibble mode был разработан для поддержки режимов, аналогичных расслоению памяти. Кристалл за один раз читает значения четырех бит и подает их наружу в течение четырех оптимизированных циклов. Если время пересылки по шине не превосходит время оптимизированного цикла, единственное усложнение для организации памяти с четырехкратным расслоением заключается в несколько усложненной схеме управления синхросигналами. Страничный режим и режим статического столбца также могут использоваться, обеспечивая даже большую степень расслоения при несколько более сложном управлении. Одной из тенденций в разработке ДЗУПВ является наличие в них буферов с тремя состояниями. Это предполагает, что для реализации традиционного расслоения с большим числом кристаллов памяти в системе должны быть предусмотрены буферные микросхемы для каждого банка памяти.

Новые поколения ДЗУВП разработаны с учетом возможности дальнейшей оптимизации интерфейса между ДЗУПВ и процессором. В качестве примера можно привести изделия компании RAMBUS. Эта компания берет стандартную начинку ДЗУПВ и обеспечивает новый интерфейс, делающий работу отдельной микросхемы более похожей на работу системы памяти, а не на работу отдельного ее компонента. RAMBUS отбросила сигналы RAS/CAS, заменив их шиной, которая допускает выполнение других обращений в интервале между посылкой адреса и приходом данных. (Такого рода шины называются шинами с пакетным переключением (packet-switched bus) или шинами с расщепленными транзакциями (split-traнсaction bus), которые будут рассмотрены в других главах. Такая шина позволяет работать кристаллу как отдельному банку памяти. Кристалл может вернуть переменное количество данных на один запрос и даже самостоятельно выполняет регенерацию. RAMBUS предлагает байтовый интерфейс и сигнал синхронизации, так что микросхема может тесно синхронизироваться с тактовой частотой процессора. После того, как адресный конвейер наполнен, отдельный кристалл может выдавать по байту каждые 2 нсек.

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

^  5.3.5 Концепция виртуальной памяти

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

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

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

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

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

^  5.3.6 Страничная организация памяти

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

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

Для увеличения эффективности такого типа схем в процессорах используется специальная полностью ассоциативная кэш-память, которая также называется буфером преобразования адресов (TLB traнсlation-lookaside buffer). Хотя наличие TLB не меняет принципа построения схемы страничной организации, с точки зрения защиты памяти, необходимо предусмотреть возможность очистки его при переключении с одной программы на другую.

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

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

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

^  5.3.7 Сегментация памяти

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

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

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

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

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

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

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




1. Лунтик 25 шаров 1 Ольга Г.html
2. . УСТаВНЫЙ КАПИТАЛ ПРЕДПРИЯТИЯ ФОНДЫ И РЕЗЕРВЫ ПРЕДПРИЯТИЯ 2
3. Безопасность жизнедеятельности Методические указания
4. на тему СПБоткин ~ выдающийся русский врач и ученый- Клиническая медицина во вторую половину 19 век
5.  И сия рек Иисус изыде со ученики Своими на онпол потока Кедрска идеже бе вертоград в Оньже вниде Сам и уче
6. Задание к практической работе Вводная часть На основании приведенных данных об остатках на 1 декабря 20
7. 3a29ea1bccbdd766ae6cd7f1942dd3e.html
8. Формирование государства
9. Лекція 2- Фінансовоправові норми та фінансовоправові відносини План лекцій- Поняття і види фінан
10. Курсовая работа- Обязательственное право и обязательства
11. ТЕМА 4.2. Введение в фармакологию средств действующих на эфферентную нервную систему
12. Политические и правовые учения в Западной Европе в период средних веков
13. Влияние художественной литературы на сохранение здорового образа жизни
14. Напівтони та колір у поліграфії1
15. Учёт и анализ фонда заработной платы
16. реферату- Складання й оформлення службових документівРозділ- Діловодство Складання й оформлення службових
17. Общественные здания и сооружения нужно получить общую освещенность 250 Лк в белом свете.
18. задание творческого характера отражает содержание четырех дисциплин Фотореклама Видеореклама Рекла
19. Тема 5 Учет финансовых вложений
20. мемлекет белгілеген жалпы~а міндетті белгілі бір ~зін~зі ~стау м~нері ережелеріні~ ж~йесі оны~ к~мегі ар