Загрузить файлы в «/»
This commit is contained in:
@@ -0,0 +1,849 @@
|
|||||||
|
---
|
||||||
|
marp: true
|
||||||
|
theme: default
|
||||||
|
paginate: true
|
||||||
|
headingDivider: 2
|
||||||
|
style: |
|
||||||
|
section { font-size: 26px; }
|
||||||
|
h1 { font-size: 40px; }
|
||||||
|
h2 { font-size: 34px; }
|
||||||
|
table { font-size: 20px; }
|
||||||
|
code { font-size: 18px; }
|
||||||
|
---
|
||||||
|
|
||||||
|
# Архитектура аппаратных средств
|
||||||
|
|
||||||
|
# Тема занятия
|
||||||
|
|
||||||
|
**Введение в архитектуру аппаратных средств**
|
||||||
|
|
||||||
|
| Блок | На экране |
|
||||||
|
| --- | --- |
|
||||||
|
| 1 | Архитектура ≠ микроархитектура |
|
||||||
|
| 2 | Принципы фон Неймана |
|
||||||
|
| 3 | Цикл команды и узкое место |
|
||||||
|
| 4 | Гарвард и модифицированный Гарвард |
|
||||||
|
| 5 | Классификация компьютеров |
|
||||||
|
|
||||||
|
**90 минут · 2 академических часа**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Предмет дисциплины
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
A["Какую программу<br/>написать?"]:::old
|
||||||
|
B["На какой машине<br/>она исполняется?"]:::new
|
||||||
|
A -.-> B
|
||||||
|
classDef old fill:#eee,stroke:#999
|
||||||
|
classDef new fill:#dbeafe,stroke:#1d4ed8
|
||||||
|
```
|
||||||
|
|
||||||
|
**Архитектура аппаратных средств** — из каких частей состоит машина, что видно программе, как устроено внутри, как машины классифицируют.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Цель и задачи (шпаргалка)
|
||||||
|
|
||||||
|
| # | Задача лекции |
|
||||||
|
| --- | --- |
|
||||||
|
| 1 | Уровни абстракции вычислительной системы |
|
||||||
|
| 2 | Архитектура (ISA) ≠ микроархитектура ≠ вентили |
|
||||||
|
| 3 | Принципы фон Неймана + цикл команды |
|
||||||
|
| 4 | Гарвард и почему у PC два кэша, но одна память |
|
||||||
|
| 5 | Фасеты классификации (Флинн, RISC/CISC, класс машины) |
|
||||||
|
|
||||||
|
**После пары:** про любое устройство — ISA, фон Нейман/Гарвард *на каком уровне*, класс.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Зачем это не только схемотехнику
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
mindmap
|
||||||
|
root((Зачем архитектура))
|
||||||
|
Скорость
|
||||||
|
кэш
|
||||||
|
CPI
|
||||||
|
узкое место памяти
|
||||||
|
Совместимость
|
||||||
|
одна ISA
|
||||||
|
разные µarch
|
||||||
|
Встроенные системы
|
||||||
|
не маленький ПК
|
||||||
|
Flash ≠ SRAM
|
||||||
|
Выбор железа
|
||||||
|
сервер
|
||||||
|
АРМ
|
||||||
|
ПЛК / MCU
|
||||||
|
Безопасность
|
||||||
|
Spectre
|
||||||
|
W^X / NX
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Три смысла слова «архитектура»
|
||||||
|
|
||||||
|
| Смысл | Что имеется в виду | Пример |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| **1. Вид для программиста** (Amdahl, Blaauw, Brooks, 1964) | команды, регистры, адреса, прерывания | почти = **ISA** |
|
||||||
|
| **2. Организация системы** | CPU + память + ввод-вывод + связи | computer organization |
|
||||||
|
| **3. Уровень в стеке** | слой между ОС и цифровой логикой | «архитектурный уровень» |
|
||||||
|
|
||||||
|
**На этой лекции «архитектура» без уточнения = смысл 1 (ISA), «организация» = смысл 2.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Формула процессора
|
||||||
|
|
||||||
|
$$
|
||||||
|
\textbf{процессор} \;=\; \textbf{ISA} \;+\; \textbf{микроархитектура} \;+\; \textbf{схемотехника}
|
||||||
|
$$
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
ISA["ISA<br/>контракт с программой"]
|
||||||
|
UA["Микроархитектура µarch<br/>конвейер, кэш, OoO"]
|
||||||
|
CIR["Схемотехника<br/>вентили, техпроцесс"]
|
||||||
|
ISA --> UA --> CIR
|
||||||
|
```
|
||||||
|
|
||||||
|
| Слой | Видно программе? | Можно менять, не ломая бинарник? |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| ISA | да | нет (другой код) |
|
||||||
|
| µarch | нет для корректности | да |
|
||||||
|
| вентили | нет | да (другой чип той же µarch) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Одна ISA — много микроархитектур
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
ISA["ISA: x86-64"]
|
||||||
|
ISA --> I1["Intel Skylake"]
|
||||||
|
ISA --> I2["Intel Golden Cove"]
|
||||||
|
ISA --> A1["AMD Zen 3"]
|
||||||
|
ISA --> A2["AMD Zen 4"]
|
||||||
|
ISA --> R["Rosetta 2 на Apple Silicon<br/>трансляция"]
|
||||||
|
```
|
||||||
|
|
||||||
|
| Объект | Слой |
|
||||||
|
| --- | --- |
|
||||||
|
| x86-64, AArch64, RISC-V, AVR | **архитектура (ISA)** |
|
||||||
|
| Zen 4, Golden Cove, Cortex-A76 | **микроархитектура** |
|
||||||
|
| 5 нм / 7 нм, библиотека ячеек | **реализация** |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Многоуровневая машина (Таненбаум)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
L6["6. Прикладной · Python, 1С, браузер"]
|
||||||
|
L5["5. ОС / VM · процессы, файлы, syscall"]
|
||||||
|
L4["4. ISA · команды, регистры, адреса"]
|
||||||
|
L3["3. Микроархитектура · конвейер, кэш"]
|
||||||
|
L2["2. Цифровая логика · вентили, автоматы"]
|
||||||
|
L1["1. Физический · транзисторы"]
|
||||||
|
L6 --> L5 --> L4 --> L3 --> L2 --> L1
|
||||||
|
```
|
||||||
|
|
||||||
|
**Наш курс:** уровни 4, 3 и организация «процессор — память — ввод-вывод».
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Кто на каком уровне «программирует»
|
||||||
|
|
||||||
|
| Уровень | Что видно | Кто работает |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Прикладной | языки, API | прикладной разработчик |
|
||||||
|
| ОС | процессы, файлы | системный программист |
|
||||||
|
| **ISA** | команды, регистры | компилятор, ассемблер |
|
||||||
|
| **µarch** | конвейер, кэши | архитектор процессора |
|
||||||
|
| Логика | вентили, триггеры | логический проектировщик |
|
||||||
|
| Физика | транзисторы | технолог |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Пять вопросов курса
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
Q1["1. Как видит<br/>программа?"]
|
||||||
|
Q2["2. Как внутри?"]
|
||||||
|
Q3["3. Как связаны<br/>части?"]
|
||||||
|
Q4["4. Какие есть<br/>альтернативы?"]
|
||||||
|
Q5["5. Как<br/>сравнивать?"]
|
||||||
|
```
|
||||||
|
|
||||||
|
| # | Короткий ответ сегодня |
|
||||||
|
| --- | --- |
|
||||||
|
| 1 | ISA, модель памяти |
|
||||||
|
| 2 | микроархитектура |
|
||||||
|
| 3 | шины, DMA, SoC |
|
||||||
|
| 4 | фон Нейман / Гарвард, RISC / CISC |
|
||||||
|
| 5 | фасеты + формула времени |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Формула времени выполнения
|
||||||
|
|
||||||
|
$$
|
||||||
|
T \;=\; N_{\text{команд}} \;\times\; \text{CPI} \;\times\; t_{\text{такта}}
|
||||||
|
$$
|
||||||
|
|
||||||
|
| Символ | Кто определяет | Не путать с |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| \(N\) число команд | алгоритм + **ISA** + компилятор | «объём программы в МБ» |
|
||||||
|
| **CPI** тактов на команду | **микроархитектура** + кэш + ветвления | «архитектура Intel» |
|
||||||
|
| \(t\) длительность такта | частота, техпроцесс, µarch | единственная метрика |
|
||||||
|
|
||||||
|
```text
|
||||||
|
Частота ↑ не значит программа быстрее.
|
||||||
|
Упёрлись в память → узкое место фон Неймана.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Что входит в ISA (паспорт)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
mindmap
|
||||||
|
root((ISA))
|
||||||
|
Типы данных
|
||||||
|
int / float / SIMD
|
||||||
|
Регистры
|
||||||
|
число и ширина
|
||||||
|
флаги
|
||||||
|
Адресация
|
||||||
|
регистровая
|
||||||
|
косвенная
|
||||||
|
PC-relative
|
||||||
|
Команды
|
||||||
|
формат и кодирование
|
||||||
|
арифметика
|
||||||
|
load/store
|
||||||
|
переходы
|
||||||
|
Система
|
||||||
|
прерывания
|
||||||
|
привилегии
|
||||||
|
модель памяти
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Примеры ISA
|
||||||
|
|
||||||
|
| ISA | Семейство | Где встретите |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| IA-32 / **x86-64** | CISC | PC, серверы |
|
||||||
|
| **AArch64** (ARMv8-A) | RISC | смартфоны, Apple, серверы |
|
||||||
|
| **RISC-V** RV64I | RISC | учебные SoC, открытое железо |
|
||||||
|
| IBM System/360 | CISC | мейнфреймы, история совместимости |
|
||||||
|
| AVR, PIC16 | RISC / гарвард | микроконтроллеры |
|
||||||
|
| Thumb-2 (Cortex-M) | RISC | STM32, встраиваемые |
|
||||||
|
|
||||||
|
**Бинарник Linux x86-64 ≠ «голый» ARMv8.** Это другая архитектура, не «другая микросхема».
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Что прячется в микроархитектуре
|
||||||
|
|
||||||
|
| Механизм | Зачем |
|
||||||
|
| --- | --- |
|
||||||
|
| Конвейер, число стадий | совмещать шаги цикла команды |
|
||||||
|
| In-order / **out-of-order** | не ждать длинную команду |
|
||||||
|
| Суперскаляр | несколько команд за такт |
|
||||||
|
| SMT / Hyper-Threading | два потока на ядро |
|
||||||
|
| Кэши L1I / L1D / L2 / L3 | прятать задержку памяти |
|
||||||
|
| Предсказатель переходов | не останавливать конвейер |
|
||||||
|
| Микрокод CISC | сложная команда → простые µop |
|
||||||
|
| DVFS | частота и напряжение «на лету» |
|
||||||
|
|
||||||
|
**Правило Хеннесси–Паттерсона:** внутри любой порядок, **наружу** — семантика ISA.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# ISA vs микроархитектура: таблица-гвоздь
|
||||||
|
|
||||||
|
| Вопрос | ISA | Микроархитектура |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Видно в учебнике ассемблера? | да | нет |
|
||||||
|
| Ломает старые программы при смене? | да | нет |
|
||||||
|
| Влияет на CPI и тепло? | слабо / косвенно | да |
|
||||||
|
| Влияет на Spectre? | почти нет | да |
|
||||||
|
| Пример имени | x86-64 | Zen 4 |
|
||||||
|
|
||||||
|
```text
|
||||||
|
Нельзя говорить: «у меня архитектура Skylake».
|
||||||
|
Skylake — это µarch. Архитектура — x86-64.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Фон Нейман, 1945
|
||||||
|
|
||||||
|
**Источник:** *First Draft of a Report on the EDVAC*
|
||||||
|
(идеи Эккерта, Мокли и группы Муровской школы)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
CA["CA<br/>арифметика<br/>ALU"]
|
||||||
|
CC["CC<br/>управление<br/>CU"]
|
||||||
|
M["M<br/>память"]
|
||||||
|
IO["I / O<br/>ввод-вывод"]
|
||||||
|
R["R<br/>внешний<br/>носитель"]
|
||||||
|
CC --- CA
|
||||||
|
CC --- M
|
||||||
|
CC --- IO
|
||||||
|
M --- R
|
||||||
|
```
|
||||||
|
|
||||||
|
**Скачок:** программа хранится в памяти, как данные
|
||||||
|
(*stored-program computer*, «принстонская» архитектура).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Пять принципов — учебная реконструкция
|
||||||
|
|
||||||
|
> В *First Draft* нет пронумерованных «заповедей».
|
||||||
|
> Список — дидактика российских учебников.
|
||||||
|
|
||||||
|
| № | Принцип | По-английски | Суть |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1 | Двоичное кодирование | binary representation | команды и данные — двоичные слова |
|
||||||
|
| 2 | Программное управление | stored-program | поведение задаёт программа, не проводка |
|
||||||
|
| 3 | **Однородность памяти** | unified memory | код и данные в одном пространстве |
|
||||||
|
| 4 | Адресность | addressable cells | ячейки пронумерованы |
|
||||||
|
| 5 | Последовательность + переходы | sequential + control flow | PC++, пока нет jump |
|
||||||
|
|
||||||
|
**Принцип 3 — водораздел с Гарвардом.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Схема машины фон Неймана
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
I["Ввод I"] --> CU
|
||||||
|
subgraph CPU["Процессор"]
|
||||||
|
CU["УУ · CU<br/>счётчик команд PC"]
|
||||||
|
ALU["АЛУ · ALU"]
|
||||||
|
REG["Регистры"]
|
||||||
|
CU --- ALU --- REG
|
||||||
|
end
|
||||||
|
CU <--> MEM["Память M<br/>команды И данные<br/>одно пространство"]
|
||||||
|
CU --> O["Вывод O"]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Одна память · один тракт · смысл ячейки = как к ней обратились**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Что лежит в памяти
|
||||||
|
|
||||||
|
```text
|
||||||
|
Адрес Содержимое Как интерпретировать
|
||||||
|
─────────────────────────────────────────────
|
||||||
|
0x100 83 C1 05 команда ADD CX, 5
|
||||||
|
0x103 00 2A данное 42
|
||||||
|
0x105 E3 00 команда JCXZ …
|
||||||
|
```
|
||||||
|
|
||||||
|
| Обращение | Ячейка 0x103 |
|
||||||
|
| --- | --- |
|
||||||
|
| как к команде | процессор пытается декодировать `00 2A` |
|
||||||
|
| как к данному | число 42 |
|
||||||
|
|
||||||
|
Однородность памяти = загрузчик, компилятор, вирус, JIT.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Цикл команды
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
stateDiagram-v2
|
||||||
|
[*] --> Fetch
|
||||||
|
Fetch --> Decode: команда из памяти по PC<br/>PC ← PC+длина
|
||||||
|
Decode --> Execute: код операции, регистры
|
||||||
|
Execute --> Memory: адрес / АЛУ
|
||||||
|
Memory --> Writeback: чтение/запись данного
|
||||||
|
Writeback --> Fetch: результат в регистр
|
||||||
|
```
|
||||||
|
|
||||||
|
| Шаг | Имя | Что делает |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | **Fetch** | выборка команды |
|
||||||
|
| 2 | **Decode** | декодирование |
|
||||||
|
| 3 | **Execute** | операция / адрес |
|
||||||
|
| 4 | **Memory** | данное из *той же* памяти |
|
||||||
|
| 5 | **Write-back** | запись результата |
|
||||||
|
|
||||||
|
На шагах 1 и 4 **конфликт одного тракта**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Численный пример: `ADD R1, [100]`
|
||||||
|
|
||||||
|
**Условия учебной машины:** шина 16 бит · АЛУ = 1 такт · память = 3 такта · декод = 1 такт
|
||||||
|
|
||||||
|
| Шаг | Действие | Такты | Кто работает |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Fetch | прочитать команду | **3** | память |
|
||||||
|
| Decode | это ADD, нужен [100] | 1 | УУ |
|
||||||
|
| Memory | прочитать ячейку 100 | **3** | память снова |
|
||||||
|
| Execute | сложить | 1 | АЛУ |
|
||||||
|
| Write-back | в R1 | 1 | регистры |
|
||||||
|
| | **Итого** | **~9** | из них **6 — память** |
|
||||||
|
|
||||||
|
```text
|
||||||
|
Fetch следующей команды НЕЛЬЗЯ совместить с Memory текущей:
|
||||||
|
один порт к одной памяти.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Тот же пример: фон Нейман vs Гарвард
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
gantt
|
||||||
|
title Занятость тракта памяти (учебные такты)
|
||||||
|
dateFormat X
|
||||||
|
axisFormat %s
|
||||||
|
section Фон Нейман
|
||||||
|
Fetch команды :a1, 0, 3
|
||||||
|
Memory данного :a2, 4, 3
|
||||||
|
section Гарвард
|
||||||
|
Fetch команды :b1, 0, 3
|
||||||
|
Memory данного :b2, 0, 3
|
||||||
|
```
|
||||||
|
|
||||||
|
| Организация | Fetch ∥ чтение данного | Итог для ADD |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Фон Нейман | нет | ~9 тактов |
|
||||||
|
| Гарвард (два порта) | да | память перекрыта, АЛУ не ждёт выборку |
|
||||||
|
| Модиф. Гарвард (оба в L1) | да | как Гарвард |
|
||||||
|
| Модиф. Гарвард (промах в DRAM) | нет | снова фон Нейман |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Узкое место фон Неймана (Backus, 1977)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
CPU["Процессор<br/>быстрый АЛУ"]
|
||||||
|
BOT["УЗКОЕ МЕСТО<br/>одна шина<br/>команды + данные"]
|
||||||
|
MEM["Память<br/>большая и медленная"]
|
||||||
|
CPU <--> BOT <--> MEM
|
||||||
|
```
|
||||||
|
|
||||||
|
| Как маскируют, не меняя модель программиста | Слой |
|
||||||
|
| --- | --- |
|
||||||
|
| Кэш, часто **раздельный L1I / L1D** | шаг к Гарварду |
|
||||||
|
| Иерархия L1–L2–L3–RAM–диск | организация памяти |
|
||||||
|
| Prefetch, предвыборка команд | µarch |
|
||||||
|
| Конвейер, суперскаляр | µarch |
|
||||||
|
| Несколько контроллеров памяти, много ядер | система |
|
||||||
|
| GPU / NPU «у данных» | другая организация |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Миф и норма
|
||||||
|
|
||||||
|
| Миф | Норма |
|
||||||
|
| --- | --- |
|
||||||
|
| «Есть конвейер — уже не фон Нейман» | конвейер = **µarch** |
|
||||||
|
| «Два кэша — чистый Гарвард» | это **модифицированный** Гарвард |
|
||||||
|
| «Современный CPU не фоннеймановский» | **по ISA** — почти всегда да |
|
||||||
|
|
||||||
|
```text
|
||||||
|
Смотрите на МОДЕЛЬ ПАМЯТИ программиста,
|
||||||
|
а не на фотографию кристалла.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Гарвардская архитектура
|
||||||
|
|
||||||
|
**Имя:** Harvard Mark I (Эйкен, IBM, 1940-е)
|
||||||
|
Программа — на ленте, данные — на других носителях.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
CU["УУ + АЛУ"]
|
||||||
|
IM["Память КОМАНД<br/>шина команд"]
|
||||||
|
DM["Память ДАННЫХ<br/>шина данных"]
|
||||||
|
CU <--> IM
|
||||||
|
CU <--> DM
|
||||||
|
```
|
||||||
|
|
||||||
|
| Свойство | Следствие |
|
||||||
|
| --- | --- |
|
||||||
|
| Два тракта | выборка команды **и** доступ к данному **одновременно** |
|
||||||
|
| Разная ширина слова | PIC: команда 14 бит, данные 8 бит — норма |
|
||||||
|
| Нет общего пространства | нельзя «записать как данные и выполнить» |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Фон Нейман и Гарвард на одной схеме
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
subgraph VN["Фон Нейман"]
|
||||||
|
CPU1[CPU] <--> BUS1["Одна шина"]
|
||||||
|
BUS1 <--> M1["Одна память<br/>код + данные"]
|
||||||
|
end
|
||||||
|
subgraph HV["Гарвард"]
|
||||||
|
CPU2[CPU] <--> IB["Шина команд"]
|
||||||
|
CPU2 <--> DB["Шина данных"]
|
||||||
|
IB <--> IM["Память команд"]
|
||||||
|
DB <--> DM["Память данных"]
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Сравнительная таблица трёх канонов
|
||||||
|
|
||||||
|
| Свойство | Фон Нейман | Классический Гарвард | Модифицированный Гарвард |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Памяти | 1 | 2 физические | кэши 2, DRAM 1 |
|
||||||
|
| Команда ∥ данное | нет (без кэша) | да | да, если оба в кэше |
|
||||||
|
| Программа как данные | да | трудно / спец. команды | да |
|
||||||
|
| Ширина слов | обычно одна | может быть разной | обычно одна в RAM |
|
||||||
|
| Типичные машины | модель PC/сервера | PIC, часть AVR, DSP | x86, Cortex-A, RISC-V |
|
||||||
|
| Риск | узкая шина | два контроллера, загрузка ПО | когерентность кэша |
|
||||||
|
| Выигрыш | простой загрузчик | предсказуемый поток | скорость + удобство ОС |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Формула, которую прошу выучить
|
||||||
|
|
||||||
|
> Универсальные процессоры
|
||||||
|
> **фоннеймановские по ISA**
|
||||||
|
> и **модифицированно-гарвардские
|
||||||
|
> по микроархитектуре кэш-уровня**.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
PROG["Программист видит<br/>одно адресное пространство"]
|
||||||
|
L1["Ядро видит<br/>L1I ‖ L1D"]
|
||||||
|
DRAM["Промах → общая DRAM<br/>снова фон Нейман"]
|
||||||
|
PROG --> L1 --> DRAM
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Безопасность: искусственный запрет однородности
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
W["Страница WRITE"]
|
||||||
|
X["Страница EXECUTE"]
|
||||||
|
W -.->|W^X / NX / XN| X
|
||||||
|
```
|
||||||
|
|
||||||
|
| Механизм | Что делает |
|
||||||
|
| --- | --- |
|
||||||
|
| Бит **NX / XN** | «сюда нельзя передавать управление» |
|
||||||
|
| Политика **W^X** в ОС | страница либо пишется, либо исполняется |
|
||||||
|
| DEP | данные стека/кучи не как код |
|
||||||
|
|
||||||
|
Аппаратура *умеет* исполнить только что записанное. ОС и MMU **запрещают** — из-за вирусов и эксплойтов, не из-за Гарварда.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Где какой канон в железе
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
H["Классический Гарвард"] --> H1["PIC"]
|
||||||
|
H --> H2["AVR Flash / SRAM"]
|
||||||
|
H --> H3["DSP: TI C55x, ADI"]
|
||||||
|
M["Модифицированный Гарвард"] --> M1["x86-64 + L1I/L1D"]
|
||||||
|
M --> M2["ARM Cortex-A"]
|
||||||
|
M --> M3["прикладной RISC-V"]
|
||||||
|
V["Фон Нейман как ISA"] --> V1["PC, сервер, смартфон · главные ядра"]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Классификация — фасетная, не одна полка
|
||||||
|
|
||||||
|
```text
|
||||||
|
Нельзя: «это современный процессор».
|
||||||
|
Можно: встроенный · MCU · Thumb-2 · Гарвард Flash/SRAM · SISD · RISC.
|
||||||
|
```
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
mindmap
|
||||||
|
root((Фасеты машины))
|
||||||
|
Назначение
|
||||||
|
Форм-фактор
|
||||||
|
Поколение ЭБ
|
||||||
|
ISA
|
||||||
|
Память: фон Нейман / Гарвард
|
||||||
|
Флинн
|
||||||
|
RISC / CISC
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# По назначению
|
||||||
|
|
||||||
|
| Класс | English | Примеры | Акцент |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Универсальные | general-purpose | PC, сервер, смартфон | богатая ISA, MMU, ОС |
|
||||||
|
| Специализированные | special-purpose | DSP, GPU, NPU | узкий алгоритм |
|
||||||
|
| Встроенные | embedded | ЭБУ, бытовая техника | энергия, реальное время |
|
||||||
|
| Промышленные | industrial control | ПЛК, промПК | детерминизм, УСО |
|
||||||
|
|
||||||
|
Смартфон = универсальный компьютер *в роли* коммуникатора.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Линейка форм-факторов
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
S["Суперкомпьютер"] --> MF["Мейнфрейм"]
|
||||||
|
MF --> SV["Сервер / midrange"]
|
||||||
|
SV --> PC["PC / workstation"]
|
||||||
|
PC --> MOB["Мобильные / wearable"]
|
||||||
|
MOB --> SBC["Одноплатные · Pi, Jetson"]
|
||||||
|
SBC --> MCU["Микроконтроллер"]
|
||||||
|
MCU --> SOC["SoC пересекает нижние уровни"]
|
||||||
|
```
|
||||||
|
|
||||||
|
| Не путать | С чем путают |
|
||||||
|
| --- | --- |
|
||||||
|
| мини-ЭВМ 1970-х (PDP-11, VAX) | «мини-ПК» из магазина |
|
||||||
|
| MCU | «слабый смартфон» |
|
||||||
|
| SoC | отдельный класс *организации*, не вместо PC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Поколения элементной базы
|
||||||
|
|
||||||
|
| Пок. | База | Годы | Пример |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1 | лампы | 1940–50 | ENIAC, EDSAC, МЭСМ |
|
||||||
|
| 2 | транзисторы | 1950–60 | IBM 7090, БЭСМ-6 |
|
||||||
|
| 3 | ИС | 1960–70 | IBM/360, ЕС ЭВМ |
|
||||||
|
| 4 | БИС, микропроцессоры | 1970–90 | 8086, персоналки |
|
||||||
|
| 5+ | СБИС, многоядерность, SoC | 1990–н.в. | GPU, NPU, смартфоны |
|
||||||
|
|
||||||
|
**Поколение ≠ качество и ≠ «поколение Windows».**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Таксономия Флинна, 1966 / 1972
|
||||||
|
|
||||||
|
$$
|
||||||
|
\begin{array}{c|c|c}
|
||||||
|
& \textbf{1 поток данных} & \textbf{много данных} \\ \hline
|
||||||
|
\textbf{1 поток команд} & \textbf{SISD} & \textbf{SIMD} \\ \hline
|
||||||
|
\textbf{много команд} & \textbf{MISD} & \textbf{MIMD}
|
||||||
|
\end{array}
|
||||||
|
$$
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
SISD["SISD<br/>скаляр, классика"]
|
||||||
|
SIMD["SIMD<br/>AVX, NEON, GPU lockstep"]
|
||||||
|
MISD["MISD<br/>редко"]
|
||||||
|
MIMD["MIMD<br/>много ядер, кластер"]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Флинн: примеры в таблицу
|
||||||
|
|
||||||
|
| Класс | Потоки | Куда показать пальцем |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| **SISD** | 1 команда, 1 данное | учебная фоннеймановская машина |
|
||||||
|
| **SIMD** | 1 команда, много данных | SSE/AVX, NEON, Cray-1 |
|
||||||
|
| **MISD** | много команд, 1 данное | редкие конвейеры / отказоустойчивость |
|
||||||
|
| **MIMD** | много и того и другого | 4 ядра CPU, кластер |
|
||||||
|
|
||||||
|
**Уточнения:** SPMD — модель кластеров; SIMT — GPU NVIDIA.
|
||||||
|
|
||||||
|
Ноутбук = **гибрид**: суперскаляр внутри ядра + SIMD + MIMD по ядрам.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# RISC и CISC
|
||||||
|
|
||||||
|
| | **CISC** | **RISC** |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Идея | богатые команды, память как операнд | мало команд, только load/store |
|
||||||
|
| Длина команды | переменная | чаще фиксированная |
|
||||||
|
| Примеры ISA | x86, S/360, VAX | ARM, RISC-V, MIPS, Power |
|
||||||
|
| Сегодня внутри | CISC → RISC-подобные **µop** | тот же конвейер и OoO |
|
||||||
|
|
||||||
|
```text
|
||||||
|
Классификация ISA, не «кто быстрее в 2026 году».
|
||||||
|
Микроархитектуры семейств сошлись.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Карточка машины — заполнять так
|
||||||
|
|
||||||
|
| Фасет | Ноутбук | STM32 / Arduino |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Назначение | универсальный | встроенный |
|
||||||
|
| Форм-фактор | PC + SoC | MCU |
|
||||||
|
| ISA | x86-64 | Cortex-M / AVR |
|
||||||
|
| Память | модиф. Гарвард, ISA фон Нейман | Flash/SRAM ≈ Гарвард |
|
||||||
|
| Флинн | MIMD + SIMD | в основном SISD |
|
||||||
|
| Команды | CISC | RISC |
|
||||||
|
| Объект | общее назначение | контур датчик–актюатор |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Кейс 1. Intel vs AMD
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
CODE["Один машинный код<br/>gcc -O2 → x86-64"]
|
||||||
|
CODE --> I["Intel · свой CPI"]
|
||||||
|
CODE --> A["AMD · свой CPI"]
|
||||||
|
```
|
||||||
|
|
||||||
|
| Одинаково | Различно |
|
||||||
|
| --- | --- |
|
||||||
|
| ISA x86-64 | декодер, µop-кэш, L3, предсказатель |
|
||||||
|
| корректность программы | тепло, IPC, цена |
|
||||||
|
|
||||||
|
**Вывод на экран:** совместимость держит ISA, гонку держит µarch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Кейс 2. AVR — честный Гарвард
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
CORE["Ядро AVR"]
|
||||||
|
FLASH["Flash 32 КБ<br/>ПРОГРАММА"]
|
||||||
|
SRAM["SRAM 2 КБ<br/>ДАННЫЕ"]
|
||||||
|
CORE --> FLASH
|
||||||
|
CORE --> SRAM
|
||||||
|
```
|
||||||
|
|
||||||
|
| Привычка с ПК | На ATmega328 |
|
||||||
|
| --- | --- |
|
||||||
|
| строка в «обычной» памяти | **PROGMEM**, `pgm_read_byte` |
|
||||||
|
| `malloc` как стиль жизни | кучи может не быть |
|
||||||
|
| исполнить данные из RAM | не модель по умолчанию |
|
||||||
|
|
||||||
|
Спец. мост: команда **LPM** — прочитать прошивку *как данные*.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Кейс 3. Смартфон = все классы сразу
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
SOC["SoC смартфона"]
|
||||||
|
SOC --> A["Cortex-A · ОС · модиф. Гарвард · MIMD"]
|
||||||
|
SOC --> M["Cortex-M / сенсоры · ближе к Гарварду"]
|
||||||
|
SOC --> G["GPU · SIMT / SIMD"]
|
||||||
|
SOC --> N["NPU · тензоры"]
|
||||||
|
SOC --> D["DRAM · общее пространство для A-ядер"]
|
||||||
|
```
|
||||||
|
|
||||||
|
| Неверно | Верно |
|
||||||
|
| --- | --- |
|
||||||
|
| «это не компьютер» | гетерогенная вычислительная система |
|
||||||
|
| «это SISD-ПК» | несколько классов на одном кристалле |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 12 ошибок — плакат
|
||||||
|
|
||||||
|
| # | Не говорить | Говорить |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | «архитектура Skylake» | µarch Skylake, ISA x86-64 |
|
||||||
|
| 2 | «больше ГГц — быстрее» | смотри CPI и память |
|
||||||
|
| 3 | «конвейер отменил фон Неймана» | смотри модель памяти |
|
||||||
|
| 4 | «два кэша = чистый Гарвард» | модифицированный |
|
||||||
|
| 5 | «МК — маленький Windows» | другая память и ОС может не быть |
|
||||||
|
| 6 | «RISC всегда быстрее CISC» | смотри µarch |
|
||||||
|
| 7 | один ярлык Флинна на SoC | гибрид |
|
||||||
|
| 8 | ускорять только ядро | бывает узкое место шины |
|
||||||
|
| 9 | поколение ЭВМ = поколение ОС | разный фасет |
|
||||||
|
| 10 | безопасность = свойство ISA | Spectre — про µarch |
|
||||||
|
| 11 | жёсткая проводка = фон Нейман | нет хранимой программы |
|
||||||
|
| 12 | ISA = ABI | ABI надстроен (Linux ≠ Windows) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Три фразы на вынос
|
||||||
|
|
||||||
|
```text
|
||||||
|
1. Сначала — что видно программе (ISA).
|
||||||
|
2. Потом — как сделано внутри (µarch).
|
||||||
|
3. Затем — сравнивайте машины по фасетам.
|
||||||
|
```
|
||||||
|
|
||||||
|
| Канон | Для программиста | Рядом с ядром |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Фон Нейман | общая память | узкая шина |
|
||||||
|
| Гарвард | два мира | два порта |
|
||||||
|
| Модиф. Гарвард | как фон Нейман | как Гарвард, пока кэш попал |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Вопросы с экрана (самопроверка)
|
||||||
|
|
||||||
|
| # | Короткий вопрос |
|
||||||
|
| --- | --- |
|
||||||
|
| 1 | ISA vs µarch: пара «одна ISA — две реализации» |
|
||||||
|
| 2 | Что компилятор *не* обязан знать о конвейере? |
|
||||||
|
| 3 | Почему мало сравнивать ГГц? |
|
||||||
|
| 4 | Какой принцип фон Неймана отделяет его от Гарварда? |
|
||||||
|
| 5 | На каком шаге цикла команды конфликт тракта? |
|
||||||
|
| 6 | Что такое bottleneck по Backus? |
|
||||||
|
| 7 | Почему L1I+L1D ≠ чистый Гарвард? |
|
||||||
|
| 8 | Чем Flash/SRAM AVR отличается от Linux x86? |
|
||||||
|
| 9 | AVX — какой класс Флинна? Четыре ядра? |
|
||||||
|
| 10 | RISC/CISC — про скорость или про ISA? |
|
||||||
|
| 11 | Фасеты: суперкомпьютер vs STM32 |
|
||||||
|
| 12 | Spectre: какой слой виноват? |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Задание на семинар (с экрана)
|
||||||
|
|
||||||
|
**Два устройства:** ноутбук/SBC **и** MCU (Arduino / STM32 / ESP32)
|
||||||
|
|
||||||
|
| Шаг | Сдать |
|
||||||
|
| --- | --- |
|
||||||
|
| 1 | карточка фасетов (таблица 4.5.7 из текста лекции) |
|
||||||
|
| 2 | что ISA, что µarch — по datasheet |
|
||||||
|
| 3 | две схемы трактов память команд / память данных |
|
||||||
|
| 4 | где опаснее bottleneck, где теснота SRAM |
|
||||||
|
| 5 | три следствия для программиста |
|
||||||
|
|
||||||
|
`Фамилия_Архитектура_введение.pdf` · 6–8 стр. + 4 слайда
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Хронометраж пары
|
||||||
|
|
||||||
|
| Мин | Читаете раздел | На экране слайды |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 0–12 | §§ 1–3 начало | тема, зачем, формула процессора |
|
||||||
|
| 12–30 | §§ 3.4–4.2 | уровни, ISA vs µarch |
|
||||||
|
| 30–48 | § 4.3 | фон Нейман, цикл, 9 тактов |
|
||||||
|
| 48–60 | § 4.4 | Гарвард, сравнительная таблица |
|
||||||
|
| 60–74 | § 4.5 | Флинн, RISC/CISC, карточка |
|
||||||
|
| 74–90 | §§ 5–10 | кейсы, ошибки, задание |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Конец показа · лекция 1
|
||||||
Reference in New Issue
Block a user