Поддержка многозадачности, многоядерность и виртуализация (обзор)

Темы без привязки к практике.

Общий «принцип» развития компьютерной техники:

  1. Актуальная задача
  2. Концепция решения
  3. Решение задачи доступными техническими методами
  4. Превращение такого решения в легаси на многие десятилетия
  5. В течение этих десятилетий — усложнение методов без изменения концепции

Как следствие, каждая технология, достаточно долго присутствующая в архитектуре, становится отдельной областью технологической науки со своим инструментарием и теоретической базой. Для того, чтобы освоить такое направление до уровня практического использования, требуется либо отдельный учебный курс, либо инженерно-практический тренинг в стиле «для решения таких-то задач используются такие-то приёмы». Ни то, ни другое не укладывается в рамки нашего курса, поэтому ограничимся беглым обзором.

Общая задача масштабирования

Требования:

  1. Простой процессора ⇒ запуск нескольких задач в режиме разделения времени
    • Скорее всего, пакетный вариант (задача или успевает отработать за один запуск, или снимается с выполнения + очередь таких задач)
  2. (условное) Разделение задач на «обменные» и «счётные»: пока обменная задача ждёт конца операции ввода-вывода, счётная может немного посчитать
    • Вытесняющая многозадачность с приоритетом и планировщиком
    • Виртуализация памяти для задач, MMU
  3. Если очередь велика или их несколько (сложные/перегруженные/реалтайм операционные системы и комплексы), возникает необходимость актуально одновременного (а не вытесняющего) выполнения задач
    • ⇒ многоядерность и многопоточность
  4. Простой процессора ⇒ запуск нескольких программных окружений (ядер ОС)
    • Виртуализация ресурсов, в первую очередь внешних устройств, а для памяти — двойная виртуализация (например, виртуальный MMU для ядра)

Вытесняющая многозадачность

Общий алгоритм:

Правила смены контекстов определяет т. н. «планировщик» (scheduler) — часть ядра

Основные проблемы:

Понятие «контекст задачи» и оперативное переключение между контекстами

Аппаратное решение — а где и сколько контекстов хранить? Программное — а насколько это быстро?

Общая память — доступ одной задачи к памяти другой

Решается заданием двух режимов работы процессора, которые отличаются правами — supervisor mode (режим ядра, при котором доступна вся физическая память и все инструкции процессора) и user mode (пользовательский режим, в котором доступен ограниченны набор инструкций процессора, а сами user-mode задачи могут выполняться в изолированном адресном пространств)е).

Изоляция адресных пространств порождает проблему фрагментации памяти, выделенной под задачу: допустим, мы запустили 200 задач, каждой из которых было выделено по мегабайту. После чего каждая вторая завершалась. Можно ли освобожденные 100 мегабайт выделить новой задаче в качестве единого фрагмента памяти?

Решение: Блок управления памятью (MMU):

Менее очевидные проблемы:

Дублирование вычислительных устройств

Причины появления:

Решением этой задачи были векторные и суперскалярные варианты архитектуры (о них мы упоминался в лекции про конвейер и предсказание переходов

Здесь возникает необходимость актуально одновременного выполнения различных участков кода. «Актуальность» подразумевает не столько параллельное выполнение, сколько гарантию того, что критически важные операции завершатся вовремя.

Многоядерность

Исторически первое, более «простое» решение (нет) — использовать два или более процессоров в одной вычислительной системе

Проблемы:

Аппаратная многопоточность (hardware threads, harts)

Вводятся две абстракции:

(Про execution environment и hart в спецификации, См. также Hyper-threading)

Модель доступа к ресурсам (в первую очередь памяти, и, как следствие, MMIO) оперирует понятием hart в качестве субъекта доступа.

Иными словами не «понавтыкали процессоров, а теперь пытаемся понять, как с этим жить», а «разработали модель множественного доступа, и теперь пытаемся понять, как это изваять в кремнии».

Что произойдёт, если не строить такую модель?

Это было краткое описание семейства атак Spectre

Какие задачи hart не решает:

Виртуализация

Задача
равномерная/произвольная загрузка вычислительных мощностей готовыми «окружениями»
Условие
«окружение» — это операционная система, уже состоящая из двух уровней: ядра и юзерспейса
Решение

+ещё один уровень приоритета, при котором операционная система (ядро + юзерспейс) запускается под управлением гипервизора.

Аппаратные потребности:

Бонусы:

BTW: RISC-V — 4 уровня

  1. Machine (первоначальный старт и инициализация, аппаратные hart-ы)

  2. Hypervisor — уровень виртуализации
  3. Supervisor — уровень ядра
  4. User — пользовательский уровень

Всё остальное

Железо:

Программирование:

…нельзя объять необъятного!

LecturesCMC/ArchitectureAssembler2024/13_ScalingVirtualization (последним исправлял пользователь FrBrGeorge 2025-01-26 21:13:05)