5.3 KiB
Уровни абстракции
Электронно-вычислительные системы очень часто делят на уровни абстракции. Основных причин для такого разделения две: каждый уровень скрывает детали нижележащего, а также навязывает свои ограничения вышележащему.
Один из таких примеров (от низкого к высокому):
- Физика (Электроны)
- Устройства (Транзисторы, диоды)
- Аналоговые схемы (Усилители, фильтры)
- Цифровые схемы (AND вентили, NOT вентили)
- Логика (Сумматоры, память)
- Микро-архитектура (Контроллеры, каналы передачи данных)
- Архитектура (Регистры, инструкции)
- Операционные системы (Драйверы устройств)
- Application Software (Программы)
Любую систему можно разбить на уровни абстракции. Выражаться они будут разным образом: какие-то будут видны только в документации, какие-то будут реализованы в виде программ. Тем не менее, они всегда существуют и связаны друг с другом (настолько, что при необходимости мы всегда можем перемещаться между ними).
Иногда различные уровни могут формировать вокруг себя виды индустрии, об этом можно подробнее почитать в небольшой статье, в которой такое разделение происходит по аналогии с сетевой моделью OSI.
При этом сами уровни абстракции формируются вычислительными платформами. Платформы состоят из трёх основополагающих компонентов: языка, типа и экземпляра. Язык (Language) - собственно, язык, на котором мы пишем или описываем. Тип (Type) - предопределенные платформой абстракции и структуры данных. Экземпляр (Instance) - готовые, предопределённые платформой объекты и компоненты. С использованием трёх этих компонентов чаще всего появляется и еще один - шаблон. Шаблон (Pattern) задает повторяемые решения.
Одни и те же шаблоны могут повторяться на разных уровнях абстракции. К примеру: сторожевые таймеры появляются в микроконтроллерах, ОС/гипервизорах и оркестраторах; кеши и когерентность актуальны для CPU, ОС (page cache), дисков, CDN и браузеров; прерывания и события используются в аппаратных IRQ, сигналах ОС, event loop и message queue; системы команд часто встречаются в ISA процессора, байткодах виртуальных машин (JVM, CLR), API/протоколах (у которых свой Language на каждом уровне), а также в DSL.
Тенденции
Внутри компьютера:
- смена процессорной архитектуры (уход от x86 в пользу ARM и RISC-V)
- появление разнообразия (или гетерогенности) вычислений (GPU, NPU, TPU)
- чиплеты и продвинутая упаковка кристаллов вместо монолитных SoC (нужно учитывать, под какое железо делается программа)
- реконфигурируемые вычислители (FPGA, CGRA).
За пределами компьютера:
- облачные вычисления (server-less)
- распределённые системы, системы систем, IoT, edge/fog computing
- вычисление вне доверенного окружения (confidential computing (TEE), Blockchain, Smart Contract)
В разработке:
- AI-ассистированная разработка - копайлоты, агенты, генерация и ревью кода (к слову, уровни абстракции - слабое место ИИ)
- Low-code или no-code решения - смещение программирования к верхним уровням индустрии
- Platform Engineering, IaC, GitOps (как сконфигурировать систему)
- Микросервисы <-> модульные монолиты (маятник архитектурных стилей)