Подробная история архитектуры RISC-V: технические аспекты и путь к глобальному стандарту. RISC-V – расширяя горизонты: от базы к продвинутым возможностям
Стандартные расширения ISA: специализация и производительность
Модульный подход RISC-V позволяет расширять базовый набор инструкций (ISA) с помощью опциональных стандартных расширений, каждое из которых добавляет специализированные возможности для повышения производительности в конкретных областях. Эти расширения являются критически важными для адаптации RISC-V к широкому спектру применений.
Обзор ключевых стандартных расширений: RISC-V
- M (Integer Multiply/Divide): Это расширение добавляет инструкции для целочисленного умножения и деления, которые являются фундаментальными для большинства вычислительных задач общего назначения. Без него эти операции пришлось бы эмулировать программно, что значительно снизило бы производительность.
- A (Atomic Operations): Расширение A предоставляет набор атомарных операций чтения-модификации-записи (read-modify-write) для памяти, таких как Load-Reserved/Store-Conditional (LR/SC) и атомарные операции fetch-and-op (например, атомарное сложение, вычитание, обмен). Эти инструкции критически важны для синхронизации между несколькими аппаратными потоками (harts) в многоядерных системах, обеспечивая различные модели согласованности памяти (неупорядоченная, acquire, release, последовательно согласованная).
- F (Single-Precision Floating-Point) и D (Double-Precision Floating-Point): Эти расширения реализуют операции с плавающей запятой в соответствии со стандартом IEEE 754. Расширение F поддерживает 32-битные числа с плавающей запятой одинарной точности, а расширение D — 64-битные числа двойной точности. Расширение D обычно предполагает использование 64-битных регистров с плавающей запятой и тесно координируется с F. Процессоры RISC-V без аппаратной поддержки плавающей запятой могут использовать программные библиотеки, но аппаратная реализация значительно ускоряет численные вычисления.
- C (Compressed Instructions): Это расширение предоставляет 16-битные сжатые инструкции для наиболее часто используемых операций. Оно значительно улучшает плотность кода, что особенно важно для встроенных систем с ограниченным объемом памяти, а также способствует повышению энергоэффективности. Концептуально оно схоже с набором инструкций Thumb в архитектуре ARM.
- V (Vector Operations): Одно из наиболее значимых расширений, разработанное для высокопроизводительных вычислений с параллельной обработкой данных. Оно добавляет 32 векторных регистра и специализированные инструкции для векторной арифметики, логических операций, сдвигов и редукций. Расширение V поддерживает создание переносимого бинарного кода, который может выполняться на аппаратных ядрах с различными значениями VLEN (длины вектора), при условии поддержки необходимых типов элементов и инструкций. Минимальная длина вектора для прикладных процессоров составляет 128 бит, а максимальная в текущей спецификации — 65536 бит. Это расширение имеет решающее значение для рабочих нагрузок в области искусственного интеллекта и машинного обучения.
- Другие примечательные расширения: Существуют и другие важные расширения, такие как B (Bit manipulation — манипуляции битами), J (JIT-compiled language support — поддержка JIT-компилируемых языков), Zicsr (Control and Status Register support — поддержка регистров управления и состояния), Zifencei (Load/store fence — барьеры загрузки/сохранения), а также различные криптографические расширения (Scalar Crypto, Vector Crypto), предназначенные для ускорения криптографических алгоритмов, таких как AES и SHA.
Эти расширения позволяют разработчикам точно настраивать свои проекты под конкретные программные рабочие нагрузки. Это способствует глубокой кастомизации и специализации для широкого спектра приложений, от маломощных встроенных систем до высокопроизводительных вычислений и систем ИИ.
Модульность RISC-V, проявляющаяся через его стандартные и пользовательские расширения, напрямую способствует продвинутому аппаратно-программному сопроектированию (hardware/software co-design). Эта возможность позволяет разработчикам создавать специализированные наборы инструкций и пользовательские функциональные блоки (например, для ускорения ИИ), которые тесно интегрированы с центральным процессором. Такой подход к сопроектированию обеспечивает точную оптимизацию производительности, энергоэффективности и стоимости для конкретных рабочих нагрузок, приводя к существенным выигрышам, которые трудно достичь с фиксированными, универсальными архитектурами.
Ниже приведена таблица, обобщающая основные стандартные расширения RISC-V:
Расширение | Полное название | Назначение / функциональность | Ключевые технические детали |
I | Integer (Целочисленное) | Базовый набор целочисленных инструкций для общего назначения. | 32 регистра общего назначения (x0-x31), фиксированная 32-битная длина инструкций, load-store архитектура. |
M | Integer Multiply/Divide (Целочисленное умножение/деление) | Добавляет инструкции для аппаратного умножения и деления целых чисел. | Ускоряет математические операции, критически важные для большинства программ. |
A | Atomic Operations (Атомарные операции) | Обеспечивает атомарные операции чтения-модификации-записи для синхронизации между аппаратными потоками. | Включает LR/SC (Load-Reserved/Store-Conditional) и AMO (Atomic Memory Operations) для многоядерных систем. |
F | Single-Precision Floating-Point (Плавающая запятая одинарной точности) | Поддержка операций с числами с плавающей запятой одинарной точности (32-бит). | Соответствует стандарту IEEE 754, использует отдельный набор регистров с плавающей запятой. |
D | Double-Precision Floating-Point (Плавающая запятая двойной точности) | Поддержка операций с числами с плавающей запятой двойной точности (64-бит). | Соответствует стандарту IEEE 754, координируется с F, использует 64-битные регистры с плавающей запятой. |
C | Compressed Instructions (Сжатые инструкции) | Предоставляет 16-битные сжатые инструкции для улучшения плотности кода. | Уменьшает размер кода, повышает энергоэффективность, может смешиваться с 32-битными инструкциями. |
V | Vector Operations (Векторные операции) | Поддержка векторных вычислений для параллельной обработки данных. | Добавляет 32 векторных регистра, включает инструкции для векторной арифметики, логики, сдвигов, редукций; VLEN от 128 до 65536 бит. |
Привилегированная архитектура и управление памятью: основы операционных систем
Помимо базового набора инструкций и расширений, RISC-V определяет сложную привилегированную архитектуру, которая является основой для работы операционных систем, виртуализации и обеспечения безопасности.
RISC-V определяет три стандартных уровня привилегий:
- Режим машины (M-mode): Это самый высокий уровень привилегий и единственный обязательный режим для любой аппаратной платформы RISC-V. Код, выполняющийся в M-mode (обычно это прошивка или загрузчик), имеет неограниченный доступ ко всей машине. В простейших реализациях M-mode может быть единственным доступным режимом, что, однако, не обеспечивает защиту от некорректного или вредоносного кода.
- Режим супервизора (S-mode): Этот режим предназначен для работы ядер операционных систем, таких как Linux. Он обеспечивает изоляцию между ОС и средой выполнения супервизора (SEE), а также может быть расширен для поддержки выполнения гипервизоров типа 2. Операционные системы RISC-V взаимодействуют с SEE через двоичный интерфейс супервизора (SBI), что позволяет одной и той же ОС работать на различных реализациях SEE.
- Пользовательский/прикладной режим (U-mode): Это самый низкий уровень привилегий, предназначенный для выполнения обычных пользовательских приложений. Большинство реализаций RISC-V поддерживают U-mode для защиты остальной части системы от прикладного кода. Приложения взаимодействуют со средой выполнения приложений (AEE) через двоичный интерфейс приложений (ABI).
Различные комбинации этих режимов позволяют создавать системы для различных целей: от простых встроенных систем (только M-mode) до защищенных встроенных систем (M+U) и систем, работающих под управлением Unix-подобных ОС (M+S+U).
Регистры управления и состояния (CSRs): RISC-V определяет ряд регистров управления и состояния (CSRs), которые доступны на каждом уровне привилегий и используются для управления поведением ЦП и получения информации о его состоянии. Примеры включают mideleg (для делегирования прерываний от M-mode к S-mode или U-mode), mtime (текущий счетчик тактов) и satp (регистр, указывающий на корень таблицы страниц виртуальной памяти). Инструкции csrr* используются для передачи значений между CSRs и регистрами общего назначения.
Обработка прерываний и исключений (Traps): Когда происходит событие, требующее вмешательства системы (например, исключение, системный вызов или аппаратное прерывание), процессор выполняет «ловушку» (trap). Это приводит к переключению на более привилегированный режим (например, из U-mode в M-mode или S-mode) и переходу к обработчику ловушек, адрес которого хранится в регистре stvec. После обработки ловушки управление возвращается к исходной инструкции или следующей за ней, обычно в менее привилегированном режиме.
Модель памяти RISC-V: RISC-V использует модель памяти с ослабленной согласованностью (RVWMO), которая по умолчанию допускает переупорядочивание операций с памятью для повышения производительности в многоядерных системах. Однако для обеспечения корректности в параллельных программах RISC-V предоставляет явные инструкции FENCE, которые накладывают дополнительные ограничения на порядок доступа к памяти и устройствам ввода/вывода.
Наличие ослабленной модели памяти в сочетании с явными инструкциями FENCE и надежными атомарными операциями (такими как LR/SC) является продуманным проектным решением. Это позволяет RISC-V по умолчанию отдавать приоритет производительности, но при этом предоставляет программистам точный, детальный контроль для обеспечения более строгой упорядоченности, когда это необходимо для корректной синхронизации. Такой подход является сложным и эффективным для параллельных вычислений. Атомарные операции, предоставляемые расширением A, включая Load-Reserved/Store-Conditional (LR/SC) и атомарные fetch-and-op инструкции, гарантируют синхронизацию между несколькими аппаратными потоками.
Виртуальная память: RISC-V реализует виртуальную память через аппаратный блок управления памятью (MMU). MMU использует многоуровневые таблицы страниц (например, Sv39, Sv48, Sv57 для 64-битного RISC-V) для преобразования виртуальных адресов в физические. Каждая запись в таблице страниц (PTE) содержит физический номер страницы и биты разрешений (чтение, запись, выполнение, доступ из пользовательского режима). Для ускорения процесса трансляции современные ЦП включают буфер ассоциативной трансляции (TLB), который кэширует недавние преобразования виртуальных адресов в физические. Регистр satp (Supervisor Address Translation and Protection) содержит физический адрес корня таблицы страниц, используемой MMU.
Привилегированная архитектура RISC-V с ее различными режимами M, S и U, а также такими функциями, как физическая защита памяти (PMP) и управление виртуальной памятью (таблицы страниц, TLB, управляемые регистром satp), предоставляет надежные механизмы для обеспечения системной безопасности и изоляции. Этот детальный контроль позволяет доверенной прошивке в M-mode применять строгие политики доступа к физической памяти, защищая систему от вредоносного или ошибочного кода, выполняющегося на более низких уровнях привилегий. Это является жизненно важным аспектом для создания безопасных сред выполнения и надежных операционных систем.
Ниже представлена таблица, описывающая уровни привилегий RISC-V:
Режим | Полное название | Уровень привилегий | Обязательный/опциональный | Типичное использование | Ключевые характеристики |
M | Machine (Машина) | Наивысший | Обязательный | Прошивка, загрузчик, базовый системный код | Неограниченный доступ ко всей машине, управление PMP (опционально). |
S | Supervisor (Супервизор) | Промежуточный | Опциональный | Ядро операционной системы (например, Linux) | Обеспечивает изоляцию между ОС и приложениями, управляет виртуальной памятью. |
U | User/Application (Пользователь/Приложение) | Низший | Опциональный | Пользовательские приложения | Ограниченный доступ к системным ресурсам, защищен от других режимов. |
- Комментарии