что скрывается за разумом смартфона?

Как работает смартфон #1. Что стоит за «разумом» этого устройства?

Оценка этой статьи по мнению читателей:
4.9
(147)

Как работает смартфон? Хм… на первый взгляд, довольно глупый вопрос.

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

Но постойте-ка! Что значит фраза «смартфон понимает»? В каком смысле «понимает»? И что такое видеоплеер? Неужели внутри смартфона есть какой-то реальный видеопроигрыватель? Как фильм хранится в памяти? Это что — набор фотографий, по 24 кадра на каждую секунду фильма? Но даже если бы это были фотографии (что не так), где они там внутри складируются, в виде чего? А ведь звук — это уже не картинки и он тоже должен как-то храниться внутри смартфона. Эти вопросы уже не кажутся такими простыми, не так ли?

А если копнуть чуточку глубже и принять тот факт, что никакого разума у смартфона нет вообще и он не может ни понимать, ни думать, ни давать осмысленные ответы на вопросы, вроде «какая завтра будет погода?», он вообще не понимает, что такое «завтра» или «погода». И в этом очень легко убедиться, проведя простой эксперимент.

Минутка безумия

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

Что за безумие — спросите вы?

Но ведь, по сути, смартфон — это батарейка (аккумулятор), миллиарды выключателей (транзисторы внутри процессора) и несколько миллионов лампочек (пикселей на экране). Ток вытекает из батарейки, попадает внутрь процессора, растекается по его транзисторам, а затем каким-то чудом загораются нужные пиксели на экране или звучит любимая композиция в динамиках. Кажется, будто в процессоре и происходит вся магия!

Но магии не существует. О том, что происходит на самом деле и пойдет речь в этой статье.

Черно-белый мир

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

Всё, что «волнует» процессор — это вопрос о том, в каком положении сейчас находится каждый конкретный выключатель (транзистор), пропускает ли он ток или нет, то есть, открыт ли он в конкретный момент времени или закрыт. Такие проверки смартфон делает миллиарды раз в секунду.

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

Соответственно, в памяти (не важно, оперативной или постоянной) хранится только одна единственная информация — бесконечно длинный список из двух повторяющихся цифр — единичек и нулей.

Фотография — это миллионы последовательных единичек и нулей, книга — это набор единичек и нулей, видеоплеер — это снова единички и нолики.

Что немаловажно, единички и нолики — это уже абстрактные понятия, на самом деле, внутри смартфона нет никаких цифр, а есть просто два состояния — присутствует напряжение/отсутствует напряжение.

К примеру, если мы хотим сохранить 12-Мп снимок, нам нужно как-то перевести его в единички и нолики. Для одной такой фотографии потребуются миллионы единичек и нулей, которые нужно будет затем сохранить в отдельные ячейки памяти. А ячейка — это микроскопическая ловушка, в которую попадают электроны и застревают там навсегда (или пока мы не удалим наш снимок):

как единички и нули сохраняются в памяти смартфона

Если память смартфона составляет 64 Гб, это означает, что внутри размещены миллиарды крошечных «механизмов» — ловушек электронов, которые способны хранить около полутриллиона «единичек и нулей» (далее я не буду использовать кавычки с этими словами, но не забывайте, что единичка — это есть напряжение, ноль — нет, смартфон не оперирует числами, а лишь током).

Раньше каждая ячейка памяти могла хранить только один нолик или единичку (проверялось просто само наличие электронов в ловушке), теперь же каждая ячейка способна хранить несколько единичек и нулей, так как система может считывать заряд более точно.

Подведем небольшой итог

Смартфон хранит в памяти только «информацию» о том, должен ли быть включен («единичка») или выключен («нолик») какой-то транзистор. Процессор не понимает никаких приложений, не работает с видео, фото или аудио. Он лишь хранит в памяти миллиарды единиц и нулей в виде «застрявших» электронов в микроскопических ловушках. А затем обращается к конкретной ячейке и в зависимости от того, есть ли там электроны (и сколько их), посылает соответствующие сигналы на определенные транзисторы.

То есть, процессор обращается к какой-то ячейке памяти, считывается заряд (кол-во электронов в ловушке) и затем этот сигнал (ток) посылается на конкретный транзистор. Взяли единичку из памяти и сделали так, чтобы определенный транзистор был открыт. А если в памяти была не единица, а ноль (то есть, другое количество электронов), тогда процессор закрывает определенный транзистор.

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

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

Единички и нолики

Смартфон делает 3 базовые вещи:

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

Вся собираемая информация переводится в единички и нолики (бинарный код), которые затем распределяются по ячейкам памяти в виде определенного количества электронов. Процессор обращается к памяти и получает значение каждой ячейки, на основе которого открывает/закрывает конкретные транзисторы.

Переводим текст в бинарный вид

Как букву «А» представить нулями и единичками, чтобы сохранить в памяти (ловушках электронов) внутри смартфона? Естественно, никак. Эту букву можно разложить на палочки или микроскопические точки, но в реальном мире буквы не состоят из последовательности единиц и нулей. Что же делать?

Можно было бы использовать числовое значение буквы «А». Скажем, это первая буква алфавита, значит, это единичка. Но как тогда быть с маленькой (строчной) буквой «а»? И что делать со знаками препинания и остальными буквами? А если мы говорим о китайских иероглифах, которых гораздо больше букв латинского алфавита?

Решение проблемы оказалось элементарным! Давайте просто скажем, что каждой букве или символу соответствует какой-то номер и создадим таблицу кодов. Например, заглавные буквы A, B, C, D будут идти под номерами 65, 66, 67, 68 и так далее. Маленькие буквы будут начинаться с номера 97. Теперь нам осталось пронумеровать все остальные символы, включая те, которые будут сообщать смартфону, что нужно начинать текст с абзаца.

И такая таблица была составлена:

пример таблицы ascii кодов
ASCII таблица

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

В итоге перешли на табличку Unicode, которая уже включала более 65 тысяч чисел и соответствующие им знаки, буквы и смайлики.

Дело осталось за малым! Теперь нужно эти коды символов перевести из десятичной системы счисления, где есть цифры от 0 до 9, в двоичную, где существует только 0 и 1. Почему в двоичную? Да потому, что такая система исчисления идеально подходит к микросхемам: 0 — нет тока, 1 — есть ток или 0 — транзистор закрыт (не пропускает через себя ток), а 1 — открыт, то есть, пропускает ток.

Забавная математика или почему 1+1 не равно 2

Когда мы видим большое число, например, 2134, то прекрасно понимаем, что здесь есть две тысячи (1000), одна сотня (100), три десятка (10) и четыре единицы (1).

Получается интересная картина. Наше большое число — это ряд простых маленьких чисел от 0 до 9, каждое из которых находится на своей определенной позиции. Если считать ее справа, то четверка находится на первой позиции, тройка — на второй, единица — на третьей и двойка — на четвертой. Каждая последующая позиция отличается от предыдущей на порядок (в 10 раз).

как устроены десятичные числа

В двоичной системе всё ровно так же, только каждая позиция отличается от предыдущей в 2 раза. То есть, первая позиция — это единицы, вторая — двойки, третья — четверки и так далее:

позиция цифр в двоичной системе

Таким образом, если мы хотим записать десятичное число 9 в двоичной системе, нам нужно взять одну восьмерку и одну единичку (записать цифры на первой и четвертой позициях), в итоге получится число 1001 в двоичной системе:

переводим число 9 из десятичной в двоичную систему

Теперь возвращаемся к нашей кодовой таблице символов. Если букве А соответствует число 65 в десятичной системе, то в двоичной оно будет выглядеть как 100001:

переводим число 65 из десятичной в двоичную систему

Вы, наверное, обратили внимание, что квадратиков (позиций) только 7. Это значит, что наше число состоит из 7 бит (семи нулей или единиц). Можно числа составлять из 8, 16 и так далее бит, соответственно, мы сможем закодировать в двоичной системе счисления очень большие числа. Для 8 бит это будет 256, а уже для 16 бит — 65536.

Подытожим

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

Теперь осталось каждую цифру (1 или 0) сохранить в отдельной ячейке памяти. Если это 1 — захватываем в ловушку каждой ячейки из аккумулятора столько-то электронов, если 0 — другое количество. В итоге у нас получилось около 900 тысяч единиц и нулей. Если бы каждая ячейка хранила только один бит (0 или 1), нам бы потребовалось 900 тысяч ячеек памяти только на одну книжку. Но так как ячейки современной памяти могут хранить 3 бита, тогда для книжки нам потребуется 300 тысяч ячеек.

А как быть с фотографией или фильмом? Как мы можем картинки перевести в единички и нолики?

Переводим фото и видео в единицы и нули

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

увеличенный фрагмент фотографии

Если мы возьмем 12-мегапиксельную фотографию, она состоит из 4032 точек по горизонтали и 3024 точек по вертикали. Получается, один снимок содержит 12 млн 192 тыс. 768 точек (4032*3024). Звучит уже пугающе. А если мы берем современные камерофоны, которые умеют снимать с разрешением 108 Мп, то один такой снимок содержит более 108 миллионов точек.

Но что делать с этими точками дальше? Как их перевести в набор нулей и единиц? Чтобы ответить на этот вопрос, рассмотрим очень простой пример.

У нас есть картинка 4 на 4 точки (всего 16 пикселей), которую мы хотим сохранить на смартфоне:

картинка 4x4 пикселя

Вначале давайте все пиксели разместим в одну строчку, чтобы избавиться от бесполезного квадрата:

все пиксели в ряд

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

Хорошо. А можем ли мы представить каждый цвет в виде числа? Да запросто! Как известно, любой цвет состоит из 3 основных: красного, зеленого и синего. Главное — смешать их в нужной пропорции. И такие «пропорции» мы представим в виде обыкновенных чисел, скажем, от нуля до 255.

Если точка должна быть небесно-голубого цвета, это значит, что красного цвета там будет совсем чуть-чуть (32 из 255), зеленого намного больше — 182 из 255, а синего еще больше — 223 из 255.

Если нужно отобразить черный цвет, мы не будем использовать ни красный (0 из 255), ни синий (0 из 255), ни зеленый цвета (0 из 255). А если захотим, чтобы была белая точка, нужно все 3 составляющих цвета включить на максимум — 255, потому что белый цвет — это и есть смесь основных цветов:

из каких цветов состоят цвета пикселей

Так как мы выбрали использовать 255 градаций каждого цвета, становится очевидным решение основной проблемы. Чтобы закодировать число 255 в бинарный код, нам нужно использовать 8 бит (255 — это 11111111). Получается, чтобы сохранить информацию об одной лишь точке, нам нужно использовать 24 бита (по 8 бит для описания каждого из 3 основных цветов).

Если первую красную точку можно было бы сохранить в десятичной системе, как набор чисел 213, 43 и 43, то в двоичной системе это будет набор из чисел 11010101, 00101011 и 00101011. Естественно, никаких запятых нам не нужно, так как в описании (метаданных) файла мы указывали глубину цвета (сколько бит использовать для кодирования каждого из 3 цветов), поэтому можем смело сохранять первый пиксель нашей фотографии в таком виде:

110101010010101100101011

Для 12 мегапиксельного снимка осталось добавить еще 292 млн 626 тыс. 408 нулей и единичек (это 12 192 767 пикселей умножить на 24 бита). То есть, для хранения одной лишь фотографии мы используем около 97 тыс. крохотных устройств — ловушек для электронов (они же — ячейки памяти). Не забывайте, что одна ячейка способна хранить 3 бита.

Что интересно, на экране смартфона пиксели отображаются не так:

ряд цветных пикселей

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

как отображаются пиксели на экране смартфона

Но так как эти субпиксели (лампочки) очень крохотные и находятся на очень маленьком расстоянии друг от друга, наш глаз не способен различить три цвета и мозг смешивает их в один.

А как же быть с видео!?

Представьте, если одна фотография занимает почти 100 тысяч ячеек памяти, то где же взять места для полуторачасового фильма, каждая секунда которого — это 24 фотографии!?

Да, мы уже понимаем, что фильм хранится точно так же, как и фото — в виде единичек и нулей. Однако сохранять 130 тысяч фотографий (90 минут видео по 24 кадра в секунду) в разрешении FullHD (2 млн пикселей на каждый кадр) или 4K (8 млн пикселей на каждый кадр) — это непозволительная роскошь, даже по меркам современных смартфонов с памятью на 128 или 256 Гб.

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

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

Прежде, чем сохранить нули и единицы, система анализирует каждый кадр и замечает, к примеру, что ваш нос не очень-то отличается от кадра к кадру. Хм, может его вовсе удалить? Но, согласитесь, без носа ваше лицо выглядело бы немного странно.

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

Применяя другие алгоритмы компрессии, мы можем прилично сократить количество нулей и единиц, и, при проигрывании, «видеоплеер» должен будет восстанавливать картинку по записанным инструкциям в виде нулей и единиц.

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

Подводим итог первой части

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

Текст, смайлики и другие символы — это, по сути, такие же маленькие картинки, состоящие из пикселей. Когда процессор обращается к памяти и достает оттуда последовательность цифр 100001, он уже «знает», что эта последовательность (число 65 в десятичной системе) означает букву «А». Соответственно, нужно «зажечь» определенные лампочки на экране, чтобы получилась картинка в виде буквы А.

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

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

Алексей, глав. редактор Deep-Review

 

P.S. Не забудьте подписаться в Telegram на наш научно-популярный сайт о мобильных технологиях, чтобы не пропустить самое интересное!

Если вам понравилась эта статья, присоединяйтесь к нам на Patreon - там еще интересней!

 

Как бы вы оценили эту статью?

Нажмите на звездочку для оценки

Внизу страницы есть комментарии...

Напишите свое мнение там, чтобы его увидели все читатели!

Если Вы хотите только поставить оценку, укажите, что именно не так?