Files
Hardware-architecture/Лекция_01_Показ.md
T

32 KiB
Raw Blame History

marp, theme, paginate, headingDivider, style
marp theme paginate headingDivider style
true default true 2 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 академических часа


Предмет дисциплины

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, фон Нейман/Гарвард на каком уровне, класс.


Зачем это не только схемотехнику

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{схемотехника}
flowchart TB
    ISA["ISA<br/>контракт с программой"]
    UA["Микроархитектура µarch<br/>конвейер, кэш, OoO"]
    CIR["Схемотехника<br/>вентили, техпроцесс"]
    ISA --> UA --> CIR
Слой Видно программе? Можно менять, не ломая бинарник?
ISA да нет (другой код)
µarch нет для корректности да
вентили нет да (другой чип той же µarch)

Одна ISA — много микроархитектур

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 нм, библиотека ячеек реализация

Многоуровневая машина (Таненбаум)

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 конвейер, кэши архитектор процессора
Логика вентили, триггеры логический проектировщик
Физика транзисторы технолог

Пять вопросов курса

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 единственная метрика
Частота ↑  не значит  программа быстрее.
Упёрлись в память  →  узкое место фон Неймана.

Что входит в ISA (паспорт)

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
Нельзя говорить: «у меня архитектура Skylake».
Skylake — это µarch. Архитектура — x86-64.

Фон Нейман, 1945

Источник: First Draft of a Report on the EDVAC
(идеи Эккерта, Мокли и группы Муровской школы)

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 — водораздел с Гарвардом.


Схема машины фон Неймана

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"]

Одна память · один тракт · смысл ячейки = как к ней обратились


Что лежит в памяти

Адрес     Содержимое      Как интерпретировать
─────────────────────────────────────────────
0x100     83 C1 05        команда  ADD CX, 5
0x103     00 2A           данное   42
0x105     E3 00           команда  JCXZ …
Обращение Ячейка 0x103
как к команде процессор пытается декодировать 00 2A
как к данному число 42

Однородность памяти = загрузчик, компилятор, вирус, JIT.


Цикл команды

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 — память
Fetch следующей команды НЕЛЬЗЯ совместить с Memory текущей:
один порт к одной памяти.

Тот же пример: фон Нейман vs Гарвард

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)

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 — почти всегда да
Смотрите на МОДЕЛЬ ПАМЯТИ программиста,
а не на фотографию кристалла.

Гарвардская архитектура

Имя: Harvard Mark I (Эйкен, IBM, 1940-е)
Программа — на ленте, данные — на других носителях.

flowchart TB
    CU["УУ + АЛУ"]
    IM["Память КОМАНД<br/>шина команд"]
    DM["Память ДАННЫХ<br/>шина данных"]
    CU <--> IM
    CU <--> DM
Свойство Следствие
Два тракта выборка команды и доступ к данному одновременно
Разная ширина слова PIC: команда 14 бит, данные 8 бит — норма
Нет общего пространства нельзя «записать как данные и выполнить»

Фон Нейман и Гарвард на одной схеме

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
и модифицированно-гарвардские
по микроархитектуре кэш-уровня
.

flowchart TB
    PROG["Программист видит<br/>одно адресное пространство"]
    L1["Ядро видит<br/>L1I ‖ L1D"]
    DRAM["Промах → общая DRAM<br/>снова фон Нейман"]
    PROG --> L1 --> DRAM

Безопасность: искусственный запрет однородности

flowchart LR
    W["Страница WRITE"]
    X["Страница EXECUTE"]
    W -.->|W^X / NX / XN| X
Механизм Что делает
Бит NX / XN «сюда нельзя передавать управление»
Политика W^X в ОС страница либо пишется, либо исполняется
DEP данные стека/кучи не как код

Аппаратура умеет исполнить только что записанное. ОС и MMU запрещают — из-за вирусов и эксплойтов, не из-за Гарварда.


Где какой канон в железе

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, сервер, смартфон · главные ядра"]

Классификация — фасетная, не одна полка

Нельзя:  «это современный процессор».
Можно:   встроенный · MCU · Thumb-2 · Гарвард Flash/SRAM · SISD · RISC.
mindmap
  root((Фасеты машины))
    Назначение
    Форм-фактор
    Поколение ЭБ
    ISA
    Память: фон Нейман / Гарвард
    Флинн
    RISC / CISC

По назначению

Класс English Примеры Акцент
Универсальные general-purpose PC, сервер, смартфон богатая ISA, MMU, ОС
Специализированные special-purpose DSP, GPU, NPU узкий алгоритм
Встроенные embedded ЭБУ, бытовая техника энергия, реальное время
Промышленные industrial control ПЛК, промПК детерминизм, УСО

Смартфон = универсальный компьютер в роли коммуникатора.


Линейка форм-факторов

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}
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
Классификация 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

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 — честный Гарвард

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. Смартфон = все классы сразу

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)

Три фразы на вынос

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