Валерий Егоров, заместитель директора НТП «Криптософт».
Закончил в 1996 году Пензенский госуниверситет, в 2001 году получил степень кандидата технических наук. С 1994 года занимается исследованиями в области системного ПО и защиты информации, с 2005 года работает на предприятии «Криптософт». Руководитель направления и евангелист операционной системы QP ОС.
Операционная система QP ОС функционирует на различных аппаратных платформах. В настоящее время это платформы Intel x86 и x64, ARMv7, ARMv8. Для каждой из перечисленных платформ в операционной системе QP ОС разработан слой абстрагирования от аппаратуры (HAL), позволяющий осуществлять реализацию основного функционала системы без привязки к аппаратным особенностям используемой платформы. Также QP ОС функционирует на компьютерах Эльбрус в режиме бинарной трансляции (совместимости с процессорами Intel).
Помимо операционной системы QP ОС НТП «Криптософт» также обладает опытом проектирования программных систем на базе компьютеров с процессорами «Комдив-64», являющимися развитием архитектуры MIPS-64. На сегодняшний день эти процессоры научились поддерживать режим Little-Endian, что открывает новые перспективы их внедрения.
Интересной особенностью QP ОС является отсутствие привязки к аппаратной платформе диспетчера задач операционной системы. Менеджер памяти в составе QP ОС разделён на две примерно равные части, одна из которых привязана к аппаратной платформе, а другая нет.
При разработке системы мы старались соблюсти максимально возможное совпадение базовых характеристик, таких как размер одной страницы памяти, длительность единичного кванта, базовые конфигурационные структуры в составе системы. Так система всегда работает в режиме Little-Endian, размер страницы памяти составляет 4 кб для ядра и всех 32-разрядных процессов в системе, длительность единичного кванта равна 10 мс, а нить описывается структурой SThreadControl с практически идентичным набором параметров. Это позволяет программисту легко портировать драйверы между платформами и разрабатывать прикладные программы без привязки к аппаратуре.
Перечислим базовые компоненты QP ОС, входящие в слой абстрагирования от аппаратуры:
Все остальные компоненты HAL являются дополнительными к уже перечисленным базовым и относятся более к другим аппаратным устройствам в составе компьютера, которые отличаются от платформы к платформе.
Однако, и для системного программиста, и для программиста прикладных программ для QP ОС существуют определённые различия, которые необходимо упомянуть.
Первым и несомненным различием для разных аппаратных платформ является структура контекста нити SContext, в которую входит набор значений регистров процессора, изменяемых при переключении нитей. Помимо регистров общего назначения в неё входят также регистры для работы с плавающей точкой и потоковых вычислений, таких как SSE и SIMD. При обработке исключений программист должен отдельно кодировать механизмы, которые непосредственно изменяют значения таких регистров.
Второе различие программирования аппаратных платформ относится к программированию барьеров. В том случае, если программист использует объекты синхронизации, предоставляемые операционной системой, и не взаимодействует напрямую с аппаратурой компьютера, он может не задумываться о барьерах. В противном случае это делать необходимо. Однако барьеры различаются между платформами. Так для платформы Intel имеются барьер чтения, барьер записи и барьер чтения-записи, а для платформ ARM обычно применяются три основных барьера: барьер данных, барьер синхронизации и барьер исполнения. Без понимания принципов работы барьеров трудно обойтись при работе с аппаратурой.
Третье различие между аппаратными платформами относится к механизмам кэширования памяти, работе с памятью различных видов кэширования, а также программного сброса кэш. Не будем углубляться здесь в особенности кэширования памяти каждой аппаратной платформы, – это задача системного программиста, работающего напрямую с аппаратурой компьютера. Однако, необходимо отметить, что в QP ОС есть механизм, облегчающий системному программисту жизнь при необходимости сброса буфера данных в кэш. Это функция MemResetCacheRegion(), которая позволяет синхронизировать кэш для памяти, используемой при работе с устройствами. У неё два параметра: адрес кэшируемой памяти и размер буфера. Функцию можно вызывать только при запрете переключения процессоров (на уровне аппаратного приоритета 2). Она производит сброс кэш-памяти в границах кэш-линий, в которые попадает буфер и актуализирует содержимое памяти. Появление в системе данной функции значительно упростило системным программистам взаимодействие с устройствами в составе компьютера, поскольку больше не нужно кодировать эти действия самостоятельно. Функция MemResetCacheRegion() работает на всех аппаратных платформах, поддерживаемых операционной системой QP ОС.