Принципы работы компьютеров
Принято считать, что первые принципы работы автоматических вычислительных аппаратов были разработаны в XVII веке. Изобретатели арифмометров Б. Паскаль и Г. Лейбниц высказали ряд идей, касающихся роли вычислительной техники будущего. Так, Лейбниц предполагал, что вычислительные машины будут пригодны для работы не только с цифрами, но и с символами текстов и символами формул. Машины будущего, по мнению Г. Лейбница, станут самостоятельно выводить формулы также, как арифмометр подсчитывает цифры.
В XIX веке математик Ч. Бэббидж разработал проект вычислительной машины, способной без участия человека выполнять вычисления. В основе названной им Аналитической машины лежал принцип программного управления. Проект предполагал подготовку программ на перфокартах, а сама машина должна была иметь запоминающее устройство для хранения данных. Практическая реализация проекта в XIX веке была невозможной.
Коренной переворот в вычислительной технике произошел в сороковых годах XX века. В 1945 году группа американских специалистов под руководством Дж. Эккерта и Дж. Моугли создала первую электронную машину ЭНИАК (ENIAC). К этой работе был привлечен математик Джон фон Нейман, сформулировавший общие принципы функционирования компьютеров, согласно которым компьютер должен состоять из четырех основных частей: арифметическо-логического устройства (АЛУ), предназначенного для выполнения арифметических и логических операций; устройства управления, организующего процесс выполнения программ;
запоминающего устройства (ЗУ), состоящего из определенного количества пронумерованных ячеек, в которых хранятся программа, данные и промежуточные результаты и устройства ввода-вывода, позволяющие вводить программу и данные и получать результаты обработки.
Процесс выборки команд осуществляется в соответствии с нумерацией ячеек памяти. На каждом шаге счетчик адресов увеличивается. Используемые в программе данные занимают подчиненное положение по отношению к машинным командам, которые определяют последовательность и способ их обработки. Программа может задавать выполнение арифметическо-логических операций, осуществлять чтение — запись в ЗУ или обмен с внешними устройствами. Данные не могут влиять на последовательность выполнения программы за исключением случаев выполнения некорректной операции (например, попытка деления на нуль). В подобных случаях необходим переход к программе обработки ошибок, что сохраняет преимущественное положение команд. Изменение порядка выборки адресов ячеек программы осуществляется специальной командой передачи управления (в некоторых языках высокого уровня, например Бейсик, существовал аналог этой машинной команды (оператор GOTO)).
Рассмотренный принцип работы компьютера получил название «управление потоком команд». Компьютер, воплотивший эти принципы, был построен в 1949 М. Уилсом. Недостатком принципа «управления потоком команд» является слабое использование производительности компьютера.
Спустя некоторое время после создания первых ЭВМ выяснилось, что практически каждая программа имеет группы команд, которые могут обрабатываться независимо друг от друга, т.е вычисления на компьютере обладают естественным параллелизмом. Было также установлено, что параллелизм возникает либо из-за независимости потоков команд, либо из-за обработки не связанных между собой данных.
Обнаружить параллелизм можно в большинстве программ. Проанализируем программу форматного контроля номера вагона.
20 dim X$, A$ 30 dim L%,F%, Z%, S%, X1% 40 print 50 print “ВВЕДИТЕ НОМЕР ВАГОНА:”; 60 L%= 0 70 F%=1 80 while L%<8 90 X$=input$(1) 100 M%=asc(X$) 110 if M%<48 or M%>57 then 210 120 L%=L%+1 130 print X$ 140 X1%=val(X$) 150 A$=A$+X$ 160 if L%>7 then 210 170 if F%=2 then f%=1 else f%=2 180 Z%=F%*X1% 190 if Z%>10 then Z%=Z%-9 200 S%=S%+Z% 210 wend 220 K%=int(S%/10)+1)*10-S% 230 if K%=10 then K%=0 240 print 250 if K%=X1% then print A$;” - ВЕРНО” else print A$;” - НЕ ВЕРНО” 260 end
Нетрудно заметить, что в этой программе возможно выполнять параллельно операторы 20- 40, 60-70, 120-150, 230-240 — при изменении нумерации строк внутри этих групп, правильность выполнения программы не изменяется.
Использование эффекта параллельности выполнения команд и обработки данных явилось одним из перспективным направлением развития микропроцессоров и с конца 90-х годов на транспорт начали поступать компьютеры, в архитектурах процессоров которых, этот принцип был реализован. Рассмотрим их.
Архитектура SISD (один поток команд, один поток данных) функционирует в основном с принципами фон Неймана. Для увеличения производительности SISD процессоры имеют конвейер фаз операций. Процесс выполнения каждой машинной команды разбивается на последовательность определенных типовых микрокоманд. Внутри процессора находятся независимые блоки, быстро выполняющие одну конкретную микрокоманду. Эффект повышения быстродействия получается из-за того, что часть блоков процессора работает параллельно друг другу.
Конвейером фаз операций оснащались все высокопроизводительные процессоры больших ЭВМ, а также микропроцессоры, начиная с Intel-80486.
Улучшение архитектуры SISD привело к появлению RISC- процессоров (вычисление с сокращенным набором команд). Основное отличие RISC-микропроцессоров заключается в способах адресации данных в памяти ЭВМ. До их появления все процессоры ориентировались на выполнение операций ячейками памяти. Адресация в память требовала значительного машинного времени, увеличивался размер самой программы. Некоторые виды адресации выполнялись за 5 машинных тактов и занимали 3 байта памяти. Адресация в регистр была вспомогательной из-за небольшого количества регистров общего назначения. Так, в микропроцессоре 80286 из 13 регистров имеется только 4 регистров общего назначения, а все остальные выполняют специальные функции. В ЕС ЭВМ имеется 16 регистров, емкостью 32 бита каждого регистра.
Небольшое количество регистров в процессорах объясняется малой степенью интеграции элементной базы — электронных микросхем. Увеличение количества регистров было невозможно.
RISC-процессоры вследствие большой степени интеграции позволили отказаться от команд типа “взять из памяти — поместить в память” и большинство операций стало возможно осуществлять командами типа “взять из регистра — поместить в регистр”, что позволило резко увеличить производительность компьютеров.