# Лекция 1. Введение в архитектуру аппаратных средств. Понятие архитектуры и микроархитектуры. Принципы фон Неймана и гарвардская архитектура. Классификация компьютеров **Дисциплина:** Архитектура аппаратных средств **Тема:** Введение в архитектуру аппаратных средств; архитектура и микроархитектура; принципы фон Неймана; гарвардская архитектура; классификация компьютеров **Аудитория:** студенты бакалавриата направлений «Информационные системы и технологии», «Прикладная информатика», «Информатика и вычислительная техника» **Длительность:** 2 академических часа (90 минут) ## 1. Тема, цель и задачи лекции Добрый день. Сегодня мы открываем дисциплину, которая объясняет не *какую программу написать*, а *на какой машине она в самом деле исполняется*. Пока вы мыслите компьютером как «чёрным ящиком с процессором и памятью», вам будут казаться магией и тормоза, и переполнение стека, и то, почему один и тот же код на ноутбуке и на микроконтроллере ведёт себя по-разному. **Архитектура аппаратных средств** (computer / hardware architecture) — это дисциплина о том, из каких частей состоит вычислительная система, как эти части видны программисту, как они устроены внутри и по каким законам их классифицируют. **Цель лекции:** заложить понятийный каркас курса — отличить архитектуру от микроархитектуры, понять канон фон Неймана и альтернативу Гарварда, научиться относить реальные машины к классам. **Задачи лекции:** 1. Определить предмет дисциплины и уровни абстракции вычислительной системы. 2. Развести понятия архитектуры (в т.ч. ISA), микроархитектуры и реализации на схемотехнике. 3. Сформулировать принципы фон Неймана, разобрать состав машины и цикл выборка–декодирование–исполнение. 4. Объяснить узкое место фон Неймана и зачем появилась гарвардская (и модифицированная гарвардская) организация. 5. Дать рабочие классификации компьютеров: по назначению, форм-фактору, поколениям, параллелизму (таксономия Флинна), типу системы команд. 6. На современных примерах (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. Архитектура Слово **архитектура** в вычислительной технике многозначно. Зафиксируем три употребления, которые нельзя смешивать. 1. **Архитектура компьютера как облик машины для программиста** — то, что Джин Амдал, Г. Блау и Ф. Брукс в 1964 году (при описании IBM System/360) назвали *the attributes of a system as seen by the programmer*, то есть структура и поведение, видимые из программы: набор команд, форматы, адресация, регистры, типы данных, прерывания. Сегодня это почти синоним **ISA**. 2. **Архитектура как организация системы в целом** — процессор, память, ввод-вывод, связи между ними (computer organization в традиции Таненбаума и Столлингса). 3. **Архитектура как уровень в стеке абстракций** — «архитектурный уровень» между операционной системой и цифровой логикой. В узком техническом смысле, который нам нужен дальше: **Система команд / архитектура набора команд** (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. Что изучает архитектура аппаратных средств Предмет курса можно свести к пяти вопросам. 1. **Как машина выглядит для программы?** (ISA, модель памяти, прерывания) 2. **Как она устроена внутри, чтобы этот вид поддерживать?** (микроархитектура, конвейер, иерархия памяти) 3. **Как части системы связаны?** (шины, межсоединения, контроллеры, DMA) 4. **Какие есть альтернативные организации?** (фон Нейман / Гарвард, RISC / CISC, одноядерность / многоядерность) 5. **Как сравнивать машины?** (классификация, метрики: частота, 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) Канон, который вы будете детализировать весь семестр: 1. **Fetch** — выборка команды по адресу из PC, увеличение PC. 2. **Decode** — декодирование кода операции, выбор регистров. 3. **Execute** — операция в АЛУ или формирование адреса. 4. **Memory** — при необходимости чтение/запись данных (те же шина и память, что для команд). 5. **Write-back** — запись результата в регистр. В простейшей фоннеймановской машине шаги 1 и 4 **не могут идти одновременно**: один тракт к памяти. Это аппаратный смысл принципа однородности. Разберём на пальцах. Пусть учебная машина имеет 16-битную шину, память 64 Кслов, АЛУ складывает за 1 такт, обращение к памяти — 3 такта, декодирование — 1 такт. Команда `ADD R1, [100]` (прибавить к регистру содержимое ячейки 100): 1. Fetch: чтение команды из памяти по PC — 3 такта. 2. Decode: узнать, что это ADD и нужен операнд из памяти — 1 такт. 3. Memory: чтение данного из ячейки 100 — ещё 3 такта. АЛУ в это время простаивает. 4. Execute: сложение — 1 такт. 5. 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. По вычислительной мощности и форм-фактору (традиционная «линейка») Историческая шкала, которую всё ещё спрашивают: 1. **Суперкомпьютеры** (supercomputers) — кластеры, векторные и массово-параллельные системы (Топ-500, «Янтарь», Frontier). 2. **Мейнфреймы** (mainframes) — высокая надёжность и ввод-вывод транзакций (IBM Z). 3. **Серверы / мини-ЭВМ** (servers, midrange) — стойки, лезвия. 4. **Персональные** (PC, workstation). 5. **Мобильные и носимые** (mobile, wearable). 6. **Одноплатные и встраиваемые модули** (SBC, COM) — Raspberry Pi, NVIDIA Jetson. 7. **Микроконтроллеры** (MCU) — CPU + память + периферия в одном корпусе. 8. **Системы на кристалле** (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. Типичные ошибки и риски при рассуждении об архитектуре 1. **Путать архитектуру и микроархитектуру.** «У меня архитектура Skylake» — нет, Skylake это µarch, архитектура — x86-64. 2. **Считать частоту мерой скорости.** Без CPI и работы с памятью сравнение бессмысленно. 3. **Объявлять современные CPU «не фоннеймановскими»** из-за конвейера и кэша. Смотрите на модель памяти программиста. 4. **Объявлять их «чисто гарвардскими»** из-за L1I/L1D. Это модифицированный Гарвард. 5. **Переносить модель ПК на МК:** куча, самомодификация, исполнение из RAM «по умолчанию». 6. **Сравнивать RISC и CISC как «новый быстрее старого»** без оглядки на микроархитектуру. 7. **Вешать один ярлык Флинна** на всю SoC. 8. **Игнорировать узкое место памяти** и искать ускорение только в ядре. 9. **Путать поколения элементной базы с поколениями Windows.** 10. **Считать безопасность свойством ISA.** Spectre показал: микроархитектура создаёт побочные каналы. 11. **Путать компьютер и калькулятор с жёсткой программой** — нет хранимой программы, нет фон Неймана. 12. **Смешивать ISA и двоичный интерфейс ОС (ABI).** ABI надстроен над ISA: соглашение о регистрах, системные вызовы Linux и Windows на одном x86-64 различны. **Вывод по разделу.** Большинство ошибок — это склеивание слоёв: ISA с µarch, программной модели с кэшем, класса машины с брендом устройства. --- ## 7. Выводы 1. Архитектура аппаратных средств описывает вычислительную машину на уровнях ISA, микроархитектуры и системной организации. 2. **Архитектура (ISA)** — контракт с программой; **микроархитектура** — реализация контракта, скрытая, но влияющая на скорость, энергию и безопасность. 3. Принципы фон Неймана задают двоичное представление, хранимую программу, общую адресуемую память и последовательное управление. Цена — узкое место тракта к памяти. 4. Гарвардская архитектура разделяет памяти и шины команд и данных; она естественна для МК и DSP. Универсальные CPU используют **модифицированный Гарвард** на уровне кэшей при фоннеймановской ISA. 5. Компьютеры классифицируют по назначению, форм-фактору, поколениям, таксономии Флинна и типу ISA (RISC/CISC). Реальные системы — гибриды. 6. Практический навык курса: заполнять фасетную карточку машины, а не повторять рекламное имя процессора. **Фраза на вынос:** сначала скажите, *что видно программе* (ISA и модель памяти), потом — *как это сделано внутри* (микроархитектура), и только после этого сравнивайте машины. --- ## 8. Вопросы для самопроверки 1. Чем архитектура компьютера в смысле Амдала–Брукса (1964) отличается от микроархитектуры? Приведите пару «одна ISA — две µarch». 2. Что входит в ISA и что компилятор вправе не знать о конвейере? 3. Почему формула «время = команды × CPI × такт» запрещает сравнивать процессоры только по гигагерцам? 4. Перечислите учебные принципы фон Неймана. Какой из них отличает эту машину от классического Гарварда? 5. Опишите цикл команды и покажите, на каком шаге проявляется общая память. 6. Что такое узкое место фон Неймана (Backus, 1977) и какие микроархитектурные приёмы его маскируют? 7. Почему наличие раздельных L1I и L1D не делает ядро «чисто гарвардским»? 8. Чем память команд и данных AVR отличается от модели памяти Linux на x86-64? 9. Заполните таксономию Флинна. Куда вы отнесёте AVX-цикл и куда — четырёхъядерный CPU? 10. Почему спор RISC vs CISC сегодня нельзя сводить к «кто быстрее»? 11. Классифицируйте по фасетам: суперкомпьютер, мейнфрейм, смартфон, STM32. Где они совпадут и где нет? 12. Как атаки типа Spectre доказывают, что «микроархитектура не видна программисту» — неполная правда? --- ## 9. Список литературы и нормативных документов 1. Таненбаум Э., Остин Т. Архитектура компьютера. — 6-е изд. — СПб.: Питер. 2. Паттерсон Д., Хеннесси Дж. Архитектура компьютера и проектирование компьютерных систем (Computer Organization and Design). — СПб.: Питер / Morgan Kaufmann. 3. Хеннесси Дж., Паттерсон Д. Количественный подход к архитектуре компьютеров (Computer Architecture: A Quantitative Approach). 4. Столлингс У. Структурная организация и архитектура компьютера. 5. Цилькер Б. Я., Орлов С. А. Организация ЭВМ и систем. — СПб.: Питер. 6. von Neumann J. First Draft of a Report on the EDVAC. — Moore School, 1945. 7. Flynn M. J. Some Computer Organizations and Their Effectiveness // IEEE Trans. Computers. 1972. (исходные идеи — 1966.) 8. Backus J. Can Programming Be Liberated from the von Neumann Style? // Comm. ACM. 1978. (Turing Award lecture, 1977.) 9. Amdahl G. M., Blaauw G. A., Brooks F. P. Architecture of the IBM System/360 // IBM Journal of R&D. 1964. 10. ISO/IEC/IEEE 42010:2022. Software, systems and enterprise — Architecture description. (общий язык «архитектура / точка зрения»; не путать с ISA.) 11. ARM Architecture Reference Manual; Intel 64 and IA-32 Architectures Software Developer’s Manual — как эталоны описания ISA. 12. Документация AVR Instruction Set / ARM Cortex-M Technical Reference — примеры гарвардской и модифицированной организации. --- ## 10. Задание для самостоятельной работы **Тема.** Фасетный паспорт двух реальных машин и сравнение их архитектур. **Что сделать.** Выберите **пару устройств** из разных классов, например: (а) свой ноутбук или одноплатный ПК и (б) конкретный микроконтроллер (Arduino/STM32/ESP32) либо DSP/SoC из курсового проекта. 1. Для каждого заполните карточку из п. 4.5.7: назначение, форм-фактор, ISA, организация памяти, Флинн, RISC/CISC, связь с объектом. 2. Отдельным абзацем ответьте: что у устройства относится к **архитектуре (ISA)**, а что — к **микроархитектуре** (кэш, число ядер, частота, конвейер — по открытым спецификациям). 3. Нарисуйте две схемы трактов «процессор — память команд — память данных». Покажите, где фон Нейман, где Гарвард, где модификация. 4. Оцените, где для вашей учебной программы опаснее узкое место фон Неймана, а где — теснота SRAM. 5. Сформулируйте три следствия для программиста (выравнивание данных, исполнение из RAM, векторные команды и т.п.). **Объём.** 6–8 страниц плюс 4 слайда. Файл: `Фамилия_Архитектура_введение.pdf`. **Срок.** К семинару следующей учебной недели. **Рекомендация.** Не пишите «процессор современный, поэтому гарвардский». Найдите в datasheet строки про Instruction memory, Data memory, I-cache, D-cache и цитируйте их. --- *Конец лекции 1. Дисциплина «Архитектура аппаратных средств».*