Принципы организации ЭВМ

1. Проблема: от жестких схем к универсальному компьютеру

До 1945 года электронные вычислители (ENIAC, Z3, Harvard Mark I) проектировались для жестко заданных математических задач либо перепрограммировались вручную перекоммутацией сотен кабелей и тумблеров.

Схемотехническое программирование (ENIAC)

• Для смены расчетной баллистической таблицы инженеры вручную переставляли сотни штекеров и реле в течение нескольких дней.

• Программа являлась физической конфигурацией проводов.

Концепция Джона фон Неймана (1945)

• Электронный вычислитель должен быть аппаратно неизменным универсальным процессором.

• Алгоритм задачи кодируется в виде последовательности числовых инструкций, хранящихся в общей памяти.

Цель лекции: Понять, как процессор, память и системные шины взаимодействуют для автоматического потактового исполнения программ.
2. Фундаментальные принципы фон Неймана
  • Двоичное кодирование: Любая информация (данные и команды) кодируется в двоичной системе счисления с помощью битов (0 и 1).
  • Программное управление: Вычисления выполняются автоматически процессором под управлением последовательности машинных команд.
  • Однородность памяти: Программы и данные размещаются в одном общем запоминающем устройстве. Машина не отличает команду от данных по физической форме битов.
  • Адресность памяти: Память состоит из ячеек (байт), имеющих уникальные числовые адреса. Возможен мгновенный произвольный доступ по номеру ячейки.
  • Последовательное выполнение: Команды извлекаются по порядку возрастания адресов с помощью регистра Program Counter (PC / IP), за исключением команд переходов.
3. Классическая пятиблочная структура ЭВМ
+-----------------------------------------------------------+
|              ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР (CPU)                  |
|  +--------------------+         +-----------------------+ |
|  |  Устройство        |         |  Арифметико-логическое| |
|  |  управления (УУ /  | <-----> |  устройство (АЛУ /    | |
|  |  Control Unit, CU) |         |  ALU) + Регистры (AX) | |
|  +---------+----------+         +-----------+-----------+ |
+------------|--------------------------------|-------------+
             |            СИСТЕМНАЯ МАГИСТРАЛЬ|
             |  Шина адреса (Address Bus, AB) | (однонаправленная CPU->MEM)
             |================================+=============+
             |  Шина данных (Data Bus, DB)    | (двунаправленная CPU<=>MEM/IO)
             |================================+=============+
             |  Шина управления (Control Bus) | (стробы MREAD, MWRITE, CLK...)
             |================================+=============+
             |                                |
  +----------+---------+            +---------+-------------+
  | Запоминающее       |            | Устройства ввода-     |
  | устройство (ЗУ/RAM)|            | вывода (УВВ / IO)     |
  +--------------------+            +-----------------------+
      

Все функциональные модули связываются между собой через общую системную шину (магистрально-модульный принцип).

4. Системные шины: Шина адреса (Address Bus)

Назначение и направление

• Передает двоичный номер адресуемой ячейки памяти или номер порта ввода-вывода.

• Строго однонаправленная: сигнал генерирует процессор (Master) и принимает контроллер памяти или периферии (Slave).

Формула емкости памяти

Разрядность шины $N$ бит определяет предел физической адресации:

$$V_{max} = 2^N \text{ байт}$$

Поколение процессора Разрядность шины адреса Максимальный объем адресуемого ОЗУ
Intel 8086 (1978 г.)20 бит$2^{20}$ байт = 1 МБ
Intel 80386 (1985 г.)32 бита$2^{32}$ байт = 4 ГБ
Современные x86-64 (AMD64 / Intel 64)48 бит / 57 бит (5-level paging)256 Терабайт / 128 Петабайт
5. Шина данных (DB) и Шина управления (CB)

Шина данных (Data Bus, DB)

• Двунаправленная: пересылает коды команд и числовые операнды между CPU, RAM и IO.

• Разрядность (8, 16, 32, 64 бита) определяет ширину машинного слова, передаваемого за один такт шины.

• Использует тристабильные буферы (Hi-Z) для предотвращения коротких замыканий неактивных модулей.

Шина управления (Control Bus, CB)

• Передает управляющие стробы и синхронизирующие импульсы:

#MEMR — строб чтения из памяти;

#MEMW — строб записи в память;

CLK — тактовый генератор частоты;

READY / WAIT — такт подтверждения готовности;

RESET — сброс процессора в исходное состояние;

INTR / #INTA — запрос и подтверждение прерывания.

6. Машинный цикл команды: Fetch & Decode

Фаза 1: FETCH (Выборка команды)

1. Адрес команды из счетчика PC (IP) передается в регистр адреса MAR.

2. Значение MAR выставляется на шину адреса, активируется строб #MEMR = 0.

3. ОЗУ считывает байты инструкции и передает их по шине данных в регистр MDR.

4. Опкод инструкции перемещается в регистр команд IR.

5. Счетчик команд PC автоматически увеличивается на длину выбранной инструкции.

Фаза 2: DECODE (Декодирование)

1. Опкод из IR поступает в аппаратный дешифратор команд устройства управления (УУ).

2. УУ распознает тип операции (пересылка, сложение, логика, переход).

3. Определяются адреса операндов (регистровые, непосредственные, прямые по ОЗУ).

4. Генерируется микропрограмма управляющих импульсов для АЛУ и шин.

7. Машинный цикл команды: Execute & Writeback

Фаза 3: EXECUTE (Выполнение)

• Арифметико-логическое устройство (АЛУ) производит требуемую математическую или логическую операцию над операндами.

• Если команда требует чтения операнда из ОЗУ (например, [1000h]), генерируется дополнительный шинный цикл чтения памяти.

• При командах перехода (JMP, JNZ) в этой фазе вычисляется новый целевой адрес счетчика команд PC.

Фаза 4: WRITEBACK (Обратная запись)

• Результат операции фиксируется в целевом регистре процессора (AX, BX и т.д.) либо записывается в ОЗУ через MAR и MDR по стробу #MEMW.

• Обновляются флаги в регистре состояния FLAGS:

ZF (Zero Flag) — равен ли результат нулю;

CF (Carry Flag) — возник ли арифметический перенос;

SF (Sign Flag) — знак полученного числа (старший бит).

8. Внутренние служебные регистры процессора
Регистр Полное название Функциональная роль в цикле команды
PC / IP Program Counter / Instruction Pointer Указывает адрес следующей инструкции в ОЗУ. Инкрементируется автоматически в фазе Fetch.
MAR Memory Address Register Буфер адреса. Напрямую соединен с внешней системной шиной адреса (AB).
MDR Memory Data Register Двунаправленный буфер данных. Соединен с внешней системной шиной данных (DB).
IR Instruction Register Регистр команд. Удерживает машинный код инструкции во время фазы декодирования.
FLAGS / PSW Program Status Word Фиксирует признаки результата последней операции АЛУ (ZF, CF, SF, OF) для условных переходов.
9. Потактовая трассировка: MOV AX, [1000h]

Пример выполнения команды загрузки слова из памяти в регистр аккумулятора AX:

Такт Фаза Шина адреса (AB) Шина данных (DB) Шина управления (CB) Действие узлов CPU
T1 Fetch (1) 0100h (из PC) Hi-Z (ожидание) #MEMR = 0 (чтение) PC → MAR, отправка адреса
T2 Fetch (2) 0100h Опкод MOV AX,[..] #MEMR = 0, READY=1 DB → MDR → IR, инкремент PC
T3 Decode 1000h (операнд) Hi-Z Неактивна Дешифрация опкода, адрес → MAR
T4 Execute 1000h Hi-Z → Слово данных #MEMR = 0 (чтение ОЗУ) Память считывает ячейку 1000h
T5 Writeback Снят Значение ячейки #MEMR = 1 (деактивация) MDR → Регистр AX. Команда завершена.
10. «Узкое место фон Неймана» (Von Neumann Bottleneck)
Физическая суть проблемы: Вычислительное ядро процессора способно выполнять миллиарды операций в секунду (частота 4–5 ГГц), но системная шина и память DRAM разделены расстоянием и работают с латентностью 40–70 наносекунд.

Проблема «Memory Wall»

• При прямом обращении к ОЗУ процессор вынужден простаивать до 200–300 тактов (такты ожидания, wait states / memory stalls).

• Общая шина для команд и данных физически не способна одновременно передавать инструкцию и операнд.

Аппаратные пути преодоления

• Многоуровневый кэш (L1, L2, L3) на кристалле процессора (SRAM со временем доступа 1–10 тактов).

• Аппаратный конвейер команд (Instruction Pipeline).

• Предсказание ветвлений (Branch Prediction) и спекулятивная предвыборка (Prefetch).

11. Гарвардская архитектура: раздельные шины

Принстонская модель (фон Нейман)

• Единое адресное пространство для команд и данных.

• Одна общая шина адреса и шина данных.

• Простота разводки чипа, но последовательный доступ.

• Применение: Системная шина ПК и серверов.

Гарвардская модель

• Физически раздельная память программ (Flash) и данных (SRAM).

• Две независимые шинные пары: шина инструкций и шина данных.

• Полная одновременность: выборка команды параллельна чтению операнда.

• Применение: Микроконтроллеры (AVR, PIC, STM32), DSP.

Модифицированная гарвардская архитектура в современных ПК: На кристалле ЦПУ кэш L1 разделен на гарвардские блоки L1I (инструкции) и L1D (данные) с раздельными шинами, а наружу к ОЗУ DDR5 выходит единая шина фон Неймана.
12. Сравнение архитектур: критерии выбора
Критерий сравнения Фон-неймановская (Принстонская) Гарвардская архитектура
Параллелизм шины Низкий (поочередный доступ к командам и данным) Высокий (одновременная выборка команды и операнда)
Гибкость памяти Максимальная: свободный баланс между кодом и данными Жесткая: фиксированный объем Flash под код и SRAM под данные
Аппаратная сложность Минимальное число выводов микросхемы Удвоенное число проводников и выводов кристалла
Детерминизм времени Сложно предсказуем из-за очередей шины и кэш-промахов Высокий детерминизм (жесткое реальное время)
Целевой класс ЭВМ ПК, серверы, рабочие станции, мобильные SoC Встраиваемые микроконтроллеры, DSP, контроллеры приводов
13. Типовые инженерные ошибки в понимании ЭВМ
  • «Адрес и данные могут идти по одной шине без разделения во времени»: Ошибка. Либо используются физически раздельные шины AB и DB, либо мультиплексированная шина (как в i8086), где в первом такте передается адрес, а во втором — данные по стробу ALE (Address Latch Enable).
  • «Команды физически помечены в памяти как исполняемый код»: Ошибка. В силу принципа однородности памяти байты не имеют аппаратных меток. Что именно исполняет процессор, определяется исключительно указателем команд PC/IP.
  • «Команда условного перехода сама вычисляет условие»: Ошибка. Инструкция JNZ/JZ лишь считывает состояние флага ZF в регистре флагов, установленного предшествующей инструкцией (SUB, CMP, TEST).
  • «Чем выше гигагерцы процессора, тем меньше влияние шины памяти»: Ошибка. Чем быстрее процессор, тем острее становится проблема Von Neumann Bottleneck, так как процессор теряет больше тактов в ожидании ответа DRAM.
14. Резюме: архитектура ЭВМ и суровая реальность
XKCD: Compiling
Мем: «Compiling» (xkcd #303) — культовый веб-комикс о реальном использовании вычислительных ресурсов разработчиками во время компиляции.
Автор: Рэндалл Манро (Randall Munroe), проект xkcd (выпуск #303).
Лицензия: Creative Commons Attribution-NonCommercial 2.5 Generic (CC BY-NC 2.5).
Атрибуция: Изображение встроено автономно в формате Data URI (data:image/jpeg;base64) без сторонних сетевых запросов.
Слайд 1 из 15