
Александр Жаков
Golang Developer

Устройство ЭВМ
Архитектура компьютера
Компьютер состоит из основных компонентов:
- Процессор (CPU) — выполняет вычисления и обрабатывает данные.
- Память (RAM) — временное хранилище для данных и инструкций, с которыми работает процессор.
- Шина данных (Data Bus) — транспортирует данные между процессором, памятью и другими устройствами.
Обмен данными между процессором и памятью происходит через систему кэширования для уменьшения задержек доступа.
Память
Память компьютера организована в несколько уровней:
- Регистры CPU — самый быстрый, но ограниченный по объёму уровень (несколько десятков байт).
- Кэш-память (Cache) — промежуточное хранилище между процессором и оперативной памятью.
- Оперативная память (RAM) — медленнее кэша, но быстрее постоянного хранилища (SSD/HDD).
- Постоянное хранилище (SSD/HDD) — для долговременного хранения данных.
Уровни кэша
Кэш разделяется на несколько уровней:
- L1 Cache: Самый быстрый и маленький (обычно 32–64 КБ), привязан к каждому ядру.
- L2 Cache: Быстрее, чем RAM, но медленнее L1 (обычно 256 КБ – 1 МБ), также привязан к ядру.
- L3 Cache: Общий для всех ядер, размер может достигать десятков мегабайт.
Cache Line и Cache Coherence
Cache Line — это минимальная единица данных, которая кэшируется (обычно 64 байта).
Cache Coherence — механизм обеспечения согласованности данных в кэше нескольких ядер процессора.
Протоколы согласованности:
- MESI (Modified, Exclusive, Shared, Invalid) — самый распространённый протокол.
- MOESI — расширение MESI с дополнительным состоянием Owned.
Cache Contention — ситуация, когда несколько ядер конкурируют за доступ к одной и той же кэш-линии, что приводит к снижению производительности.
Translation Lookaside Buffer (TLB) и виртуальная память
TLB — это кэш для таблиц страниц, ускоряющий преобразование виртуальных адресов в физические.
Виртуальная память — позволяет отображать виртуальные адреса в физические, разделяя память между процессами и обеспечивая защиту данных.
- Страницы (Pages): обычно 4 КБ.
- Page Fault: происходит, когда процесс обращается к странице, отсутствующей в физической памяти.
CPU: инструкции и конвейерная обработка
Процессор выполняет инструкции через конвейер (Pipeline), разбивая выполнение команды на несколько стадий (fetch, decode, execute, write back).
Это позволяет выполнять несколько инструкций одновременно.
Многопоточность на уровне железа (Hyper-Threading)
- Каждый физический процессор может создавать несколько логических потоков (обычно 2), которые делят ресурсы процессора.
- Мультиплексация: переключение между потоками для оптимального использования ресурсов процессора.
I/O: Блокирующий и неблокирующий ввод-вывод
- Блокирующий ввод-вывод: процесс ожидает завершения операции ввода-вывода, прежде чем продолжить работу.
- Неблокирующий ввод-вывод: операция возвращает управление сразу, а завершение ввода-вывода обрабатывается асинхронно.
Здесь нужно понимание, что I/O операции самые дорогие, которые могут занимать значительное время, поэтому важно уметь работать с ними эффективно. Нет смысла оптимизировать код, который выполняется за 1 мс, но если операция ввода-вывода занимает 100 мс, то это уже проблема.
Как данные перемещаются из памяти в процессор и обратно
- CPU запрашивает данные из оперативной памяти.
- TLB проверяет, присутствует ли виртуальный адрес в кэше таблицы страниц.
- Если данных нет в кэше (Cache Miss), происходит обращение к оперативной памяти, и данные записываются в кэш (Cache Line).
- CPU использует данные из кэша, минимизируя обращения к оперативной памяти.
- Cache Coherence следит за тем, чтобы все ядра имели согласованные данные.
- Когда данные изменяются, обновления проходят через L1 → L2 → L3 → RAM.
Atomics и синхронизация
Проработать самостоятельно
Примеры таких инструкций:
- LOCK CMPXCHG (Compare-and-Swap) — сравнивает и заменяет значение, если оно совпадает с ожидаемым.
- XCHG (Exchange) — атомарно меняет местами значения в регистре и памяти.
- MFENCE, LFENCE, SFENCE — инструкции для управления порядком операций чтения и записи в памяти (memory barriers).