commit 180993e5838d203b86cd4a90cbcee45d9e8d7e98 Author: spirik Date: Fri Sep 11 09:44:12 2026 +0000 Загрузить файлы в «/» diff --git a/Лекция_01_Введение_в_архитектуру_аппаратных_средств.md b/Лекция_01_Введение_в_архитектуру_аппаратных_средств.md new file mode 100644 index 0000000..ca63e75 --- /dev/null +++ b/Лекция_01_Введение_в_архитектуру_аппаратных_средств.md @@ -0,0 +1,544 @@ +# Лекция 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. Дисциплина «Архитектура аппаратных средств».*