На пальцах: принцип работы компьютера
Развитие наук и технический прогресс не только просвещают общество. Как это ни странно, наука вовсе не изживает примитивный мистицизм языческого толка - часто патриархальные духи природы всего только подменяются духами науки и техники. Увидев компьютер, прапрадед сказал бы "колдовство", и это ему все объяснило бы. Праправнук говорит "электроника", и это ему тоже все объясняет, хотя понимает он, правду сказать, не больше своего предка.
(c) Компьютерная газета
Чтобы не быть голословным, опишу вопиющий, на мой взгляд, случай. Все ли помнят, как передавалась из рук в руки ксерокопия заметки о том, что ученые якобы установили способность кактуса, стоящего рядом с монитором компьютера, "оттягивать на себя вредные излучения"? С тех пор я не раз видел кактусы рядом с мониторами. Точь-в-точь: "Мне давеча на ярмарке цыганка верное средство от сглаза присоветовала. Ты, кума, вот что сделай...">
В литературе можно встретить утверждение, что компьютеры - самые сложные устройства из всех, когда-либо созданных человечеством. Очень похоже на правду. Тем не менее, принципы устройства и работы компьютера можно понять буквально из объяснений "на пальцах". Такие объяснения, пусть лишенные технических деталей, представляются мне очень важными: только фундаментальный акт понимания спасает человека от примитивного мистицизма или, если хотите, защищает от колдовства шаманов века электроники.
Итак, что же такое компьютер? Вычислитель, электронная вычислительная машина. Давайте для начала разберемся, как механизмы способны вычислять в принципе. Лучше один раз увидеть - вот и мы, в стиле "Очумелых ручек", построим простейшее устройство для сложения небольших чисел. Для этого потребуется взять две школьные линейки и положить их вертикально, одну рядом с другой, шкалой к шкале, чтобы риски с одинаковыми числами совпадали. Чтобы сложить 2 и 3, произведем три шага. Во-первых, совместим "ноль" на правой линейке с "двойкой" на левой. Во-вторых, найдем на правой линейке "тройку". В-третьих, посмотрим, какое число находится на левой линейке напротив упомянутой "тройки". Спорю, что результатом будет "пять".
Если задуматься, то мы производили чисто механические манипуляции: задали первое слагаемое сдвигом линеек друг относительно друга, задали второе слагаемое (отложили глазами) и считали результат. Мы не совершали интеллектуальной работы, не суммировали чисел, их сложил агрегат! Простой и понятный эксперимент доказал, что механическое устройство с ручным приводом способно производить вычисления.
Если пример сложения чисел при помощи двух скользящих шкал показался вам смехотворным, то примите во внимание следующее. Логарифмическая линейка, бывшая в течение двух веков одним из главных инструментов ученых и инженеров, реализует данный принцип. Вот только вместо самих чисел она складывает их логарифмы, то есть, согласно элементарной алгебре, перемножает числа.
Счеты, по моему мнению, нельзя отнести к разряду вычислительных устройств. Однако в этом приспособлении реализована яркая идея - числа на счетах выставляются поразрядно: один ряд костяшек представляет единицы, другой - десятки и так далее. Воспользовавшись идеей поразрядного представления чисел, можно создать более совершенное вычислительное устройство.
Скажем, взять вместо линеек колесики, написать на ободе цифры от 0 до 9, надеть колесики на общую ось, добавить несколько шестеренок, рукоятку... Получится механический счетчик, такой, как ставят на велосипеды, чтобы подсчитывать пробег, то есть количество оборотов колеса. Выставим на счетчике какое-нибудь число и три раза повернем рукоятку. На счетчике окажется сумма исходного числа и трех. Примерно так и были устроены арифмометры, долгие годы верой и правдой служившие нашим отцам и дедам. Нет, настоящие арифмометры были посложнее, но принцип их действия уже понятен, не так ли?
Итак, мы убедились, что можно строить механические устройства для вычислений. Руководствуясь общими принципами, нетрудно сконструировать машину, которая, например, могла бы сложить два числа и умножить результат на третье, иными словами - машину, выполняющую вычисления по формуле "Х плюс У умножить на Z". Проблема в том, что формул, по которым нужно вычислять, - бесконечное количество, и физически невозможно строить новую машину для каждого конкретного случая.
Разрешению этой проблемы посвятил свою жизнь английский математик Чарльз Бэббидж. "Аналитическая машина" Бэббиджа должна была стать управляемой перфокартами универсальной машиной для вычислений. Формулы для расчета и конкретные числа предполагалось задавать при помощи отверстий в перфокартах. Увы, универсальный механический вычислитель никогда так и не был построен. Идея запрограммированных вычислений была реализована в электронных вычислительных машинах.
Идея перфокарточного управления принадлежит французу Жаккару. В ткацком станке Жаккара поверх частокола рычажков закладывалась дощечка с отверстиями. Одни рычажки попадали в дырочки, другие - оставались нажатыми и блокировали рычаги станка. В результате ткань получалась с узором, заданным расположением дырочек. Дощечку с дырочками назвали "перфокартой".
Важнейший для понимания работы компьютера принцип программирования удивительно прост. Машина, единственно способная сложить 2 и 3, бесполезна для практических целей. Устройству следует придать большую универсальность. Пусть наш агрегат сможет складывать любые числа. Почему бы не пойти еще дальше, построив машину для любых арифметических операций над любыми числами? Управлять универсальной машиной будем, взяв пример с Жаккара, задавая и числа, и операции, которые над ними нужно выполнить, при помощи перфокарт. Набор перфокарт, описывающий конкретное вычисление, и будет программой. Право слово, проще некуда.
На этом закончим с механическими вычислителями и перейдем к электрическим машинам. К сожалению, их устройство не так очевидно, как набор колесиков и шестеренок, но доказать, что электрические цепи вычисляют не хуже механических агрегатов, довольно просто. Возьмем кусок проволоки с сопротивлением 2 Ом, прикрутим к нему другой, с сопротивлением 3 Ом. Измерим общее сопротивление получившейся цепи. 5 Ом! Теперь подключим наш кусок провода к квадратной батарейке (4.5 В) и измерим силу тока. Получится 0.9 ампера. Взгляните: мы собрали электрическую схему, которая складывает 2 и 3, а потом делит 4.5 на результат!
Этот пример доказывает возможность вычислений при помощи электрических цепей. Наш способ является лишь одним из многих возможных, современные компьютеры устроены иначе. Тем не менее, тайна уже развеяна. Кстати, хотите - верьте, хотите - нет, но знаменитый Эниак, тот самый, что считал баллистические таблицы для армии США, был большим, но таким же примитивным!
По принципу своего действия он проще "Аналитической машины" Бэббиджа. На деле Эниак был набором блоков, одни из которых складывали числа, другие перемножали, третьи (панели переключателей) позволяли задавать значения чисел. Так вот, для каждого конкретного расчета (набора формул) из этих блоков собиралась новая электрическая схема.
Представьте себе, Эниак не программировался в том смысле, какой мы обсуждали. Как вы помните, механическую машину физически невозможно перестраивать для каждого возможного набора формул. Теоретически это, конечно, осуществимо, но слишком накладно с практической точки зрения. Задача переработки схемы и пересоединения стандартных блоков электрического вычислителя для каждого конкретного расчета оказалась вполне исполнимой.
Эниак и современные компьютеры разделят всего один шаг. Тот самый, который не удалось совершить Бэббиджу, так и не воплотившему чертежи "Аналитической машины" в дерево и металл. В нынешнем поколении компьютеров реализована идея универсального вычислителя, то есть машины для любых арифметических операций над любыми числами. Управляются они программами, которые суть описание чисел и операций, которые над этими числами нужно выполнить.
Еще о современных компьютерах говорят, что они построены согласно "архитектуре фон Неймана". Что же, и "архитектуру фон Неймана" очень несложно понять: мы уже подготовлены! Припомним, что программу работы механического вычислителя (колеса и шестерни) механически записывали (дырками) на механическом же носителе - деревянной перфокарте. Потом нужно было вставить перфокарту в машину и запустить ее колеса...
Мысль, что программу для электрической машины можно записать электрическим же образом, лежит, что называется, на поверхности. Для этого понадобится электрическое устройство, аналогичное перфокарте, то есть способное хранить программу в "электрическом" виде. Такое устройство изобрели и назвали (держитесь крепче!) памятью.
Занести программу в память можно было разными путями, скажем, просто набрать при помощи набора переключателей. Утомительный способ, поэтому придумали устройство, через которое пропускали бумажные перфокарты, или перфоленту, а уж оно само записывало их содержимое (дырочки, дырочки...) в память. После ввода программы в память оставалось нажать кнопку пуска компьютера - и программа исполнялась.
Так вот, "архитектура фон Неймана" описывает "компьютер с программой, хранимой в памяти". Современные персональные компьютеры, наряду с обычной, оборудованы так называемой постоянной памятью. Ее содержимое не исчезает при отключении машины от сети. При включении машины она немедленно начинает исполнять записанную изготовителем в постоянную память программу. Вот почему кажется, будто компьютер что-то "делает сам".
Напоследок хотелось бы разъяснить, что компьютер вовсе не работает с числами. Ничего подобного: компьютер работает с электрическими сигналами. Правила, по которым одни сигналы превращаются в другие, заданы, во-первых, конструкцией машины, а во-вторых, программой, которую она исполняет. И за первое, и за второе отвечает человек. А человек приписывает сигналам любой смысл, который пожелает. Именно по этой причине при помощи компьютера одинаково легко обработать и числа, и текст, и звук, и изображение.
Надеюсь, я вас убедил, что суть вычислительных машин вполне поддается пониманию без шамана, призывающего дух компьютера заклинаниями "Электроника!", "Микросхемы!", "Двоичная система счисления!", "Архитектура фон Неймана!"...
Евгений Щербатюк
(c) Компьютерная газета
Чтобы не быть голословным, опишу вопиющий, на мой взгляд, случай. Все ли помнят, как передавалась из рук в руки ксерокопия заметки о том, что ученые якобы установили способность кактуса, стоящего рядом с монитором компьютера, "оттягивать на себя вредные излучения"? С тех пор я не раз видел кактусы рядом с мониторами. Точь-в-точь: "Мне давеча на ярмарке цыганка верное средство от сглаза присоветовала. Ты, кума, вот что сделай...">
В литературе можно встретить утверждение, что компьютеры - самые сложные устройства из всех, когда-либо созданных человечеством. Очень похоже на правду. Тем не менее, принципы устройства и работы компьютера можно понять буквально из объяснений "на пальцах". Такие объяснения, пусть лишенные технических деталей, представляются мне очень важными: только фундаментальный акт понимания спасает человека от примитивного мистицизма или, если хотите, защищает от колдовства шаманов века электроники.
Итак, что же такое компьютер? Вычислитель, электронная вычислительная машина. Давайте для начала разберемся, как механизмы способны вычислять в принципе. Лучше один раз увидеть - вот и мы, в стиле "Очумелых ручек", построим простейшее устройство для сложения небольших чисел. Для этого потребуется взять две школьные линейки и положить их вертикально, одну рядом с другой, шкалой к шкале, чтобы риски с одинаковыми числами совпадали. Чтобы сложить 2 и 3, произведем три шага. Во-первых, совместим "ноль" на правой линейке с "двойкой" на левой. Во-вторых, найдем на правой линейке "тройку". В-третьих, посмотрим, какое число находится на левой линейке напротив упомянутой "тройки". Спорю, что результатом будет "пять".
Если задуматься, то мы производили чисто механические манипуляции: задали первое слагаемое сдвигом линеек друг относительно друга, задали второе слагаемое (отложили глазами) и считали результат. Мы не совершали интеллектуальной работы, не суммировали чисел, их сложил агрегат! Простой и понятный эксперимент доказал, что механическое устройство с ручным приводом способно производить вычисления.
Если пример сложения чисел при помощи двух скользящих шкал показался вам смехотворным, то примите во внимание следующее. Логарифмическая линейка, бывшая в течение двух веков одним из главных инструментов ученых и инженеров, реализует данный принцип. Вот только вместо самих чисел она складывает их логарифмы, то есть, согласно элементарной алгебре, перемножает числа.
Счеты, по моему мнению, нельзя отнести к разряду вычислительных устройств. Однако в этом приспособлении реализована яркая идея - числа на счетах выставляются поразрядно: один ряд костяшек представляет единицы, другой - десятки и так далее. Воспользовавшись идеей поразрядного представления чисел, можно создать более совершенное вычислительное устройство.
Скажем, взять вместо линеек колесики, написать на ободе цифры от 0 до 9, надеть колесики на общую ось, добавить несколько шестеренок, рукоятку... Получится механический счетчик, такой, как ставят на велосипеды, чтобы подсчитывать пробег, то есть количество оборотов колеса. Выставим на счетчике какое-нибудь число и три раза повернем рукоятку. На счетчике окажется сумма исходного числа и трех. Примерно так и были устроены арифмометры, долгие годы верой и правдой служившие нашим отцам и дедам. Нет, настоящие арифмометры были посложнее, но принцип их действия уже понятен, не так ли?
Итак, мы убедились, что можно строить механические устройства для вычислений. Руководствуясь общими принципами, нетрудно сконструировать машину, которая, например, могла бы сложить два числа и умножить результат на третье, иными словами - машину, выполняющую вычисления по формуле "Х плюс У умножить на Z". Проблема в том, что формул, по которым нужно вычислять, - бесконечное количество, и физически невозможно строить новую машину для каждого конкретного случая.
Разрешению этой проблемы посвятил свою жизнь английский математик Чарльз Бэббидж. "Аналитическая машина" Бэббиджа должна была стать управляемой перфокартами универсальной машиной для вычислений. Формулы для расчета и конкретные числа предполагалось задавать при помощи отверстий в перфокартах. Увы, универсальный механический вычислитель никогда так и не был построен. Идея запрограммированных вычислений была реализована в электронных вычислительных машинах.
Идея перфокарточного управления принадлежит французу Жаккару. В ткацком станке Жаккара поверх частокола рычажков закладывалась дощечка с отверстиями. Одни рычажки попадали в дырочки, другие - оставались нажатыми и блокировали рычаги станка. В результате ткань получалась с узором, заданным расположением дырочек. Дощечку с дырочками назвали "перфокартой".
Важнейший для понимания работы компьютера принцип программирования удивительно прост. Машина, единственно способная сложить 2 и 3, бесполезна для практических целей. Устройству следует придать большую универсальность. Пусть наш агрегат сможет складывать любые числа. Почему бы не пойти еще дальше, построив машину для любых арифметических операций над любыми числами? Управлять универсальной машиной будем, взяв пример с Жаккара, задавая и числа, и операции, которые над ними нужно выполнить, при помощи перфокарт. Набор перфокарт, описывающий конкретное вычисление, и будет программой. Право слово, проще некуда.
На этом закончим с механическими вычислителями и перейдем к электрическим машинам. К сожалению, их устройство не так очевидно, как набор колесиков и шестеренок, но доказать, что электрические цепи вычисляют не хуже механических агрегатов, довольно просто. Возьмем кусок проволоки с сопротивлением 2 Ом, прикрутим к нему другой, с сопротивлением 3 Ом. Измерим общее сопротивление получившейся цепи. 5 Ом! Теперь подключим наш кусок провода к квадратной батарейке (4.5 В) и измерим силу тока. Получится 0.9 ампера. Взгляните: мы собрали электрическую схему, которая складывает 2 и 3, а потом делит 4.5 на результат!
Этот пример доказывает возможность вычислений при помощи электрических цепей. Наш способ является лишь одним из многих возможных, современные компьютеры устроены иначе. Тем не менее, тайна уже развеяна. Кстати, хотите - верьте, хотите - нет, но знаменитый Эниак, тот самый, что считал баллистические таблицы для армии США, был большим, но таким же примитивным!
По принципу своего действия он проще "Аналитической машины" Бэббиджа. На деле Эниак был набором блоков, одни из которых складывали числа, другие перемножали, третьи (панели переключателей) позволяли задавать значения чисел. Так вот, для каждого конкретного расчета (набора формул) из этих блоков собиралась новая электрическая схема.
Представьте себе, Эниак не программировался в том смысле, какой мы обсуждали. Как вы помните, механическую машину физически невозможно перестраивать для каждого возможного набора формул. Теоретически это, конечно, осуществимо, но слишком накладно с практической точки зрения. Задача переработки схемы и пересоединения стандартных блоков электрического вычислителя для каждого конкретного расчета оказалась вполне исполнимой.
Эниак и современные компьютеры разделят всего один шаг. Тот самый, который не удалось совершить Бэббиджу, так и не воплотившему чертежи "Аналитической машины" в дерево и металл. В нынешнем поколении компьютеров реализована идея универсального вычислителя, то есть машины для любых арифметических операций над любыми числами. Управляются они программами, которые суть описание чисел и операций, которые над этими числами нужно выполнить.
Еще о современных компьютерах говорят, что они построены согласно "архитектуре фон Неймана". Что же, и "архитектуру фон Неймана" очень несложно понять: мы уже подготовлены! Припомним, что программу работы механического вычислителя (колеса и шестерни) механически записывали (дырками) на механическом же носителе - деревянной перфокарте. Потом нужно было вставить перфокарту в машину и запустить ее колеса...
Мысль, что программу для электрической машины можно записать электрическим же образом, лежит, что называется, на поверхности. Для этого понадобится электрическое устройство, аналогичное перфокарте, то есть способное хранить программу в "электрическом" виде. Такое устройство изобрели и назвали (держитесь крепче!) памятью.
Занести программу в память можно было разными путями, скажем, просто набрать при помощи набора переключателей. Утомительный способ, поэтому придумали устройство, через которое пропускали бумажные перфокарты, или перфоленту, а уж оно само записывало их содержимое (дырочки, дырочки...) в память. После ввода программы в память оставалось нажать кнопку пуска компьютера - и программа исполнялась.
Так вот, "архитектура фон Неймана" описывает "компьютер с программой, хранимой в памяти". Современные персональные компьютеры, наряду с обычной, оборудованы так называемой постоянной памятью. Ее содержимое не исчезает при отключении машины от сети. При включении машины она немедленно начинает исполнять записанную изготовителем в постоянную память программу. Вот почему кажется, будто компьютер что-то "делает сам".
Напоследок хотелось бы разъяснить, что компьютер вовсе не работает с числами. Ничего подобного: компьютер работает с электрическими сигналами. Правила, по которым одни сигналы превращаются в другие, заданы, во-первых, конструкцией машины, а во-вторых, программой, которую она исполняет. И за первое, и за второе отвечает человек. А человек приписывает сигналам любой смысл, который пожелает. Именно по этой причине при помощи компьютера одинаково легко обработать и числа, и текст, и звук, и изображение.
Надеюсь, я вас убедил, что суть вычислительных машин вполне поддается пониманию без шамана, призывающего дух компьютера заклинаниями "Электроника!", "Микросхемы!", "Двоичная система счисления!", "Архитектура фон Неймана!"...
Евгений Щербатюк
Компьютерная газета. Статья была опубликована в номере 37 за 1999 год в рубрике hard :: технологии