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

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

Компьютер начинает работать задолго до того, как «включится». И кнопка питания не включает блок питания — она лишь вежливо просит.
+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-го, 1986 год.
Разница длин дорожек в 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 ГБ/с | скорость света + провайдер |


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