Files
Hardware-architecture/Лекция_01_Введение_в_архитектуру_аппаратных_средств.md
T

545 lines
59 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Лекция 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. Дисциплина «Архитектура аппаратных средств».*