2.6 Как компьютер работает c информацией

В предыдущих параграфах мы говорили, что компьютер считывает, обрабатывает и записывает данные. Но не вдавались в детали: какого именно вида эти данные. Пришло время разобраться подробнее.

Самые первые ЭВМ использовались в основном для физических и математических расчётов, так что данные, с которыми они работали, были исключительно числовыми. Это могли быть координаты точек, уровни давления и температуры, количество нейтронов в ядерных реакциях и многое-многое другое. Не случайно у многих в те годы сформировалось отношение к компьютерам просто как к гигантским калькуляторам.

Но очень скоро стало ясно, что «таланты» новых машин не ограничиваются одной только работой с числами. Точнее — что, работая с числами, можно решать задачи из области лингвистики, музыки, живописи, кинематографа и так далее. Главное — придумать, как записать исходные данные этих задач в цифровом виде и «научить» вычислительную машину обращаться с ними.

В этом параграфе мы поговорим о том, как компьютеры научились работать с текстом, звуками и изображениями. Начнём с текста.

Текст

В числе первых компьютерам «поддался» текст. Человечество и так давно умело представлять буквы и слова в двоичном коде — именно по этому принципу работала бо́льшая часть телеграфных систем.

Например, в аппаратах Бодо — Мюррея, известных ещё с 1900-х годов, каждой букве или цифре соответствовала группа из пяти сигналов, которые на бумажной ленте выглядели как колонки из отверстий: пробито — не пробито.

1.5

Именно телеграфные аппараты, работающие в коде Бодо — Мюррея, стали одними из первых устройств ввода-вывода для компьютеров.

Телеграфные аппараты (телетайпы) типа СТ-35 и СТА

Каждый символ текста в памяти компьютера представлялся как упорядоченная группа битов (держим в уме нашу метафору про соты из предыдущего параграфа).
Битов могло быть 5, 6, 7, но наиболее распространённым к середине 1960-х годов стал вариант из 8 бит. С их помощью можно записать 256 разных символов ( = 256), чего хватает и на буквы латинского алфавита в разных регистрах, и на цифры, и на знаки препинания.
Обычно все коды символов, с которыми может работать некая цифровая система, представляют в виде таблицы кодировки. Её строки и столбцы удобно подписать в шестнадцатеричной системе счисления.

Почему?

Выше мы сказали, что с помощью 8 бит мы можем пронумеровать (то есть записать) 256 символов.

0 = 00000000

1 = 00000001

2 = 00000010

3 = 00000011

4 = 00000100

...

251 = 11111011

252 = 11111100

253 = 11111101

254 = 11111110

255 = 11111111

Согласитесь, писать 11111111, чтобы выразить число 255, неудобно. Хочется, чтобы запись была более ёмкой. Для этого можно изменить систему счисления — например, на шестнадцатеричную.

Это компромисс между человеком и компьютером — как мы, оказавшись в другой стране, будем общаться с носителем языка на том языке, который мы оба понимаем.

В шестнадцатеричной системе счисления от 0 до 9 идут привычные нам цифры, а недостающие замещаются буквами латинского алфавита. То есть число 11111111 в шестнадцатеричной системе будет всего лишь FF.

И ещё бонус: простота конвертации! Для этого наши 8 бит нужно разделить на две группы по 4 бита:
11111111 → 1111 1111 → F F → FF (255)

Ещё пара примеров:

0: 00 → 0 0 → 0000 0000 → 00000000

15: 0F → 0 F → 0000 1111 → 00001111

122: 7A → 7 A → 0111 1010 → 01111010

Тогда код каждого символа легко собрать из двух шестнадцатеричных цифр, соответствующих строке и столбцу. Например, для заглавной буквы П это будет F0.

1.5

Так что, если мы говорим о текстах, один байт (8 бит) эквивалентен одному символу. Для компьютера, конечно, это просто число от 0 до 255, записанное в двоичной системе счисления (держим в уме пчелиные соты!). В узнаваемый человеком графический символ оно превращается только при выводе на экран или на печать.

Уже в середине 1950-х годов компьютеры доказали, что однажды они смогут стать заменой людям-переводчикам. Наши старые знакомые — IBM 704 c американской стороны и БЭСМ с советской — поучаствовали в эксперименте по автоматическому переводу научных статей с русского на английский и наоборот. Память у тех машин была крошечной, а набор правил, который смогли заложить в программу, очень ограниченным. Но поскольку научные тексты обычно написаны ясным языком и хорошо структурированы, даже с такими скромными ресурсами эксперимент в целом удался.

«1000 радиоламп будет достаточно для каждого». Фрагмент плаката 1950-х годов

Возникший оптимизм касательно возможностей ЭВМ оказался даже несколько избыточным. Современные компьютеры в миллионы раз сложнее, чем машины из 1000 радиоламп, но всё ещё не способны полностью заменить людей при переводе текстов.

Звук

Также в 1950-е годы выяснилось, что компьютеры могут найти применение и в мире музыки. В ней вообще очень много математики — скажем, частоты звуков, сочетания которых нам кажутся гармоничными, связаны между собой одним и тем же числовым соотношением.

1.5

Инженеры, работавшие с первыми ЭВМ, заметили, что при выполнении команд те гудят на разной частоте. Естественно, сразу возникло желание превратить компьютер в электронный музыкальный инструмент. Знаменитый британский математик и криптограф Алан Тьюринг в 1951 году запрограммировал компьютер Ferranti Mark I играть гимн Великобритании, In the Mood Гленна Миллера и детскую песенку Baa, Baa, Black Sheep.

Алан Тьюринг (справа) за пультом компьютера Ferranti Mark I (1951). Источник

В СССР аналогичные эксперименты впервые были поставлены в начале 1950-х годов всё на той же машине БЭСМ: программист Андрей Степанов подключил усилители и динамики к разным точкам арифметического устройства ЭВМ, и с тех пор визиты высоких гостей (президента АН СССР Александра Несмеянова, шаха Ирана с супругой, генерального секретаря ООН) в вычислительный центр сопровождались электронной музыкой.

Вскоре возник вопрос: может ли компьютер не просто воспроизводить готовые мелодии, а сочинить собственную? Оказалось, что да, может, даже если это компьютер на лампах с памятью в несколько килобайт. Первым музыкальным произведением, при создании которого компьютер выступал в роли композитора, а не инструмента, считается Illiac Suite, написанная в 1957 году компьютером ILLIAC I в Иллинойском университете. Программу составили Лежарен Хиллер и Леонард Айзексон.

ILLIAC I (ок. 1952). Источник

В нашей стране пионером машинной музыки стал Рудольф Зарипов, который с 1959 года экспериментировал с ламповой ЭВМ «Урал-1». В 1960 году он опубликовал статью «Об алгоритмическом описании процесса сочинения музыки», а чуть позже даже выпустил пластинку под названием «Уральские напевы» с несколькими вполне приятными на слух машинно сгенерированными мотивчиками.

Мелодию довольно легко закодировать с помощью чисел: пусть одно из них задаёт высоту звука, другое — его длительность, третье — момент его начала и так далее. Этот подход принципиально не менялся до настоящего времени: например, похожим образом устроен популярный формат MIDI (Musical Instrument Digital Interface — цифровой интерфейс музыкальных инструментов).

Файл MIDI состоит из байтовых последовательностей, указывающих, какие ноты играть, какими инструментами, в каком темпе и с какими модификациями звука.

Естественно, на разных системах такая мелодия будет звучать по-разному, но и несколько живых оркестров, даже если им дать одни и те же ноты, не сыграют произведение абсолютно одинаково. Фанаты классических компьютерных игр любят проводить эксперименты, выясняя, на каком «железе» любимые саундтреки звучат интереснее.

Выше мы говорили о синтезе звука при помощи компьютеров. В дальнейшем, когда их быстродействие и объём памяти выросли в десятки раз, компьютеры смогли не только «наигрывать» мелодии по нотам, но и работать со звуком, записанным с натуры. Для этого, конечно, его предварительно нужно было перевести в доступный для машины формат, то есть оцифровать.

Выглядит это так: специальное устройство — аналого-цифровой преобразователь — через равные короткие промежутки времени измеряет амплитуду (упрощённо — уровень громкости) звукового сигнала и записывает его в виде числа.

1.5

На графике оцифрованный звук выглядит как последовательность столбиков разной высоты, а в памяти компьютера — как упорядоченный набор чисел.

Звуки реального мира состоят из комбинации звуков разных частот (разной высоты). Человек обычно слышит звук частотой не более 18–20 кГц (это высокий, едва воспринимаемый свист), причём с возрастом этот показатель снижается.

Математики Клод Шеннон и Владимир Котельников доказали, что, если измерять амплитуду сигнала с частотой как минимум в два раза больше, чем у его самой высокочастотной составляющей, в дальнейшем этот сигнал можно будет восстановить без каких-либо потерь. Соответственно, если делать измерения с частотой 40 кГц (то есть 40 тысяч раз в секунду), на основе полученных данных можно будет воссоздать все звуки, которые способен слышать человек.

Частота этих измерений называется частотой дискретизации: как мы помним, «дискретный» означает «прерывистый». В данном случае речь о том, что мы делаем множество отдельных измерений с определённым шагом. В реальных системах обычно используется частота дискретизации 44 100 Гц или 48 000 Гц — даже с некоторым запасом.

Почему такая «некруглая» величина?

Это связано с особенностями систем телевещания. Подробнее — тут.

Важный недостаток цифрового звука, который долгое время сдерживал его распространение, — огромный объём данных, который получается при оцифровке. Если мы делаем измерения 44 100 раз в секунду, каждое значение записываем с помощью двух байт (это 65 536 возможных уровней громкости — такой формат, например, используется в компакт-дисках), да ещё и хотим иметь два канала для объёмного звучания, получится, что типичная трёхминутная песня будет занимать 44 100 × 2 × 2 × 3 × 60 = 31 752 000 байт, или примерно 30 мегабайт!

Это превышает ёмкость среднего жёсткого диска 1980-х годов. Для сравнения: все четыре тома «Войны и мира» в текстовом формате занимают в 10 раз меньше места.

Именно поэтому хранить и воспроизводить музыку CD-качества с помощью компьютеров люди начали только в 1990-х годах, когда развитие технологий сделало это доступным. И конечно, для работы с цифровым звуком до сих пор стараются использовать алгоритмы сжатия, которые позволяют значительно уменьшить его объём (иногда ценой некоторой потери качества). Самые известные форматы сжатого звука — MP3, AAC, Ogg (с потерями), FLAC (без потерь). Несжатый звуковой сигнал обычно хранят в файлах с расширением WAV.

Изображение

Большую часть информации об окружающем мире мы получаем благодаря зрению. Неудивительно, что и компьютеры постарались научить работать с изображением сразу, как это стало технически возможным. Первые картинки на экране компьютеров были векторными: они рисовались непрерывной линией на экране кинескопа при помощи электронного луча, движением которого управляла ЭВМ. Выглядело это примерно как изображения на экране радара.

Как считается, одно из первых изображений, сформированных с помощью компьютера, — контурный рисунок… не очень одетой девушки из мужского журнала. Конец 1950-х. Источник

Компьютер задавал на экране координаты точек, между которыми должен был перемещаться луч. Поскольку специальное покрытие на экране — люминофор — продолжало светиться и некоторое время после ухода луча, за счёт быстрого обновления картинки можно было создать устойчивую картинку.

Векторный формат хорошо подходил для контурных изображений — карт, чертежей, символов алфавита. Но для полноценной работы с графикой нужны были полутона, а в идеале ещё и цвет.

Технологии сохранения и передачи цвета к тому моменту были уже хорошо известны: цветная фотография была изобретена ещё в 1861 году, а в 1951-м в США началось регулярное цветное телевещание. В телевизорах электронный луч движется повторяющимся маршрутом, формируя на экране сотни параллельных линий.

1.5.6

Этот процесс называют развёрткой, а получаемое изображение — растровым. Чтобы электронный луч в ходе своих зигзагообразных перемещений по экрану сформировал картинку, его мощность (а значит, и яркость экрана в месте его попадания) должна меняться в нужные моменты. В случае телевидения этот процесс был полностью аналоговым: непрерывно изменяющийся сигнал на выходе телекамеры или видеомагнитофона после ряда преобразований поступал на электронную пушку кинескопа.

В случае с компьютерами всю информацию об изображении нужно было закодировать в цифрах. Удобнее всего оказалось разбить картинку не только на строки, но и на столбцы, что для человека превращало её в мозаику из условно квадратных элементов, а для компьютера — в прямоугольную матрицу чисел.

1.5.7

«Кусочки» этой мозаики мы называем пикселями (picture element — элемент картинки).

Если нам нужно чёрно-белое (полутоновое) изображение, для каждого пикселя хватит одного числа, обозначающего его яркость. Пусть 0 означает абсолютно чёрный, а 255 — абсолютно белый. Тогда, например, 50 будет тёмно-серым, 200 — светло-серым и так далее.

Для цветного изображения нужно три числа на каждый пиксель. Это связано с тем, что в электронных дисплеях используется смешение трёх цветов, называемых базовыми (RGB): красного (red), зелёного (green) и синего (blue).

1.5.8

Такую модель смешения называют аддитивной (от англ. addition — «прибавление», «сложение»), поскольку яркость каждого из цветовых каналов прибавляется к яркости другого. Представьте, что вы светите тремя цветными прожекторами на тёмную театральную сцену. Если совместить красный круг и синий, получится ярко-пурпурный, а если добавить к ним ещё и зелёный, получившийся цвет мы воспримем как белый.

Этот эффект связан с особенностями цветового зрения человека: наш глаз имеет три типа светочувствительных элементов — колбочек, каждая из которых «предпочитает» свою часть спектра.

1.5.9

Яркость каждого из цветовых каналов тоже можно обозначить числом от 0 до 255 (мы уже знаем, что это один байт). Если вам кажется, что уровней яркости маловато, обратите внимание: яркость каждого канала задаётся независимо. В итоге мы получаем 256 × 256 × 256 = 16 777 216 возможных оттенков — этого достаточно для вывода красочных полноцветных изображений на экран.

Для сравнения: ещё 20 лет назад для мобильных устройств считалось достаточным, если их дисплей мог выводить 262 144 цвета (это соответствует 64 возможным уровням яркости каждого канала).

В самом простом случае информацию о цветах пикселей можно просто записывать в память компьютера подряд. Достаточно сначала указать ширину изображения в пикселях, чтобы понять, где закончить одну строку и начать следующую.

Например, белый пиксель — FF FF FF, или R255 G255 B255 (все три цветовых канала выкручены на максимум). Красный — FF 03 05, или R255 G003 B005 (красный канал выкручен на максимум, плюс к нему подмешано немного зелёного и синего для формирования нужного оттенка).

В одном из вариантов классического, хотя и довольно устаревшего формата файлов изображений, BMP (bitmap), эти данные так и записывались (разве что цветовые каналы шли в обратном порядке — BGR).

1.5.10

Считается, что первое в истории пиксельное цифровое изображение создал в 1957 году американский инженер Рассел Кирш (Russell Kirsch). Он сконструировал сканер, подключил его к компьютеру SEAC (Standards Eastern Automatic Computer, 1950) в Национальном бюро стандартов США и отсканировал плёночную фотографию своего новорождённого сына.

Источник

Изображение насчитывало 176 пикселей по вертикали.

Впрочем, Кирш был первым, если говорить об изображениях, «взятых» из реального мира. При этом известно, что уже на самых первых компьютерах, где для запоминания и отображения информации использовались электронно-лучевые трубки, их операторы пробовали создавать своего рода пиксель-арт.

1.5.11

Вот как вспоминал о подобных экспериментах Александр Платонов, сотрудник Института прикладной математики:

«Даже первый дисплей... был сделан на БЭСМ Андреем Соколовым. Он на [магнитный] барабан записывал специально такие команды, чтобы морда появлялась, улыбалась и многое другое».


Теперь мы знаем на базовом уровне, как в памяти компьютера представляются текст, звук и изображения. Конечно, со времён первых опытов технологии ушли далеко вперёд, но базовые принципы остались неизменными.

Если разные типы информации можно записать в виде чисел, то с ними можно и работать по тем же правилам, по которым мы работаем с числами. Так что уже в следующем параграфе мы узнаем, как компьютер выполняет программы.


Чтобы добавить в заметки выделенный текст, нажмите Ctrl + E
Предыдущий параграф2.5. Как компьютер запоминает и сохраняет данные
Следующий параграф2.7. Что делает процессор