История развития, классификация кс
История развития компьютера начинается, вероятно, с 1836 года. Тогда Ч. Беббидж предложил структуру, по сути последовательной, машины для расчета астрономических и морских таблиц. Он видел ее как совокупность: склад (50 40-ка значных десятичных чисел) (прообраз запоминающего устройства ЗУ); мельница (сложение, вычитание, умножение, деление) два аккумулятора для промежуточных результатов (прообраз арифметико-логического устройства АЛУ); перфокарта для переноса со склада к мельнице и обратно чисел (прообраз устройства управления УУ).
Рис. 1.1. Укрупненная схема структуры последовательной машины
На рис.1.1. приведена укрупненная схема предложенного решения. Задача решалась последовательностью действий через одно АЛУ. В дальнейшем ход последовательности стал определять счетчик команд (указатель команд, в развитии адресный процессор). Внешние устройства в реальных системах - клавиатура, мышь, дисплеи, сложные технические устройства и т. п. реализуют, при необходимости, связь оператором и т. д. Запоминающее устройство - сегодня иерархическая память различного быстродействия, дисководы и т. п. поставляют числа и получают результат. Цифра стала основой функционирования системы, это и операнд, это и команда.
В 1918 М.А. Бонч-Бруевич создает на двух электронных лампах триггер. Ставший, в своей схеме, основой запоминающих быстродействующих устройств – регистров и т.п.
В 1931 Винн-Вильямс создает счетчик на электронных лампах.
Начавшееся десятилетие практически стало стартом теории компьютеров. Наряду с аппаратной частью поднимаются на первую ступень и теория построения КС. Не зависимо друг от друга Э.Х. Пост (США) и А.М. Тьюринг (Великобритания) дали уточненное понятие «алгоритм» и доказали универсальность не которого, весьма небольшого набора команд.
Рис. 1.2. Классический цикл управления
Они предложили довольно простую архитектуру, перекликающуюся с архитектурой Ч. Беббиджа. Пусть, это бесконечная лента, ячейки которой имеют координаты, в каждой ячейке записана метка или отсутствует запись (True или False), эта метка считывается. Каретка движется вдоль ленты.
Команды (6 команд):
1. Движение влево;
2. Движение вправо;
3. Запись метки;
4. Стирание метки;
5. Передача управления по состоянию ячейки (сдвиг на метку с номером n1 или n2);
6. Остановка.
Номер команды i (ni) изменяется последовательно, нарастая или убывая. По пятой команде номер может изменяется скачком.
Оба автора доказали то что любая алгоритмизируемая задача решается на приведенной машине. Это сняло вопросы о полноте набора команд и длине операнда.
В 1940 г. Ноберт Винер предложил за базу функционирования компьютера принять двоичную систему исчисления.
В 1946 г. Джон фон Нейман прорабатывает архитектуру компьютера, в которой данные и команды размещаются в запоминающем устройстве. Их различие определяется только адресом. По сути именно здесь появляется четко счетчик команд.
Остановимся еще на классическом цикле управления фон Неймана установившемся в начальные годы развития компьютеров рис.1.2. Основа этого цикла содержимое указателя команд. По нему извлекается команда, дешифрируется, выполняется. Для целей управления и для соблюдения универсальности проверяется наличие сигналов внешних прерываний, если имело место, текущее значение указателя команд переносится в стек. Новое значение адреса первой команды программы обработки прерывания передается в указатель команд. При отсутствии прерывания указатель команд наращивается на размерность команды в байтах и цикл повторяется. Как видим, цикл бесконечен. Он требует только начального адреса при старте. Такие архитектуры называют еще системами управляемыми указателем команд.
В 1944 году появляется первая релейная машина Марк 1, и в 1947 вторая Марк 2 (руководитель работы – американский физик Г. Айкен).
С 50-х годов началась последовательность успешных машин. Это и ЭДСАК 1949 г. (Кембридж руководитель М. Уилкс), МЭСМ (малая счетная машина) -1951г., БЭСМ – 1952 г. (СССР руководитель С.А. Лебедев). Мировой парк машин в 1965 г. превысил 50 тысяч шт., а в 1975 г. – 200 тысяч шт.
В 50-е годы сформировалось понятие классической архитектуры последовательной машины. Оно базируется на предложениях фон Неймана:
1. Единственная последовательно адресуемая память;
2. Память линейна (одномерна);
3. Отсутствует физическое различие между командой и данными кроме их расположения в памяти;
4. Отсутствуют какие либо признаки идентификации типа данных.
Новые положения, которые принесли первые десятилетия создания компьютеров, дополнили архитектуру:
1. Введение регистров общего назначения (РОН). По-видимому, это 1956 год фирма Feranti машина Pegasus;
2. Косвенная адресация, т.е. команда, указывает адрес, по которому находится информация о месте положения операнда. Вероятно это 1958 год, фирма IBM машина 709;
3. Индексные регистры, адрес операнда формируется добавлением содержимого регистра умноженного на размер операнда к базовому адресу. Манчестерский университет, 1949 год;
4. Виртуальная память. Память на страницы. Адрес страниц памяти расположения программы становится виртуальным. Буфер трансляции адреса проецирует ее на свободную область физических адресов. Система Atlas Манчестерский университет 1959 г.
5. Программные прерывания. Univac 1103, 1954 г.
6. Данные в форме плавающей точки. Компьютеры NORC и 704 IBM 1954 г.
7. Мультипроцессорная обработка потоки из общей памяти. Конец 50-х начало 60-х годов. В ряде машин слабо связано между собой.
Приведенная хронология не претендует на строгость и полноту. Важно понять то, что тот образ, который имеют современные компьютеры, сформировался на простых положениях в прошлом столетии.
Одновременно начаты попытки описать возникающие структуры.
Классификация вычислительных систем. Рассмотрим «академические» варианты предложенных классификаций.
Майкл Флинн предложил в 1966 году следующую классификацию вычислительных систем, первый слой которой основан на количестве потоков входных данных и количестве потоков команд, которые эти данные обрабатывают:
Один поток инструкций | Несколько потоков инструкций | |
Один поток данных | SISD | MISD |
Несколько потоков данных | SIMD | MIMD |
SISD (Single Instruction Single Data): это обычные последовательные компьютеры. Программа принимает один поток данных и выполняет один поток инструкций по обработке этих данных.
MISD (Multiple Instruction Single Data):разные потоки инструкций выполняются с одними и теми же данными. Обычно такие системы не приводят к ускорению вычислений, так как разные инструкции оперируют одними и теми же данными, в результате на выходе системы получается один поток данных. К таким системам относят различные системы дублирования и защиты от сбоев, когда, например, несколько процессоров дублируют вычисления друг друга для надёжности. Иногда к этой категории относят конвейерные архитектуры. Среди процессоров производства Intel, конвейер присутствует, начиная с процессора Pentium.
SIMD (Single Instruction Multiple Data): один поток инструкций выполняет вычисления одновременно с разными данными. Например, выполняется сложение одновременно восьми пар чисел. Такие компьютеры называются векторными, так как подобные операции выполняются аналогично операциям с векторами (когда, например, сложение двух векторов означает одновременное сложение всех их компонентов). Зачастую векторные инструкции присутствуют в дополнение к обычным «скалярным» инструкциям, и называются SIMD-расширением (или векторным расширением). Примеры популярных SIMD-расширений: MMX, 3DNow!, SSE и др.
MIMD (Multiple Instruction Multiple Data): разные потоки инструкций оперируют различными данными. Это системы наиболее общего вида, поэтому их проще всего использовать для решения различных параллельных задач. Основное внимание разработчиков процессоров сегодня направлено именно на данный сектор архитектурных решений.
Классификация Джонсона:MIMD-системы, в свою очередь, принято разделять на системы с общей памятью (несколько вычислителей имеют общую память) и системы с распределенной памятью (каждый вычислитель имеет свою память; вычислители могут обмениваться данными). Кроме того, существуют системы с неоднородным доступом к памяти (NUMA) — в которых доступ к памяти других вычислителей существует, но он значительно медленнее, чем доступ к «своей» памяти.
Системами с общей памятью называют системы, в которых несколько процессоров имеют общую оперативную память. К системам этого типа относят и компьютеры с многоядерными процессорами (multi-core). Данное решение очень характерно для графических процессоров (GPU).
Преимущества: Не требуется обмен данными: данные, помещённые в память одним процессором, автоматически становятся доступными другим процессорам. Соответственно, система не должна тратить время на пересылку данных. Для таких систем в программах обычно создают несколько вычислительных потоков, или же снабдить программу специальными директивами (например, технология OpenMP), которые подскажут компилятору, как распараллеливать программу. Кроме того, возможно полностью автоматическое распараллеливание программы компилятором.
Компактность систем: может быть реализована в виде нескольких процессоров на одной материнской плате, и/или в виде нескольких ядер внутри процессора.
Недостатки: Зависимости между данными и влияние на ветвление циклов управления результатов операций. Для решения подобных проблем используют критические секции. Если поток инструкций первого процесса входит в критическую секцию с идентификатором N, то поток инструкций другого процесса не сможет войти в критическую секцию с тем же идентификатором, и будет ждать, пока первый процесс не выйдет из этой секции.
Проблема совместного доступа к памяти: нужно осторожно работать с теми участками памяти, для которых возможно одновременное выполнение записи одним процессором и другой операции (записи или чтения) другим процессором.
Проблема синхронности КЭШей (промежуточная скоростная память подкачки данных) автономно от процесса расчетов. Если один процессор изменил данные в оперативной памяти, и эти данные прокэшированы другими процессорами, то их КЭШи должны автоматически обновиться. Проблема медленного обращения к оперативной памяти и её ограниченного объёма: процессор работает быстро, а память — медленно, поэтому даже одному процессору приходится ждать загрузки данных из оперативной памяти. Если же процессоров несколько, то им приходится ждать ещё дольше. Скорость работы каждого процессора с памятью становится тем меньше, чем большее число процессоров имеется в системе. Кроме того, объём памяти не может быть сделан сколь угодно большим, так как для этого придётся увеличивать разрядность шины памяти.
Проблема масштабируемости: очень сложно сделать подобную систему с больши́м числом процессоров, так как очень сильно возрастает стоимость и падает эффективность работы из-за описанных выше проблем. Практически все подобные системы имеют ≤ 8 процессоров.
Системы с распределённой памятью содержит несколько процессоров, каждый имеет свою оперативную память. Для обеспечения обмена информацией процессоры соединены каналами связи. По характеру связей такие системы делятся на системы с универсальной коммутацией (каждый процессор может передать информацию любому другому процессору) и системы с жёсткой (фиксированной) коммутацией (каждый процессор может передать информацию только ограниченному числу других процессоров).
Системы с распределённой памятью, в которых каждый вычислительный узел представляет собой полноценный компьютер со своей копией операционной системы, называют кластерными (или «кластерами»). Кластеры обычно представляют собой шкафы с компактными системными блоками, которые соединены друг с другом каналами связи (посредством специальных коммутаторов).
Преимущества: Простота и дешевизна построения: можно взять большое количество обычных компьютеров, соединить их каналами связи (например, Ethernet), и получить кластер.
Эффективное решение задач, требующих малого обмена данными: каждый компьютер будет работать в полную мощность, не ожидая, пока освободится доступ к оперативной памяти.
Возможность решать задачи, требующие очень больших объёмов оперативной памяти: суммарный объём памяти системы можно сделать сколь угодно большим. Требуется лишь, чтобы задача разбивалась на относительно независимые подзадачи.
Возможность масштабирования: можно соединить сколько угодно вычислительных узлов вместе, при этом стоимость системы будет пропорциональна числу узлов. В связи с этим большинство самых мощных вычислительных систем в мире являются кластерными.
Недостатки: Проблема обмена данными: обмен данными в таких системах обычно идёт очень медленно по сравнению со скоростью вычислений (и с большими задержками). Поэтому задачи, требующие интенсивного обмена, невозможно решить на таких системах эффективно.
Сложное программирование: программист должен продумать обмен данными, который будет присутствовать в системе, должен сам запрограммировать этот обмен (например, с помощью MPI). При неправильном программировании велика вероятность взаимных блокировок: когда, например, два процессора ждут данных друг от друга. Проблема блокировок есть и в системах с общей памятью, но здесь она проявляет себя гораздо чаще. Автоматическая организация обмена данными возможна лишь для некоторых частных случаев.
Гибридные системы: Многие современные системы представляют собой иерархию описанных выше систем. Например, современные процессоры являются конвейерными процессорами, и имеют набор векторных инструкций (MMX, SSE и т.п.), позволяющих выполнять одновременные вычисления с разными данными. Кроме того, процессор может иметь два ядра, или может быть несколько процессоров в компьютере. Таким образом, на этом уровне система представляет собой систему с общей памятью. Затем можно соединить несколько таких компьютеров в кластер, образовав новый уровень иерархии: систему с распределённой памятью.