59 KiB
Лекция 1. Введение в архитектуру аппаратных средств. Понятие архитектуры и микроархитектуры. Принципы фон Неймана и гарвардская архитектура. Классификация компьютеров
Дисциплина: Архитектура аппаратных средств
Тема: Введение в архитектуру аппаратных средств; архитектура и микроархитектура; принципы фон Неймана; гарвардская архитектура; классификация компьютеров
Аудитория: студенты бакалавриата направлений «Информационные системы и технологии», «Прикладная информатика», «Информатика и вычислительная техника»
Длительность: 2 академических часа (90 минут)
1. Тема, цель и задачи лекции
Добрый день. Сегодня мы открываем дисциплину, которая объясняет не какую программу написать, а на какой машине она в самом деле исполняется. Пока вы мыслите компьютером как «чёрным ящиком с процессором и памятью», вам будут казаться магией и тормоза, и переполнение стека, и то, почему один и тот же код на ноутбуке и на микроконтроллере ведёт себя по-разному.
Архитектура аппаратных средств (computer / hardware architecture) — это дисциплина о том, из каких частей состоит вычислительная система, как эти части видны программисту, как они устроены внутри и по каким законам их классифицируют.
Цель лекции: заложить понятийный каркас курса — отличить архитектуру от микроархитектуры, понять канон фон Неймана и альтернативу Гарварда, научиться относить реальные машины к классам.
Задачи лекции:
- Определить предмет дисциплины и уровни абстракции вычислительной системы.
- Развести понятия архитектуры (в т.ч. ISA), микроархитектуры и реализации на схемотехнике.
- Сформулировать принципы фон Неймана, разобрать состав машины и цикл выборка–декодирование–исполнение.
- Объяснить узкое место фон Неймана и зачем появилась гарвардская (и модифицированная гарвардская) организация.
- Дать рабочие классификации компьютеров: по назначению, форм-фактору, поколениям, параллелизму (таксономия Флинна), типу системы команд.
- На современных примерах (x86, ARM, DSP, микроконтроллеры) показать, что «чистых» схем в железе почти не осталось.
После лекции вы должны уметь про любой знакомый устройство сказать: какая у него ISA, фоннеймановский он или гарвардский на каком уровне, и к какому классу машин относится.
Вывод по разделу. Курс начинается не с каталога процессоров, а с языка, на котором мы будем описывать любую вычислительную машину.
2. Актуальность темы
Зачем это специалисту по информационным системам, а не только будущему схемотехнику?
Во-первых, производительность и стоимость системы почти всегда упираются в аппаратные решения, которые вы не видите из Python. Кэш, конвейер, ширина шины, отделение памяти команд от памяти данных — всё это микроархитектура. Пока вы не отличаете «медленный алгоритм» от «промах кэша» и «узкое место фон Неймана», вы будете лечить не ту болезнь.
Во-вторых, один и тот же программный контракт живёт на разных железах. Программа под x86-64 запускается и на Intel Core, и на AMD Ryzen, и в эмуляции на Apple Silicon. Архитектура (ISA) общая, микроархитектуры разные. Отсюда совместимость, разный IPC, разное тепловыделение.
В-третьих, встроенные системы — это не «маленький ПК». Контроллер стиральной машины, ЭБУ автомобиля, DSP наушников часто гарвардские: прошивка в Flash, данные в SRAM, два разных тракта. Если вы проектируете прошивку как для фоннеймановского ПК, вы удивитесь, почему нельзя выполнить данные как код — или, наоборот, почему это опасно, когда можно.
В-четвёртых, классификация нужна, чтобы не сравнивать несравнимое. Суперкомпьютер, блейд-сервер, ноутбук, смартфон, Raspberry Pi, STM32 — всё «компьютеры», но требования к памяти, вводу-выводу, надёжности и модели программирования разные. На внедрении ИС (ваш параллельный курс) это проявляется как выбор сервера, АРМ, контроллера АСУТП, ПЛК.
В-пятых, история здесь — не музей. Отчёт фон Неймана 1945 года (First Draft of a Report on the EDVAC) до сих пор задаёт ментальную модель, в которой пишут компиляторы. Гарвардская Mark I задаёт ментальную модель DSP. Пока вы не знаете канон, вам трудно понять, чем от него сознательно уходят современные машины: внеочередное исполнение, спекуляция, когерентность кэшей, гетерогенные SoC.
Вывод по разделу. Архитектура аппаратных средств — рабочий язык для программиста, внедренца и администратора: без него нельзя объяснить ни совместимость, ни скорость, ни выбор платформы.
3. Ключевые понятия и определения
3.1. Компьютер и вычислительная система
Компьютер (computer) — устройство, автоматически выполняющее последовательность операций над данными по заранее заданной программе.
Вычислительная система (computer system) — компьютер плюс периферия, системное ПО и, в широком смысле, человек-оператор. В курсе мы чаще говорим об аппаратной части (hardware): процессор, память, шины, устройства ввода-вывода.
Процессор / ЦП (central processing unit, CPU) — устройство, выбирающее команды из памяти и исполняющее их. В современных кристаллах «процессор» часто есть система на кристалле (system-on-chip, SoC): ядра CPU, GPU, NPU, контроллеры памяти и ввода-вывода на одной подложке.
3.2. Архитектура
Слово архитектура в вычислительной технике многозначно. Зафиксируем три употребления, которые нельзя смешивать.
- Архитектура компьютера как облик машины для программиста — то, что Джин Амдал, Г. Блау и Ф. Брукс в 1964 году (при описании IBM System/360) назвали the attributes of a system as seen by the programmer, то есть структура и поведение, видимые из программы: набор команд, форматы, адресация, регистры, типы данных, прерывания. Сегодня это почти синоним ISA.
- Архитектура как организация системы в целом — процессор, память, ввод-вывод, связи между ними (computer organization в традиции Таненбаума и Столлингса).
- Архитектура как уровень в стеке абстракций — «архитектурный уровень» между операционной системой и цифровой логикой.
В узком техническом смысле, который нам нужен дальше:
Система команд / архитектура набора команд (instruction set architecture, ISA) — контракт между аппаратурой и ПО: какие команды есть, как они кодируются, какие регистры и режимы адресации видны, какова модель памяти и что считается наблюдаемым результатом выполнения.
Примеры ISA: IA-32, x86-64 (AMD64), ARMv8-A / AArch64, RISC-V RV64I, IBM System/360, AVR, PIC16.
3.3. Микроархитектура
Микроархитектура (microarchitecture, µarch) — конкретная аппаратная реализация ISA: конвейер, число исполнительных устройств, кэши, предсказатель переходов, очередь команд, внеочередное исполнение, частота, способы доступа к памяти. Программист не обязан её знать, чтобы программа была корректной. Он обязан её чувствовать, чтобы программа была быстрой и предсказуемой.
Одна ISA — много микроархитектур. x86-64 реализован в Intel Skylake, Golden Cove, в AMD Zen 3 / Zen 4, в ядрах-трансляторах Apple Rosetta. ARM Cortex-M0 и Cortex-A76 — разные миры при родственных семействах команд.
Реализация / схемотехника (implementation, circuit / physical design) — ещё ниже: вентили, библиотека стандартных ячеек, техпроцесс, металлизация. Одна микроархитектура может быть переведена на другой техпроцесс.
Формула, которую полезно помнить:
процессор = ISA + микроархитектура + схемотехническая реализация
Иногда слово «архитектура» употребляют широко: ISA + микроархитектура. Тогда уточняйте, о каком слое речь.
3.4. Организация и уровни абстракции
Эндрю Таненбаум предлагает смотреть на машину как на многоуровневую машину:
| Уровень | Что видно | Кто «программирует» |
|---|---|---|
| Прикладной | языки, фреймворки | прикладной разработчик |
| ОС / виртуальная машина | процессы, файлы, системные вызовы | системный программист |
| ISA | команды, регистры, адреса | компилятор, ассемблер |
| Микроархитектура | конвейер, кэши, микрокоманды | архитектор процессора |
| Цифровая логика | вентили, триггеры, конечные автоматы | логический проектировщик |
| Электрический / физический | транзисторы, сигналы | технолог |
Дисциплина «Архитектура аппаратных средств» живёт на уровнях ISA, микроархитектуры и организации системы (процессор–память–ввод-вывод).
3.5. Программа, команда, данные
Команда / инструкция (instruction) — элементарное предписание процессору: код операции + операнды.
Программа (program) — последовательность команд.
Данные (data) — операнды и результаты.
В фоннеймановской машине и то и другое лежит в одной памяти; смысл ячейки определяется тем, как к ней обратились — как к команде или как к данному.
Вывод по разделу. Архитектура — контракт, видимый программе (прежде всего ISA); микроархитектура — скрытая реализация этого контракта; путать их — всё равно что путать синтаксис языка и устройство компилятора.
4. Основное содержание
4.1. Что изучает архитектура аппаратных средств
Предмет курса можно свести к пяти вопросам.
- Как машина выглядит для программы? (ISA, модель памяти, прерывания)
- Как она устроена внутри, чтобы этот вид поддерживать? (микроархитектура, конвейер, иерархия памяти)
- Как части системы связаны? (шины, межсоединения, контроллеры, DMA)
- Какие есть альтернативные организации? (фон Нейман / Гарвард, RISC / CISC, одноядерность / многоядерность)
- Как сравнивать машины? (классификация, метрики: частота, IPC, пропускная способность памяти, TDP)
Метрика, которую студенты обожают и которой недостаточно: тактовая частота. Производительность ядра ближе к
[ \text{время выполнения} = \text{число команд} \times \text{CPI} \times \text{длительность такта}, ]
где CPI (cycles per instruction) — среднее число тактов на команду и почти целиком определяется микроархитектурой и свойствами программы (промахи кэша, неверные предсказания переходов). ISA влияет на число команд; микроархитектура — на CPI и частоту.
Вывод по разделу. Курс учит читать машину на трёх языках: команд, внутренней организации и системных связей — и не сводить качество железа к гигагерцам.
4.2. Архитектура и микроархитектура: контракт и реализация
4.2.1. Что входит в ISA
Типичный «паспорт» архитектуры набора команд:
- типы данных, видимые аппаратуре (целые, float, векторы SIMD);
- модель регистров: сколько, какой ширины, есть ли банк, есть ли флаги;
- пространство адресов и режимы адресации (регистровая, косвенная, индексная, PC-relative);
- форматы команд и кодирование (фиксированная длина RISC vs переменная CISC);
- набор операций: арифметика, логика, сдвиги, загрузки/записи, переходы, системные;
- соглашения о вызовах на уровне архитектуры (есть ли команда CALL, как устроен стек);
- модель прерываний и исключений;
- гарантии порядка: что программист считает последовательным выполнением;
- привилегии: пользователь / ядро, виртуальная память как архитектурная черта.
Компилятор и ОС договариваются с железом только через ISA. Поэтому бинарный код Linux x86-64 не поедет на «голом» ARMv8 без трансляции: это другая архитектура, не «другая микросхема».
4.2.2. Что прячется в микроархитектуре
Всё, что можно менять, не ломая старые программы:
- глубина конвейера и число стадий;
- in-order vs out-of-order;
- суперскалярность (несколько команд за такт);
- SMT / Hyper-Threading;
- размеры и ассоциативность кэшей L1I/L1D/L2/L3;
- предсказатель переходов и спекуляция;
- политика обращения в память, префетч;
- микрокод для сложных команд CISC;
- динамическое изменение частоты и напряжения (DVFS).
Хеннесси и Паттерсон подчёркивают: микроархитектура обязана соблюдать видимую семантику ISA. Она может исполнять команды в любом внутреннем порядке, но результаты для программиста должны выглядеть так, будто команды шли строго друг за другом (если ISA не ввела ослабленную модель памяти — как в ARM и RISC-V).
4.2.3. Зачем это разделение инженеру
Совместимость десятилетий x86 возможна только потому, что ISA стабильнее микроархитектуры. IBM System/360 в 1964 году именно это и обещала: семейство машин разной стоимости с одной программой. Это историческое рождение современного смысла слова «архитектура».
Обратная сторона: безопасность. Атаки класса Spectre/Meltdown эксплуатируют микроархитектурные эффекты (спекулятивное исполнение, побочные каналы кэша), которых нет в учебном описании ISA. Значит, «программисту микроархитектура не видна» — правда только для функциональной корректности, не для изоляции и не для производительности.
Вывод по разделу. ISA — обещание совместимости; микроархитектура — поле конкуренции по скорости, энергии и цене при том же обещании.
4.3. Принципы фон Неймана
4.3.1. Историческая справка
В 1945 году Джон фон Нейман оформил идеи группы Муровской школы (Эккерт, Мокли и др.) в документе First Draft of a Report on the EDVAC. Машина описана как набор «органов»:
- CA — центральное арифметическое устройство (ALU);
- CC — центральное устройство управления (control unit);
- M — память;
- I / O — ввод и вывод;
- R — внешний носитель записей.
Принципиальный скачок относительно машин на коммутационных панелях: программа хранится в памяти так же, как данные (stored-program computer). Эту организацию часто называют также принстонской (Princeton architecture) — по Институту перспективных исследований, где фон Нейман работал над IAS-машиной.
Важно для экзамена: «принципы фон Неймана» в российских учебниках — это дидактическая реконструкция, удобный список. В самом First Draft нет пронумерованных «пяти заповедей». Мы пользуемся списком, потому что он хорошо объясняет, чем эта машина отличается от гарвардской и от калькулятора.
4.3.2. Классические принципы (учебная формулировка)
| № | Принцип | Английский смысл | Следствие |
|---|---|---|---|
| 1 | Двоичное кодирование | binary representation | команды и данные — двоичные слова |
| 2 | Программное управление | stored-program control | поведение машины задаёт программа в памяти, а не жёсткая проводка |
| 3 | Однородность памяти | unified memory for code and data | команды и данные лежат в одном адресном пространстве |
| 4 | Адресность | addressable memory cells | память — нумерованные ячейки; команда ссылается на номер |
| 5 | Последовательное выполнение (с переходами) | sequential execution + control flow | команды идут одна за другой, пока переход не изменит счётчик команд |
Иногда отдельно выделяют иерархию памяти и условный переход как условие универсальности: без условного перехода машина не тьюринг-полна в практическом смысле.
Принцип 3 — водораздел с Гарвардом. Именно он позволяет компилятору, загрузчику, ОС и вирусу относиться к программе как к данным: загрузить файл, разместить в RAM, передать управление. Он же позволяет самомодифицирующемуся коду — и делает защиту (DEP/NX, W^X) отдельной инженерной задачей: аппаратура умеет исполнить то, что только что записали как данные.
4.3.3. Состав фоннеймановской машины
+-----------+
| Ввод I |
+-----+-----+
|
+-------+ +---+---+ +--------+
| АЛУ |---| УУ |---| Память |
| ALU | | CU | | M |
+-------+ +---+---+ +--------+
|
+-----+-----+
| Вывод O |
+-----------+
АЛУ выполняет арифметику и логику над словами из регистров.
УУ интерпретирует код операции, вырабатывает сигналы, ведёт счётчик команд (program counter, PC / IP).
Регистры — сверхбыстрая память внутри процессора: аккумулятор в ранних машинах, регистровый файл в RISC.
Память хранит и программу, и данные; обмен с процессором идёт по общей шине (или общему порту), что и порождает узкое место.
Ввод-вывод связывает машину со средой; в развитых системах появляется DMA (прямой доступ к памяти), чтобы не гонять каждое слово через АЛУ.
4.3.4. Цикл команды (instruction cycle)
Канон, который вы будете детализировать весь семестр:
- Fetch — выборка команды по адресу из PC, увеличение PC.
- Decode — декодирование кода операции, выбор регистров.
- Execute — операция в АЛУ или формирование адреса.
- Memory — при необходимости чтение/запись данных (те же шина и память, что для команд).
- Write-back — запись результата в регистр.
В простейшей фоннеймановской машине шаги 1 и 4 не могут идти одновременно: один тракт к памяти. Это аппаратный смысл принципа однородности.
Разберём на пальцах. Пусть учебная машина имеет 16-битную шину, память 64 Кслов, АЛУ складывает за 1 такт, обращение к памяти — 3 такта, декодирование — 1 такт. Команда ADD R1, [100] (прибавить к регистру содержимое ячейки 100):
- Fetch: чтение команды из памяти по PC — 3 такта.
- Decode: узнать, что это ADD и нужен операнд из памяти — 1 такт.
- Memory: чтение данного из ячейки 100 — ещё 3 такта. АЛУ в это время простаивает.
- Execute: сложение — 1 такт.
- Write-back в R1 — условно 1 такт (если регистр на кристалле).
Итого порядка 9 тактов, из них 6 — ожидание памяти, и выборку команды нельзя было совместить с чтением данного. Гарвардская машина с двумя портами начала бы Fetch следующей команды, пока идёт Memory текущей. Кэш модифицированного Гарварда делает то же, если оба слова уже в L1. Вот вам разница канонов в тактах, а не в лозунгах.
4.3.5. Узкое место фон Неймана
Джон Бэкус в лекции при вручении премии Тьюринга (1977) назвал von Neumann bottleneck ограничение: процессор и память связаны узким каналом, по которому вперемешку идут команды и данные. Даже если АЛУ становится быстрее, система упирается в пропускную способность и задержку памяти.
Как с этим борются, не отменяя программную модель фон Неймана:
- кэш (часто раздельный L1I и L1D — уже шаг к Гарварду);
- иерархия L1–L2–L3–RAM–диск;
- предвыборка команд, префетч данных;
- конвейер и суперскаляр, чтобы «прятать» задержку;
- вычисления ближе к данным (GPU, in-memory, NPU);
- многоядерность и несколько контроллеров памяти.
Программист видит по-прежнему одно плоское адресное пространство. Под ним — сложная микроархитектура, маскирующая узкое место.
4.3.6. Что фон Нейман не запрещает
Студенческий миф: «современный процессор уже не фоннеймановский, потому что у него конвейер и два кэша». Нет. Программная модель большинства универсальных CPU — фоннеймановская: одна память команд и данных с точки зрения адресов, последовательная семантика. Конвейер и кэши — микроархитектура. Машина перестаёт быть фоннеймановской в сильном смысле, когда программист обязан класть код и данные в разные пространства и не может трактовать одно как другое — как на классическом DSP или AVR.
Вывод по разделу. Принципы фон Неймана задают хранимую программу, общую память и последовательное управление; плата за универсальность — узкое место тракта процессор–память.
4.4. Гарвардская архитектура
4.4.1. Идея и происхождение
Гарвардская архитектура (Harvard architecture) названа по машине Harvard Mark I (Говард Эйкен, IBM, 1940-е): программа жила на перфоленте, данные — на механических счётчиках и иных носителях. Тракты команд и данных разделены физически.
В цифровой формулировке:
- отдельная память команд и память данных;
- отдельные шины (или порты) адреса и данных для каждой;
- процессор может одновременно выбирать следующую команду и читать/писать данное.
Следствия:
- выше потенциальная пропускная способность при той же технологии памяти;
- слово команды и слово данных могут быть разной ширины (14-битная команда и 8-битные данные — норма для PIC);
- программу в классическом Гарварде нельзя просто «записать как данные» и выполнить: нет общего пространства.
4.4.2. Где живёт чистый Гарвард сегодня
- многие микроконтроллеры: Microchip PIC, классический AVR (Flash — код, SRAM — данные; команда LPM — специальный мост «прочитать байт прошивки как данные»);
- DSP (цифровые сигнальные процессоры): Texas Instruments C55x, часть ядер Analog Devices — выборка команды и двух операндов за такт для MAC (multiply-accumulate);
- некоторые ускорители и ПЛИС-мягкие ядра с раздельной блочной памятью.
Именно поэтому прошивку МК «прошивают» в Flash, а переменные держат в RAM. Стековая машина учебного ПК здесь плохой шаблон: кучи «как в Linux» может просто не быть.
4.4.3. Модифицированная гарвардская архитектура
Modified Harvard architecture — компромисс, на котором стоят почти все современные универсальные CPU и многие Cortex-M / Cortex-A:
- с точки зрения программиста — единое адресное пространство (можно загрузить программу в RAM и исполнить, можно читать константы из области кода);
- с точки зрения трактов рядом с ядром — раздельные кэши и порты L1I и L1D, параллельная выборка команды и данного.
Пока оба обращения попадают в кэш, ядро ведёт себя как гарвардское. При промахе оба потока сходятся к общей DRAM — и снова виден фон Нейман. Отсюда формулировка, которую я прошу запомнить:
Универсальные процессоры фоннеймановские по ISA и модифицированно-гарвардские по микроархитектуре кэш-уровня.
Дополнительная аппаратура: блок MMU/MPU, биты NX/XN («страница неисполняемая»), политика W^X в ОС. Они искусственно ограничивают принцип однородности памяти из соображений безопасности, не отменяя его полностью.
4.4.4. Сравнение двух канонов
| Свойство | Фон Нейман | Классический Гарвард | Модифицированный Гарвард |
|---|---|---|---|
| Память команд и данных | одна | две физические | кэши разделены, backing store общий |
| Параллельный доступ команда+данные | нет (без кэша) | да | да, пока попали в кэш |
| Программа как данные | естественно | затруднено / особые команды | возможно |
| Ширина слова команд и данных | обычно одна | может различаться | обычно одна в основной памяти |
| Типичные машины | ранние ЭВМ, программная модель PC/сервера | PIC, часть DSP | x86, ARM Cortex-A, RISC-V прикладные ядра |
| Главный риск | узкое место шины | неудобство загрузки ПО, два контроллера памяти | когерентность, сложность кэша |
| Главный выигрыш | простота, универсальность загрузчика | предсказуемый поток, DSP-скорость | баланс скорости и удобства ОС |
Вывод по разделу. Гарвард отделяет тракты команд и данных и выигрывает в параллелизме доступа; современные универсальные CPU берут от него кэши, сохраняя фоннеймановскую модель памяти для программиста.
4.5. Классификация компьютеров
Классификация, как и в курсе информационных систем, фасетная. Одна машина одновременно: мобильная, фоннеймановская по ISA, MIMD на уровне SoC, RISC, потребительского класса.
4.5.1. По назначению
| Класс | Английский термин | Примеры | Архитектурный акцент |
|---|---|---|---|
| Универсальные | general-purpose | PC, сервер, смартфон | богатая ISA, MMU, ОС |
| Специализированные | special-purpose | DSP, GPU, NPU, RAID-контроллер | узкий класс алгоритмов, потоки данных |
| Встроенные | embedded | ЭБУ, ПЛК, бытовая техника | реальное время, энергия, Гарвард часто |
| Управляющие / промышленные | industrial control | ПЛК, промышленные ПК | детерминизм, интерфейсы УСО |
Граница размыта: смартфон — универсальный компьютер в роли встроенного коммуникатора. Классифицируйте по главному назначению в данном проекте.
4.5.2. По вычислительной мощности и форм-фактору (традиционная «линейка»)
Историческая шкала, которую всё ещё спрашивают:
- Суперкомпьютеры (supercomputers) — кластеры, векторные и массово-параллельные системы (Топ-500, «Янтарь», Frontier).
- Мейнфреймы (mainframes) — высокая надёжность и ввод-вывод транзакций (IBM Z).
- Серверы / мини-ЭВМ (servers, midrange) — стойки, лезвия.
- Персональные (PC, workstation).
- Мобильные и носимые (mobile, wearable).
- Одноплатные и встраиваемые модули (SBC, COM) — Raspberry Pi, NVIDIA Jetson.
- Микроконтроллеры (MCU) — CPU + память + периферия в одном корпусе.
- Системы на кристалле (SoC) — смартфон, ТВ-приставка; класс организации, пересекающийся со всеми нижними пунктами.
Не путайте «мини-ЭВМ 1970-х» (PDP-11, VAX) с «мини-ПК» из магазина.
4.5.3. По поколениям элементной базы (исторический фасет)
| Поколение | Элементная база | Условные годы | Пример |
|---|---|---|---|
| 1 | электронные лампы | 1940-е – 1950-е | ENIAC, EDSAC, МЭСМ |
| 2 | транзисторы | 1950-е – 1960-е | IBM 7090, БЭСМ-6 |
| 3 | ИС малого/среднего уровня | 1960-е – 1970-е | IBM/360, ЕС ЭВМ |
| 4 | БИС/СБИС, микропроцессоры | 1970-е – 1990-е | Intel 8080/8086, персоналки |
| 5+ | СБИС сверхвысокой интеграции, многоядерность, гетерогенность | 1990-е – н.в. | SoC, GPU-ускорение |
Поколения удобны как хронология и опасны как «качество»: современный MCU 4-битным калькулятором не является, хотя тоже «микросхема».
4.5.4. По параллелизму потоков: таксономия Флинна (1966)
Майкл Флинн предложил классифицировать по числу потоков команд и потоков данных.
| Класс | Смысл | Примеры |
|---|---|---|
| SISD | один поток команд, один поток данных | классическая фоннеймановская скалярная машина |
| SIMD | один поток команд, много данных | векторные расширения SSE/AVX, NEON, ядра GPU в lockstep, суперкомпьютеры Cray-1 |
| MISD | много потоков команд, один поток данных | редко; конвейеры спецобработки, иногда отказоустойчивые схемы |
| MIMD | много потоков команд и данных | многоядерные CPU, кластеры, смартфон с big.LITTLE |
Современный ноутбук — гибрид: ядро суперскалярно (микроархитектурный параллелизм внутри SISD-видимости), плюс SIMD-инструкции, плюс MIMD по ядрам. Снова фасеты, не один ярлык.
Уточнения, которые стоит знать по имени:
- SPMD — одна программа, много данных (модель программирования кластеров);
- SIMT — вариация SIMD в GPU NVIDIA (нити, расходящиеся ветвления).
4.5.5. По типу системы команд: CISC и RISC
| CISC | RISC | |
|---|---|---|
| Идея | богатые команды, память как операнд, переменная длина | мало простых команд, load/store, фиксированная длина |
| Примеры ISA | x86, System/360, VAX | MIPS, SPARC, ARM, RISC-V, Power |
| Микроархитектура сегодня | x86 внутри декодирует CISC в RISC-подобные микрооперации | тоже конвейер, суперскаляр, OoO |
Споры 1980-х («RISC победил CISC») на уровне ISA ещё видны; на уровне микроархитектуры обе семьи сошлись. Для курса важно: это классификация архитектуры команд, не «скорости процессора».
4.5.6. По способу представления информации и связи с объектом
- цифровые, аналоговые, гибридные (исторически УВМ);
- фоннеймановские / гарвардские / dataflow / квантовые (последние — уже не этот канон);
- автономные и в контуре управления объектом (связь с АСУТП из курса внедрения ИС).
4.5.7. Рабочая карточка классификации (как заполнять на практике)
| Фасет | Вопрос | Пример: ноутбук | Пример: STM32 |
|---|---|---|---|
| Назначение | универсальный / встроенный | универсальный | встроенный |
| Форм-фактор | PC / MCU / SoC | PC + SoC платформы | MCU |
| ISA | какая система команд | x86-64 | ARM Cortex-M, Thumb-2 |
| Организация памяти | фон Нейман / Гарвард / модиф. | модиф. Гарвард, ISA фон Нейман | ближе к Гарварду (Flash/SRAM) |
| Флинн | SISD/SIMD/MIMD | MIMD + SIMD | в основном SISD |
| Система команд | RISC/CISC | CISC (x86) | RISC |
| Связь с объектом | общий / реального времени | общий | жёсткое/мягкое РВ |
Вывод по разделу. Компьютер описывают набором фасетов: назначение, форм-фактор, ISA, организация памяти, параллелизм Флинна, тип команд; один ярлык «современный процессор» ничего не объясняет.
5. Практические примеры
5.1. Одна ISA — разные микроархитектуры: Intel и AMD
Программа gcc -O2 для x86-64 даёт один и тот же машинный код (с оговорками про расширения). На Intel и AMD он корректен. Счётчики производительности покажут разный CPI: ширина декодера, устройство предсказания, размер µop-кэша, организация L3 разные. Это учебный пример разделения архитектуры и микроархитектуры. Отсюда же: «купить процессор с большей частотой» не гарантирует выигрыш, если программа упирается в память — узкое место фон Неймана никуда не делось.
Международный близнец — IBM System/360: от младших моделей на микрокоде до старших с более широким параллелизмом при одной архитектуре для прикладного программиста.
5.2. Микроконтроллер AVR / PIC: честный Гарвард
Arduino на ATmega328: программа в Flash 32 КБ, данные в SRAM 2 КБ. Нельзя «просто скопировать массив в область кода» как на ПК. Строковые константы лежат в программной памяти и читаются специальными макросами (PROGMEM, pgm_read_byte). Это не причуда Arduino — это гарвардская организация. Зато выборка команды не мешает писать в порт. Для контура управления датчиком это важнее, чем удобство malloc.
DSP в наушниках или модеме ещё жёстче: команда MAC за такт требует одновременной выборки двух операндов и инструкции — без гарвардских шин это не собрать.
5.3. Смартфон на ARM: все классы сразу
SoC смартфона:
- несколько ядер Cortex-A (модифицированный Гарвард, MMU, полноценная ОС) — MIMD, RISC, универсальный класс;
- ядра Cortex-M или выделенные контроллеры сенсоров — ближе к встроенному Гарварду;
- GPU — SIMT/SIMD;
- NPU — специализированный поток тензоров;
- единое (частично) адресное пространство DRAM для прикладных ядер.
Классифицировать «смартфон как SISD-ПК» — ошибка. Классифицировать его как «не компьютер, потому что телефон» — тоже. Это гетерогенная вычислительная система с фоннеймановской ISA на главных ядрах.
Российский контур той же мысли: промышленный контроллер с ядром Cortex-M и отдельным модулем Linux на Cortex-A в одном шкафу АСУТП — два класса машин в одном проекте внедрения.
Вывод по разделу. ПК демонстрирует стабильность ISA при смене микроархитектуры; МК и DSP — цену и выгоду Гарварда; SoC — необходимость фасетной классификации.
6. Типичные ошибки и риски при рассуждении об архитектуре
- Путать архитектуру и микроархитектуру. «У меня архитектура Skylake» — нет, Skylake это µarch, архитектура — x86-64.
- Считать частоту мерой скорости. Без CPI и работы с памятью сравнение бессмысленно.
- Объявлять современные CPU «не фоннеймановскими» из-за конвейера и кэша. Смотрите на модель памяти программиста.
- Объявлять их «чисто гарвардскими» из-за L1I/L1D. Это модифицированный Гарвард.
- Переносить модель ПК на МК: куча, самомодификация, исполнение из RAM «по умолчанию».
- Сравнивать RISC и CISC как «новый быстрее старого» без оглядки на микроархитектуру.
- Вешать один ярлык Флинна на всю SoC.
- Игнорировать узкое место памяти и искать ускорение только в ядре.
- Путать поколения элементной базы с поколениями Windows.
- Считать безопасность свойством ISA. Spectre показал: микроархитектура создаёт побочные каналы.
- Путать компьютер и калькулятор с жёсткой программой — нет хранимой программы, нет фон Неймана.
- Смешивать ISA и двоичный интерфейс ОС (ABI). ABI надстроен над ISA: соглашение о регистрах, системные вызовы Linux и Windows на одном x86-64 различны.
Вывод по разделу. Большинство ошибок — это склеивание слоёв: ISA с µarch, программной модели с кэшем, класса машины с брендом устройства.
7. Выводы
- Архитектура аппаратных средств описывает вычислительную машину на уровнях ISA, микроархитектуры и системной организации.
- Архитектура (ISA) — контракт с программой; микроархитектура — реализация контракта, скрытая, но влияющая на скорость, энергию и безопасность.
- Принципы фон Неймана задают двоичное представление, хранимую программу, общую адресуемую память и последовательное управление. Цена — узкое место тракта к памяти.
- Гарвардская архитектура разделяет памяти и шины команд и данных; она естественна для МК и DSP. Универсальные CPU используют модифицированный Гарвард на уровне кэшей при фоннеймановской ISA.
- Компьютеры классифицируют по назначению, форм-фактору, поколениям, таксономии Флинна и типу ISA (RISC/CISC). Реальные системы — гибриды.
- Практический навык курса: заполнять фасетную карточку машины, а не повторять рекламное имя процессора.
Фраза на вынос: сначала скажите, что видно программе (ISA и модель памяти), потом — как это сделано внутри (микроархитектура), и только после этого сравнивайте машины.
8. Вопросы для самопроверки
- Чем архитектура компьютера в смысле Амдала–Брукса (1964) отличается от микроархитектуры? Приведите пару «одна ISA — две µarch».
- Что входит в ISA и что компилятор вправе не знать о конвейере?
- Почему формула «время = команды × CPI × такт» запрещает сравнивать процессоры только по гигагерцам?
- Перечислите учебные принципы фон Неймана. Какой из них отличает эту машину от классического Гарварда?
- Опишите цикл команды и покажите, на каком шаге проявляется общая память.
- Что такое узкое место фон Неймана (Backus, 1977) и какие микроархитектурные приёмы его маскируют?
- Почему наличие раздельных L1I и L1D не делает ядро «чисто гарвардским»?
- Чем память команд и данных AVR отличается от модели памяти Linux на x86-64?
- Заполните таксономию Флинна. Куда вы отнесёте AVX-цикл и куда — четырёхъядерный CPU?
- Почему спор RISC vs CISC сегодня нельзя сводить к «кто быстрее»?
- Классифицируйте по фасетам: суперкомпьютер, мейнфрейм, смартфон, STM32. Где они совпадут и где нет?
- Как атаки типа Spectre доказывают, что «микроархитектура не видна программисту» — неполная правда?
9. Список литературы и нормативных документов
- Таненбаум Э., Остин Т. Архитектура компьютера. — 6-е изд. — СПб.: Питер.
- Паттерсон Д., Хеннесси Дж. Архитектура компьютера и проектирование компьютерных систем (Computer Organization and Design). — СПб.: Питер / Morgan Kaufmann.
- Хеннесси Дж., Паттерсон Д. Количественный подход к архитектуре компьютеров (Computer Architecture: A Quantitative Approach).
- Столлингс У. Структурная организация и архитектура компьютера.
- Цилькер Б. Я., Орлов С. А. Организация ЭВМ и систем. — СПб.: Питер.
- von Neumann J. First Draft of a Report on the EDVAC. — Moore School, 1945.
- Flynn M. J. Some Computer Organizations and Their Effectiveness // IEEE Trans. Computers. 1972. (исходные идеи — 1966.)
- Backus J. Can Programming Be Liberated from the von Neumann Style? // Comm. ACM. 1978. (Turing Award lecture, 1977.)
- Amdahl G. M., Blaauw G. A., Brooks F. P. Architecture of the IBM System/360 // IBM Journal of R&D. 1964.
- ISO/IEC/IEEE 42010:2022. Software, systems and enterprise — Architecture description. (общий язык «архитектура / точка зрения»; не путать с ISA.)
- ARM Architecture Reference Manual; Intel 64 and IA-32 Architectures Software Developer’s Manual — как эталоны описания ISA.
- Документация AVR Instruction Set / ARM Cortex-M Technical Reference — примеры гарвардской и модифицированной организации.
10. Задание для самостоятельной работы
Тема. Фасетный паспорт двух реальных машин и сравнение их архитектур.
Что сделать. Выберите пару устройств из разных классов, например: (а) свой ноутбук или одноплатный ПК и (б) конкретный микроконтроллер (Arduino/STM32/ESP32) либо DSP/SoC из курсового проекта.
- Для каждого заполните карточку из п. 4.5.7: назначение, форм-фактор, ISA, организация памяти, Флинн, RISC/CISC, связь с объектом.
- Отдельным абзацем ответьте: что у устройства относится к архитектуре (ISA), а что — к микроархитектуре (кэш, число ядер, частота, конвейер — по открытым спецификациям).
- Нарисуйте две схемы трактов «процессор — память команд — память данных». Покажите, где фон Нейман, где Гарвард, где модификация.
- Оцените, где для вашей учебной программы опаснее узкое место фон Неймана, а где — теснота SRAM.
- Сформулируйте три следствия для программиста (выравнивание данных, исполнение из RAM, векторные команды и т.п.).
Объём. 6–8 страниц плюс 4 слайда. Файл: Фамилия_Архитектура_введение.pdf.
Срок. К семинару следующей учебной недели.
Рекомендация. Не пишите «процессор современный, поэтому гарвардский». Найдите в datasheet строки про Instruction memory, Data memory, I-cache, D-cache и цитируйте их.
Конец лекции 1. Дисциплина «Архитектура аппаратных средств».