УДК 004.2 (075.8) ББК 32.971.32-02 М 91 Мусихин А.Г. Архитектура вычислительных машин и систем [Электронный ресурс]: Учебное пособие / Мусихин А.Г., Смирнов Н.А. — М.: МИРЭА – Российский технологический университет, 2021. — 1 электрон. опт. диск (CD-ROM) Учебное пособие разработано для помощи студентам института информационных технологий в усвоении материала по дисциплине «Архитектура вычислительных машин и систем». Предназначено для студентов 2 курса направлений подготовки 09.03.01 «Информатика и вычислительная техника» профилей «Вычислительные машины, комплексы, системы и сети» и «Промышленная информатика» и01.03.04 «Прикладная математика» профиля «Анализ данных». Учебное пособие издается в авторской редакции. Авторский Алексеевич. коллектив: Мусихин Александр Григорьевич, Смирнов Николай Рецензенты: Наумов Пѐтр Николаевич, профессор, доктор технических наук, главный научный сотрудник научно-технического отдела АО «НИИТП». Поляков Аркадий Константинович, кандидат технических наук, доцент кафедры Национального исследовательского университета (МЭИ) Системные требования: Наличие операционной системы Windows, поддерживаемой производителем. Наличие свободного места в оперативной памяти не менее 128 Мб. Наличие свободного места в памяти постоянного хранения (на жестком диске) не менее 30 Мб. Наличие интерфейса ввода информации. Дополнительные программные средства: программа для чтения pdf-файлов (Adobe Reader). Подписано к использованию по решению Редакционно-издательского совета МИРЭА — Российский технологический университет. Обьем: 6.06 мб Тираж: 10 © Мусихин А.Г., Смирнов Н.А., 2021 © МИРЭА – Российский технологический университет, 2021 ОГЛАВЛЕНИЕ 1. ВВЕДЕНИЕ В ДИСЦИПЛИНУ. ИСТОРИЯ РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ ......................................................................................................................................... 6 1.1.Определения и терминология ................................................................................................ 6 1.2.Краткие сведения из истории развития ЭВМ ....................................................................... 7 1.3.Принципы фон Неймана ....................................................................................................... 15 1.4.Классификация ВМ ............................................................................................................... 16 2. ВЫЧИСЛИТЕЛЬНЫЙ ПРОЦЕСС В ЭВМ .......................................................................... 20 2.1.Команды ВМ .......................................................................................................................... 22 2.2.Формат команды.................................................................................................................... 22 2.3.Примеры выполнения простой программы на ВМ ............................................................ 25 2.4.Работа с памятью ................................................................................................................... 27 3. АРХИТЕКТУРА ВМ .................................................................................................................. 31 3.1.Логическое проектирование учебной ВМ .......................................................................... 31 3.2.Центральный процессор ....................................................................................................... 32 3.3.ОУ ЦП учебной ВМ .............................................................................................................. 33 3.4.Устройство управления ЦП.................................................................................................. 40 3.5.Структурная схема УУ ЦП ................................................................................................... 43 3.6.Выполнение команд в учебной ВМ ..................................................................................... 46 4. СИСТЕМА ПРЕРЫВАНИЙ .................................................................................................... 48 4.1.Общая организация прерываний ......................................................................................... 49 4.2.Системы прерываний с использованием векторов прерываний ...................................... 49 4.3.Цикл прерывания................................................................................................................... 51 5. ОСНОВНЫЕ УСТРОЙСТВА ВМ .......................................................................................... 53 5.1.Структура и характеристики памяти ................................................................................... 53 5.2.Классы запоминающих устройств ....................................................................................... 54 5.3.Классификация по методам доступа ................................................................................... 57 5.4.Кэш-память ............................................................................................................................ 60 6. СИСТЕМЫ ВВОДА-ВЫВОДА ............................................................................................... 67 6.1. Системная магистраль «Общая шина»............................................................................... 67 6.2. Программно-управляемый обмен ....................................................................................... 69 6.3. Взаимодействие устройств в ВМ ........................................................................................ 70 6.4. Классификация внешних устройств ................................................................................... 72 6.5. Средства ввода-вывода информации ................................................................................. 80 6.4.Устройства командного управления ................................................................................... 93 6.5.Устройства обмена данными................................................................................................ 96 6.6.Устройство персонального компьютера ............................................................................. 97 7. КОНВЕЙЕРЫ ВМ...................................................................................................................... 99 7.1.Общие сведения о конвейеризации ..................................................................................... 99 7.2.Простейший конвейер команд и оценки его эффективности ........................................... 99 7.3.Понятие конфликтов в конвейере и пути их устранения ................................................ 102 7.4.Реализация точного прерывания в конвейере .................................................................. 112 3 7.5.Суперконвейерные процессоры ......................................................................................... 113 7.6.Суперскалярные процессоры ............................................................................................. 114 8. АРХИТЕКТУРЫ ПРОЦЕССОРОВ...................................................................................... 115 8.1.Процессоры с архитектурой CISC ..................................................................................... 115 8.2.Архитектура RISC-процессоров ......................................................................................... 116 8.3.ВС с командными словами сверхбольшой длины (VLIW) .............................................. 120 8.4.Вычислительные системы с явным параллелизмом команд (ЕРIC) .............................. 121 8.5.Архитектура многоядерных процессоров ......................................................................... 123 8.6.Классификация по месту хранения операндов ................................................................. 124 9. ВВЕДЕНИЕ В ОПЕРАЦИОННЫЕ СИСТЕМЫ ............................................................... 130 9.1.Определение операционной системы ................................................................................ 130 9.2.Основные функции операционных систем ....................................................................... 130 9.3.Этапы развития операционных систем ............................................................................. 132 9.4.Классификация операционных систем.............................................................................. 135 10. АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ ......................................................... 144 10.1.Классификация архитектур ОС........................................................................................ 144 10.2.Процессы и потоки ............................................................................................................ 149 10.3.Механизмы синхронизации и взаимодействия процессов ............................................ 155 10.4.Потоки ................................................................................................................................ 162 11. УПРАВЛЕНИЕ ПАМЯТЬЮ................................................................................................ 168 11.1.Типы адресов ..................................................................................................................... 168 11.2.Методы распределения памяти без использования дискового пространства ............. 169 11.3.Методы управления памятью с использованием дискового пространства ................. 173 11.4.Свопинг .............................................................................................................................. 181 12. ФАЙЛОВАЯ СИСТЕМА ...................................................................................................... 182 12.1.Общие сведения о файлах и файловых системах ........................................................... 182 12.2.Имена файлов .................................................................................................................... 182 12.3.Типы файлов ...................................................................................................................... 183 12.4.Организация файла............................................................................................................ 185 12.5.Кэширование диска ........................................................................................................... 189 12.6.Многоуровневая модель файловой системы .................................................................. 189 12.7.Современные архитектуры файловых систем ................................................................ 190 13. ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ В ВС ....................................................................... 192 13.1.Уровни параллельных вычислений ................................................................................. 192 13.2.Метрики параллельных вычислений ............................................................................... 193 13.3.Закономерности параллельных вычислений .................................................................. 196 14. АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ КЛАССА SIMD ......................... 202 14.1.Классификация ЭВМ и вычислительных систем по Флинну ....................................... 202 14.2.Векторные и векторно-конвейерные вычислительные системы .................................. 204 14.3.Матричные вычислительные системы ............................................................................ 214 14.4.Ассоциативные вычислительные системы ..................................................................... 222 14.5.Вычислительные системы с систолической структурой ............................................... 227 4 15. АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ КЛАССА MIMD ........................ 232 15.1.Особенности организации и функционирования архитектур с общей, распределенной и смешанной памятью............................................................................................................... 234 15.2.MIMD-системы с разделяемой памятью ......................................................................... 236 15.3.MIMD-системы с распределѐнной памятью ................................................................... 244 15.4.Топологии ВС .................................................................................................................... 250 16. ПЕРСПЕКТИВЫ РАЗВИТИЯ ВМ И ВС .......................................................................... 257 16.1.Наиболее производительные вычислительные системы ............................................... 257 16.2.Основные направления развития процессоров .............................................................. 263 16.3.Кодирование и передача сигналов................................................................................... 265 16.4.Перспективы развития процессоров................................................................................ 266 ЛИТЕРАТУРА .............................................................................................................................. 269 5 1. ВВЕДЕНИЕ В ДИСЦИПЛИНУ. ИСТОРИЯ РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ 1.1. Определения и терминология Дисциплина «Архитектура вычислительных машин и систем» предполагает прежде всего дать определение терминам вычислительная машина (ВМ), вычислительная система (ВС) и архитектура ВМ и ВС. В соответствии с международным стандартом ISO/IEC 2382/1-93 [14] и государственным стандартом ГОСТ 15971-90 [13] вычислительная машина – это «совокупность технических средств, создающая возможность проведения обработки информации и получение результата в необходимой форме». Под техническими средствами понимается всѐ оборудование, используемое для автоматизированной обработки данных, включая и системное программное обеспечение. Вычислительную машину, «основные функциональные устройства которой выполнены на электронных компонентах» [13], называют электронной вычислительной машиной (ЭВМ). Вычислительная система – это одна или несколько вычислительных машин, периферийное оборудование и программное обеспечение, которые выполняют обработку данных. Следовательно, формальное отличие ВС от ВМ состоит в количестве вычислительных средств. Множественность этих средств позволяет реализовать в ВС параллельную обработку. С другой стороны, современные ВМ также обладают определенными возможностями распараллеливания вычислительного процесса. Таким образом, грань между ВМ и ВС является довольно расплывчатой. Это позволяет, с одной стороны, рассматривать ВМ как одну из реализаций ВС. А с другой стороны, вычислительные системы часто строятся из традиционных ВМ и их частей, поэтому многое, относящееся к ВМ, может быть распространено и на ВС [6]. Различают функциональную и структурную организацию ВМ. Для пользователя ВМ важна функциональная организация, под которой понимают совокупность функций и услуг, предоставляемых пользователю и обеспечивающих удовлетворение его потребностей. В частности, кодирование исходных данных, преобразование информации, программирование задач, ввод и вывод данных, управление ходом обработки данных. Для разработчика ВМ требуется организовать реализацию функций и услуг посредством использования и соединения конкретных физических элементов, узлов, блоков и устройств. Т. е. структурная организация ВМ, пред6 ставляющая собой физическую модель, имеющую определѐнный состав и реалиизующая основные принципы взаимодействия составных частей ВМ. Графическое представление структурной организации есть структурная схема. Под термином «архитектура вычислительной машины» раньше понималось только набор средств, которыми могли воспользоваться программисты для составления программ в машинных кодах: система машинных команд, формы представления данных, организация ввода и вывода данных, взаимодействие процессора с памятью и др. В нестоящее время под архитектурой ВМ понимается «концептуальная структура вычислительной машины, определяющая проведение обработки информации и включающая методы преобразования информации в данные и принципы взаимодействия технических средств и программного обеспечения» [13]. Такое определение имеется в ГОСТ 15971-90. Международным стандартом ISO/IEC 2382/1-93 определено, что архитектура ВМ – это логическая структура и функциональные характеристики ВМ, включая взаимосвязи между еѐ аппаратными и программными компонентами [14]. Таким образом, в понятии «архитектура вычислительных машин» органично сочетаются как аппаратное, так и программное обеспечение. 1.2. Краткие сведения из истории развития ЭВМ В истории развития вычислительной техники имеются много знаменательных дат и событий. Среди них хочется выделить некоторые, знаменующие собой определѐнные этапы: 1623 г. Вильгельм Шиккард создает первую из известных в настоящее время счетных машин, реализующую выполнение операций «+» и «-». 1641 г. Выдающийся математик Блез Паскаль создает счетную машину, автоматизирующую выполнение операций «+» и «-». Идеи Паскаля оказали очень мощное влияние на дальнейшее развитие вычислительной техники. 1673 г. Великий Готфрид Лейбниц создает счетную машину (калькулятор, прототип арифмометра), реализующую операции «+», «-», «*», «/». 1821 г. Выпуск Карлом Томасом на основании идей Лейбница устройства, названного им арифмометром. С этого времени началось практическое применение вычислительных устройств. Арифмометр в течение XIX в. постоянно совершенствовался, повышалась его точность работы, надѐжность и удобство работы с ним, он был оборудован выводом результатов на печать и другими полезными нововведениями. Но поистине революционную роль в развитии вычислительной техники сыграла 7 «аналитическая» машина, разработанная английским математиком Чарльзом Бэбиджем в конце XIX в. Она должна была быть реализована из механических составных частей, предполагала наличие в своѐм составе устройства для хранения чисел на регистрах из зубчатых колѐс («склад»), устройства для производства арифметических вычислений над числами («фабрика»), устройства для управления действиями машины («контора») и устройств для ввода исходных данных и вывода результатов вычислений на печать. В своей аналитической машине Бэбидж предусматривал широкое использование перфокарт, в т. ч. перфокарты управляли действиями машины и могли изменять направление вычислений в зависимости от результатов вычислений, что в принципе предвосхитило идею программно-управляемой автоматической машины, выполняющей различные типы вычислений. Кстати, перфокарты были изобретены в 1804 году Жозефом Мари Жаккаром и применены для управления работой ткацкого станка. В последующем счетно-перфорационная техника получила широкое распространение, чему в немалой степени способствовал Герман Холерит, основавший в 1896 году фирму по выпуску перфокарт и счѐтно-перфорационной техники под названием IBM (International Business Machine). Появление программирования тоже связано с аналитической машиной Бэбиджа. Исследуя возможность применения этой машины для выполнения сложных вычислений, прекрасный математик, дочь великого поэта лорда Байрона леди Ада Лавлайс разработала первые программы, доказав универсальные возможности вычислительных машин. Позднее в честь леди Лавлайс один из языков программирования был назван «Ада». Аналитическая машина Бэбиджа не была практически реализована из-за недостаточного развития производства в то время. Труды Бэбиджа были опубликованы после его смерти в 1888 году и забыты на несколько десятилетий, как это бывало не раз в истории мировой науки с передовыми идеями, уровень которых превосходил состояние техники и технологии. Первые универсальные цифровые вычислительные машины (ЦВМ), в основу разработки которых легли идеи Ч.Бэбиджа, были созданы в 30-40-х гг. XX столетия. В качестве основного признака классификации поколений вычислительных машин принято использовать элементную базу компьютеров: 1-е поколение, 50-е гг.: ЭВМ на электронных вакуумных лампах. 2-е поколение, 60-е гг.: ЭВМ на дискретных полупроводниковых приборах (транзисторах). 8 3-е поколение, 70-е гг.: компьютеры на полупроводниковых интегральных схемах с малой и средней степенью интеграции (сотни – тысячи транзисторов в одном корпусе). Интегральная схема – электронная схема специального назначения, выполненная в виде полупроводникового кристалла, объединяющего большое число активных элементов (диодов и транзисторов). 4-е поколение, 80–90-е гг.: компьютеры на больших (БИС) и сверхбольших (СБИС) интегральных схемах (десятки тысяч – миллионы активных элементов на одном кристалле). БИС и СБИС имеют настолько плотно упакованные активные элементы, что все электронное оборудование компьютера 1-го поколения (занимавшего, например, зал площадью 100–150 м2) размещается сейчас в одном микропроцессоре площадью 1,5–2 см2. Расстояния между активными элементами в СБИС составляют порядка 0,15 микрона, что в сотни раз меньше диаметра человеческого волоса. 5-е поколение, соответствует настоящему времени: компьютеры включают в себя многие десятки параллельно работающих микропроцессоров, что позволяет реализовывать эффективные системы обработки знаний; компьютеры, основанные на сверхсложных микропроцессорах, имеющих параллельновекторную структуру, одновременно выполняющих десятки программных команд. 6-е и последующие поколения, активно разрабатываемые в настоящее время: оптоэлектронные компьютеры с массовым параллелизмом и нейронной структурой, с распределенной сетью большого числа (десятки тысяч) несложных быстродействующих микропроцессоров, моделирующих архитектуру нейронных биологических систем. Рассмотрим более подробно историю развития ВМ на протяжении первых поколений. Нулевое поколение компьютеров. Элементную базу составляли электромеханические реле. На их основе американский инженер Говард Эйкен при поддержке фирмы IBM в 1944 г. сконструировал компьютер, названный «Марк1». Ввиду недостаточной надѐжности и низкого быстродействия электромеханических реле этими же недостатками характеризовались и компьютеры нулевого поколения. Поэтому специалисты разных стран мира начали конструировать компьютеры на основе электронно-вакуумных ламп. Первое поколение компьютеров. Элементная база – электронновакуумные лампы. В 1946 г. американскими учеными Джоном Мокли и Преспером Эккертом сконструирован компьютер ЭНИАК (электронный вычислительный интегратор и калькулятор). Его скорость работы по сравнению с ком9 пьютером «Марк-1» увеличилась в 1 000 раз. Однако большую часть времени этот компьютер вынужден был простаивать, поскольку технология задания метода расчетов (программы) в этом компьютере заключалась в перекоммутировании большого количества проводов. На выполнение этой работы требовалось от нескольких часов до нескольких дней, а сам расчет программы мог занять всего лишь несколько минут или даже секунд. Разработчики стали конструировать новый компьютер, обеспечивающий хранение программы в памяти машины. В этой работе принимал участие американский математик Джон фон Нейман, который сформулировал основные принципы функционирования универсальной вычислительной машины и определил основные элементы еѐ архитектуры. По фон Нейману (рис.1.1) компьютер должен состоять из арифметико-логического устройства (АЛУ), выполняющего арифметические и логические операции, регистров, устройства управления (УУ), синхронизирующего работу всех элементов компьютера, памяти, содержащей программу и данные, и портов ввода-вывода, через которые осуществляется взаимодействие с внешними устройствами (ввод-вывод данных). Рис.1.1. Машина фон-Неймана. В первую очередь следует обратить внимание на память. Память имеет в литературе много названий: оперативная память (ОП), оперативное запоминающее устройство (ОЗУ). Память содержит последовательность ячеек хранения данных, каждая из которых имеет свой уникальный адрес и может хранить как команду программы, так и элемент обрабатываемых данных. В современных персональных компьютерах она составляет 4 – 8 – 16 – 32 – 64 Гигабайта. Про10 граммисты, занимающиеся операционными системами, называют эту память «основная память», «физическая память». Вот эти четыре названия обозначают одно и то же. В настоящее время состав памяти ВМ значительно расширился. Сейчас имеется так называемая кэш-память, используемая для ускорения вычислений, имеется внешняя память, но эти виды памяти будут рассмотрены позднее. Иногда АЛУ и регистры объединяют вместе и называют это объединение операционным устройством (ОУ). Операционное устройство и устройство управления составляют единое устройство – процессор. Процессор выполняет последовательно одну за другой команды программы. Адрес очередной команды находится в специальном регистре процессора – счетчике команд. Процессор извлекает обрабатываемую информацию из памяти или получает еѐ от внешнего устройства. В каждой команде программы имеются в заданном виде следующие предписания: из каких ячеек взять обрабатываемую информацию; какие операции выполнить с этой информацией; в каких ячейках памяти сохранить результат; как изменить содержимое счетчика команд, чтобы перейти к выполнению следующей команды. Процессор выполняет последовательность команд программы в соответствии с изменением счетчика команд до тех пор, пока не дойдет до команды остановиться. На рис. 1.1 в машине фон Неймана изображена аппаратная часть. В настоящее время в машине фон Неймана имеется большая программная часть, называемая операционной системой. Она составляет системное обеспечение ВМ. Позже мы будем рассматривать функции операционной системы, каким образом она работает, взаимодействует с аппаратной частью ВМ. А в начальной части дисциплины мы рассмотрим аппаратную часть ВМ. В 1951 г. в США был создан первый компьютер, реализующий основные принципы архитектуры фон Неймана и предназначенный для коммерческого использования. Он получил название УНИВАК (универсальный автоматический компьютер). В СССР тоже велась работа по созданию вычислительных машин. Так, в 1950 г. под руководством академика С. А. Лебедева была разработана МЭСМ (малая электронная счетная машина). В компьютерах первого поколения не использовались языки программирования, их тогда ещѐ не было. Для разработки программ использовался машинный язык – способ записи команд в виде двоичных кодов, допускающий их непосредственное исполнение на компьютере. Каждый тип компьютера имел свою систему машинных команд и свой собственный машинный язык, что 11 ограничивало сферу применения компьютеров и препятствовало применению программ, разработанных для одного типа компьютера, на других типах компьютеров. Производительность компьютеров первого поколения составляла до нескольких тысяч операций в секунду. Их недостатками являлось то, что электронные лампы поглощали много электроэнергии, выделяли большое количество тепла, были громоздкими, дорогими и ненадежными. В 1948 г. был изобретен транзистор. Транзисторы выполняли те же функции, что и электронно-вакуумные лампы, но их действие было основано на электрических свойствах полупроводников. 2-е поколение компьютеров. В качестве элементной базы используются транзисторы. Для организации памяти компьютеров стали использовать новые устройства – ферритовые сердечники. Изобретение транзистора и использование новых технологий хранения данных в памяти явилось предпосылкой к значительному уменьшению размеров компьютеров, обеспечению их более высокой надежности и быстродействия. Серийное производство транзисторов началось в 1954 г., а уже в 1956 г. учеными Массачусетского технологического института был создан первый компьютер, полностью построенный на транзисторах. Машинный язык, применявшийся ранее для программирования компьютеров, был крайне неудобен для восприятия человеком. Для преодоления этих неудобств придумали язык Ассемблер. Фактически он использует символические имена и символические коды для написания программ. А после ввода программы Ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд – на числовые. Программирование на Ассемблере сделало более наглядным процесс написания программ. Быстродействие компьютеров увеличилось до нескольких сотен тысяч операций в секунду. Компьютеры всѐ шире стали применяться в различных областях деятельности. Например, большая часть крупных компаний в США к 1965 г. обрабатывала с помощью компьютеров финансовую информацию. Для программирования стали использовать специальные языки, приближенные к естественным языкам. Первыми такими языками высокого уровня (ЯВУ) стали Фортран (формульный транслятор, разработанный для математических задач) и Кобол (для обработки финансово-экономических данных). С ними появились и трансляторы – специальные программы, преобразующие программу из ЯВУ на машинный язык. Широкое развитие индустрии программирования относится уже к следующему, третьему поколению компьютеров. 12 Наиболее трудоѐмкой операцией в производстве компьютеров стал монтаж элементов с помощью паяных соединений. В 1959 г. Роберт Нойс изобрел способ изготовления на одной пластине кремния нескольких транзисторов и всех необходимых соединений между ними. Такие электронные схемы стали называться интегральными схемами. К достоинствам интегральных микросхем относились увеличенное быстродействие по сравнению со схемами на отдельных транзисторах, уменьшенное потребление энергии и увеличение надѐжности ввиду уменьшения количества паяных соединений. Несколько позже Роберт Нойс основал компанию Intel по производству интегральных микросхем. 3-е поколение компьютеров. Элементная база – интегральные микросхемы. Первые интегральные микросхемы содержали всего несколько элементов. Но усилиями ученых технологии создания интегральных микросхем быстро совершенствовались, и вскоре на одной интегральной микросхеме стали размещать сначала десятки, а затем сотни и больше транзисторов. Уже в 1964 г. компания IBM выпустила построенный на основе интегральных микросхем компьютер IBM System 360. Это событие можно считать началом массового производства вычислительной техники. IBM System 360 относится к классу так называемых мейнфреймов, т. е. больших ВМ. Компания DEC представила модель миникопьютера PDP-8. Одновременно совершенствовалось программное обеспечение. Появились первые коммерческие операционные системы и новые прикладные программы. В 1964 г. появился язык программирования Бейсик, предназначенный для обучения начинающих программистов. В 1970 году швейцарец Никлус Вирт разработал язык программирования Паскаль. Созданный изначально как язык для обучения, Паскаль получил широкое распространение, поскольку он оказался очень удобным для решения многих прикладных задач. Использование интегральных микросхем в качестве элементной базы для производства компьютеров третьего поколения позволило значительно уменьшить стоимость и размеры компьютеров. Началось массовое производство компьютеров разных классов. Скорость обработки информации увеличилась до одного миллиона операций в секунду. Разработаны новые внешние устройства. Появились первые коммерческие операционные системы и специально разработанные для их создания языки программирования высокого уровня. В 1969 г. компания Intel выпустила важнейшее для развития вычислительной техники устройство – микропроцессор. Фактически он представляет собой интегральную микросхему, имеющую функциональные возможности, аналогичные функциям центрального процессора большой ВМ. 13 Следующие десятилетия развитие вычислительной техники характеризовалось продолжением увеличения скорости и степени интеграции микропроцессоров. Появились сверхбольшие интегральные схемы (СБИС), включающие сотни тысяч и даже миллионы элементов на один кристалл. Это позволило ещѐ больше уменьшить размеры и стоимость компьютеров, повысить их производительность и надежность. Фактически одновременно с микропроцессорами появились микрокомпьютеры, называемые также персональными компьютерами, Отличительной их особенностью стали низкая стоимость и небольшие размеры. Компьютеры перестали быть доступными только для крупных компаний и государственных учреждений. Они стали поступать на рынок в качестве товара массового потребления. Одной из первых компаний, выпустивших персональные компьютеры в качестве товара массового потребления, стала компания Apple. Ее основатели Стив Джобс и Стив Возняк собрали первую модель персонального компьютера в 1976 году, назвав ее Apple I. В 1977 г. компания Apple представила следующую модель персонального компьютера – Apple II. До 1979 г. крупные компании обращали мало внимания на появившиеся на рынке персональные компьютеры. Но в конце 70-х гг. всѐ большее распространение персональных компьютеров привело к некоторому снижению спроса на большие и миникомпьютеры. В результате чего в 1979 г. ведущая компания по производству больших компьютеров – фирма IBM – приняла решение выйти на рынок персональных компьютеров. В качестве эксперимента и с целью экономии финансовых средств было решено при создании своего персонального компьютера использовать узлы, изготовленные другими фирмами. Основным микропроцессором компьютера был выбран 16-разрядный микропроцессор Intel-8088, новейший в тот период времени. Для разработки программного обеспечения была привлечена небольшая фирма Microsoft. В 1981 г. был представлен публике новый компьютер под названием IBM PC (персональный компьютер фирмы IBM), который вскоре приобрел большую популярность на рынке. Фирма IBM не стала защищать его патентами. Компьютер состоял из имеющихся на рынке узлов, а конструкция компьютера и способы соединения его узлов были доступны всем интересующимся. Успех компьютера IBM PC на рынке оказался потрясающим именно благодаря принципу открытой архитектуры. Многие фирмы стали производить компьютеры аналогичной конструкции (совместимые с IBM PC), дешевые благодаря отсутствию затрат на разработку. Многие пользователи стали самостоятельно улучшать ха14 рактеристики компьютера. Он становился всѐ более популярным, так же стало привлекательным производство комплектующих и дополнительных устройств к IBM PC. Этот подход, называемый принципом открытой архитектуры, обеспечил потрясающий успех компьютеру IBM PC, хотя и лишил фирму IBM возможности единолично пользоваться плодами этого успеха. Перспективность и популярность IBM PC сделали весьма привлекательным производство различных комплектующих и дополнительных устройств для IBM PC. Рост конкуренции между производителями привел к удешевлению комплектующих и самого компьютера и стремительному улучшению их характеристик. 1.3. Принципы фон Неймана Анализ сильных и слабых сторон первых ВМ позволил коллективу исследователей, в состав которого входил выдающийся математик Джон фон Нейман, сформулировать основные концепции организации электронных ЦВМ. Поскольку впервые публично эти идеи озвучил лично фон Нейман, ЦВМ, созданные на основе этих принципов, часто называют машинами фон Неймана. Первый принцип – это то, что ВМ работает с двоичными числами. Первым при создании вычислительной машины встал вопрос, в какой системе счисления она должна работать. Естественно, хотелось бы, чтобы она работала в привычной человеку десятичной системе счисления. Но это не реально. С технической точки зрения имеются элементы, которые хорошо фиксируют два состояния. Например, высокое напряжение и низкое напряжение. Вот эти элементы и были положены в основу создания машины фон Неймана. Фон Нейман как раз и сформулировал принцип, что машина должна работать в двоичной системе счисления и везде должны использоваться двоичные коды, как для представления данных, так и для написания программ. Исполняемый код программы ВМ представляется в двоичном коде. Следующий принцип, который сформулировал фон Нейман, касается программы управления. Программа должна быть написана в двоичном коде и должна храниться в памяти ВМ. Принцип «хранимой программы» позволяет оперировать с закодированной в двоичном виде программой как с числами, что дает возможность ее модифицировать во время выполнения. Ещѐ два принципа фон Неймана касаются построения памяти. Третий принцип ‒ адресуемость памяти. Память, состоящая из отдельных последовательно расположенных ячеек, представлена двумя компонентами: адресной частью и частью данных. Эти компоненты условно не связаны друг с другом. В настоящее время в памяти может быть сколько угодно много адресов. Размер 15 данных может быть разным, а минимальная адресуемая часть памяти равна байту. Четвѐртый принцип связан с однородностью памяти. В одной и той же памяти хранятся как программа в двоичном коде, так и данные тоже в двоичном коде. Поэтому с памятью надо работать очень аккуратно, чтобы не перепутать области хранения программы и данных. В ходе работы процессор интерпретирует информацию в определенных ячейках как команды программы, информацию в других ячейках ‒ как данные. Память бывает не только однородной. Ещѐ во времена фон Неймана, а он работал в Пристонском университете (по этой причине архитектуру ВМ фон Неймана иначе называют пристонской архитектурой), существовала группа учѐных, работавшая в Гарвардском университете, которая предложила раздельную организацию памяти: отдельно организовать память для программ и отдельно ‒ для данных. Такая архитектура ВМ получила наименование гарвардской архитектуры. Она имеет ряд преимуществ, существует и в настоящее время, хотя является менее распространенной, чем архитектура фон Неймана. Перечисленные принципы являются основными, но далеко не исчерпывают всех предложений фон Неймана. Разработка ЦВМ на основе элементов с двумя устойчивыми состояниями дала возможность широкого применения для построения электронных схем аппарата двоичной (бинарной) логики, разработанной в середине Х1Хв. английским математиком Джорджем Булем. Алгебра логики нашла свое применение и в области программирования (например, в разработке алгоритмов). 1.4. Классификация ВМ В основу классификации вычислительных машин могут быть положены несколько признаков: принцип действия; элементная база; назначение; способ организации вычислительного процесса; размер вычислительной мощности; функциональные возможности; способность к параллельному выполнению программ. Классификация ВМ по принципу действия По этому классификационному признаку вычислительные машины делят на три больших класса: цифровые, аналоговые и гибридные (рис. 1.2). Основ16 ную роль здесь играет форма представления информации, с которой они работают. Рис. 1.2. Классификация вычислительных машин по принципу действия. Цифровые вычислительные машины (ЦВМ или ВМ дискретного действия) работают с информацией, представленной в цифровой (дискретной) форме. ЦВМ с электрическим представлением дискретной информации – электронные цифровые вычислительные машины, обычно называемые просто электронными вычислительными машинами (ЭВМ), получили наиболее широкое распространение в науке и технике. Аналоговые вычислительные машины (АВМ), они же вычислительные машины непрерывного действия, работают с информацией, представленной в непрерывной (аналоговой) форме. Эта информация чаще всего представляется уровнем электрического напряжения (либо в виде другой физической величины). АВМ являются простыми и удобными в эксплуатации, они легко программируются. Скорость решения задач выбирается сколь угодно большой по желанию оператора, но относительная погрешность решения задач не превышает 2– 5 %, что характеризует низкую точность вычислений. Эффективному решению на АВМ поддаются математические задачи, не требующие сложной логики, например, содержащие дифференциальные уравнения. Гибридные вычислительные машины (ГВМ) или вычислительные машины комбинированного действия работают с информацией, представленной как в цифровой, так и в аналоговой форме. В них совмещаются достоинства АВМ и ЦВМ. ГВМ обычно используются для решения задач управления сложными быстродействующими техническими комплексами. Классификация ЭВМ по назначению По назначению компьютеры можно разделить на три группы (рис. 1.3): общего назначения (универсальные), проблемно-ориентированные и специализированные. Рис. 1.3. Классификация ЭВМ по назначению. 17 Компьютеры общего назначения предназначены для решения математических, инженерно-технических, информационных, экономических и других задач, отличающихся большим объемом обрабатываемых данных и разнообразием алгоритмов. Такие ВМ широко применяются в вычислительных центрах больших компаний, мощных вычислительных центрах коллективного пользования. К характерным чертам универсальных компьютеров относятся: высокая производительность, разнообразие форм представления обрабатываемых данных: двоичных, десятичных, символьных, при большом диапазоне изменения и высокой точности числовых данных, широкий перечень выполняемых операций (арифметических, логических, специальных), большой объем оперативной памяти, обширную систему ввода-вывода информации, которая обеспечивает подключение различных внешних устройств. Проблемно-ориентированные ВМ обладают ограниченными по сравнению с универсальными компьютерами аппаратными и программными ресурсами. Они используются для решения задач более узкого характера. Обычно эти задачи характеризуются выполнением расчетов по относительно несложным алгоритмам и связаны с управлением технологическими процессами, регистрацией, накоплением и обработкой относительно небольших объемов данных. Специализированные компьютеры предназначены для решения узкого круга специальных задач или реализации строго заданных функций. Такая ориентация компьютеров позволяет четко сформировать их структуру, существенно снизить их стоимость при сохранении высокого быстродействия и надежности их работы. К таким компьютерам относятся, например, программируемые микропроцессоры специального назначения, контроллеры, выполняющие функции управления бытовой техникой, агрегатами и процессами, устройства согласования и сопряжения работы узлов вычислительных систем. Классификация ЭВМ по размерам и вычислительной мощности По размерам и вычислительной мощности компьютеры подразделяются (рис. 1.4) на сверхбольшие (суперкомпьютеры, суперЭВМ), большие, малые и сверхмалые (микрокомпьютеры или микроЭВМ). Рис. 1.4. Классификация ЭВМ по размерам и вычислительной мощности. 18 Исторически первыми появились большие ЭВМ, элементная база которых прошла путь от электронных ламп до интегральных схем со сверхвысокой степенью интеграции. Первая большая ЭВМ ENIAC (Electronic Numerical Integrator and Computer) была создана в 1946 г. Эта машина весила более 30 тонн, имела быстродействие несколько сотен операций в секунду, оперативную память емкостью 20 чисел, занимала зал площадью около 150 м2. Производительность больших компьютеров оказалась недостаточной для ряда задач (прогнозирования метеообстановки, управления сложными оборонными комплексами, проведения биологических исследований, моделирования экологических систем и др.). Наличие таких задач вызвало необходимость разработки и создания суперкомпьютеров, самых мощных вычислительных систем, интенсивно развивающихся и в настоящее время. Малые ЭВМ появились в 70-х гг. прошлого столетия. Их появление вызвано, в основном, двумя причинами – появлением новой элементной базы и избыточностью ресурсов больших ЭВМ для решения ряда практических задач. Малые ЭВМ стали доступнее на рынке (дешевле и компактнее), что позволило оборудовать такими ВМ отделы предприятий и небольшие компании. В дальнейшем благодаря развитию элементной базы и архитектуры ВМ появились супер-мини-компьютеры, находящиеся в ценовой категории малых ЭВМ, но сравнимые по производительности с большими ВМ. МикроЭВМ. Их появление связано с изобретением микропроцессора (МП). Первоначально микрокомпьютерами называли ВМ, в которых использовались микропроцессоры. В настоящее время микропроцессоры используются во всех без исключения классах компьютеров. 19 2. ВЫЧИСЛИТЕЛЬНЫЙ ПРОЦЕСС В ЭВМ Допустим, вы имеете программу, написанную на языке высокого уровня. Может ли эта программа сразу выполняться на ЭВМ? Конечно, не может. Для этого необходимо преобразовать программу из так называемого исходного кода – собственно текста программы на языке высокого уровня (ЯВУ) – в исполняемый код. Этот процесс выполняется обычно в несколько этапов (рис.2.1). На первом этапе работает так называемый транслятор. Он может быть выполнен в двух видах: компилятор или интерпретатор. Интерпретатор обычно осуществляет перевод строк программы на ЯВУ последовательно в ходе выполнения программы. Поэтому появление сообщения об ошибке в программе может произойти в самом конце программы и вся работа ВМ пойдет насмарку. Компилятор же осуществляет анализ всей программы, выделяет память для программы и требуемых переменных и оптимизирует код программы. Выявление ошибок в программе осуществляется еще до еѐ выполнения. Поэтому компилятор обычно сложнее интерпретатора, но в работе предпочтительнее (работает быстрее на этапе выполнения программы и выявляет ошибки раньше, еще до выполнения программы). Рис. 2.1. Получение исполняемого кода. 20 В результате работы компилятора образуется так называемый объектный модуль – код на языке Ассемблера. Этот модуль обычно имеет расширение .obj и представляет собой приближенный к машинному языку код. В нем вместо обозначений в двоичном коде используются символьные имена переменных, символьные адреса и символьные обозначения команд. Строится таблица символов. Затем следуют операции редактирования связей в объектном модуле – работает так называемый линкер, который связывает объектный модуль с другими объектными модулями (используемыми в программе функциями). В результате получается загрузочный модуль, наиболее близкий к выполняемому модулю. Далее работает загрузчик loader, который подключает к загрузочному модулю подпрограммы из статической системной библиотеки (имеющие расширение .lib). Эти подпрограммы загрузчик подгружает из библиотеки. Если статическая библиотека подгружается полностью, то программа сильно разбухает в объеме. Поэтому применяют динамическую библиотеку, с подгружением подпрограмм только по мере их необходимости – только то, что будет практически использовать процессор в своей работе в ходе выполнения программы. Иногда исполняемый код можно обработать и запомнить в формате .exe. С такими исполняемыми файлами следует обращаться очень осторожно, поскольку часто они содержат вредоносный код – вирусы, трояны и т. д., особенно, если эти программы взяты из непроверенных источников в интернете. Так, если вы скачиваете электронную книгу в формате .pdf, то это безопасно, а если в формате .exe – опасно. Часто процессы, выполняемые линкером и загрузчиком объединяют и обозначают процессом «линкование». Если программа имеет большой объем, то этот процесс может выполняться на ВМ довольно длительное время. ВМ работает в двоичных кодах. Все, что относится к составлению программы и преобразованию ее в исполняемый код, относится к программированию. Поэтому мы при рассмотрении дисциплины «Архитектура вычислительных машин и систем» будем рассматривать только работу в машинных кодах с использованием языка Ассемблера для именования переменных и операций. Наша задача заключается в изучении самого низкого уровня – как программа в исполняемых кодах исполняется на ВМ. Зачем это нужно? Те из вас, которые будут работать по специальности в нашей области, должны хорошо знать эти сведения. В настоящее время широко используются многоядерные микропроцессоры, фактически содержащие в себе несколько вычислительных 21 процессоров-ядер. Те специалисты, кто пишет сложные, выполняющиеся длительное время программы, зная работу процессора на нижнем уровне, способны писать более эффективные, более быстродействующие программы, учитывающие особенности работы на нижнем уровне. Из научных журналов известно, что если специалист, разрабатывая программу, учитывает работу на нижнем уровне, то в результате получает программу на ЯВУ, логически построенную правильно, работающую до 100 раз быстрее, чем программа, написанная без такого учѐта. Естественно, 100кратное ускорение – это максимум, но ускорение в 5-10 раз – это обычное явление. Таким образом, при написании программы на ЯВУ следует учитывать, как она исполняется в процессоре. Мы в нашей дисциплине как раз и изучим эти вопросы. 2.1. Команды ВМ Команды ЭВМ могут быть самые разнообразные. Мы в первую очередь рассмотрим команды с двумя операндами типа сложение и умножение. Что в общем случае входит в команду? Команда должна указывать: 1) операцию, подлежащую выполнению; 2) адреса операндов, над которыми производится операция (именно адреса, а не сами операнды!!!); 3) адрес, по которому следует записать результат операции (адрес результата); 4) адрес следующей выполняемой команды. В общем случае машинная команда состоит из двух частей: кода операции и адресной части (рис.2.2). Адресная часть OP Рис. 2.2. Общий вид команды. 2.2. Формат команды Формат команды – это структура команды, т. е. количество и назначение полей команды, а также разрядность каждого поля и команды в целом. Для команды в процессоре отводится отдельный регистр – IR. Поанглийски команда – это инструкция. По-русски этот регистр обозначается РК – регистр команды. Кроме того, в ВМ обязательно имеются два регистра для обращения к памяти: MAR – регистр адреса памяти, MDR – регистр данных памяти. Рассмотрим, как изменялись форматы команд при развитии ВМ. 22 Вначале использовались команды, имеющие формат, показанный на рис.2.3. ВМ, использующие данный формат команд, назывались четырехадресными, в соответствии с количеством полей в адресной части формата команды. OP 4 разряда AD1 12 разрядов AD2 12 разрядов ADR 12 разрядов ADI 12 разрядов Рис.2.3. Формат 4-хадресной команды: OP – код операции, AD1, AD2 – адреса 1-го и 2-го операндов, ADR – адрес результата, ADI – адрес следующей команды. Рассмотрим некоторую учебную ВМ, которая содержит 16 операций и память объемом 4К ячеек. Для кодирования такого количества операций достаточно 4-х разрядов (24 = 16 команд), а для адресации любой ячейки памяти такого объѐма требуется 12 двоичных разрядов (4К = 212 = 4096 ячеек памяти). Таким образом, учитывая, что поле OP содержит 4 разряда, а все 4 адресных поля команды содержат по 12 разрядов, получаем 52 разряда – общую разрядность 4-хадресной команды учебной ЭВМ. Если учесть, что для формирования одного разряда в регистре требуется один триггер на двух активных элементах, а в первых ВМ использовались электровакуумные лампы, потребляющие каждая примерно 50 Вт, то для функционирования только одного регистра команд в 4-хадресной ЭВМ требовалось 5200 Вт, что равносильно пяти современным электроутюгам. Отсюда пришли к выводу, что длинные регистры – это плохо. За счет чего можно уменьшить длину регистра? Команды в памяти ВМ расположены, как правило, последовательно. Поэтому из состава команды убрали один адрес – адрес следующей команды – и заменили его специальным регистром – счетчиком команд. После выполнения очередной команды к нему автоматически добавляется единица, и он указывает адрес следующей команды. Этот регистр назвали PC – программный счетчик. Затем, при появлении микропроцессоров и первых персональных компьютеров фирмы Intel, аббревиатуру PC стали использовать для обозначения персонального компьютера. Для регистра счетчика команд стали использовать IP (точка инструкции). Соответственно, в русском языке для обозначения данного регистра используют аббревиатуры СК (счетчик команд), САК (счетчик адреса команды) или УК (указатель команды). Вы должны знать, что применительно к регистру адреса команды это одно и то же. В результате удаления одного адресного поля команда стала трехадресной (рис.2.4) и стала содержать 40 разрядов. Следовательно, регистр стал потреблять меньше электроэнергии, получили экономию и в количестве аппаратуры. 23 OP 4 разряда AD1 12 разрядов AD2 12 разрядов ADR 12 разрядов Рис.2.4. Формат 3-хадресной команды: OP- код операции, AD1, AD2 – адреса 1-го и 2-го операндов, ADR – адрес результата. В дальнейшем в фирме IBM ввели двухадресные команды. В результате исследований выяснили, что в 70% случаев результат может заменить один из операндов, поскольку тот более не участвует в вычислениях. Естественно, при этом усложнился компилятор, поскольку в оставшихся 30% случаев необходимо сохранять значение второго операнда для последующих вычислений. Это действие возложили на компилятор, чтобы не изменять уже разработанные программы. В результате команда приобрела вид, показанный на рис.2.5, причем второе адресное поле содержит до операции адрес второго операнда, а после выполнения операции – адрес результата. OP 4 разряда AD1 12 разрядов AD2, ADR 12 разрядов Рис.2.5. Формат 2-хадресной команды. При таком формате команд в регистре команд осталось 28 разрядов. Но аппетит приходит во время еды. Задумались, нельзя ли обойтись только одним адресом операнда? Провели исследования, которые показали, что в большинстве случаев результат предыдущего вычисления используется как операнд следующего вычисления. Поэтому в архитектуру процессора добавили еще один регистр – аккумулятор, который использовался для хранения как первого операнда, так и результата операции (рис.2.6). При этом команда выполняется по алгоритму: AC ← AC ʘ M[AD], Где AC – аккумулятор; ʘ – любая операция ВМ; M[AD] – содержимое памяти по адресу AD. Размер регистра команды уменьшился до 16 разрядов. OP 4 разряда AD 12 разрядов Рис.2.6. Формат одноадресной команды: OP – код операции, AD адрес операнда. Наконец, сделали следующий шаг. Придумали совсем безадресные команды. Для этого применили особую структуру памяти – стек. Стек – это такая структура памяти, которая растет вверх и используется сверху по принципу последним пришел – первым вышел. (LIFO – last input first output или FILO – first input last output) (рис.2.7). 24 PUSH POP Рис.2.7. Стековая структура. Для обращения со стеком используются специальные команды: PUSH – положить в стек, и POP – взять из стека. 2.3. Примеры выполнения простой программы на ВМ Рассмотрим выполнение простой программы на ВМ с различными форматами команд. В качестве примера возьмем вычисление функции Q=B*C + D*E. Это выражение содержит две операции умножения и одну операцию сложения. Предположим, что программа, выполняющая данную функцию, находится в памяти, начиная с адреса 11. Для 4-хадресной ВМ данная программа может быть представлена следующей последовательностью команд: 11 MUL B, C, T1, 12 // T1← B*C 12 MUL D, E, T2, 13 // T2← D*E 13 ADD T1, T2, Q, 14 // Q←T1+ = B*C + D*E Здесь B, C, D, E, Q – адреса ячеек памяти, где хранятся соответствующие числа. T1 и T2 – адреса вспомогательных ячеек памяти. Для удобства восприятия команд необходимо в тексте программы оставлять комментарии, которые пишутся в строках программы после двух символов / (слэш). Комментарии могут быть достаточно объемными. У трѐхадресной ВМ благодаря введению специального регистра – счетчика команд – исключено поле адреса команды. Поэтому для такой ВМ имеем следующий текст программы: 11 MUL B, C, T1 // T1← B*C 12 MUL D, E, T2 // T2← D*E 13 ADD T1, T2, Q // Q←T1+ = B*C + D*E Для двухадресной ЭВМ, которая имеет формат команды, приведенный на рис.2.5, имеем следующее: MUL B, C // C ← B*C MUL D, E // E ← D*E ADD C, E // E←C + E MOV E,Q // Q←E Некоторые варианты ВМ размещают результат по адресу не второго, а первого операнда (рис. 2.8). Но это различие не принципиально. 25 AD1 ADR OP AD2 Рис.2.8. Альтернативный формат 2-хадресной команды. Для одноадресной ВМ один из операндов перед исполнением команды должен находиться в аккумуляторе. Для этого вводится понятие загрузки аккумулятора. Вводится команда LOAD, LD или специально для загрузки аккумулятора LDA. Также вводится команда выгрузки из аккумулятора «запомнить» – STORE, ST или для аккумулятора STA. Тогда имеем: LDA B // AC ← B MUL C // AC← B*C STA T1 // T1 ← AC LDA D // AC ← D MUL E // AC ← AC*D ADD T1 // AC ← AC + T1 = B*C + D*E STA Q // Q ← AC = B*C + D*E Как видим, при уменьшении длины формата команды программа увеличивается в количестве слов, требуемых для выполнения той же функции. Это и понятно, ведь при уменьшении информативности команды (она становится короче) длина программы увеличивается. Для стековой ЭВМ имеются одноадресные команды загрузки операндов в стек и выгрузки результата, а также безадресные команды выполнения операций (рис.2.9). B C B PUSH B PUSH C B*C MUL D B*C E D B*C PUSH D PUSH E D*E B*C B*C+ D*E MUL ADD POP Q Рис.2.9. Пример выполнения вычислений на стековой ВМ. Сравним вычисления на ВМ с различной адресностью (табл. 2.1). Анализ таблицы позволяет сказать, что при уменьшении количества полей в команде уменьшается общая длина программы, но увеличивается количество строк программы, поскольку информативность каждой команды падает. Таблица 2.1. Сравнение вычислений Адресность команды 4 3 2 1 стек Длина команды, разрядов 52 40 28 16 4 16 Количество строк программы 3 3 4 7 3 5 26 Длина программы, бит 156 120 112 112 92 2.4. Работа с памятью Прежде чем переходить к вопросам использования памяти кратко остановимся на вопросах двоичной системы счисления применительно к содержанию нашей дисциплины. Позиционные системы счисления Индусы в древности сделали великое изобретение – они изобрели позиционную систему счисления. Индусы поняли, что ничто, т. е. отсутствие чеголибо, должно обозначаться отдельным значком – нулѐм. Известно, что систем счисления много, есть, например, непозиционные системы счисления, к числу которых относят так называемую римскую систему счисления. В ней ноль не применяется. Индусы сделали исторически важный шаг к позиционным системам счисления и стали использовать десятичную систему счисления (10ССч). Что значит десятичная система? Это означает, что есть основание системы – 10, и есть десять различных значков (0, 1,…, 9), обозначающих цифры. Число изображается последовательностью цифр, каждая из которых стоит на своей позиции, обозначающей «вес» данной цифры в числе: (9307)10 = 9*103 + 3*102 + 0*101 + 7*100 В двоичной системе счисления (2ССч), соответственно, основание равно двум и таких значков два – 0 и 1. Из-за этого она имеет очень интересные свойства. Число в двоичной системе счисления представляется тоже последовательностью нулей и единиц: (1101)2 = 1*23 + 1*22 + 0*21 + 1*20 = 23 +22 +20 = 8 + 4 + 1 = 13. Как видно, двоичная система очень проста, она сводится к использованию степеней двойки, которые надо выучить. Распространено мнение, что в дисциплине, которую мы изучаем, ничего не надо помнить, надо только всѐ понимать. Это не совсем так. К примеру, в медицинском институте на первом курсе надо выучить наименования примерно 150 косточек, из которых состоит скелет человека. Каждый практикующий врач эти наименования помнит всю свою жизнь. Те, кто пришли сюда учиться вычислительной технике и информационным технологиям, должны небольшое количество степеней двойки знать и помнить, чтобы не обращаться каждый раз к таблицам или Интернету за конкретным значением. Ведь что мы можем сказать, например, о враче, который каждый раз при диагностировании болезни или выписке лекарства лезет в Интернет? Думаю, у вас не возникает желания повторно обратиться к такому врачу. Так и вам необходимо помнить степени двойки, чтобы, например, спокойно работать с памятью. 27 Степени двойки, которые надо знать в ту и другую сторону, приведены в табл. 2.2. Эти сведения вы должны знать и уметь применять их в своей работе, в том числе бегло использовать на практических занятиях по нашей дисциплине. Например, при переводе чисел из двоичной системы счисления в десятичную и обратно. Таблица 2.2. Степени двойки 20 = 1 К = 210 1 2 =2 М = 220 22 = 4 Г = 230 3 2 =8 Т = 240 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 10 2 = 1024 = 1К Несколько примеров: Перевод чисел из 2ССч в 10ССч: (1001001)2 = 64 + 8 + 1 = (73)10. Или значение байта (11101111)2 = 255 – 16 = (239)10. Обратный перевод: (25)10 = 16 + 8 + 1 = (11001)2, 16 есть, 8 есть, 4 нет, 2 нет, 1 есть. (43)10 = 32 + 8 + 1 = (101001)2, 32 есть, 16 нет, 8 есть, 4 нет, 2 нет, 1 есть. Ещѐ следует отметить отличия приведенных обозначений от обозначений метрической системы мер. К = 1024, а не 1000. Здесь полезно знать анекдот: Чем отличается начинающий программист от законченного? Начинающий думает, что К = 1000, а законченный считает, что в километре 1024 метра. В некоторых случаях необходимо уметь подсчитывать число двоичных комбинаций, реализуемых двоичным числом с заданным количеством разрядов. Это важно при работе с памятью. Давайте этот вопрос рассмотрим. Если имеем два десятичных разряда, то сколько комбинаций можно реализовать двузначным десятичным числом? 102 = 100. Аналогично в двоичной системе. Например, громкость звука в смартфоне задается значением байта. Сколько всего градаций громкости можно установить? 28 = 256. Или ещѐ пример. В салоне связи объявление: Наши смартфоны передают 16 миллионов цветов. Сколько разрядов двоичного числа используется для обозначения цвета? Цвет пикселя кодируется смешением трех составляющих – красный, синий и зелѐный. Для каждого используется байт – 8 разрядов. Всего 24 разряда, что соответствует количеству 224 = 24 * 220 = 16М. Т. е. действительно более 16 млн градаций цвета. 28 Все эти вычисления будут нужны, особенно при работе с памятью. Структурная схема памяти Структурная схема памяти (Memory, M) приведена на рис. 2.10. Рис.2.10. Структурная схема памяти. Память М должна быть снабжена двумя регистрами: MAR – регистр адреса памяти и MDR – регистр данных памяти. MAR указывает ячейку, с которой производится обмен данными (запись или считывание), а MDR либо принимает считываемые из памяти данные, либо передает данные, записываемые в память. W/R – сигнал управления памятью (W – запись, R – считывание или хранение данных). Работа памяти записывается на языке регистровых передач RTL в виде: W/R : M[MAR] ← MDR. Это означает действие, которое происходит по управляющему сигналу W/R. Если сигнал W/R равен 1, то в ячейку памяти с адресом MAR записывается содержимое регистра MDR. Если W/R = 0, то это действие не совершается. ––– Если записано W/R : MDR ← M[MAR], то наоборот: если W/R = 0, то в регистр MDR записывается содержимое ячейки памяти, адрес которой содержится в MAR, а если сигнал W/R равен 1, то это действие не совершается. У первых вычислительных машин оперативную память составляли 4К ячеек, каждая ячейка содержала слово из 31 двоичного разряда. В начале никаких байтов не было, не существовало такой единицы как байт. Машины строились самые разные – на 23 разряда, на 27 разрядов и т.д. Беда состояла в том, что эти машины никак не стыковались между собой, не были совместимы. Первыми эту проблему решили специалисты фирмы IBM. Они ввели понятие байт и создали серию машин IBM 360, которые имели одинаковое число разрядов памяти. Пусть в современной ВМ имеется 4 Гбайт оперативной памяти. Как это записать в формализованном виде? 4Гб = 22*230 байт = 232 байт. Это соответству29 ет наличию 232 ячеек ѐмкостью по 8 двоичных разрядов. Т. е. 232 * 23 разрядов. Но не 235 разрядов. Поскольку разряды разные: 32 разряда – это адрес, 3 разряда – данные. Развитие микропроцессоров Микропроцессоры сначала были 4-хразрядные. Но они обладали небольшими возможностями вычислений и адресации и не получили широкого распространения. Появились 8-разрядные микропроцессоры. В этих микропроцессорах все регистры, в том числе MAR и MDR – регистр адреса и регистр данных памяти – имели по восемь разрядов. Какой же объѐм памяти использовался с этими микропроцессорами? 256 ячеек по восемь разрядов. Затем появились микропроцессоры 16-разрядные. В них регистр MAR содержал 16 разрядов. Т. е. память для этих процессоров составляла 216 ячеек или иными словами 64К ячеек. Далее появились 32-разрядные микропроцессоры. Соответственно, в таком микропроцессоре MAR мог иметь до 32 разрядов. Допустимая память могла составлять 232 ячеек. Но оперативная память была очень дорогая. Практически реализовать такой объѐм памяти стало возможным только во втором десятилетии XXI века. До этого объѐм оперативной памяти диктовался операционной системой (ОС). К примеру, ОС Windows95 требовала наличие памяти 128 Мб. Какой же размер имел регистр MAR для этой ОС? – 27 разрядов: 128 Мб = 27*220 = 227 байт. 30 3. АРХИТЕКТУРА ВМ Рассмотрение архитектуры ВМ можно проводить, по крайней мере, двумя путями. Либо рассмотреть конкретную ВМ и строить выводы для других ВМ. Либо рассматривать по порядку, как в учебнике. Будем рассматривать архитектуру ВМ на примере некоторой учебной ВМ, и потом можно будет легче усвоить, как построена любая другая ВМ. 3.1. Логическое проектирование учебной ВМ Для построения структуры ВМ необходимо выполнить ряд этапов. 1) Выбор системы команд. Для примера выберем одноадресную ВМ. 2) Разрядность ВМ. Обычно разрядность выбирают кратной байту – восьми битам. 8 бит для ВМ уже слишком мало. Современные ВМ обычно 32-х или 64-х разрядные. Для упрощения рассмотрения выберем разрядность слова в ВМ 16. 3) Зададим объѐм памяти ВМ. ВМ будет универсальная, т.е. предназначенная для решения широкого круга разнообразных задач. Первые ВМ имели оперативную память 4К слов. Поэтому для учебной ВМ тоже выберем такую память. Естественно, современные ВМ имеют память Гигабайт и более. 4) Определимся с разрядностью регистров. Регистр адреса памяти MAR в соответствии с объемом памяти 4К слов (4К 12 = 2 ) должен иметь 12 разрядов. Регистр данных памяти MDR в соответствии с разрядностью слова ВМ должен иметь 16 разрядов. Формат команды содержит всего два поля – поле кода операции и поле адреса операнда. Выберем количество команд в нашей учебной ВМ 16. Тогда поле кода операции будет содержать 4 разряда, а поле адреса – 12 разрядов. Всего длина команды соответствует 16 разрядам, т. е. полному машинному слову. Счетчик команд должен иметь возможность адресации во всем объеме оперативной памяти ВМ, поэтому содержит 12 разрядов. Регистр команды IR должен содержать саму команду – 16 разрядов. Аккумулятор – соответствует разрядности слова в ВМ – 16 разрядов. Таким образом, в составе ВМ будут иметься регистры: PC, MAR, MDR, IR, AC. Кроме того, в состав процессора ВМ входят регистр ввода INPR и регистр вывода OUTR, необходимые для связи с устройствами ввода и вывода информации. Их длина обычно составляет 1 байт. Также имеется арифметико31 логическое устройство (АЛУ). С составом ВМ определились. Как соединены составные части ВМ определим позже. 5) Зададим систему команд учебной ВМ. Она представлена в табл. 3.1. Таблица 3.1. Система машинных команд учебной ВМ. № и обозначение команды 0 q0 1 q1 2 q2 3 q3 4 q4 5 q5 6 q6 7 q7 8 q8 9 q9 10 q10 11 q11 12 q12 13 q13 14 q14 15 q15 Код команды Команда LDA STA ADD SUB AND OR XOR COM NEG INC DEC JMP CLEA INCA INP OUT 2 16 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 A B C D E F Адрес Расшифровка команды AD AD AD AD AD AD AD AD AD AD AD AD AD=FFF* AD=FFF* AD=FFF* AD=FFF* AC←M[AD] M[AD] ← AC AC← AC+ M[AD] AC← AC- M[AD] AC← AC˄M[AD] AC← AC۷M[AD] AC← AC M[AD] AC← (обратный код) AC← AC←M[AD]+1 AC←M[AD]-1 PC←AD (переход) AC←0 AC← AC+1 AC← INPR (ввод) OUTR ← AC (вывод) Обычно ВМ содержит команды различной длины – безадресные, одноадресные, двухадресные и др. В нашей учебной ВМ мы рассматриваем все команды единой длины равной 16 двоичным разрядам. Поэтому безадресные команды (с номерами от 12 до 15) содержат фиктивный адрес, равный FFF16, что означает заполнение единицами адресного поля. Рассмотрим, как расшифровывается содержимое регистра команд. Пусть IR = 0011 0001 0010 10002 = 312816 . Первое поле длиной 4 разряда – это код команды. В нашем примере команда 3 – это операция вычитания SUB. Остальные 12 разрядов – это адрес ячейки памяти, где находится второй операнд. Первый операнд уже должен находиться в аккумуляторе. 3.2. Центральный процессор Центральный процессор (ЦП) – главный элемент ВМ, который реализует выполнение команд. Он состоит из устройства управления (УУ) и операционного устройства (ОУ). В состав ЦП входят АЛУ – арифметико-логическое устройство и регистры: PC – счетчик команд; 32 IR – регистр команды; AC – аккумулятор; MAR – регистр адреса памяти; MDR – регистр данных памяти; INPR, OUTR – регистры ввода и вывода данных. Кроме этого в состав УУ и ОУ ЦП входят другие устройства. Рассмотрим подробнее структуру и функции ОУ и УУ центрального процессора. 3.3. ОУ ЦП учебной ВМ Приступим к рассмотрению работы АЛУ. На рис. 3.1 представлены восемь схем одного и того же сумматора, отличающихся управляющими сигналами. На представленных схемах на первый вход сумматора всегда подается одно и то же число А. На самом деле это не всегда так, что мы покажем впоследствии. У сумматора обозначены два информационных входа, вход переноса в младший разряд сумматора C0 и информационный выход. Символами S1S0 обозначены управляющие входы сумматора. Обозначениями 00..0 и 11…1 помечены развѐрнутый нуль и развернутая единица – числа, содержащие во всех разрядах информационного входа нули и единицы, соответственно. Рис.3.1. Иллюстрация работы сумматора в арифметической части АЛУ. При состояниях управляющих входов S1, S0 и C0 равных 000 и 001 информационный выход сумматора равен А и А+1, соответственно. Это соответствует прибавлению к числу А нуля без единицы переноса в первом случае и с единицей переноса ‒ во втором. При наличии на входах S1, S0 и C0 состояний 010 и 011 имеем на информационном выходе сумматора А+В и А+В+1, соответственно, поскольку в этих 33 случаях на второй информационный вход сумматора подаѐтся число В. Рассмотрим случай наличия на входах S1, S0 и C0 состояния 101. В этом случае сумматор выполняет вычисление А+ +1, где символом обозначено число «не В» (инверсия В), т. е. число В, в котором все двоичные разряды проинвертированы. Из курса информатики известно, что инверсия В есть обратный код В, а если к последнему прибавить 1, то получается дополнительный код В. Если к А прибавить дополнительный код В, это означает, что из А вычитается В. В результате имеем А–В. В случае наличия на входах S1, S0 и C0 состояния 100, единица переноса не добавляется, что эквивалентно вычитанию единицы из разности чисел на информационных входах: А–В–1. В случае наличия на входах S1, S0 и C0 состояния 110 имеем сумматор, в котором к числу А добавляется число, имеющее единицы во всех двоичных разрядах. Это эквивалентно прибавлению к числу А дополнительного кода единицы, ведь обратный код единицы – это все единицы, кроме младшего разряда. Если прибавить ещѐ единицу в младший разряд, то получим двоичное число, состоящее из всех единиц. Следовательно, прибавление к числу А дополнительного кода единицы соответствует вычитанию из А единицы: А–1. При наличии на входах S1, S0 и C0 состояния 111 к последнему результату добавляется единица переноса в младший разряд. Получаем А–1+1 = А. Это повторная операция передачи значения А на выход сумматора. Рассмотрим схему, представленную на рис.3.2. Рис. 3.2. Схема арифметической части АЛУ. Схемы совпадения «&» на рис.3.2 можно рассматривать как вентили, один вход которых является информационным, а другой – управляющим. Поэтому схема, состоящая из инвертора, двух элементов совпадения и схемы «ИЛИ» обеспечивает подключение ко входу В сумматора различных вариантов входного сигнала в соответствии с таблицей, приведенной на рис. 3.2. При реализации такой схемы в каждом разряде машинного слова и использовании сумматора, 34 соответствующего по разрядности машинному слову, схема, приведенная на рис. 3.2, реализует рассмотренные на рис. 3.1 арифметические операции АЛУ при различных значениях управляющих входов S1, S0 и C0. АЛУ должно обеспечивать выполнение как арифметических, так и логических функций. Введѐм ещѐ один управляющий сигнал М. Условимся, что при значении управляющего сигнала М=1 будут выполняться логические функции, а при значении М=0 – арифметические. В качестве логических функций будем рассматривать функции ИЛИ, исключающее ИЛИ, И и инверсию. Это – основные логические операции. Они легко реализуются с помощью элементарных логических схем. Причѐм управляющие входы S1 и S0 снова будут использоваться для выбора разных логических операций в соответствии с табл. 3.2. Таблица 3.2. Логические микрооперации АЛУ S1 0 0 1 1 S0 0 1 0 1 Операция А˅В А В А˄В Ā Наименование ИЛИ Искл.ИЛИ И Не А В итоге перечень микроопераций АЛУ задаѐтся таблицей 3.3. Причѐм для логических микроопераций значение управляющего входа C0 является неопределѐнным, поскольку логические операции выполняются поразрядно без использования сигналов переноса. Таблица 3.3. Таблица микроопераций АЛУ M S1 S0 C0 Микрооперации Наименование 0 0 0 0 A Передача А 0 0 0 1 A+1 Инкремент А 0 0 1 0 A+B Сумма 0 0 1 1 A+B+1 Сумма с инкрементом 0 1 0 0 A-B-1 Разность с декрементом 0 1 0 1 A-B Разность 0 1 1 0 A-1 Декремент А 0 1 1 1 A Передача А 1 0 0 Х A۷B ИЛИ 1 0 1 Х Искл. ИЛИ A B 1 1 0 Х A۸B И 1 1 1 Х Не А Рассмотрим пример. Пусть на входах АЛУ имеется: M S1 S0 C0 = 0101, А = 1011, В = 0011. Какое значение будет на выходе АЛУ? Решение: По значениям управляющих входов M S1 S0 C0 = 0101 определяем, что АЛУ выполняет микрооперацию вычитания: A‒B. Для указанных значений информационных входов получаем результат 1000. 35 Естественно, для решения подобных задач, в том числе при промежуточной аттестации по данной дисциплине, необходимо знать или иметь при себе эту таблицу микроопераций АЛУ. С составом ОУ ЦП, т.е. с регистрами и АЛУ, мы определились. Теперь надо рассмотреть, каким образом они соединены. Прежде всего, вспомним сведения, известные из курса информатики. Дешифратор Это устройство, которое имеет единицу только на одном из выходов, соответствующему коду входных информационных сигналов. Обозначение дешифратора на схемах приведено на рис.3.3. Рис. 3.3. Дешифратор (а) и его таблица соответствия (б). Вход Е означает разрешение работы дешифратора. Этот вход обычно делают инверсным. Если разрешение есть, то =0, и один из выходов в соответствии с кодом входных информационных сигналов дешифратора равен 1. Если E=1, то независимо от состояния входных сигналов все выходы дешифратора равны 0. Мультиплексор Из многих информационных входов I0…I3 мультиплексор подает на выход один, соответствующий коду, установленному на управляющих входах a1, a0. Структурная схема мультиплексора имеет вид, представленный на рис.3.4. Рис. 3.4. Мультиплексор (а) и его таблица соответствия (б). Регистр Регистры (рис.3.5) обычно строятся на D триггерах. 36 Рис. 3.5. Обозначение регистра. На вход С подается синхросигнал. Регистр может срабатывать по переднему или по заднему фронту синхроимпульса. Вход S – управляющий. При S=0 регистр осуществляет хранение информации. При S=1 регистр переписывает свое состояние по синхросигналу в соответствии с состоянием входных информационных сигналов. Синхросигнал обычно подается в виде импульса. При этом регистр изменяет свое состояние по переднему (возрастающему) или по заднему (спадающему) фронту импульса. В первом случае вход С обозначается с наклонным штрихом слева-снизу направо-вверх, во втором – со штрихом слева-сверху направо-вниз. Рассмотрим схему операционного устройства центрального процессора. Сначала рассмотрим упрощенную схему (рис.3.6). Затем усложним еѐ. На рис.3.6 приведена схема шинной организации операционной части центрального процессора, где основные действия выполняет АЛУ, выполняющее микрооперации в соответствии с табл. 3.3. К информационным входам А и В АЛУ через мультиплексоры MSA и MSB подключаются выходы одного из регистров RG0, RG1, RG2 или входная шина АЛУ «Вход». Мультиплексоры по управляющим сигналам выбирают нужный регистр или вход АЛУ. АЛУ выполняет над ними операцию и результат выдаѐтся дальше в машину по шине S и направляется в регистры RG0, RG1, RG2. Рис. 3.6. Схема вспомогательная. 37 Чтобы это операционное устройство работало, нужно, чтобы устройство управления выдавало ему управляющие сигналы на мультиплексоры, АЛУ, дешифратор DC и т.д. То, что выдаѐт устройство управления, называется в учебной и научной литературе управляющим словом процессора. В журнальной литературе его иногда называют микрокодом. Например, при обновлении программного обеспечения смартфона обновляются его микрокоды. Из чего состоит управляющее слово процессора? Для схемы на рис.3.6 оно состоит из разрядов управления – по два разряда на мультиплексоры MSA и MSB, четыре разряда на АЛУ и три разряда на дешифратор DC: MSA a1 АЛУ MSB a0 a1 a0 M S1 S0 DC C0 E X2 X1 Допустим, что нам надо выполнить операцию RG1 ← RG2 + RG0. Тогда управляющее слово процессора должно иметь вид: MSA a1 1 a0 0 АЛУ MSB a1 0 a0 0 M 0 S1 0 S0 1 DC C0 0 E 0 X2 0 X1 1 Рассмотрим ещѐ пример RG2← Вход. Управляющее слово процессора должно иметь вид: MSA a1 1 a0 1 АЛУ MSB a1 х a0 х M 0 S1 0 S0 0 DC C0 0 E 0 X2 1 X1 0 Здесь символом х обозначен неопределенный или безразличный код, потому что вход В в данной микрооперации не участвует. Для микрооперации S ← RG1, т. е. при передаче состояния регистра RG1 на выход операционного устройства имеем следующее управляющее слово процессора: MSA a1 0 a0 1 АЛУ MSB a1 х a0 х M 0 S1 0 S0 0 DC C0 0 E 1 X2 х X1 х Поскольку в этом случае результат из АЛУ не должен попасть ни в один из регистров, вход Е дешифратора должен находиться в состоянии 1, а другие входы DC – в безразличном состоянии х. Рассмотрим более полный вариант схемы ОУ ЦП (рис.3.7), который содержит регистры учебной ВМ, приведенные в разделе 3.2. 38 Рис. 3.7. Схема ОУ ЦП. Управляющее слово ВМ будет составлено из управляющих разрядов мультиплексоров MSA и MSB (по три разряда), АЛУ и DС (по четыре разряда), мультиплексора MSM и памяти RAM (по одному разряду): MSA a2 a1 а0 MSB a2 a1 а0 M АЛУ S1 S0 C0 E X2 DC X1 X0 MSM RAM a0 WR Рассмотрим примеры управляющего слова ЦП для некоторых операций. AC ←AC + MDR MSA 001 MSB 100 АЛУ 0010 DC 0001 MSM x RAM 0 MSB xxx АЛУ 0000 DC 0011 MSM x RAM 0 АЛУ xxxx DC 0100 MSM 1 RAM 0 АЛУ xxxx DC 1xxx MSM x RAM 0 MAR ← PC MSA 000 MDR ← M[MAR] MSA xxx MSB xxx Пустой такт NOP MSA xxx MSB xxx Таким образом, мы спроектировали схему операционного устройства центрального процессора учебной ВМ. 39 3.4. Устройство управления ЦП Задача устройства управления – обеспечить выдачу управляющего слова (микрокода) ЦП. Обычно он записывается (прошивается) в постоянное запоминающее устройство (ПЗУ) УУ центрального процессора. Что должно делать УУ? У нас есть исполняемый код программы. Дальше в ходе выполнения исполняемого кода на ВМ им занимается операционная система – программа, которая выдаѐт команды для УУ ЦП (рис.3.8). Рис. 3.8. Алгоритм управления в ВМ. Последовательность работы устройства управления задается циклами. Для начала рассмотрим цикл выборки команды (рис.3.9). Ведь прежде чем выполнить команду, надо выбрать еѐ из памяти ВМ. Рис. 3.9. Цикл выборки команды. Для выборки команды из памяти ВМ надо выполнить 4 микрооперации: передать из регистра счетчика команд адрес команды в регистр адреса памяти; прочитать команду из ячейки памяти в регистр данных памяти; переслать команду из регистра данных памяти в регистр команды; подготовить счетчик команд для выборки следующей команды – инкрементировать PC. 40 Т. е., последовательно надо выполнить четыре действия, обозначенные на рис. 3.9 тактами в виде t0, t1, t2, t3. Следовательно, цикл выборки команды осуществляется за четыре такта – по одному такту на каждую микрооперацию. Далее следует цикл выполнение команды. Рассмотрим цикл выполнения команды на примере операции сложения (рис.3.10). Рис. 3.10. Цикл выполнения команды. Нулевой такт t0 – пересылка адреса операнда из регистра команды в регистр адреса памяти. Первый такт t1 – выборка из памяти операнда и размещение его в регистре данных памяти. Второй такт t2 – собственно выполнение сложения в АЛУ с размещением результата в аккумуляторе. Здесь мы рассматриваем выполнение команды с прямой адресацией, когда в адресном поле команды находится адрес операнда. ВМ фон Неймана первоначально была рассчитана, как и наша учебная ВМ, только для одного типа адресации – прямой адресации. Машину фон Неймана стали совершенствовать, поскольку для выполнения некоторых команд более удобными являются другие методы адресации операндов. Всего способов адресации насчитывается около 20. Из них в каждой конкретной ВМ используется только часть, по выбору конструкторов ВМ и в соответствии с назначением ВМ (ориентированием ВМ на обработку определѐнных видов информации). Рассмотрим выполнение команды LDA (загрузку аккумулятора) с помощью различных методов адресации. Допустим, что у нас в памяти содержится информация в соответствии с табл.3.4. Таблица 3.4. Содержимое памяти Адрес 30 40 50 Содержание 40 50 60 Прямая адресация: LDA 30 // загрузить в аккумулятор слово из ячейки с адресом 30. В результате выполнения команды АC ← 40. Непосредственная адресация: LDA # 30. // загрузить в аккумулятор слово 41 «30». В результате выполнения команды АC ← 30. Т. е. в команде содержится сам операнд, и загрузка его из памяти не требуется. Косвенная адресация: LDA @ 30. // загрузить в аккумулятор слово из ячейки, адрес которой находится в ячейке 30. В результате выполнения команды АC ← 50. Т. е. в команде содержится не адрес операнда, а адрес адреса операнда. Соответственно, для подготовки операции требуется двойное обращение к памяти. Существуют и другие способы адресации, которые здесь мы не будем рассматривать. Обычно ВМ используют несколько типов адресации, причѐм тип адресации обычно кодируется в специальном поле команды, содержащем необходимое количество разрядов. Для декодирования способа адресации и выполнения соответствующих действий по выборке операндов требуется наличие цикла дешифрации команды. Мы считаем, что в учебной ВМ используется только прямая адресация операндов. Поэтому мы при изучении учебной ВМ не рассматриваем цикл дешифрации команды. Таким образом, мы получили наличие в УУ ЦП следующих циклов: цикл выборки команды – С0, цикл дешифрации команды – С1, цикл выполнения команды – С2, цикл обработки прерывания – С3. Последний цикл необходим для обработки требований прерывания, вырабатываемых внешними устройствами ВМ (например, клавиатурой, устройством ввода/вывода и т.д.) или при появлении нештатных ситуаций при выполнении команд (деление на нуль, переполнение разрядов и др.). Позднее мы рассмотрим, как происходит цикл обработки прерывания. На основании изложенного алгоритм работы УУ ЦП имеет вид, представленный на рис. 3.11. 42 Рис. 3.11. Алгоритм работы устройства управления ЦП ВМ. 3.5. Структурная схема УУ ЦП Структурная схема УУ ЦП изображена на рис. 3.12. Рис. 3.12. Структурная схема УУ ЦП. В основе УУ имеется ПЗУ, вырабатывающее сигналы, которые управляют работой ОУ процессора. Генератор ВМ вырабатывает тактовую частоту. Сигнал SE представляет собой сигнал разрешения работы и останов. При SE = 0 сигналы генератора ВМ не проходят через схему совпадения, и схема управления не работает – останов. При SE = 1 сигналы генератора ВМ проходят через схему совпадения и поступают на вход двухразрядного счетчика, соединѐнного по выходу с дешифратором тактов. В ВМ такты не пересекаются по времени. 43 Логика работы дешифратора тактов приведена на рис. 3.13. Рис. 3.13. Временная диаграмма работы DС тактов. DС циклов работает по выходам двух триггеров F и R. В зависимости от состояния этих триггеров формируется сигнал на соответствующем его выходе, как это показано в табл.3.5. Таблица 3.5. Циклы УУ ЦП F 0 0 1 1 R Цикл Обозначение цикла 0 Выборки команды С0 1 Дешифрации команды С1 0 Выполнения команды С2 1 Прерывания С3 DС команд работает по состоянию разрядов регистра команд, соответствующих полю кода операции. В нашем случае код имеет четыре разряда, что соответствует 16 выходам дешифратора команд. Выходы всех трех дешифраторов составляют адрес ПЗУ, в котором записана (прошита) информация соответствующая содержимому управляющего слова процессора данного такта данного цикла данной команды. Такова в общем виде структура УУ ЦП. Рассмотрим для примера команду сложения ADD. Для неѐ в поле кода операции будет иметься значение 216. В адресном поле находится 12-разрядный адрес AD. Напишем микрокоманды циклов выборки и выполнения команды. F = 0, R = 0, С0 = 1 С0t0 : MAR← PC // подготовить выборку команды из памяти. С0t1 : MDR← M[MAR] // прочесть команду из памяти по адресу MAR. С0t2 : IR← MDR // поместить команду в регистр команды. С0t3 : PC← PC+1, F← 1 // подготовить адрес следующей команды, перейти к циклу выполнения команды. F=1, R=0, С2=1 q2С2t0 : MAR← IR(AD) // передать адрес операнда в регистр адреса памяти MAR. 44 q2С2t1 : MDR← M[MAR] // прочесть операнд из памяти по адресу MAR. q2С2t2 : AC← AC+MDR // выполнить сложение. q2С2t3 : F← 0 // перейти к циклу выборки команды. Так выполняются микрокоманды ВМ в циклах выборки и выполнения команды сложения. Аналогичным образом можно описать порядок выполнения любой команды из перечня машинных команд ВМ. Таким образом, мы рассмотрели архитектуру устройства управления и операционного устройства учебной ВМ и принципы ее работы. В результате мы получили следующую структурную схему ЦП (рис.3.14). Рис. 3.14. Структурная схема ЦП учебной ВМ. Как видно из схемы, ПЗУ может работать и без дешифраторов на входе, т. е. к адресным входам ПЗУ подключены непосредственно выходы счетчика тактов, выходы регистров F, R и выходы поля кода операции регистра команды IR. Благодаря этому адрес ПЗУ состоит из восьми разрядов, и ѐмкость ПЗУ существенно уменьшается без потери функциональности. На выходе ПЗУ имеется управляющее слово ЦП, состоящее из 18 разрядов. Это слово поступает на соответствующие управляющие входы устройств операционного устройства ВМ. На схеме отдельно выделены регистры вводавывода, предназначенные для связи ВМ с внешним миром, а также показан регистр команды IR, который входит одновременно в состав УУ и ОУ ЦП ВМ. По принципу формирования и развертывания временной последовательности управляющих сигналов (способу построения цикла работы ВМ и ее устройства управления), различают устройства управления аппаратного и микропрограммного типов. В устройстве управления аппаратного (схемного) типа устройство управления ЦП представляет собой комбинационную схему, в которой требуемое множество состояний задается множеством логических и запоминающих элементов, непо45 средственно (без вмешательства микропрограмм), реализующих функции переходов и выходов. Другими словами, вместо ПЗУ (на рис.3.14) устанавливается комбинационная схема из простейших логических элементов. Для каждого такта обеспечивается выбор требуемого набора элементов, что позволяет сформировать на выходах комбинационной схемы управляющее слово. Ясно, что всякое изменение управления требует изготовления новой комбинационной схемы, что эквивалентно перепроектированию устройства управления ЦП. В устройстве управления микропрограммного типа, как показано на рис.3.14, используется ПЗУ. Таким образом, устройство управления ЦП выполняет функции блока хранения и выборки кодов микроопераций. Микропрограммный принцип управления предоставляет более гибкие возможности для перенастройки ЦП при частичной модификации системы команд; для этого достаточно поменять микросхему с ПЗУ, в которой «зашита» система микропрограмм на эту же микросхему, но с другой настройкой («прошивкой»). Такие изменения при схемной реализации невозможны. Однако схемная реализация существенно превосходит микропрограммную по быстродействию. В современных ЭВМ общего назначения (универсальных ВМ) используется микропрограммное управление, а в специализированных ВМ для достижения максимальной производительности – схемное. 3.6. Выполнение команд в учебной ВМ Рассмотрим пример выполнения на одноадресной ВМ вычисления функции x = y + z. Для этого следует выполнить следующие команды: LDA y // загрузить в АС из памяти число из ячейки памяти с адресом y. ADD z // просуммировать содержимое АС с числом, взятым из ячейки памяти с адресом z, результат поместить в АС. STA x // выгрузить результат из АС в ячейку памяти с адресом x. Пусть после трансляции программы данный код находится в области памяти с начальным адресом 125, а данные находятся в области памяти с начальным адресом 250. Тогда в памяти имеются программа и данные (табл.3.6). Таблица 3.6. Исходные данные Адрес Содержимое Примечание 125 0250 LDA 250 126 2251 ADD 251 127 1252 STA 252 … 250 1023 y 251 41AC z 252 0000 x 46 Изменения состояния регистров ВМ и памяти при выполнении данной программы приведены в табл.3.7. Таблица 3.7.Изменения состояния регистров ОУ при выполнении команд После выполнения LDA Команда ADD ← AC + MDR: C0t0 : MAR ← PC C0t1 : MDR ← M[MAR] C0t2 : IR ← MDR C0t3 : PC ← PC + 1, F ← 1 q2C1t0 : MAR ← IR(AD) q2C1t1 : MDR ← M[MAR] q2C1t2 : AC ← AC + MDR q2C1t3 : F ← 0 Команда STA 252: M[x] ← AC C0t0 : MAR ← PC C0t1 : MDR ← M[MAR] C0t2 : IR ← MDR C0t3 : PC ← PC + 1, F ← 1 q1C1t0 : MAR ← IR(AD) q1C1t1 : MDR ← AC q1C1t2 : M[MAR] ← MDR q1C1t3 : F ← 0 PC MAR MDR IR 126 250 1023 0250 126 AC 1023 M[252] 0000 126 2251 2251 127 251 41AC 51CF 127 1252 1252 128 252 51CF 51CF Примечание к строке «C1t2 : AC ← AC + MDR» : 102316 + 41AC16 = 51CF16. Следует отметить, что в учебной ВМ нет отдельной микрооперации (табл. 3.3), выполняющей функцию AC ← 0, соответствующую машинной команде q12 системы команд (табл. 3.1). Для получения нулевого состояния регистра следует выполнить арифметическую операцию вычитания (АС←АС-АС) или логическую операцию искл. ИЛИ (АС← АС АС). Причѐм последняя операция предпочтительнее, поскольку логические операции не учитывают переносы из одного разряда в другой и в принципе могут выполняться за менее длительное время. При выполнении практических работ обучающиеся часто делают ошибки при вычислении операций вычитания чисел в 16-ричном коде. Это связано с необходимостью заѐма из старших разрядов первого операнда, если в младшем разряде цифра второго операнда превышает соответствующую цифру в первом операнде. Рекомендуется вместо операции вычитания 16-ричных чисел использовать операцию суммирования первого операнда с дополнительным кодом вычитаемого числа. В этом случае ошибки обычно не появляются. 47 4. СИСТЕМА ПРЕРЫВАНИЙ Прерывание – это сигнал, по которому процессор воспринимает сведения о совершении некоторого события, асинхронного по отношению к выполняемой программе. Иными словами, прерывание является ответом вычислительной системы на наступление любого события, нарушающего последовательное выполнение команд текущей программы. При прерывании изменяется естественный порядок выполнения программы, что связано с необходимостью реакции вычислительной машины на работу внешних устройств, а также на ошибки и особые ситуации, возникшие при выполнении программы. Реакция ВМ на наступившее событие состоит в выполнении программы обработки данного прерывания, специфической для каждой возникшей ситуации, после выполнения которой, если это возможно, возобновляется работа прерванной программы. Прерывания можно подразделить на три типа - внутренние, внешние и внепроцессорные. Внутренние прерывания. К ним относятся: группа программных прерываний (деление на нуль, переполнение, неверная адресация и т. п.), прерывания от схем контроля машины, сбоев системы питания и др. При обработке прерываний этого типа выдается сообщение о причине прерывания, текущая программа прекращает выполнение и осуществляется переход к реализации другой программы. В случае, если дальнейшее функционирование ВМ невозможно, то единственным действием является выдача сообщения, локализующего причину отказа. Внешние прерывания. В эту группу прерываний входят прерывания от внешних устройств. Обработка таких прерываний, связанных, как правило, с процедурами обмена данными между ОЗУ и внешними устройствами, обычно сводится к выполнению программы, реализующей обмен с устройством конкретного типа – драйвера (драйвер клавиатуры, драйвер монитора и т. п.). Внепроцессорные прерывания. Это такие прерывания, при обработке которых управление общей шиной передается от процессора к контроллеру внешнего устройства и реализацией дальнейшего обмена между устройством и основной памятью по общей шине напрямую без посредничества процессора, т. е. без запуска какого-либо драйвера. 48 4.1. Общая организация прерываний При реализации механизма прерывания аппаратные и программные средства ВМ используются совместно. На аппаратные средства обработки прерывания в процессоре ВМ возложены функции приостановки выполнения прерываемой программы, идентификации внешнего устройства, запросившего прерывание, и передача управления соответствующей программе обработки прерывания. Для корректного возврата в прерванную программу необходимо обеспечить сохранение информации, содержащейся в момент прерывания в тех регистрах процессора (регистры общего назначения, счетчик команд, регистр флагов и т. д.), которые используются программой обработки прерывания. При этом задача сохранения значений счетчика команд и регистра флагов, содержащего вектор состояния процессора, обычно решается аппаратными средствами обработки прерывания. Сохранение содержимого других регистров процессора производится непосредственно в программе обработки прерывания. 4.2. Системы прерываний с использованием векторов прерываний При обработке внешних прерываний процессором ВМ выполняются те же действия, что и при обращении к обычной подпрограмме. Различие состоит в том, что при обращении к подпрограмме эти действия инициируются командой выполняемой программы, а при обработке прерывания – управляющим сигналом Запрос (или Требование) прерывания, формируемым контроллером внешнего устройства. Эта важная особенность программно-управляемого ввода-вывода информации с прерыванием программы позволяет организовать обмен данными с внешними устройствами в произвольные моменты времени, не зависящие от программы, выполняемой в ЭВМ. Таким образом, появляется возможность обмена данными с внешними устройствами в реальном масштабе времени, определяемом внешней по отношению к ЭВМ средой (например, датчиками, следящими за состоянием технологического процесса). Прерывание программы по требованию внешнего устройства не должно оказывать на прерванную программу никакого влияния, кроме увеличения продолжительности еѐ выполнения за счет приостановки на время выполнения программы обработки прерывания. Формирование сигналов запросов прерываний происходит в контроллерах внешних устройств – электронных схемах, обеспечивающих связь этих устройств с процессором ВМ. Для каждого внешнего устройства имеется спе49 цифическая программа, обеспечивающая обслуживание прерывания – драйвер. Серийные ЭВМ обычно используют одноуровневую систему прерываний, в которой сигналы запроса прерывания от всех внешних устройств поступают на один вход процессора. Поэтому при поступлении запроса на прерывание необходимо определить, какое именно внешнее устройство запросило прерывание. В основном эта проблема идентификации внешнего устройства в современных ЭВМ, решается с помощью использования векторов прерываний. Каждому внешнему устройству, имеющему возможность запросить обслуживание, определяется уникальный для данной ВМ приоритет и соответствующий адрес вектора прерывания – ячейки основной памяти, в которой хранится адрес начала программы обработки прерывания данного устройства. Векторы всех программ обработки прерываний собраны в единую таблицу векторов прерываний, располагающуюся в самых младших адресах оперативной памяти. Таблица имеет объем 1 Кбайт и содержит четырѐхбайтные элементы (векторы прерываний) для 256 программ обработки прерываний. Т. к. таблица всегда имеет нулевой начальный адрес и длину вектора в четыре байта, чтобы определить адрес вектора для прерывания типа i, достаточно просто умножить это значение на 4. Вектор прерывания выдается аппаратной частью механизма обработки прерываний не одновременно с запросом на прерывание, а только по разрешению процессора. На рис.4.1 приведена одна из возможных схем аппаратной части контроллера прерываний. На рис.4.1 обозначено: IEN (Interrupt Enable) – прерывание разрешено; IST (Interrupt Status) – статус прерывания; INTACK – подтверждение прерывания; VAD – вектор адреса прерывания. Регистр прерываний составлен триггерами внешних устройств, устанавливаемыми в единичное состояние требованиями прерывания соответствующих контроллеров. Выходы триггеров поступают на входы приоритетного шифратора через элементы совпадения, вторые входы которых соединены с выходами регистра маски. Разряды этого регистра управляются ОС и устанавливаются в 0 при запрете прерывания соответствующего устройства и в 1, если прерывание разрешено. 50 Рис.4.1. Схема обработки требования прерывания от внешнего устройства. При поступлении хотя бы одного требования прерывания на входы приоритетного шифратора он устанавливает в единичное состояние свой выход Е и устанавливает код приоритета прерывания на других своих выходах в соответствии с табл.4.1. Таблица 4.1. Таблица соответствия приоритетного шифратора I0 1 0 0 0 0 I1 X 1 0 0 0 I2 X X 1 0 0 I3 X X X 1 0 Y 0 0 1 1 0 X 0 1 0 1 0 IST 1 1 1 1 0 В регистре прерываний устройства подключены в соответствии с их приоритетами. Чем выше приоритет, тем на меньший по значению вход приоритетного шифратора он поступает. Поэтому при одновременном поступлении требований прерывания от нескольких внешних устройств будет обрабатываться требование от устройства с высшим приоритетом. В начале оперативной памяти расположена таблица векторов прерываний. В каждой ячейке этой таблицы расположена команда безусловного перехода на начальный адрес соответствующей устройству программы обслуживания прерывания (ПОП). 4.3. Цикл прерывания Управлением циклов в УУ ЦП занимаются триггеры F и R. Рассмотрим, как происходит управление при поступлении требований прерывания. В такте С2t3 цикла выполнения команды вырабатывается сигнал 51 Если С2t3: Если С2t3: Т. е., если имеется требование прерывания и разрешено прерывание от ОС, то выполняется установка в 1 триггера R, что означает переход к циклу обработки прерывания. В этом цикле выполняются следующие действия: C3t0: M[SP] ← PC // запомнить адрес возврата в стеке. C3t1: INTACK ← 1, VAD ← CD // подтвердить обработку прерывания, занести в VAD вектор прерывания. C3t2: PC ← VAD / передать в счетчик команд адрес ПОП. C3t3: IEN ← 0, C ← C0 / Запретить прерывания, перейти к выборке команды, адрес которой находится в PC. Запрет прерывания необходим для того, чтобы обеспечить правильное выполнение прерывания, которое начал обслуживать процессор. В начале и в конце каждой ПОП имеются команды, которые нельзя прерывать. В начале каждого драйвера имеются следующие стандартные команды: Сбросить маски всех устройств, которые имеют приоритет ниже приоритета того устройства, прерывание которого обслуживается. Запомнить содержание тех регистров процессора основной (прерванной) программы, которые используются в драйвере. IEN ← 1 разрешить прерывания устройствам с более высоким приоритетом. Перейти к выполнению основной части драйвера УВВ. В конце драйвера: IEN ← 0 запретить прерывания. Восстановить содержание всех регистров процессора основной (прерванной) программы. Сбросить требование прерывания того устройства, которое обслуживалось. Восстановить регистр маски и шифратор приоритетный. Восстановить адрес возврата в прерванную программу из стека PC ← M[SP]. Разрешить прерывания IEN ← 1. Таким образом, мы рассмотрели мероприятия по обслуживанию прерываний и способ реализации этих мероприятий. 52 5. ОСНОВНЫЕ УСТРОЙСТВА ВМ 5.1. Структура и характеристики памяти Структура памяти. Минимальной единицей хранения информации в памяти является бит – один двоичный разряд, принимающий одно из двух состояний: 0 или 1. Из битов составляются более крупные единицы хранения информации – байт (8 разрядов), полуслово – 16 разрядов, слово – 32 разряда и двойное слово – 64 разряда. Длина байта для всех типов ВМ одинакова и составляет 8 двоичных разрядов. В большинстве ВМ байт – это минимальная адресуемая единица хранения информации в оперативной памяти. Длина машинного слова – важнейшая характеристика ВМ и составляет для разных ВМ величину 8, 16, 32 или 64 бита. Длина машинного слова соответствует разрядности шины данных системной магистрали ВМ. Модули памяти одного и того же типа вместе с блоками управления памятью составляют запоминающее устройство (ЗУ) ВМ. Например, оперативная память (ОП) и оперативное ЗУ. На практике часто термины память и запоминающее устройство используются как синонимы. К основным характеристикам памяти относятся: информационная ѐмкость, операции с памятью, время доступа к памяти, способ выборки информации, методы размещения и поиска информации, энергозависимость памяти. Информационная емкость. Информационная ѐмкость (просто ѐмкость или объѐм) памяти определяется количеством битов, байтов или слов. Так как ѐмкость памяти может быть очень велика, обычно используют более крупные единицы, образованные присоединением приставок К (кило – 210=1024), М (мега – 220=1048676), Г (гига – 230=1073741824), Т (тера – 240=1 099 511 627 776) к перечисленным единицам. Основными операциями с памятью являются Запись и Чтение (Выборка), поскольку ЗУ обеспечивают выполнение только одной функции – хранения информации. Операция Чтение (Выборка) доступна для любого типа памяти. При чтении как бы считывается копия данных, хранящихся в памяти, сама информация остаѐтся в памяти. Следовательно, можно неограниченное количество раз осуществлять считывание без изменения хранимой в ячейке памяти информации. Операция Запись доступна не для всех типов памяти и, если она доступна, приводит к безвозвратному уничтожению ранее записанной в ячейке памяти информации и замене еѐ новым содержимым. Время доступа к памяти характеризуется длительностью цикла считывания и цикла записи. Эти величины составляет время от момента выдачи про53 цессором сигнала на считывание или запись до момента окончания всех действий, связанных с выполнением операции, т. е. до момента готовности памяти к выполнению следующей операции. При равенстве величин циклов считывания и записи применяют термин цикл памяти. По способу выборки информации различают память с произвольной выборкой, если время доступа к памяти не зависит от местонахождения ячейки в памяти, и память с последовательной выборкой, когда время доступа зависит от местонахождения ячейки в памяти. По методу размещения и поиска информации различают память адресную, стековую и ассоциативную. Адресная обеспечивает доступ к ячейкам памяти по уникальному адресу ячейки. Стековая допускает запись и считывание информации только через вершину стека. Ассоциативная память позволяет осуществлять поиск информации по признакам содержимого еѐ ячеек. По возможности изменения информации различают память только для чтения (используется в постоянных ЗУ) и память, допускающая как чтение, так и запись информации (используется в оперативной памяти). По признаку сохранения информации при отключении питания различают энергозависимые ЗУ, в которых информация теряется даже при кратковременных прерываниях питания, и энергонезависимые ЗУ, которые продолжают хранить информацию при отключении питания. 5.2. Классы запоминающих устройств По своему функциональному назначению запоминающие устройства разделяют на крупные классы: регистровые внутренние запоминающие устройства; кэш-память; основная память; внешние запоминающие устройства (ВЗУ). Наиболее быстродействующей и небольшой по объѐму является регистровая память ВМ, состоящая из регистров специального назначения и общего назначения (РОН), расположенных в непосредственной близости от центрального процессора ВМ. Эта память используется для выполнения специальных функций (например, хранения адреса следующей выполняемой команды) или хранения временных данных, необходимых для функционирования ЦП. Наличие таких регистров позволяет процессору реже обращаться за данными к оперативной памяти и способствует повышению быстродействия ВМ. Сверхоперативная (или кэш-память) используется как буферная память, 54 расположенная между оперативной памятью и процессором, обеспечивает повышение быстродействия ВМ за счет сокращения трафика обмена информацией между процессором и ОП. Основную память ВМ составляют оперативная память, хранящая программный код и обрабатываемые данные при выполнении программ на ВМ, а также постоянное энергонезависимое ЗУ, работающее только на считывание информации и хранящее, например, программы начальной загрузки компьютера. Оперативная память представляет собой адресную память энергозависимого типа с произвольным доступом и обеспечивающую операции чтения и записи. К внешним ЗУ относятся энергонезависимые запоминающие устройства для долговременного хранения программ и данных (магнитные, оптические диски, магнитные ленты, флеш-карты). Общим признаком внешних устройств памяти является то, что процессор не имеет к ним непосредственного доступа. Для чтения информации с внешнего ЗУ она должна быть предварительно переписана в ОП, а эта перезапись ведѐтся блоками – минимальной адресуемой единицей хранения информации в ВЗУ. Размер блока обычно составляет 512 или 1024 байт. Оперативное запоминающее устройство Структура ОЗУ в обобщѐнном виде представлена на рис. 5.1. Порядок функционирования ОЗУ поясняется следующей последовательностью действий. Двоичный код адреса по адресной шине поступает в дешифратор адреса, который инициирует ячейку с соответствующим адресом. Рис. 5.1. Упрощенная схема ОЗУ, ОП – оперативная память. При операции чтения, о чѐм свидетельствует сигнал на шине сигнал чте55 ния, открываются линии от выбранной ячейки в буферный регистр считывания, в который поразрядно переписывается информация, хранимая в выбранной ячейке памяти. Эта информация становится доступной процессору по шине чтения. При операции записи (на шине сигнал записи есть сигнал) в ячейку поразрядно происходит запись информации, предварительно записанной по шине записи в буферный регистр записи. Для операции чтения не требуется предварительная запись информации в буферный регистр записи, поэтому цикл записи в общем виде длиннее, чем цикл чтения. Логическая структура ОП может состоять из байтов или более ѐмких единиц информации. Побайтная структура хорошо согласуется с хранением и обработкой символьной информации, но неэффективна при математических вычислениях, где для хранения чисел используются более длинные логические единицы хранения. Поэтому, например, для ВМ с машинным словом 32 бита возможны несколько вариантов логической организации ОП (рис.5.2). Рис.5.2. Логические хранилища информации в ОП. Постоянное запоминающее устройство Упрощенная структура ПЗУ отличается от структуры ОЗУ только отсутствием регистра записи (рис. 5.3). Основным назначением ПЗУ является хранение системных констант и микропрограмм. Рис.5.3. Упрощенная структура ПЗУ, ПП – постоянная память. 56 5.3. Классификация по методам доступа Адресная память ОЗУ и ПЗУ в общем виде рассмотрена в предыдущих параграфах. Поэтому рассмотрим память, характеризующуюся другими методами доступа. Стековая память На рис.5.4 приведена обобщѐнная структура стековой памяти. Она содержит определѐнное количество ячеек, причѐм доступ к такой памяти осуществляется только через верхнюю ячейку стека – вершину стека. Запись нового значения в стек приводит к смещению всего содержимого стека на одну ячейку вниз и к записи в верхнюю ячейку стека. При считывании слово читается из вершины стека, а всѐ содержимое стека сдвигается на одну ячейку вверх. Указатель стека показывает на вершину стека, т. е. на верхнюю заполненную ячейку стека. Когда стек пуст, указатель стека показывает на одну ячейку ниже дна стека. Рис.5.4. Структура стека (указатель стека – регистр, содержащий адрес вершины стека). Характер использования стека поясняется рис.5.5. Рис.5.5. Принцип работы со стеком. 57 Стековая память может быть реализована аппаратным или программным способом. При аппаратной реализации стека содержимое стека перемещается целиком при выполнении каждой операции. Поэтому проще в ВМ является программная реализация стека. Для стековой памяти в этом случае используется часть оперативной памяти. Алгоритмы функционирования в обоих вариантах реализации стековой памяти остаются одинаковыми (последним вошел – первым вышел), хотя есть внешние различия. В программной модели вершина стека плавающая: адрес вершины стека содержится в регистре-указателе стека. Такой стек растет не сверху вниз (ко дну стека), а снизу-вверх (от дна стека). Пример программной организации стека в ВМ с 32-разрядными словами приведен на рис. 5.6. Рис. 5.6. Модель стека, реализованная в оперативной памяти (дно стека располагается в ячейке с 8-ричным адресом 1000). Из рассмотрения рис. 5.6 видно, что при записи в стек сначала происходит его настройка на новую вершину (указатель стека уменьшает своѐ значение), а затем производится загрузка данного в стек. При считывании указатель стека увеличивает свое значение после извлечения данного из вершины стека. Поэтому, если стек свободен, значение указателя соответствует ячейке, следующей за дном стека. Для вычисления арифметических выражений в ВМ со стековой памятью используется так называемая Польская Инверсная (бесскобочная) Запись (ПОЛИЗ). Еѐ еще называют обратной польской записью или обратной польской нотацией. В ПОЛИЗе знаки операций проставляются не между операндами (А−В), а после них (АВ−). Алгоритм вычисления таких выражений содержит следующие шаги: 58 1) анализируется каждый символ бесскобочной записи формулы, начиная с крайнего левого символа, до тех пор, пока не встретится знак операции; 2) берут ближайшие два операнда (если операция двуместная) или один операнд (при унарной операции), которые расположены слева от найденного знака операции, выполняют операцию и помещают результат в формулу вместо использованных операндов и знака операции; 3) если в формуле осталось лишь одно значение, то это и есть результат, алгоритм завершен, иначе − перейти к пункту 1). Для примера рассмотрим вычисление формулы Y = (А-В*С)/(Е+D), которая в ПОЛИЗе имеет вид Y=АВС*−ЕD+/. Для числовых значений операндов А=20, В=3, С=4, Е=1 и D=3 порядок вычислений приведен в табл. 5.1. Таблица 5.1.Порядок вычислений в стековой ВМ Шаг 1 2 3 4 Формула для Левый знак операции Операнды Результат Итоговая формула расчета 20 3 4 * − 1 3 + / 20 12 − 1 3 + / 813+/ 84/ 3и4 20 и 12 1и3 8и4 * − + / 12 8 4 2 20 12 − 1 3 + / 813+/ 84/ 2 Рис. 5.7 содержит расчет выражения для этого примера на стековой (безадресной) ВМ. Рис. 5.7. Пример вычисления выражений на стековой (безадресной) ВМ. На рис. 5.7 использованы следующие команды: РUSH <ад.> – загрузка в стек содержимого ячейки с адресом <ад.>, РОР <ад.> – выгрузка из вершины стека в память по адресу <ад.>; МUL, SUB, АDD и DIV – соответственно, умножение, вычитание, сложение и деление содержимого двух верхних ячеек стека. Ассоциативные запоминающие устройства Ассоциативные запоминающие устройства (АЗУ) позволяют существенно повысить производительность работы ВМ. Поэтому АЗУ довольно широко используются в архитектуре современных ЭВМ. Особенности конструкции тако59 го типа памяти заключаются в следующем. В упрощенном виде схема использования АЗУ изображена на рис. 5.8 (считается, что имеются 8-разрядные ячейки памяти). Рис. 5.8. Упрощенная структура АЗУ. Для поиска информации в АЗУ используется не адрес, а признаки содержимого ячеек памяти – контекст, ассоциативные признаки. Как видно из рис.5.8, АЗУ имеет более сложную структуру по сравнению с адресной памятью. Поэтому объѐм АЗУ обычно невелик по сравнению с ОП. В устройстве управления АЗУ имеется три регистра: регистры маски, контекста и совпадений. Размеры регистров маски и контекста совпадают с размерностью ячеек ассоциативной памяти. Размерность регистра совпадений равна количеству ячеек АЗУ – по одному разряду на каждую ячейку. С помощью регистра маски назначаются (устанавливаются в 1) те разряды ячеек, которые существенны для поиска информации. На рис.5.8 маску образуют совокупность 0,2, 3, 5,6 разрядов ячеек. Регистр контекста содержит ту информацию (в замаскированных разрядах), по которой производится поиск ячеек АЗУ. На рис. 5.8 это комбинация битов: 0, 1, 0, 0, 1. АЗУ позволяет осуществлять параллельный одновременный поиск ячеек, в которых содержание замаскированных разрядов совпадает с контекстом. Фиксация результатов поиска осуществляется установкой в 1 соответствующих ячейкам разрядов регистра совпадения. Таким образом, поиск информации осуществляется сразу по всему массиву ячеек АЗУ и происходит значительно быстрее, чем в адресной памяти. В настоящее время АЗУ находят широкое применение при построении сверхоперативной кэш-памяти современных ВМ. 5.4. Кэш-память Кэш-память (от англ. cache, и фр. cacher «прятать», т.е. «скрытая» память) – это буферная «сверхоперативная» память с быстрым доступом, содержащая 60 информацию, которая с наибольшей вероятностью может быть запрошена в ближайшее время. Основным назначением кэш-памяти является ускорение обращения к данным, которые содержатся в памяти с меньшей скоростью доступа. Кэш-память приносит пользу в случаях обращения быстрого устройства (например, процессора) к более медленному устройству (оперативной памяти), помогая сглаживать разницу в быстродействии устройств, уменьшая время простоя быстрого устройства. Это особенно чувствительно на примере процессора и оперативной памяти, потому что быстродействие первого в 1000 и более раз больше, чем быстродействие ОП. Принцип работы кэш-памяти поясняется рис.5.9. Рис.5.9. Принципы использования кэш–памяти. Кэш-память управляется кэш-контроллером, который загружает в неѐ данные из ОП и при необходимости передаѐт в ОП модифицированные данные из кэш-памяти. При обращении процессора к оперативной памяти кэш-контроллер осуществляет поиск в кэш-памяти запрашиваемых процессором данных. Если таковые находятся в кэш-памяти (это соответствует кэш-попаданию), то в случае чтения нужные данные передаются по быстрой шине в процессор, а в случае записи производится модификация соответствующих данных в кэш-памяти. Запрос считается выполненным без фактического обращения к ОП. Если данные в кэш-памяти отсутствуют (кэш-промах), то производится фактическое обращение к ОП, и процессор вынужден ждать результата запроса. В процессе работы кэш-память практически всегда заполнена полностью, было бы нерационально держать в бездействии дорогую память. Поэтому записи затребованной информации из ОП в кэш-память всегда предшествует вытеснение части данных из кэша. В любом случае работа кэш-памяти связана с выполнением дополнитель61 ных операций в ВМ. Поэтому применение кэш-памяти лишь тогда приносит пользу в повышении быстродействия ВМ, когда высока вероятность кэшпопаданий. Это обусловлено особенностями компьютерных программ и данных, характеризующихся пространственной и временной локальностью. Пространственная локальность заключается в том, что при обращении процессора к некоторой ячейке памяти высока вероятность того, что в ближайшее время произойдѐт обращение к этой же или соседней ячейке памяти. Поэтому есть целесообразность копировать в кэш не одну ячейку памяти, а целый блок из нескольких ячеек с соседними адресами. Временная локальность заключается в том, что если произошло обращение к команде внутри некоторого цикла, то высока вероятность обращения к данному адресу через некоторое время. Учитывая, что команды в программе, как правило, размещаются в соседних адресах памяти, а данные тоже группируются последовательно, особенно для упорядоченных массивов данных, то при загрузке блока данных в кэш высока вероятность обращения к другим ячейкам этого блока пока он не будет полностью исчерпан. Работа кэш-памяти иллюстрируется алгоритмом, приведенным на рис.5.10. Рис.5.10. Алгоритм работы кэш-памяти. Качество работы кэш-памяти оценивается эффективностью кэша, которая определяется отношением количества кэш-попаданий к общему количеству обращений процессора к памяти. Ясно, что эффективность выражается числом от 0 до 1. Причѐм эффективность, равная единице, означает достижение максимального ускорения, время работы с ОП определяется целиком быстродействи62 ем кэш-памяти. Нулевая эффективность означает, что использование кэша не ускорило работу процессора, а только привело к его замедлению из-за дополнительного объѐма работы по обслуживанию кэша. Считается нормальным, если вероятность кэш-попадания составляет не менее 90%. Эффективность работы кэша зависит от объѐма кэш-памяти, алгоритма его функционирования и выполняемой процессором программы. Способы отображения оперативной памяти на кэш-память. Содержание кэш-памяти представляет собой совокупность записей обо всех блоках данных из основной памяти, загруженных в нее, включая их адреса (рис.5.11). Адрес данных в ОП Блоки данных Управляющая информация Рис.5.11. Структура строки кэш–памяти. Механизм отображения блоков ОП в кэш-память рассмотрим на следующем примере. Имеется ОП ѐмкостью 256К байтов (256К = 218). Такая память требует для адресации 18-разрядный адрес. Разобьѐм ОП на блоки размером по 16 байтов. Следовательно, память представляет собой линейную последовательность блоков. Адрес в этом случае удобно рассматривать состоящим из двух полей: младшее поле из 4-х бит – это адрес байта в пределах блока, а старшее поле из 14 бит – номер блока (одного из 214 = 16384) или адрес блока ОП. Пусть ѐмкость кэш-памяти ВМ составляет 2К байтов (2К=211). Следовательно, для адресации кэш-памяти необходим 11-разрядный адрес. Каждая строка кэш-памяти содержит один блок ОП, следовательно, кэш содержит 211/24 = 27 = 128 строк. Аналогично оперативной памяти 11-разрядный адрес кэш-памяти удобно рассматривать состоящим из двух полей: 4 младших разряда – адрес байта в строке, 7 старших разрядов – адрес строки. Поскольку отображение данных из ОП в кэш осуществляется целыми блоками, то байты в блоке ОП и строке кэш расположены одинаково, и адрес байта в строке кэш-памяти определяется 4 младшими разрядами адреса ОП. Следовательно, осталось определить взаимное соответствие блока в ОП и строки кэш-памяти, где этот блок находится. По способу такого соответствия выделяют три архитектуры кэш-памяти: кэш прямого отображения, полностью ассоциативный кэш, комбинация первых двух подходов – частично-ассоциативный кэш. Рассмотрим архитектуру кэш прямого отображения. При прямом отображении каждый j-й блок ОП может быть отображен 63 только на единственную i-ю строку кэш-памяти, причѐм зависимость между этими величинами определяется выражением i = j mod m, где m – общее количество строк в кэш-памяти. В нашем примере i = j mod 128, причем величина i может находиться в диапазоне целых чисел от 0 до 127, а j – от 0 до 16383. Для иллюстрации такого отображения приведен рис.5.12. Рис.5.12. Организация кэш-памяти с прямым отображением. Здесь ОП представлена в виде матрицы блоков, в которой количество строк равно количеству строк в кэш-памяти, а в каждой строке матрицы указаны блоки, отображаемые на одну и ту же строку кэш-памяти. При такой организации кэш-памяти 14-разрядный адрес блока ОП условно разбивается на два поля: поле строки матрицы (7 разрядов) и поле столбца матрицы – поле тега (тоже 7 разрядов). Поле строки соответствует адресу строки кэш-памяти, в которую может быть отображен блок с заданным адресом. Поле тега представляет собой номер того столбца матрицы блоков ОП, из которого блок отображен в данную строку кэш-памяти. Для точного соответствия содержания информации в кэше и в ОП строка кэш-памяти содержит кроме блока данных из 16 байт ещѐ и байт с тегом и битом модификации (рис. 5.13). Рис.5.13. Строка кэша прямого отображения и структура адреса ОП. 64 Упрощенно при прямом отображении кэш-контроллер выполняет следующую последовательность действий. При чтении процессором байта оперативной памяти: 1) адрес требуемого байта разбивается на части для определения тэга, номера строки кэша и номера байта в блоке (рис.5.13); 2) проверка, соответствует ли тэг, записанный в нужной строке кэша, тэгу, выделенному из адреса; 3) если тэги совпали (нужная строка кэша содержит требуемый блок ОП), то выполняется пункт 4), иначе выполняются следующие действия: если бит модификации строки кэша равен единице, то он обнуляется, и содержимое строки записывается в оперативную память по адресу, определяемому хранящимся в строке кэша тэгом и номером этой строки в кэше; в строку кэша из оперативной памяти загружается блок из 16 байт, среди которых имеется востребованный процессором байт памяти (адрес этого блока равен адресу требуемого байта, но с обнуленными последними четырьмя битами); тэг строки кэша заменяется на тэг, выделенный из адреса требуемого байта; 4) требуемые данные имеются в кэше, и контроллер выдает байт процессору из строки кэша в соответствии с номером байта в блоке, выделенным из адреса ОП. При записи процессором байта в оперативную память: 1) адрес требуемого байта разбивается на части для определения тэга, номера строки кэша, и номера байта в блоке (рис.5.13); 2) проверка, соответствует ли тэг, записанный в нужной строке кэша, тэгу, выделенному из адреса; 3) если тэги совпали (перезаписываемые данные имеются в кэше), то выполняется пункт 4), иначе выполняются следующие действия: если бит модификации строки равен единице, то содержимое строки кэша сохраняется в оперативной памяти по адресу, определяемому из тэга, хранящегося в строке кэша, и номера этой строки кэша; в строку кэша отображается блок ОП из 16 байт, среди которых находится перезаписываемый процессором байт памяти (адрес этого блока равен адресу требуемого байта, но с обнуленными младшими четырьмя битами); тэг строки заменяется на тэг, выделенный из адреса требуемого байта; 65 4) теперь перезаписываемые данные обязательно имеются в кэше, и контроллер осуществляет запись байта в строку кэша в соответствии с адресом байта, выделенным из адреса ОП; 5) бит модификации строки кэша устанавливается в 1. Описанная архитектура кэша с прямым отображением является самой простой для аппаратной реализации. Именно такая структура получила наибольшее распространение на заре использования кэш-памяти. К достоинствам архитектуры прямого отображения относятся простота и дешевизна реализации. К недостаткам – жесткий подход к процедуре отображения. Поэтому вероятность обновления информации в кэше будет большой, если процессор поочерѐдно обращается к данным, расположенным в разных блоках ОП, отображаемых в одну и ту же строку кэша. Устранение этого недостатка достигается применением более сложных архитектур кэш-памяти – при частично-ассоциативном или полностью ассоциативном кэше. Но эти архитектуры вам предстоит изучить самостоятельно. 66 6. СИСТЕМЫ ВВОДА-ВЫВОДА 6.1. Системная магистраль «Общая шина» В любой архитектуре ВМ связь процессора с запоминающими устройствами и внешними устройствами осуществляется через комплекты проводов, называемые шинами. В наиболее распространенном виде ВМ – персональных компьютерах – системная магистраль включает в себе три шины: шину адреса, шину данных и шину управления. Эта системная магистраль называется «Общая шина». Данная шина исходит из процессора, к ней подключено оперативное запоминающее устройство (ОЗУ), внешние запоминающие устройства (ВЗУ) и устройства ввода-вывода (УВВ) (рис.6.1). Описание работы Общей шины должно определить весь порядок взаимодействия процессора с устройствами, подключенными к ней. Рис.6.1. Магистральная организация архитектуры ЭВМ. Характер работы Общей шины описывается системным интерфейсом, который определяет физические линии, входящие в шину, порядок передачи информации по ним, электрические параметры сигналов и типы соединительных элементов. Любое устройство подключается к Общей шине с помощью своего контроллера – электрической схемы, составляющей устройство управления этого устройства. В связи с тем, что внешние устройства, подключаемые к ВМ имеют самую различную внутреннюю структуру – от простых датчиков до сложных систем научных экспериментальных установок, невозможно создать единый универсальный контроллер для всех внешних устройств. Однако, ввиду того, что подключение к общей шине должно удовлетворять определѐнным протоколам передачи информации по системной шине, унификацию подключения контроллеров достигают путем использования стандартизованных промежуточных интерфейсов – параллельного и последовательного. Контроллеры этих интерфейсов выпускаются серийно в виде отдельных микросхем (в этом случае они называются адаптерами) или составных частей контроллеров внешних устройств. Контроллеры внешних устройств в целом имеют структуру, приведенную на рис. 6.2. В состав контроллера входят несколько регистров (входной, выход67 ной, состояния и управления), приѐмо-передатчики шин адресной и данных, а также логика управления. Рис. 6.2. Структурная схема контроллера системного интерфейса. Сигналы Ввод и Вывод поступают в контроллер от процессора по системной шине, инициируя соответствующую операцию обмена информацией с внешним устройством, а сигнал Готовность ВУ поступает от контроллера в системную шину, сигнализируя процессору о состоянии выполнения операции вывода данных во внешнее устройство или о том, что запрошенные процессором данные установлены на шине данных. Таким образом, сигнал Готовность ВУ обеспечивает синхронизацию работы процессора с внешним устройством. Передача информации по общей шине осуществляется в порядке ведущий – ведомый (управляющий – управляемый). Причѐм ведущим, как правило, является сам процессор. Он же и управляет общей шиной за исключением случаев внепроцессорного обмена данными между оперативной памятью и внешним устройством, когда управление общей шиной осуществляет так называемый контроллер прямого доступа в память. Порты ввода-вывода. Так называют специальную часть адресного пространства, отведѐнную для взаимодействия с внешними устройствами. Каждому внешнему устройству назначают свои один или несколько портов. Поэтому по адресу порта однозначно определяется то внешнее устройство, с которым будет взаимодействовать процессор. Порты называются входными, если информация передаѐтся от внешнего устройства к процессору, или выходными, если направление передачи информации противоположное. 68 Передача информации осуществляется за один или несколько циклов магистрали. За каждый цикл по шинам адреса и данных передаѐтся одно машинное слово или один байт информации. Порядок передачи сигналов по общей шине соответствует протоколу цикла магистрали. Эти циклы различаются: Ввод данных, Вывод данных, Вывод слова, Ввод-пауза-вывод. В протоколе циклов общим является асинхронный характер – необходимость подтверждения-ответа со стороны ведомого устройства на каждый управляющий сигнал ведущего устройства (так называемый обмен рукопожатиями) в течение ограниченного интервала времени – таймаута. Если в течение этого таймаута ответа-подтверждения от ведомого устройства не поступило, то происходит внутреннее прерывание. В начале каждого цикла магистрали осуществляется выставление на адресной шине адреса порта того устройства, с которым процессор инициирует взаимодействие. Затем генерируется сигнал синхронизации, воспринимаемый всеми внешними устройствами. Затем следует информационная часть цикла, в которой участвует только то внешнее устройство, которое подключено к порту с соответствующим адресом. 6.2. Программно-управляемый обмен Программно-управляемый обмен информацией производится между внешним устройством и оперативной памятью ВМ. Этот обмен осуществляется посредством выполнения команд программы, управляющей данным обменом. В зависимости от алгоритма, реализованного в проограмме, обмен может быть синхронным, асинхронным и по прерыванию. Синхронный обмен осуществляется в случае, если заранее известно время реакции внешнего устройства. Например, время вывода на печать одного символа. В этом случае каждое следующее слово, выдаваемое во внешнее устройство или вводимое из внешнего устройства, выставляется на шину данных с интервалом времени, гарантирующим срабатывание внешнего устройства. Этот вид обмена имеет недостаток, заключающийся в нерациональной трате процессорного времени на программное ожидание времени реакции устройства. Асинхронный обмен осуществляется с опросом состояния внешнего устройства и следующее слово выставляется на шину данных тогда, когда получено подтверждение от внешнего устройства выполнения предыдущей операции обмена. Процессор вынужден тратить время на опрос состояния устройства, поскольку это осуществляется программным образом. Обмен по прерыванию возможен, когда внешнее устройство имеет соответствующую аппаратную часть, сигнализирующую процессор о необходимо69 сти выполнить обмен информацией с внешним устройством. В этом случае процессор, выполняя основную программу, не связанную с обслуживанием внешнего устройства, получив от внешнего устройства сигнал запроса прерывания, прерывает выполнение основной программы, осуществляет запоминание необходимых данных для продолжения этой программы и выполняет специальную программу обработки прерывания данного внешнего устройства, в которой осуществляется обмен информацией. После этого состояние процессора восстанавливается и процессор продолжает выполнять прерванную основную программу. Сравнение этих методов обмена информацией можно пояснить на следующем примере. Пусть надо вскипятить чайник с водой, причем обычное время закипания составляет 15 минут. При синхронном обмене чайник с водой ставится на плиту и снимается через 15 минут независимо от того, закипел он фактически или нет. При асинхронном обмене чайник ставится на плиту и через каждые, допустим, 3 минуты осуществляется проверка, закипел ли чайник. Если закипел, то снимается с плиты, задача выполнена. В случае обмена по прерыванию чайник оборудуется дополнительной аппаратурой сигнализации – свистком на его носике. Чайник ставится на плиту, процессор продолжает заниматься основной работой. Как только свисток засвистит, процессор уходит на прерывание основной программы, снимает чайник с плиты и продолжает заниматься основной работой. 6.3. Взаимодействие устройств в ВМ В настоящее время ВМ используются в самых разных областях деятельности человека, начиная от процесса обучения, особенно в дистанционном формате, заканчивая управлением технологическими процессами и огромными распределѐнными системами обеспечения жизнедеятельности человека, например, энергообеспечением. В любом случае используется взаимодействие огромного разнообразия внешних устройств с процессором ВМ. Внешние устройства выступают в качестве источника или потребителя информации. Вне зависимости от сложности, назначения и функций внешних устройств они могут рассматриваться как исполнители двух обобщѐнных функций – хранение информации на внешних носителях и преобразование информации в соответствии с реальными функциями внешнего устройства. Обобщѐнная схема взаимодействия устройств в ВМ приведена на рис.6.3, где сплошными линиями показаны потоки передачи информации, а пунктирными – линии управления внешними устройствами состороны процессора. 70 Рис. 6.3. Схема взаимодействия устройств в ВМ. В соответствии с принципами фон Неймана информация в ВМ кодируется в двоичной системе счисления – используются только два значения каждого бита информации 0 и 1. Это не соответствует обычному представлению информации человеком, привыкшему использовать десятичную систему счисления для представления чисел и символьную для текстов. Поэтому устройства вводавывода информации производят кодирование и декодирование информации при общении с ВМ. Для кодирования символьной информации используется несколько кодов, например, ASCII. Один символ кодируется комбинацией 8 битов, т. е. представляет собой 1 байт информации в ВМ. Внешние устройства, как правило, содержат значительное количество механических элементов, которые являются менее надѐжными, чем электронные компоненты ВМ. Так же информация может подвергаться искажениям в процессе ее распространения по линиям связи. В связи с этим во взаимодействии ВМ с внешними устройствами используют те или иные средства обнаружения ошибок. Часто это осуществляется путѐм добавления к стандартному коду так называемого бита чѐтности. Этот бит добавляется таким образом, чтобы общее число единиц в сформированном коде было чѐтным (контроль чѐтности) или нечѐтным (контроль нечѐтности). Правильность принятой информации контролируется по этому признаку, что позволяет в большинстве случаев обнаружить искажения информации. Здесь используется свойство, что искажения более одного бита информации является чрезвычайно маловероятным. Иногда применяют более сложные схемы кодирования, позволяющие не только обнаруживать одиночные ошибки, но и исправлять их. 71 6.4. Классификация внешних устройств Внешнее устройство по сути есть устройство, выполняющее некоторые функции, но не определяющее архитектуру ВМ и его принципы функционирования. Классификацию внешних устройств можно провести по многим классификационным признакам. Наиболее часто используются признаки назначения внешних устройств и признаки выполняемых ими функций. По назначению внешние устройства могут быть классифицированы на: устройства связи «человек-ВМ» (устройства для ввода информации, для вывода информации и для интерактивного взаимодействия); устройства хранения информации большого объѐма – внешние запоминающие устройства; устройства для связи с объектами управления (датчики, аналого-цифровые преобразователи сигналов, реле и т.д.); устройства для передачи сигналов на большие расстояния (средства телекоммуникации). По выполняемым внешними устройствами функциям могут быть выделены следующие группы внешних устройств (рис.6.4): средства ввода-вывода информации средства хранения информации; средства телеобработки (коммутации и приѐма-передачи информации). Дополнительное разделение средств хранения информации на две категории вызвано часто используемым двойным функциональным назначением этих средств в персональных компьютерах. Рис. 6.4. Классификация внешних устройств по функциональному признаку. 72 Накопители с жѐсткими магнитными дисками Конструкция жѐсткого магнитного диска состоит из одной или нескольких стеклянных или металлических пластин дискообразной формы с магнитным покрытием их поверхности, закреплѐнных на одной оси – шпинделе. Пакет пластин помещѐн в жѐсткую герметичную коробку (рис.6.5). Рис.6.5. Схема устройства жесткого диска. Каждая пластина имеет совокупность магнитных дорожек – тонких концентрических колец, отстоящих друг от друга на одинаковое расстояние – шаг дорожки. Нумерация дорожек ведѐтся от внешнего края к центру диска. При вращении диска данные записываются на дорожку или считываются с неѐ специальным элементом конструкции – головкой, пошагово перемещающейся над поверхностью диска и позиционирующейся над соответствующей дорожкой. Считывание и запись информации осуществляется благодаря способности головки реагировать на состояние магнитного поля дорожки и изменять его. Все головки каждой поверхности каждой пластины объединены одним механизмом и позиционируются одинаково. Поэтому в каждый момент времени все головки находятся над дорожками одного и того же радиуса и считывают информацию как бы с поверхности одного цилиндра. Поэтому цилиндром называют совокупность всех дорожек с одним и тем же номером на всех поверхностях пакета пластин диска. Каждая дорожка разбивается на сектора – участки для хранения блока информации фиксированного размера, равного степени двойки. Чаще всего выбирают размер сектора равный 512 байт. Так как длина дорожки линейно зависит от величины еѐ радиуса, то дорожки могут содержать разное количество секторов. Обычно на диске выделяют от 8 до 20 зон, в каждой из которых дорожки имеют одинаковое количество секторов (рис.6.6). 73 Рис.6.6. Схема деления цилиндров на зоны. Для обеспечения надѐжности магнитного диска часть секторов на заводе изготовителе размечаются как запасные с указанием этого в специальной инженерной зоне диска. При проверке диска выделяются дефектные сектора и вместо них используются запасные сектора, о чем делается отметка в таблице дефектов инженерной зоны. В процессе эксплуатации диска при выявлении дефектных секторов совершается аналогичная процедура. Поэтому для обеспечения надѐжности использования диска указанная таблица дефектов в инженерной зоне имеется в нескольких экземплярах. Многие производители в качестве характеристики размера неформатированного диска указывают его полную ѐмкость, как будто диск содержит только данные. На самом деле каждый сектор кроме собственно данных имеет определѐнную служебную информацию довольно сложной структуры (рис.6.7). Рис.6.7. Структура информации в секторе НЖМД. В начале сектора добавляется так называемый префикс или заголовок сек74 тора, по которому определяется начало и адрес сектора. В конце сектора добавляется суффикс, в котором находится контрольная сумма, необходимая для проверки целостности данных. Контрольная сумма имеется также в конце идентификатора сектора. Она записывается один раз при форматировании диска, а контрольная сумма после поля данных изменяется каждый раз при изменении данных. Поля в секторе разделяются интервалами-промежутками, необходимыми для предотвращения искажения информации данного сектора при записи в предыдущий сектор, что может произойти при изменениях скорости вращения диска. Ввиду наличия служебной информации и интервалов между секторами и полями сектора ѐмкость форматированного диска примерно на 15% меньше ѐмкости неформатированного диска. НЖМД характеризуется следующими основными характеристиками: Интерфейс – совокупность физических линий связи, правил передачи информации по ним и технических средств, поддерживающих эти правила. Форм-фактор – размер диаметра диска в дюймах, обычно составляет 3,5 или 2,5 дюйма, но может быть и иным. Форм-фактор 2,5 дюйма используется чаще в ноутбуках. Надѐжность – среднее время наработки на отказ в часах. Сопротивляемость ударам – способность выдержать резкие скачки давления или удары, в единицах допустимой перегрузки во включѐнном и в выключенном состоянии. Скорость вращения шпинделя – количество оборотов шпинделя диска в минуту. Величина, в существенной мере определяющая время доступа и скорость передачи данных. Применяются стандартные значения этого параметра 4200, 5400 и 7200 – для ноутбуков, 7200 и 10000 – для персональных компьютеров, 10000 и 15000 – для серверов. Препятствием для повышения скорости вращения шпинделя для переносных ВМ является гироскопический эффект, несущественный для стационарных ВМ. Время произвольного доступа ta – среднее время, за которое НЖМД перемещает головку считывания-записи с произвольной дорожки на нужную и начинает считывание (или запись) данных нужного сектора: ta = tsk + tset + tr (6.1) где tsk – время перемещения головки на нужную дорожку; tset – время окончания переходных колебаний после перемещения головки; tr – время ожидания сектора, соответствует времени вращения диска от произвольного сектора на дорожке до нужного сектора. 75 В среднем время произвольного доступа составляет от нескольких миллисекунд до десятков миллисекунд. Минимальным временем характеризуются серверные диски, максимальным – диски переносных ВМ. Для сравнения: у твѐрдотельных SSD-накопителей этот параметр меньше 1 мс. Производительность диска зависит также от времени передачи информации, которая является функцией от плотности записи и скорости вращения. Форматированная ѐмкость – объѐм накопителя, который может использоваться для хранения информации. Зависит от многих факторов. Для современных НЖМД с форм-фактором 3,5 дюйма приближается к 5 Тб. Производители обычно указывают величины, кратные 1000, а не степени двойки, поэтому реальная ѐмкость диска, измеряемая в степени двойки, принятой в вычислительной технике, оказывается меньше указанной производителем. Эти характеристики относятся к самому НЖМД, но важное значение имеют также характеристики организации компонентов хранения информации. В качестве характеристик компонентов хранения информации (рис.6.8) указывают линейную плотность записи (количество битовых ячеек на единицу длины дорожки в битах/дюйм), шаг дорожки (расстояние между центрами соседних дорожек), ширина дорожки, зависящая от величины головки и точности еѐ перемещения. Плотность дорожек – зависит от шага и ширины дорожек, измеряется в количестве дорожек на единицу длины. Поверхностная плотность записи определяется произведением линейной плотности и плотности дорожек, измеряется в Гб/дюйм2. Снижения величины этой характеристики добиваются исследователи магнитной записи. От неѐ зависят ѐмкость накопителя, удельная стоимость хранения данных и уменьшение времени доступа. Рис.6.8. Компоненты хранения информации. Другими важными характеристиками НЖМД являются скорость передачи данных, которая зависит от линейной плотности записи и скорости вращения диска, различна для внешней и внутренней дорожек диска, объѐм буфера – характеристика промежуточной оперативной памяти контроллера диска, исполь76 зуемого для сглаживания различий в скорости считывания/записи информации с диска и скорости передачи по интерфейсу. Также важны потребительские характеристики НЖМД – тишина работы, малое энергопотребление, хорошая ударостойкость и надѐжность. Именно эти характеристики учитываются конкретным потребителем при выборе НЖМД, но они не всегда доступны из документации на изделия. Методы записи информации на диск. Различают два основных метода: метод продольной и метод перпендикулярной записи. Разрабатываются ещѐ два метода: тепловой магнитной записи и структурированных носителей. Метод продольной магнитной записи заключается в том, что при записи информации вектор намагниченности доменов (элементарных областей) магнитной поверхности диска направлен вдоль поверхности диска. При этом область одинаковой намагниченности, несущая бит информации, оказывается очень велика и составляет миллиарды доменов. Плотность записи при использовании такого метода составляет около 23 Гбит/см2. Этот метод считается устаревшим и используется всѐ меньше. Метод перпендикулярной записи использует перпендикулярное к поверхности диска (иначе говоря – вертикальное) направление намагниченности доменов. Такой метод позволяет использовать более сильные магнитные поля и существенно уменьшить количество доменов, составляющих область, соответствующую одному биту информации. Плотность записи при этом достигает 60 Гбит/см2. Главное отличие между этими способами состоит в разном направлении вектора намагниченности доменов, что определяет степень взаимодействия между соседними битовыми ячейками поверхности магнитной дорожки. Метод тепловой магнитной записи или термоассистируемая магнитная запись заключается в локальном нагреве поверхности магнитной дорожки перед еѐ намагничиванием. После охлаждения намагниченность фиксируется и как бы закрепляется, при этом существенно уменьшается количество доменов в битовой ячейке дорожки. Благодаря этому плотность записи достигает 150 Гбит/см2 и, по мнению экспертов, может быть увеличена до 7,75 Тбит/см2. Структурированные носители. Магнитный домен состоит из нескольких десятков меньших структурных элементов – зерен. В принципе, каждое зерно магнитной поверхности может выполнять роль отдельной битовой области. Разработчики структурированной записи стремятся увеличить размеры зерна и обеспечить хранение одного бита информации в меньшем количестве зерен. Если удастся сконструировать такой способ магнитной записи, то плотность записи может быть увеличена до нескольких десятков и даже сотен Тбит/см2. 77 Причѐм ввиду разных подходов последних двух экспериментальных способов магнитной записи их можно было бы использовать вместе, получая еще больший эффект повышения плотности записи. Но пока не удаѐтся найти материала, способного осуществить реализацию этих технологий. Оптические диски Оптические диски не используют принцип магнитной записи. В них благодаря полупроводниковым лазерным технологиям и использованием фокусирующих световых систем хранение битов информации на диске осуществляется использованием различных отражающих свойств отдельных участков световой дорожки. Более высокая плотность записи на оптический диск обеспечивается за счет меньших физических размеров дорожки, на которую производится запись информации. Применение оптической фокусирующей системы не требует плотного контакта с поверхностью оптического диска, здесь используется не кольцевые дорожки, а одна спиралевидная дорожка, как на грампластинке. Поверхность оптического диска покрыта прозрачным защитным покрытием, луч лазера фокусируется не на поверхности диска, а под защитным покрытием, благодаря этому пыль и царапины на поверхности диска не столь чувствительны, как для магнитного диска. Наиболее распространенными в настоящее время являются использующие красный лазерный луч носители-дисководы CD (Compact Disk – компакт-диск), и DVD (Digital Video Disk, цифровой видеодиск или в другой трактовке – Digital Versatile Disk, цифровой многоцелевой диск). Компакт-диск первоначально был создан для хранения аудиозаписей и назывался CD-Audio. В дальнейшем он стал широко использоваться и для хранения двоичной информации любого вида и стал обозначаться CD-ROM. Формат аудио-компакт-дисков отличается от формата последнего. Поэтому проигрыватель CD-Audio не может читать информацию с CD-ROM, получивших очень широкое распространение и вытеснивших из употребления гибкие магнитные диски. В настоящее время компакт-диски вытесняются более перспективными оптическими и твѐрдотельными носителями. Формат DVD тоже может быть различным: DVD-видео (видео и звук), DVDAudio (звуковые записи высокого качества), DVD-Data – данные любого типа, а также иметь смешанное содержимое. Благодаря использованию единой файловой системы UDF здесь отсутствуют ограничения по формату диска, любой DVD может содержать любую из структур данных. Отличия DVD-дисков заключаются ещѐ и в том, что их технология позво78 ляет иметь одну или две рабочие стороны, а на каждой стороне иметь один или два рабочих слоя. Отсюда более высокая информационная ѐмкость таких дисков по сравнению с компакт-дисками. Ещѐ большую информационную ѐмкость обеспечивают оптические устройства, основанные на применении синего лазера с меньшей длиной волны, чем красный лазер. К такого рода устройствам относятся HP DVD и Blu-Ray. Постоянное улучшение характеристик устройств оптической записи дают основание полагать, что в будущем конкуренция таких устройств и НЖМД будет нарастать. Flash-память Flash-память – немеханический вид памяти, обеспечивает хранение информации на микросхемах в миниатюрном корпусе. Отсутствие движущихся частей в таких твѐрдотельных накопителях обеспечивает более высокую надѐжность хранения данных. Твѐрдотельные накопители SSD (solid-state drive) на основе применения микросхем памяти бывают двух типов – типа flash-памяти (NAND SSD) и типа оперативной памяти (RAM SSD). Первые до недавнего времени уступали НЖМД в скорости записи, но имели более высокую скорость поиска информации. В настоящее время они значительно превосходят НЖМД по обоим показателям. RAM SSD основаны на энергозависимой памяти и характеризуются сверхбыстрыми чтением, записью и поиском информации. Недостаток – высокая стоимость. Используются в качестве ускорителей для работы крупных систем управления базами данных и мощных графических станций. Оборудуются резервными источниками питания, а также системами резервного или оперативного копирования данных. Оба вида твѐрдотельных накопителей имеют много преимуществ благодаря отсутствию движущихся частей: отсутствие шума, высокая механическая стойкость, стабильность времени считывания файлов, низкое энергопотребление, широкий диапазон рабочих температур, высокий модернизационный потенциал. Отсутствие магнитных пластин приводит к уменьшению зависимости от внешних электромагнитных полей, к меньшим габаритным размерам и весу. Недостатками твѐрдотельных накопителей являются ограниченное количество циклов перезаписи информации у NAND SSD, для нивелирования этого недостатка контроллер таких накопителей хранит информацию о количестве использованных циклов перезаписи блоков и при необходимости использует те блоки, которые имеют больший оставшийся ресурс. Также эти накопители не всегда позволяют восстановить удалѐнную информацию системными средства79 ми и довольно частые случаи выхода из строя всего накопителя при сильных перепадах напряжения питания. У НЖМД в этих случаях обычно выходит из строя только контроллер диска, что позволяет в ряде случаев восстановить информацию на диске. Стримеры Стримеры – это накопители на магнитных лентах. Они являются порой самыми дешевыми накопителями большой ѐмкости в расчете на стоимость хранения бита информации. Но они имеют и ряд недостатков: малую производительность, поскольку это устройство последовательного доступа, и низкую надѐжность, так как помимо влияния электромагнитных полей они подвержены физическому выходу из строя из-за механических воздействий при перемотке ленты. 6.5. Средства ввода-вывода информации Устройства ввода-вывода (УВВ) информации подразделяются на устройства ввод-вывода документов и средства непосредственного общения с ВМ. Классифицировать УВВ можно по нескольким классификационным признакам: тип информации (текст или графика); направление передачи информации (ввод или вывод); тип носителя информации (печатный документ, электронный документ); степень автоматизации процесса вывода. Один из вариантов классификации УВВ представлен на рис. 6.9. 80 Рис. 6.9. Классификация устройств ввода-вывода. Перечень основных типов УВВ приведен в табл.6.1. Таблица 6.1. Основные типы УВВ Устройства выУстройства ввода вода На бумажные ноУстройства ввода символьных данных: сители: клавиатура, принтер, специальные клавиатуры. Устройства ввода графических данных: плоттер. На электронные сканер, носители: графические планшеты (диджитайзеры), монитор цифровые видеокамеры. синтезаторы Устройства командного управления (манизвука пуляторы): мышь, трекбол, джойстик, тачпад, пенмаус, световое перо. Устройства ввода звуковой информации 81 Интерактивные устройства Терминалы ЖК-планшет с сенсорным вводом Интерактивная доска Интерактивный проектор Интерактивная приставка Устройства ввода Клавиатура – является основным устройством ввода символьных данных. Большинство типов клавиатур являются полноходовыми контактными. При нажатии любой клавиши клавиатуры замыкаются контакты датчика, покрытые для предотвращения окисления тонким слоем благородного металла. Хорошая клавиатура выдерживает несколько десятков миллионов нажатий каждой клавиши. В состав клавиатуры входят также схемы преобразования кодов и микроконтроллер. Микроконтроллер постоянно сканирует состояние датчиков клавиш. При нажатии клавиши генерируется и заносится в буферную память соответствующий скан-код, при отпускании клавиши – другой код. Таблицы кодов можно перепрограммировать. Некоторые клавиши являются специальными, допускают одновременное нажатие вместе с ними других клавиш, при этом генерируются другие коды. Это позволяет расширить возможности клавиатуры и сократить количество клавиш не ней. Обычно клавиатура содержит несколько групп клавиш: клавиши пишущей машинки, клавиши специальные, расширяющие возможности ввода символов (переключение регистров, изменение функций ввода цифровых клавиш и т.д), несколько функциональных клавиш, функции которых могут задаваться пользователем в своих программах, дополнительная панель цифровых клавиш для удобства работы. Специальные клавиатуры. Такие клавиатуры отличаются от обычных повышенными требованиями эргономичности их использования. На таких клавиатурах можно работать, не уставая, много часов подряд. Обычно такими клавиатурами оснащаются рабочие места работников, чей труд связан с большим объѐмом вводимой с клавиатуры информации. Клавиатура подключается к системному блоку ВМ с помощью кабеля, порта USB или беспроводным способом через инфракрасный порт. В этом случае удаление клавиатуры от системного блока может составлять несколько метров. Сканеры – это устройства, предназначенные для ввода графической информации в ВМ. Они позволяют преобразовывать изображения в цифровой вид и передавать их в компьютер. Принцип действия сканера объясним на примере планшетного сканера. Изображение кладѐтся лицевой частью на стекло. Под стеклом расположен источник света, перемещающийся вдоль поверхности стекла с помощью шагового двигателя. На каждом шагу отраженный от изображения свет с помощью системы зеркал передаѐтся на вход специальной све82 точувствительной микросхемы, а с еѐ выхода – на вход аналого-цифрового преобразователя. Оцифрованные сигналы каждой полоски изображения объединяются программным обеспечением в общее изображение. В результате получается изображение в формате RAW, т. е. сырое без четкой спецификации. В дальнейшем осуществляется преобразование в один из графических форматов либо в самом сканере, либо в компьютере, что зависит от модели сканера. Таким образом, сканер является аналого-цифровым преобразователем различных графических образов – текста, рисунков, фотографий, страниц журнала и т. д. – в цифровой формат изображения, распознаваемый программным обеспечением компьютера. Настройки сканера позволяют изменять различные параметры изображений – контрастность, чѐткость, уровень белого и чѐрного, цветовой тон и др. В настоящее время сканеры обычно воспринимают и передают цвет, причѐм с 32, 36 и даже 42-битным его представлением. Классификацию сканеров можно провести по различным признакам. По области применения различают сканеры для дома и небольшого офиса, сканеры бизнес-класса, профессиональные сканеры для художников и дизайнеров, сканеры для инженерных работ с крупноформатными изображениями и сканеры для быстрого и качественного ввода в ЭВМ больших объѐмов текстовой и графической информации. Естественно, характеристики сканеров для каждой из областей применений имеют специфические отличия по качеству получаемых цифровых изображений, точности цветопередачи, наконец, по степени автоматизации ввода документов в цифровом виде. По степени прозрачности оригинала изображения различают сканеры непрозрачных материалов и способные сканировать прозрачные оригиналы (плѐнки, слайды, негативы). По типу вводимого изображения – чѐрно-белые и цветные. По способу считывания (кинематическому механизму) различают ручные сканеры, когда человек сам должен проводить сканером по поверхности сканируемого изображения; планшетные сканеры для сканирования отдельных листов или небольших по объѐму изданий; листовые сканеры, которые обеспечивают сканирование только отдельных листов, протягивая их между двумя барабанами; проекционные сканеры, способные сканировать проекции объѐмных изделий; штрих-сканеры, применяющиеся в торговых сетях для считывания штрих-кодов с этикеток товаров. Графический планшет, диджитайзер – представляет собой устройство непосредственного ввода изображений в компьютер. Состоит из электронного пера и плоского планшета, чувствительного к прикосновению пера. Незамени83 мое устройство, особенно в случаях, когда необходимо ввести точный контур какого-либо изображения в двумерном виде. Может укомплектовываться и специальной мышью. Пенмаус – аналог шариковой авторучки, но с наличием вместо пишущего узла устройства, регистрирующего величину перемещения на плоскости. Световое перо – специальный инструмент, обеспечивающий ввод графических данных в компьютер. Представляет собой устройство типа шариковой ручки с несколькими кнопками, служащими для выполнения дополнительных функций. Может применяться для рисования чего-либо на экране только мониторов, имеющих специальный экран, реагирующий на световое перо. К устройствам ввода графической информации относятся также цифровые камеры и фотоаппараты, позволяющие получать собственно цифровые изображения, которые можно вводить в компьютер из элементов памяти данных устройств. Так же специализированным устройством ввода видеоинформации в ВМ является веб-камера, позволяющая получать цифровые изображения, предназначенные для передачи по сети Интернет. Устройства вывода Вначале рассмотрим устройства вывода на бумажные носители. Принтер – это устройство вывода на печать текстовой и графической информации. Принтеры классифицируются по принципу формирования изображений символов (литерные – полносимвольные и матричные – знакосинтезирующие); по порядку вывода информации (посимвольные, построчные и постраничные); по физическому принципу (ударного и безударного действия). Отдельную категорию составляют трѐхмерные или 3D принтеры. По принципу формирования изображений символов: литерные или полносимвольные принтеры формируют изображение символа при однократном воздействии на носитель, например, с помощью молоточка с изображением символа. Матричные или знакосинтезирующие принтеры формируют изображение символа по частям, отдельными точками, многократно воздействуя на носитель записи. По порядку вывода информации на печать: посимвольные выводят последовательно информацию символ за символом, аналогично печатающей машинке. Построчные печатают сразу всю строку, предварительно сформированную в буфере. Самыми быстродействующими являются постраничные принтеры. Они выводят на печать заранее сформированные страницы информации. В принтерах ударного действия изображение символа формируется путем механического воздействия на носитель (удара) как правило, через красящую 84 ленту либо молоточками с изображѐнным символом (литерой), либо отдельными иглами, сформированными в матрицу, при знакосинтезирующей печати. Некоторые принтеры ударного действия используют прямую печать без красящей ленты. В этом случае краска наносится на поверхность молоточка перед ударом и при ударе переносится на бумагу. Известны посимвольные и построчные принтеры ударного действия. Принтеры безударного действия формируют изображение на носителе путѐм физико-химического воздействия на носитель непосредственно или через некоторый промежуточный носитель, с которого изображение переносится на оконечный носитель записи. Наиболее распространѐнным типом принтеров ударного действия являются матричные принтеры. Конструкция таких принтеров содержит печатающую головку, содержащую матрицу игольчатых стержней. Головка движется вдоль носителя, а игольчатые стержни в нужный момент ударяют через красящую ленту по бумаге, нанося изображение, состоящее из совокупности точек. Красящая лента заправлена в картридж, который постепенно перематывает ленту, обеспечивая равномерный расход краски во время печати. Используемый принцип печати позволяет синтезировать огромное количество самых разнообразных символов, обеспечивать вывод не только символьной информации, но и графических изображений, причѐм при использовании многоцветной красящей ленты имеется возможность формировать многоцветные и полутоновые изображения. Качество печати благодаря возможности наложения за несколько проходов в ряде случаев не уступает полиграфическому. Обычно матрица печатающей головки содержит 9 или 24 иглы, приводимые в действие с помощью электромагнитов. Это определяет и достижимую скорость печати, составляющую до нескольких десятков листов в минуту. Достоинствами матричных принтеров являются низкие эксплуатационные расходы, высокая надежность, способность печати на бумаге формата А4 или А3, а также на рулонном носителе. Данные принтеры, хотя многие считают их устаревшими, широко используются в различных учреждениях, обеспечивают печать сразу нескольких экземпляров документа через копирку или на многослойных бланках, например, при оформлении авиа- или железнодорожных билетов. Современные принтеры оборудованы собственным оперативным ЗУ с блоком управления, чтобы не занимать процессорное время в ходе печати. Недостатком данных принтеров является специфичный шум в работе. Более широкой номенклатурой характеризуются принтеры безударного действия. Все они используют поточечное формирование изображения и могут 85 быть трѐх классов печати – посимвольные, построчные и постраничные. Среди таких принтеров по способу формирования изображения выделяют струйные, электрографические (электрофотографические), магнитографические (феррографические), электростатические и термические принтеры. Струйные принтеры – по принципу действия похожи на матричные, в них тоже изображение формируется из отдельных точек через печатающую матрицу. Но точки получаются не в результате механического воздействия иголками, а путѐм выбрызгивания порций краски через отверстия в головке – сопла. Краска (чернила) подаѐтся из специальных резервуаров с применением управляющих механизмов. Очень широкое применение струйные принтеры нашли в цветной печати. Цветная печать обеспечивается использованием чернил четырѐх цветов – чѐрного, желтого, синего и пурпурного, для каждого из цветов используется своя группа сопл. Многоцветное изображение получается из большого количества микрокапель основных цветов в каждом элементе изображения. Струйные принтеры обладают большим количеством достоинств: Более высокое качество печати по сравнению с матричными принтерами; Простота и надѐжность механической части принтера; Меньший уровень шума при работе; Относительно низкая стоимость самого принтера. К недостаткам струйных принтеров относят: Необходимость тщательного ухода и обслуживания, чтобы не засыхали чернила в соплах при длительном простое принтера; Зависимость получаемого изображения от качества бумаги; Нестабильность получаемого разрешения печати; Высокие требования к чернилам, разные производители используют несовместимые наборы чернил; Высокая стоимость расходных материалов (чернил). Электрографические и магнитографические принтеры различаются тем, что первые формируют на промежуточном носителе скрытое электрическое изображение, а вторые – магнитное. Принцип действия электрографического принтера состоит в том, что используется промежуточный носитель записи с поверхностным фотопроводниковым слоем. Вначале на этот слой наносят скрытое электрическое изображение, потом с помощью мелкодисперсного порошка – тонера его визуализируют и переносят на конечный носитель – бумагу, закрепляя изображение, например, термическим способом. 86 Для нанесения электрического изображения на фотопроводниковый слой промежуточного носителя используют различные излучения, формируемые лазером, светодиодами, светоклапанными системами или электронно-лучевыми трубками. Принтеры часто называют по типу источника излучения (лазерный, светодиодный и др.). В настоящее время наибольшее распространение получили лазерные принтеры, обеспечивающие наилучшее качество печати. Принцип лазерной печати похож на ксерокопирование. Отличие заключается в том, что при ксерокопировании электрические изображение получается путѐм отраженного от документа света, а в лазерном принтере электрическое изображение формируется лазером по командам из компьютера. Принцип действия лазерного принтера состоит в следующем. Сначала печатаемое изображение с помощью лазера и системы зеркал наносят на фоточувствительный слой, покрывающий поверхность фотобарабана. Под воздействием света на его поверхности изменяется поверхностный заряд в тех точках, которые подверглись облучению. Далее с помощью другого барабана (девелопера) на поверхность фотобарабана наносится тончайший слой красящего порошка – тонера. Порошок притягивается к поверхностям, имеющим поверхностный заряд, благодаря чему на поверхности фотобарабана образуется изображение. После этого изображение переносится на протягиваемый между барабанами лист бумаги, которому предварительно сообщается статический заряд. Этот заряд притягивает к себе тонер с фотобарабана. Затем изображение закрепляется на листе бумаги термическим способом, когда лист бумаги протягивается между двумя валиками, нагретыми до температуры около 200 градусов Цельсия. После этого фотобарабан полностью разряжается, очищается от прилипших к нему частичек тонера и становится готовым для печати следующего листа. Вся процедура печати происходит быстро и обеспечивает высокое качество печати. Разрешающая способность получаемых изображений составляет 300-1200 точек на дюйм. Чтобы не задерживать вычислительный процесс в компьютере, лазерный принтер обычно оснащается буферной памятью. К достоинствам лазерных принтеров относятся: Очень высокое качество печати, обеспечивающее возможность воспроизведения чрезвычайно большого количества шрифтов и графических изображений; Имеются как чѐрно-белые, так и цветные принтеры; Высокая скорость печати по сравнению со струйными и матричными принтерами; 87 Высокая готовность к работе; Возможность печати на различных типах бумаги и плѐнки; Высокая стойкость отпечатанных изображений к влаге и агрессивным средам; Практическая бесшумность в работе. У лазерных принтеров имеются и недостатки: Способность к осыпанию изображения при механическом воздействии на отпечатки; Фотобарабан тоже является расходным элементом, как и тонер, и требует периодической замены. Светодиодные принтеры имеют аналогичный принцип действия, отличаются лишь источником света, в качестве которого используется светодиодная линейка. Электростатические принтеры. В них, как правило, не применяется промежуточный носитель, а используется непосредственная печать на специальную электростатическую бумагу, на поверхность которой нанесѐн тонкий диэлектрический слой. Применяются в основном для вывода графических изображений и чертежей. Феррографические принтеры по принципу функционирования похожи на электрографические принтеры. Разница состоит лишь в том, что здесь используется вместо электрического скрытое магнитное изображение. Термические принтеры. Они по принципу работы похожи на матричные принтеры. Только здесь вместо печатающей головки с иголками используют печатающую головку с нагревательными иглами, количество которых может доходить до нескольких тысяч. Печать осуществляется на специальную термочувствительную бумагу, которая изменяет цвет при точечном воздействии тепла от иголок принтера. Также существуют термопринтеры, использующие специальную красящую ленту, на которую со стороны, обращенной к конечному носителю нанесен слой краски, полностью переносимый на носитель при оплавлении его термоиголками принтера. Такие принтеры позволяют получать многоцветные изображения при использовании красящих лент разного цвета и при наложении отпечатков. К недостаткам термопринтеров относятся недостаточная яркость и контрастность получаемого изображения и ограниченная номенклатура используемой бумаги. Существуют также и другие типы принтеров, но они не имеют широкого распространения. Трѐхмерный или 3D принтер – это устройство, позволяющее с помощью компьютера печатать объѐмные объекты, в том числе изделия со сложной геометрией. 88 Принцип работы принтера состоит в послойном создании печатаемого объекта с помощью одного из типов материала, наносимого на поверхность объекта. Технологии печати могут быть различны. Например, одна из технологий предполагает печать, аналогичную работе струйного принтера. Отличие заключается в том, что вместо чернил используется связующее вещество, наносимое на тонкий слой порошка. В тех местах, где имеется связующее вещество, создается очередной твѐрдый слой (сечение) изделия толщиной около 0,1 мм. Следующее сечение наносится на предыдущее и таким образом слой за слоем выращивается весь печатаемый объект. После окончания печати объект вынимается из оставшегося порошка. Плоттер (графопостроитель) – это устройство вывода графической информации из компьютера на бумажный носитель. Такие устройства необходимы для вывода очень больших изображений. Размер печати обычного принтера обычно ограничен форматом А3 или А4. В большинстве инженерных, художественных, дизайнерских и других приложений требуется получить изображения гораздо большего размера с высоким качеством. Именно для этого и предназначены плоттеры, широко используемые в том числе в системах автоматизированного проектирования (САПР). Размер получаемого изображения на плоттере ограничен шириной и длиной рулона бумаги, заправляемого в плоттер. Принцип действия плоттера в основном аналогичен принтеру. Изображение на бумагу (кальку, плѐнку) наносится точка за точкой с помощью печатающей головки. Пишущий узел плоттера бывает перьевой, шариковый, чернильный. Могут использоваться и специальные фломастеры. Подключение плоттера к ВМ осуществляется через последовательный или параллельный порт, либо путѐм установки специальной платы в слот расширения. Для классификации плоттеров используют несколько признаков. Так, по принципу формирования изображения различают плоттеры векторного типа (наносят изображение вычерчиванием линий при перемещении пишущего узла сразу по двум координатам), плоттеры растрового типа (используют нанесение изображения строка за строкой последовательным нанесением точек). По конструкции выделяют плоттеры планшетного типа (наносят изображение на листы формата до А0, закреплѐнные тем или иным способом на рабочем столе) и плоттеры барабанного типа (с шириной рулона бумаги А1 или А0, роликовой подачей бумаги и возможностью исполнять изображения во всю длину рулона бумаги. По принципу действия различают перьевые, струйные, электростатические плоттеры, плоттеры с термопереносом изображения и карандашные плоттеры. 89 Устройства вывода на электронные носители Мониторы. Следует различать два понятия, которые часто и неточно используют как синонимы – дисплей и монитор. Дисплей – это электронное устройство, визуализирующее изображения, эквивалентно понятию экран. Монитор – это законченное устройство, состоящее из экрана (дисплея), блока управления, блока питания и корпуса. В настоящее время монитор с манипулятором мышь и клавиатурой являются основным средством взаимодействия программиста с ВМ. Монитор предназначен для вывода на экран изображений и алфавитно-цифровой информации, способен выводить результаты решения задач в самом различном виде. Большое разнообразие мониторов классифицируется по следующим признакам: принципу формирования изображения на экране; по виду развѐртки, длительности хранения информации на экране, цветности изображения. По физическим принципам формирования изображения на экране различают дисплеи на базе электронно-лучевых трубок, жидкокристаллические (ЖК) и плазменные дисплеи. Электронно-лучевая трубка (ЭЛТ) представляет собой вакуумную стеклянную колбу, в которой изображение проявляется на внутренней стороне экрана, покрытого слоем люминофора – вещества, светящегося под воздействием электронного луча, генерируемого электронной пушкой и направляемого с помощью систем горизонтальной и вертикальной развѐртки. ЖК дисплеи используют для свечения жидкие кристаллы, помещѐнные между двумя слоями стекла при воздействии на них электрического заряда. Каждый кристалл представляет собой миниатюрный сегмент изображения, заполнен веществом, способным менять отражательную способность под воздействием очень слабого электрического поля, подводимого к сегменту парой электродов. Плазменные дисплеи в основе формирования изображения используют способность некоторых газов светиться под воздействием управляемых электрических разрядов. По виду развѐртки различают матричную и векторную развѐртки. Матричная развѐртка используется для высвечивания изображения на всѐм экране путѐм перемещения луча по определѐнной скачкообразной траектории, приэтом высвечивается матрица точек – пиксел. Векторная развѐртка используется для высвечивания на экране сложных фигур с помощью линий разной формы. В этом случае используется набор функциональных генераторов, каждый из которых настроен на воспроизведение определѐнного графического примитива. Общее изображение складывается из совокупности таких примитивов. 90 По длительности хранения информации на экране различают регенерируемые и запоминающие дисплеи. Регенерирующие дисплеи хранят высвеченное изображение на экране в течение долей секунды, после чего изображение медленно затухает. Для постоянного свечения изображения его необходимо регенерировать – повторять выдачу изображения на экран. Такое повторение осуществляют 20-25 раз в секунду, причем для устранения эффекта меньшей яркости отдельных строк изображения применяют чересстрочную развертку – вначале регенерируют все нечѐтные строки, затем – все чѐтные. Запоминающие мониторы способны хранить один раз высвеченное изображение в течение нескольких часов. Такие мониторы незаменимы в случаях, когда надо подробно исследовать выведенное на экран изображение. Для стирания изображения на таких мониторах подают специальное стирающее напряжение. По цветности различают цветные и чѐрно-белые мониторы. К основным характеристикам мониторов относят: Размер экрана обычно измеряется в величине диагонали экрана в дюймах (12, 14, 15, 17, 19, 21 дюймов и больше). Разрешающая способность – количество пикселей по горизонтали и вертикали, например, 1440 x 900 или 2560 x 1600 пикселей. Чем больше разрешение, тем больше элементов можно разместить на экране и больше чѐткость изображения. Соотношение сторон экрана – стандартное (4:3), широкоформатное (16:9, 16:10) или другое соотношение (например, 5:4). Глубина цвета – количество бит на кодирование одного пикселя (от монохромного до 32-битного). Частота обновления экрана (Гц). Для LCD-мониторов эта характеристика не является критичной, так как изображение, если меняется, то меняется целиком. Нормальная частота обновления экрана – 60 Гц. Для мониторов на основе ЭЛТ — эта характеристика должна составлять не менее 85 Гц. При меньших значениях наблюдается мерцание экрана, что очень вредно для глаз. Время отклика пикселей. Эта характеристика критична для ЖКмониторов. Жидкие кристаллы являются достаточно вязким веществом, поэтому изменение их свечения при изменении приложенного электрического поля происходит не мгновенно, а требует определѐнного времени. Для хорошего восприятия время отклика пикселей должно быть не более 8 мс. Угол обзора. Эта характеристика была критичной и трудно реализуемой для первых поколений ЖК мониторов. Малый угол обзора приводит к размы91 тому восприятию изображения, если наблюдение экрана производится с угла, большего данной характеристики. В настоящее время угол обзора мониторов обычно составляет не менее 160 градусов по вертикали и горизонтали. Контрастность – это отношение яркостей белого цвета к чѐрному цвету, выражается в виде 800:1, 500:1 и т.д. Яркость. Эта характеристика измеряется в кандел на квадратный метр. Для нормальной работы должна составлять не менее 80 кд/кв.м. Интерфейсы подключения мониторов Под интерфейсом понимается «совокупность средств и правил, обеспечивающих взаимодействие устройств вычислительной машины или системы обработки информации и (или) программ» [13]. Разъѐм VGA (Video Graphics Array) – устаревший аналоговый стандарт для мониторов с разрешением 640х480. DVI (Digital Visual Interface) – цифровой интерфейс для передачи изображения в цифровом формате, совместим с VGA, поскольку передает одновременно сигнал в аналоговом и цифровом формате. Одноканальная модификация обеспечивает разрешение монитора 1920х1080. HDMI (High Definition Multimedia Interface) – мультимедийный цифровой интерфейс с высоким разрешением. DP (DisplayPort). Интерфейс позволяет передавать данные цифровыми пакетами без утери качества. Данный разъѐм призван заменить стандарт DVI. Особенностью интерфейса является то, что он позволяет подключать несколько мониторов, соединѐнных последовательно, к одному системному блоку. Видеосистема компьютера состоит из монитора, видеокарты и программного обеспечения (драйверов видеосистемы). Видеокарта в современном понимании – это устройство, занимающееся формированием графического образа для вывода на экран монитора. Современные видеокарты включают в себя графический процессор, выполняющий дополнительную обработку, снимая эту задачу с центрального процессора ВМ. Графический процессор имеет высокую производительность, сравнимую и порой превышающую производительность центрального процессора благодаря наличию большого числа универсальных вычислительных блоков. В принципе графический процессор может использоваться не только для решения графических задач. Кроме графического процессора в составе видеокарты имеются видеоконтроллер, управляющий формированием изображения в видеопамяти, управляющий развѐрткой монитора, осуществляющий обработку запросов цен92 трального процессора, а также видеопамять, которая выполняет роль видеобуфера, храня информацию, собственно выводимую на экран и постоянно обновляемую графическим процессором. В состав видеокарты также входит аналого-цифровой преобразователь, обеспечивающий преобразование цифрового сигнала яркости каждого из трѐх основных цветов в аналоговый сигнал интенсивности цвета, подаваемый на аналоговый монитор. Основные параметры цветовых каналов составляют 8битовую кодировку каждого цвета, что составляет 256 значений яркости по каждому каналу, а в сумме даѐт 16,7 млн.цветов. Иногда используют 10битовую кодировку цвета, что приводит к возможности отображения более 1 млрд.цветов, но эта возможность практически никогда не используется. Видео-ПЗУ – это постоянное запоминающее устройство, где записаны видео-BIOS, экранные шрифты, служебные таблицы и др. информация. К видеоПЗУ обращается центральный процессор для инициализации работы монитора до загрузки основной операционной системы. Обязательным элементом видеокарты является система охлаждения, поддерживающая нормальный температурный режим работы видеопроцессора и видеопамяти. Ещѐ одним типом устройств ввода-вывода являются сенсорный экран – необходимый элемент планшетных компьютеров. Это координатное устройство, позволяющее путѐм прикосновения к области экрана осуществлять выбор элемента меню, вводить данные в ВМ, изменять настройки разрешения экрана и выполнять другие функции. В последнее время область применения сенсорных экранов постоянно расширяется, поскольку их применение обеспечивает удобства пользователям и интуитивно понятный интерфейс. Синтезатор звука – это своеобразное устройство вывода информации, в минимальном варианте представляет собой малогабаритный динамик, способный воспроизводить отдельные звуковые сигналы и серии звуков, мелодий. В более сложном варианте представляет собой устройство синтеза речи. 6.4. Устройства командного управления Мышь – это механический манипулятор, который преобразует движение в управляющий сигнал. Данный тип манипуляторов ведѐт свою историю с первых компьютеров Макинтош и в настоящее время является обязательным элементом персонального компьютера. Широкое распространение манипулятор мышь получил в связи с распространением графического интерфейса операционных систем. По принципу действия манипулятор передаѐт информацию своего пере93 мещения на рабочей поверхности компьютеру, который в ответ осуществляет определѐнные действия на экране монитора. Во многих приложениях положение манипулятора связано с положением курсора на экране монитора, который является средством управления элементами интерфейса. Манипулятор мышь имеет кроме датчика перемещения одну или несколько кнопок и другие элементы управления. По типу привода датчика перемещения различают манипуляторы с шаровым приводом, оптические мыши с матричным сенсором и лазерные мыши. Мышь с шаровым приводом была исторически первой из подобных манипуляторов. Она имеет обрезиненный стальной шарик, касающийся роликов взаимно перпендикулярных друг другу. Эти ролики снимают перемещения мыши в двух направлениях и передают их на датчики угла поворота, последние преобразуют величину смещения в электрические сигналы, передаваемые компьютеру. Основным недостатком шарового привода является загрязнение поверхности шарика и снимающих движение роликов, что приводило к заеданию работы мыши. Эти элементы надо было периодически чистить. В настоящее время такие манипуляторы практически полностью заменены более технологичными оптическими мышами. Оптические мыши с матричным сенсором – содержат в нижней поверхности манипулятора быструю видеокамеру, которая, постоянно делая снимки поверхности стола, сравнивает их и вычисляет относительное перемещение по двум координатам. Для повышения качества работы мышь имеет подсветку рабочей поверхности. Такая схема работы обеспечивает хорошую работу манипулятора на любых поверхностях кроме прозрачных и зеркальных. Для устранения этого недостатка некоторые мыши оборудуются сразу двумя датчиками перемещения, что позволяет мыши успешно работать на зеркальных и стеклянных поверхностях. Оптические лазерные мыши – используют для подсветки луч полупроводникового лазера. В качестве элементов управления манипулятором используют кнопки, и колесо прокрутки. Ранее популярными были мыши с двумя или тремя кнопками, которые использовались для выбора объекта (нажатиями), активного перемещения (с нажатой кнопкой), для рисования и других манипуляций. В последнее время на смену трѐхкнопочной мыши пришла мышь с колесом прокрутки вместо центральной кнопки, причѐм нажатие на колесо прокрутки выполняет функцию третьей кнопки. Колесо прокрутки используется для прокрутки содержимого экрана вниз или вверх. 94 Производители часто включают в свои модели дополнительные кнопки для выполнения функций настройки мыши (например, чувствительности), управления элементами браузера, громкости воспроизведения и других дополнительных функций. Другим элементом управления может выступать колесо или потенциометр прокрутки, отличающиеся тем, что потенциометр имеет крайние положения, а колесо – нет. Также может присутствовать мини джойстик – специальный рычаг с двумя кнопками или сдвоенное под прямым углом плечо, ориентированное в четырѐх направлениях. Мини джойстик используется как для управления горизонтальной и вертикальной прокруткой, так и в игровых приложениях как обычный джойстик. Манипулятор мышь может быть подключѐн к компьютеру проводным соединением или иметь беспроводное соединение. Провод иногда считается ограничивающим и мешающим фактором при работе с мышью. Но беспроводное подключение вынуждает оснащать мышь источником питания, что утяжеляет манипулятор и приводит к необходимости периодической подзарядки аккумуляторов или смены батарей питания. Радиомышь имеет подключение к компьютеру по радиоканалу обычно в диапазоне 2,45 ГГц. Раньше популярными были мыши со специальным донглом, подключѐнным к USB слоту компьютера. Потеря донгла приводила к невозможности дальнейшего использования мыши. Теперь используют третье поколение мышей со стандартным радиоинтерфейсом, что не требует использования донгла. Но такие мыши имеют более высокую цену и большее энергопотребление. Индукционные мыши – имеют питание от специального индукционного коврика, подключаемого к компьютеру кабелем. Такие мыши не требуют подзарядки, но не позволяют работать на значительном расстоянии от компьютера, как обычные беспроводные мыши. Достоинствами индукционных мышей являются: дешевизна, пригодность для длительной работы, высокая точность позиционирования курсора, высокая функциональность при оснащении мыши дополнительными элементами управления. К недостаткам относятся: необходимость для работы гладкой поверхности довольно большого размера и неустойчивость к вибрациям из-за чего такие мыши не применяются в военной области. Трекбол – фактически представляет собой перевѐрнутую вверх шариком мышь с шаровым приводом. Пользователь может вращать шар в разных направлениях пальцами или ладонью, управляя курсором на экране монитора. 95 Такие манипуляторы нашли основное применение в специальных ВМ военного назначения, в промышленности или при управлении аппаратами ультразвуковой диагностики, т. е. везде, где условия работы связаны с ограничением рабочего пространства и с возможной вибрацией. Джойстик – устройство командного управления в виде ручки, качающейся в двух плоскостях. Применяется в основном в игровых приложениях. Тачпад – сенсорная панель. Применяется в ноутбуках для позиционирования и перемещения курсора в зависимости от движения пальца по поверхности тачпада. Практически заменяет мышь, обеспечивая выполнение тех же функций, но не имеет движущихся частей. Работа тачпада основана на измерении ѐмкости пальца или разности ѐмкостей между сенсорами, расположенными вдоль вертикальной и горизонтальной осей тачпада. Поэтому тачпад не имеет возможности работать, если по нему водить не пальцем, а другим предметом, например, кончиком карандаша. Явные преимущества сенсорной панели, заключающиеся в удобстве работы, отсутствии движущихся частей и быстрого привыкания к работе с ней, сопровождаются недостатком, заключающимся в относительно низком разрешении, что затрудняет работу в графических редакторах и в некоторых играх. Средства речевого ввода данных позволяют пользователю оперировать голосом как средством ввода команд и данных. Такие средства уже широко используются некоторыми приложениями, но проблема состоит не в самом вводе речевого сигнала в ВМ, а в правильном распознавании смысла речи и переводе еѐ в текстовый вид. Многие исследователи считают, что будущее связано с совершенствованием средств речевого ввода информации, особенно в направлении роботизации. 6.5. Устройства обмена данными Модем. Название образовано от сочетания МОдулятор + ДЕМодулятор, т. е. представляет собой два устройства, объединѐнные в одном корпусе (на одной плате). Модем предназначен для обмена информацией между удаленными ВМ по каналам связи с использованием телефонной сети. Поскольку телефонная сеть аналоговая, то в модеме проводится преобразование цифрового сигнала в аналоговый на передающем устройстве и обратное преобразование на приѐмном устройстве. Для модема важны характеристики производительности (бит/с), поддерживаемых протоколов связи и коррекции ошибок и тип внутреннего интерфейса для встроенных модемов. Сетевой адаптер – внешнее устройство ВМ, осуществляющее взаимодействие с сетевой средой передачи данных, связывающей ВМ с другими компью96 терами в сети. На сетевой адаптер совместно с его драйвером операционной системы возложены задачи надежного обмена цифровыми данными при взаимодействии с другими компьютерами, подключѐнными к коммуникационной сети. Сетевой адаптер осуществляет доступ к среде передачи данных, оформляет передаваемые данные в виде кадров определѐнного формата, преобразует информацию из параллельного кода в последовательный и обратно, осуществляет синхронизацию битов, байтов и кадров между передатчиком и приѐмником информации, используя специальные методы кодирования. Интерактивные устройства, к которым относятся интерактивные доски, интерактивные проекторы, интерактивные приставки, используются в основном в сфере образования. Они обеспечивают удобство преподавателям в доведении информации до учащихся с применением средств вычислительной техники. 6.6. Устройство персонального компьютера Рассмотрим типовую архитектуру ВМ на примере наиболее распространенной компьютерной системы – персонального компьютера (ПК). В основе построения персонального компьютера положен принцип открытой архитектуры. Он состоит в том, что регламентируются только принцип действия компьютера и основная его конфигурация. Поэтому сам компьютер составляется из отдельных готовых элементов и способен к дополнению его отдельными узлами и деталями, необходимыми пользователю для выполнения нужных ему функциональных возможностей. Отдельные детали и узлы производятся независимыми поставщиками и имеются на рынке. Компьютер легко поддаѐтся модификации и расширению функциональных возможностей благодаря наличию внутренних слотов расширения, куда вставляются отдельные узлы, стандартизованные по интерфейсу подключения. Современный ПК состоит из системного блока, монитора, клавиатуры и манипуляторов, основным из последних является компьютерная мышь. В системном блоке размещаются блок питания, накопитель на жестких дисках, системная (материнская) плата, платы расширения, накопитель DVD-ROM и другие элементы. Системная плата содержит основные компоненты ПК, составляющие основу его архитектуры: центральный процессор, постоянную и оперативную память, кэш-память, шинные интерфейсы, системные средства ввода-вывода, гнѐзда расширения и т.д. Все дополнительные устройства (сетевая плата, видеоплата, модем и т.д.) выполняются в виде отдельных плат, вставляемых в слоты расширения – специальные разъѐмы, подключѐнные к общей шине компьютера. 97 Порты внешних устройств – электронные схемы с несколькими регистрами, адресуемыми в общем адресном пространстве ПК, позволяют подключать периферийные устройства ввода-вывода к внешним шинам микропроцессора. Портами также называют устройства стандартного интерфейса ПК – последовательный, параллельный и игровой порты. По последовательному порту происходит обмен информацией с внешними устройствами побитно, а с процессором – побайтно. К такому порту обычно подключают удалѐнные и относительно «медленные» устройства – мышь, модем. К параллельному порту, а он передает и принимает данные побайтно, подсоединяются такие устройства как принтер и сканер. К игровому порту подсоединяется джойстик. Монитор и клавиатура подсоединяются к специализированным разъѐмам компьютера. В последнее время широкое распространение приобрела структура ПК, называемая моноблок. В ней отсутствует системный блок, а системная плата и всѐ, что размещается обычно в системном блоке, выполнено в одном корпусе вместе с монитором. Такой ПК выполняет все функции обычного компьютера, но менее доступен для модификации. Общая структура ПК в упрощѐнном виде представлена на рис. 6.10. Рис. 6.10. Структура ПК с периферийными устройствами. 98 7. КОНВЕЙЕРЫ ВМ 7.1. Общие сведения о конвейеризации Разработчики архитектуры компьютеров уже давно для повышения производительности ВМ широко используют метод проектирования, известный под общим названием «совмещение операций». Сущность этого метода заключается в том, что аппаратура ВМ в любой момент времени выполняет более одной базовой операции одновременно. Этот общий метод включает два подхода: параллелизм и конвейеризацию. При внешней похожести этих подходов они имеют совершенно различный смысл. При параллелизме совмещение операций достигается путем введения в состав ВМ нескольких копий аппаратной структуры и обеспечения их параллельного функционирования при решении различных частей задачи. При конвейеризации (или конвейерной обработке) совмещение операций основано на разбиении выполняемых функций на более мелкие части (ступени) и выделении для каждой из них отдельного аппаратурного блока. Например, выполнение любой машинной команды можно разделить на несколько этапов (ступеней), организовав передачу данных от одного этапа к следующему. При конвейерной обработке используется совмещение разных этапов выполнения последовательности команд. Рост производительность при этом достигается благодаря одновременному выполнению нескольких команд на различных ступенях конвейера. Такая конвейерная обработка широко используется всеми современными быстродействующими процессорами. По признаку использования синхронизации работы ступеней различают синхронные и асинхронные конвейеры. Традиционные вычислительные машины основаны на применении синхронных конвейеров. Поскольку ступени конвейера обычно размещены компактно, то тракты распространения сигналов синхронизации являются очень короткими и фактор перекоса этих сигналов становится не существенным. Примером асинхронного конвейера можно назвать систолические вычислительные системы, которые будут рассмотрены позже. 7.2. Простейший конвейер команд и оценки его эффективности При рассмотрении конвейерной обработки мы будем использовать архитектуру ВМ, содержащую целочисленные регистры общего назначения (R0,...,R31), регистры с плавающей точкой (F0,...,F31) и счетчик команд PC. Считаем, что система команд нашего процессора включает типовые арифметические и логические операции, операции с плавающей точкой, операции пере99 сылки данных, операции управления потоком команд и системные операции. Используется трехадресный формат команд, типичный для RISC-процессоров, а для обращения к памяти используются специальные операции загрузки регистров и записи содержимого регистров в память. Выполнение типичной команды в данной архитектуре ВМ можно разделить на следующие этапы: выборка команды – Т1 (из памяти извлекается команда по адресу, заданному счетчиком команд); декодирование команды / выборка операндов из регистров – Т2; выполнение операции / вычисление эффективного адреса памяти –Т3; обращение к памяти – Т4; запоминание результата – Т5. Для конвейеризации выполнения команд можно просто разбить выполнение каждой команды на приведенные выше этапы, обеспечить выполнение каждого этапа за один такт синхронизации и начинать в каждом такте выполнение новой команды. Хранение промежуточных результатов каждого этапа необходимо обеспечить в промежуточных регистрах или в буферной памяти, которые обеспечивают передачу данных и управляющих сигналов с одной ступени конвейера на следующую. Общее время выполнения каждой команды в таком конвейере составляет пять тактов, но в каждом такте аппаратура сможет в совмещенном режиме выполнять пять различных команд. Работу конвейера обычно иллюстрируют временными диаграммами (рис. 7.1), на которых изображаются выполняемые команды, номера тактов и этапы выполнения команд. Номер команды Команда i Команда i+1 Команда i+2 Команда i+3 Команда i+4 1 Т1 2 Т2 Т1 3 Т3 Т2 Т1 Номер такта 4 5 6 Т4 Т5 Т3 Т4 Т5 Т2 Т3 Т4 Т1 Т2 Т3 Т1 Т2 7 8 9 Т5 Т4 Т3 Т5 Т4 Т5 Рис. 7.1. Представление работы конвейера в форме временной диаграммы. Конвейеризация увеличивает пропускную способность процессора (количество команд, завершающихся в единицу времени), но время выполнения каждой отдельной команды не сокращается. В действительности, конвейеризация даже несколько увеличивает время выполнения каждой команды из-за присутствия накладных расходов, связанных с необходимостью промежуточного хранения данных между ступенями конвейера и управления конвейером. Но уве100 личение пропускной способности означает, что программа будет выполняться быстрее по сравнению с простой не конвейерной схемой. Чтобы конвейер работал эффективно, он должен быть сбалансирован. Т. е. задержка на каждой ступени конвейера должна быть примерно одинакова. Такт синхронизации конвейера не может быть меньше, чем время, необходимое для работы наиболее медленной ступени конвейера. Накладные расходы на организацию конвейера возникают из-за задержки сигналов в его буферных регистрах между ступенями и из-за перекосов сигналов синхронизации. Показатели эффективности конвейеров Эффективность конвейеризации вычислений обычно оценивается следующими показателями: ускорение, эффективность и производительность. Под ускорением понимается отношение времени обработки без конвейера и времени обработки при наличии конвейера. Теоретически наилучшее время обработки массива N значений TNK на конвейере с K ступенями и тактовым периодом TK можно определить выражением (7.1) . Здесь учтено, что первый результат будет получен за K тактов, а последующие будут получены в каждом такте по одному. В процессоре без конвейера время обработки составит N K TK. Следовательно, ускорение обработки составит . (7.2) При N→∞ ускорение стремится к величине K – числу ступеней конвейера. Следующий параметр – эффективность E – доля ускорения, приходящаяся на одну ступень конвейера. . (7.3) При N→∞ E стремится к 1. Третьим параметром выступает пропускная способность или производительность P – эффективность, деленная на длительность тактового периода: ( ( . )) (7.4) При N→∞ P стремится к частоте тактирования конвейера F = 1/ TK. Уровни конвейеризации Макроконвейер – конвейеризация на уровне процессоров. Конвейер команд – конвейеризация команд процессора. Конвейер арифметический – конвейеризация на уровне выполнения каждой команды процессора. 101 7.3. Понятие конфликтов в конвейере и пути их устранения Конвейерная обработка показывает высокую эффективность лишь в случае, когда поддерживается полная загрузка конвейера и сохраняется высокая скорость подачи в конвейер команд и операндов. Однако в работе конвейера могут присутствовать задержки, обусловленные разными причинами. Любая задержка приводит к неполной загрузке конвейера и к снижению его производительности. Задержки конвейера вызываются конфликтными ситуациями, из-за которых невозможно поступление на вход конвейера новых команд. Поэтому наличие конфликтов снижает производительность конвейера, которая могла бы быть достигнута в идеальном случае. Различают три типа конфликтов, возникающие при выполнении команд в конвейере: Структурные конфликты – это конфликты по ресурсам, если аппаратура ВМ не поддерживает некоторые комбинации команд при одновременном выполнении в конвейере. Конфликты по данным – это конфликты, когда выполнение последующей команды зависит от результата выполнения предыдущей команды. Конфликты по управлению – они возникают при выполнении команд, изменяющих значение счетчика команд, например, условных переходов. Результатом возникновения конфликтов в конвейере являются приостановки выполнения команд. Это приводят к тому, что приостанавливается выполнение одной и всех последующих за ней команд. Предыдущие команды продолжают выполняться, но пока не разрешѐн конфликт не запускается ни одна новая команда. Структурные конфликты Структурный конфликт возникает из-за недостаточности ресурсов. Поэтому для устранения структурных конфликтов необходимо дублировать ресурсы и конвейеризировать функциональные блоки процессора. К примеру, если этапы Т1 и Т3 не могут быть выполнены одновременно, то возникает структурный конфликт, поясняемый диаграммой (рис.7.2). Иногда с целью снижения стоимости или уменьшения задержки устройства разработчики допускают наличие структурных конфликтов. Это оправдано, если задержки по таким конфликтам будут происходить не слишком часто. 102 Рис. 7.2. Диаграмма работы конвейера при структурном конфликте. Конфликты по данным Существенное влияние на производительность конвейерных систем, оказывают конфликты по данным, вызываемые логическими зависимостями выполняемой последовательности команд. Эти конфликты существенно снижают потенциально достижимые показатели эффективности конвейера. Характер влияния этих зависимостей обусловливается характеристиками программ и архитектурой процессора. Пример возникновения конфликтов по данным при конвейерном выполнении последовательности команд показан на рис. 7.3 и рис. 7.4. В этом примере все команды, следующие за командой ADD, используют результат ее выполнения. Команда ADD заносит результат в регистр R1, а команда SUB и последующие команды используют это значение в качестве операнда. Если не предпринять мер для предотвращения этого конфликта, то команда SUB прочитает немодифицированное командой ADD значение и попытается его использовать. Рис. 7.3. Последовательность команд в конвейере и ускоренная пересылка данных. Техника продвижения данных. Представленная выше проблема может быть ликвидирована с помощью аппаратной техники, называемой пересылкой или продвижением данных. Такая аппаратура функционирует следующим образом: результат операции АЛУ с его выходного регистра всегда снова подается назад на входы АЛУ; если аппаратура выявляет, что предыдущая операция АЛУ записывает результат в регистр, соответствующий источнику операнда для следующей операции АЛУ, то логические схемы управления выбирают в качестве входа 103 для АЛУ результат, поступающий по цепи «обхода», а не значение, прочитанное из регистрового файла (рис. 7.5). Рис. 7.4. Совмещение чтения и записи регистров в одном такте. Рис. 7.5. АЛУ с цепями обхода и ускоренной пересылки. Эта техника продвижения данных может быть расширена так, чтобы направить передачу результата прямо в то функциональное устройство, которое в нем нуждается: результат с выхода одного устройства «пересылается» на вход другого, а не с выхода некоторого устройства только на его вход. Но не все потенциальные конфликты по данным могут разрешаться применением механизма пересылки данных. Это касается, например, операций чтения данных из памяти, как в примере, иллюстрируемом рис.7.6. 104 Рис. 7.6. Приостановка конвейера. Здесь команда загрузки (LW) регистра R1 из памяти имеет задержку, которая не может быть устранена с помощью техники пересылки данных. Для устранения последствий такого конфликта необходима дополнительная аппаратура, осуществляющая внутренние блокировки конвейера. Эта аппаратура выявляет конфликты и приостанавливает конвейер до тех пор, пока существует конфликт. В случае рассматриваемого примера эта аппаратура вызывает приостановку конвейера или появление «пузыря» (0) точно так же, как и в случае структурных конфликтов. Для разрешения конфликтов по данным используются ряд методов. Методика планирования компилятора. Многие типы приостановок конвейера могут происходить достаточно часто. Например, для операции А = B + С компилятор, скорее всего, сформирует следующую последовательность команд (рис. 7.7). Рис. 7.7. Последовательность команд, сформированная компилятором. Здесь выполнение команды ADD должно быть приостановлено до тех пор, пока не станет доступным поступающий из памяти операнд C. Дополнительной задержки выполнения команды SW не произойдет в случае применения цепей обхода для пересылки результата операции АЛУ непосредственно в регистр данных памяти для последующей записи. В указанном простом примере компилятор не может обеспечить ликвидацию конфликта. Но в общем случае имеется возможность изменить последовательность команд таким образом, чтобы не допустить приостановок конвейера. Эта техника называется планированием загрузки конвейера или планированием потока команд. Смысл техники поясним следующим примером. Пусть имеется последовательность операций: a = b + c; d = e – f. На рис.7.8 показаны два варианта последовательности выполнения данных опера105 ций – неоптимизированная и оптимизированная. Видно, что оптимизированная последовательность команд позволяет устранить два возможных конфликта по данным – блокировки командой LW Rc,c команды ADD Ra,Rb,Rc и блокировки командой LW Rf,f команды SUB Rd,Re,Rf. Возможная зависимость между операцией АЛУ и операцией записи в память может быть устранена с помощью рассмотренной ранее техники продвижения данных. Рис. 7.8. Пример устранения конфликтов компилятором. В общем случае для реализации перестановок команд при оптимизации последовательности вычислений может потребовать увеличенного количества регистров в процессоре. Такое увеличение может оказаться особенно существенным для процессоров, которые могут выдавать на выполнение несколько команд в одном такте. Стратегия планирования на основе базовых блоков. Техника планирования команд используется многими современными компиляторами для улучшения производительности конвейера. При этом самый простой алгоритм компилятора заключается в перераспределении команд внутри базового блока. Последний представляет собой непрерывный участок последовательности программного кода, не содержащий команд перехода, за исключением начала и конца участка, причѐм переходы внутрь этого участка тоже должны отсутствовать. Планирование команд внутри базового блока реализуется просто, поскольку, если выполняется первая команда в блоке, то и все последующие будут выполняться, и можно минимизировать приостановки конвейера, упорядочив команды путем построения графа их взаимозависимостей. Эта стратегия планирования на основе базовых блоков дает приемлемые результаты для простых конвейеров. Но при более интенсивной конвейеризации требуются более сложные алгоритмы планирования. Для этого используют так называемые методы динамической оптимизации 106 – аппаратные методы, использующие изменение порядка выполнения команд программы для минимизации приостановок конвейера. К основным средствам динамической оптимизации относятся [6]: Размещение схемы обнаружения конфликтов в возможно более низкой точке конвейера команд так, чтобы позволить команде продвигаться по конвейеру до тех пор, пока ей реально не потребуется операнд, являющийся также результатом логически более ранней, но еще не завершившейся команды. Альтернативным подходом является централизованное обнаружение конфликтов на одной из ранних ступеней конвейера. Буферизация команд, ожидающих разрешения конфликта, и выдача последующих, логически не связанных команд, в «обход» буфера. В этом случае команды могут выдаваться на выполнение не в том порядке, в котором они расположены в программе, однако аппаратура обнаружения и устранения конфликтов между логически связанными командами обеспечивает получение результатов в соответствии с заданной программой. Организация коммутирующих магистралей, обеспечивающая засылку результата операции непосредственно в буфер, хранящий логически зависимую команду, задержанную из-за конфликта, или непосредственно на вход функционального устройства до того, как этот результат будет записан в регистровый файл или в память. Метод переименования регистров (register renaming). Получил свое название от широко применяющегося в компиляторах метода переименования – метода размещения данных, способствующего сокращению числа зависимостей и тем самым увеличению производительности при отображении необходимых исходной программе объектов (например, переменных) на аппаратные ресурсы (например, ячейки памяти и регистры). Аппаратная реализация метода переименования регистров предполагает выделение логических регистров, назначаемых операндам команды, и физических регистров, имеющихся в аппаратном регистровом файле процессора. При выполнении программы ведется таблица отображения, которая динамически фиксирует соответствие номеров логических регистров и номеров физических регистров. Эти таблицы обновляются после декодирования каждой команды. Каждый новый результат записывается в новый физический регистр. Но до тех пор, пока не завершится выполнение соответствующей команды, значение в этом физическом регистре рассматривается как временное. Предыдущее значение каждого логического регистра сохраняется и может быть восстановлено в 107 случае, если выполнение команды должно быть прервано из-за возникновения исключительной ситуации или неправильного предсказания направления условного перехода. В процессе выполнения программы генерируется множество временных регистровых результатов. Эти временные значения записываются в регистровые файлы вместе с постоянными значениями. Временное значение становится новым постоянным значением, когда завершается выполнение команды (фиксируется ее результат). В свою очередь, завершение выполнения команды происходит, когда все предыдущие команды успешно завершились в заданном программой порядке. Метод переименования регистров упрощает контроль зависимостей по данным. Причѐм использование этого метода является прозрачным для программиста, поскольку он имеет дело только с логическими регистрами. Конфликты по управлению Конфликты по управлению связаны с неопределѐнностью выбора следующей команды, загружаемой в конвейер при выполнении команд условного перехода, пока не вычислено направление перехода. Эти конфликты порой сильнее снижают производительность конвейера, чем конфликты по данным. Если команда условного перехода заменяет счетчик команд вновь вычисленным в команде значением адреса, то переход называется выполняемым; иначе – невыполняемым. Простейшим методом реагирования на команды с условными переходами является приостановка конвейера, как только выявлена команда условного перехода до тех пор, пока она не достигнет ступени конвейера, которая вычисляет новое значение счетчика команд (рис. 7.9). Рис. 7.9. Приостановка конвейера при выполнении команды условного перехода. Но в этом случае на каждой команде условного перехода конвейер приостанавливается на три такта, что существенно отражается на производительности ВМ. Если частота команд условного перехода в программах, равна 30% и среднее число тактов на выдачу команды равно 1, то конвейерная ВМ с при108 остановками условных переходов теряет примерно половину ускорения, получаемого за счет конвейерной организации. Поэтому снижение потерь от конфликтов по управлению является приоритетным направлением в архитектуре ВМ. Общим подходом борьбы с конфликтами по управлению является применение различных стратегий предсказания переходов. Эти стратегии могут быть статическими, т. е. не зависящими от выполняемой программы, и динамическими, когда решение о наиболее вероятном исходе команды условного перехода принимается на основе некоторой обработки информации о истории переходов, собираемой в процессе выполнения программы. К статическим стратегиям предсказания переходов относятся: метод выжидания; метод возврата; прогнозирование перехода как выполняемого; задержанные переходы. Метод выжидания. Эта статическая стратегия является самой простой и заключается в приостановке подачи простейшая схема обработки команд условного перехода заключается в приостановке конвейера, начиная со следующей за командой условного перехода команды, до тех пор, пока не будет вычислено направление перехода. На рис.7.9 отражен именно такой подход. Метод возврата. Более успешная, хотя и несколько более сложная стратегия. Она заключается в том, чтобы всегда рассматривать условный переход как невыполняемый. В этом случае аппаратура продолжает выполнять программу, как будто команда условного перехода отсутствует. Все операции после этой команды рассматриваются как временные без окончательной фиксации их результатов до тех пор, пока направление перехода не станет окончательно известным. Если условный переход на самом деле выполняется, то происходит очистка конвейера от временных команд, выбранных вслед за командой условного перехода и заново повторяется загрузка конвейера (рис.7.10). Прогнозирование перехода как выполняемого. Эта стратегия имеет смысл, если заранее известен адрес условного перехода. Она предусматривает после команды условного перехода загрузку в конвейер команд, начиная с целевого адреса перехода. Если переход на самом деле оказывается невыполняемым, то аналогично предыдущей стратегии необходимо очистить конвейер от команд, загруженных после команды условного перехода, и продолжать загрузку конвейера с команды, следующей после условного перехода. 109 Рис.7.10. Диаграмма работы модернизированного конвейера. Задержанные переходы. Четвертая статическая стратегия предсказания переходов, называется «задержанным переходом» (рис.7.11). Смысл стратегии заключается в выполнении в конвейере нескольких команд после команды условного перехода (эти команды называют слотом задержанного перехода) с целью не допустить простоя конвейера, пока вычисляется целевой адрес условного перехода. Задача заключается в обеспечении полезности вычисления данной последовательности команд. Рис. 7.11. Варианты планирования задержанного перехода. На рис. 7.11 показаны три случая, при которых может планироваться задержанный переход. В верхней части рисунка для каждого случая показана исходная последовательность команд, а в нижней части – последовательность ко110 манд, полученная в результате оптимизации. В случае (а) слот задержки заполняется независимой командой, находящейся перед командой условного перехода. Это наилучший выбор. Случаи (b) и (c) используются, если применение варианта (a) невозможно. Случаи (b) и (c) характеризуются наличием в команде, непосредственно предшествующей команде условного перехода, вычисление значения, используемого при определении направления перехода. Поэтому данную команду невозможно использовать в качестве слота задержанного перехода. В случае (b) слот задержки заполняется командой, находящейся по целевому адресу команды перехода. Обычно такую команду приходится копировать, поскольку к ней возможны обращения и из других частей программы. Стратегии (b) отдается предпочтение, когда с высокой вероятностью переход является выполняемым, например, если это переход на начало цикла. В случае (c) слот задержки заполняется командой, находящейся между командой невыполняемого перехода и командой, находящейся по целевому адресу. Чтобы применить такую оптимизацию, необходимо, чтобы выполнение команды в слоте задержанного перехода, возможно было бы лишней операцией, но не нарушающей корректности выполнения всей программы. В табл. 7.1 указаны ограничения для рассмотренных случаев применения стратегии задержанного перехода при планирования условных переходов, а также ситуации, в которых они дают выигрыш. Все действия выполняются компилятором. Он должен соблюдать указанные требования для заполнения слота задержки. Если подходящей команды не находится, слот задержки заполняется пустой операцией. Таблица 7.1. Выгода для вариантов планирования задержанных переходов Рассматриваемый случай (a) (b) (c) Требования Команда условного перехода не должна зависеть от переставляемой команды Выполнение переставляемой команды должно быть корректным, даже если переход не выполняется. Может потребоваться копирование команды. Выполнение переставляемой команды должно быть корректным, даже если переход выполняется. 111 Когда увеличивается производительность Всегда Когда переход выполняется. Может увеличивать размер программы в случае копирования команды Когда переход не выполняется Планирование задержанных переходов осложняется [6]: наличием ограничений на команды, размещение которых планируется в слотах задержки и необходимостью предсказывать во время компиляции, будет ли условный переход выполняемым или нет; имеются небольшие дополнительные затраты аппаратуры на реализацию задержанных переходов. Из-за задержанного эффекта условных переходов, для корректного восстановления состояния в случае появления прерывания нужны несколько счетчиков команд (один плюс длина задержки). Динамическое предсказание переходов реализуется с помощью целого ряда стратегий, например, на основе таблицы истории для шаблонов, регистров глобальной или локальной истории, применения одноуровневых, двухуровневых, асимметричных и гибридных схем предсказания переходов. Исследования показали, что точность предсказания переходов с помощью гибридных стратегий в среднем составляет 97,13%, что существенно выше по сравнению с прочими вариантами [6]. Изучение стратегий динамического предсказания переходов вам предстоит провести самостоятельно. 7.4. Реализация точного прерывания в конвейере В машине без конвейерной обработки переход к обработке прерывания осуществляется в момент завершения выполнения очередной команды. В машине с конвейерной обработкой определение момента перехода к обработке прерывания затрудняется тем, что в конвейере одновременно находятся на разных этапах исполнения несколько команд. Поэтому надо либо останавливать конвейер в момент поступления запроса на прерывание и переходить к обработке прерывания, когда закончится выполнение последней запущенной в конвейер команды, либо предпринимать специальные механизмы для обеспечения запоминания состояния ВМ при выполнении сразу нескольких команд. Когда происходит прерывание, для корректного сохранения состояния машины необходимо выполнить следующие шаги [6]: В последовательность команд, поступающих на обработку в конвейер, принудительно вставляется команда перехода на прерывание. Пока выполняется команда перехода на прерывание, погашаются все требования записи, выставленные командой, вызвавшей прерывание, а также всеми следующими за ней в конвейере командами. Эти действия позволяют предотвратить все изменения состояния машины командами, которые не завершились к моменту начала обработки прерывания. 112 После передачи управления подпрограмме обработки прерываний операционной системы, немедленно сохраняется значение адреса команды (PC), вызвавшей прерывание. Это значение будет использоваться позже для организации возврата из прерывания. В случае использования механизмов задержанных переходов, состояние машины уже невозможно восстановить с помощью одного счетчика команд, поскольку в процессе восстановления команды в конвейере могут оказаться вовсе не последовательными. В частности, если команда, вызвавшая прерывание, находилась в слоте задержки перехода, и переход был выполненным, то необходимо заново повторить выполнение команд из слота задержки плюс команду, находящуюся по целевому адресу команды перехода. Сама команда перехода уже выполнилась и ее повторения не требуется. При этом адреса команд из слота задержки перехода и целевой адрес команды перехода естественно не являются последовательными. Поэтому необходимо сохранять и восстанавливать несколько счетчиков команд, число которых на единицу превышает длину слота задержки. После выполнения обработки прерывания возврат из прерывания осуществляется специальными командами путем перезагрузки счетчиков команд и инициализации потока команд. Конвейер обеспечивает точное прерывание в случае, если он может быть остановлен так, что команды, непосредственно предшествовавшие вызвавшей прерывание команде, завершаются, а следовавшие за ней могут быть заново запущены для выполнения. Во многих системах поддержка точных прерываний является обязательным требованием, в других системах это свойство было бы весьма желательным, поскольку это упрощает интерфейс операционной системы. Причѐм средства обработки прерываний должны выполнять точное прерывание только аппаратными, либо совместно аппаратными и программными средствами. 7.5. Суперконвейерные процессоры Частота поступления команд на вход конвейера определяется его самой медленной ступенью. Поэтому чем сбалансированнее является конвейер, тем менее проявляются задержки на быстрых ступенях конвейера по сравнению с медленными ступенями. В суперконвейере возможность увеличения частоты поступления команд достигается путем выявления «медленных» ступеней и разбиения их на несколько меньших ступеней так, чтобы время обработки в каждой из них не превышало времени обработки в других ступенях конвейера. Поэтому суперкон113 вейер отличается от обычного большим количеством ступеней конвейера и большей частотой обработки за счет лучшей сбалансированности ступеней конвейера. Показателем суперконвейерности служит число ступеней (более 6). Практика показала нерациональность чрезмерного увеличения числа ступеней конвейера. Например, число ступеней в процессоре Intel Core 2 составляет 14. 7.6. Суперскалярные процессоры Поскольку возможности совершенствования элементной базы почти исчерпаны, дальнейшее повышение производительности ВМ может быть достигнуто только за счет архитектурных решений. Наиболее эффективным в этом плане является введение в вычислительный процесс различных уровней параллелизма, широко используемое, например, при одновременной обработке многокомпонентных данных – векторов или матриц в векторных и матричных процессорах. Превалирующий объем вычислений обычно приходится на скалярные вычисления – на обработку единичных операндов. Параллелизм в таких вычислениях достигается применением так называемых суперскалярных процессоров, выполняющих одновременно несколько скалярных команд. Для этого процессор оснащается несколькими самостоятельными функциональными блоками, отвечающими за свой класс операций и возможно присутствующими в процессоре в нескольких экземплярах. Микропроцессоры Пентиум 3 и Пентиум 4 являются суперскалярными, поскольку блоки целочисленной арифметики и арифметики с ПТ в первом из них имеются в двух экземплярах, а во втором – в трех. 114 8. АРХИТЕКТУРЫ ПРОЦЕССОРОВ Рассмотрим классификацию архитектур процессоров по признаку применяемой в них системы команд. Наиболее употребимыми системами команд в настоящее время относятся архитектуры CISC, RISC, VLIW и EPIC, являющаяся разновидностью архитектуры VLIW. Данные архитектуры отличаются следующими характеристиками: количество, размер и функции регистров процессора; ограничения при обращении к памяти; число операций, выполняемых одной командой; длина команд (переменная или фиксированная); число типов данных; число используемых методов адресации. 8.1. Процессоры с архитектурой CISC Архитектура CISC – архитектура с полным набором команд (Complex Instruction Set Computer). Система команд этой архитектуры имеет самые разнообразные команды с большим количеством используемых форматов команд, многими способами адресации и возможностью использовать операнды, находящиеся не только в регистрах процессора, но и в оперативной памяти. В систему команд входят также команды, соответствующие операторам языков высокого уровня. Данная архитектура сформировалась раньше других, начиная с семейства машин IBM 360 компании IBM. В настоящее время она продолжает развиваться, например, в мощных современных универсальных ВМ (мейнфреймах) и других универсальных компьютерах. Типичными признаками CISC-архитектуры являются [6]: сравнительно небольшое количество регистров общего назначения в процессоре; большое количество машинных команд, часть из которых аппаратно реализуют сложные операторы ЯВУ; разнообразие способов адресации операндов; наличие команд различной разрядности; наличие команд, совмещающих обработку с обращением к памяти. Принятый в данной архитектуре подход ведет к усложнению аппаратуры процессора, главным образом его устройства управления. Проведенные исследования показали, что доля сложных команд в программах в среднем не пре115 вышает 20%, самые сложные вообще встречаются менее доли процента. Это порой не оправдывает вынужденного усложнения аппаратной части процессора, ведь включение сложных команд увеличивает необходимую ѐмкость микропрограммной памяти более чем на 60%. Выходом из ситуации стала разработка альтернативной архитектуры – RISC. 8.2. Архитектура RISC-процессоров Архитектура с сокращенным набором команд: RISC (Reduced Instruction Set Computer) была предложена исследователями в 1980 году. Эта архитектура имеет в системе команд только наиболее часто применяемые простейшие команды с операндами, размещенными только в регистрах процессора. Обращение к памяти ограничивается и доступно только для специальных команд чтения и записи. Резко ограничено количество форматов команд и способов адресации операндов. Всѐ это приводит к существенному упрощению аппаратных средств ВМ и к увеличению их быстродействия. Целью разработки RISC-архитектуры было уменьшение времени вычислений за счет сокращения длительности такта и среднего количества тактов процессора, приходящихся на одну команду. В результате быстрый RISCпроцессор реализует сложные команды путѐм последовательности из нескольких RISC-команд, показывая не меньшую эффективность, чем CISC-процессор с аппаратной реализацией сложных команд. RISC-архитектура впервые была применена в вычислительных машинах CDC 6600 и суперЭВМ компании Cray Research. В современных ВМ RISCархитектура достаточно успешно развивается в процессорах различных фирмизготовителей (например, в процессорах Alpha фирмы DEC, серии РА фирмы Hewlett-Packard и др.). Причѐм идеи, свойственные RISC-архитектуре, всѐ больше применяются и в CISC-микропроцессорах фирм Intel и AMD, так что различия между CISC и RISC архитектурами постепенно нивелируются. Архитектура RISC ориентирована на построение максимально эффективного конвейера команд. Все команды имеют одинаковую длительность и равномерным потоком загружают конвейер. Идеальный случай, когда любой этап каждой команды выполняется в течение одного такта. Это легко достигается на цикле выборки команды, если все команды имеют одинаковую длину равную длине машинного слова. Цикл выполнения команд унифицируется сложнее, особенно для команд, связанных с обращением к памяти. На унификацию команд направлено также и сокращение числа методов адресации операндов, количества команд в системе команд, количества форматов команд и данных. При этом существенно упрощается устройство управле116 ния процессора и ускоряется его функционирование. В систему команд RISC-архитектуры включаются лишь наиболее востребованные действия – пересылка данных, арифметические и логические операции. Сложность заключается в необходимости обращения к памяти для выборки данных и инструкций программ. Поэтому RISC-архитектура максимально ограничивает количество команд, имеющих доступ к памяти («Чтение» и «Запись»), а все другие операции имеют тип «регистр-регистр». Следовательно, в центральном процессоре должно быть значительное количество регистров общего назначения, обеспечивающих хранение операндов и временных результатов вычислений. Минимальное количество РОН в данной архитектуре равно 32. Концепция RISC-компьютера сводится к следующим положениям [6]: выполнение всех (или, по крайней мере, 75% команд) за один цикл; стандартная однословная длина всех команд, равная естественной длине слова и ширине шины данных и допускающая унифицированную поточную обработку всех команд; малое число команд (не более 128); малое количество форматов команд (не более 4); малое число способов адресации (не более 4); доступ к памяти только посредством команд «Чтение» и «Запись»; все команды, за исключением «Чтения» и «Записи», используют внутрипроцессорные межрегистровые пересылки; устройство управления с «жесткой» логикой; относительно большой (не менее 32) процессорный файл регистров общего назначения (в современных RISC-микропроцессорах их число может превышать 500). Использование регистров в процессорах RISC Большое количество РОН требует оптимизации их использования. В RISCпроцессорах для оптимизации использования регистров применяются как программные, так и аппаратные средства. Программная оптимизация реализуется в ходе компиляции написанных на ЯВУ программ. Целью оптимизации является управление регистрами таким образом, чтобы разместить в них те данные, которые в период выполнения программ используются наиболее интенсивно. Компилятор в ходе своей работы использует виртуальные регистры, в каждый из которых помещается своя переменная. Количество виртуальных регистров не ограничено. Затем компилятор, пользуясь определенным алгорит117 мом, производит отображение виртуальных регистров на ограниченное количество физических регистров. Если не хватает физических регистров, часть виртуальных регистров отображается на выделенную область оперативной памяти. При этом основная задача компиляции состоит в выделении физических регистров наиболее интенсивно используемым переменным в текущий период выполнения программ. Задачей аппаратной оптимизации использования регистров в RISCпроцессорах является, прежде всего, сокращение затрат времени при работе с процедурами. Именно на вызов процедур в программах, написанных на ЯВУ, тратится больше всего времени, что связано с инициализацией и обработкой большого количества локальных переменных и констант. Для ускорения обработки процедур используется механизм так называемых окон, благодаря чему ускоряется передача параметров от вызывающей процедуры к вызываемой и в обратном направлении. Для этого выделяются группы регистров, называемые окнами. Отдельное окно назначается глобальным переменным, которые доступны всем процедурам, выполняемым в системе в любое время. Каждой отдельной процедуре выделяется отдельное регистровое окно. Все окна имеют одинаковый размер (например, по 32 регистра) и состоят из трех полей. Левое поле каждого регистрового окна одновременно является и правым полем предшествующего ему окна (рис. 8.1). Среднее поле служит для хранения локальных переменных и констант процедуры. Рис. 8.1. Перекрытие регистровых окон. Каждой вновь вызванной процедуре выделяется регистровое окно, непосредственно следующее за окном вызвавшей ее процедуры. Последние k регистров окна j одновременно являются первыми k регистрами окна j + 1. Следовательно, когда процедура, занимающая окно j, вызывает очередную процедуру, ей в данной архитектуре назначается окно j + 1, и k аргументов вызывающей процедуры, находящихся в правой части окна j сразу становятся доступны вызываемой процедуре. 118 Чтобы количество регистровых окон не ограничивало вложенность процедур, окна организуются в виде циклического буфера. На рис. 8.2 показан циклический шестиоконный буфер, заполненный на глубину 4 (процедура А вызвала В, В вызвала С, С вызвала D). Указатель текущего окна установлен в начало окна активной в данный момент процедуры – D. Такой шестиоконный циклический буфер позволяет одновременно обслуживать до 5 вложенных процедур. Если 4-я процедура D вызовет 5-ю (Е), то она спокойно разместится в циклическом буфере. Но если дальше процедура Е вызовет 6-ю процедуру (F), то выходные регистры этой процедуры перекроются со входными регистрами уже имеющейся в буфере процедуры А, что недопустимо. Поэтому перед размещением в буфере 6-й процедуры следует обязательно освободить буфер от 1-й из находящихся в нѐм процедур, выгрузив еѐ в основную память. Выгрузка процедур из буфера в память и обратная загрузка осуществляется аппаратно с помощью указателей текущего окна и указателей выгруженных окон. Рис. 8.2. Циклический буфер регистровых окон. Другой часто используемой техникой аппаратной оптимизации использования регистров является буфер переименования, т. е. применение ряда регистров, способных выполнять функции под именем любого РОН. Такая техника аналогична той, которую мы рассматривали при изучении конвейеризации команд для предотвращения конфликтов. Если сравнить достоинства и недостатки CISC и RISC, то нельзя сделать однозначный вывод в пользу одной из этих архитектур. В некоторых сферах применения лучше оказывается одна из них, в других – другая. Преимущества RISC. Технология RISC характеризуется более простой структурой устройства управления. В результате этого площадь, выделяемая для устройства управления на процессорном кристалле, существенно уменьша119 ется и появляется возможность выделить больше площади для других элементов процессора и дополнительных устройств. Т. е. увеличить количество РОНов, разместить кэш-память, блок управления памятью, порты ввода-вывода. Простое устройство управления RISC-процессоров обычно исполняется на основе комбинаторной логики, более быстродействующей по сравнению с микропрограммной логикой CISC-процессоров. Другие отличительные особенности архитектуры RISC (сокращение и унификация системы команд, уменьшение количества способов адресации и форматов команд и данных, устранение задержек в конвейерной обработке) также способствуют увеличению быстродействия RISC-процессоров. Свой вклад в повышение быстродействия вносят и применяемые способы оптимизации использования регистров. В целом применение технологии RISC приводит к увеличению скорости выполнения программ. Технология RISC также обладает рядом средств для непосредственной поддержки ЯВУ и упрощения разработки компиляторов ЯВУ, благодаря чему эта архитектура в плане поддержки ЯВУ ни в чем не уступает CISC. Недостатки RISC вытекают из некоторых преимуществ этой архитектуры. Например, сокращенное число команд приводит к необходимости использовать несколько простых команд вместо одной сложной в CISC-архитектуре. В результате количество строк в RISC-программе в среднем на 30 % больше, чем в соответствующей CISC-программе. Это удлиняет программный код, приводит к увеличению трафика команд между процессором и памятью. Большое число регистров усложняет схему декодирования номера регистра, что увеличивает время доступа к регистрам. Комбинаторная логика устройства управления процессора является менее гибкой, более склонна к ошибкам и труднее поддается модификации. 8.3. ВС с командными словами сверхбольшой длины (VLIW) Следующей архитектурой по классификационному признаку системы команд является архитектура с командными словами сверхбольшой длины (VLIW, Very Long Instruction Word). Технология VLIW базируется на RISC-архитектуре, поскольку в ней несколько простых RISC-команд объединяются в одну сверхдлинную команду и выполняются параллельно. Таким образом, архитектура VLIW, реализующая параллелизм вычислений, более относится не к вычислительным машинам, а к вычислительным системам. Архитектуру с командными словами сверхбольшой длины начали разрабатывать ещѐ в 80-х годах прошлого столетия, но только в последнее время благодаря развитию технологии производства СБИС она получила реальное прак120 тическое применение. Команда VLIW фактически представляет собой совокупность нескольких простых команд, объединенных в одну длинную команду. Сущность технологии VLIW заключается в применении «разумного» компилятора, который осуществляет эффективное планирование параллельного выполнения нескольких команд. Такой компилятор работает в несколько проходов. Вначале исходная программа исследуется с целью выявления тех команд, которые могут быть выполнены одновременно, не вызывая конфликтов в выполнении программы. Этот анализ в компиляторе может сопровождаться частичной имитацией выполнения компилируемой программы. На следующем проходе компилятор по возможности объединяет выявленные команды в сверхдлинные команды. При этом количество простых команд в команде сверхбольшой длины не должно превышать количества функциональных блоков (ФБ), имеющихся в процессоре, а каждому ФБ в общей команде соответствует своя простая команда. Сверхдлинная команда обычно имеет длину от 256 до 1024 бит. Каждое поле в такой метакоманде содержит простую команду для соответствующего ФБ. Этим обеспечивается параллельное выполнение сразу всех составляющих метакоманды и получение максимальной отдачи от аппаратуры процессора. Количество полей в метакоманде равно числу ФБ процессора и составляет величину от 3 до 20. Простые команды – это команды RISC-типа, от чего архитектуру VLIW изредка называют nocтRISC-apхитектурой. Поскольку распараллеливание кода производится на этапе компиляции, а не динамически во время исполнения, в выполняемой сверхдлинной команде исключена возможность конфликтов, что позволяет предельно упростить аппаратуру VLIW-процессора и, как следствие, добиться более высокого быстродействия. Все ФБ имеют доступ к данным, хранящимся в едином многопортовом регистровом файле. В VLIW-процессоре отсутствуют сложные аппаратные механизмы, реализующие предсказание переходов, внеочередное исполнение и другие функции, характерные для суперскалярных процессоров. Это дает значительный выигрыш в быстродействии и возможность более эффективно использовать площадь процессорного кристалла. Серьезной проблемой архитектуры VLIW является усложнение регистрового файла и связей этого файла с функциональными блоками. 8.4. Вычислительные системы с явным параллелизмом команд (ЕРIC) Архитектура EPIC (Explicitly Parallel Instruction Computing) – вычисления с явным параллелизмом команд явилась дальнейшим развитием архитектуры 121 VLIW. Она реализована в архитектуре IA-64 – совместной разработке фирм Intel и Hewlett-Packard. Первым еѐ представителем стал микропроцессор Itanium компании Intel. Для архитектуры IA-64 характерно наличие в процессоре 128 64-разрядных регистров общего назначения, 128 80-разрядных регистров с плавающей запятой и 64 однобитовых регистра предикатов. Компилятор архитектуры EPIC формирует длинную команду – связку длиною в 128 разрядов, состоящую из трѐх простых команд. Кроме полей для команд связка содержит поле шаблона, в котором указываются зависимости между командами внутри данной связки и командами соседних связок (можно ли с командой I0 запустить параллельно I1 или же I1 должна выполниться только после I0; или можно ли с командой I2 из связки S0 запустить параллельно команду I3 из связки S1). Одна связка содержит три простые команды для трѐх функциональных блоков процессора. Процессоры IA-64 могут содержать разное количество таких блоков, оставаясь при этом совместимыми по коду. Поскольку в шаблоне указывается зависимость и между связками, то для процессора с N одинаковыми группами из трех ФБ будет соответствовать сверхдлинная команда, состоящая из N*3 длинных команд-связок. Благодаря этому обеспечивается масштабируемость процессоров IA-64. Поле каждой из трех команд в связке состоит из пяти полей [6]: 13-разрядного поля кода операции; 6-разрядного поля предикатов, хранящего номер одного из 64 регистров предиката; трѐх 7-разрядных полей (первого операнда, второго операнда и результата), где указывается номер регистра общего назначения или регистра с плавающей запятой, которые соответствуют этим переменным. Поле предикатов в поле каждой простой команды предназначено для обработки условных ветвлений. Компилятор архитектуры EPIC имеет особый алгоритм разрешения конфликтов по управлению. На выполнение в случае обработки команды условного перехода запускаются одновременно обе возможные ветви вычислительного процесса, каждая на своем функциональном блоке. Причѐм в поле предикатов указывается свой регистр предикатов. Результаты вычислений в обеих ветвях считаются временными и не фиксируются, пока не определены значения предикатов. Когда будет вычислено направление условного перехода, предикат правильной ветви вычислений устанавливается в 1, а другой – в 0. Фиксации подлежат только значения той ветви вычислительного процесса, которая соответствует единичному значению поля предикатов. 122 Таким образом, данная архитектура по логике управления вычислительным процессом несколько сложнее архитектуры VLIW, но намного проще, чем архитектура суперскалярных процессоров с неупорядоченной выдачей. Поэтому архитектура EPIC свободна от многих недостатков архитектурной организации VLIW. В результате отличительными особенностями рассматриваемой архитектуры являются наличие большого количества регистров, использование предикации – параллельного вычисления двух ветвей при обработке команд условного перехода, предварительная загрузка операндов из оперативной памяти и использование выявляемых компилятором зависимостей между командами для управления вычислительным процессом. Резюмируя рассмотрение архитектур VLIW и EPIC, отметим их преимущества и недостатки. Преимущества. В результате применения специального компилятора выявление команд, способных выполняться параллельно, производится на этапе компиляции, а не в ходе вычислений, как в суперскалярных процессорах. Это позволяет существенно упростить аппаратуру процессора и применить параллельное вычисление операций несколькими фунциональными блоками, что приводит к значительному увеличению быстродействия. Недостатки. Необходимость применения более совершенных компиляторов, выявляющих независимые команды и объединяющих их в сверхдлинные команды. Некоторая зависимость компиляторов от аппаратурных особенностей вычислительной системы. Основные сферы применения. Основными областями применения архитектур VLIW и EPIC являются высокопроизводительные (свыше 1 млрд операций/с) цифровые сигнальные процессоры и мультимедийные процессоры, а также вычислительные системы, ориентированные на архитектуру IA-64. В России VLIW-архитектура развивается в суперкомпьютере Эльбрус 3-1 и в процессорах следующих поколений марки Эльбрус. К VLIW можно причислить семейство сигнальных процессоров TMS320C6x фирмы Texas Instruments. 8.5. Архитектура многоядерных процессоров Под многоядерным процессором понимают центральный процессор, имеющий два и более вычислительных ядра на одном процессорном кристалле или в одном корпусе. Здесь ядро – это процессор и кэш-память первого уровня (L1). Наличие нескольких ядер предполагает обеспечение их взаимодействия при выполнении одной или нескольких задач. Это взаимодействие может быть обеспечено через общую шину, если в процессоре имеется общая для ядер память, или через коммуникационную сеть, если основная память распределена 123 между ядрами. Шинная организация взаимодействия ограничивает количество ядер процессора, поскольку пропускная способность шины не позволяет подключить к общей шине более 32 процессоров. Многоядерные процессоры различных фирм-изготовителей существенно различаются по архитектуре. Причем различными могут быть не только схема коммуникации между ядрами, но и иерархия кэш-памяти. Практически все архитектуры содержат кэш-память первого уровня L1 для каждого ядра. Кэшпамять второго уровня L2 может принадлежать индивидуальному ядру или обслуживать несколько ядер, например, два. Многоядерные процессоры последних поколений обычно содержат кэш-память третьего (L3) и даже четвѐртого (L4) уровней, обычно общую для всех ядер процессора. Каждый производитель применяет в своих многоядерных процессорах некоторые архитектурные особенности. Так, процессоры фирмы AMD характеризуются наличием связей между ядрами не через материнскую плату, а непосредственно в процессорном кристалле. Это приводит к более эффективному взаимодействию ядер. Разработка и применение многоядерных процессоров вызвано необходимостью повышения быстродействия в условиях приближения к предельно достижимому максимуму тактовой частоты. Многоядерные процессоры существенно облегчают реализацию распараллеливания вычислений. Каждое ядро применением гиперпотоковой обработки обеспечивает одновременное обслуживание двух потоков. Соответственно, N ядер могут одновременно обслужить 2*N потоков. Основную роль в организации параллельного выполнения задач решает операционная система, поскольку в аппаратном плане ядра достаточно самостоятельны. Для взаимодействия ядер используется система коммуникации процессора и общая кэш-память 3-го и 4-го уровней. Применение многоядерных процессоров позволяет экономить энергопотребление по сравнению с вариантом использования эквивалентного количества одноядерных процессоров. 8.6. Классификация по месту хранения операндов Ранее рассмотренная классификация процессоров по количественным характеристикам применяемой системы команд не является единственно возможной. Не менее важным являются признаки места расположения операндов и способов доступа к ним. По этим признакам различают следующие виды архитектур системы команд: стековую; аккумуляторную; 124 регистровую; с выделенным доступом к памяти. От выбора архитектуры, классифицированной по данным признакам, зависит сколько адресов будут содержать команды, какова будет длина команд и как осуществляется доступ к операндам. Стековая архитектура Стек – это множество логически взаимосвязанных ячеек, взаимодействующих по принципу «последним вошел, первым вышел» (LIFO – Last In First Out). По принципу доступа к данным стековая память резко отличается от адресной основной памяти ВМ. Стековая память и принцип действия стековой машины рассмотрены в разделе 5.3.1. В стековых ВМ (рис.8.3) операнды перед обработкой помещаются в верхние ячейки стековой памяти. Результат операции заносится в стек. Рис. 8.3. Стековая архитектура вычислительной машины. Для повышения быстродействия ВМ верхние ячейки стековой памяти, как правило, являются более быстродействующими и размещаются в процессоре, а остальная часть стека может располагаться в оперативной памяти. Архитектура ВМ на базе стека использует безадресный формат для большинства команд. Поэтому программный код получается компактным и упрощается декодирование команд. Недостатком стековой ВМ является отсутствие гибкости по размещению операндов, что приводит к трудностям создания компилятором эффективного программного кода, хотя сами компиляторы являются очень простыми. Сам стек к тому же становится «узким местом» в вопросах повышения производи125 тельности. Поэтому данная архитектура, применявшаяся в 60-х годах прошлого столетия, долгое время считалась неперспективной. В последнее время интерес к стековой архитектуре ВМ возрождается благодаря увеличению популярности языка Java и расширением сферы применения языка Forth, которым по семантике наиболее подходит именно стековая архитектура ВМ. Аккумуляторная архитектура Аккумуляторная архитектура исторически возникла одной из первых и ориентирована на применение одноадресных команд. Логика использования такой архитектуры пояснена в разделе 3 на примере учебной вычислительной машины. Упрощенная структурная схема процессора с аккумуляторной архитектурой приведена на рис.8.4. Рис. 8.4. Аккумуляторная архитектура вычислительной машины. Эта архитектура предусматривает для выполнения большей части команд использование специального регистра – аккумулятора. Он используется для хранения первого операнда и размещения результата операции. Для хранения второго операнда используется ячейка основной памяти. В эту же память сохраняется результат операции из аккумулятора, если он не используется в качестве операнда для следующей операции. Для загрузки в аккумулятор данных из заданной ячейки памяти и для запоминания содержимого аккумулятора в память предусмотрены специальные команды. Достоинствами аккумуляторной архитектуры являются короткие одноадресные команды и простота декодирования команд. Однако использование только одного регистра является причиной повышенного трафика между про126 цессором и основной памятью. Архитектура ВМ на базе аккумулятора была популярна в ранних ВМ, таких, например, как IBM 7090, DEC PDP-8, MOS 6502. Регистровая архитектура В ВМ, реализующих регистровую архитектуру, процессор содержит несколько регистров общего назначения (РОН), составляющих так называемый регистровый файл. Эти регистры используются для хранения недавно использовавшихся данных и операндов для предстоящих вычислений. Размер регистров обычно равен размеру машинного слова. Обращение к любому регистру осуществляется по его номеру. Количество РОН в CISCархитектурах не более 32, поэтому в адресной части команды можно указать два или три регистра, т. е. использовать двух или трехадресные команды. Для RISC-архитектур количество РОН составляет до нескольких сотен, но данные архитектуры обычно используют 32-х разрядные ВМ и в команде так же может быть указано до трех регистров. Регистровая архитектура допускает наличие операндов как в основной памяти, так и в регистровом файле. По месту размещения операндов различают три разновидности команд: регистр-регистр, регистр-память и память-память. Первый вариант предусматривает размещение как операндов, так и результата операции только в регистрах. При втором варианте «регистр-память» один из операндов находится в регистре, а второй в оперативной памяти; результат обычно помещается вместо одного из операндов. Третий вариант «памятьпамять» предполагает размещение как операндов, так и результата в основной памяти. Каждому из вариантов свойственны свои достоинства и недостатки. Вариант «регистр-регистр» наиболее быстродействующий, характеризуется фиксированной длиной команд и возможностью их выполнения за одинаковое количество тактов. Это основной вариант, используемый в RISC-процессорах. Команды типа «регистр-память» позволяют обходиться меньшим количеством РОН, являются двухадресными и характерны для CISC-машин. Наконец, вариант «память-память» считается неэффективным, хотя и встречается в наиболее сложных моделях ВМ класса CISC. Регистровая архитектура, как и аккумуляторная предусматривает наличие команд загрузки содержимого регистров из памяти и сохранение содержимого в памяти. Отличие состоит в необходимости выбора регистра, с которым осуществляется взаимодействие. Поскольку данная архитектура предусматривает наличие трехадресных команд, то между АЛУ и регистровым файлом должно 127 находиться 3 шины. Достоинства регистровой архитектуры: компактность получаемого программного кода и высокая скорость вычислений при обращении к регистрам процессора вместо памяти. Недостаток – данная архитектура использует более длинные команды по сравнению с аккумуляторной архитектурой. Регистровую архитектуру применяют практически все современные персональные компьютеры. Архитектура с выделенным доступом к памяти Обобщенная структурная схема ВМ с выделенным доступом к памяти показана на рис. 8.5. Рис. 8.5. Архитектура ВМ с выделенным доступом к памяти. В архитектуре с выделенным доступом к памяти обращение к основной памяти возможно только с помощью двух специальных команд: load и store. Команда load (загрузка) обеспечивает считывание значения из основной памяти и занесение его в регистр процессора. Операции сохранения данных регистра в памяти соответствует команда store (сохранение). Все команды обработки информации выполняются над операндами, находящимися только в регистрах процессора (обычно в РОН). Результат операции также заносится в регистр. В системе команд отсутствуют команды обработки, использующие прямое обращение к основной памяти. Допускается наличие ограниченного количества команд, где операнд является частью кода команды. Две из трех шин, расположенных между массивом РОН и АЛУ, обеспечивают передачу в АЛУ операндов из двух регистров общего назначения. Третья служит для занесения результата в назначенный для этого регистр. Эти же шины позволяют загрузить в регистры содержимое ячеек основной памяти и сохранить в ОП информацию, находящуюся в РОН. Архитектура с выделенным доступом к памяти отличается простотой де128 кодирования и исполнения команды и характерна для всех ВМ с RISCархитектурой. Команды в таких ВМ, как правило, имеют длину 32 бита и трехадресный формат. 129 9. ВВЕДЕНИЕ В ОПЕРАЦИОННЫЕ СИСТЕМЫ 9.1. Определение операционной системы Операционная система (ОС) в наибольшей степени определяет облик всей вычислительной системы в целом. Однако пользователи, активно использующие вычислительную технику, зачастую затрудняются сформулировать определение операционной системе. Согласно ГОСТ 15971-90 операционная система – это «совокупность системных программ, предназначенная для обеспечения определенного уровня эффективности системы обработки информации за счет автоматизированного управления ее работой и предоставляемого пользователю определенного набора услуг» [13]. Фактически ОС – это программа управления вычислительной машиной (системой), которая выполняет две довольно слабо связанные функции: обеспечение пользователю-программисту удобств посредством предоставления для него расширенной машины; повышение эффективности использования компьютера путем рационального управления его ресурсами. Это можно пояснить с помощью рис. 9.1. обеспечение пользователюпрограммисту удобств посредством предоставления для него расширенной машины Пользователь Операционная система Аппаратура ЭВМ повышение эффективности использования компьютера путем рационального управления его ресурсами Рис. 9.1. Схематичное представление функций операционной системы. 9.2. Основные функции операционных систем Предоставление пользователю расширенной виртуальной машины, удобной в работе с ней Использование большинства компьютеров на уровне машинного языка за130 труднительно, особенно это касается ввода-вывода. Например, для организации чтения блока данных с гибкого диска программист может использовать 16 различных команд, каждая из которых требует указания 13 параметров, например, номера блока на диске, номера сектора на дорожке и т. п. Когда выполнение операции с диском завершается, контроллер возвращает 23 значения, отражающих наличие и типы ошибок, которые, очевидно, надо анализировать. Даже если не входить в курс реальных проблем программирования ввода-вывода, ясно, что среди программистов нашлось бы не много желающих непосредственно заниматься программированием этих операций. При работе с диском программисту-пользователю достаточно представлять его в виде некоторого набора файлов, каждый из которых имеет имя. Работа с файлом заключается в его открытии, выполнении чтения или записи, а затем в закрытии файла. Вопросы подобные таким, как следует ли при записи использовать усовершенствованную частотную модуляцию или в каком состоянии сейчас находится двигатель механизма перемещения считывающих головок, не должны волновать пользователя. Программа, которая скрывает от программиста все реалии аппаратуры и предоставляет возможность простого, удобного просмотра указанных файлов, чтения или записи – это, конечно, операционная система. Точно так же, как ОС ограждает программистов от аппаратуры дискового накопителя и предоставляет ему простой файловый интерфейс, операционная система берет на себя все рутинные дела, связанные с обработкой прерываний, управлением таймерами и оперативной памятью, а также другие низкоуровневые проблемы. В каждом случае та абстрактная, воображаемая машина, с которой, благодаря операционной системе, теперь может иметь дело пользователь, гораздо проще и удобнее в обращении, чем реальная аппаратура, лежащая в основе этой абстрактной машины. С этой точки зрения функцией ОС является предоставление пользователю некоторой расширенной, виртуальной машины, которую легче программировать и с которой легче работать, чем непосредственно с аппаратурой, составляющей реальную машину. Повышение эффективности использования ВМ путем рационального управления его ресурсами. Идея о том, что ОС прежде всего система, обеспечивающая удобный интерфейс пользователям, соответствует рассмотрению сверху вниз. Другой взгляд, снизу-вверх, дает представление об ОС как о некотором механизме, управляющем всеми частями сложной системы. Современные вычислительные 131 системы состоят из процессоров, памяти, таймеров, дисков, накопителей на магнитных лентах, сетевой коммуникационной аппаратуры, принтеров и других устройств. В соответствии со вторым подходом функцией ОС является распределение процессоров, памяти, устройств и данных между процессами, конкурирующими за эти ресурсы. ОС должна управлять всеми ресурсами вычислительной машины таким образом, чтобы обеспечить максимальную эффективность ее функционирования. Критерием эффективности может быть, например, пропускная способность или реактивность системы. Управление ресурсами включает решение двух общих, не зависящих от типа ресурса задач: планирование ресурса ‒ т. е. решение вопросов: кому, когда, а для делимых ресурсов и в каком количестве, следует выделить данный ресурс; отслеживание состояния ресурса ‒ т. е. поддержание оперативной информации о том, занят или не занят ресурс, а для делимых ресурсов – какое количество ресурса уже распределено, а какое свободно. Алгоритмы, используемые разными ОС для решения этих общих задач управления ресурсами, существенно различаются, что и определяет облик ОС в целом, включая характеристики производительности, область применения и даже пользовательский интерфейс. Так, например, применяемый алгоритм управления процессором характеризует, является ли ОС системой разделения времени, системой пакетной обработки или системой реального времени. 9.3. Этапы развития операционных систем Первый период (1945 – 1955) Напоминаю, что компьютер в виде механической «аналитической машины» был придуман английским математиком Чарльзом Бэбиджем в конце восемнадцатого века. Мы это рассматривали в разделе 1.2. Этот компьютер также не предусматривал наличие операционной системы, а должен был управляться с помощью перфорационных карт. Первые цифровые вычислительные машины на базе электронновакуумных приборов были созданы после 1945 г. Фактически первые ВМ были объектами научно-исследовательских работ в области вычислительной техники, поскольку их низкие эксплуатационные характеристики не позволяли использование этих ВМ в качестве инструмента решения серьѐзных практических задач. В тот период времени одна и та же группа людей осуществляла проектирование, эксплуатацию и программирование вычислительной машины. Программирование осуществлялось исключительно на машинном языке. Об операционных системах не было и речи, организация вычислительного процесса 132 осуществлялась вручную с пульта управления. В качестве системного программного обеспечения имелись в наличии только некоторые библиотеки математических и служебных подпрограмм. Второй период Второй период в развитии операционных систем (1955 – 1965) связан со вторым поколением ЭВМ, основанным на внедрении новой элементной базы – полупроводниковых приборов. Компьютеры второго поколения стали более надежными, они могли непрерывно работать настолько долго, чтобы на них можно было выполнять практически важные задачи. В этот период произошло разделение персонала на программистов и операторов, эксплуатационников и разработчиков вычислительных машин. Были разработаны первые алгоритмические языки, а, следовательно, и первые системные программы-компиляторы. Стоимость процессорного времени возросла, что потребовало уменьшения непроизводительных затрат времени между запусками программ. Появились первые системы пакетной обработки, которые автоматически осуществляли запуск одной программы за другой и тем самым увеличивали коэффициент загрузки процессора. Системы пакетной обработки явились прообразом современных операционных систем, они стали первыми системными программами, предназначенными для управления вычислительным процессом. Для реализации систем пакетной обработки использовался новый формализованный язык управления заданиями. На этом языке формулировались задачи для оператора и ВМ по управлению пакетами заданий. Последние представлялись обычно в виде колоды перфокарт, выдаваемых программистами операторам. Сами программисты не могли интерактивно участвовать в вычислительном процессе. К этому периоду относится появление первых коммерческих ВМ, имеющих прообразы ОС, выполняющих ряд функций, возлагаемых на современные ОС. Например, программа MCP (Master Control Program) корпорации Burroughs, представленная в 1961 году для мейнфрейма B5000, использовала механизм виртуальной памяти, предоставляла пользователям файловую систему и управление процессами. Третий период Следующий важный период развития операционных систем (1965 – 1980) соответствует переходу элементной базы ВМ от отдельных полупроводниковых транзисторов к интегральным микросхемам, что существенно расширило 133 возможности третьему поколению компьютеров. Идея создания семейств программно-совместимых машин после еѐ успешной реализации в начале 60-х годов в серии машин IBM/360, построенной на интегральных микросхемах, быстро стала общепризнанной. Программная совместимость требовала и совместимости операционных систем. Такие операционные системы должны были работать как на больших, так и на малых ВМ, с большим и с малым количеством периферийных устройств, в коммерческой области и в области научных исследований. Операционные системы, построенные с намерением удовлетворить всем этим противоречивым требованиям, оказались чрезвычайно сложными. Они состояли из многих миллионов ассемблерных строк, написанных тысячами программистов, и содержали тысячи ошибок, вызывающих нескончаемый поток исправлений. В каждом новом релизе операционной системы исправлялись одни ошибки и вносились другие. Однако, несмотря на необозримые размеры и множество проблем, OS/360 и другие операционные системы машин третьего поколения удовлетворяли большинству требований потребителей. Важнейшим достижением ОС данного периода явилась реализация мультипрограммирования как способа организации вычислительного процесса, при котором на одном процессоре попеременно выполняются несколько программ. Пока одна программа выполняет операцию ввода-вывода, процессор не простаивает, как это происходило при последовательном выполнении программ в однопрограммном режиме, а выполняет другую программу (многопрограммный режим). При этом каждая программа загружается операционной системой в свой участок оперативной памяти, называемый разделом. Другое нововведение ‒ спулинг, определяемый как способ организации вычислительного процесса, в соответствии с которым задания считывались с перфокарт на диск в том темпе, в котором они появлялись в помещении вычислительного центра, а затем, когда очередное задание завершалось, новое задание с диска загружалось в освободившийся раздел. Наряду с мультипрограммной реализацией систем пакетной обработки появился новый тип ОС – системы разделения времени. В них вводился ряд механизмов, обеспечивающих поддержание у каждого отдельного пользователя иллюзии единоличного использования вычислительной машины. Четвертый период (1980 – настоящее время) Следующий период в эволюции операционных систем связан с появлением больших интегральных схем (БИС). В эти годы произошло резкое возрастание степени интеграции и удешевление микросхем. Наступила эра персональных 134 компьютеров. С точки зрения архитектуры персональные компьютеры ничем не отличались от класса миникомпьютеров типа PDP-11, но вот их цена существенно снизилась. Если миникомпьютер позволял иметь собственную вычислительную машину отделу предприятия или факультету университета, то персональный компьютер стал доступен для отдельного человека. Компьютеры стали широко использоваться неспециалистами. Это потребовало разработки так называемого «дружественного» программного обеспечения и послужило распространению навыков программирования для многих пользователей-непрограммистов. Для обучения навыкам программирования были разработаны языки высокого уровня (Бэйсик, Паскаль), которые широко использовались и для программирования различных задач. На рынке операционных систем в начале этого периода доминировали две системы: MS-DOS и UNIX. Однопрограммная однопользовательская ОС MSDOS широко использовалась для компьютеров, построенных на базе микропроцессоров компании Intel от серии 8088 до 80486. ОС UNIX (мультипрограммная, многопользовательская) доминировала в среде «не-интеловских» компьютеров, особенно построенных на базе высокопроизводительных RISCпроцессоров. Стали появляться и другие ОС, причем для разработки операционных систем был разработан специальный язык C. В середине 80-х стали бурно развиваться сети персональных компьютеров, работающие под управлением сетевых или распределенных ОС. Каждая машина в сети управляется своей собственной локальной операционной системой, отличающейся от ОС автономного компьютера наличием дополнительных средств, позволяющих компьютеру работать в сети. Сетевая ОС не имеет фундаментальных отличий от ОС однопроцессорного компьютера кроме наличия средств программной поддержки сетевых интерфейсных устройств, средств удаленного входа в другие компьютеры сети и средств доступа к удаленным файлам. 9.4. Классификация операционных систем В качестве признаков классификации операционных систем могут быть выбраны самые разнообразные характеристики. Это и алгоритмы управления ресурсами ВМ (процессорным временем, памятью, внешними устройствами), типы аппаратных платформ, сферы применения ВМ и др. Рассмотрим классификацию по некоторым основным классификационным признакам. Особенности алгоритмов управления ресурсами Оптимизация управления ресурсами компьютера относится к важнейшей 135 функции операционной системы. От эффективности алгоритмов, используемых при управления локальными ресурсами компьютера, в значительной степени зависит эффективность в целом ОС. Поэтому важнейшие особенности реализованных в ней функций по управлению процессорами, памятью и внешними устройствами часто приводят как основные характеристики операционной системы. Например, особенности использованного алгоритма управления процессором лежат в основе деления операционных систем на однозадачные и многозадачные, однопользовательские и многопользовательские, на однопроцессорные и многопроцессорные системы, на системы, поддерживающие многопотоковую обработку и не поддерживающие еѐ. Поддержка многозадачности. По признаку количества одновременно выполняемых задач различают два класса операционных систем - однозадачные (к примеру, MS-DOS) и многозадачные (OC EC, Windows 95). Однозадачные ОС реализуют задачи предоставления пользователю виртуальной машины, обеспечивая удобство взаимодействия пользователя с компьютером. Они имеют средства общения с пользователем, управления внешними устройствами, файловую систему. Многозадачные ОС, кроме упомянутых функций, управляют совместно используемыми ресурсами (процессором, оперативной памятью, файлами и внешними устройствами). Поддержка многопользовательского режима. По количеству одновременно работающих на ВМ пользователей ОС классифицируют на однопользовательские (MS-DOS, ранние версии OS/2) и многопользовательские (UNIX, Windows NT и др.). Многопользовательские ОС в отличие от однопользовательских в обязательном порядке должны иметь средства защиты информации каждого пользователя от несанкционированного доступа других пользователей. Нельзя забывать, что многозадачная ОС не всегда многопользовательская, и не все однопользовательские ОС являются однозадачными. Например, персональный компьютер обычно является однопользовательским и многозадачным. Варианты многозадачности. По способу распределения процессорного времени между несколькими одновременно существующими в системе процессами выделяют две группы алгоритмов - невытесняющая многозадачность (NetWare, Windows 3.x) и вытесняющая многозадачность (Windows NT, UNIX). Они различаются в основном степенью централизации механизма планирования процессов. При вытесняющей многозадачности планированием процессов управляет исключительно операционная система. При невытесняющей многозадачности управление распределяется между системой и прикладными программами. В 136 последнем случае активный процесс находится в состоянии выполнения до тех пор, пока он сам не отдаст управление операционной системе, которая выбирает следующий процесс из очереди готовых к выполнению и переводит его в состояние выполнения. Поддержка многопоточности. По этому признаку классификации оценивают способность операционных систем поддерживать распараллеливание вычислений в рамках одного процесса. Многопоточная ОС управляет распределением процессорного времени не между процессами, а между их отдельными ветвями (потоками или нитями). Многопроцессорная обработка. Этот признак классификации отражает возможность поддержки современными операционными системами многопроцессорной обработки – мультипроцессирования. Наличие таких возможностей приводит к усложнению всех алгоритмов управления ресурсами. В свою очередь, многопроцессорные ОС по способу организации вычислительного процесса могут классифицироваться на асимметричные ОС и симметричные ОС. В асимметричном варианте ОС целиком выполняется только на одном из процессоров системы, а остальные процессоры выполняют прикладные задачи. Симметричная ОС не выделяет одного основного процессора системы, полностью децентрализована и имеет возможность решения системных и прикладных задач на любом процессоре системы. Рассмотренные варианты классификации операционных систем касались лишь одного основного ресурса вычислительной системы – процессорного времени. Аналогично можно классифицировать ОС по особенностям управления другими ресурсами компьютера – оперативной памятью, внешними устройствами, файлами, а также по особенностям реализации сетевых функций. Особенности аппаратных платформ Ушло в прошлое представление о том, что операционная система должна поддерживать самые разнообразные по аппаратной платформе вычислительные машины и системы. Современные ОС обычно ориентированы на конкретный тип аппаратных средств – персональные компьютеры, мини-компьютеры, мейнфреймы, кластеры или сети ЭВМ. Особенности аппаратных средств, как правило, отражаются и на специфике операционных систем. Естественно, что ОС мейнфрейма является более сложной и функциональной, чем ОС персонального компьютера. ОС больших машин для реализации, например, функций управления процессорным временем требуют применения более сложных приоритетных алгоритмов, чем ОС персональных компьютеров. То же относится и к функциям управления другими ресурсами. 137 Для сетевой ОС необходимым является наличие как средств передачи сообщений между компьютерами по линиям связи, так и специальных программных средств поддержки передачи сообщений по сети с использованием различных коммуникационных протоколов. Эти средства и программное обеспечение совершенно не требуются в автономной ОС. В случае многопроцессорных систем от ОС требуется наличие специальных возможностей, благодаря которым как сама ОС, так и пользовательские приложения могли бы выполняться параллельно отдельными процессорами системы. Это приводит к существенному усложнению ОС и достигается применением соответствующих структур, обеспечивающих согласованный доступ отдельных процессов к общим системным элементам управления, исключение эффекта гонок и других нежелательных последствий параллельного выполнения процессов. Особые требования предъявляются к операционным системам вычислительных систем с распределенной памятью, например, кластерных ВС. Кластер представляет собой слабо связанную совокупность нескольких вычислительных систем, совместно работающих для выполнения общих приложений. Кроме необходимости использования специальной аппаратуры для функционирования кластерных систем необходима и программная поддержка со стороны операционной системы, которая обеспечивает синхронизацию доступа к разделяемым ресурсам, обнаружение отказов и динамическую реконфигурацию системы. Отдельным качеством операционной системы является еѐ мобильность, т. е. способность к лѐгкому перенесению с компьютера одного типа на компьютер другого типа. В мобильной ОС аппаратно-зависимые места тщательно локализованы и только они подвергаются изменению при переносе ОС на новую аппаратную платформу. Такие ОС программируются с использованием машинно-независимых языков программирования, например, на С. Особенности областей использования По критериям эффективности, использованным при разработке ОС, многозадачные ОС разделяют на системы пакетной обработки (например, OC EC), системы разделения времени (UNIX, VMS) и системы реального времени (QNX, RT/11). Предназначением и главным критерием эффективности систем пакетной обработки являлось решение максимального количества задач в единицу времени. А это достигалось лишь в случае равномерной загрузки всех ресурсов машины. Поэтому для выполнения на ВМ подбиралась мультипрограммная 138 смесь, содержащая как задачи вычислительного характера, загружающие больше процессор, так и задачи, требовавшие интенсивного использования устройств ввода-вывода. При выполнении одной задачи выбор следующей для выполнения осуществлялся с целью загрузить простаивающие ресурсы компьютера, т. е. «выгодные» для ВМ задачи. Таким образом, такая стратегия подбора выполняемых задач не гарантировала исполнение какой-либо из них к конкретному времени, а переключение процессора на выполнение другой задачи происходит лишь при отказе от выполнения самой активной задачи. Естественно, данная стратегия не поддерживает интерактивный многопрограммный режим работы, необходимый для операционных систем разделения времени, в которых нескольким пользователям выделяются отдельные терминалы для одновременной работы на ВМ. Поэтому в последних принят другой критерий функционирования – максимальное удобство пользователей, одновременно работающих на ВМ. Именно поэтому данные системы используют вытесняющие алгоритмы управления процессорным временем и, если квант времени, выделяемый каждому пользователю, достаточно мал, то у каждого пользователя складывается впечатление, что он один работает на ВМ. Понятно, что в целом длительность выполнения каждой задачи в системе разделения времени из-за частого переключения пользователей и дополнительной из-за этого нагрузки на процессор оказывается больше, чем у систем пакетной обработки. Но это оправдывается выбором используемого критерия эффективности. Наконец, системы реального времени, применяемые для управления различными техническими объектами или технологическими процессами. Управляемые ими объекты являются критичными ко времени реакции системы на определенные внешние события. Поэтому и критерий эффективности для таких систем выбирается как способность выдерживать заданные временные интервалы между запуском определѐнных программ и получением желаемого воздействия на управляемый объект. Такие интервалы времени называются временем реакции системы, а свойство их обеспечивать – реактивностью системы. Набор программ для систем реального времени представляет фиксированный набор протестированных программ, а выбор программы для выполнения определяется текущим состоянием управляемого объекта. Для некоторых операционных систем допустимо совмещение свойств систем разного типа, например, решение части задач в режиме пакетной обработки, а другой части задач в режиме реального времени. Но всегда в таких ОС пакетная обработка выполняется в фоновом режиме. 139 Особенности методов построения При описании операционной системы часто указываются особенности ее структурной организации и основные концепции, положенные в ее основу. Основными базовыми концепциями создания ОС являются: Каким образом построено ядро системы – в виде монолитного ядра или на основе микроядерного подхода. Те ОС, которые используют монолитное ядро, работают в привилегированном режиме как единая программа и не требуют большого количества переключений из привилегированного режима в пользовательский и обратно. Они характеризуются большим быстродействием, но меньшей надѐжностью и гибкостью. Другие ОС реализованы на базе микроядра, которое только и работает в привилегированном режиме и выполняет часть функций по управлению аппаратурой. В них верхние слои операционной системы оформляются как серверы, работающие в пользовательском режиме. Поэтому такие ОС являются более гибкими, более способными к модернизации и более надежными, хотя работают медленнее из-за частых переключений из привилегированного режима в пользовательский и обратно. Использование объектно-ориентированного подхода при построении ОС дает возможность использовать все достоинства этого подхода внутри операционной системы: аккумуляцию удачных решений на основе включения стандартных объектов, использование механизма наследования, хорошую защиту данных за счет их включения во внутренние структуры объекта, повышенную структурированность системы, состоящей из набора хорошо определенных объектов. Возможность использования нескольких прикладных сред позволяет в рамках одной ОС одновременно выполнять приложения, разработанные для других ОС. Концепция множественных прикладных сред наиболее просто реализуется в ОС на базе микроядра, с наличием в верхних слоях ОС различных серверов, реализующих в частности прикладные среды других операционных систем. Применение распределенной организации операционной системы дает возможность упрощения работы пользователей и программистов в сетевых средах. Для распределенной организации ОС характерным признаком является наличие распределенных служб: единой справочной службы разделяемых ресурсов, единой службы времени, а также присутствие многопотоковой обработки, позволяющей распараллеливать вычисления в рамках одной задачи и выполнять эту задачу сразу на нескольких компьютерах сети. Структура сетевой операционной системы Основу любой вычислительной сети составляет сетевая операционная система. Она в широком смысле представляет совокупность операционных си140 стем всех компьютеров, имеющихся в сети, взаимодействующих по единым правилам – протоколам, а в узком смысле – это операционная система отдельного компьютера, обеспечивающая ему возможность работать в сети. В структуре сетевой операционной системы отдельной машины (рис. 9.2) выделяют средства управления локальными ресурсами компьютера и оболочку сетевой части ОС, в которую входят клиентская часть, серверная часть и коммуникационные средства. Рис. 9.2. Структура сетевой ОС. Средства управления локальными ресурсами компьютера осуществляют функции автономной ОС (управления оперативной памятью, планирования и диспетчеризации процессов, управления внешними устройствами и другие функции управления ресурсами). Серверная часть ОС (сервер) осуществляет функции предоставления собственных ресурсов и услуг компьютера в общее пользование. В частности, эта часть ОС обеспечивает управление доступом удаленных компьютеров сети к файлам данного компьютера и управление очередями запросов удаленных пользователей к своим периферийным устройствам. Клиентская часть ОС (редиректор) реализует функции запроса доступа к удаленным ресурсам и услугам и их использовании. Эта часть выполняет распознавание и перенаправление в сеть запросов к удаленным ресурсам от при141 ложений и пользователей и преобразование форматов запросов из локального формата во внешний и в обратном направлении. С помощью коммуникационных средств операционной системы происходит обмен сообщениями в сети. Эта часть отвечает за адресацию и буферизацию сообщений, надежность передачи и другие характеристики обмена сообщениями. Конкретные сетевые компьютеры в зависимости от решаемых функций кроме коммуникационных средств в ОС могут содержать только клиентскую, либо только серверную часть (рис. 9.3). Рис. 9.3. Взаимодействие компонентов ОС при взаимодействии компьютеров. Существует два основных подхода к построению сетевых операционных систем (рис. 9.4). Рис. 9.4. Варианты построения сетевых ОС. 142 Исторически первым подходом к построению сетевых ОС явился вариант создания сетевой оболочки над имеющейся локальной ОС. При этом в локальную ОС встраивался минимум сетевых функций, необходимых для работы сетевой оболочки, которая выполняла основные сетевые функции. Второй подход, заключающийся в разработке ОС, изначально предназначенных для работы в сети, является более эффективным. ОС такого типа имеют сетевые функции, глубоко встроенные в основные модули системы. Это обеспечивает стройность структуры и высокую производительность таких систем. 143 10. АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ Операционная система как любая сложная система должна иметь четкую упорядоченную структуру для того, чтобы отвечать требованиям к современным операционным системам. В частности, таким требованиям как расширяемость, переносимость, совместимость и надежность. Функциональная сложность современных ОС приводит к сложности еѐ архитектуры, под которой понимают структурную организацию ОС на основе различных функциональных модулей. Фактически в состав ОС входят исполняемые и объектные модули стандартных для данной ОС форматов, различные библиотеки, исходные тексты программ, специальные программные модули (например, загрузчик ОС, драйверы ввода-вывода) конфигурационные файлы, модули документации, справочной системы и др. Каждая ОС имеет свои архитектурные отличия, но в архитектуре современных ОС выделяются общие подходы к структурированию, которые и рассмотрены ниже. 10.1. Классификация архитектур ОС В принципе существуют три сильно различающиеся архитектуры: монолитная (например, МС-ДОС), слоистая (многослойная), на основе микроядра. Монолитной архитектурой обладали первые операционные системы на заре возникновения операционных систем. Такая архитектура не отвечает современным требованиям. При любых изменениях она требует полной переустановки, не является расширяемой, переносимой и совместимой. Для многослойной ОС уровни (слои) обозначаются в виде концентрических колец (рис.10.1). Рис.10.1. Многослойная структура ОС. 144 На рис.10.1 обозначено: 1) Средства аппаратной поддержки. 2) Машинно-зависимые компоненты ОС. 3) Базовые механизмы ядра. 4) Менеджеры ресурсов (диспетчеры). 5) Интерфейс систем вызовов (API-функции). Задачи 1 и 2 слоев – скрыть детали аппаратуры, обеспечить идентичность работы программиста с аппаратурой разных изготовителей. 1, 2 и 3 уровни составляют микроядро ОС. Базовые механизмы ядра, а также уровни 1 и 2 не принимают никаких решений, а исполняют отдельные функции работы с аппаратурой. На 4 уровне и выше уже принимаются решения. Каждый менеджер (памяти, устройств ввода-вывода и др.) ведет учет своих ресурсов, выделяет их при необходимости процессам, перераспределяет. Самый верхний слой выполняет вызовы, запросы программ, так называемые системные вызовы. Раньше они назывались командами ОС. Например, вызов read (fd, buffer, count) означает команду чтения из файла fd в область buffer количества слов count. Т. е. читает буфер и образует кучу. Системные вызовы существенно влияют на работу программ. В ядре выделяют микроядро – первые три слоя. Это связано с тем, что микроядро составляет неделимую часть ОС. Вместе с четвертым и пятым слоем оно образует ядро ОС. С ядром взаимодействуют вспомогательные модули ОС (рис.10.2): приложения пользователей; библиотеки процедур; утилиты – программы, реализующие отдельные задачи управления ОС; системные программы (компилятор, загрузчик и др.). Рис.10.2. Окружение ОС. Утилиты, например, обслуживают файловую систему, архивируют данные, 145 генерируют случайные числа и т. д. В ядре ОС сосредоточены такие базовые функции как управление процессами, памятью, устройствами ввода-вывода и др. Именно ядро занимается переключениием контекста процессов, управлением виртуальной памятью, обработкой прерываний – такими действиями, которые недоступны для пользовательских программ. Пользовательские программы для выполнения этих функций обращаются к ядру ОС с системными вызовами, применяя интерфейс прикладного программирования – API. Функции, выполняемые ядром, являются наиболее часто используемыми функциями ОС. Поэтому от быстродействия их исполнения во многом зависит быстродействие всей вычислительной системы в целом. Высокая скорость выполнения функций ядра достигается путем постоянного расположения его модулей в оперативной памяти. Обычно программы, содержащие модули ядра, имеют специальный формат, отличный от форматов пользовательских приложений. Ядро ОС участвует в выполнении всех вычислительных процессов в машине. Поэтому крах ядра эквивалентен краху системы в целом. Именно поэтому надежность кодов ядра является объектом пристального внимания программистов. Как правило, отличительной особенностью модулей ядра является их работа в привилегированном режиме. Вспомогательные модули ОС предназначены для выполнения полезных, но менее часто встречающихся в работе вычислительной машины функций. Такими вспомогательными модулями, например, могут быть программы текстовых и графических редакторов, архивирования данных, форматирования носителей информации. Эти модули присутствуют в ОС в виде приложений или библиотек процедур. Зачастую бывает трудно различить обычные программы и вспомогательные модули ОС. Многие программы вспомогательных модулей ОС создавались как отдельные программы и лишь потом были включены в состав ОС. И наоборот, программы вспомогательных модулей ОС могут быть исключены из состава ОС и переведены в разряд пользовательских программ. Решение о том, должна ли какая-либо программа входить в состав ОС, принимает производитель ОС. На это решение часто решающее влияние оказывает наличие у пользователей данной ОС массового спроса на программу. Некоторая программа до того, как стать частью ОС, длительное время может существовать отдельно как пользовательское приложение. Именно так программа веб-браузера компании Microsoft стала частью ОС Windows только по146 сле того, как некоторое время существовала в качестве отдельного приложения. Возможен и обратный переход отдельных модулей ОС в разряд пользовательских приложений. Разделение ОС на ядро и вспомогательные модули позволяет легко расширять ОС, добавляя в неѐ дополнительные функции или модифицируя имеющиеся. При этом переработке подлежат лишь отдельные модули ОС без изменений ядра и других составных частей ОС. Кроме того, вспомогательные модули, как правило, не находятся постоянно в оперативной памяти компьютера, а загружаются в неѐ лишь при необходимости выполнения соответствующих функций. Это существенно экономит оперативную память системы. Выполнение функций ядра ОС в привилегированном режиме обеспечивает возможность защиты кода и данных ОС и является еѐ важнейшим свойством. Надежность функционирования вычислительной машины в целом обеспечивается тем, что ОС имеет определѐнные привилегии по отношению к пользовательским программам. Иначе какая-либо программа может изменить часть кода ОС или еѐ данных, что может привести к краху системы. Кроме того, ОС выступает в качестве арбитра в использовании ресурсов компьютера конкурирующими за эти ресурсы приложениями. Для этого ОС должна обладать исключительными полномочиями. Ни одно приложение самостоятельно не должно получить дополнительные объемы памяти, иметь дополнительное процессорное время и непосредственно управлять совместно используемыми ресурсами системы. Аппаратура компьютера должна обеспечивать не менее двух режимов работы – пользовательский (user mode) и привилегированный, называемый также режимом ядра (kernel mode) или супервизора (supervisor mode). Ядро ОС, как правило, работает в привилегированном режиме. При работе в пользовательском режиме запрещено выполнение определенных критичных команд (инструкций), связанных с переключением процессора между процессами, управлением операциями ввода-вывода, выполнением операций распределения памяти и ее защиты. Приложениям запрещено обращение к областям памяти, занимаемым ОС и другими приложениями. Каждая пользовательская программа работает только в своем адресном пространстве, что обеспечивает защиту как ОС, так и других приложений. В результате ошибки каждого из приложений не могут оказывать влияния на работу ОС и других программ. Некоторые ОС обеспечивают несколько уровней привилегированности – три, четыре и более, в том числе два уровня привилегий на аппаратном уровне и целую иерархию привилегий из нескольких уровней, реализуемых программ147 ными средствами. Это позволяет более тонко распределять полномочия как между уровнями модулей ОС, так и между самими приложениями. Такая многоуровневость привилегий повышает устойчивость ОС к внутренним ошибкам программных кодов, поскольку ошибки могут распространяться только среди модулей с одним и тем же уровнем привилегий. Повышение устойчивости работы компьютера путем обеспечения работы ядра ОС в привилегированном режиме достигается за счет некоторого замедления выполнения системных вызовов. Это обусловлено необходимостью двойного переключения из пользовательского режима в привилегированный и обратно при каждом системном вызове, что влечет за собой соответствующие временные задержки (рис.10.3). Рис.10.3. Выделение режимов пользовательского и защищенного. Дальнейшим шагом в совершенствовании ОС стало введение микроядерной архитектуры (рис.10.4). Все драйвера вынесли в пользовательский режим. Те слои, которые раньше назывались менеджерами, стали называть серверами и тоже вынесли в пользовательский режим. Таким образом, в защищенном режиме осталось только микроядро. Рис.10.4. Работа микроядра. Надежность ОС повысилась, но быстродействие еще более снизилось. Если пользовательская программа обращается к серверному процессу, который, в свою очередь, требует операции ввода вывода, то при каждом обращении к микроядру требуется переход от пользовательского к защищенному режиму и обратно, что требует дополнительных затрат времени. Таим образом, при обращении к серверному процессу требуется затратить дополнительно 6τ времени. В настоящее время микроядерный режим в чистом виде не используется из-за медленности его работы. Больше используют гибридный режим, в котором серверные процессы 148 оставляют в микроядре, а сами драйвера выносят в пользовательский режим. Некоторые ОС для увеличения быстродействия позволяют работу определенных программ в привилегированном режиме так же, как и работу ядра ОС. Примером является самая популярная ОС маршрутизаторов Cisco IOS (Internetwork Operating System), которая состоит из ядра и приложений, выполняющихся в одном и том же режиме процессора. Это важно для данной операционной системы, поскольку она является системой реального времени и еѐ главной задачей является обработка поступающих по входным интерфейсам пакетов с минимальными временными задержками. 10.2. Процессы и потоки Организация рационального использования всех аппаратных и программных ресурсов системы является важнейшей функцией операционной системы. Основные ресурсы ВМ – это процессоры, память, внешние устройства, данные и программы. Одна и та же вычислительная система под управлением различных ОС, может работать с разной степенью эффективности. Поэтому важно понимать сущность внутренних механизмов операционной системы по управлению основными ресурсами системы. Ниже мы рассмотрим подсистему ОС управления процессами и потоками в вычислительной системе. Процесс – это программа в ходе ее выполнения. Операционная система рассматривает процесс как единицу работы, заявку на потребление системных ресурсов. ОС обязательно имеет подсистему управления процессами, которая планирует выполнение процессов. В перечень задач планирования входят распределение процессорного времени между несколькими процессами, одновременно наличествующими в системе, создание и уничтожение процессов, обеспечение процессов необходимыми системными ресурсами, поддержание взаимодействия между процессами. Состояние процесса В многозадачной (многопроцессной) системе процесс может находиться в одном из трех основных состояний: «Выполнение» – активное состояние процесса (процесс наделѐн всеми необходимыми ресурсами и непосредственно выполняется процессором); «Ожидание» – пассивное состояние процесса (процесс заблокирован, определѐнные внутренние причины не позволяют ему выполняться – он ждет осуществления некоторого события, например, завершения операции вводавывода, получения сообщения от взаимодействующего процесса или освобождения затребованного им ресурса); «Готов» – тоже пассивное состояние процесса (процесс имеет все требуе149 мые для него ресурсы, он готов выполняться, но процесс заблокирован в связи с внешними по отношению к нему обстоятельствами, поскольку процессор занят выполнением другого процесса). В ходе своего жизненного цикла каждый процесс многократно переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализованным в данной операционной системе. Пример изменений состояний процесса приведен на рис. 10.5. Рис. 10.5. Схема состояний процесса. Жизненный цикл каждого нового процесса начинается с состояния «Новый». В этом состоянии программа принимается к исполнению, ОС выделяет для нее необходимый объѐм оперативной памяти, формирует необходимые информационные структуры (дескриптор и контекст процесса) и переводит в состояние «Готов», в очередь готовых к выполнению процессов. В однопроцессорной системе в состоянии «Выполнение» может находиться только один процесс, а в состояниях «Ожидание» и «Готов» – несколько процессов, которые образуют очереди соответственно ожидающих и готовых процессов. Здесь работает кратковременный диспетчер-планировщик. Его задачей является выбор одного из списка готовых процессов и перевод его в состояние «Выполнение». В этом состоянии процесс находится до тех пор, пока либо он сам освободит процессор, перейдя в состояние «Ожидание» какого-нибудь события, либо будет насильно «вытеснен» из процессора, если, например, закончится длительность отведенного данному процессу кванта процессорного времени. В последнем случае процесс возвращается в состояние «Готов». В это же состояние процесс переходит из состояния «Ожидание», после того как ожидаемое событие произойдет. При этом работает долговременный диспетчер-планировщик. Он отличается от кратковременного, управляющего выделением квантов времени, тем, что алгоритм его работы может быть построен с учетом разных подходов (например, приоритетов). 150 Поскольку процессов в ВМ выполняется много, то каждый процесс большое время проводит в очередях. При этом он переходит из одного состояния в другое. Обобщенная схема включает в себя 5 состояний. Таких состояний может быть и больше. Например, в UNIX их 13. Контекст и дескриптор процесса Процессу выделяется память со своими разделами, одним из разделов является блок управления процессом (БУП). Иначе его называют дескриптором процесса или объект-процессом. Здесь содержится информация, используемая ОС для планирования процессов. Из чего состоит БУП? PID – идентификатор процесса; состояние процесса; указатель на родительский процесс, если процесс порожден другим процессом; счетчик команд; регистры ЦП, используемые процессом; ввод-вывод, указывает, откуда процесс загружен и куда выводит информацию; текущие параметры (насколько загружен ЦП, как используется куча и т.д.). Рассмотрим, как производится переключение одного процесса на другой. Пусть всего имеется два процесса, чередующиеся в фазе выполнения. В простейшем случае переключение процессов иллюстрируется рис. 10.6. На самом деле процедура переключения процессов сложнее. По существу, есть периоды времени, когда не выполняется ни один из процессов. Рис.10.6. Переключение процессов. В ходе жизненного цикла процесса его выполнение может быть много151 кратно прервано и продолжено. Для возобновления выполнения процесса необходимо восстановить состояние его операционной среды. Это состояние отображается состоянием регистров и счетчика команд, режимом работы процессора, указателями на открытые файлы, информацией о незавершенных операциях ввода-вывода, кодами ошибок выполняемых данным процессом системных вызовов и т.д. Эта информация называется контекстом процесса. Контекст процесса используется операционной системой только после того, как принято решение о переводе процесса в состояние «Выполнение». Дескриптор процесса по сравнению с контекстом содержит меньший объѐм более оперативной информации, которая должна быть легко доступна подсистеме планирования процессов. Очереди процессов представляют собой дескрипторы отдельных процессов, объединенные в списки. Каждый дескриптор содержит хотя бы один указатель на другой дескриптор, соседствующий с ним в очереди. Такая организация очередей позволяет легко их переупорядочивать, включать и исключать процессы, переводить процессы из одного состояния в другое. Программный код только тогда начнет выполняться, когда для него операционной системой будет создан процесс. Создать процесс – это значит: создать информационные структуры процесса (его дескриптор и контекст); включить дескриптор нового процесса в очередь готовых процессов; загрузить кодовый сегмент процесса в выделенную область оперативной памяти или в область свопинга. Планирование процессов Работа кратковременного диспетчера-планировщика процессов включает в себя решение следующих задач: определение момента времени для смены выполняемого процесса; выбор из очереди готовых процессов процесса, переводимого в состояние «Выполнение»; переключение контекстов «старого» и «нового» процессов. Первые две задачи решаются программными средствами, а последняя в значительной степени аппаратно. Среди множества различных алгоритмов планирования процессов, поразному решающих перечисленные задачи, наиболее часто встречаются алгоритмы, основанные на квантовании, и алгоритмы, основанные на приоритетах. Алгоритмы, основанные на квантовании 152 Эти алгоритмы предусматривают смену активного процесса в случаях, если процесс завершился и покинул систему или произошла ошибка, или процесс перешел в состояние «Ожидание», или исчерпан квант процессорного времени, отведенный данному процессу. Процесс, у которого закончился квант выделенного ему процессорного времени, переводится в состояние «Готов» и ожидает, когда ему будет предоставлен новый квант, а в состояние «Выполнение» в соответствии с определенным правилом выбирается новый процесс из очереди готовых. Следовательно, ни один процесс не занимает процессор надолго, поэтому квантование широко используется в системах разделения времени. Схема состояний процесса, приведенная на рис. 10.5, соответствует алгоритму планирования, основанному на квантовании. Различия в применяемых операционными системами алгоритмов, основанных на квантовании, весьма разнообразны. Выделяемые процессам кванты могут быть одинаковыми для всех процессов или различными. Выделяемые одному процессу кванты могут быть фиксированной величины или изменяться в разные периоды жизни процесса. Процессы, которые не полностью использовали выделенный им квант (например, из-за перехода в состояние «Ожидание» для выполнения операций ввода-вывода), могут получить или не получить компенсацию в виде привилегий при последующем обслуживании. Выбор из очереди готовых процессов может реализован циклически, с применением правила «первый пришел – первый обслужился» или правила «последний пришел – первый обслужился». Алгоритмы, основанные на приоритетах Приоритет процесса – это число, характеризующее степень привилегированности процесса при использовании ресурсов ВМ, в частности, процессорного времени: чем выше приоритет, тем выше привилегии и тем меньше времени он будет проводить в очередях. Приоритет может выражаться целым или дробным, положительным или отрицательным значением. Приоритет может назначаться администратором системы в зависимости от важности работы или внесенной платы, либо вычисляться самой ОС по определенным правилам, он может оставаться фиксированным на протяжении всего жизненного цикла процесса либо быть динамическим, т. е. изменяться во времени в соответствии с некоторым законом. Применяют две разновидности приоритетных алгоритмов: алгоритмы с использованием относительных или абсолютных приоритетов. В обоих случаях из очереди готовых выбирается процесс, имеющий 153 наивысший приоритет. По-разному решается лишь проблема определения момента смены активного процесса. В алгоритмах с относительными приоритетами активный процесс выполняется до тех пор, пока он сам не прекратит выполнение, перейдя в состояние «Ожидание» (или же произойдет ошибка, или процесс завершится). В алгоритмах с абсолютными приоритетами есть ещѐ один вариант прекращения выполнения активного процесса: если в очереди готовых процессов появился процесс, приоритет которого выше приоритета активного процесса. В этом случае прерванный процесс переходит в состояние «Готов». Многие ОС в алгоритмах планирования процессов используют как квантование, так и приоритеты. К примеру, в основе планирования лежит квантование, но величина кванта и/или порядок выбора процесса из очереди готовых определяется приоритетами процессов. Вытесняющие и невытесняющие алгоритмы планирования Существует два основных типа процедур планирования процессов – вытесняющие и невытесняющие. При невытесняющей многозадачности активный процесс выполняется до тех пор, пока он сам, по собственной инициативе, не отдаст управление планировщику операционной системы для того, чтобы тот выбрал из очереди другой, готовый к выполнению процесс. Поэтому исполняемые программы должны иметь «дружественный» характер по отношению к другим присутствующим в вычислительном процессе программам и периодически отдавать инициативу планировщику для смены активного процесса. Зависание выполняемого процесса может привести к краху всей ОС. Соответственно, повышаются требования и к программистам, которые должны учитывать эти особенности при написании программ. При вытесняющей многозадачности решение о смене активного процесса другим процессом принимается исключительно планировщиком операционной системы. Здесь программист может не беспокоиться о «дружественности» своей программы по отношению к другим, участвующим в вычислительном процессе задачам. При зависании одного из процессов ОС сама снимает такую задачу с выполнения. Не следует отождествлять понятия вытесняющей и невытесняющей многозадачности и понятия приоритетных и бесприоритетных дисциплин (это совершенно неверно), а также с понятиями абсолютных и относительных приоритетов (это неверно отчасти). Вытесняющая и невытесняющая многозадачность являются более широкими понятиями, чем типы приоритетности. Приоритеты задач могут как использоваться, так и не использоваться и при вытесняющих, и 154 при невытесняющих способах планирования. При использовании приоритетов дисциплина относительных приоритетов может быть отнесена к классу систем с невытесняющей многозадачностью, а дисциплина абсолютных приоритетов – к классу систем с вытесняющей многозадачностью. А бесприоритетная дисциплина планирования, основанная на выделении равных квантов времени для всех задач, относится к вытесняющим алгоритмам. Но не всегда невытесняющие алгоритмы планирования процессов имеют только недостатки. Преимущество таких алгоритмов может заключаться в том, что смена активного процесса происходит в «удобные» для процесса моменты времени, исключаются случаи прерывания выполнения процесса в «неудобные» моменты времени и легче решаются проблемы совместного использования данных взаимодействующими процессами. Кроме того, невытесняющие алгоритмы характеризуются более высокой скоростью смены активного процесса. Почти все современные операционные системы, ориентированные на высокопроизводительное выполнение приложений, применяют алгоритмы вытесняющей многозадачности. 10.3. Механизмы синхронизации и взаимодействия процессов Проблема синхронизации Процессам часто нужно взаимодействовать друг с другом, например, один процесс может передавать данные другому процессу, или несколько процессов могут обрабатывать данные из общего файла. Во всех этих случаях возникает проблема синхронизации процессов, которая может решаться приостановкой и активизацией процессов, организацией очередей, блокированием и освобождением ресурсов. Пренебрежение вопросами синхронизации процессов, выполняющихся в режиме мультипрограммирования, может привести к их неправильной работе или даже к краху системы. Возьмѐм, например, программу печати файлов (принт-сервер) (рис. 10.7). Эта программа печатает по очереди все файлы, имена которых последовательно в порядке поступления записывают в специальный общедоступный файл «заказов» другие программы. Особая переменная NEXT, также доступная всем процессам-клиентам, содержит номер первой свободной для записи имени файла позиции файла «заказов». Процессы-клиенты читают эту переменную, записывают в соответствующую позицию файла «заказов» имя своего файла и наращивают значение NEXT на единицу. Предположим, что в некоторый момент времени процесс R решил распечатать свой файл, для этого он прочитал значение переменной NEXT, значение которой для определенности предположим равным 4. Процесс запомнил это 155 значение, но поместить имя файла не успел, так как его выполнение было прервано (например, вследствие исчерпания кванта). Очередной процесс S, желающий распечатать файл, прочитал то же самое значение переменной NEXT, поместил в четвертую позицию имя своего файла и нарастил значение переменной на единицу. Когда в очередной раз управление будет передано процессу R, то он, продолжая свое выполнение, в полном соответствии со значением текущей свободной позиции, полученным во время предыдущей итерации, запишет имя файла так же в позицию 4, поверх имени файла процесса S. Рис. 10.7. Пример необходимости синхронизации. В результате процесс S никогда не увидит свой файл распечатанным. Сложность проблемы синхронизации состоит в нерегулярности возникающих ситуаций: в предыдущем примере можно представить и другое развитие событий: были потеряны файлы нескольких процессов или, напротив, не был потерян ни один файл. В данном случае все определяется взаимными скоростями процессов и моментами их прерывания. Поэтому отладка взаимодействующих процессов является сложной задачей. Ситуации, когда два или более процессов обрабатывают разделяемые данные, и конечный результат зависит от соотношения скоростей процессов, называются гонками. К механизмам синхронизации процессов относят запрет прерываний, блокирующие переменные, семафоры, мониторы. 156 Простейший способ обеспечить взаимное исключение – позволить процессу, пользующемуся определѐнным ресурсом, запрещать все прерывания. Однако этот способ непригоден, так как опасно доверять управление системой пользовательскому процессу; он может надолго занять процессор, а при крахе процесса при таком запрете прерываний крах потерпит вся система, потому что прерывания никогда не будут разрешены. Блокирующие переменные Важным понятием синхронизации процессов является понятие «критическая секция» программы. Критическая секция – это часть программы, в которой осуществляется доступ к разделяемым данным. Чтобы исключить эффект гонок по отношению к некоторому ресурсу, необходимо обеспечить, чтобы в каждый момент в критической секции, связанной с этим ресурсом, находился максимум один процесс. Этот прием называют взаимным исключением. Это достигается, например, путем использования блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен (т. е. ни один процесс не находится в данный момент в критической секции, связанной с данным процессом), и значение 0, если ресурс занят. На рис. 10.8 показан фрагмент алгоритма процесса, использующего для реализации взаимного исключения доступа к разделяемому ресурсу D блокирующую переменную F(D). Рис. 10.8. Использование блокирующих переменных. 157 Перед входом в критическую секцию процесс проверяет, свободен ли ресурс D. Если он занят, то проверка циклически повторяется, если свободен, то значение переменной F(D) устанавливается в 0, и процесс входит в критическую секцию. После того, как процесс выполнит все действия с разделяемым ресурсом D, значение переменной F(D) снова устанавливается равным 1. Если все процессы реализованы с использованием вышеописанных соглашений, то взаимное исключение гарантируется. Однако операция проверки и установки блокирующей переменной должна быть неделимой. Поясним это. Пусть в результате проверки переменной процесс определил, что ресурс свободен, но сразу после этого, не успев установить переменную в 0, был прерван. За время его приостановки другой процесс занял ресурс, вошел в свою критическую секцию, но также был прерван, не завершив работы с разделяемым ресурсом. Когда управление было возвращено первому процессу, он, считая ресурс свободным, установил признак занятости и начал выполнять свою критическую секцию. Таким образом, был нарушен принцип взаимного исключения, что потенциально может привести к нежелательным последствиям. Во избежание таких ситуаций в системе команд машины желательно иметь единую команду «проверка-установка», или же реализовывать системными средствами соответствующие программные примитивы, которые бы запрещали прерывания на протяжении всей операции проверки и установки. Реализация критических секций с использованием блокирующих переменных имеет существенный недостаток: в течение времени, когда один процесс находится в критической секции, другой процесс, которому требуется тот же ресурс, будет бесполезно тратить своѐ процессорное время, опрашивая блокирующую переменную. Устранение таких ситуаций возможно путѐм использования так называемого аппарата событий. С помощью этого средства могут решаться не только ситуации взаимного исключения, но и более общие задачи синхронизации процессов. В разных операционных системах аппарат событий реализуется по своему, но в любом случае используются системные функции аналогичного назначения, которые условно назовем WAIT(x) и POST(x), где x – идентификатор некоторого события. На рис. 10.9 показан фрагмент алгоритма процесса, использующего эти функции. Если ресурс занят, то процесс не выполняет циклический опрос, а вызывает системную функцию WAIT(D), здесь D обозначает событие, заключающееся в освобождении ресурса D. Функция WAIT(D) переводит активный процесс в состояние «Ожидание» и делает отметку в его дескрип158 торе о том, что процесс ожидает события D. Процесс, который в это время использует ресурс D, после выхода из критической секции выполняет системную функцию POST(D), в результате чего операционная система просматривает очередь ожидающих процессов и переводит процесс, ожидающий события D, в состояние «Готов». Рис. 10.9. Реализация критической секции с использованием системных функций WAIT(D) и POST(D). Семафоры Обобщающее средство синхронизации процессов предложил Дейкстра, который ввел два новых примитива. В абстрактной форме эти примитивы, обозначаемые P и V, оперируют над целыми неотрицательными переменными, называемыми семафорами. Пусть S такой семафор. Операции определяются следующим образом: V(S): переменная S увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к S нет доступа другим процессам во время выполнения этой операции. P(S): уменьшение S на 1, по возможности. Если S=0, то невозможно 159 уменьшить S и остаться в области целых неотрицательных значений, в этом случае процесс, вызывающий P-операцию, ждет, пока уменьшение станет возможным. Успешная проверка и уменьшение также является неделимой операцией. В частном случае, когда семафор S может принимать только значения 0 и 1, он превращается в блокирующую переменную. Операция P заключает в себе потенциальную возможность перехода процесса, который ее выполняет, в состояние ожидания, в то время как V-операция может при некоторых обстоятельствах активизировать другой процесс, приостановленный операцией P. Тупики Рассмотрим пример тупика. Пусть двум процессам, выполняющимся в режиме мультипрограммирования, для выполнения их работы нужно два ресурса, например, принтер и диск. На рис. 10.10,а показаны участки соответствующих программ. Рис. 10.10. (a) фрагменты программ А и В, разделяющих принтер и диск; (б) взаимная блокировка (клинч);(в) очередь к разделяемому диску; (г) независимое использование ресурсов. Пусть после того, как процесс А занял принтер (установил блокирующую переменную), он был прерван. Управление получил процесс В, который сначала занял диск, но при выполнении следующей команды был заблокирован, так 160 как принтер оказался уже занятым процессом А. Управление снова получил процесс А, который в соответствии со своей программой сделал попытку занять диск и был заблокирован: диск уже распределен процессу В. В таком положении процессы А и В могут находиться сколь угодно долго. В зависимости от соотношения скоростей процессов, они могут либо совершенно независимо использовать разделяемые ресурсы (г), либо образовывать очереди к разделяемым ресурсам (в), либо взаимно блокировать друг друга (б). Тупиковые ситуации надо отличать от простых очередей, хотя и те, и другие возникают при совместном использовании ресурсов и внешне выглядят похоже: процесс приостанавливается и ждет освобождения ресурса. Однако очередь – это нормальное явление, неотъемлемый признак высокого коэффициента использования ресурсов при случайном поступлении запросов. Она возникает тогда, когда ресурс недоступен в данный момент, но через некоторое время он освобождается, и процесс продолжает свое выполнение. Тупик же, что видно из его названия, является в некотором роде неразрешимой ситуацией. В рассмотренном примере тупик был образован двумя процессами, но взаимно блокировать друг друга могут и большее число процессов. Проблема тупиков включает в себя следующие задачи: предотвращение тупиков, распознавание тупиков, восстановление системы после тупиков. Тупики могут быть предотвращены на стадии написания программ, т. е. программы должны быть написаны таким образом, чтобы тупик не мог возникнуть ни при каком соотношении взаимных скоростей процессов. Так, если бы в описанном примере процесс А и процесс В запрашивали ресурсы в одинаковой последовательности, то тупик был бы в принципе невозможен. Второй подход к предотвращению тупиков называется динамическим и заключается в использовании определенных правил при назначении ресурсов процессам, например, ресурсы могут выделяться в определенной последовательности, общей для всех процессов. В некоторых случаях, когда тупиковая ситуация образована многими процессами, использующими много ресурсов, распознавание тупика является нетривиальной задачей. Существуют формальные, программно-реализованные методы распознавания тупиков, основанные на ведении таблиц распределения ресурсов и таблиц запросов к занятым ресурсам. Анализ этих таблиц позволяет обнаружить взаимные блокировки. При возникновении тупиковой ситуации не обязательно снимать с выпол161 нения все заблокированные процессы. Можно снять только часть из них, при этом освобождаются ресурсы, ожидаемые остальными процессами, можно вернуть некоторые процессы в область свопинга, можно совершить «откат» некоторых процессов до так называемой контрольной точки, в которой запоминается вся информация, необходимая для восстановления выполнения программы с данного места. Контрольные точки расставляются в программе в местах, после которых возможно возникновение тупика. Мониторы Рассмотрение проблемы тупиков показывает, что использовать семафоры нужно очень осторожно, поскольку даже одна незначительная ошибка может привести к останову системы. Для того, чтобы облегчить написание корректных программ, было предложено высокоуровневое средство синхронизации, называемое монитором. Монитор – это набор процедур, переменных и структур данных. Процессы могут вызывать процедуры монитора, но не имеют доступа к внутренним данным монитора. Мониторы имеют важное свойство, которое делает их полезными для достижения взаимного исключения: только один процесс может быть активным по отношению к монитору. Компилятор обрабатывает вызовы процедур монитора особым образом. Обычно, когда процесс вызывает процедуру монитора, то первые несколько инструкций этой процедуры проверяют, не активен ли какой-либо другой процесс по отношению к этому монитору. Если да, то вызывающий процесс приостанавливается, пока другой процесс не освободит монитор. Следовательно, исключение входа нескольких процессов в монитор обеспечивается не программистом, а компилятором, что делает ошибки менее вероятными. В распределенных системах, состоящих из нескольких процессоров, каждый из которых имеет собственную оперативную память, а общая память отсутствует, семафоры и мониторы оказываются неприменимыми. В таких системах синхронизация может быть реализована только с помощью обмена сообщениями. Потоки 10.4. При выполнении какого-либо процесса в нем могут присутствовать ветви, способные к параллельному выполнению. Например, при умножении матриц параллельно можно перемножать различные элементы матриц. Многозадачность является важнейшим свойством ОС. Для поддержки этого свойства ОС определяет и оформляет для себя те внутренние единицы работы, между которыми и будет разделяться процессор и другие ресурсы компью162 тера. Эти внутренние единицы работы в разных ОС носят разные названия – задача, задание, процесс, нить. В некоторых случаях сущности, обозначаемые этими понятиями, принципиально отличаются друг от друга. Говоря о процессах, мы отмечали, что операционная система поддерживает их обособленность: у каждого процесса имеется свое виртуальное адресное пространство, каждому процессу назначаются свои ресурсы – файлы, окна, семафоры и т.д. Такая обособленность нужна для того, чтобы защитить один процесс от другого, поскольку они, совместно используя все ресурсы машины, конкурируют друг с другом. В общем случае процессы принадлежат разным пользователям, разделяющим один компьютер, и ОС выполняет роль арбитра в спорах процессов за ресурсы. При мультипрограммировании повышается пропускная способность системы, но отдельный процесс никогда не может быть выполнен быстрее, чем если бы он выполнялся в однопрограммном режиме (всякое разделение ресурсов замедляет работу одного из участников за счет дополнительных затрат времени на ожидание освобождения ресурса). Однако задача, решаемая в рамках одного процесса, может обладать внутренним параллелизмом, который в принципе позволяет ускорить ее решение. Например, в ходе выполнения задачи происходит обращение к внешнему устройству, и на время этой операции можно не блокировать полностью выполнение процесса, а продолжить вычисления по другой «ветви» процесса. Для этих целей современные ОС предлагают использовать механизм многонитевой (многопотоковой) обработки (multithreading). При этом вводится новое понятие «поток» или «нить» (thread), а понятие «процесс» в значительной степени меняет смысл. Мультипрограммирование теперь реализуется на уровне потоков (нитей), и задача, оформленная в виде нескольких нитей в рамках одного процесса, может быть выполнена быстрее за счет псевдопараллельного (или параллельного в мультипроцессорной системе) выполнения ее отдельных частей. Например, если электронная таблица была разработана с учетом возможностей многонитевой обработки, то пользователь может запросить пересчет своего рабочего листа и одновременно продолжать заполнять таблицу. Особенно эффективно можно использовать многонитевость для выполнения распределенных приложений, например, многопоточный сервер может параллельно выполнять запросы сразу нескольких клиентов. Потоки (нити), относящиеся к одному процессу, не настолько изолированы друг от друга, как процессы в традиционной многозадачной системе, между 163 ними легко организовать тесное взаимодействие. Действительно, в отличие от процессов, которые принадлежат разным, вообще говоря, конкурирующим приложениям, все потоки (нити) одного процесса всегда принадлежат одному приложению, поэтому программист, пишущий это приложение, может заранее продумать работу множества потоков (нитей) процесса таким образом, чтобы они могли взаимодействовать, а не бороться за ресурсы. В традиционных ОС понятие «нить» почти тождественно понятию «процесс». В действительности часто бывает желательно иметь несколько нитей, разделяющих единое адресное пространство, но выполняющихся квазипараллельно, благодаря чему нити становятся подобными процессам (за исключением разделяемого адресного пространства). Нити иногда называют облегченными процессами или мини-процессами. Действительно, нити во многих отношениях подобны процессам. Каждая нить выполняется строго последовательно и имеет свой собственный программный счетчик и стек. Нити, как и процессы, могут, например, порождать нитипотомки, могут переходить из состояния в состояние. Подобно традиционным процессам (т. е. процессам, состоящим из одной нити), нити могут находиться в одном из следующих состояний: «Выполнение», «Ожидание» и «Готов». Пока одна нить заблокирована, другая нить того же процесса может выполняться. Нити разделяют процессор так, как это делают процессы, в соответствии с различными вариантами планирования. Однако различные нити в рамках одного процесса не настолько независимы, как отдельные процессы. Все такие нити имеют одно и то же адресное пространство. Это означает, что они разделяют одни и те же глобальные переменные. Поскольку каждая нить может иметь доступ к каждому виртуальному адресу, одна нить может использовать стек другой нити. Между нитями нет полной защиты, потому что, во-первых, это невозможно, а во-вторых, не нужно. Все нити одного процесса всегда решают общую задачу одного пользователя, и аппарат нитей используется здесь для более быстрого решения задачи путем ее распараллеливания. При этом программисту очень важно получить в свое распоряжения удобные средства организации взаимодействия частей одной задачи. Кроме разделения адресного пространства, все нити разделяют также набор открытых файлов, таймеров, сигналов и т.п. Таблица 10.1.Свойства потоков Потоки имеют собственные программный счетчик, стек, регистры, нити-потомки, состояние. 164 Потоки разделяют адресное пространство, глобальные переменные, открытые файлы, таймеры, семафоры, статистическую информацию Многопоточная обработка повышает эффективность работы системы по сравнению с многозадачной обработкой. Например, в многозадачной среде Windows можно одновременно работать с электронной таблицей и текстовым редактором. Однако, если пользователь запрашивает пересчет своего рабочего листа, электронная таблица блокируется до тех пор, пока эта операция не завершится, что может потребовать значительного времени. В многонитевой среде в случае, если электронная таблица была разработана с учетом возможностей многонитевой обработки, предоставляемых программисту, этой проблемы не возникает, и пользователь всегда имеет доступ к электронной таблице. Широкое применение находит многопоточная обработка в распределенных системах. Некоторые прикладные задачи легче программировать, используя параллелизм, например, задачи типа «писатель-читатель», в которых один поток выполняет запись в буфер, а другой считывает записи из него. Поскольку они разделяют общий буфер, не стоит их делать отдельными процессами. Другой пример использования потоков – это управление сигналами, такими как прерывание с клавиатуры (del или break). Вместо обработки сигнала прерывания, один поток назначается для постоянного ожидания поступления сигналов. Таким образом, использование потоков может сократить необходимость в прерываниях пользовательского уровня. В первых параллельных алгоритмах над задачей распараллеливания работали программисты. Естественно, это приводило к тому, что одни процессоры были перезагружены, а другие простаивали без работы. Выход нашли путем перекладывания задач распараллеливания операций на ОС, применяя, в том числе языки высокого уровня (ЯВУ), ориентированные на многопоточную обработку данных. В настоящее время все ЯВУ делятся на однопоточные и многопоточные. К однопоточным относятся ранние ЯВУ (Паскаль, Фортран, Си, Си++ в первых своих редакциях). Многопоточные ЯВУ стали разрабатываться ещѐ до появления многоядерных процессоров. К таким языкам относится, прежде всего, Java. Он с самого начала был многопоточным. Так же многопоточными являются С#, Python, а также серия ЯВУ с расширением .Net: Visual C++ Net, Visual Basic Net. Эти языки уже при компиляции используют многопоточную модель вычислений. Как ОС использует многопоточность? На рис. 10.11 приведена модель управления потоками со стороны процессов, выполняемых на ВМ. Показано, что ядро производит управление процессами 1 и 2, ничего не зная о потоках, созданных внутри этих процессов. Первый 165 процесс создал три потока, второй – четыре потока. Все эти потоки выполняются лишь тогда, когда выполняется соответствующий процесс. Выполнение потоков происходит лишь на том процессоре, который выделен ОС соответствующему процессу. Внутри процессов имеются управляющие модули, которые создают таблицу потоков. Эти же модули и управляют выполнением потоков внутри процесса. Выполнение потоков и процессов осуществляется в пространстве пользователя, ядро выполняется в пространстве ядра в привилегированном режиме. Рис.10.11. Управление потоками в процессах. Надо отметить, что по-английски поток обозначается термином Thread, т. е. «нить». Это обозначение в некотором смысле более приемлемо, поскольку оно более отличается от термина процесс и позволяет, в свою очередь, разделить поток на более мелкие составляющие – «волокна», что часто и делается ОС в настоящее время. Чем хороши потоки по сравнению с процессами? Они используют то же адресное пространство, что и процессы, не требуют дополнительных накладных расходов при переходе от одного потока (нити) к другому потоку одного и того же процесса. Положительным свойством управления потоками в пользовательском пространстве является то, что процессы и потоки выполняются быстро, не переходя в режим ядра. Кроме того, такой механизм можно реализовать в любой ОС. Недостатком такого подхода является то, что все потоки одного процесса могут выполняться только на том ядре, которое ОС выделила данному процессу. 166 Более современный подход представлен на рис.10.12. Рис.10.12. Управление потоками в ядре. Здесь управление потоками и процессами осуществляется в ядре ОС. Ядро знает о потоках каждого процесса и привлекается к их планированию и управлению ими. Такой подход позволяет смешивать управление потоками и процессами, в том числе выделять потокам одного процесса разные процессоры. Достоинством такого подхода является то, что любой поток может выполняться на любом ядре процессора, что существенно повышает эффективность использования аппаратуры и приводит к повышению быстродействия. Недостатком такого подхода является то, что и процессы и потоки обращаются к ядру ОС, при этом увеличиваются накладные расходы на переключение пользовательского и защищенного режимов. Вариантов осуществления управления потоками и процессами очень много. Есть очень много сложностей и неприятностей при практическом осуществлении конкретных вариантов реализации управления. Задачи, ориентированные для выполнения на многоядерных процессорах, хуже выполняются на процессорах с малым количеством ядер. Поэтому в общем случае число потоков и количество ядер процессора должно быть согласовано. Программы на более совершенные процессоры следует оптимизировать. В мультипроцессорных системах для потоков из одного адресного пространства имеется возможность выполняться параллельно на разных процессорах. Это действительно один из главных путей реализации разделения ресурсов в таких системах. С другой стороны, правильно сконструированные программы, которые используют потоки, должны работать одинаково хорошо как на однопроцессорной машине в режиме разделения времени между потоками, так и на настоящем мультипроцессоре. 167 11. УПРАВЛЕНИЕ ПАМЯТЬЮ Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной операционной системы. Распределению подлежит вся оперативная память, не занятая операционной системой. Обычно ОС располагается в самых младших адресах, однако может занимать и самые старшие адреса. Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место, а также настройка адресов программы на конкретную область физической памяти. 11.1. Типы адресов Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса (рис. 11.1). Рис. 11.1. Типы адресов. Символьные имена. Ими оперирует пользователь при написании программы на языке программирования высокого уровня или ассемблере. Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Транслятор присваивает переменным и командам виртуальные адреса, считая по умолчанию, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное 168 виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адреса для данной архитектуры компьютера, и, как правило, не совпадает с объемом физической памяти, имеющимся в компьютере. Физические адреса – это адреса ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами. В первом случае замену виртуальных адресов на физические делает специальная системная программа – перемещающий загрузчик. Перемещающий загрузчик на основании имеющихся у него исходных данных о начальном адресе физической памяти, в которую предстоит загружать программу, и информации, предоставленной транслятором об адресно-зависимых константах программы, выполняет загрузку программы, совмещая еѐ с заменой виртуальных адресов физическими. Второй способ заключается в том, что программа загружается в память в неизмененном виде в виртуальных адресах, при этом операционная система фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Второй способ является более гибким, он допускает перемещение программы во время ее выполнения, в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти. Вместе с тем использование перемещающего загрузчика уменьшает накладные расходы, так как преобразование каждого виртуального адреса происходит только один раз во время загрузки, а во втором случае – каждый раз при обращении по данному адресу. В некоторых случаях (обычно в специализированных системах), когда заранее точно известно, в какой области оперативной памяти будет выполняться программа, транслятор выдает исполняемый код сразу в физических адресах. 11.2. Методы распределения памяти без использования дискового пространства Все методы управления памятью могут быть разделены на два класса: методы, которые используют перемещение процессов между оперативной памятью и диском, и методы, которые не делают этого (рис. 11.2). 169 Рис. 11.2. Классификация методов распределения памяти. Распределение памяти фиксированными разделами Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины (рис. 11.3). Это может быть выполнено вручную оператором во время старта системы или во время ее генерации. Рис. 11.3. Распределение памяти фиксированными разделами: а – с общей очередью; б – с отдельными очередями. Подсистема управления памятью выполняет следующие задачи: сравнивая размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел, осуществляет загрузку программы и настройку адресов. При очевидном преимуществе – простоте реализации – данный метод имеет существенный недостаток – жесткость. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования зара170 нее ограничен числом разделов независимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, даже если объем оперативной памяти машины позволяет разместить некоторую программу, превышающую по объѐму размер раздела, разбиение памяти на разделы не позволяет выполнить такую программу. Распределение памяти разделами переменной величины В этом случае память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На рис. 11.4 показано состояние памяти в различные моменты времени при использовании динамического распределения. Рис. 11.4. Распределение памяти динамическими разделами. Так в момент t0 в памяти находится только ОС, а к моменту t1 память разделена между 5 задачами, причем задача П4, завершаясь, покидает память. На освободившееся после задачи П4 место загружается задача П6, поступившая в момент t3. 171 Задачами операционной системы при реализации данного метода управления памятью является: ведение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти, при поступлении новой задачи – анализ запроса, просмотр таблицы свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи, загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей, после завершения задачи корректировка таблиц свободных и занятых областей. Программный код не перемещается во время выполнения, т. е. может быть проведена единовременная настройка адресов применением перемещающего загрузчика. Выбор раздела для вновь поступившей задачи может осуществляться по разным правилам, таким, например, как «первый попавшийся раздел достаточного размера», или «раздел, имеющий наименьший достаточный размер», или «раздел, имеющий наибольший достаточный размер». Все эти правила имеют свои преимущества и недостатки. По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток – фрагментация памяти. Фрагментация – это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти. Перемещаемые разделы Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших либо в сторону младших адресов, так, чтобы вся свободная память образовывала единую свободную область (рис. 11.5). В дополнение к функциям, которые выполняет ОС при распределении памяти переменными разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется «сжатием». Сжатие может выполняться либо при каждом завершении задачи, либо только тогда, когда для вновь поступившей задачи нет свободного раздела 172 достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц, а во втором – реже выполняется процедура сжатия. Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то преобразование адресов из виртуальной формы в физическую должно выполняться динамическим способом. Рис. 11.5. Распределение памяти перемещаемыми разделами. Хотя процедура сжатия и приводит к более эффективному использованию памяти, она может потребовать значительного времени, что часто перевешивает преимущества данного метода. 11.3. Методы управления памятью с использованием дискового пространства Виртуальная память Уже достаточно давно пользователи столкнулись с проблемой выполнения процессов, размер которых превышал имеющуюся в наличии свободную память. Первый метод решения этой проблемы состоял в том, что программа делилась на части (оверлеи), которые из диска загружались в память и выполнялись последовательно во времени. Делением программы на оверлеи и организацией их последовательного выполнения занимались программисты, хотя само перемещение оверлеев между диском и памятью осуществлялось средствами ОС. В дальнейшем стали использовать более прогрессивный метод, называемый виртуальная память. Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим свойствами, которыми он в действительности не обладает. Так, например, пользователю может быть предоставлена виртуальная оперативная память, размер которой превосходит всю имеющуюся в системе реальную оперативную память. Пользователь пишет программы так, как будто в его распоряжении имеется одно173 родная оперативная память большого объема, но в действительности все данные, используемые программой, хранятся на одном или нескольких разнородных запоминающих устройствах, обычно на дисках, и при необходимости частями отображаются в физическую память. Следовательно, виртуальная память – это совокупность программноаппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память. Виртуальная память обеспечивает решение следующих задач: размещение программного кода и данных в запоминающих устройствах разного типа, например, частично в оперативной памяти, а частично на диске; перемещение информации по мере необходимости между запоминающими устройствами разного типа; преобразование виртуальных адресов в физические. Все эти действия выполняются операционной системой без участия программиста, т. е. механизм виртуальной памяти является прозрачным по отношению к пользователю. Имеются различные алгоритмы реализации виртуальной памяти. Наиболее распространѐнными из них являются страничное, сегментное и странично-сегментное распределение памяти, а также свопинг. Страничное распределение Механизм управления памятью при страничном распределении поясняется схемой, изображенной на рис. 11.6. Сущность этого механизма заключается в разделении как виртуальной памяти, так и физической на части – страницы одинакового объѐма, равного степени числа 2. Каждый процесс имеет своѐ виртуальное адресное пространство с определѐнным количеством виртуальных страниц. В принципе объѐм виртуальной памяти не кратен размеру страницы. Поэтому последняя виртуальная страница имеет некоторую часть неиспользуемой процессом памяти. Объѐм страницы выбирается равным степени двойки по той причине, что это позволяет упростить преобразование виртуальных адресов в физические. Операционная система при загрузке процесса помещает в оперативную (физическую) память только часть страниц из виртуальной памяти. При этом страницы физической памяти, выделяемые процессу, не обязательно составляют единую область. Для однозначного соответствия виртуальных и физических страниц операционная система для каждого процесса ведѐт так называемую страничную таблицу, в которой строки соответствуют номерам страниц виртуальной памяти процесса, каждая строка содержит указание, загружена ли эта страница в физическую память, если да, то на какую страницу физической па174 мяти. Кроме того, каждая строка содержит некоторую управляющую информацию, указывающую, например, модифицировалась ли страница при нахождении в физической памяти, сколько раз за последнее время происходило обращение к данной физической странице, признак невыгружаемости (т. е. необходимость наличия страницы постоянно в физической памяти) и др. Эта управляющая информация формируется и используется механизмом виртуальной памяти при управлении памятью. Рис. 11.6. Страничное распределение памяти. При активизации очередного процесса в специальный регистр процессора загружается адрес таблицы страниц данного процесса. Управление памятью происходит следующим образом. При каждом обращении к памяти осуществляется чтение той строки страничной таблицы данного процесса, которая соответствует требуемой виртуальной страницы. При этом определяется, загружена ли эта страница в физическую память. Если страница загружена, то происходит преобразование виртуального адреса в физический, и процесс получает доступ к соответствующей ячейке физической памяти. Если же в физической памяти требуемая виртуальная страница отсутствует, то про175 цесс переводится в состояние «Ожидание», вместо него активным становится другой процесс из очереди готовых, а операционная система выполняет так называемое страничное прерывание. Если в физической памяти имеется свободная страница, то вновь затребованная процессом виртуальная страница загружается из виртуальной памяти в эту страницу физической памяти, делаются соответствующие отметки в страничной таблице и процесс переводится из состояния ожидания в состояние «Готов». Если же свободная страница в физической памяти отсутствует, то первым делом осуществляется выбор той страницы физической памяти, которую нужно освободить. При этом может использоваться один из нескольких возможных алгоритмов. Например, выбирается первая случайно выбранная страница. Или выбирается страница, к которой в последнее время было меньше всего обращений. Или выбор останавливается на той странице, к которой дольше всего не было обращений. Возможны и другие варианты. Для любого из них используется управляющая информация, которую механизм виртуальной памяти регулярно обновляет в страничных таблицах. После выбора в физической памяти страницы для замещения проверяется бит модификации в соответствующей строке страничной таблицы. Если страница при нахождении в физической памяти была модифицирована, т. е. было изменено содержание хотя бы одного байта данной страницы, то эта страница перезаписывается на диск для сохранения внесѐнных изменений. Если страница не модифицировалась, то перезаписи не требуется (она имеется на диске в неизменѐнном состоянии), новая страница из виртуальной памяти загружается в данную физическую страницу, а в страничной таблице делаются соответствующие изменения, в том числе обнуляется бит модификации вновь загруженной страницы. После этого страничное прерывание заканчивается и процесс переводится из ожидания в очередь готовых для выполнения процессов. Преобразование виртуального адреса в физический при страничной организации памяти поясняется схемой, представленной на рис. 11.7. Как виртуальный, так и физический адреса при страничном управлении памятью имеют по два поля: поле номера страницы и поле смещения в странице. Номера страниц начинаются с 0. Поскольку размер страницы равен два в степени k, то поле смещения в странице имеет k разрядов и адрес (как физический, так и виртуальный) образуется путѐм конкатенации двух полей без использования арифметических операций. 176 Рис. 11.7. Схема преобразования виртуального адреса в физический при страничной организации памяти. Преобразование адресов из виртуального адресного пространства в физическое осуществляется при каждом обращении процессора к памяти. При этом аппаратными средствами механизма виртуальной памяти выполняются следующие действия: из начального адреса таблицы страниц (содержимое регистра адреса таблицы страниц), номера виртуальной страницы (старшие разряды виртуального адреса) и длины записи в таблице страниц (системная константа) определяется адрес нужной строки в страничной таблице, из этой строки извлекается номер физической страницы, определяется адрес ячейки в физической памяти путѐм конкатенации номера физической страницы и смещения в странице (младшие разряды виртуального адреса). Отсутствие необходимости использовать в преобразовании адресов арифметических операций позволяет ускорить процесс преобразования и повысить производительность компьютера. Но в любом случае преобразование адресов требует дополнительного обращения к памяти (для считывания данных из станичной таблицы). Связанные с этим дополнительные временные затраты стремятся уменьшить путѐм размещения страничных таблиц (или наиболее используемой их части) в более быстродействующей памяти, например, в кэше. Страничное распределение памяти может быть реализовано в упрощенном варианте, без выгрузки страниц на диск. В этом случае все виртуальные стра177 ницы всех процессов постоянно находятся в оперативной памяти. Такой вариант страничной организации хотя и не предоставляет пользователю виртуальной памяти, но почти исключает фрагментацию за счет того, что программа может загружаться в несмежные области, а также того, что при загрузке виртуальных страниц никогда не образуется остатков. Сегментное распределение Недостатком страничного распределения памяти является невозможность в полной мере учесть права доступа к различным сегментам памяти каждого процесса. Вне зависимости от того, что содержится в памяти, она стандартно делится на страницы, и страницы целиком перемещаются между диском и опе6ративной памятью. Это может привести к негативным эффектам, связанным с искажением программного кода или несанкционированным доступом к данным другого пользователя. Для устранения этого недостатка применяют так называемое сегментное распределение памяти. Суть этого метода управления памятью состоит в том, что виртуальное пространство делится на сегменты, обладающие разными правами доступа к ним. Отдельные сегменты могут содержать программный код, глобальные переменные, стек, временные данные процесса. В качестве сегментов может выступать код отдельных математических подпрограмм, которые используются сразу несколькими процессами. Выделение сегментов осуществляется программистом или компилятором. Схема сегментного распределения памяти поясняется рис.11.8. Операционная система при начале выполнения процесса производит загрузку части его сегментов из диска в оперативную память. При этом для каждого сегмента подбирается участок памяти необходимого размера, сегменты могут находиться в оперативной памяти в произвольном месте. При загрузке создаѐтся сегментная страница, в которой содержится информация о номере виртуального сегмента, признак размещения сегмента в оперативной памяти, начальный адрес размещения сегмента в физической памяти, признак модификации сегмента, права доступа к сегменту, его размер, признак обращения к сегменту в последнее время и другая необходимая для механизма виртуальной памяти информация. Если сегмент используется сразу несколькими процессами, то об этом тоже указывается в сегментной таблице, а такой сегмент загружается в физическую память в единственном экземпляре. 178 Рис. 11.8. Сегментное распределение памяти. Механизм виртуальной памяти в основном оперирует сегментами аналогично страничному распределению с помощью сегментных (а не страничных) прерываний. Отличие состоит в обязательной проверке прав доступа при каждом обращении процесса к памяти и в несколько другой схеме преобразования адресов (рис.11.9). Эта схема использует сегментную страницу вместо страничной и вынуждена применять арифметическое действие сложения при каждом обращении процессора к памяти. Рис. 11.9. Преобразование адресов при сегментной организации памяти. Недостатками сегментного метода распределения памяти является фрагментация на уровне сегментов и более медленная процедура преобразования адресов по сравнению со страничным распределением. Странично-сегментное распределение Из названия данного метода следует, что он использует свойства, присущие как страничному распределению, так и сегментному распределению памяти. Отсюда устранение многих присущих этим методам недостатков. Метод странично-сегментного распределения памяти использует механизм сегментов для учѐта прав доступа к различным сегментам процессов, но перемещение ин179 формации между дисковой и физической памятью осуществляется не целыми сегментами, а страницами сегментов. Страницы, как и при страничном распределении имеют одинаковый объѐм равный степени двойки, что упрощает и ускоряет преобразование адресов и в значительной мере устраняет явление фрагментации физической памяти. Виртуальный адрес для данного метода представляет совокупность трѐх полей: номера сегмента, номера страницы в сегменте и смещения в странице. Физический адрес, как и в страничном методе имеет два поля: номер страницы и смещение в странице. Схема преобразования адресов приведена на рис.11.10. Рис. 11.10. Схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти. Механизм виртуальной памяти данного метода образует уже два типа таблиц: сегментную таблицу процесса и для каждого сегмента свою страничную таблицу. Преобразование адресов осуществляется при помощи дополнительных двух обращений к этим таблицам при каждом обращении процессора к памяти. Вначале из виртуального адреса извлекается номер сегмента, по этому номеру определяется соответствующий адрес страничной таблицы данного сегмента. Потом из виртуального адреса считывается номер страницы и из соответствующей строки страничной таблицы считывается номер физической страницы, где размещена соответствующая страница данного сегмента. Физический адрес составляется путѐм конкатенации номера физической страницы и смещения в странице, считываемого из виртуального адреса. Два дополнительных обращения к памяти для преобразования адресов замедляет эту процедуру. Для уменьшения этих временных затрат используют размещение по крайней мере наиболее часто используемых частей сегментных и страничных таблиц в более быстродействующей памяти. 180 11.4. Свопинг Свопинг представляет собой разновидность виртуальной памяти. На рис.11.11 приведен полученный экспериментальным путѐм график зависимости коэффициента загрузки процессора от числа одновременно выполняемых процессов и доли времени, проводимого этими процессами в состоянии ожидания ввода-вывода. Рис. 11.11. Зависимость загрузки процессора от числа задач и интенсивности вводавывода. Анализ кривых рисунка показывает, что для загрузки процессора на 90% достаточно всего трех счѐтных задач. Однако для обеспечения такой же загрузки задачами, выполняющими интенсивный ввод-вывод, потребуются десятки таких задач. Необходимым условием для выполнения задачи является загрузка ее в оперативную память, объѐм которой ограничен. Чтобы обеспечить размещение в памяти большого количества задач, был предложен метод организации вычислительного процесса, называемый свопингом. В соответствии с этим методом некоторые процессы (обычно находящиеся в состоянии ожидания) временно выгружаются на диск. Планировщик операционной системы не исключает их из своего рассмотрения, и при наступлении условий активизации некоторого процесса, находящегося в области свопинга на диске, этот процесс перемещается в оперативную память. Если свободного места в оперативной памяти не хватает, то выгружается другой процесс. При свопинге, в отличие от рассмотренных ранее методов реализации виртуальной памяти, процесс перемещается между памятью и диском целиком, т. е. в течение некоторого времени процесс может полностью отсутствовать в оперативной памяти. Операционные системы могут использовать различные алгоритмы выбора процессов на загрузку и выгрузку, а также различные способы выделения оперативной памяти загружаемому процессу. 181 12. ФАЙЛОВАЯ СИСТЕМА Операционная система должна обеспечить пользователям удобство работы с данными различного вида, хранящимися на диске. Для этого ОС использует вместо физического представления данных некоторую удобную для пользователей абстрактную логическую модель, представляемую в виде совокупности иерархически организованных каталогов и файлов. В результате пользователь видит данные в виде набора ярлыков или списков, выводимых на экран монитора утилитами типа Проводник (в ОС Windows). 12.1. Общие сведения о файлах и файловых системах Файл – это именованная область внешней памяти, в которую можно записывать и из которой можно считывать данные, а также собственно хранимые в этой области данные и набор атрибутов, позволяющих ОС выполнять операции различного рода с этими данными. Файловые системы должны обеспечить долговременное и надежное хранение информации в вычислительной системе, а также возможность совместного использования информации различными пользователями. Первое из этих свойств обеспечивается за счет хранения информации на запоминающих устройствах, не зависящих от питания, и за счет общей организации ОС, сбои в которой чаще всего не разрушают информацию, хранящуюся в файлах. Второе свойство обеспечивается понятными правилами символьного именования файлов, возможностью их группировки в иерархические структуры каталогов, наличием средств поиска файлов, создания, чтения, модификации и удаления файлов. Создатель файла или администратор имеет возможность задания прав доступа к файлам других пользователей. Файловой системой называют часть операционной системы, обеспечивающую удобство пользования совокупностью данных на внешних устройствах и возможность совместного пользования данными нескольким пользователям. Различают три компонента файловой системы: саму совокупность файлов на внешних устройствах памяти, набор структур, создаваемых для управления файлами и специальное программное обеспечение, осуществляющее действия с файлами и управление ими. 12.2. Имена файлов Различают несколько типов имѐн файлов: символьные, уникальные, составные. Символьные имена. Пользователи дают файлам символьные имена, обычно 182 вкладывая в имя файла некоторое смысловое содержание о той информации, которая находится в файле. При задании символьных имѐн учитываются ограничения, накладываемые операционной системой на используемые символы и на длину имени. Очень жесткие ограничения на длину имени вводились первыми операционными системами. Популярная ещѐ совсем недавно файловая система FAT ограничивала длину имен схемой 8.3 (8 символов – собственно имя, 3 символа – расширение имени). Другая популярная ОС UNIX SystemV допускала длину имени не более 14 символов. Современные файловые системы, как правило, снимают такие жесткие ограничения и позволяют давать файлам имена, содержащие до 255 символов – так называемые длинные имена. Это действительно намного удобнее пользователям, ведь в длинном имени можно действительно более свободно отобразить смысловое содержание и назначение файла. В этом случае даже через значительное время после создания файла по его имени пользователь может вспомнить необходимые ему сведения о файле. Но наличие длинных имѐн порождает немалые трудности в использовании ранее созданных приложений, которые рассчитаны на применение коротких имѐн. Поэтому файловая система должна иметь возможность переименования файлов, задавая файлам с длинными именами короткие имена (псевдонимы), т. е. должна иметь подсистему генерации коротких имен. Составное имя. Некоторые файлы могут иметь одинаковые символьные имена, причем операционная система не допускает наличия файлов с одинаковыми именами в одном каталоге носителя. Поэтому для идентификации файлов используют так называемые полные или составные имена, включающие кроме собственно имени перечень цепочки каталогов, начиная с корневого, в которых содержится данный файл. Уникальное имя. Некоторые файловые системы допускают присутствие файла сразу в нескольких каталогах, что приводит к возможности наличия у файла нескольких составных имѐн. Поэтому операционная система присваивает файлу уникальное числовое имя, например, номер индексного дескриптора в ОС UNIX. 12.3. Типы файлов Различными типами файлов являются обычные файлы, специальные файлы и файлы-каталоги. Обычные файлы содержат некоторую информацию, текстового или двоичного вида. Текстовые файлы представляют собой некий смысловой набор символов, который можно увидеть на экране или распечатать на принтере. Двоич183 ные файлы нельзя представить в виде осмысленного текста, они имеют сложную внутреннюю структуру, например, архивные файлы или файлы изображений. Специальные файлы представляют собой некоторый заменитель (псевдоним) устройства ввода-вывода. Пользователь заменяет операции ввода-вывода обычными командами чтения или записи в такие файлы. На определѐнном этапе обработки таких команд ОС заменяет их действиями с соответствующими устройствами ввода-вывода посредством использования функций драйверов этих устройств. Файлы-каталоги представляют собой как перечень файлов, содержащихся в каталоге, так и значения атрибутов этих файлов, а также другие сведения, позволяющие операционной системе управлять файлами и осуществлять действия над ними. Атрибутами файлов, в частности, могут быть владелец файла, создатель файла, пароль для доступа к файлу, набор признаков файла (скрытый, архивный, системный, временный файл и др.), время создания, последнего доступа, изменения и печати файла, текущий размер файла и другие. Каталог содержит атрибуты файлов в своих записях (как это выполнено, например, в файловой системе MS-DOS) или хранить значения атрибутов в специальных таблицах носителя данных (рис. 12.1). Каталоги обычно имеют определѐнную иерархию, которая может представлять собой одноуровневую структуру, дерево или сеть (рис.12.2). Рис. 12.1. Структура каталогов: а – структура записи каталога MS-DOS (32 байта); б – структура записи каталога ОС UNIX. 184 Рис. 12.2. Иерархическое строение файловой системы: а – одноуровневое; б – иерархическое (дерево); в – иерархическое (сеть). 12.4. Организация файла Логическая организация файла – это то, над чем работает программист. Для него имеет смысл наименьшая часть данных – логическая запись, из которых и составляется содержание файла. Для текстовых файлов логической единицей является байт – отдельный символ в файле. Другие типы файлов могут иметь иные логические единицы. В любом случае логическая единица – это наименьшая адресуемая часть данных файла. Даже если обмен данными с внешним устройством производится единицами большего размера, программист имеет дело с логическими единицами файла. По своей логической структуре файлы могут различаться (рис. 12.3). Длина логических записей может быть одинаковой или различной, расположение логических единиц в файле может быть последовательным или иметь более сложную организацию, например, в виде индексных таблиц. Для идентификации логических записей могут использоваться специальные индексыключи. Файловые системы ОС UNIX и MS-DOS имеют простейшую логическую структуру – последовательность байтовых записей. 185 Рис. 12.3. Способы логической организации файлов. Для программиста менее интересным является физическая структура файла – фактическое размещение информации на носителе. Но без такой информации операционная система не имеет возможности в полной мере осуществлять управление файлами. Физическая организация файла состоит из блоков – наименьших единиц информации, которыми осуществляется обмен данными внешнего устройства с оперативной памятью ВМ. Выделяют несколько типов физической организации файлов (рис.12.4). Простейший случай – последовательное размещение блоков файла на носителе (рис.12.4,а). В этом случае для адресации файла достаточно указать адрес первого блока, принадлежащего файлу. Но такая организация не всегда возможна, поскольку редко известно заранее, сколько блоков надо выделить файлу при его создании, тем более, что с течением времени некоторые файлы могут наращивать свой объѐм, например, если файл – это текстовый документ (книга, статья, учебное пособие). Поэтому такой способ физической организации неизбежно приводит к фрагментации носителя – появлению неиспользуемых блоков, которые невозможно использовать ввиду их разобщѐнности. 186 Рис. 12.4. Физическая организация файла а – непрерывное размещение; б – связанный список блоков; в – связанный список индексов; г – перечень номеров блоков. Другим способом физической организации является так называемый связанный список блоков (рис.12.4,б), при котором в начале каждого блока выделяется служебное поле, содержащее указатель на следующий блок данного файла. Но в этом случае для доступа к произвольному блоку файла надо последовательно прочитать все предыдущие блоки, вычисляя по цепочке каждый следующий блок. К тому же часть ѐмкости блока уже не содержит информации файла, поэтому возникают трудности с определением объема информации, содержащейся в файле. Третий способ свободен от этих недостатков (рис.12.4,в), поскольку в нем информация о номерах блоков, входящих в состав файла, содержится в специальной индексной области носителя. Благодаря этому для доступа к произвольному блоку файла достаточно прочитать из индексной таблицы номер нужного по порядку блока файла и считать только этот блок. Наконец, ещѐ один способ физической организации файла реализован в ОС UNIX (рис. 12.4,г). Он представляет собой структуру одинаковой длины, содержащую простое перечисление номеров блоков, входящих в файл. Структура содержит 13 полей. Первые 10 полей содержат номера первых десяти блоков файла. Если количество блоков в файле больше 10, то задействуется 11-е поле, 187 в котором указан номер блока, содержащего ещѐ 128 номеров блоков файла. При количестве блоков больше 138 используется следующее, 12-е поле, в котором путем двойной косвенной адресации указан номер блока, содержащего 128 номеров блоков, каждый из которых содержит ещѐ по 128 номеров блоков данного файла. При размере файла, превышающем 10+128+128*128 блоков используется последнее 13-е поле структуры, содержащее с помощью тройной косвенной адресации номера последующих 1283 блоков. При функционировании файловых систем чрезвычайно важным вопросом, особенно для многопроцессных многопользовательских систем является обеспечение защищенности файлов от нежелательного влияния других пользователей. Это достигается путем задания прав доступа к файлу. Т. е. определения списка операций, которые может использовать пользователь по отношению к файлу. Такой перечень может быть разным для разных операционных систем. К примеру, он может содержать следующие операции: чтение файла, запись в файл, создание файла и его уничтожение, переименование файла и поиск в нѐм, а также другие операции. Различают два способа задания прав доступа – избирательный, когда сам владелец файла задаѐт каждому пользователю ВМ доступные ему права доступа, и мандатный, когда ОС разделяет всех пользователей на группы с одинаковым перечнем разрешѐнных операций по отношению к файлу. В первом случае определяется матрица прав доступа, содержащая в строках пользователей системы, а в столбцах файлы, в ячейках матрицы перечисляются доступные конкретному пользователю операции по отношению к данному файлу (рис. 12.5). Рис. 12.5. Матрица прав доступа. 188 12.5. Кэширование диска Обычно время доступа к данным внешнего устройства памяти во много сотен раз больше, чем время доступа к оперативной памяти ВМ. Поэтому в некоторых ОС предусмотрена система буферизации, работающая аналогично кэш-памяти. В ОП выделяется область буферов, каждый буфер имеет размер одного блока внешнего ЗУ. При обращении процессора к внешнему ЗУ в первую очередь проверяется, не содержит ли какой-либо буфер затребованный блок данных. Если есть такой буфер, то его содержимое передаѐтся в ОП, запрос считается выполненным, хотя физического обращения к внешнему ЗУ не происходило. В случае отсутствия требуемого блока в буферной области ОС освобождает один из буферов, возвращая его содержимое на внешнее ЗУ, и производит чтение требуемого блока данных одновременно в освободившийся буфер и в ОП компьютера. Таким образом соблюдается принцип работы кэш-памяти, но в качестве кэша выступает часть ОП, более быстродействующая, чем внешняя память. 12.6. Многоуровневая модель файловой системы В общем виде файловая система представляется в виде многоуровневой модели (рис.12.6). Интерфейс нижележащего уровня используется вышележащим для выполнения своих функций при взаимодействии этих уровней. На самом верхнем – символьном уровне определяется уникальное имя файла, к которому выполняется доступ для совершения заданной операции. При совпадении уникального имени с символьным этот уровень может отсутствовать. Рис. 12.6. Общая модель файловой системы. 189 На базовом уровне определяются атрибуты файла, причѐм для ускорения работы они возможно вместе с несколькими блоками данных файла переписываются в ОП компьютера. На следующем уровне проверяются права доступа пользователя по отношению к данному файлу. Если права доступа разрешают пользователю выполнять операцию, указанную в запросе, выполнение запроса продолжается. В противном случае выдаѐтся сообщение о нарушении прав доступа. Далее, на логическом уровне определяется номер требуемой логической записи, т. е. еѐ смещение от начала файла. При этом учитывается только структура логической организации файла. Если она представляет собой последовательность логических записей одинаковой длины g байт, то k-я логическая запись имеет смещение g(k-1) байт от начала файла. При индекснопоследовательной логической организации файла смещение определяется путѐм чтения таблицы индексов, где непосредственно указан адрес логической записи. На физическом уровне определяется номер блока, который содержит требуемую логическую запись. Например, при последовательном размещении блоков файла номер блока можно вычислить по формуле n=N+[k/V], где N – номер начального блока в файле, V – размер блока, k – смещение логической записи в блоке, [k/V] – операция вычисления целой части числа. Причѐм смещение логической записи в пределах блока вычисляется как s=mod(k/V), где mod() – остаток от деления, равный k-V*[k/V]. Таким образом, на физическом уровне определяется адрес блока и смещение в нѐм для требуемой логической записи. При этом учитывается физическая организация файла и размер блока внешнего ЗУ. После определения этих данных ОС осуществляет чтение из внешнего устройства памяти соответствующего блока и на основании вычисленного смещения в блоке выбирает требуемую логическую запись. 12.7. Современные архитектуры файловых систем Для современных ОС характерна способность оперировать не одной, а несколькими файловыми системами. Это достигается многоуровневой структурой современных файловых систем (рис.12.7). Верхний уровень структуры представляет собой переключатель файловых систем, обеспечивающий согласование запросов приложений с требованиями конкретных файловых систем. 190 Рис. 12.7. Архитектура современной файловой системы. На следующем уровне расположены драйверы файловых систем, обеспечивающие возможности управления соответствующими файловыми системами. Приложения в состоянии обращаться к драйверам файловых систем только через переключатель, расположенный на верхнем уровне структуры. Подсистема ввода-вывода, расположенная на нижестоящем уровне структуры, обеспечивает выполнение запросов пользовательских приложений с помощью набора драйверов устройств ввода-вывода, работающими непосредственно с аппаратурой устройств ввода-вывода. Иерархия драйверов обеспечивает выполнение соответствующих запросов с помощью цепочек вызова, формируемых при инициализации драйверов. Такая многоуровневая структура современной файловой системы обеспечивает достаточную гибкость работы драйверов устройств и прозрачность пользования файловыми системами для пользователей ВМ. 191 13. ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ В ВС Классическая фон Неймановская архитектура ВМ предусматривает последовательное выполнение команд программы. Дальнейшее увеличение производительности ВМ и систем возможно за счѐт применения параллельных вычислений как в пределах одной ЭВМ, так и путем создания вычислительных систем и сетей, объединяющих большое количество отдельных процессоров или вычислительных машин. Общим качеством ВС является наличие средств, реализующих параллельную обработку путем введения параллельных ветвей в вычислениях, что не предусматривалось классической архитектурой ЭВМ. 13.1. Уровни параллельных вычислений Параллелизм в вычислениях может быть реализован различными методами и средствами в зависимости от того, на каком уровне он должен обеспечиваться. Обычно выделяют уровни параллелизма: Микроуровень. Выполнение команды разделяется на фазы, каждой фазе выделяется своя часть аппаратуры процессора, организуется конвейерная обработка одновременно нескольких соседних команд. Уровень реализуется на однопроцессорной ВС. Уровень команд. Выражается при обеспечении параллельного выполнения сразу нескольких команд, достигается посредством размещения в процессоре нескольких конвейеров. Реализуется в суперскалярных процессорах. Уровень потоков. Процесс разбивается на способные к параллельному выполнению части (потоки). Уровень реализуется на многопроцессорных параллельных ВС. Уровень заданий. Несколько независимых заданий (процессов) одновременно выполняется на нескольких процессорах, практически не взаимодействуя друг с другом. Реализация такого уровня возможна на многопроцессорных и многомашинных ВС. Используется так называемый параллелизм данных. Каждый процессор может выполнять один или несколько процессов. Параллелизм обеспечивается работой операционной системы. Приведенная классификация характерна привязкой к аппаратуре ВС, т. е. к тому, на какой базе может быть реализован каждый уровень параллелизма. Существует также классификация параллелизма на основе гранулярности с привлечением того или иного механизма, обеспечивающего параллелизм. В основе лежит сравнение объема вычислений, выполняемых в параллельной задаче и объема коммуникаций (для обмена сообщениями) [6]. Крупнозернистый параллелизм: каждое параллельное вычисление доста192 точно независимо от остальных, требуется относительно редкий обмен информацией между отдельными вычислениями. Единицами распараллеливания здесь выступают большие и независимые программы, включающие тысячи команд. Этот уровень параллелизма выполняется операционной системой и соответствует параллелизму на уровне заданий. Среднезернистый параллелизм: единицами распараллеливания здесь являются вызываемые процедуры, включающие сотни команд. Реализуются обычно программистами и/или компилятором. Соответствуют параллелизму на уровнях команд и потоков. Мелкозернистый параллелизм: каждое параллельное вычисление достаточно мало и элементарно, составляется из единиц и десятков команд. Обычно распараллеливаемыми единицами являются элементы выражения или отдельные итерации цикла, имеющие небольшие зависимости по данным. Характерная особенность мелкозернистого параллелизма состоит в том, что интенсивность вычислений и обмена данными примерно одинаковы. Этот уровень параллелизма обеспечивается, например, распараллеливающим (векторизующим) компилятором и соответствует микроуровневому параллелизму и параллелизму на уровне команд предыдущей классификации. 13.2. Метрики параллельных вычислений Параллельные вычисления имеют ряд особенностей и требуют для оценки их эффективности наличия специфической системы метрик. Из них наиболее распространенными являются: профиль параллелизма программы; индекс параллелизма; ускорение; эффективность; утилизация; избыточность; сжатие; качество. При выводе соотношений, определяющих значение метрик, используются обозначения: n – количество процессоров в ВС; О(n) – общее количество машинных команд, выполненных на n-процессорной системе; Т(n) – время выполнения О(n) команд на n-процессорной системе в виде 193 количества квантов времени. Допустим, что время изменяется дискретно, и за 1 квант времени процессор выполняет любую команду. Поэтому для времени и объема вычислений справедливы следующие соотношения: Т(1)=О(1), Т(n)≤О(n). Из последнего соотношения можно сформулировать утверждение, что время вычислений за счет распределения объема вычислений между несколькими процессорами можно уменьшить. Профиль параллелизма программы Число процессоров р n-процессорной ВС, задействованных в выполнении программы в момент времени t, называют степенью параллелизма p(t). Зависимость величины p(t) как функции времени в виде графического представления (рис.13.1) или представления в табличной форме называют профилем параллелизма программы. На эту зависимость влияют многие факторы – алгоритм решения задачи, работа компилятора, свободность ресурсов системы и др. Рис. 13.1. Профиль параллелизма. Существуют два крайних случая профиля параллелизма. Для задач, не допускающих распараллеливание ни в какой части программного кода независимо от количества процессоров в ВС профиль параллелизма будет иметь «столообразный» вид с высотой по оси ординат равной 1. Т. е. будет совпадать с профилем параллелизма однопроцессорной ВС. Наоборот, для полностью распараллеливаемых задач, которые на протяжении всего времени выполнения задачи используют все n процессоров, профиль параллелизма будет так же иметь «столообразный» вид, но с высотой по оси ординат равной n. Все другие варианты этой метрики будут иметь некоторое промежуточное положение между этими двумя крайними случаями. Полагаем, что система состоит из n одинаковых процессоров; максимальный параллелизм в профиле равен n. Производительность Δ одиночного про194 цессора системы выражается в единицах скорости вычислений (количество операций в единицу времени) и не учитывает издержек, связанных с обращением к памяти и пересылкой данных. Общий объем вычислений О(n) за период от стартового времени tн до момента завершения tк пропорционален площади под кривой профиля параллелизма: (13.1) где ti – интервал времени (общее количество квантов времени) в течение которого p=i, а общее время вычислений. Средний параллелизм определяется как О(n)/T. Метрики, характеризующие скорость вычислений К таким метрикам относятся индекс параллелизма и ускорение. Индекс параллелизма определяется как средняя скорость параллельных вычислений, определѐнная через количество выполненных операций: PI(n) = O(n)/T(n). (13.2) Ускорение, получаемое при параллельном выполнении программы, – основной показатель эффективной скорости вычислений. Ускорение вычисляется путѐм деления времени, затрачиваемого на проведение вычислений на однопроцессорной ВМ (в варианте наилучшего последовательного алгоритма), на время решения той же задачи на параллельной n-процессорной ВС (при использовании наилучшего параллельного алгоритма): S(n) = T(1) / T(n). (13.3) Примечания о наилучших алгоритмах приведены не излишне. Они отражают существенную зависимость времени выполнения вычислений от алгоритмов, реализованных в программе. Поэтому реально достижимое ускорение должно быть вычислено при условии реализации наилучших алгоритмов. Метрики, характеризующие эффективность вычислений во времени Эти метрики позволяют судить об эффективности привлечения к решению задачи каждого дополнительного процессора. К таким метрикам относятся эффективность и утилизация; Эффективность – доля вклада каждого процессора системы в величину ускорения, достигнутого за счет параллельных вычислений: E(N)=S(n) / n = T(1) / (nT(n)). (13.4) Утилизация оценивает вклад каждого процессора в реализацию параллельных вычислений в виде количества операций, приходящихся на один процессор в единицу времени: 195 U(n) = O(n) / (n T(n)). (13.5) Метрики, характеризующие эффективность вычислений по объему Эти метрики позволяют сравнить объемы вычислений, выполняемых при параллельном и последовательном вариантах выполнения задач. К ним относятся избыточность и сжатие. Избыточность – это отношение объема параллельных вычислений к объему эквивалентных последовательных вычислений: R(n) = O(n) / O(1). (13.6) Данная метрика оценивает во сколько раз должен быть увеличен объѐм параллельных вычислений по сравнению с объѐмом при последовательном вычислении задачи. С помощью данной метрики можно определить объѐм дополнительных операций, которые должны быть включены в программный код для обеспечения параллельного выполнения задачи на многопроцессорной ВС. Учитывая, что Т(1)=О(1), показатель утилизации может быть определен через метрики избыточности и эффективности: U(n) = O(n) / (n T(n)) = R(n) E(n). (13.7) Сжатие вычисляется как величина, обратная избыточности: C(n) = O(1) / O(n) = 1/ R(n). (13.8) Метрика качества. Эта обобщающая метрика увязывает между собой метрики ускорения, эффективности и сжатия. Она является наиболее объективным показателем улучшения производительности многопроцессорной ВС за счет параллелизации вычислений: (13.9) Поскольку два сомножителя в формуле данной метрики (эффективность и сжатие), представляют собой правильные дроби и не могут быть больше 1, то качество Q(n) при любых условиях ограничено сверху величиной ускорения S(n). Именно поэтому метрика ускорения выбрана основной при оценивании закономерностей параллельных вычислений. 13.3. Закономерности параллельных вычислений Идеальный случай в повышении ускорения состоял бы в том, что nпроцессорная система смогла бы достичь ускорения в n раз по сравнению с однопроцессорной системой. Но такого ускорения никогда не удается получить. Основная причина заключается в невозможности полного распараллеливания ни одной из задач. Каждая программа обязательно содержит часть кода, который всегда обязан выполняться только одним из процессоров последовательно во времени. Эта часть может осуществлять инициализацию задачи, распределе196 ние выполнения кода по нескольким параллельным ветвям, сбор результатов отдельных параллельных вычислений или осуществление операций вводавывода. Даже та часть кода, которая допускает распараллеливание при выполнении, несет трудности в достижении полного распараллеливания. Нагрузка на каждый процессор системы в идеальном случае должна быть одинакова в течение всего вычислительного процесса. На практике это редко удаѐтся реализовать. Даже при одинаковой загрузке в точках синхронизации отдельным процессорам приходится ждать, пока остальные выполнят свои части задачи. Т. е. реально достижимое ускорение должно быть рассчитано на работу самого медленного процессора системы. Поэтому естественным является вопрос о том, на какое реальное ускорение при организации параллельных вычислений можно рассчитывать. Ответ зависит от того, каким образом пользователь собирается использовать возросшие в результате увеличения числа процессоров вычислительные мощности ВС. Наиболее характерны три варианта [6]: Объем вычислений не изменяется, главная цель – сократить время вычислений. Достижимое в этом случае ускорение определяется законом Амдала. Время вычислений с расширением системы не меняется, но при этом увеличивается объем решаемой задачи. Цель такого подхода – за выделенное время выполнить максимальный объем вычислений. В этой ситуации применим закон Густафсона. Этот вариант похож на предыдущий с условием, что объем решаемой задачи ограничен емкостью доступной памяти. Ускорение в этом случае может быть определено по закону Сана и Ная. Закон Амдала Затронутые в предыдущем материале вопросы давно мучили исследователей. Ещѐ в 1967 году один из разработчиков всемирно известной системы IBM 360 Джин Амдал (Gene Amdahl) в своей опубликованной работе предложил формулу для оценки достижимого на многопроцессорной ВС ускорения вычислений в зависимости от количества процессоров и соотношения между последовательной и параллельной частями программы. Проблема рассматривалась Амдалом в следующей постановке. На однопроцессорной и многопроцессорной системах решается задача одного и того же объѐма. Программный код решаемой задачи состоит из двух частей: последовательной и распараллеливаемой. Доля части кода, которая принципиально 197 должна выполняться последовательно одним из процессоров (т. е. не способная к распараллеливанию), обозначается f, где 0<f<1 (причем доля определяется не по числу строк кода, а по числу реально выполняемых операций с учетом, например, циклических участков кода). Следовательно, доля, составляющая распараллеливаемую часть программы, равна 1-f. Крайние значения области определения величины f соответствуют полностью параллельным (f=0) и полностью последовательным (f=1) программам. Принимается допущение, что распараллеливаемая часть программы равномерно распределяется по всем процессорам системы. В результате рассуждений длительность выполнения задачи на nпроцессорной системе составляет: (13.10) . Подставляя указанное значение в формулу ускорения и проведя преобразования, получаем формулу Амдала – ускорение, которое может быть достигнуто на системе из n процессоров: S(n) = T(1) / T(n) = . (13.11) Вычисляя предел этого выражения при числе процессоров стремящемся к бесконечности, получаем: (13.12) Полученное соотношение показывает, что предельно достижимое значение ускорения решения задачи на многопроцессорной ВС ограничено величиной, обратной значению доли последовательной части задачи. Т. е., сколько бы мы ни включали процессоров в состав вычислительной системы при значении этого параметра, например, 10% (т. е. f=0,1) мы не получим ускорения больше, чем в 10 раз. Причем 10 – это самая оптимистичная оценка, не учитывающая многих реально существующих факторов. К числу таких факторов относятся программные издержки, недостаточная сбалансированность процессоров и коммуникационные издержки. Программные издержки составляет та дополнительная часть кода, которая должна быть включена в распараллеливаемую задачу для организации распараллеливания и выполнения других дополнительных к последовательному коду функций. Т. е.реально объѐм параллельно выполняемой задачи является больше, чем объѐм последовательной задачи, а равенство объѐмов принято в качестве допущения при выводе закона Амдала. 198 Издержки из-за дисбаланса загрузки процессоров приводят к вынужденному ожиданию некоторых процессоров в точках синхронизации, пока другие закончат свою часть параллельных вычислений. Значит, величина ускорения ограничивается наиболее медленным из процессоров. Коммуникационные издержки соответствуют необходимости взаимодействия процессоров в ходе решения общей задачи. Дополнительные затраты времени на эти процессы не учитывались при выводе закономерности. Эти потребности коммуникации естественным способом снижают величину достижимого ускорения. Здесь важен уровень гранулярности параллелизма. Чем выше гранулярность, тем меньше времени будут требовать коммуникационные издержки. Закон Густафсона Применение закона Амдала на практике для оценивания достижимого ускорения при параллельных вычислениях иногда приводят к неожиданным результатам. Так, оценивая реальное ускорение по сравнению с однопроцессорным вариантом при решении на вычислительной системе из 1024 процессоров трех больших задач, имеющих долю последовательного кода f в пределах от 0,4 до 0,8%, исследователь Джон Густафсон из NASA Ames Research получил значения ускорения, равные соответственно 1021, 1020 и 1016. Однако, по закону Амдала для имеющегося числа процессоров и диапазона f, ускорение не должно было превысить величины порядка 201. Исследуя это явление, Густафсон обнаружил, что причина кроется в принятом допущении, использованном при выводе закона Амдала: объѐм решаемой задачи одинаков при решении задачи на однопроцессорной и многопроцессорной системах. В реальности пользователи, получая в своѐ распоряжение более мощное оборудование, стремятся не сократить время выполнения той же задачи, а увеличить еѐ сложность и, соответственно, объѐм, пропорционально увеличению производительности ВС. При таком подходе оказывается, что увеличение объѐма касается в основном распараллеливаемой части задач, т. е. к уменьшению значения величины f в решаемой задаче. Это, в частности, поясняется примером решения дифференциальных уравнений в частных производных. При решении этой задачи для 1000 узловых точек величина f составляет 10%. Увеличение количества узловых точек до 100000 приводит к снижению доли последовательного кода f до 0.1%, т. е. в 100 раз, что и приводит к возможности получения большего значения ускорения. В результате изучения данной проблемы Густафсон вывел формулу для оценки возможного ускорения вычислений при параллельных вычислениях, но 199 для иных по сравнению с законом Амдала исходных предпосылках. В качестве последних Густафсон выбрал одинаковое время работы сравниваемых вычислительных систем, но с соответствующим изменением объѐма вычислений. В этих условиях ускорение рекомендуется оценивать по формуле, предложенной Е. Барсисом (Е. Barsis): (13.13) Это выражение называют законом масштабируемого ускорения или законом Густафсона (иногда его называют законом Густафсона-Барсиса). Следует отметить, что последнее выражение вовсе не противоречит закону Амдала. Оно лишь учитывает различный подход к использованию увеличенной мощности ВС при увеличении количества процессоров. Закон Сана – Ная Ещѐ одну трактовку закономерностей параллельных вычислений предложили исследователи Ксиан-Х-Сан и Лайонел Най. Они обратили внимание на то, что многопроцессорная ВС обладает увеличенным объѐмом памяти. Причем, если каждый процессор обладает независимой локальной памятью объѐма М, то общая память n-процессорной ВС составляет Мn. При распараллеливании задач пользователи производят декомпозицию программного кода и данных. При этом объѐм локальной памяти становится ограничивающим фактором для сложности решаемых задач. Т. е. объѐм задачи может быть увеличен не более, чем до той степени, пока подзадача, определяемая каждому процессору, не займет всю локальную память процессора. Из этих соображений Сан и Най сформулировали закон, именующийся законом ускорения, ограниченного памятью. В формулировке условий вывода закона с ограничением, обусловленным доступной памятью, вводится предположение, что память каждого процессора задействуется полностью, а рабочая нагрузка на один процессор равна О(1), где О(1) = fO(1)+(1-f)O(1). Вводится ещѐ один параметр G(n), который означает, что при использовании всех n процессоров распараллеливаемая часть задачи может увеличиваться в G(n) раз. В этом случае рабочая нагрузка с учѐтом масштабирования может быть определена с помощью выражения O* = fO+(1-f)G(n)O. (13.14) Фактически параметр G(n) отражает возрастание рабочей нагрузки с увеличением числа процессоров, а значит, и емкости памяти в n раз. С учетом принятых условий получаем выражение для величины ускорения: 200 (13.15) . Полученное выражение интерпретируется как обобщение законов Амдала и Густафсона. При G(n) = 1 размер задачи фиксирован, объѐм задачи с увеличением числа процессоров не увеличивается, что характерно условиям вывода закона Амдала: (13.16) Значение параметра G(n) = n отражает случай, когда с увеличением емкости памяти в n раз рабочая нагрузка возрастает тоже в n раз. Это соответствует условиям вывода закона Густафсона: (13.17) При нахождении параметра G(n) в пределах от 1 до n закон Сана-Ная дает промежуточные значения оценки ускорения между значениями ускорения, рассчитанными по формулам законов Амдала и Густафсона. Но возможен и случай, когда вычислительная нагрузка возрастает быстрее, чем требования к памяти (G(n) > n). При этом условии Закон Сана-Ная показывает более оптимистичные значения оценки достижимого ускорения по сравнению с законом Густафсона. 201 14. АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ КЛАССА SIMD 14.1. Классификация ЭВМ и вычислительных систем по Флинну Самой ранней и наиболее известной считается классификация архитектур вычислительных систем (ВС), предложенная в 1966 году М. Флинном, одним из создателей семейства ВМ IBM System/360. В основу классификации положено понятие потока, причем рассматривается два потока - команд и данных, обрабатываемых процессором. Количество потоков команд и потоков данных разбито на две категории: один или много. По этому признаку классификации определено 4 класса архитектур: SISD, MISD, SIMD и MIMD. Класс SISD (single instruction stream/single data stream) характеризуется одиночным потоком команд и одиночным потоком данных (рис.14.1). К этому классу относятся все классические последовательные машины фон Неймановского типа. В таких ВМ используется только один поток команд, все команды обрабатываются последовательно, каждая команда инициирует одну операцию с одним потоком данных. Для увеличения скорости обработки команд и скорости выполнения арифметических операций может применяться конвейерная обработка. Поэтому этот класс объединяет также ВМ со скалярными и с конвейерными функциональными устройствами. Рис. 14.1. Архитектура класса SISD. УУ – устройство управления, ПР – процессор, ПД – память данных. Класс SIMD (single instruction stream/multiple data stream). К нему относятся ВМ с одиночным потоком команд и множественным потоком данных (рис.14.2). Данная архитектура, как и предыдущая, имеет один поток команд, но в состав команд включаются векторные команды. Они позволяют выполнять одну арифметическую операцию сразу над многими данными – элементами вектора. Причѐм векторные операции могут осуществляться либо с помощью процессорной матрицы, как в ILLIAC IV, либо с помощью конвейера, как, например, в машине CRAY-1. 202 Рис. 14.2. Архитектура класса SIMD. Класс MISD (multiple instruction stream/single data stream) должен объединять ВМ, характеризуемые множественным потоком команд и одиночным потоком данных (рис.14.3). Следовательно, данная архитектура обязана иметь в своѐм составе много процессоров, обрабатывающих один и тот же поток данных. Однако убедительных примеров реально существующих ВМ такого рода до некоторого времени не могли привести ни М.Флинн, ни другие специалисты в области архитектуры компьютеров. Ряд исследователей считают, что к данному классу относятся конвейерные ВМ. К данному классу, по-видимому, можно отнести многоядерные компьютеры. Рис. 14.3. Структура архитектуры класса MISD. Класс MIMD (multiple instruction stream/multiple data stream). Этот класс составляют ВС с множественным потоком команд и множественным потоком данных (рис.14.4). Каждая ВС данного класса обладает несколькими устройствами обработки команд, объединенных в единый комплекс и обрабатывающих каждое свои потоки команд и данных. Рис. 14.4. Структура архитектуры класса MIМD. 203 В классификации М. Флинна присутствуют два недостатка. Во-первых, некоторые заслуживающие внимания архитектуры, например, векторноконвейерные машины, четко не вписываются в данную классификацию. Вовторых, класс MIMD чрезвычайно заполнен. В нѐм объединены совершенно различные по числу процессоров, топологии связей между ними, по способу организации памяти и по технологии программирования вычислительные системы. Поэтому известны и другие варианты классификации вычислительных систем, использующие другие классифицирующие признаки, например, наличие или отсутствие в ВС общей памяти, доступной всем процессорам ВС. Но мы сейчас не будем затрагивать эти вопросы. Вы можете изучить их самостоятельно. ВС класса SIMD исторически были первыми состоящими из большого числа процессоров ВС. Данные ВС били лидерами и в производительности, достигнув и преодолев знаковый порог 1 Гфлоп/с (1 миллиард операций с плавающей точкой в секунду). Классификация Флинна объединяет в категории SIMD все ВС, осуществляющие параллельную однотипную обработку множества элементов данных. Похожесть SIMD-систем и классических фон Неймановских ВМ наблюдается в стадии управления вычислительным процессом: одно устройство управления обеспечивает последовательное выполнение команд программы. Однако стадия выполнения команд имеет существенное различие. В ВС класса SIMD одна общая команда управляет сразу множеством процессоров, каждый из которых обрабатывает свои данные. В современном понимании в класс SIMD-систем входят векторные, матричные, ассоциативные и систолические ВС. 14.2. Векторные и векторно-конвейерные вычислительные системы Среди огромного многообразия сложных вычислительных задач выделяют задачи моделирования реальных явлений, процессов и объектов, в которых существенную часть вычислений представляет обработка больших массивов данных, представленных в виде чисел с плавающей запятой. Эти массивы данных обычно представлены в виде матриц и векторов, а обработка данных осуществляется с применением матричных операций. Из математики известно, что большинство матричных операций представляет собой совокупность однотипных действий над парами элементов исходных матриц, причѐм осуществлять эти действия можно независимо и параллельно. Классическая архитектура ВМ осуществляет цикл выборки команды при выполнении каждой команды. При выполнении матричных операций достаточно было бы один раз произвести выборку команды, а затем выполнить еѐ мно204 гократно для однотипной обработки массива данных или выполнить сразу несколько таких операций на нескольких процессорах, каждый из которых обрабатывает свои данные массива. Это позволило бы существенно повысить быстродействие ВС. Средства, позволяющие выполнять одно действие сразу над многими элементами массивов, называют средствами векторной обработки. Понятие вектора и размещение данных в памяти Средства векторной обработки оперируют векторами - понимается одномерными массивами однотипных данных (обычно в форме с плавающей запятой), размещенных в памяти ВС. Многомерные массивы могут быть представлены в виде совокупностей массивов-векторов. Рассмотрим массив данных А, представляющий собой прямоугольную матрицу размерности 4x4. Хранение матрицы в памяти ВМ может быть организовано путем последовательного размещения элементов матрицы в ячейках с последовательными адресами в одном из двух порядков: строка за строкой или столбец за столбцом (рис. 14.5). Такое размещение многомерных массивов в памяти позволяет рассматривать их как совокупность векторов и применять вычислительные средства, ориентированные на обработку одномерных массивов данных (векторов). Особенности размещения массивов в памяти позволяют осуществлять обработку двумерного массива как по строкам, так и по столбцам. Это обеспечивается тем, что соответствующим образом изменяется адрес очередного выбираемого из памяти элемента матрицы. Рис. 14.5. Размещение прямоугольной матрицы данных в памяти ВМ. Например, если матрица расположена в памяти построчно, адреса последовательных элементов строки различаются на единицу, а для элементов 205 столбца шаг равен четырем. При размещении матрицы по столбцам единице будет равен шаг по столбцу, а шаг по строке – четырем. Для обозначения шага, с которым выбирают очередные элементы из памяти, применяют термин шаг по индексу. Важной характеристикой является длина вектора – количество составляющих его элементов. Понятие векторного процессора Векторный процессор – это специализированный процессор, архитектура которого предусматривает использование в качестве операндов некоторых команд упорядоченных массивов данных – векторов. Возможны два варианта реализации векторного процессора. Это либо дополнительный блок к универсальной вычислительной машине (системе), либо основа самостоятельной ВС. Архитектура средств векторной обработки использует два альтернативных подхода – векторно-параллельный и векторно-конвейерный. В векторнопараллельном процессоре одновременные операции над элементами векторов проводятся с помощью нескольких ФБ с плавающей запятой, каждый из которых отвечает за одну пару элементов (рис.14.6). В векторно-конвейерном варианте обработка элементов векторов производится одним конвейерным ФБ. Здесь операции над числами с плавающей запятой разбиваются на фазы, каждой фазе выделяется своя часть аппаратуры – ступень ФБ, в него загружается очередная пара элементов векторов-операндов, как только освободится первая ступень ФБ (рис.14.7). Рис. 14.6. Векторно-параллельная обработка. 206 Рис. 14.7. Векторно-конвейерная обработка. Возможен также вариант, когда в архитектуре векторного процессора имеется сразу несколько конвейерных ФБ, которые параллельно осуществляют операции над несколькими элементами векторов одновременно (рис.14.8). Коммерческие векторно-конвейерные ВС, в состав которых для обеспечения универсальности включен также скалярный процессор, известны как суперЭВМ. Наиболее распространенными в последнее время являются ВС с одним или несколькими векторно-конвейерными ФБ. Поэтому в дальнейшем будем рассматривать именно такую архитектуру. Рис. 14.8. Параллельная обработка векторов несколькими конвейерными ФБ. Архитектуры векторной обработки «память-память» и «регистррегистр» Важной отличительной особенностью архитектуры векторных процессо207 ров является способ доступа к операндам, поскольку векторы-операнды хранятся в памяти ВС и туда же помещается вектор-результат. Современные векторные ВС используют два варианта архитектуры по способу доступа к операндам: «память-память» и «регистр-регистр». В векторных процессорах с архитектурой «память-память» элементы векторов-операндов поочередно извлекаются непосредственно из памяти и сразу же направляются в ФБ. По мере обработки элементы результирующего вектора с выхода ФБ сразу же размещаются в памяти. В архитектуре «регистр-регистр» используются специальные векторные регистры как для хранения векторов-операндов, так и для хранения векторарезультата. Эти регистры представляют собой совокупность скалярных регистров, объединенных в очередь типа FIFO, способную хранить 50-100 чисел с ПЗ. (чаще всего – 64). Операция выполняется над векторами, размещенными в векторных регистрах операндов, а ее результат сначала заносится в векторный регистр результата, а уже потом переносится в память. Оба варианта архитектуры требуют обеспечить необходимую последовательность извлечения элементов из памяти и занесения элементов результата в память. Векторный процессор реализует эту задачу с помощью генератора адресов (рис.14.9). Рис. 14.9. Генератор адресов. На выходе генератора адресов формируется адрес очередного элемента вектора в памяти. Изначально на вход генератора подается базовый адрес – начальный адрес области памяти, хранящей элементы вектора. Очередной адрес вычисляется путем увеличения предыдущего адреса на величину шага по индексу. При этом последовательно считываются элементы вектора, находящиеся в одной строке или в одном столбце матрицы в зависимости от значения шага по индексу и способа размещения матрицы в памяти. 208 Для доступа к структурированным данным в памяти (массивам и векторам), в которых элементы с последовательно возрастающими индексами размещаются в ячейках с последовательно возрастающими адресами, память выгодно строить как блочную с расслоением (рис.14.10). В этом случае адреса ячеек чередуются по циклической схеме (следующий адрес – в следующем блоке памяти). Такой прием позволяет почти параллельно читать (записывать) элементы векторов в обеих архитектурах. Рис. 14.10. Организация памяти в векторной системе. Оба варианта архитектур векторных процессоров по способу доступа к операндам имеют свои достоинства и недостатки. Преимущество архитектуры «память-память» заключается в большей гибкости, она предоставляет возможность обработки длинных векторов, в то время как длинные векторы в архитектуре «регистр-регистр» приходится разбивать на сегменты фиксированной длины и обрабатывать по частям. Однако в архитектуре «память-память» гораздо длительнее время запуска, которое представляет собой временной интервал между инициализацией команды и моментом, когда первый результат появится на выходе конвейера. Это обусловлено существенно меньшей скоростью доступа к памяти, по сравнению со скоростью доступа к внутренним регистрам процессора. Однако, когда конвейер заполнен, результат формируется в каждом цикле, длительность которого определяется соотношением T=s+αN, (14.1) где s – время запуска, α – константа, зависящая от команды (обычно равная 0,5, 1 или 2) и N – длина вектора. Из-за длительного времени запуска, которое особенно негативно сказывалось при обработке векторов малой длины (до 64 элементов), в настоящее время архитектуру «память-память» практически не применяют. ВС с архитектурой «регистр-регистр» характеризуются значительно мень209 шим временем запуска по сравнению с архитектурой «память-память»; они особенно эффективны при обработке векторов с относительно небольшой длиной (до 64 элементов). Время цикла в современных векторных процессорах составляет порядка 2 – 2,5 нс. Структура векторного процессора На рис. 14.11 приведена упрощенная структурная схема векторного процессора без детализации некоторых связей между основными узлами процессора. В этой схеме обработка всех N компонентов векторов-операндов выполняется под управлением одной векторной команды, формируемой устройством управления векторными операциями. Элементы векторов, как правило, представляют собой числа в форме с плавающей запятой (ПЗ). Существует возможность реализовать операционное устройство векторного процессора в виде единого конвейеризированного функционального блока, способного выполнять все предусмотренные операции над числами с ПЗ. Однако, чаще всего операционное устройство содержит несколько отдельных ФБ специализированных для выполнения операций сложения и умножения, а также блока для вычисления обратной величины, если операция деления Х/Y реализуется в виде Х(1/Y). Каждый из этих ФБ также конвейеризирован. Рис. 14.11. Упрощенная структура векторного процессора. На схеме показан отдельно скалярный процессор, включаемый в состав векторной ВС для обеспечения универсальности. Это позволяет параллельно выполнять как векторные, так и скалярные команды. Архитектура представленного на схеме векторного процессора соответствует типу «регистр-регистр», поэтому в его составе имеется набор векторных регистров, которые представляют собой совокупность скалярных регистров, объединенных в очередь типа 210 FIFO. Эти регистры обеспечивают хранение векторов-операндов и векторарезультата. Загрузку в эти регистры из памяти векторов-операндов и сохранение в памяти вектора-результата обеспечивает блок управления чтением/записью векторов, в состав которого входит генератор адресов. Формирование векторных команд и управление работой векторного процессора осуществляет устройство управления векторными операциями. В системе команд векторного процессора обязательно должны иметься команды: загрузки векторного регистра содержимым обрабатываемых векторовоперандов, для которых указан адрес первой ячейки и шаг по индексу в соответствии с порядком размещения элементов вектора в памяти; выполнения операций над всеми элементами векторов, находящихся в векторных регистрах; сохранения содержимого векторного регистра в последовательности ячеек памяти, указанной адресом первой ячейки и значением шага по индексу. Устройство управления векторными операциями имеет в своем составе несколько специальных регистров: регистр длины вектора, регистр максимальной длины, регистр маски и регистр индексов. Регистр длины вектора определяет, сколько элементов фактически содержит обрабатываемый вектор, т. е. сколько индивидуальных операций с элементами вектора нужно сделать. Регистр максимальной длины вектора фиксирует максимальное число элементов вектора, которое может быть одновременно выполнено аппаратурой процессора. Этот регистр используется при разделении очень длинных векторов на сегменты, длина которых соответствует максимальному числу элементов, обрабатываемых аппаратурой за один прием. Регистр маски широко применяется для выполнения операций, когда не все элементы вектора должны участвовать в вычислениях. В этом регистре каждому элементу вектора соответствует один бит, устанавливаемый в 1, если элемент должен участвовать в выполнении операции, и сбрасываемый в 0 в противном случае. Регистр маски используется также в операциях уплотнения/развертывания (упаковки/распаковки), обеспечивающих экономию памяти путем хранения только ненулевых элементов векторов. Операция упаковки формирует вектор, содержащий только ненулевые элементы исходного вектора, а операция распаковки производит обратное преобразование. Суть уплотнения состоит в упаковке незамаскированных (ненулевых) элементов вектора из векторного регистра-источника и их размещения в регистре-приемнике. При развертывании производится обратное действие – распаковка (рис. 14.12). 211 Рис. 14.12. Операции уплотнения/развертывания. Регистр индексов используется при выполнении операций сбора/рассеяния, которые необходимо выполнять, если элементы вектора имеются в памяти не в виде регулярного массива, а расположены в произвольном порядке. В этом случае для формирования в векторном регистре вектора-операнда используется регистр индексов, i-й элемент которого содержит индекс того элемента исходного массива, который соответствует i-й позиции векторного регистра (рис. 14.13). Рис. 14.13. Операции сбора/рассеяния. Использование векторных команд способствует повышению быстродействия ВС благодаря двум особенностям. Во-первых, многократная выборка одних и тех же команд (как это происходит в универсальных ВМ) заменяется выборкой только одной векторной команды. Это позволяет сократить временные издержки в работе устройства управления и уменьшить требования к пропуск212 ной способности памяти. Во-вторых, векторная команда обеспечивает процессор упорядоченными данными. Когда инициируется векторная команда, ВС знает, что ей нужно извлечь N пар операндов, расположенных в памяти регулярным образом. Таким образом, процессор может заранее начать извлечение из памяти таких пар и их размещение в векторных регистрах. При использовании памяти с чередованием адресов, эти пары могут быть извлечены со скоростью одной пары за цикл процессора. Если чередования адресов или другие средства извлечения из памяти операндов с высокой скоростью не используются, то преимущества обработки векторов существенно снижаются. Возможности ускорения вычислений Повышение скорости обработки векторов достигается тем, что все функциональные блоки векторных процессоров строятся по конвейерной схеме, с обеспечением работы каждой ступени любого из конвейеров за один такт (число ступеней в разных функциональных блоках может быть различным). Некоторые векторные ВС, например, Cray C90, используют ещѐ один метод повышения быстродействия – дублирование конвейеров во всех ФБ (рис. 14.14). Рис. 14.14. Выполнение векторных операций при двух конвейерах. Конвейер 0 всегда используется для обработки элементов векторов с четными номерами, а конвейер 1 – с нечетными. В начальный момент на первую ступень конвейера 0 из векторных регистров-операндов поступают нулевые элементы векторов. Одновременно первые элементы векторов из этих регистров подаются на первую ступень конвейера 1. На следующем такте на конвейер 0 подаются вторые элементы векторов-операндов, а на конвейер 1 третьи элементы и т. д. Аналогично происходит распределение результатов в выходном векторном регистре. В результате функциональный блок при максимальной загрузке в каждом такте выдает не один результат, а два. При выполнении скалярных операций задействуется только конвейер 0. Некоторые векторные процессоры типа «регистр-регистр», например, ВС 213 фирмы Cray Research Inc., используют ещѐ одну возможность повышения быстродействия – так называемое зацепление векторов, когда векторные регистры результата одной векторной операции используется в качестве входного регистра для последующей векторной операции. Сущность метода зацепления векторов состоит в том, что исполнение очередной векторной команды начинается сразу, как только образуются компоненты участвующих в ней векторных операндов, не дожидаясь завершения вычисления вектора-результата в предыдущей векторной операции и занесения его в соответствующий векторный регистр, если этот вектор используется в качестве вектора-операнда для следующей операции. Тем самым образуются цепочки операций (рис. 14.15). С середины 90-х годов прошлого века векторные и векторно-конвейерные ВС стали уступать свои лидирующие позиции другим более технологичным видам вычислительных систем. Однако и в настоящее время находятся в эксплуатации представители рассмотренных ВС ввиду того, что векторные операции, на выполнение которых они ориентированы, остаются востребованными во многих видах расчетных и исследовательских задач. Рис. 14.15. Зацепление векторов. 14.3. Матричные вычислительные системы Матричные вычислительные системы, второй тип ВС – представителей класса SIMD по классификации Флинна, так же, как и векторные ВС предназначены для обработки больших массивов данных. Матричные системы основаны на применении так называемого матричного процессора, состоящего из регулярного массива процессорных элементов (ПЭ). Как и векторные ВС они имеют общее устройство управления, формирующее поток команд, единый для всех ПЭ, каждый из параллельно работающих процессорных элементов обрабатывает свой поток данных. Высокая эффективность матричных ВС может быть 214 обеспечена только при условии достаточной загрузки процессорных элементов работой, для чего организуется разветвлѐнная система связей между ПЭ. Команды векторных ВС являются более удобной и понятной для пользователей моделью вычислений, чем матричные вычисления, на которые ориентированы матричные ВС. Кстати матричные ВС с успехом могут быть применены и для векторных вычислений. Множество ПЭ, объединѐнных в матричной ВС могут быть выполнены на одном или на нескольких кристаллах, главное, что все ПЭ функционируют под управлением единого потока команд с единой синхронизацией. Упрощенно структура матричной вычислительной системы представлена на рис. 14.16. Параллельная обработка множественных элементов данных в матричной ВС осуществляется массивом процессорных элементов (МПЭ). Единый поток команд, управляющий обработкой данных в МПЭ, генерируется контроллером массива процессорных элементов (КМП). КМП выполняет последовательный программный код, реализует операции условного и безусловного переходов, транслирует в МПЭ команды, данные и сигналы управления. Рис. 14.16. Обобщенная модель матричной SIMD-системы. Функционирование процессорных элементов жестко синхронизируется, для чего используются сигналы управления. Последние также управляют пересылками данных и выполнением процесса вычислений в целом. Например, сигналы управления определяют, какие ПЭ массива должны выполнять текущую операцию, а какие – нет. Команды, данные и сигналы управления передаются из КМП в массив процессорных элементов по шине широковещательной рассылки. Результаты обработки данных в МПЭ передаются в КМП по шине результата и используются, в частности, для выполнения операций условного перехода. Для разработки и отладки программ матричной ВС, а также для начальной 215 загрузки в КМП программ и обрабатываемых данных в состав матричных ВС обычно включают фронтальную ВМ. В качестве последней обычно используют универсальную вычислительную машину. Загрузка программ и данных в КМП может производиться также и непосредственно из устройств ввода/вывода, например, с магнитных дисков. После загрузки КМП выполняет загруженную программу, передавая в МПЭ по широковещательной шине соответствующие SIMD-команды, сигналы управления и данные. Фактически массив ПЭ, должен обеспечивать хранение множественных наборов данных и взаимодействие между ПЭ. Поэтому в МПЭ, кроме собственно множества процессорных элементов, должны присутствовать множество модулей памяти, а также сеть взаимосвязей, как между ПЭ, так и между процессорными элементами и модулями памяти. Таким образом, термин «массив процессорных элементов» означает блок, состоящий из самих процессорных элементов, модулей памяти и сети соединений. Дополнительную управляемость рассматриваемой системы обеспечивает механизм маскирования, позволяющий исключать из вычислительного процесса при выполнении конкретных операций произвольное подмножество ПЭ массива. Маскирование реализуется как на стадии компиляции, так и на этапе выполнения программ. ПЭ, исключенные путем установки в ноль соответствующих битов маски, во время выполнения соответствующей команды простаивают. Фронтальная (интерфейсная) ВМ Фронтальная ВМ (ФВМ) соединяет матричную SIMD-систему с внешним миром, используя для этого какой-либо из сетевых интерфейсов, например, Ethernet. Фронтальная ВМ чаще всего работает под управлением UNIXподобной операционной системы. На ФВМ пользователи разрабатывают, компилируют и отлаживают свои программы. Готовые к выполнению программы сначала загружаются из фронтальной ВМ в контроллер массива процессорных элементов, который выполняет последовательную часть программы и распределяет данные по процессорным элементам массива. В некоторых ВС в компиляции и отладке программ КМП и фронтальная ВМ используются совместно. Контроллер массива процессорных элементов Контроллер массива процессорных элементов выполняет последовательный программный код, реализует команды ветвления программы, транслирует команды и сигналы управления в процессорные элементы. Рис. 14.17 иллюстрирует одну из возможных реализаций КМП, в частности принятую в устройстве управления системы PASM. 216 При загрузке из ФВМ программа через интерфейс ввода/вывода заносится в оперативное запоминающее устройство КМП (ОЗУ КМП). Команды для процессорных элементов и глобальная маска, формируемая на этапе компиляции, также через интерфейс ввода/вывода загружаются в ОЗУ команд и глобальной маски (ОЗУ КГМ). Затем КМП начинает выполнять программу, извлекая либо одну скалярную команду из ОЗУ КМП, либо множественные команды из ОЗУ КГМ. Рис. 14.17. Модель контроллера МПЭ. Скалярные команды – команды, осуществляющие операции над хранящимися в КМП скалярными данными, выполняются центральным процессором (ЦП) контроллера. В свою очередь, команды, оперирующие параллельными переменными, хранящимися в каждом ПЭ, преобразуются в блоке выборки команд в более простые единицы выполнения – нанокоманды. Нанокоманды совместно с маской пересылаются через шину команд для ПЭ на исполнение в МПЭ. Например, команда сложения 32-разрядных слов в КМП системы МРР преобразуется в 32 нанокоманды одноразрядного сложения, которые каждым ПЭ обрабатываются последовательно. В большинстве алгоритмов дальнейший порядок вычислений зависит от результатов и/или флагов предшествующих операций. Для обеспечения такого режима в матричных системах статусная информация, хранящаяся в процессорных элементах, должна быть собрана в единое слово и передана в КМП для выработки решения о ветвлении программы. Например, в предложении IF ALL (условие A) THEN DO В оператор В будет выполнен, если условие А справедливо во всех ПЭ. Для корректного включения/отключения процессорных элементов КМП должен знать результат проверки условия А во всех ПЭ. Такая информация передается в КМП по однонаправленной шине результата. В системе СМ-2 эта шина названа GLOBAL. В системе МРР для той же цели организована структура, называемая деревом SUM-OR. Каждый ПЭ помещает содержимое своего одноразрядного регистра признака на входы дерева, которое с 217 помощью операции логического сложения комбинирует эту информацию и формирует слово результата, используемое в КМП для принятия решения. Массив процессорных элементов В матричных вычислительных системах класса SIMD получили распространение два основных типа архитектурной организации массива процессорных элементов (рис. 14.18): «процессорный элемент-процессорный элемент» и «процессорный элемент-память». Для первого варианта характерно объединение N процессорных элементов (ПЭ) коммуникационной сетью (рис. 14.18, а). Причѐм каждый ПЭ представляет собой процессор со своей локальной памятью. Процессорные элементы выполняют команды, получаемые из КМП по шине широковещательной рассылки, и обрабатывают данные как хранящиеся в их локальной памяти, так и поступающие из КМП. Обмен данными между процессорными элементами производится по коммуникационной сети, в то время как шина ввода-вывода служит для обмена информацией между ПЭ и устройствами ввода-вывода. Рис. 14.18. Модели массивов процессоров: а – «процессорный элемент-процессорный элемент»; б – «процессор-память». 218 Для передачи результатов из отдельных ПЭ в контроллер массива процессорных элементов служит шина результата. Наличие у каждого ПЭ локальной памяти позволяет весьма эффективно реализовать аппаратные средства ВС рассматриваемого типа. Во многих алгоритмах действия по пересылке информации по большей части локальны, т. е. происходят между ближайшими соседними ПЭ. По этой причине очень популярной является архитектура, где каждый ПЭ связан только с соседними. Второй вид архитектуры «процессор-память» показан на рис. 14.18, б. Здесь двунаправленная сеть соединений связывает N процессоров с М модулями памяти (в общем случае N не равно М). Процессоры управляются КМП через широковещательную шину. Обмен данными между процессорами осуществляется как через сеть, так и через модули памяти. Пересылка данных между модулями памяти и устройствами ввода-вывода обеспечивается шиной ввода-вывода. Передача данных из каждого модуля памяти в КМП осуществляется через шину результата. Структура процессорного элемента Большинство матричных SIMD-систем используют в качестве процессорных элементов простые RISC-процессоры с локальной памятью ограниченной емкости. Например, каждый ПЭ системы MasMap MP-1 состоит из четырехразрядного процессора с памятью емкостью 64 Кбайт. В системе MPP используются одноразрядные процессоры с памятью 1 Кбит каждый, а в СМ-2 процессорный элемент представляет собой одноразрядный процессор с 64 Кбит локальной памяти. Простота ПЭ обусловливает возможность реализации МПЭ в виде одной сверхбольшой интегральной микросхемы (СБИС). Это позволяет сократить число связей между микросхемами и, следовательно, снизить габариты ВС одновременно с повышением еѐ надѐжности. Так, одна СБИС в системе СМ-2 содержит 16 процессоров (без блоков памяти), а в системе MasMap MP-1 СБИС состоит из 32 процессоров (так же без блоков памяти). Каждый ПЭ в большинстве матричных вычислительных систем содержит обязательные элементы (рис.14.19): арифметико-логическое устройство (АЛУ); регистры данных; сетевой интерфейс (СИ), который может включать в свой состав регистры пересылки данных; номер (или адрес) процессора; регистр флага разрешения маскирования (F); локальная память. 219 Рис. 14.19. Модель процессорного элемента. Процессорные элементы, в соответствии с командами, поступающими из КМП по широковещательной шине, могут выбирать данные из своей локальной памяти и регистров, обрабатывать их в АЛУ и сохранять результаты в регистрах и локальной памяти. ПЭ могут также обрабатывать данные, поступающие по шине широковещательной рассылки из КМП. Каждый ПЭ имеет также возможность обрабатывать данные, получаемые от других ПЭ, передавать данные в другие ПЭ. Для этого используются свой сетевой интерфейс и коммуникационная сеть массива ПЭ. Коммуникация процессорных элементов между собой может осуществляться непосредственно или через специальные регистры пересылки данных, имеющиеся в составе сетевого интерфейса. Коммуникация ПЭ с устройствами ввода-вывода осуществляется через шину ввода-вывода, возможно с использованием системного канала ввода-вывода. Шина результата используется ПЭ для коммуникации с КМП. Каждый из N ПЭ в массиве процессоров идентифицируется своим номером или адресом ПЭ. Для указания необходимости участия ПЭ в выполнении общей матричной операции введѐн регистр флага разрешения F. Он устанавливается в определѐнное состояние по сигналам управления от КМП или по результатам выполнения операций в самом ПЭ. Работа всех ПЭ массива жестко синхронизируется, особенно при выполнении операций пересылки данных между ПЭ. В тех системах, где коммуникации ограничены только соседними четырьмя ПЭ передача осуществляется режиме «регистр-регистр». 220 Подключение и отключение процессорных элементов Не все процессорные элементы должны участвовать в вычислениях операций в матричной ВС. В то время, когда одни ПЭ выполняют транслируемую из КМП операцию другие ПЭ простаивают. Регулирование участия процессора в вычислениях осуществляется механизмом маскирования. Имеется два варианта маскирования: глобальное и определяемое данными. Глобальное маскирование осуществляется с помощью сигналов управления КМП. Такое маскирование реализуется на этапе компиляции программы. Маскирование, определяемое данными, осуществляется в ходе выполнения программного кода, при этом учитывается хранящийся в ПЭ флаг разрешения маскирования F. В составе системы команд имеются наборы маскируемых и немаскируемых команд. Маскируемые команды выполняются в зависимости от состояния флага F, в то время как немаскируемые флаг просто игнорируют. Процедуру маскирования рассмотрим на примере предложения IF-THENELSE. Пусть х – локальная переменная (хранящаяся в локальной памяти каждого ПЭ). Предположим, что процессорные элементы массива параллельно выполняют условную операцию IF (х > 0) THEN <оператор А> ELSE <оператор B> и каждый ПЭ оценивает условие IF. Те ПЭ, для которых условие х > 0 истинно, установят свой флаг F в единицу, тогда как остальные ПЭ – в ноль. Далее КМП транслирует оператор А всем ПЭ. Команды, реализующие этот оператор, должны быть маскируемыми. Оператор А будет выполнен только теми ПЭ, у которых флаг F установлен в единицу. Далее КМП передает во все ПЭ немаскируемую команду ELSE, которая заставит все ПЭ инвертировать состояние своего флага F. Затем КМП транслирует во все ПЭ оператор В, который также должен состоять из маскируемых команд. Оператор будет выполнен теми ПЭ, где флаг F после инвертирования был установлен в единицу, т. е. теми ПЭ, которые не выполняли оператор В. При использовании схемы глобального маскирования контроллер массива процессоров вместе с командами посылает во все ПЭ глобальную маску. Каждый ПЭ декодирует эту маску и по результату выясняет, должен ли он выполнять данную команду или нет. Способы кодирования маски могут быть разными, например, в зависимости от количества ПЭ в массиве ПЭ. В любом случае они должны обеспечивать установку разрешения или запрета выполнения вычислений определенным подмножествам ПЭ в каждой матричной операции. Эти подмножества, как правило, расположены в МПЭ некоторым регулярным образом. 221 Глобальные и локальные схемы маскирования могут комбинироваться. В этом случае активность ПЭ в равной мере определяется как флагом F, так и глобальной маской. Сети взаимосвязей процессорных элементов Эффективность функционирования всей матричной ВС в существенной степени зависит от качества коммуникационной сети между ПЭ. Реальные системы имеют самые разнообразные топологии сетей и применяют различные средства для улучшения коммуникаций. Синхронность функционирования процессорных элементов обусловливает необходимость синхронизировать и пересылки данных. Так же важно обеспечить возможность неискаженной передачи данных от нескольких ПЭисточников одному ПЭ-приѐмнику данных. Для этого применяются, например, схемы объединения сообщений, поступающих к одному ПЭ. Поскольку процессорные элементы в матричных системах функционируют синхронно, обмениваться информацией они также должны по согласованной схеме, причем необходимо обеспечить возможность синхронной передачи от нескольких ПЭ-источников к одному ПЭ-приемнику. Когда для передачи информации в сетевом интерфейсе задействуется только один регистр пересылки данных, это может привести к потере данных, поэтому в ряде ВС для предотвращения подобной ситуации предусмотрены специальные механизмы. Так, в системе СМ-2 используется оборудование, объединяющее сообщения, поступившие к одному ПЭ, с применением операций логического или арифметического сложения, наложения записей, записи сообщений в разные ячейки локальной памяти ПЭ. Пересылки могут инициироваться только активными (незамаскированными) ПЭ. Но пассивные ПЭ могут участвовать в операциях пересылки, например, данные могут читаться из локальной памяти пассивного ПЭ или записываться в эту память. В матричных системах наибольшее распространение получили решетчатые и гиперкубические топологии. Ввод/вывод Устройства ввода-вывода могут использоваться для начальной загрузки программы вычислений матричной ВС. В этом случае внешние запоминающие устройства могут быть подключены к массиву ПЭ или к КМП с помощью каналов ввода-вывода или посредством специальных процессоров ввода-вывода. 14.4. Ассоциативные вычислительные системы Третьей разновидностью ВС класса SIMD являются так называемые ассо222 циативные вычислительные системы. Эти ВС используют ассоциативное запоминающее устройство (АЗУ), а точнее – ассоциативный процессор (АП), построенный на основе АЗУ. При изучении памяти мы отмечали, что ассоциативная память представляет собой ЗУ, в котором выборка информации осуществляется не по адресу операнда, а по отличительным признакам содержащейся в операнде информации. Запись в традиционное ассоциативное ЗУ также производится не по адресу, а в одну из незанятых ячеек. Ассоциативный процессор в дополнение к ассоциативной памяти, в составе своей архитектуры имеет средства обработки данных и средства, обеспечивающие возможность осуществлять параллельную запись во все ячейки, для которых было зафиксировано совпадение с ассоциативным признаком. Поэтому говорят, что АП обладает свойством мулътизаписи. На рис.14.20 приведена обобщѐнная структурная схема, поясняющая принцип функционирования ассоциативного процессора. Рис. 14.20. Иллюстрация концепции ассоциативного процессора. Запоминающий массив (ЗМ) ассоциативного процессора состоит из n ячеек ассоциативной памяти. Каждая ячейка содержит m+r разрядов и состоит из двух полей: поля данных Д (m-разрядов) и поля признака-тега (r-разрядов) Т. Тег позволяет отличить данную ячейку ЗМ от множества других ячеек. Допустим, что в ЗМ хранится вектор А. В этом случае теги тех ячеек, в которых расположены элементы этого вектора, в какой-то своей части будут идентичными, что обозначает принадлежность содержимого ячейки вектору А. Остальные разряды тега могут содержать, например, номер элемента вектора. Такое содержание информации в теге позволяет, например, сразу выделить все компоненты вектора или выделить только определенный элемент этого вектора. Поиск по содержимому происходит путѐм занесения в регистр признака РгП ассоциативного признака читаемого или записываемого слова. Выходы ре223 гистра признака поразрядно соединены с одними входами схем сравнения СхСрi, вторые входы которых соединены с теговой частью запоминающего массива Тi. Если значения ассоциативного признака совпадают с теговой частью i-й ячейки, вырабатывается сигнал ci. Этот сигнал идентифицирует ячейку, для которой имело место совпадение, и разрешает действия с ней соответствующего процессорного элемента ПЭi. Под управлением команды, поступающей из процессора управления, все процессорные элементы, которые соответствуют выбранным в ходе поиска ячейкам ассоциативной памяти, осуществляют выборку данных из поля Д ячейки, выполняют действие, содержащееся в команде, и записывают результат в эту же ячейку ассоциативной памяти. В системе команд ассоциативного процессора имеются арифметические и логические операции. Высокое быстродействие ассоциативного процессора достигается за счѐт параллельного осуществления поиска по всем ячейкам ассоциативной памяти и параллельной же обработки выбранных в результате поиска ячеек с занесением результата в найденные ячейки. На схеме рис. 14.20 не показаны связи между ПЭ, позволяющие им взаимно обмениваться операндами и результатами. Ассоциативные процессоры могут быть реализованы с применением разных архитектурных решений: параллельные; поразрядно-последовательные; пословно-последовательные; блочно-ориентированные. Последние два варианта ориентированы, в основном, на реализацию специфичных задач информационного поиска. Поэтому более подробно рассмотрим параллельные и поразрядно-последовательные ассоциативные процессоры, широко используемые в универсальных ассоциативных ВС. Параллельные ассоциативные процессоры Упрощенная структура параллельного ассоциативного процессора представлена на рис. 14.21. Основой параллельного ассоциативного процессора являются n многоразрядных процессорных элементов, каждый из которых работает со своим модулем ассоциативной памяти. Связь модулей памяти со своим ПЭ осуществляется по коммутирующим цепям К1 и К2. Первая из них выполняет подачу на входы ПЭ данных из модуля памяти, по второй из них результаты обработки заносятся в модуль памяти. 224 Рис. 14.21. Упрощенная структура параллельного ассоциативного процессора. Помимо этих коммуникационных связей предусмотрена возможность обмена информацией между модулями ассоциативной памяти и основной памятью. Причем по этим связям осуществляется обычный адресный способ обращения. Процессорные элементы выполняют одну и ту же команду, выдаваемую из процессора управления и способны выполнять арифметические, логические и некоторые другие команды. Параллельные АП по сравнению с другими имеют наиболее высокое быстродействие. Но это преимущество достигается за счет больших аппаратных затрат. Поразрядно-последовательные ассоциативные процессоры Такой вид архитектуры ассоциативных процессоров является в настоящее время наиболее распространенным и использует ассоциативный запоминающий массив в виде матрицы n*n одноразрядных запоминающих элементов (ЗЭ). Вычислительными элементами в данном процессоре выступают 1-битовые процессорные элементы, упорядоченные в массив. Эти элементы имеют доступ к массиву ЗЭ двумя способами (срезами) – либо ко всем разрядам одного слова массива (рис.14.22, а), либо к одному и тому же разряду всех слов массива ЗЭ (рис.14.22, б). Каждый разряд среза поступает на свой ПЭ, осуществляющий необходимую обработку (арифметическую и логическую). Параллельное функционирование всех ПЭ осуществляет выполнение единой команды всеми ПЭ массива. АП способен выполнять одновременную обработку m разрядов среза, причѐм значение m ≤ n задается программистом. Ненужные для обработки разряды могут маскироваться. 225 Рис. 14.22. Обработка среза ассоциативной памяти: а – все разряды одного слова; б – один разряд всех слов. Каждый однобитовый процессорный элемент поразряднопоследовательного ассоциативного процессора имеет структуру, упрощенное представление которой приведено на рис.14.23. Рис. 14.23. Структура ПЭ поразрядно-последовательного ассоциативного процессора. Операционный блок процессорного элемента - это одноразрядное АЛУ с цепью переноса Р из младшего разряда в старший, способное выполнять арифметические, логические, поисковые и системные операции. Регистр предназначен для временного хранения промежуточных результатов S. Коммутирующая схема обеспечивает ассоциативный доступ к разрядам среза, выборку и запоминание результатов обработки, а также передачу команд из процессора управления. Для блокирования ПЭ применяется триггер маски. Ассоциативные многопроцессорные системы На основе отдельных ассоциативных процессоров создают ассоциативные ВС. Упрощенная структурная схема такой ВС приведена на рис. 14.24. Кроме совокупности ассоциативных процессоров в схему входят процессор управления, процессор ввода-вывода и основная память. 226 Рис. 14.24. Упрощенная структура ассоциативной ВС. Фактически ассоциативная вычислительная система является параллельной ВС, обеспечивающей выполнение последовательно выполняемой программы с помощью параллельно работающих ассоциативных процессоров, каждый их которых обрабатывает свои данные. Выполняемая АВС программа хранится в основной памяти ВС. Процессор управления, декодируя очередную команду программы, определяет необходимость еѐ обработки ассоциативными процессорами. Если команда предусматривает ассоциативную обработку, то она передаѐтся в массив ассоциативных процессоров, который осуществляет поиск в ассоциативной памяти необходимых данных и осуществляет соответствующую обработку теми из процессоров, для которых такая информация имеется в ассоциативной памяти. Кроме управления ассоциативными процессорами процессор управления осуществляет загрузку ассоциативной памяти из основной памяти, считывание результатов ассоциативной обработки и выполняет множество других функций, которые в матричных процессорах выполняет фронтальная ЭВМ. Процессор вводавывода в составе ассоциативной ВС отвечает за связь с внешними устройствами ввода-вывода. 14.5. Вычислительные системы с систолической структурой Четвертой разновидностью ВС типа SIMD являются систолические ВС. Эти вычислительные системы используют предпосылку повышения производительности, заключающуюся в уменьшении потока обмена данными между процессором и памятью. Если в классической фон Неймановской ВМ данные, выбранные из памяти, снова возвращаются в память сразу после однократной обработки их в процессорном элементе (рис. 14.25,а), то в систолической ВС вычисления организуются таким образом, чтобы данные, считанные из памяти, возвращались в память только после выполнения над ними целой цепочки вычислений на нескольких процессорных элементах (рис. 14.25,б). В результате существенно снижается трафик между процессором и памятью, что положительно сказывается на производительности ВС. 227 Рис. 14.25. Обработка данных в ВС: а – фон-неймановского типа; б – систолической структуры. Своѐ наименование систолические ВС получили из-за сравнения с деятельностью сердца в человеческом организме. Действительно, сравнивая роль частей ВС с органами живого организма, можно представить себе, что память выполняет роль сердца, множество процессорных элементов – роль тканей организма, а поток данных – роль крови, циркулирующей в организме. Поскольку систола означает сокращение предсердий и желудочков сердца, при котором кровь нагнетается в артерии, то и в случае систолической матрицы память, выпуская данные для обработки, не получает их обратно, пока они не пройдут через все «ткани» (процессорные элементы) вычислительной системы. Высокую эффективность такие ВС показывают при обработке сигналов, производстве матричных вычислений, сортировке данных и при решении других задач. Пояснение принципа функционирования систолической ВС можно провести на примере вычислений умножения матриц (рис. 14.26). Рис. 14.26. Процесс векторного умножения матриц. На данной схеме изображена линейка из семи процессорных элементов, изображенных в последовательные моменты времени, соответствующие окончанию последовательных операций. В основе работы показанного систолического массива лежит ритмическое прохождение двух потоков данных xi и уi, навстречу друг другу. В каждом потоке соседние элементы следуют друг за 228 другом через один тактовый период. Это необходимо, чтобы обеспечить взаимодействие каждой пары встречных потоков. Последовательные элементы каждого потока разделены одним тактовым периодом, чтобы любой из них мог встретиться с любым элементом встречного потока. При отсутствии такого разрежения потоков элемент xi никогда бы не встретился с элементами уi+1 уi+3 и т.д. Каждый из процессорных элементов выполняет за один такт один шаг в вычислении скалярного произведения (IPS, Inner Product Step) и носит название IPS-элемента (рис. 14.27). Рис. 14.27. Функциональная схема IPS-элемента. Вычисляемая функция увых каждого процессорного элемента соответствует сумме входного значения yвх со значением произведения xвх на aвх. Значения второго потока транслируются через процессорный элемент без изменения xвых = xвх, чтобы обеспечить последующие вычисления. Рассмотрение данного примера позволяет сделать вывод, что систолическая структура представляет собой однородную вычислительную среду из процессорных элементов, которая совмещает в себе свойства конвейерной и матричной обработки и обладает следующими свойствами [6]: вычислительный процесс в систолических структурах представляет собой непрерывную и регулярную передачу данных от одного ПЭ к другому без запоминания промежуточных результатов вычисления; каждый элемент входных данных выбирается из памяти однократно и используется столько раз, сколько необходимо по алгоритму, ввод данных осуществляется в крайние ПЭ матрицы; образующие систолическую структуру ПЭ однотипны и каждый из них может быть менее универсальным, чем процессоры обычных многопроцессорных систем; потоки данных и управляющих сигналов обладают регулярностью, что позволяет объединять ПЭ локальными связями минимальной длины; алгоритмы функционирования позволяют совместить параллелизм с конвейерной обработкой данных; производительность матрицы можно улучшить за счет добавления в нее определенного числа ПЭ, причем коэффициент повышения производи229 тельности при этом линеен. Производительность систолических процессоров зависит от многих факторов и достигает величин более 1000 млрд.операций/с (1 ТФлоп/с). Классификация систолических структур Систолические ВС в настоящее время очень разнообразны и могут быть классифицированы по различным признакам. По степени гибкости систолические структуры подразделяются на: специализированные; алгоритмически ориентированные; программируемые. Специализированные структуры специально разрабатываются для реализации жѐстко заданного алгоритма. Структура содержит не только заданное количество ПЭ, определѐнную геометрию построения систолического массива, неизменности связей между ПЭ, но и четкое определение типа операции, выполняемой всеми ПЭ. В качестве примеров специализированных структур можно назвать систолические ВС выполнения быстрого преобразования Фурье и рекурсивной фильтрации с заданным количеством точек и конкретные матричные преобразования. Более гибкими являются алгоритмически ориентированные структуры. В них предусматривается возможность программирования конфигурации связей в систолической матрице или самих процессорных элементов. Такая возможность позволяет реализовывать на таких структурах некоторое множество алгоритмов, ориентированных на выполнение однотипных операций над векторами, матрицами и другими числовыми множествами. Самыми многофункциональными являются программируемые систолические структуры. Возможность программирования как самих ПЭ, так и конфигурации связей между ними широко расширяют границы применения таких структур. Сами ПЭ в этих структурах могут обладать локальной памятью программ, и в них допускается выполнение различных операций из некоторого набора. Причем могут применяться и такие команды, хранящиеся в памяти программ таких ПЭ, которые могут изменять и направление передачи операндов. Следующим признаком классификации систолических структур рассмотрим разрядность процессорных элементов. По этому признаку различают одноразрядные структуры (каждый ПЭ выполняет операции над одним двоичным разрядом) и многоразрядные, выполняющие операции над словами фиксированной длины По классификационному признаку «характер локально230 пространственных связей» различают систолические структуры: одномерные – для обработки векторов; двухмерные – для обработки матриц; трехмерные – для обработки множеств более сложных типов. Топология систолических структур Топология связей в систолических структурах является одним из важнейших признаков систолических ВС. В настоящее время разработаны и практически применяются систолические матрицы линейные, квадратные, гексагональные, трехмерные и с другими типами геометрии связей. Примеры топологии систолических матриц приведены на рис. 14.28. Рис. 14.28. Конфигурация систолических матриц: а – линейная; б – прямоугольная; в – гексагональная; г – трехмерная. Каждая конфигурация матрицы наиболее приспособлена для выполнения конкретных типов вычислений. Например, для реализации фильтров в реальном масштабе времени хорошо подходит линейная матрица; для выполнения операций обращения матриц – гексагональная структура; для нахождения значений нелинейных дифференциальных уравнений в частных производных или для обработки сигналов антенной решетки – трехмерная конфигурация. Однако, наиболее распространенными считаются матрицы с линейной структурой, поскольку они являются наиболее универсальными. 231 15. АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ КЛАССА MIMD Исторически первыми стали разрабатываться и создаваться вычислительные системы, соответствующие классу SIMD классификации Флинна. Это явилось причиной того, что эти системы поначалу и были самыми производительными в мире и что данные системы широко распространены. С течением времени всѐ большим интересом стали пользоваться архитектуры класса MIMD. Это объясняется, в частности, тем, что они являются более гибкими, имеют меньше ограничений по количеству процессоров в системе, могут выполнять как функции однопользовательских высокопроизводительных систем, так и многопользовательских, многопроцессных ВС, параллельно выполняющих множество задач. Архитектуры класса MIMD позволяют наиболее эффективно использовать все ресурсы современных микропроцессорных технологий. Свидетельством этого является тот факт, что последние несколько лет все самые высокопроизводительные ВС мира, отобранные в список top500, относятся к классу MIMD-систем. В настоящее время имеется большое разнообразие различных архитектур, относящихся по классификации Флинна к одному и тому же классу MIMD. Это составляет основной недостаток данной классификации. Для более целенаправленного изучения, разработки и применения вычислительных систем, характеризующихся множественным потоком команд и множественным потоком данных, целесообразно применить другие классификационные признаки. Одним из таких классификационных признаков является способы взаимодействия процессоров (или вычислительных машин) друг с другом в ходе решения задач. По этому признаку все ВС класса MIMD можно разделить на два класса: ВС с общей (разделяемой) памятью и ВС с распределѐнной памятью. MIMD-системы с общей памятью имеют общую память для всех процессоров системы. Такие ВС называют сильно связанными, они позволяют эффективно решать задачи с относительно высоким взаимодействием между собой в процессе выполнения. Тесное взаимодействие в данном случае может быть организовано с применением всех рассмотренных ранее способов синхронизации и взаимодействия процессов, например, с помощью блокирующих переменных, семафоров и мониторов. Такое тесное взаимодействие организуется на основе общей памяти данных и команд, доступной каждому процессору вычислительной системы с помощью общей шины или сети соединений. Основными представителями MIMD-систем с общей памятью являются симметричные мульти232 процессоры (SMP, Symmetric Multiprocessor) и вычислительные системы с неоднородным доступом к памяти (NUMA, Non-Uniform Memory Access). Другую часть MIMD-систем составляют так называемые системы с распределѐнной памятью, именуемые также слабо связанными системами. Такие ВС имеют память, полностью составленную из совокупности локальной памяти каждого процессора (вычислительной машины) системы. Причѐм локальная память доступна только своему процессору (ВМ) и является недоступной для других процессоров (машин) системы. Внутри системы имеется коммуникационная сеть, связывающая процессоры между собой. Такие системы более эффективны для решения слабо взаимосвязанных или вообще несвязанных между собой задач, т. е. реализующих крупнозернистый параллелизм. Наиболее яркими представителями такой группы архитектур являются системы с массовым параллелизмом и кластерные вычислительные системы. В качестве базовой модели вычислений на MIMD-системе рассматривают совокупность независимых процессов, время от времени обращающихся к совместно используемым данным. Известно множество вариантов такой модели. Один крайний случай такой модели составляют распределенные вычисления, при которых процесс делится на относительно большое число параллельных задач, состоящих из множества подпрограмм. Другой крайний случай – модель потоковых вычислений, когда каждая операция в программе может рассматриваться как отдельный процесс. Такая операция ожидает поступления входных данных (операндов), которые должны быть переданы ей другими процессами. По их получении операция выполняется, и результирующее значение передается тем процессам, которые в нем нуждаются. Для углублѐнной классификации вычислительных систем, относящихся по классификации Флинна к MIMD-системам, исследователь Роджер Хокни разработал свой подход к классификации. Этот подход классификации архитектур внутри этого класса представлен в виде иерархической структуры, изображенной на рис. 15.1. Сущность основной идеи классификации по Р. Хокни состоит в следующем. Обработка множественного потока команд может быть реализована двумя способами: либо одним конвейерным устройством обработки, работающем в режиме разделения времени для отдельных потоков, либо каждый поток обрабатывается своим собственным устройством. Первая возможность используется в MIMD-системах, получивших название конвейерных. 233 Рис. 15.1. Иерархическая структура архитектур класса MIMD. Архитектуры, обрабатывающие каждый поток своим устройством, в свою очередь, разделяются на два класса. В первый класс попадают MIMD-системы, в которых возможна прямая связь каждого процессора с каждым, реализуемая с помощью переключателя. Во втором классе находятся MIMD-системы, в которых прямая связь каждого процессора доступна только с ближайшими соседями по сети, а взаимодействие удаленных процессоров реализуется с помощью специальной системы маршрутизации. Среди MIMD-машин с переключателем Р. Хокни выделяет те, в которых вся память распределена среди процессов как их локальная память (например, PASM, PRINGLE, IBM SP2 без SMP-узлов). В этом случае общение самих процессоров реализуется с помощью сложного переключателя, составляющего значительную часть компьютера. Такие машины носят название MIMD-машин с распределенной памятью. Если память – разделяемый ресурс, доступный всем процессорам через переключатель, то MIMD-машины являются системами с общей памятью (BBN Butterfly, Cray C90). В соответствии с типом переключателей можно проводить классификацию и далее: простой переключатель, многокаскадный переключатель, общая шина и т. п. Многие современные вычислительные системы имеют как общую разделяемую память, так и распределенную локальную. Такие системы принято называть гибридными MIMD с переключателем. 15.1. Особенности организации и функционирования архитектур с общей, распределенной и смешанной памятью Ещѐ одна классификация MIMD-систем базируется на способах организации оперативной памяти, используемых в анализируемых системах. Пример такой классификации приведен на рис. 15.2. 234 Рис. 15.2. Классификация систем MIMD. Прежде всего, и это очень рационально, здесь выделяются два крупных типа многопроцессорных систем – мультипроцессоры (multiprocessors или системы с общей разделяемой памятью) и мультикомпьютеры (multicomputers или системы с распределенной памятью), т. е. системы, объединяющие совокупность отдельных вычислительных машин. Дальнейшее разделение на подклассы для мультипроцессоров осуществляется по способу построения общей памяти. Первый из возможных подходов заключается в использовании единой (централизованной) общей памяти. При таком подходе доступ каждого процессора к общей памяти является однородным (UMA - uniform memory access) и этот подход лежит в основе построения векторных суперкомпьютеров (PVP - parallel vector processor) и симметричных мультипроцессоров (SMP - symmetric multiprocessor). Примером первой группы может служить суперкомпьютер Cray T90, ко второй группе относится, например, IBM eServer p690. Второй подход к формированию общей памяти заключается в объединении в общем адресном пространстве физически распределенной памяти процессоров системы. При этом так же обеспечивается общий доступ к данным, но, естественно, длительность доступа уже не будет одинаковой для всех элементов памяти. Такой подход известен как неоднородный доступ к памяти (NUMA - non-uniform memory access). Признаком классификации дальнейшего деления систем с таким типом памяти является уровень представления и поддержка когерентности кэшпамяти в системе. По этому признаку выделяют: Системы, в которых для представления данных используется только локальная кэш-память имеющихся процессоров (COMA - cache-only memory architecture); примерами таких систем являются, например, KSR-1 и DDM. 235 Системы, в которых обеспечивается однозначность (когерентность) локальной кэш-памяти разных процессоров (CC-NUMA - cache-coherent NUMA); примеры - Sun HPC 10000, IBM/Sequent NUMA-Q 2000. Системы, в которых обеспечивается общий доступ к локальной памяти разных процессоров без поддержки на аппаратном уровне когерентности кэша (NCC-NUMA - non-cache coherent NUMA); к данному типу относится, например, система Cray T3E. Наконец, мультикомпьютеры (multicomputers или системы с распределенной памятью) представляют собой системы, объединяющие совокупность отдельных вычислительных машин со своей локальной памятью, к которой не разрешѐн доступ других ВМ системы. Мультикомпьютеры подразделяются на массивно-параллельные системы (МРР - Massively Parallel Processing) и кластерные системы. 15.2. MIMD-системы с разделяемой памятью Подкласс вычислительных систем класса MIMD образуют ВС, в которых все процессорные элементы имеют доступ к общей разделяемой памяти, имеющей единое адресное пространство. Такая организация памяти существенно облегчает коммуникацию между ПЭ при решении задач и их синхронизацию. Каждый ПЭ таких ВС может иметь и собственную локальную память, но вопросы организации коммуникации и синхронизации работы ПЭ осуществляются именно через общую часть памяти. Среди таких MIMD-систем с разделяемой памятью выделяют симметричные мультипроцессорные системы (SMP), параллельные векторные системы (PVP) и системы с неоднородным доступом к памяти (NUMA). Симметричные мультипроцессорные системы Стремление повысить производительность ВМ в условиях снижения стоимости микропроцессоров привело к созданию симметричных мультипроцессорных ВС (SMP-систем) как альтернативы однопроцессорным высокопроизводительным ВМ. Понятие SMP-система отражает не только особенности архитектурного построения, но и основные черты применяемых в данном подтипе ВС операционных систем. В качестве основных отличительных признаков SMP-систем можно выделить: Наличие не менее двух процессоров одного уровня производительности. Для всех процессоров имеется общая основная память, характеризуемая совместным использованием и единым адресным пространством. Коммуникационная связь между процессорами, а также между процессо236 рами и памятью организована посредством общей шины или другим способом так, что время доступа к памяти одинаково для любого из процессоров. Устройства ввода-вывода в системе являются разделяемыми, доступ к ним каждого процессора может быть организован различным способом. Все процессоры системы являются «симметричными», т. е. способными выполнять одинаковые функции. Обслуживание внешних прерываний способен выполнять каждый процессор. Вся вычислительная система функционирует под управлением одной интегрированной операционной системы, которая организует взаимодействие между процессорами и программами на уровнях заданий, задач, файлов и элементов данных. Наличие общей разделяемой памяти ВС данной архитектуры позволяет осуществлять взаимодействие между процессорами на самом низком уровне – на уровне элементов данных, что обеспечивает возможность эффективного выполнения сильно связанных процессов. Такая особенность практически недоступна другим ВС класса MIMD, например, кластерным системам, которые организуют взаимодействие процессов только на уровне сообщений или путем обмена файлами. Аппаратурная «симметричность» SMP-систем может полностью использоваться только после начальной загрузки вычислительной системы. На этапе начальной загрузки всегда один из процессоров играет ведущую роль, распределяя задания для всех процессоров системы. Это является проявлением некоторой «несимметричности» системного программного обеспечения. В целом операционная система таких ВС занимается планированием процессов и потоков, распределением нагрузки по всем процессорам системы, скрывая от пользователя многопроцессорность вычислительной системы. Сравнение SMP-систем с однопроцессорными ВМ показывает еѐ выигрышное положение по показателям производительности, готовности и надежности, расширяемости и масштабируемости. Такие ВС могут в полной мере использовать параллельные вычисления, отказ одного из процессоров системы не ведѐт к краху всей системы, система до некоторых пределов позволяет увеличивать количество процессоров в системе, увеличивая производительность и изменяя соотношение еѐ производительности и стоимости. Однако все эти достоинства могут быть осуществимы, если операционная система такой ВС в полной мере поддерживает параллельные вычисления. 237 Архитектура SMP-системы Два варианта реализации упрощенной структурной схемы типичной SMPсистемы приведены на рис.15.3. Рис. 15.3. Организация симметричной мультипроцессорной системы: а – с локальной кэш-памятью, б – с разделяемой кэш-памятью. Обычно в системе имеется до 32 недорогих быстродействующих RISCпроцессоров, каждый из которых имеет свою кэш-память (рис.15.3,а). На аппаратном уровне обеспечивается согласованность содержимого кэш-памяти процессоров. Вариант совместно используемой кэш-памяти (рис.15.3,б) позволяет в принципе устранить проблему согласованности кэш-памяти. Но такой вариант может быть реализован только для относительно малого количества процессоров (до четырѐх), поскольку использование общей кэш-памяти для большего количества процессоров приводит к неоправданному еѐ удорожанию и снижению быстродействия. Система коммуникации SMP-системы обеспечивает равноправный доступ любого из еѐ процессоров к общей памяти и устройствам ввода-вывода. Основное взаимодействие процессоров организуется передачей сообщений и информации через общую память, хотя возможен вариант и непосредственного обмена сигналами между процессорами. При построении памяти обычно используется модульный принцип с возможностью одновременного обращения к разным модулям (банкам) памяти. Некоторые SMP-системы в своей конфигурации дополнительно к разделяемым ресурсам включают локальные память и устройства ввода-вывода каждому из процессоров системы. Особенности построения коммуникационной системы играют важную роль для SMP-систем. По способу взаимодействия процессоров с общими ресурсами (памятью и системой ввода-вывода) различают следующие виды архитектуры симметричных мультипроцессоров: с общей шиной и временным разделением; 238 с коммутатором типа «кроссбар»; с многопортовой памятью; с централизованным устройством управления. Архитектура с общей шиной Структурная схема симметричного мультипроцессора с общей шиной приведена на рис. 15.4. Здесь основные свойства общей шины (физический интерфейс, логика адресации, арбитража и разделения времени) остаются такими же, как и в однопроцессорных ВМ. Рис. 15.4. Структура SMP-системы с общей шиной. Архитектура ВС с общей шиной легко модернизируется путем подключения к ней большего числа процессоров. Надѐжность ВС с общей шиной достаточно высока, поскольку отказ одного из устройств, подключенных к ней, не приводит к отказу всей системы. Но такая архитектура не лишена недостатков, основным из которых является невысокая производительность из-за ограничения скорости системы временем цикла шины. Это приводит к необходимости наличия кэш-памяти для уменьшения трафика обращения процессоров к шине, что соответственно порождает проблему поддержания когерентности кэшей. Именно эти проблемы являются причиной того, что количество процессоров в симметричных мультипроцессорных системах с общей шиной обычно не велико (до 16). Архитектура с общей шиной широко применяется в SMP-системах, построенных на микропроцессорах х86. Архитектура с коммутатором типа «кроссбар» Структурная схема такой архитектуры симметричного мультипроцессора приведена на рис. 15.5. Обычно применение коммутационной схемы типа «кроссбар» совместно с модульным построением общей памяти призвано устранить недостатки ограничения пропускной способности, присущие архитектуре с общей шиной. 239 Рис. 15.5. Структура SMP-системы с коммутатором типа «кроссбар». Коммутатор, а топология его связей может быть как двумерной, так и трехмерной, обеспечивает увеличение количества возможных путей между процессорами и банками памяти при условии, что разные процессоры обращаются к разным банкам памяти. В результате расширяется полоса пропускания системы и становится возможным увеличивать число процессоров системы по сравнению с архитектурой на основе общей шины. Поэтому число процессоров в SMP-системах с использованием коммутатора типа «кроссбар» обычно составляет 32 или 64. Аналогичная схема коммутации применяется в таких симметричных мультипроцессорах и для организации взаимодействия процессоров с устройствами ввода-вывода. Архитектура с многопортовой памятью Ещѐ один способ реализации совместного доступа процессоров к общей памяти заключается в применении многопортовой организации оперативной разделяемой памяти. Это достигается путѐм существенного усложнения аппаратуры запоминающего устройства и обеспечивает любому процессору и модулю ввода-вывода прямой и непосредственный доступ к банкам основной памяти по выделенному тракту к каждому еѐ модулю. Такой подход позволяет поднять производительность вычислительной системы, а также даѐт возможность выделить отдельные модули памяти в качестве локальной памяти отдельного 240 процессора, что в свою очередь улучшает защищенность данных от несанкционированного доступа со стороны других процессоров. Архитектура с централизованным устройством управления Применение централизованного устройства управления (ЦУУ) позволяет сосредоточить все потоки передачи сигналов управления, синхронизации, данных в едином месте вычислительной системы, осуществлять буферизацию запросов и арбитраж. Недостатком такого подхода становится сложность реализации такого устройства управления, что препятствует росту производительности. Такая архитектура широко использовалась при построении симметричных мультипроцессоров на базе ВМ семейства IBM 370, но в последнее время используется относительно редко. К числу недостатков SMP-систем относятся наличие временных задержек и уменьшение производительности системы при одновременном обращении процессоров к общей памяти даже в том случае, когда они выполняют независимые программы. Достоинством SMP-систем является то, что скрытая пересылка данных между кэшами, производимая аппаратурой SMP-системы, является наиболее быстрым и самым дешевым средством коммуникации в любой параллельной архитектуре общего назначения. Поэтому такие системы функционируют лучше других в условиях, когда приходится часто синхронизировать доступ к общим данным при наличии большого числа коротких транзакций (например, в банковских приложениях). Из всех рассмотренных архитектур SMP-систем наибольшее распространение получили системы на базе общей шины. Очень часто SMP-системы используются в качестве архитектурных «кирпичиков» (процессорных элементов) при создании MIMD-систем других классов. Параллельные векторные системы (PVP) Параллельные векторные системы фактически представляют собой SMPсистемы, в которых вместо отдельных процессоров используются специальные векторно-конвейерные процессоры. Системы команд таких PVP-систем предусматривают наличие команд обработки векторов независимых данных, которые эффективно выполняются на конвейерных функциональных устройствах. Упрощенная структурная схема PVP-системы приведена на рис. 15.6. Повышение производительности таких систем обеспечивается рядом особенностей – применением передачи данных в векторном формате (что на два порядка быстрее передачи скалярных данных), векторизацией циклов (для 241 обеспечения высокой производительности каждого процессора) и распараллеливанием циклов (для достижения одновременной загрузки нескольких процессоров одним приложением). Рис. 15.6. Структура PVP-системы с коммутатором типа «кроссбар». В PVP-системе несколько векторно-конвейерных процессоров (до 16) работают одновременно над общей памятью, с использованием коммутационной схемы (например, коммутатора типа «кроссбар»). PVP-система может содержать до 256 процессорных элементов и достигать пиковой производительности 4,9 Тфлоп/с. Работу системы обычно поддерживает специализированная ОС, основанная на ОС UNIX. ВС с неоднородным доступом к памяти Считается, что пределом количества процессоров в симметричных мультипроцессорных системах является 32 или 64. Дальнейшее их увеличение ограничивается коммуникационными проблемами и трудностями использования общей памяти. Поэтому повышенный интерес в последнее время вызывает создание ВС на основе технологии неоднородного доступа к памяти (NUMA, NonUniform Memory Access), точнее с кэш-когерентным доступом к неоднородной памяти (CC-NUMA). Эта технология позволяет существенно увеличить количество процессоров в системе, а, следовательно, способна обеспечить более высокую производительность системы. Например, NUMA-система Silicon Graphics Origin поддерживает до 1024 процессоров типа R10000. На рис. 15.7 показана типичная организация систем технологии CC-NUMA. Такие вычислительные системы состоят из множества вычислительных узлов, каждый из которых может представлять собой, например, SMP-систему. Каж242 дый узел содержит процессоры, кэш-память и локальную память, которая представляет собой часть глобальной основной памяти вычислительной системы. Узлы соединяются коммуникационной сетью в виде коммутируемой матрицы, кольцевой схемы или иметь другую топологию. Рис. 15.7. Организация систем типа CC-NUMA. Время доступа к памяти зависит от того, находится адресуемая ячейка памяти в локальной памяти своего узла или в локальной памяти удалѐнного узла. Эта особенность и нашла отражение в названии данных ВС – системы с неоднородным доступом к памяти. При нахождении адресуемой ячейки в локальной памяти своего узла выборка производится с использованием локальной шины узла. В противном случае формируется запрос, посылаемый по сети коммуникаций в нужную локальную шину и по ней в соответствующую кэш-память. Формирование и обслуживание запросов прозрачно для пользователя и осуществляется средствами операционной системы. Технология CC-NUMA требует обеспечения когерентности кэшей. Для решения этой задачи в каждом узле ведѐтся справочник с информацией о местоположении в системе всех составляющих глобальной основной памяти и о состоянии кэш-памяти, который позволяет вычислить адреса любой информации в глобальной адресуемой памяти системы. Считывание данных из удаленной памяти осуществляется с широким применением аппаратных механизмов. Это делает транзакции прозрачными для любого процессора вычислительной системы. В основе аппаратных механизмов обслуживания памяти лежит применение одного из протоколов когерентности кэш-памяти. Использование конкретного протокола когерентности кэшей является одним из основных признаком вычислительной системы. Количество процессоров, входящих в состав NUMA-систем ограничивается несколькими факторами: величиной адресного пространства, возможностями аппаратных средств поддержки когерентности кэшей и возможностями операционной системы по управлению большим числом процессоров. Общими характеристиками NUMA-систем являются [6]: 243 Наличие двух или более узлов, каждый из которых может быть представлен процессорным элементом с кэш-памятью или SMP-системой. Каждый узел имеет локальную память, рассматриваемую как часть глобальной памяти системы. Узлы соединены посредством высокоскоростной сети (обычно типа кроссбар). Поддерживается единое адресное пространство, т. е. любой ПЭ имеет возможность обратиться к любой ячейке памяти, хотя время доступа к локальной памяти своего узла существенно меньше времени обращения к локальной памяти других узлов системы. Когерентность кэшей поддерживается аппаратными средствами (СС NUMA), хотя возможен вариант и без таких средств (NCC NUMA). Вычислительная система управляется единой операционной системой, как и в SMP, но возможен вариант с разбиением системы на разделы, работающие под управлением разных операционных систем. Архитектура NUMA-систем отличается высоким потенциалом к масштабируемости. Поэтому такие системы являются перспективными при создании мощных вычислительных систем. В архитектуре CC-NUMA основным строительным блоком выступает узел. К примеру, вычислительная система Тега-10 состоит из 544 SMP-узлов, каждый из которых содержит от 8 до 16 процессоров Itanium 2. 15.3. MIMD-системы с распределѐнной памятью MIMD-системы с распределѐнной памятью фактически представляют собой совокупность отдельных вычислительных машин, каждая со своей процессорной частью и основной памятью, взаимодействующих путем передачи сообщений или файлов по связывающей их коммуникационной сети. В отличие от предыдущих типов MIMD-систем данная архитектура не позволяет каждому из узлов иметь доступ к памяти других узлов. К MIMD-системам с распределѐнной памятью относят системы с массовой параллельной обработкой (MPP), кластеры вычислительных машин и кластеры больших SMP-систем (Constellations – «созвездия»). Системы с массовой параллельной обработкой В качестве основных признаков, по которым можно отнести MIMDсистему к архитектуре с массовой параллельной обработкой (МРР, Massively Parallel Processing), выделяют наличие отдельного управляющего хосткомпьютера и количества процессоров, объединѐнных в системе, не менее 128. 244 Другими особенностями, характеризующими принадлежность вычислительной системы к классу МРР, являются [6]: стандартные микропроцессоры; физически распределенная память; сеть соединений с высокой пропускной способностью и малыми задержками; хорошая масштабируемость (до тысяч процессоров); пересылка сообщений как основной вид взаимодействия процессоров; вычисления составлены множеством процессов, имеющих отдельные адресные пространства. В общем виде структура МРР-системы представлена на рис.15.8. Основными достоинствами системы с массовой параллельной обработкой являются возможность создания ВС с гигантской производительностью и возможность достижения заданного соотношения производительности и стоимости ВС в большом диапазоне изменения этих показателей. Рис. 15.8. Структура МРР-системы. Наличие единственного управляющего устройства – хост-компьютера в составе MPP-системы является как положительной чертой, так и недостатком таких систем. Функциями хост-компьютера являются: формирование очереди заданий с приоритетными признаками, выдача заданий из очереди для выполнения на системе при освобождении ресурсов, сбор сведений о состоянии выполнения заданий, о их завершении и о потребностях в дополнительных ресурсах, контроль работы подчиненных процессоров и других ресурсов, обнаружение и устранение нештатных ситуаций, прерывание выполнения текущего задания в случае появления в очереди более приоритетного задания. Можно сравнить действия хост-компьютера с работой ядра операционной 245 системы, а работу подчиненных процессоров с выполнением пользовательских приложений. Подчиненность между процессорами может быть осуществлена как аппаратными, так и программными средствами. Благодаря высокой масштабируемости, МРР-системы совместно с кластерными системами являются сегодня лидерами по достигнутой производительности. Для достижения высокой эффективности функционирования МРРсистем необходимо тщательно осуществлять распараллеливание решаемых задач, что становится всѐ более трудной задачей. Трудность заключается также в проблеме переносимости программного обеспечения между системами, имеющими разную архитектуру и, особенно, разную топологию связей коммуникационной системы. Основными топологиями в таких ВС являются двумерная решѐтка или гиперкуб, причем последняя топология является более предпочтительной, так как имеет меньшую характеристику диаметра системы (D – sqrt(n)). Слабым местом МРР является центральное управляющее устройство – хост-компьютер – при выходе его из строя вся система оказывается неработоспособной. Повышение надежности хост-компьютера может быть достигнуто путем упрощения аппаратуры хост-компьютера и/или ее дублирования. Несмотря на все сложности, сфера применения ВС с массовым параллелизмом постоянно расширяется. Различные системы этого класса эксплуатируются во многих ведущих суперкомпьютерных центрах мира. Кластерные вычислительные системы Одним из самых современных направлений в области создания высокопроизводительных вычислительных систем является кластеризация. По основным показателям кластерные ВС успешно конкурируют с другими типами архитектур. Кластер представляет собой группу взаимно соединенных вычислительных систем (узлов), работающих совместно, составляя единый вычислительный ресурс и создавая иллюзию наличия единственной ВМ. В качестве узлов кластера могут использоваться как однопроцессорные ВМ, так и ВС типа SMP или МРР, как одинаковые ВС (гомогенные кластеры), так и разные (гетерогенные кластеры). Важным является лишь то, что каждый узел в состоянии функционировать самостоятельно и отдельно от кластера. Архитектура кластерной ВС характеризуется объединением нескольких узлов высокоскоростной сетью, следовательно, кластер представляет собой слабо связанную вычислительную систему. Изначально кластеры должны были решить две задачи: достижение большой вычислительной мощности и обеспечение повышенной надежности ВС. 246 Первые кластерные архитектуры, поступившие на рынок, были созданы корпорацией DEC в начале 80-х годов прошлого века. К достоинствам кластерных вычислительных систем можно отнести: Абсолютную масштабируемость. Возможно создание большого кластера, содержащего десятки, сотни и тысячи узлов, каждый из которых представляет собой мультипроцессор, превосходящего по вычислительной мощности даже самые производительные одиночные ВМ. Наращиваемую масштабируемость. Кластер строится так, что его можно наращивать, добавляя новые узлы небольшими порциями. Таким образом, пользователь может начать с умеренной системы, расширяя еѐ по мере необходимости. Высокий коэффициент готовности. Каждый узел кластера представлен самостоятельной ВМ или ВС, поэтому отказ одного из узлов не приводит к потере работоспособности кластера. Отказоустойчивость многих систем автоматически поддерживается программным обеспечением. Превосходное соотношение цена/производительность. Кластер любой производительности можно создать, соединяя стандартные «строительные блоки», при этом его стоимость будет ниже, чем у одиночной ВМ с эквивалентной вычислительной мощностью. На уровне аппаратного обеспечения кластер – это просто совокупность независимых вычислительных систем, объединенных сетью. При соединении машин в кластер почти всегда поддерживаются прямые межмашинные связи. Сети могут быть простыми, основывающимися на аппаратуре Ethernet, или являться сложными высокоскоростными сетями с пропускной способностью в сотни мегабайт в секунду. В процессе работы узлы кластера контролируют работоспособность друг друга и обмениваются специфической, характерной для кластера информацией. Контроль работоспособности осуществляется с помощью специального сигнала, передаваемого узлами кластера друг другу, чтобы подтвердить их нормальное функционирование. Кластерная ВС не работает под управлением единой ОС. В каждом узле кластера установлена своя ОС. Однако программное обеспечение кластерной ВС выполняет задачи обеспечения бесперебойной работы при отказе одного или нескольких узлов: производит перераспределение вычислительной нагрузки при отказе одного или нескольких узлов кластера, а также восстановление вычислений при сбое в узле. При наличии в кластере совместно используемых дисков кластерное программное обеспечение поддерживает единую файловую систему. 247 На рис. 15.9 показана обобщенная структура кластерной ВС. Для сокращения коммуникационных издержек большинство кластеров в настоящее время формируют из серверов, подключенных к общим дискам, обычно представленных дисковым массивом RAID. Рис. 15.9. Логическая архитектура кластерной системы. К примеру, существует вариант, когда совместный доступ к дискам не применяется, общие диски разбиваются на разделы, каждому узлу кластера выделяется свой раздел. В случае отказа одного из узлов кластер может быть реконфигурирован так, что права доступа к части общего диска, соответствующей отказавшему узлу, передаются другому узлу. Второй вариант: множество серверов разделяют во времени доступ к общим дискам, так что любой узел имеет возможность обратиться к любому разделу каждого общего диска. Эта организация требует наличия каких-либо средств блокировки, гарантирующих, что в любой момент времени доступ к данным будет иметь только один из серверов. Вычислительные машины (системы) в кластере взаимодействуют в соответствии с одним из двух транспортных протоколов. Первый из них, протокол TCP (Transmission Control Protocol), оперирует потоками байтов, гарантируя надежность доставки сообщения. Второй – UDP (User Datagram Protocol) пытается посылать пакеты данных без гарантии их доставки. Существуют и специальные протоколы, которые работают намного лучше. Компанией Intel предложен новый протокол для внутрикластерных коммуникаций, который называется Virtual Interface Architecture (VIA), которому пророчат роль стандарта. При обмене информацией используются два программных метода: передачи сообщений и распределенной совместно используемой памяти. Первый опирается на явную передачу информационных сообщений между узлами кластера. В альтернативном варианте также происходит пересылка сообщений, но движение данных между узлами кластера скрыто от программиста. 248 Кластеры обеспечивают высокий уровень доступности – в них отсутствуют единая операционная система и совместно используемая память, т. е. нет проблемы когерентности кэшей. Кроме того, специальное программное обеспечение в каждом узле постоянно контролирует работоспособность всех остальных узлов. Этот контроль основан на периодической рассылке каждым узлом сигнала «Пока жив». Если сигнал от некоторого узла не поступает, то такой узел считается вышедшим из строя; ему не дается возможность выполнять ввод-вывод, его диски и другие ресурсы (включая сетевые адреса) переназначаются другим узлам, а выполнявшиеся им программы перезапускаются в других узлах. Кластеры хорошо масштабируются в плане повышения производительности при добавлении узлов. В кластере может выполняться несколько отдельных приложений, но для масштабирования отдельного приложения требуется, чтобы его части согласовывали свою работу путем обмена сообщениями. Однако, следует учитывать, что взаимодействие между узлами кластера занимают гораздо больше времени, чем в традиционных ВС. Возможность практически неограниченного наращивания числа узлов и отсутствие единой операционной системы делают кластерные архитектуры исключительно успешно масштабируемыми, и даже системы с сотнями и тысячами узлов показывают себя на практике с положительной стороны. Кластеры больших SMP-систем Огромный потенциал масштабирования, свойственный кластерной архитектуре, делает еѐ очень перспективным направлением создания высокопроизводительных ВС. Масштабирование достигается как за счет увеличения количества узлов, так и путем применения в качестве узлов не одиночных ВМ, а также хорошо масштабируемых ВС, обычно SMP-систем. Это направление получило настолько широкое развитие, что было выделено в отдельную группу MIMD-систем – Constellations – созвездия. Constellations-система – это кластер, узлами которого являются SMPсистемы с количеством ПЭ в узле не менее 16. Перспективность Constellationsсистем обусловлена удачным сочетанием преимуществ распределенной памяти (возможностью наращивания количества узлов) и разделяемой памяти (эффективным доступом множества ПЭ к памяти). Структура Constellations-систем приведена на рис. 15.10. Высокопроизводительную архитектуру ВС невозможно создать без построения средств коммутации. Поэтому коммутационная система является важнейшим аспектом создания современных вычислительных систем. 249 Рис. 15.10. Структура Constellations-системы. 15.4. Топологии ВС Топология сети передачи данных, т. е. структура линий коммутации между процессорами вычислительной системы определяется, как правило, с учетом возможностей технической реализации. При выборе структуры сети необходимо также учитывать интенсивность информационных потоков при параллельном решении наиболее распространенных вычислительных задач. Рассмотрим основные схемы коммутации в мультикомпьютерных ВС (МВС) с различными системами организации памяти. На рис. 15.11 изображена типовая архитектура МВС с общей памятью. Рис. 15.11. Типовая архитектура МВС с общей памятью. Для реальных вычислительных систем (ВС) с общей памятью характерно соотношение m ≤ n ≤ 32, где n - количество процессоров, а m - число модулей памяти, осуществляющих хранение данных. В зависимости от соотношения значений количества процессоров и модулей памяти архитектура коммутационной сети выполняется по-разному. При 250 единственном модуле памяти (m=1) память делают многовходовой или используют коммутатор, при нескольких модулях памяти (1 < m < n) применяют несколько коммутаторов или несколько блоков многовходовой памяти, при равном количестве процессоров и модулей памяти применяют коммутационную сеть. Разные варианты реализации приведены на рис. 15.12, 15.13 и 15.14. ... Рис. 15.12. Единый модуль памяти m = 1. Рис. 15.13. Несколько модулей памяти 1 < m < n. Рис. 15.14. Число модулей памяти равно числу процессоров m = n. 251 В МВС с общей памятью часто применяют систему коммутации на основе нескольких шин. В такой структуре каждый модуль памяти имеет свою шину, к которой подключаются все процессорные узлы, как это показано на рис. 15.15. Рис. 15.15. МВС с общей памятью и шинной коммутацией. На рис. 15.16 представлена типовая архитектура МВС с распределенной памятью. Рис. 15.16. Архитектура схем коммутации в МВС с распределенной памятью. Коммутационную сеть для МВС с распределенной памятью обычно выполняют по одному из трѐх вариантов: через общую шину, через несколько шин или через многоступенчатый переключатель. Архитектура ВС со связями через общую шину приведена на рис. 15.17. Рис. 15.17. Архитектура схем коммутации в МВС с распределенной памятью со связями через общую шину, ВМ – вычислительный модуль. 252 Такая схема является наиболее дешевой и просто реализуемой. Она удовлетворяет требованиям передачи данных при решении многих вычислительных задач и позволяет просто наращивать число подключаемых вычислительных модулей. Однако, шина, работающая в режиме разделения времени, становится узким местом в плане увеличения количества подключѐнных к ней вычислительных модулей, и для обеспечения эффективной работы шины требуется тщательное планирование еѐ использования (арбитр шины). Архитектура МВС со связями через несколько шин, представленная на рис. 15.18, является более дорогим вариантом. Достоинством такой архитектуры является бóльшая производительность и надежность, чем у аналогов с одной шиной. Однако для организации эффективных вычислений требуется использование многих коммутаторов шин (равное количеству вычислительных модулей), что приводит к высоким аппаратным затратам. Рис. 15.18. Архитектура схем коммутации в МВС с распределенной памятью со связями через несколько шин. На рис. 15.19 представлена архитектура со связями через многоступенчатый переключатель. Рис. 15.19. МВС с распределенной памятью со связями через многоступенчатый переключатель. Существует много вариантов организации коммутации такого вида. Соединение через коммутатор первого и последнего процессоров линейки приводит к топологии, называемой кольцом (рис. 15.20). 253 Рис. 15.20. Многоступенчатый коммутатор кольцевого типа. Наиболее высокую надежность и минимальные затраты при передаче данных обеспечивает система коммутации, в которой вычислительные модули связаны прямой линией связи по принципу «каждый с каждым». Такая топология называется коммутационной сетью с полным набором связей (рис. 15.21). Здесь каждый узел представляет собой вычислительный модуль со своим многовходовым коммутатором. Однако, практическая реализация такой топологии оказывается очень сложной при большом количестве вычислительных модулей. Рис. 15.21. Схема коммутационной сети с полным набором связей. Система, в которой все вычислительные модули с помощью своих коммутаторов имеют линии связи только с центральным коммутатором или центральным коммутационным узлом (ЦКУ), роль которого может выполнять, например, управляющий процессор, называется ВС с топологией типа «звезда» (рис. 15.22). Рис. 15.22. Коммутатор по типу «звезды». 254 Широко распространены МВС, в которых топология линий связи образует двух- или трехмерную прямоугольную сетку (решѐтку). Подобная топология достаточно проста в реализации и может быть эффективно использована при параллельном выполнении многих численных алгоритмов (например, при реализации методов анализа математических моделей, описываемых дифференциальными уравнениями в частных производных). Топология связей по типу «двумерной решетки» представлена на рис. 15.23. В решѐтчатых топологиях каждый вычислительный модуль связан с 4-мя соседями и через них с любыми другими ВМ. Рис. 15.23. Структура ВС по типу «решѐтки». Другой часто применяемой топологией МВС с распределѐнной памятью является топология «гиперкуб» – частный случай решѐтки, когда по каждой размерности сетки имеется только два процессора. Примеры коммутаторов типа гиперкуб представлены на рис. 15.24. Рис. 15.24. Коммутатор по типу «гиперкуб». При размерности гиперкуба N он содержит 2N процессоров. 255 Такой вариант организации коммутационной сети передачи данных широко распространен на практике, достаточно прост в построении и характеризуется следующими свойствами: Два процессора имеют непосредственное соединение, если двоичные представления их номеров имеют только одну различающуюся позицию. В N-мерном гиперкубе каждый процессор связан ровно с N соседями. Кратчайший путь между двумя любыми процессорами имеет длину, совпадающую с количеством различающихся битовых значений в номерах процессов. Т. е., что максимальная длина пути в N-мерном гиперкубе равна N. N-мерный гиперкуб может быть разделен на два (N–1)-мерных гиперкуба (всего возможно N таких разбиений). Очевидными преимуществами такой топологии являются: Процессор, располагаясь в вершине N куба, не отстоит более чем на Nребер ни от какого другого процессора, что значительно облегчает создание эффективных коммуникаций в системе (например, для N=12 допустимое число ВМ 212 =4096!); Поскольку структура соединений в N-кубе хорошо согласуется с двоичной логикой, то достаточно легко реализуется алгоритм маршрутизации для передачи сообщений между узлами; Между любой парой процессоров существует несколько альтернативных путей коммуникаций, что позволяет в целом снизить задержки при передаче данных. 256 16. ПЕРСПЕКТИВЫ РАЗВИТИЯ ВМ И ВС 16.1. Наиболее производительные вычислительные системы Ряд международных экспертов уже 28 лет дважды в год оценивают производительность наиболее производительных вычислительных систем в мире, публикуя список 500 лучших представителей на сайте top500.org. С июня 2019 года в этот список входят только системы с петафлопсной производительностью. В последнем 57-м выпуске ТОП500 в июне 2021 г. Китай (186 систем) и США (123 систем) сохранили свое доминирование в списке, хотя и в разных категориях. Доля установок в Китае уже второй раз подряд снизилась: с 45,2 % в 55-м списке до 42,4% в 56-м, и до 37,6% в последнем списке. Но Китай по числу ВС, входящих в список ТОП500 остается лидером. Доля наиболее производительных ВС, расположенных в США (находящиеся не втором месте по этому показателю), увеличилась до 24,4% (была на уровне 22,6 %). Тем не менее, системы в США в среднем производительнее, что позволило США (856,8 петафлоп/с) продолжать лидировать по суммарной производительности. На втором месте с точки зрения суммарной производительности идет Япония (641,0 петафлоп/с), а Китай только на третьем (445,3 петафлоп/с). Кстати по общему количеству систем в списке у Японии всего 34 (осталось таким же, как в списке ноября 2020 г.), это составляет 6,8%. Начальный уровень в списке вырос до 1,51 петафлоп/с по тестированию High Performance Linpack (HPL), по сравнению с 1,32 и 1,23 петафлоп/с в предыдущих двух списках ноября и июня 2020 г. Верхняя часть списка по сравнению с ноябрем 2020 года почти не изменилась. Если июньский список 2020 года содержал четыре новых системы в первой десятке, а ноябрьский список 2020 года включал лишь две новые системы – на 7 и 10 позициях, то последний список имеет лишь одну новую систему Perlmutter на 5 позиции. На первом месте остался японский суперкомпьютер Fugaku с результатом 442 петафлоп/с, в 3 раза опередив по этому показателю занимающую второе место американскую систему IBM Summit. Примечательно, что в Fugaku используются 48-ядерные однокристальные системы Fujitsu A64FX SoC на архитектуре ARM. В операциях с одинарной или меньшей точностью, которые часто используются в задачах искусственного интеллекта, включая машинное обучение, пиковая производительность Fugaku превышает 1 экзафлоп/с. Ещѐ один рекорд этой системы заключается в том, что по новому тесту mixed precision 257 HPC-AI Fugaku увеличила свою производительность до 2,0 эксафлоп/с, благодаря чему некоторые эксперты представили эту машину в качестве первого суперкомпьютера Exascale. Две системы производства IBM (США) под названием Summit и Sierra, установленные в Национальной лаборатории DOE's Oak Ridge (ORNL) в Теннесси и Национальной лаборатории Лоуренса Ливермора в Калифорнии, с результатом 148,8 петафлоп/с и 94,6 петафлоп/с, остались на втором и третьем местах в ТОП500. Системы Summit и Sierra имеют похожие архитектуры, основанные на 22-ядерных процессорах Power9 и ускорителях NVidia Volta GV100. Summit имеет 4356 узлов, каждый из которых оснащѐн двумя процессорами и шестью ускорителями, а Sierra имеет 4320 узлов, каждый из которых оснащѐн двумя процессорами и четырьмя ускорителями указанных типов. Четвертую позицию в списке сохранил за собой китайский суперкомпьютер TaihuLight на более чем 10 миллионах 260-ядерных процессоров Sunway SW26010. Он имеет максимальную производительность в 93.0 петафлоп/с, сформирован Национальным исследовательским центром Китая параллельных инженерства & технологии компьютера (NRCPC) и установлен в Национальном суперкомпьютерном центре в Wuxi. Под номером пять в ТОП500 впервые вошла система Perlmutter, основанная на платформе HPE Cray «Shasta» и гетерогенной системе с узлами на базе AMD EPYC и 1536 ускоренными узлами NVIDIA A100. ВС Perlmutter достигла производительности 64,6 Пфлоп/с. На шестом месте с результатом 63,4 петафлоп/с на тесте HPL находится американская система Selene, NVIDIA DGX A100, установленная в компании NVIDIA Corp. Система основана на процессорах AMD EPYC с новыми графическими процессорами NVIDIA A100 для ускорения. На седьмом месте в списке числится китайский суперкомпьютер Tianhe-2A (Milky Way-2A, Млечный Путь-2А) на процессорах Intel Xeon и сопроцессорах Matrix-2000 (ранее был на шестом месте). Его производительность составила 61,4 петафлоп/с. Восьмое место в списке занимает суперкомпьютер, известный как Juwels Booster Module, дебютировавший в ноябре 2020 г. на 7-й позиции списка. Построенная Atos машина BullSequana была недавно установлена в Forschungszentrum Jülich (FZJ) в Германии. Он является частью модульной архитектуры системы, и второй модуль JUWELS на базе Xeon указан отдельно в ТОП500 на позиции 65. Эти модули интегрируются с помощью пакета программного обеспечения ParTec Modulo Cluster. Модуль Booster использует 258 процессоры AMD EPYC с графическими процессорами NVIDIA A100 для ускорения, аналогичного системе Selene, находящейся на шестом месте списка. Модуль Juwels Booster смог достичь производительности 44,1 петафлоп/с, что делает его самой мощной системой в Европе. Далее следует спустившаяся с 8 на 9 место списка итальянская система HPC5 на базе Intel Xeon Gold и Nvidia Tesla V100, построенная компанией Dell, с результатом в тесте HPL 33,5 петафлоп/с. Это самая мощная система в списке, используемая в коммерческих целях на сайте клиента. Десятая система из списка ТОП500 принадлежит американскому суперкомпьютеру Frontera на процессорах Intel Xeon, набирающему в тесте 23,5 петафлоп/с. В предыдущем списке он находился на 9-м месте. С точки зрения наличия суперкомпьютеров Россия существенно отстает от других стран. Так в последний 57-й список ТОП500 вошло лишь 3 российских суперкомпьютера (в предыдущем списке было всего 2): Кристофари с почти 100 000 ядер (99600) на процессорах Xeon Platinum 8168 24C 2,7GHz, с производительностью 6,669 петафлоп/с, впервые вошедший в список в ноябре 2019 года, переместился с 29 на 35 место в 55-м списке, затем на 40-е место в 56-м списке, а сейчас находится на 61-м месте. Кластерная ВС Ломоносов-2 с 64384 ядрами на процессорах Xeon E5-2697 2,6 GHz, с производительностью 2,478 петафлоп/с, находящаяся в списке с ноября 2011 г. и занимающая сейчас 199-ю позицию (лучшее место было 22 в ноябре 2014 г.), за полгода снизила свою позицию на 44 пункта. MTS GROM производства NVIDIA, имеющая 19 840 ядер на процессорах AMD EPYC 7742 64C 2.25GHz с производительностью 2,258 петафлоп/с впервые вошла в список и занимает 240-ю позицию. Компьютерный центр Росгидромета с 35136 ядрами на процессорах Xeon E5-2697 v4 18C 2,3 GHz, с производительностью 1,2 петафлоп/с, находившийся в списке с июня 2018 г. и занимавший в ноябре 2019 года 465-ю позицию (лучшее место было 172 в июне 2018 г.) вытеснен из списка ТОП500 в июне 2020 г. В последнее время суперкомпьютерные технологии в России объявлены как один из приоритетов государственной политики. Сегодня критические (прорывные) технологии в государствах, строящих экономику, основанную на знаниях, исследуются и разрабатываются на базе широкого использования суперкомпьютерных технологий. Без серьезной суперкомпьютерной инфраструктуры невозможно развивать перспективные технологии (биотехнологии, нанотехнологии, решения для энергетики будущего и 259 т.п.), создать современные изделия высокой сложности (аэрокосмическая техника, суда, энергетические блоки электростанций различных типов). Суперкомпьютерные технологии по праву считаются важнейшим фактором обеспечения конкурентоспособности экономики страны, а единственный способ победить конкурентов – это возможность обогнать их в расчетах. В развитии суперкомпьютерной отрасли можно выделить два слоя. Технологии уровня N – это суперкомпьютерные технологии будущего, которые еще не вполне освоены, а только-только разрабатываются. Инновационные технологии – это совершенно новые технические решения, недоступные на рынке. На базе инновационных технологий создают суперкомпьютеры, которые сильно вырываются вперед. Как правило, это машины, соответствующие первым 10 местам списка ТОП500. Эти вычислительные системы сверхвысокой производительности обладают мощностью, которая радикально отличает их от всех других машин. И на платформе таких систем можно выполнить расчеты, которые невозможно повторить (ни за какое разумное время) на суперкомпьютерах более низкого класса. На базе таких расчетов можно создать в разных отраслях принципиально новые материалы, новые технологические решения, новые изделия, которые позволят обладающей ими стороне быть вне конкуренции и существенно оторваться от других игроков в соответствующей отрасли, игроков, обладающих лишь технологиями уровня N-1, т. е. технологиями более низкого уровня, основанными на отработанных решениях, широкодоступных на рынке. Суперкомпьютеры на базе технологии уровня N-1 доступны (и даже могут быть воспроизведены) во многих странах. Соответственно, расчеты, выполняемые на таких машинах, могут быть воспроизведены многими. На базе таких расчетов можно создать в разных отраслях конкурентоспособные материалы, технологические решения, изделия, достичь нормального качества, заурядной конкурентоспособности. С такими изделиями можно выходить на мировой рынок, но на нем придется вести изнурительную конкурентную борьбу с десятками подобных товаров, созданных на базе аналогичных расчетов. Таким образом: для того чтобы страна победила в конкуренции, ей необходимо победить в вычислениях; для того чтобы победить в вычислениях, необходимо создавать свои собственные вычислительные системы сверхвысокой производительности; необходимые для этого ключевые технические решения относятся к су260 перкомпьютерным технологиям уровня N. Они недоступны на рынке по двум причинам: многие из них еще не доведены до «готового продукта», и никто не заинтересован отдавать в чужие руки «оружие победы» в конкуренции; следовательно, для того чтобы страна победила в конкуренции, ей предстоит создать свои собственные суперкомпьютерные технологии уровня N, по крайней мере, в части ключевых технических решений, необходимых для разработки ВС сверхвысокой производительности. На сегодняшний день и ближайшую перспективу в составе систем сверхвысокой производительности можно выделить следующие компоненты. Аппаратные средства: вычислительные узлы – процессоры, оперативная память, возможно, ускорители вычислений и локальные диски; системная сеть – связывает вычислительные узлы и используется для организации вычислительного процесса (синхронизация и обмен данными между вычислительными фрагментами); системы хранения данных; подсистемы ввода-вывода данных; подсистемы визуализации; инфраструктура системы: вспомогательная сеть (управление задачами, передача файлов); подсистема мониторинга и управления аппаратурой; подсистемы охлаждения и электропитания. Базовое и системное программное обеспечение, в том числе: операционная система; системы низкоуровневой поддержки эффективного и отказоустойчивого использования аппаратных средств и реализации перспективных подходов к программированию; средства поддержки программирования – языки, инструменты и системы программирования. Системы сверхвысокой производительности – это всегда системы на пределе существующих технических возможностей: процессоров и спецпроцессоров (ускорителей вычислений), системной сети, подсистем охлаждения и электропитания и т.д. В таких системах новые оригинальные разработки используются гораздо чаще, чем коммерчески доступные решения. И для этого есть несколько причин, в том числе: часто используются самые свежие разработки, которые только что созданы и еще не успели выйти на рынок как коммерчески 261 доступные решения. Для вывода их на рынок потребуется несколько лет. Причем задержка может быть и умышленной – сохранение отрыва от конкурентов; системы строятся как уникальные объекты в единичных экземплярах – для многих коммерческих компаний единичные проекты неинтересны. Процессоры и сопроцессоры Сегодня в системах сверхвысокой производительности ТОП500 используются как традиционные процессоры Intel (девять систем из десяти), так и эксклюзивные процессоры IBM Power 9 (десять систем из 500). Процессоры AMD использует 21 система, а процессоры ARM – 5 систем. Графические процессоры как ускорители вычислений используются в трѐх случаях из десяти. Системная сеть Технические характеристики системной сети – темп выдачи сообщений, задержка, пропускная способность – самым серьезным образом влияют на реальную производительность суперкомпьютера. Это влияние тем больше, чем больше размер системы. Для систем сверхвысокой производительности требуется системная сеть с рекордными техническими характеристиками. Вот почему в этих системах чаще всего используются для системной сети либо решения собственной разработки, либо дорогие и самые высококачественные коммерчески доступные решения. Инфраструктура Приходится разрабатывать оригинальные решения и для инфраструктуры: подсистем охлаждения, энергоснабжения, управления. Например, именно в настоящее время происходит перелом в используемых подходах в подсистеме охлаждения. Инженерная логика здесь весьма простая: системы сверхвысокой производительности имеют высокие показатели электропотребления – как правило, от десятка мегаватт и выше. А значит, они имеют очень высокий уровень выделения тепла в вычислителе. И общая тенденция связана с ростом электропотребления (и соответственно – тепловыделения); стремление к максимальной производительности ведет к увеличению плотности расположения электроники вычислителя: меньше длина проводников – значит, меньше задержки на передачу сигналов, выше производительность; как результат мы имеем все большее и большее тепловыделение, приходящееся на единицу объема; значит, технологии охлаждения вычислителя должны непрерывно совершенствоваться. В результате в последние годы мы наблюдаем смену технологий охлаждения электроники вычислителей. 262 16.2. Основные направления развития процессоров Повышение тактовой частоты В современной микроэлектронике для повышения тактовой частоты используются следующие приѐмы: применение более совершенных технологических процессов с меньшими проектными нормами; увеличение количества слоев металлизации; использование более совершенной схемотехники меньшей каскадности и с более совершенными транзисторами, а также более плотная компоновка функциональных блоков на кристалле. Практически все производители микропроцессоров ушли от технологий 0,35–0,25 мкм на проектные нормы 0,18 и 0,12 мкм и стремятся использовать уникальную 0,07 мкм-технологию. Снижение напряжения питания с 5 до 2,5–3 В и ниже, обеспечиваемое уменьшением размеров транзисторов, позволяет увеличить быстродействие и уменьшить выделяемую тепловую энергию. Практически достигнут оптимум 0,1—0,2 мкм минимального размера деталей внутренней структуры интегральных схем, ниже которого все характеристики транзистора быстро ухудшаются. Практически все свойства твердого тела, включая его электропроводность, резко изменяются и «сопротивляются» дальнейшей миниатюризации, сопротивление связей увеличивается экспоненциально. При этом начинают проявляться эффекты квантовой связи, в результате чего твердотельное устройство становится системой, действие которой основано на коллективных электронных процессах. Проектная норма 50-100 нм становится нижним пределом твердотельной микроэлектроники, основанной на классических принципах синтеза схем. Повышение тактовой частоты работы процессоров требует уменьшения длины межсоединений, так как существенную долю длительности такта занимает время прохождения сигналов по проводникам внутри кристалла. При использовании традиционных технологий уменьшение длины межсоединений на кристалле может быть достигнуто путѐм увеличения количества слоев металлизации. Увеличение объѐма и пропускной способности подсистемы памяти Возможными решениями по увеличению пропускной способности подсистемы памяти могут быть создание кэш-памяти одного или нескольких уровней и увеличение пропускной способности интерфейсов между процессором и кэшпамятью, а также увеличение пропускной способности между процессором и основной памятью. Для совершенствования интерфейсов применяют как увеличение пропускной способности шин (за счѐт увеличения частоты работы ши263 ны и/или еѐ ширины), так и введение дополнительных шин, разрешающих конфликты между процессором, кэш-памятью и основной памятью. В этом случае одна шина работает на частоте процессора с кэш-памятью, а вторая – на частоте работы основной памяти. Общая тенденция увеличения размеров кэш-памяти реализуется путем введения отдельных кэш-памяти данных и команд первого уровня, размещения до четырех уровней кэш-памяти с возрастанием объема от 8 Кбайт на уровне L1 для каждого ядра микропроцессора до 256 Мбайт на уровне L4 для всех ядер микропроцессора с размещением кэш-памяти как внутри кристалла, так и в отдельном кристалле, размещенном в одном корпусе. Для увеличения производительности микропроцессоров все более используются динамические политики вытеснения строк из кэш-памяти, учитывающие особенности как выполняемых программ, так и свойства обрабатываемых данных. Увеличение количества параллельно работающих исполнительных устройств Каждое семейство микропроцессоров демонстрирует в следующем поколении увеличение числа функциональных исполнительных устройств и улучшение их характеристик, как временных (сокращение числа ступеней конвейера и уменьшение длительности каждой ступени), так и функциональных (введение ММХ-расширений системы команд и т.д.). В настоящее время процессоры могут выполнять до шести операций за такт. Однако число операций с плавающей точкой в такте ограничено двумя для R10000 и Alpha 21164, а четыре операции за такт делает HP РА-8500. Для того, чтобы полнее загрузить функциональные исполнительные устройства, используются буферы динамической переадресации, методы переименования регистров и динамического предсказания переходов, позволяющие избежать межкомандных конфликтов по данным и управлению. Широко используются архитектуры с длинным командным словом VLIW и EPIC, что позволяет упростить процессор и ускорить выполнение команд. Нанотехнологии Нанотехнологии (технологии, оперирующие величинами порядка нанометра) – это технологии манипуляции отдельными атомами и молекулами, в результате которых создаются сложные нано структуры, обладающие совершенно новыми свойствами. Слово «нано» (в древнегреческом языке nаnо – карлик) означает миллиардную часть единицы измерения и характеризует величины, сопоставимые с размерами атомов, в сотни раз меньшие длины волны видимого 264 света и в тысячи раз тоньше человеческого волоса. Поэтому переход от «микро» к «нано» представляет собой уже не количественный, а качественный переход – скачок от манипуляции веществом к манипуляции отдельными атомами. Мир таких бесконечно малых величин намного меньше, чем мир сегодняшних микротранзисторов. Сейчас работы в области нанотехнологий ведутся в четырех основных направлениях: молекулярная электроника; биохимические и органические решения; квазимеханические решения на основе нанотрубок; квантовые компьютеры. Фотоника Фотоника – это технология излучения, передачи, регистрации света при помощи волоконной оптики и оптоэлектроники. Довольно давно уже известна оптимальная среда для передачи огромных массивов данных – это свет, передаваемый по волоконно-оптическим кабелям. А все компьютерные транзисторы работают с электрическим током, текущим по медным проводам. 16.3. Кодирование и передача сигналов Основным способом кодирования сигнала в двоичной цифровой электронике является использование разных уровней напряжения. Дорожка находится в состоянии «ноль», если на неѐ подан потенциал (U0 ± ε), а если на неѐ подан потенциал (U1 ± ε), то она находится в состоянии «единица». Уровни напряжения U0 и U1 выбираются так, чтобы (U0 + ε) < (U1 – ε), где ε – неизбежная по техническим причинам погрешность. Переход из одного состояния в другое равнозначен остановке или, наоборот, разгону огромного количества электронов в проводнике. Оба эти процесса характеризуются переходными процессами, занимают довольно много времени и неизбежно связаны с большими энергетическими потерями. Этого недостатка лишены альтернативные цифровой электронике подходы: по дорожкам можно пускать постоянный поток электронов (так называемая спинтроника) или фотонов (так называемая фотонная логика), а сигнал кодировать путѐм изменения поляризации этого потока. Как поток электронов, так и поток фотонов, передаваемые по одномерному волноводу, могут пребывать только в двух ортогональных состояниях поляризации, одно из которых объявляется нулѐм, а другое единицей. Что лучше – фотонная логика или спинтрони265 ка, пока непонятно: в обоих случаях поток частиц течѐт с неизбежными тепловыми потерями, однако эти потери могут быть сколь угодно малы; в обоих случаях скорость потока ниже скорости света, однако может быть сколь угодно близка к ней; в обоих случаях требуются сложные технические приѐмы, чтобы наводки, тепловой шум и фоновое излучение (от пролетающих мимо случайных частиц) не искажали сигнал. Иными словами, известные физические ограничения обеих технологий одинаковы. По всей видимости, наилучшими результатами будут обладать комбинированные технологии, поскольку транспортировка фотонов выигрывает на длинных дистанциях и проигрывает на коротких. Уже разработаны рабочие прототипы преобразователей (в обе стороны) между поляризацией фотонного и электронного потока. Идеальным материалом для спинтронных дорожек является графен: он обеспечивает превосходную скорость при очень низких тепловых потерях. Также уже существуют рабочие прототипы следующих элементов: дорожек, надѐжно сохраняющих поляризацию тока на коротких и средних дистанциях; ячеек памяти, способных сохранить поляризацию и затем формировать поток сохранѐнной поляризации. 16.4. Перспективы развития процессоров По всей видимости, архитектура центральных процессоров останется фон Неймановской. Увеличение производительности будет обеспечиваться за счѐт лучшей параллелизации инструкций и перехода на асинхронную схемотехнику. Для обеспечения наилучшей параллелизуемости потребуется переход на более совершенные системы команд – в частности, пригодные для одноразового использования регистров. Современные процессоры используют от 1 до 16 управляющих блоков и от 4 до 64 операционных блоков. При переходе к асинхронной схемотехнике будет оправдано увеличение количества управляющих блоков до нескольких десятков и операционных блоков до нескольких сотен. Такой переход вместе с соответствующим увеличением числа блоков обеспечит увеличение пиковой производительности более чем на два порядка и средней производительности более чем на порядок. Самым существенным фактором, влияющим на архитектурные решения 266 современных процессоров, является постоянное совершенствование технологии производства интегральных схем. Следствием этого являются рост уровня интеграции, уменьшение задержек в вентилях и межсоединениях, снижение энергопотребления при переключении вентилей. В целом с ростом уровня интеграции увеличиваются ресурсы на кристалле и повышается тактовая частота работы микросхем, что позволяет повышать производительность процессоров за счет использования двух направлений. Первое из них связано с увеличением объѐма внутренней кэш-памяти и совершенствованием способов еѐ организации. Второе направление связано с реализацией в процессорах конвейерной обработки и внедрения параллельной обработки в нескольких конвейерах на разных стадиях выборки и выполнения команд. Практически все перспективные архитектурные решения, накопленные в процессе конкуренции различных производителей, находят своѐ воплощение в новых архитектурах. По этой причине в архитектуре современных процессоров различных фирм-производителей имеется много общего. На сегодняшний день можно выделить следующие основные тенденции развития архитектур современных процессоров: Применение суперскалярной обработки с динамическим параллелизмом в процессорах с чисто аппаратным механизмом выборки несвязанных команд программы из памяти и параллельном запуске их на исполнение (например, процессоры Pentium, PowerPC, Alpha, SPARC и др.). Развитие суперскалярной обработки со статическим параллелизмом, при котором выявление скрытого параллелизма и определение возможности параллельного исполнения команд возлагается на оптимизирующий компилятор (например, процессоры Itanium, Crusoe и др.). Использование аппаратных средств, обеспечивающих векторную обработку данных. Современный процессор – это 64-разрядный суперконвейерный, суперскалярный процессор с RISC-операционным ядром и большим числом дополнительных блоков, реализующий динамическое исполнение команд. Для эффективной обработки данных мультимедиа и графики система команд современных процессоров расширяется за счѐт специализированных команд мультимедийной обработки: например, команд расширений MMX, SSE, SSE2 в процессорах компании Intel; ActiVec – IBM, Motorola; VIS – SPARC; 3DNow! – AMD. Для унификации структур обработки данных в структуры некоторых современных процессоров включают специальные преобразователи исходных кодов команд во внутренние машинные команды «исполнительного процессора» 267 (например, сложных CISC-команд в RISC-команды в процессорах Pentium, AMD или VLIW-команды в процессорах Эльбрус). Переход к следующему поколению вычислительных машин и систем связан с масштабными исследованиями, которые ведутся по созданию процессорных элементов и компьютеров в целом с использованием принципиально иной элементной базы: биполярных молекул, молекул ДНК, квантовых кубитов и света. 268 ЛИТЕРАТУРА а) основная литература: 1. Архитектура вычислительных машин и систем [Электронный ресурс]: учебное пособие / А. Г. Мусихин, Н. А. Смирнов. – М.: РТУ МИРЭА, 2019. – Электрон. опт. диск (ISO). 2. Архитектура вычислительных машин и систем. Ч. 2 [Электронный ресурс]: учебное пособие / А. Г. Мусихин, Н. А. Смирнов. – М.: РТУ МИРЭА, 2019. – Электрон. опт. диск (ISO) 3. Архитектура вычислительных машин и систем [Электронный ресурс]: метод. рекомендации к контр. работам / А. Г. Мусихин, Н. А. Смирнов. – М.: РТУ МИРЭА, 2019. – Электрон. опт. диск (ISO) 4. Архитектура вычислительных машин и систем [Электронный ресурс]: практикум / Н. А. Смирнов [и др.]. – М.: РТУ МИРЭА, 2019. – Электрон. опт. диск (ISO) 5. Архитектура вычислительных машин и систем. Ч.2 [Электронный ресурс]: методич. рекомендации к контр. работам / А. Г. Мусихин, Н. А. Смирнов. – М.: РТУ МИРЭА, 2020. – Электрон. опт. диск (ISO) 6. Организация ЭВМ и систем : Учебник для вузов / С.А.Орлов – СПб.: Питер, 2018. – 688 с. 7. Современные операционные системы : Пер. с англ. / Э. Таненбаум., Х.Бос – СПб.: Питер, 2019. – 1038 с.https://library.mirea.ru/books/38823 (дата обращения 01.10.2021). 8. Сетевые операционные системы : Учебник для вузов / В. Г. Олифер, Н. А. Олифер. – СПб.: Питер, 2009. – 668 с. б) дополнительная литература: 9. Архитектура компьютера : Пер. с англ. / Э. Таненбаум, Т. Остин. – СПб.: Питер, 2018. – 812 с. 10. Архитектура ЭВМ и систем : учебное пособие для бакалавров / О. П. Новожилов. – М.: Юрайт, 2015. – 528 с. 11. Основы современных операционных систем : Учеб. пособие для вузов / В. О. Сафонов. – М.: ИНТУИТ, 2011. – 583 с. https://library.mirea.ru/books/43684 (дата обращения 01.10.2021). 12. Архитектура ЭВМ и операционные среды : Учебник для вузов / В. Г. Баула, А. Н. Томилин, Д. Ю. Волканов. – М.: Академия, 2012. – 336 с. https://library.mirea.ru/books/44727 (дата обращения 01.10.2021). 269 13. ГОСТ 15971-90. Системы обработки информации. Термины и определения. М.: Издательство стандартов, 1991. – 12 с. http://docs.cntd.ru/document/gost-15971-90 (дата обращения 01.10.2021). 14. Стандарт ISO/IEC 2382-1. Http:// ict. nsc. ru› jspui/ bitstream/ ICT…ISOIEC_2382-1.pdf. – 42 с. в) Современные профессиональные базы данных и информационные справочные системы: http://www.intuit.ru/ (дата обращения 01.10.2021). https://habr.com/en/all/ (дата обращения 01.10.2021). https://www.top500.org (дата обращения 01.10.2021). 270 Сведения об авторах Мусихин Александр Григорьевич, кандидат технических наук, доцент кафедры вычислительной техники Института информационных технологий РТУ МИРЭА. Смирнов Николай Алексеевич, кандидат технических наук, доцент, профессор кафедры вычислительной техники Института информационных технологий РТУ МИРЭА. 271