42 lines
5.3 KiB
Markdown
42 lines
5.3 KiB
Markdown
## Уровни абстракции
|
||
|
||
Электронно-вычислительные системы очень часто делят на уровни абстракции. Основных причин для такого разделения две: каждый уровень скрывает детали нижележащего, а также навязывает свои ограничения вышележащему.
|
||
|
||
Один из таких примеров (от низкого к высокому):
|
||
- Физика (Электроны)
|
||
- Устройства (Транзисторы, диоды)
|
||
- Аналоговые схемы (Усилители, фильтры)
|
||
- Цифровые схемы (AND вентили, NOT вентили)
|
||
- Логика (Сумматоры, память)
|
||
- Микро-архитектура (Контроллеры, каналы передачи данных)
|
||
- Архитектура (Регистры, инструкции)
|
||
- Операционные системы (Драйверы устройств)
|
||
- Application Software (Программы)
|
||
|
||
Любую систему можно разбить на уровни абстракции. Выражаться они будут разным образом: какие-то будут видны только в документации, какие-то будут реализованы в виде программ. Тем не менее, они всегда существуют и связаны друг с другом (настолько, что при необходимости мы всегда можем перемещаться между ними).
|
||
|
||
Иногда различные уровни могут формировать вокруг себя виды индустрии, об этом можно подробнее почитать в небольшой [статье](https://swyx.io/osi-layers-coding-careers), в которой такое разделение происходит по аналогии с сетевой моделью [OSI](https://en.wikipedia.org/wiki/OSI_model).
|
||
|
||
При этом сами уровни абстракции формируются вычислительными платформами. Платформы состоят из трёх основополагающих компонентов: языка, типа и экземпляра. Язык (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 (как сконфигурировать систему)
|
||
- Микросервисы <-> модульные монолиты (маятник архитектурных стилей)
|