Компьютер
При компиляции любой программы команды, написанные программистом, преобразуются в наборы команд для центрального процессора управления (ЦПУ). Этот процессор умеет производить арифметические операции с целыми числами из заданного интервала. Существуют и неарифметические команды, но их чаще всего выполняют отдельные микросхемы.
Разработаны эти команды для того, чтобы не писать длинные последовательности арифметических команд. Также некоторые команды выполняются на отдельных микросхемах для того, чтобы ускорить их выполнение. Например, все современные процессоры обладают отдельными элементами, вычисляющими умножение.
Все команды, обрабатываемые процессором, можно свести к наборам арифметических команд над целыми числами из заданного диапазона. Строго говоря, все арифметические операции над целыми числами сводятся к операциям над целыми неотрицательными числами. Для этого используют обратный код. Подробнее об этом написано в следующей главе.
Процессор - физическое устройство. Поэтому неотрицательные числа из заданного диапазона нужно как-то хранить на физическом носителе. Самый простой способ - это собрать электрическую цепь, у которой будет два входа и один выход.
Триггеры
Если напряжение на входе выше заданной границы, то цепь воспринимает сигнал как единицу, если ниже, то как ноль. Состояние цепи может быть равно либо единице, либо нулю. Если состояние цепи равно 1, то на выходе возникает напряжение заданного номинала (с запасом выше границы), а если ноль, то напряжение просто не подаётся.
Хотя процессор работает с напряжениями и электрические компонентны просто обеспечивают такие напряжения, которые однозначно и правильно интерпретируются в уровни сигнала: или . Эти уровни называют логическими уровнями сигнала.
Первый вход отвечает за входные данные, а второй - за их сохранение. Если на вход сохранения подаётся единица, то состоянию цепи присваивается значение входа, т.е. цепь по команде запоминает, каким был вход и дальше не реагирует на изменения. На выходе цепь всегда выдаёт последний сохранённый вход.
Эта цепь меняет состояние по внешнему сигналу. Класс таких цепей называют триггерами. Рассматриваемый нами триггер называют защёлкой.
Он состоит из нескольких логических элементов. Каждый из них выполняет строго определённую, довольно примитивную задачу. Такие элементы можно было бы реализовать даже на телеграфных реле, но реле очень большие, а для простейших вычислительных операций нам понадобились бы тысячи таких реле.
Поэтому в настоящей вычислительной технике используют полупроводниковые транзисторы. Подробнее о транзисторах здесь. Транзисторы хороши тем, что их можно делать очень маленькими и в одном современном процессоре могут помещаться десятки миллиардов.
Все самые сложнейшие операции строятся с помощью трёх электрических цепей. Эти цепи называются вентилями: Вентиль И, Вентиль ИЛИ, Вентиль НЕ.
Термин Вентиль здесь заимствован из физических систем. Там вентилем называются клапаны для регулирования жидкостей, пара или газа. Рассматриваемые нами цепи выполняют схожие задачи, правда, не с жидкостями, а с логическими уровнями сигнала.
Автоматическое управление
Долгое время человечество считало, что управлять тем или иным объектом может только человек, а саморегулирование той или иной физической системы казалось невозможным. Но с развитием физики стало понятно, что саморегулирование - не просто выполнимо, но и очень полезно.
Самый известный пример механической саморегулирующейся системы - это регулятор Уатта. Этот регулятор был разработан в 18-м столетии и ограничивал скорость вращения вала паровой машины.
Идея этого регулятора заключается в том, что измеряя конечное состояние системы (скорость вращения вала), мы можем автоматически менять управление системы. Уатт регулировал количество пара, подаваемого на паровой привод.
Этот регулятор - своего рода автоматический вентиль, но количество пара меняется за счёт того, что механический маятник начинает раскручиваться, за счёт центробежной силы его грузы начинают подниматься и вслед за собой поднимают клапан, регулирующий подачу пара.
Недостаток такой системы регулирования состоит в её физичности. Изготовление такого маятника требует много материала и труда, поэтому развитие автоматических систем управления идёт в сторону снижения стоимости механизмов, обеспечивающих эту автоматизацию.
В этом смысле компьютер - это условно идеальное средство автоматизации. В нём информация управляет информацией. Иными словами, внутри у вычислительной техники всего два состояния базовых элементов, которые можно комбинировать между собой. Например, регулятор Уатта в наши дни проще всего сделать на одноплатном компьютере arduino. Помимо одноплатного компьютера нам понадобятся самый примитивный электронный датчик скорости и управляемый электричеством клапан. Скорее всего, весь набор обойдётся в несколько тысяч рублей, причём управляемый паровой клапан будет самой дорогой покупкой. При этом на внедрение автоматической системы управления понадобится всего пару дней.
Основная идея компьютера в его универсальности. Внутри мы управляем только информацией. Просто эту информацию мы можем подавать на вход и считывать её на выходе, снабжая теми или иными преобразователями.
Например, датчик скорости - это входящая информация, скорость вращения линейно связана с напряжением на выходе, это напряжение преобразуется в положительное число с помощью аналогово-цифровых преобразователей(АЦП). А управление клапаном, наоборот, переводит напряжение на входе в перемещения клапана.
Чтобы перевести число внутри компьютера в напряжение управления используют цифро-аналоговые преобразователи(ЦАП).
В итоге наша задача, как программистов, заключается в том, чтобы зная формат входящей информации и выходящей, обеспечить соответствующие преобразования. Можно было бы под каждую задачу физически составлять свою логическую схему, но гораздо дешевле и проще использовать универсальные процессоры. Такие процессоры сейчас стоят в каждом компьютере и могут обеспечивать такие преобразования по правилам, заложенным в той или иной программе. При это ничего перепаивать не нужно.
Хранение чисел
Вернёмся к логическим вентилям.
Вентиль И выдаёт единицу тогда и только тогда, когда на оба входа подаётся логическая единица.
Вентиль ИЛИ выдаёт единицу, если хотя бы на однин вход подаётся логическая единица.
Третий базовый логический элемент - это инвертор. Он обращает сигнал, т.е. выдаёт один, получая ноль, и, наоборот.
Вентиль И-НЕ - это тот же вентиль И, только у него инвертирован выход
Тоже самое с вентилем ИЛИ-НЕ
Рассмотрим снова схему защёлки:
Она состоит из двух вентилей И, двух вентилей ИЛИ-НЕ и одного инвертора.
Компактно её обозначают так:
DI расшифровывается как Data In(Входящая информация), W - как Write(запись), DO - как Data out(Исходящая информация)
Такие защёлки можно соединить параллельно, тогда вместо одного логического значения мы можем сохранять несколько. Такие упорядоченные группы защёлок называют регистрами.
Тогда, если мы знаем порядок защёлок, то любой комбинации значений на их входах или выходах можно сопоставить число, записанное в двоичной системе счисления длины, равной количеству защёлок. При этом если -я защёлка хранит в себе логический уровень, равный единице, то в -ом разряде соответствующего числа должна стоять единица, в противном случае - ноль.
Например, если у нас параллельно соединено 8 защёлок и при этом логический уровень, равный единице получен только на третьей и пятой защёлках, тогда соответствующее этой комбинации состояний число в двоичной системе будет таким: .
Нули вначале можно отбросить, тогда рассматриваемой комбинации будет соответствовать число
Для перехода между системами счисления используются стандартные формулы. Подробнее о системах счисления рассказано здесь.
Количество защёлок нужно как-то обозначать. Писать "8 защёлок" неправильно, потому что в теории информации мы работаем не с физическими, а с информационными устройствами, в которых у каждого входа и выхода есть только два значения: 0 и 1. Физическая реализация при таком подходе непринципиальна и поэтому не рассматривается. Устоявшейся единицей измерения количества ячеек информации, каждая из которых может содержать одно из двух значений: или , является бит
Пусть у нас есть регистр хранения информации размером бит, каков его диапазон значений?
Решение: В двоичной системе счисления максимальное число, имеющее разрядов будет состоять из единиц. Такое число в десятичной системе счисления равно . Минимальное число будет состоять из нулей и будет соответствовать .
Ответ: