История развития, классификация кс

История развития компьютера начинается, вероятно, с 1836 года. Тогда Ч. Беббидж предложил структуру, по сути последовательной, машины для расчета астрономических и морских таблиц. Он видел ее как совокупность: склад (50 40-ка значных десятичных чисел) (прообраз запоминающего устройства ЗУ); мельница (сложение, вычитание, умножение, деление) два аккумулятора для промежуточных результатов (прообраз арифметико-логического устройства АЛУ); перфокарта для переноса со склада к мельнице и обратно чисел (прообраз устройства управления УУ).

история развития, классификация кс - student2.ru

Рис. 1.1. Укрупненная схема структуры последовательной машины

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

В 1918 М.А. Бонч-Бруевич создает на двух электронных лампах триггер. Ставший, в своей схеме, основой запоминающих быстродействующих устройств – регистров и т.п.

В 1931 Винн-Вильямс создает счетчик на электронных лампах.

Начавшееся десятилетие практически стало стартом теории компьютеров. Наряду с аппаратной частью поднимаются на первую ступень и теория построения КС. Не зависимо друг от друга Э.Х. Пост (США) и А.М. Тьюринг (Великобритания) дали уточненное понятие «алгоритм» и доказали универсальность не которого, весьма небольшого набора команд.

история развития, классификация кс - student2.ru

Рис. 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 и т.п.), поз­во­ляю­щих вы­пол­нять од­но­вре­мен­ные вы­чис­ле­ния с раз­ны­ми дан­ны­ми. Кро­ме то­го, про­цес­сор мо­жет иметь два яд­ра, или мо­жет быть не­сколь­ко про­цес­со­ров в ком­пью­те­ре. Та­ким об­ра­зом, на этом уров­не си­сте­ма пред­став­ля­ет со­бой си­сте­му с об­щей па­мя­тью. За­тем мож­но со­еди­нить не­сколь­ко та­ких ком­пью­те­ров в кла­стер, об­ра­зо­вав но­вый уро­вень иерар­хии: си­сте­му с рас­пре­де­лён­ной па­мя­тью.

Наши рекомендации