Загрузить файлы в «/»
This commit is contained in:
@@ -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. Дисциплина «Архитектура аппаратных средств».*
|
||||||
Reference in New Issue
Block a user