Архитектура x86 что это
Процессоры x86 и ARM — в чём разница?
Правда ли, что процессор в вашем мобильнике мощнее, чем в вашем компьютере?
Раньше было так: есть мощные процессоры для настольных компьютеров, ноутбуков и серверов, а есть слабые процессоры для мобильных устройств — телефонов и планшетов.
Теперь ситуация меняется: мобильные процессоры постепенно обгоняют настольные, а настольные начинают заимствовать технологии из мобильных.
RISC — простые команды, много кода
На заре процессоров у программистов не было языков высокого уровня, например JavaScript или Python. Все команды писались машинным кодом или на ассемблерах. Программист в то время работал с процессором напрямую, и каждая команда в коде обозначала какую-то инструкцию для процессора.
Например, типичная программа того времени по умножению одного числа на другое могла выглядеть для процессора так:
В итоге получалась большая программа, которую было довольно сложно прочитать.
Такую технологию назвали RISC — Reduced-instruction-set Computing, компьютер с ограниченным набором команд.
Некоторое время спустя технологию RISC усовершенствовали двумя разными способами — так появились архитектуры x86 и ARM. Первые ориентировались на мощные компьютеры, вторые — на небольшие устройства с пониженным энергопотреблением.
x86 — это сложный RISC
С развитием компьютеров программисты захотели писать более сложные программы. Но чем сложнее программа, тем больше кода приходилось писать.
Тогда компания Intel выпустила процессор 8086, который поддерживал много новых команд. Они упрощали написание кода, частично закрывая разрыв между машинным кодом и высокоуровневым языком программирования.
Возьмём тот же пример кода для перемножения двух чисел. Для процессора 8086 код выглядел так:
«Перемножь числа» — это новая сложная команда, доступная в этом процессоре. Когда процессор встречает её в коде, он выполняет много других инструкций, похожих на те, которые мы писали в начале, и получает тот же результат.
Такая технология называется CISC — complex instruction set computer, вычислительная машина со сложным набором команд.
✅ С одной стороны, программистам теперь проще писать код: вместо тридцати инструкций можно написать три, а результат будет таким же. Чем больше новых сложных команд поддерживает процессор, тем быстрее идёт разработка.
❌ С другой — процессору теперь нужно тратить некоторое время на перевод сложных команд в простые. Когда он получает от программиста команду «Перемножь эти два числа», то превращает её в те самые тридцать строк кода и выполняет каждую команду.
После процессора 8086 вышли процессоры 80286 и 80386. Они получились настолько удачными для того времени, что с тех пор Intel маркировку всех своих основных процессоров заканчивала на «86», а технология и набор команд получили название «x86».
ARM — это продвинутый RISC
По другому пути пошла компания ARM, название которой расшифровывается как «Улучшенные RISC-машины». Подход был такой: зачем нужно много сложных команды для процессора, если можно по максимуму использовать простейшие команды и сосредоточиться на эффективности работы?
В итоге ARM усовершенствовали RISC-архитектуру, сделали команды проще и сосредоточились на эффективности.
В те времена ARM-процессоры работали не так быстро, как процессоры семейства x86, зато они потребляли гораздо меньше энергии. Со временем это позволило использовать ARM-процессоры в мобильных телефонах.
Получается, процессоры отличаются тем, что x86 это CISC, а ARM — это RISC?
Большинство думает именно так, и в каком-то смысле это похоже на правду. Но это не совсем точно.
Современные x86-процессоры на 80% состоят из RISC-модулей, которые обрабатывают RISC-команды. Каждая сложная CISC-команда специальным декодером разбивается на много простых команд, которые и выполняют эти модули.
Получается, что в основе любого современного процессора всё равно лежит RISC-архитектура, сверху которой для каждого устройства наслаиваются свои дополнительные команды.
В чём успех ARM
Чтобы сделать процессор с x86-архитектурой, компании нужно самой придумать и нарисовать все транзисторы и соединения между ними. Это сложный и дорогой процесс, который не могут себе позволить маленькие компании. Из крупных производителей x86-процессоров остались только Intel и AMD.
В ARM сделали иначе — они продают лицензии на производство процессоров по своей архитектуре всем желающим. Получается, что любая компания может купить лицензию и делать свои ARM-процессоры. При этом компания может как угодно улучшать свои процессоры — изменять компоновку, добавлять новые модули и так далее.
Именно доступность лицензии и конкуренция привели к быстрому развитию ARM-процессоров, а не RISC-архитектура или наборы команд.
Сейчас на ARM свои процессоры выпускают Samsung, Nvidia, Qualcomm, Atmel, Huawei и многие другие. Если вы производитель смартфонов, вы можете разработать свой собственный процессор на ARM, а можете купить готовый у любой другой компании. Это создаёт конкуренцию на рынке, гонку технологий и всеобщий прогресс.
Главное — внутреннее устройство процессора
Современные процессоры состоят из множества отдельных модулей, каждый из которых делает что-то своё, например:
От того, как производитель реализует компоновку и соединение модулей, зависит быстродействие процессора и его применимость в разных областях. А из-за того, что ARM-архитектура основана на простых командах, в ней проще соединять такие модули между собой. Получается, что сила ARM — в простоте и гибкости.
Физический факультет
x86 (Intel 80×86) — это общее название семейства микропроцессоров, как разработанных и выпускаемых компанией Intel, так и совместимых с ними процессоров других производителей (AMD, VIA, Transmeta, Winchip и т. д.).
Такое имя закрепилось за семейством этих микропроцессоров, так как названия ранних моделей процессоров Intel заканчивались на число 86 — 8086, 80186, 80286 (i286), 80386 (i386), 80486 (i486). Более поздние модели стали называть именами собственными, например — Пентиум (Pentium), чтобы иметь возможность зарегистрировать их как торговую марку (для усложнения жизни конкурентам). Другое название для архитектуры этого типа — IA (Intel Architecture) или же IA-32.
Оглавление документа
Основные особенности архитектуры
Реальный режим
Классический режим, использованный в ранних IBM PC. Позволяет адресовать 1 мегабайт памяти и не имеет встроенных средств для защиты памяти и переключения задач, что, впрочем, не мешает реализовать программную многозадачность.
Расширения
Дополнительный набор инструкций, выполняющих характерные для процессов кодирования/декодирования потоковых аудио/видео данных действия за одну машинную инструкцию. Впервые появился в процессорах Pentium MMX. Обеспечивает только целочисленные вычисления.
SSE (англ. Streaming SIMD Extensions, потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel, и впервые представленный в процессорах серии Pentium III. Поддерживает вычисления с плавающей точкой.
Улучшенное расширение SSE. Появилось в процессорах Pentium 4. Производит потоковые вычисления с вещественными числами двойной точности (2 числа в одном регистре SSE). Кроме того, добавлены инструкции аналогичные расширению MMX, работающие с регистрами SSE (16 байт, 8 слов, 4 двойных слова или 2 учетверенных слова в одном регистре).
Продолжение SSE и SSE2, появилось в процессорах Prescott
SSSE3
Дополнение к SSE3 для работы с упакованными целыми.
3DNow!
64-битный режим
К началу 2000-х годов стало очевидно, что 32-битное адресное пространство архитектуры x86 ограничивает производительность приложений, работающих с большими объёмами данных. 32-разрядное адресное пространство позволяет процессору осуществлять непосредственную адресацию лишь 4 Гб данных, этого может оказаться недостаточным для некоторых приложений, связанных, например, с обработкой видео или обслуживанием баз данных.
В литературе и названиях версий своих продуктов компании Microsoft и Sun используют объединенное именование AMD64/EM64T, когда речь заходит о 64-х разрядных версиях их операционных систем Windows и Solaris соответственно. В то же время, поставщики программ для операционных систем GNU/Linux, BSD и Mac OS X используют метки «x 86–64 » или «amd64», если необходимо подчеркнуть, что данное ПО использует 64-разрядные инструкции.
Процессоры
Процессоры x86 Intel
16-разрядный процессор i8086 был создан в июне 1978 года, сначала работал на частотах 4,77 МГц, а затем и на 8 и на 10 МГц. Изготавливался по 3 мкм технологии и имел 29000 транзисторов.
Чуть позже, в 1979 году был разработан i8088, который работал на тех же частотах, что и i8086, но использовал 8-разрядную шину данных (внутренняя шина процессора осталась 16-разрядной) для обеспечения большей совместимости с имевшейся в то время в ходу периферией. Благодаря более низкой цене, широко использовался в ранних системах IBM PC вместо 8086.
80186
В 1982 были выпущены 80186 и 80188, которые первоначально не получили широкого распространения из-за того, что IBM не стала использовать их в своих персональных компьютерах. Впрочем, некоторые производители «клонов» сделали это, выпустив ускоренные варианты IBM PC XT. В то же время, эти процессоры оказались чрезвычайно удачными для использования во встроенных системах, и в различных модификациях выпускаются до настоящего времени[источник?]. В эти процессоры были первоначально добавлено несколько новых команд, повышена тактовая частота. Впоследствии появились модификации, содержащие дополнительные аппаратные средства, такие, как интегрированные контроллеры последовательного порта.
80286
80386
Первый 32-разрядный процессор ( 16–33 МГц). Появился в 1985 году. Знаменовал собой революцию в мире процессоров x86. Основные принципы, заложенные в этом чипе, без кардинальных изменений дожили и до наших дней (за всё это время изменения касались, в основном, повышения производительности, расширения набора команд, увеличения разрядности).
Pentium
Pentium (1993 год) — первый суперскалярный процессор и суперконвейерный процессор Intel. Суперскалярность — термин, означающий, что процессор позволяет выполнять более одной операции за один такт. Суперконвейерность означает, что процессор имеет несколько вычислительных конвейеров. У Pentium их два, что позволяет ему при одинаковых частотах в идеале быть вдвое производительней 486, выполняя сразу 2 инструкции за такт. Кроме этого, особенностью процессора Pentium являлся полностью переработанный и очень мощный на то время блок FPU, производительность которого оставалась недостижимой для конкурентов вплоть до конца 90-х годов.
Pentium Pro
Pentium Pro (1995 год) – первый процессор шестого поколения. Идеи и технологии, заложенные в данный чип, определили архитектуры всех современных x86-процессоров: блоки предсказания ветвлений, переименование регистров, RISC-ядро, интегрированный кеш второго уровня. Однако технологическая сложность ядра данного процессора привела к сравнительно невысокому выходу годных чипов при технологиях того времени, что сказалось на высокой цене Pentium Pro. Поэтому данный процессор применялся только в High-End системах и серверах.
Pentium MMX
Pentuum MMX (январь 1997 года) – процессор пятого поколения, и по сути, просто модификация ядра Pentium. Был добавлен новый блок целочисленных матричных вычислений MMX (Multi-Media eXtensions) и увеличен до 32К объем кеша первого уровня.
Pentium II
Pentium II (май 1997 года) – модификация ядра Pentium Pro с целью сделать его более доступным. Интегрированный кеш был вынесен на отдельную микросхему с пониженной в два раза частотой. Это упростило и удешевило ядро, хотя и сделало его более медленным, чем Pentium Pro. Новая конструкция процессора потребовала размещение элементов на печатной плате, что, в свою очередь, привело к изменению конструктива процессора. Данные чипы выпускались в виде картриджей, устанавливающихся в специальный разъем на плате (Slot 1). Кроме этого, в ядро Pentuim II был добавлен блок MMX.
Celeron
Celeron — упрощённый вариант Pentium II/III/IV для построения недорогих компьютеров. Основные отличия этих процессоров в объёме кэша второго уровня и частоте шины.
Pentium III
Pentium III, изготовленный по 0,18 мкм технологическому процессу, отличается от P2 главным образом, добавлением SSE-инструкций.
Pentium 4
Принципиально новый процессор с гиперконвейеризацией (hyperpipelining) — с конвейером, состоящим из 20 ступеней. Согласно заявлениям Intel, процессоры, основанные на данной технологии, позволяют добиться увеличения частоты примерно на 40 процентов относительно семейства P6 при одинаковом технологическом процессе (при «правильной» загрузке процессора).
На практике же, первые модели работали даже медленнее, чем Pentium III.
Семейство процессоров, ориентированных на серверы и многопоточные вычисления.
Процессоры x86 AMD
Процессоры-аналоги i486. В то время, как Intel остановился на частоте 100 МГц у i486, AMD выпускала процессоры с частотами 120 МГц и 133 МГц. Также они отличались увеличенным объёмом кэша первого уровня (16 Кбайт).
Процессоры — аналоги Pentium. Несмотря на превосходство в целочисленных операциях над аналогами от Intel (в ядре данного процессора применялся ряд технологий шестого поколения), производительность блока вычислений с плавающей запятой раза в полтора уступала по производительности процессорам Pentium с аналогичной тактовой частотой. Кроме того, наблюдалась плохая совместимость с ПО некоторых производителей. Недостатки K5 были чрезвычайно преувеличены в различных сетевых и других неформальных обсуждениях и на долгое время способствовали (в целом — несправедливому) ухудшению репутации продукции AMD у пользователей.
Выпущен в апреле 1997 года. Принципиально новый процессор AMD, основанный на ядре, приобретенном у NextGen. Данный процессор имел конструктив пятого поколения, однако относился к шестому поколению и позиционировался как конкурент Pentuim II. Включал в себя блок MMX, и несколько переработанный блок FPU. Однако данные блоки все равно работали на 15–20 % медленнее, чем у аналогичных по частоте процессоров Intel. Процессор имел 64 Кбайт кэша первого уровня. В целом сравнимая с Pentum II производительность, совместимость со старыми материнскими платами и более ранний старт (AMD представила К6 на месяц раньше, чем Intel представила P-II) сделали его достаточно популярным, однако проблемы с производством у АМД значительно испортили репутацию данного процессора.
Дальнейшее развитие ядра К-6. В этих процессорах была добавлена поддержка специализированного набора команд 3DNow!. Реальная производительность, однако, оказалась существенно ниже, чем у аналогичных по частоте Pentium II (это было вызвано тем, что прирост производительности с ростом частоты у P-II был выше благодаря внутреннему кешу), и конкурировать К 6–2 смогли лишь с Celeron. Процессор имел 64 Кбайт кэша первого уровня.
K6-III
K6-III+
Аналог К6-III+ с урезанным до 128 Кб кэшем второго уровня.
Athlon
Очень успешный процессор, благодаря которому фирма AMD сумела восстановить почти утраченные позиции на рынке микропроцессоров. Кэш первого уровня — 128 Кб. Первоначально процессор выпускался в картридже, с размещением кэша второго уровня (512 Кб) на плате, и устанавливался в разъём Slot A, механически, но не электрически совместимый с интеловским Slot 1. Затем устанавливался в разъём Socket A и имел кэш второго уровня (256 Кб) в ядре. По быстродействию — примерный аналог Pentium III.
Duron
Конкурент Celeron поколений Pentium III/4. Отличается от Athlon’a объёмом кэша второго уровня (всего 64 Кб), зато интегрированным в кристалл и работавшем на частоте ядра. Производительность заметно выше, чем у аналогичного Celeron, и при выполнении многих задач соответствует Pentium III.
Athlon XP
Продолжение развития архитектуры Athlon. По быстродействию — аналог Pentium 4. По сравнению с обычным Athlon’ом, добавлена поддержка SSE инструкций.
Sempron
Более дешёвый (за счёт уменьшенного кэша второго уровня) вариант процессоров Athlon XP и Athlon 64. Первоначально процессоры Sempron представляли из себя перемаркированные чипы Athlon XP на ядре Thorton, имевшим 256 Kb кэша 2-го уровня. Поздние представляют собой урезанные версии Athlon 64 (socket 754, одноканальный режим работы с памятью).
Athlon 64
Первый процессор, поддерживающий архитектуру x86_64.
Athlon 64 X2
Продолжение архитектуры Athlon 64, имеет 2 вычислительных ядра.
Athlon FX
Имеет репутацию «самого быстрого процессора для игрушек». Является, по сути, серверным процессором Opteron 1xx на десктопных сокетах без поддержки Registered-memory. Выпускается малыми партиями. Стоит значительно дороже своих «массовых» собратьев.
Geode
Семейство процессоров, ориентированное на сектор встраиваемых решений, SOC.
Выпускала серию процессоров, часть из которых (ядро V20/V30) была программно совместима как с Intel x186, так и с Intel 8080. Переключение между режимами работы осуществлялось при помощи 3 дополнительных инструкций. Аппаратно они выглядели как сильно ускоренная версия 8088 или 8086.
Процессоры на основе ядра V33 не имели режима эмуляции 8080, зато поддерживали, при помощи двух дополнительных инструкций, расширенный режим адресации.
Процессоры МЦСТ
Компанией ЗАО «МЦСТ» выпущен первый процессор «Эльбрус» и вычислительный комплекс на его базе — «Эльбрус–3М1», позволяющий работать в режиме двоичной совместимости с семейством x86 процессоров.
ARM против x86: В чем разница между двумя архитектурами процессоров?
Вы наверняка знаете, что мир процессоров разбит на два лагеря. Если вы смотрите это видео со смартфона, то для вас работает процессор на архитектуре ARM, а если с ноутбука, для вас трудится чип на архитектуре x86.
А теперь еще и Apple объявила, что переводит свои Mac на собственные процессоры Apple Silicon на архитектуре ARM. Мы уже рассказывали, почему так происходит. А сегодня давайте подробно разберемся, в чем принципиальные отличия x86 и ARM. И зачем Apple в это все вписалась?
Итак, большинство мобильных устройств, iPhone и Android’ы работают на ARM’е. Qualcomm, HUAWEI Kirin, Samsung Exynos и Apple A13/A14 Bionic — это все ARM-процессоры.
А вот на компьютере не так — там доминирует x86 под крылом Intel и AMD. Именно поэтому на телефоне мы не можем запустить Word с компьютера.
x86 — так называется по последним цифрам семейства классических процессоров Intel 70-80х годов.
Чем же они отличаются?
Есть два ключевых отличия.
Первое — это набор инструкций, то есть язык который понимает процессор
Второе отличие — это микроархитектура. Что это такое?
От того на каком языке говорят процессоры, зависит и то, как они проектируются. Потому как для выполнения каждой инструкции на процессоре нужно расположить свой логический блок. Соответственно, разные инструкции — разный дизайн процессора. А дизайн — это и есть микроархитектура.
Но как так произошло, что процессоры стали говорить на разных языках?
История CISC
Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22».
Всё началось в 1960-х. Поначалу программисты работали с машинным кодом, то есть реально писали нолики и единички. Это быстро всех достало и появился Assembler. Низкоуровневый язык программирования, который позволял писать простые команды типа сложить, скопировать и прочее. Но программировать на Assembler’е тоже было несладко. Потому как приходилось буквально “за ручку” поэтапно описывать процессору каждое его действие.
Поэтому, если бы вы ужинали с процессором, и попросили передать его вам соль, это выглядело бы так:
Этот подход стал настоящим спасением как для разработчиков, так и для бизнеса. Захотел клиент новую инструкцию — не проблема, были бы деньги — мы сделаем. А деньги у клиентов были.
Недостатки CISC
Но был ли такой подход оптимальным. С точки зрения разработчиков — да. Но вот микроархитектура страдала.
Представьте, вы купили квартиру и теперь вам нужно обставить её мебелью. Площади мало, каждый квадратный метр на счету. И вот представьте, если бы CISC-процессор обставил мебелью вам гостиную, он бы с одной стороны позаботился о комфорте каждого потенциального гостя и выделил бы для него своё персональное место.
С другой стороны, он бы не щадил бюджет. Диван для одного человека, пуф для другого, кушетка для третьего, трон из Игры Престолов для вашей Дейенерис. В этом случае площадь комнаты бы очень быстро закончилась. Чтобы разместить всех вам бы пришлось увеличивать бюджет и расширять зал. Это не рационально. Но самое главное, CISC-архитектура существует очень давно и те инструкции, которые были написаны в 60-х годах сейчас уже вообще не актуальны. Поэтому часть мебели, а точнее исполнительных блоков, просто не будут использоваться. Но многие из них там остаются. Поэтому появился RISC…
Преимущества RISC
С одной стороны писать на Assembler’е под RISC процессоры не очень-то удобно. Если в лоб сравнивать код, написанный под CISC и RISC процессоры, очевидно преимущество первого.
Так выглядит код одной и той же операции для x86 и ARM.
Представьте, что вы проектируете процессор. Расположение блоков на х86 выглядело бы так.
Каждый цветной квадрат — это отдельные команды. Их много и они разные. Как вы поняли, здесь мы уже говорим про микроархитектуру, которая вытекает из набора команд. А вот ARM-процессор скорее выглядит так.
Ему не нужны блоки, созданные для функций, написанных 50 лет назад.
По сути, тут блоки только для самых востребованных команд. Зато таких блоков много. А это значит, что можно одновременно выполнять больше базовых команд. А раритетные не занимают место.
Еще один бонус сокращенного набора RISC: меньше места на чипе занимает блок по декодированию команд. Да, для этого тоже нужно место. Архитектура RISC проще и удобнее, загибайте пальцы:
Поэтому наши смартфоны, которые работают на ARM процессорах с архитектурой RISC, долго живут, не требуют активного охлаждения и такие быстрые.
Лицензирование
Но это все отличия технические. Есть отличия и организационные. Вы не задумывались почему для смартфонов так много производителей процессоров, а в мире ПК на x86 только AMD и Intel? Все просто — ARM это компания которая занимается лицензированием, а не производством.
Даже Apple приложила руку к развитию ARM. Вместе с Acorn Computers и VLSI Technology. Apple присоединился к альянсу из-за их грядущего устройства — Newton. Устройства, главной функцией которого было распознавание текста.
Даже вы можете начать производить свои процессоры, купив лицензию. А вот производить процессоры на x86 не может никто кроме синей и красной компании. А это значит что? Правильно, меньше конкуренции, медленнее развитие. Как же так произошло?
Ну окей. Допустим ARM прекрасно справляется со смартфонами и планшетами, но как насчет компьютеров и серверов, где вся поляна исторически поделена? И зачем Apple вообще ломанулась туда со своим Apple Silicon.
Что сейчас?
Допустим мы решили, что архитектура ARM более эффективная и универсальная. Что теперь? x86 похоронен?
На самом деле, в Intel и AMD не дураки сидят. И сейчас под капотом современные CISC-процессоры очень похожи на RISC. Постепенно разработчики CISC-процессоров все-таки пришли к этому и начали делать гибридные процессоры, но старый хвост так просто нельзя сбросить.
Но уже достаточно давно процессоры Intel и AMD разбивают входные инструкции на более мелкие микро инструкции (micro-ops), которые в дальнейшем — сейчас вы удивитесь — исполняются RISC ядром.
Да-да, ребята! Те самые 4-8 ядер в вашем ПК — это тоже RISC-ядра!
Надеюсь, тут вы окончательно запутались. Но суть в том, что разница между RISC и CISC-дизайнами уже сейчас минимальна.
А что остается важным — так это микроархитектура. То есть то, насколько эффективно все организовано на самом камне.
Ну вы уже наверное знаете, что Современные iPad практически не уступают 15-дюймовым MacBook Pro с процессорами Core i7 и Core i9.
А что с компьютерами?
Недавно компания Ampere представила свой 80-ядерный ARM процессор. По заявлению производителя в тестах процессор Ampere показывает результат на 4% лучше, чем самый быстрый процессор EPYC от AMD и потребляет на 14% меньше энергии.
Компания Ampere лезет в сегменты Cloud и Workstation, и показывает там отличные цифры. Самый быстрый суперкомпьютер в мире сегодня работает на ARM ISA. С обратной стороны, Intel пытается все таки влезть в сегмент low power и для этого выпускает новый интересный процессор на микроархитектуре lakefield.
И Apple та компания, которая способна мотивировать достаточное количество разработчиков пилить под свой ARM. Но суть этого перехода скорее не в противостоянии CISC и RISC. Поскольку оба подхода сближаются, акцент смещается на микроархитектуру, которую делает Apple для своих мобильных устройств. И судя по всему микроархитектура у них крута. И они хотели бы ее использовать в своих компьютерах.
И если бы Intel лицензировал x86 за деньги другим людям, то вероятно Apple просто адаптировали свою текущую микроархитектуру под x86. Но так как они не могут этого сделать, они решили просто перейти на ARM. Проблема для нас с микроархитектурой в том, что она коммерческая тайна. И мы про нее ничего не знаем.
Итоги
Спрос на ARM в итоге вырастет. Для индустрии это не просто важный шаг, а архиважный. Линус Торвальдс говорил, что пока рабочие станции не станут работать на ARM — на рынке серверов будут использовать x86.
И вот это случилось — в перспективе это миллионы долларов, вложенных в серверные решения. Что, конечно, хорошо и для потребителей. Нас ждет светлое будущее и Apple, действительно, совершила революцию!
Редактор материала: Антон Евстратенко. Этот материал помогли подготовить наши зрители Никита Куликов и Григорий Чирков. Спасибо ребята!