От кнопки до процесса
Полная анатомия запуска компьютера: куда течёт первый ампер, кто исполняет первую инструкцию, как биты становятся рабочим столом — и где именно виртуальная кнопка «Завершить работу» дотягивается до реального транзистора.

Полная анатомия запуска компьютера: куда течёт первый ампер, кто исполняет первую инструкцию, как биты становятся рабочим столом — и где именно виртуальная кнопка «Завершить работу» дотягивается до реального транзистора.

Компьютер начинает работать задолго до того, как «включится». И кнопка питания не включает блок питания — она лишь вежливо просит.
+5VSB (standby, до 3 А) живёт всегда.| Сигнал | Цвет | Роль |
|---|---|---|
+5VSB | фиолетовый | дежурное питание, живёт всегда |
PS_ON# | зелёный | притянуть к земле = «включай основные линии» |
PWR_OK | серый | ответ БП: «напряжения стабильны, можно жить» |
| 12V / 5V / 3.3V | жёлт/красн/оранж | основные силовые линии |
Знак # = сигнал активен низким уровнем. Классика: замкнуть зелёный на чёрный скрепкой — БП стартует без всякой платы.
PWR_BTN на колодке платы. Ни логики, ни напряжения — контакт.
PWR_OK низким и поднимает его только когда все линии в допуске ±5% минимум 100 мс.PWR_OK — критический сигнал: пока его нет, чипсет держит всю платформу в RESET. Ни одна цифровая схема не начнёт работать на плывущем питании.CPU не ест 12 В. Он ест ~0.9–1.4 В, зато сотнями ампер. Преобразует это VRM — кольцо силовой электроники вокруг сокета.

Спойлер: не твой процессор. В каждом ПК живёт второй, скрытый компьютер — и он всегда просыпается первым.

x86 после reset начинает с адреса 0xFFFF_FFF0 — 16 байт до конца 32-битного пространства. RAM там нет и быть не может.
Чипсет аппаратно декодирует верхние адреса (~последние 16 МБ под 4 ГБ) в чтение SPI-флешки. CPU думает, что читает память — а чипсет незаметно ходит по SPI за каждым байтом.
По адресу FFFF_FFF0 лежит одна-единственная инструкция — прыжок в настоящий код. Эти 16 байт — reset vector, самые дорогие 16 байт в индустрии: их адрес не менялся с 386-го, 1985 год.
Разница длин дорожек в 1 см — уже треть окна. Потому дорожки DDR на плате извиваются змейкой: это выравнивание длин, не украшение.
Классический POST 90-х (проверка RAM, пищание кодами) практически мёртв: память проверяется тренингом, ошибки сыпятся в Q-code индикатор или диагностические светодиоды платы.
Порядок для дебага живой платы: светодиоды CPU→DRAM→VGA→BOOT. Висит на DRAM — привет, memory training. Висит на VGA — карта/райзер/моник. На BOOT — ушли в главу 3.
Холодный старт с NVMe: ~3–10 c до передачи управления загрузчику. Из них львиная доля — инициализация памяти и DXE-зоопарк. Fast Boot режет USB-опрос и legacy — потому клавиатура иногда «не успевает» в BIOS.

UEFI сделал своё дело и хочет уйти. Осталось найти, проверить и запустить того, кому передать королевство.
BootOrder, Boot0000... — по записи на каждую ОС. bcdedit /enum firmware покажет.\EFI\Microsoft\Boot\bootmgfw.efi — обычный PE-файл (тот же формат, что .exe!), исполняемый прямо firmware-ой.Твоя ремарка про «HAL, к которому диспетчер прикручен вплотную» — вот момент их встречи: winload грузит ntoskrnl и hal парой, и с 2020-х hal.dll — уже форвардер внутрь ядра.
| Слой | Кто |
|---|---|
| Ты | двойной клик |
| user mode | explorer → CreateProcess → ntdll → syscall |
| kernel | EPROCESS, VAD, страницы, поток, планировщик |
| CPU | µops, кэши, TLB, спекуляция |
| RAM | ACT/RD, row buffer, refresh |
| Электроны | VRM держит 1.2 В, БП держит 12 В, розетка держит всех |
Верх этой таблицы существует миллисекунды, низ — миллиарды тактов. И всё это — один клик.

Ты просил показать место, где виртуальная кнопка «Завершить работу» дотягивается до физики. Вот оно, с точностью до регистра.
ExitWindowsEx(EWX_SHUTDOWN).WM_QUERYENDSESSION → WM_ENDSESSION. У каждого ~5 секунд на «сохраниться и умереть», потом экран «приложение не отвечает».NtShutdownSystem — всё, дальше только ядро.Ещё при загрузке ядро прочитало ACPI-таблицы. В таблице FADT написано: «регистр управления питанием PM1a_CNT живёт по такому-то адресу ввода-вывода». В байткоде DSDT лежит пакет \_S5 — пара магических цифр SLP_TYP для перехода в состояние S5 (soft-off) именно этой платы.
То есть плата при старте оставила ОС записку: «захочешь меня выключить — запиши вот эти цифры вот в этот регистр». ОС хранила её всю сессию.
S-состояния: S0 работаем · S3 сон (RAM под током) · S4 гибернация (RAM на диск) · S5 soft-off (жива только дежурка).

Внутри «процессора» давно нет одного процессора. Там город: фабрики-ядра, склады-кэши, своя железная дорога и таможня с переводчиком.

Пусть 1 такт = 1 секунда. Тогда:
| Куда | Реально | «По-человечески» |
|---|---|---|
| Регистр | 0 тактов | мысль |
| L1 | 4 такта | взять со стола · 4 с |
| L2 | 14 | сходить к шкафу · 14 с |
| L3 | ~50 | сходить к соседу · 1 мин |
| RAM | ~400 | сходить в магазин · 7 мин |
| NVMe | ~400 000 | отпуск · 4.5 суток |
| HDD seek | ~40 000 000 | выйти на пенсию · 1.5 года |

Каждый бит твоей оперативки — конденсатор, из которого утекает заряд. Вся DRAM — это бесконечное переливание воды, притворяющееся памятью.
CL-tRCD-tRP — это цены трёх этих шагов. Row hit = только CL; row miss = вся троица.DDR2-800 CL5 = 12.5 нс до данных. DDR5-6000 CL30 = 10 нс. За 20 лет — минус 20%. Пропускная способность выросла в 10 раз, задержка — почти нет: скорость света и RC-константы конденсаторной матрицы не масштабируются техпроцессом.
Вся индустрия строит обходы: кэши толще (X3D), prefetch умнее, OoO глубже. Латентность RAM — гравитация вычислений.
Молотишь по одной строке миллионы раз — электромагнитные наводки подтекают заряд СОСЕДНИХ строк, и биты флипаются без доступа к ним. Дыра в безопасности из чистой физики. Лечат Target Row Refresh'ем, гонка щита и меча идёт до сих пор.

Северный мост умер и переехал в CPU. Южный выжил, сменил имя на «чипсет» и стал большим USB-хабом с амбициями.
| Шина | Скорость | Кто на ней живёт | Заметки |
|---|---|---|---|
| PCIe 5.0 x16 | ~63 ГБ/с | видеокарта | поколение ×2 = скорость ×2; x16/x8/x4/x1 — число полос |
| PCIe 4.0/5.0 x4 | ~8/16 ГБ/с | NVMe SSD | тот самый M.2 |
| DDR5, 2 канала | ~90 ГБ/с | RAM ↔ IMC | но латентность ~80 нс — гл. 6 |
| USB4 / 3.x / 2.0 | 40 Гбит → 480 Мбит | периферия | зоопарк имён USB 3.2 Gen2x1 — маркетинговое преступление |
| SATA III | 0.55 ГБ/с | старые SSD, HDD | легаси-протокол AHCI: одна очередь, 32 команды |
| SPI | ~единицы МБ/с | BIOS-флешка, TPM | медленно — но при старте больше некому |
| SMBus / I²C | ~100 КБ/с | SPD планок, датчики, VRM-телеметрия | двухпроводный просёлок из 1982 |
| eSPI / LPC | ~десятки МБ/с | Super I/O: вентиляторы, кнопка, COM | наследник ISA. Да, того самого, 1981 |

CPU — четыре профессора, решающие что угодно. GPU — десять тысяч студентов, решающих одно и то же. Вопрос лишь в том, какая у тебя задача.
| CPU | GPU | |
|---|---|---|
| Ядра | 8–16 сложных | тысячи простых |
| Сила | латентность одной задачи | пропускная способность миллиона |
| Ветвления | предсказывает 98% | страдает |
| Память | кэши прячут | параллелизм топит |
| Родная задача | логика, сим, ОС | пиксели, матрицы, нейронки |
Потому нейронки живут на GPU: перемножение матриц — миллионы одинаковых умножений без ветвлений, идеальный студенческий субботник.

Внутри SSD нет ничего дискового. Там матрица ловушек для электронов и маленький компьютер, который врёт операционке о том, где что лежит.
Свободный TLC/QLC контроллер временно использует как SLC (1 бит на ячейку — быстро!). Первые ~100–400 ГБ заливки летят на 5–7 ГБ/с, потом кэш кончается — и скорость падает до честной QLC-записи, порой ниже SATA. Тот самый «залил 300 гигов, а оно сдохло до 400 МБ/с».
| SATA/AHCI | NVMe | |
|---|---|---|
| Очередей | 1 | до 65 535 |
| Глубина | 32 | 65 535 |
| Путь | через SATA-контроллер | PCIe прямо в CPU |
| Латентность | ~100 мкс | ~10–20 мкс |
Протокол спроектирован под параллельную природу NAND, а не под один вращающийся блин. Очередь на ядро, без глобальных локов.

| Уровень | Латентность | Пропускная способность | Главная боль |
|---|---|---|---|
| Регистры | 0 тактов | — | их 16 (виртуально 300+) |
| L1 / L2 / L3 | 1 / 4 / 15 нс | ТБ/с | размер; false sharing |
| RAM DDR5 | ~80 нс | ~90 ГБ/с | латентность стоит 20 лет |
| VRAM GDDR6 | ~200+ нс | ~960 ГБ/с | широко, но далеко |
| NVMe (PCIe 4) | ~15–80 мкс | 7 ГБ/с* | *пока жив pSLC; QD1 — правда жизни |
| SATA SSD | ~100 мкс | 0.55 ГБ/с | потолок протокола 2008 года |
| HDD | ~10 мс | 0.2 ГБ/с | механика: головка едет физически |
| Интернет | ~10–100 мс | ≤1 ГБ/с | скорость света + провайдер |

Если каждый слой врёт слою выше, где стоишь ты? Программа верит ОС, что память бесконечна и своя. ОС верит контроллеру, что байты лежат по адресам. Контроллер верит планке, что заряд в ведёрке ещё есть. Планка не верит никому и переливает воду каждые 64 мс.
Единственный слой, который никому не врёт, - конденсатор. И он же единственный, кто всё забывает. Чем ниже по башне, тем честнее и тем беспамятнее; чем выше, тем удобнее и тем дальше от правды. Двойной клик живёт на самом верху. Вопрос не в том, сколько слоёв под ним, а в том, на каком из них ты остановился бы, если бы пришлось выбирать, где «настоящий» компьютер.
Mundus vult decipi, ergo decipiatur.
«Мир хочет быть обманутым, так пусть будет обманут». Приписывают Петронию, в оборот ввёл Себастьян Брант в «Корабле дураков», 1494. У Бранта это упрёк: фраза про ярмарки, торговцев реликвиями и толпу, которая сама несёт деньги.
В этой лекции упрёк снят. FTL врёт про сектора, IMC про байты, ОС про память, декодер про x86, кэш про сто наносекунд, VRM про то, что 12 вольт это 1.2. Каждый обман добросовестный: слой выше не смог бы работать, знай он правду. Программа, которая помнит, что её память - дырявые конденсаторы, не будет написана никогда.
Подвох в том, что фраза не про глупость, а про инженерию: обман - это интерфейс. Башня стоит, пока каждый врёт только вверх и никогда вниз. Rowhammer и Spectre - два случая, когда правда просочилась не в ту сторону.

Розетка → дежурка → кнопка → PS_ON# → soft-start → VRM → клоки → PSP → reset vector → CAR → memory training → DXE → bootmgfw → ntoskrnl → smss → winlogon → explorer → твой двойной клик → CreateProcess → µops → кэш-линии → row buffer → пиксель на экране. От 50 герц розетки до 5 гигагерц ядра — восемь порядков частоты, и ни одного слоя, который можно выкинуть.
А выключение — тот же путь обратно, вплоть до одной инструкции out, отпускающей зелёный провод.