Размер крупа лошади два тысячелетия назад определил размер ракетных двигателей сегодня.
Задумывались ли вы о том, как каждое наше решение определяет будущее? Иной раз не на один год, десятки, сотни, тысячи лет. Почему мы не можем делать двигатели ракет больше? Почему байт равен именно 8 битам, а не 7 или 16, а может даже 48? А ведь он был равен этим числам раньше! Почему виртуальный терминал Linux до сих пор имеет скорость порта подключения? Давайте поговорим о том, как какое-то решение в прошлом определяет наше настоящее, и как же мы можем повлиять на наше будущее.
Спейс шаттл и ширина лошадиного крупа
Это достаточно известная байка, которая разошлась по всему интернету. Как вы думаете, почему размер ракеты-носителя, прикреплённые по бокам от основного топливного бака, имеют такой малый размер? Это твёрдотопливные ракетные ускорители (боковой ускоритель МТКК Спейс шаттл (англ. Solid Rocket Booster, SRB)), которые были изготовлены на заводе в Юте. С инженерной точки зрения, было бы значительно лучше данный двигатель немного толще, но их необходимо было доставлять поездом с завода до места запуска. А железная дорога проходит через туннель в горах. Соответственно этим ускорителям необходимо было пройти через этот тоннель. Сам тоннель немного шире железнодорожного полотна. Стандартная колея железных дорог США (расстояние между рельсами) составляет 4 фута 8 ½ дюймов (1435 мм).
Откуда взялось это число? США унаследовало этот стандарт от первых железных дорог в Англии. Железные дороги в Англии строились по тем же стандартам, по которым строились дожелезнодорожные трамвайные пути, называемая конка (конные трамваи), и они тоже использовали колею в 4 фута 8 ½ дюймов (1435 мм).
Такое расстояние между колёсами вагона было выбрано для того, чтобы они попадали в колею на английских дорогах, чтобы колёса меньше изнашивались, а расстояние между колеями в Англии как раз составляет 4 фута и 8,5 дюйма. Но почему это так? Почему именно такое число?
Англия когда-то входила в Римскую империю, а поскольку первые боевые колесницы были сделаны в Императорским Римом, все они были одинаковы в ширине между колёсами.
Колея на пешеходном переходе римской дороги в Помпеи.
Другой пример колеи на древнеримской дороге.
Это ширина была выбрана потому, что она соответствовала размеру римской боевой колесницы, запряженной двумя лошадьми.
Пример размера римской колесницы.
Удивительно то, что вершина прогресса — космонавтика даже сегодня тесно связана с размером двух широких лошадиных крупов, как и две тысячи лет назад!
Размер байта и ASCII коды
Сегодня многие ещё со школьной скамьи знают чему равен размер байта, и для нас это очевидно: 8 бит. Но думали ли вы, почему выбран такой размер? С чем это связанно?
Вы будете наверное сильно удивлены, но байт не всегда имел размер равный восьми битам! Раньше байт мог иметь размер от 4-х до 60-ти бит! Например, ЭВМ БЭСМ использовали 6-битные символы в 48-битных или 60-битных машинных словах.
Но почему именно 8 бит? Одна из причин — это двоичная система кодирования, так как наиболее удобными для обработки являются цифры, кратные степени двойки. Ну хорошо, скажите вы, почему тогда не 4, или 16, или 32? И будете правы.
Тут следует вспомнить ещё о том, что в 1963 году был принят Американский Стандартный Код для обмена информации (American Standard Code for Information Interchange) или сокращённо ASCII. Этот стандарт был разработан на основе телеграфного кода и его первое коммерческое использование было в качестве семибитного кода телетайпа, для отправки телеграфных сообщений. Первоначально основанный на английском алфавите, ASCII кодирует 128 заданных символов в семибитовые целые числа. Девяносто пять закодированных символов могут быть напечатаны: они включают цифры от 0 до 9, строчные буквы от a до z, прописные буквы от A до Z и символы пунктуации. Кроме того, исходная спецификация ASCII включала 33 непечатных управляющих кода, которые были созданы с помощью телетайпов; большинство из них уже устарели, хотя некоторые из них до сих пор широко используется, например, возврат каретки, перевод строки и код табуляции.
Семибитная таблица ASCII из руководства к принтеру до 1972 г.
Тут пересекаются сразу две ветки, история телеграфа, которая повлияла на развитие компьютерной индустрии. Мы об этом поговорим в следующей главе и собственно говоря самое представление байта.
В 1960-х компания IBM, которая так же участвовала в стандартизации ASCII представила для своей линейки вычислительных машин System/360 восьмибитовый Extended Binary Coded Decimal Interchange Code (EBCDIC). Следует понимать что EBCDIC и ASCII отличаются. Известность ЭВМ IBM System/360 привела к повсеместному внедрению восьмиразрядного байта.
Разработка восьмиразрядных микропроцессоров в 1970-х годах популяризировала этот размер памяти. Микропроцессоры, такие как Intel 8008, прямой предшественник 8080 и 8086, использовавшиеся в ранних персональных компьютерах, также могли выполнять небольшое количество операций с четырехбитными парами в байтах.
Вернёмся к стандарту ASCII, которым в той или иной мере мы пользуемся теперь каждый день, даже этот текст так или иначе включает в себя данный стандарт.
Американский стандартный код для обмена информацией (ASCII) был разработан под эгидой комитета Американской ассоциации стандартов (ASA), называемого комитетом X3, его подкомитетом X3.2 (позже X3L2), а позже — X3 этого подкомитета. 2.4 рабочая группа (сейчас INCITS ). ASA стал Институтом стандартов Соединенных Штатов Америки (USASI) и, в конечном итоге, Американским национальным институтом стандартов (ANSI).
Подкомитет X3.2 разработал ASCII на основе более ранних систем кодирования телетайпов. До того, как был разработан ASCII, используемые кодировки включали 26 символов букв, 10 цифр и от 11 до 25 специальных графических символов. Для того, чтобы кодировать все эти данные, а также управляющие символы, совместимые со Стандартами международного телеграфного алфавита (ITA2) от 1924 года, требовалось более 64 кодов для ASCII. ITA2, в свою очередь, основывались на 5-битном телеграфном коде, который Эмиль Бодо изобрел в 1870 году и запатентовал в 1874 году.
Вы ощущаете эту связь поколений, что так или иначе даже сегодня мы пользуемся наследием телеграфного кода, который был изобретён 150 лет назад?!
Комитет обсудил возможность использования функции сдвига (как в ITA2 ), которая позволила бы представить более 64 кодов шестибитным кодом. В сдвинутом коде некоторые коды символов определяют выбор между вариантами следующих кодов символов. Это позволяет компактное кодирование, но менее надежно для передачи данных, поскольку ошибка при передаче кода сдвига обычно делает нечитаемую длинную часть передачи. Комитет по стандартам отказался от перехода, и поэтому для ASCII требовался как минимум семибитный код.
Комитет рассмотрел восьмибитный код, поскольку восемь битов ( октетов ) позволят двум четырехбитным шаблонам эффективно кодировать две цифры с помощью двоичного десятичного числа. Однако при передаче всех данных потребуется восемь битов, когда достаточно семи. Комитет проголосовал за использование семибитного кода для минимизации затрат, связанных с передачей данных. Поскольку, в то время перфолента лента могла записывать восемь бит в одной позиции, при желании можно было использовать бит четности для проверки ошибок.
Современная 8-ми битная таблица ASCII.
Таким образом, сразу несколько факторов сошлось в пользу того, чтобы байт стал иметь размер именно 8 бит. Но, на мой взгляд, основная — это возможность кодировать и хранить текстовую информацию в минимальном одном байте и возможность хранить десятичные цифры в каждом полубайте.
Устройство терминала Linux
На своей домашней системе, вы открываете виртуальный терминал линукс, который вообще работает в окне, и имеет абсолютно виртуальное представление. Но он до сих пор совместим со старинными терминалами.
Можно открыть терминал и ввести stty, то можно обнаружить что данная программа имеет скорость подключения, как и СОМ-порт. И вообще имеет кучу настроек termios для СОM-порта.
Я уже достаточно подробно останавливался в своих статьях о работе СОМ-порта в статье «UART и с чем его едят» и там было сказанно следующее:
Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) — старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.
Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.
В 1971 году, когда уже начался бум микросхем, Гордон Белл для компьютеров PDP фирмы Western Digital сделал микросхему UART WD1402A. Примерно в начале 80-х фирмой National Semiconductor был создан чип 8520. В 90-е был придуман буфер к интерфейсу, что позволило передавать данные на более высоких скоростях. Этот интерфейс, не претерпев практически никаких изменений, дошел и до наших дней.
Обратите внимание, что на работу консоли linux снова оказывает какой-то древний телеграф! А почему? Всё достаточно просто, что для ввода-вывода раньше использовали то, что было под рукой, а именно телетайпы, которые позволяли вводить текст с клавиатуры и выводить его, печатая на бумаге.
Телетайп, который подключается по UART и может служить для ввода и вывода информации.
В результате ввод-вывод в линуксе — это фактические управление телетайпом. Даже самые современные стандарты терминала обратно совместимы с такого типа телетайпом. Более того, я вам уверенно скажу, что если этот телетайп подключить к современному компу и настроить вывод терминала на физический СОМ-порт, он без программных переделок будет работать (аппаратные понадобятся, так как там немного другие стандарты напряжений работы, но незначительные).
Более подробно о работе с СОМ-портом и настройке файл-устройства терминала можно прочитать в моей статье «Работа с СОМ-портом на Си в linux» и/или посмотреть в моих видео в конце статьи.
Выводы
У меня было желание привести намного большее количество примеров, отсылок в прошлое. Например о раскладках клавиатуры, что это ещё с лохматых времён печатных машинок, либо отсылки о форме современных мобильных телефонов. Однако статья и так превратилась в безумную простыню, а мысль мне всё же удалось изложить.
Раскладка QWERTY, изобретённая в 1888 году для печатных машинок используется до сих пор.
Мысль моей статьи достаточно простая: даже самые незначительные вещи, которые вы внедряете сегодня, могут оказать самое громадное влияние на наше будущее.