procnto, procnto-*

Микроядро и менеджер процессов

Синтаксис:

procnto-* [опции]

Опции:

-a режим
Опция задаёт режим обработки ошибок выравнивания. Возможные режимы:
d
Отключить эмуляцию ошибки выравнивания. Менеджер procnto не пытается добиться работы доступа к памяти с ошибочным выравниванием; попытка доступа приводит к получению вызывающим потоком сигнала SIGBUS.
e
Включить эмуляцию ошибки выравнивания. Менеджер procnto пытается обеспечить доступ к памяти с ошибкой выравнивания; доступ, однако, осуществляется с низкой скоростью. Успех этого режима не гарантируется: вызывающий поток может все же получить сигнал SIGBUS.
s (по умолчанию)
Использовать обработку ошибок выравнивания в зависимости от платформы:
arm
armv7
mips
Соответствует логике -ad.
ppc
x86
e2k
aarch64
Соответствует логике -ae.
-c
Не допускать при адаптивном квотировании ресурсов автоматического запуска потоков, получающих события от обработчиков прерываний в разделе критических приложений.

Note: Опция -c действует только в случае выполнения следующих условий:

-C
Задать размер тика в наносекундах. Значение по умолчанию соответствует заданному в системной странице, не может быть меньше 10 мкс.
Опция -C поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
-e n|o
Значение, используемое для EALREADY:
o (по умолчанию)
Использовать прежнее значение, совпадающее со значением EBUSY.
n
Использовать соответствующее POSIX значение.

Note: По умолчанию используется значение o, в будущих версиях оно будет изменено на n.

-F число
Максимальное количество одновременно открытых дескрипторов файлов в произвольном процессе. Минимально допустимое значение – 100. По умолчанию используется значение 1000, однако оно может быть ограничено системным ресурсом RLIMIT_NOFILE.

Note: Дескрипторы файлов также используются сокетами, именованными семафорами, очередями сообщений, идентификаторами каналов (chid) и идентификаторами соединений (coid).

Для определения текущего значения ограничения можно воспользоваться встроенной командой ksh ulimit или вызовом getrlimit()
-f режим
Опция позволяет изменять параметры, связанные с FPU. Возможные значения аргумента режим:
e
Принудительная эмуляция плавающей запятой. По умолчанию для выполнения операций с плавающей запятой используется соответствующее аппаратное обеспечение CPU, если таковое имеется в наличии. Если в CPU отсутствует модуль для выполнения операций с плавающей запятой, он эмулируется с помощью программного обеспечения (см. fpemu.so). Эта опция используется для моделирования системы без аппаратного модуля для выполнения операций с плавающей запятой.

Caution: Данная опция не применима на архитектуре armv7.

-h
Запретить останов CPU в idle-потоке. Некоторые CPU и наборы микросхем, в которых реализована соответствующая поддержка, могут блокироваться в случае останова CPU при отсутствии активности. Idle-потоки – особые системные потоки, выполняемые микроядром при полном отсутствии загрузки и других потоков, готовых к выполнению. Необходимость в опции -h обнаружить несложно: в указанном случае компьютер блокируется после загрузки.
-H размер
Задать начальный размер динамически распределяемой памяти для procnto. Если для работы procnto требуется больше памяти, она добавляется динамически, однако установка должным образом рассчитанного значения с помощью этой опции может сократить период загрузки, снизить степень фрагментации физической памяти и сделать поведение системы более детерминированным.

Параметр размер определяет размер предаллоцированной памяти. Минимальный размер - 1 килобайт. К значению может быть добавлен суффикс: "k" или "K" (килобайт), "m" или "M" (мегабайт). Пример:

1m == 1024k == 0x100000

Если число меньше 1024 и суффикс-множитель не предоставлен, считается, что значение указано в килобайтах. Значение по умолчанию равно 64 КБ, если не указана опция -H.
-K опция
(Только для procnto-*-ksz) Опции, определяющие режим функционирования защищенного микроядра:
z
Активирует режим очистки памяти процессов (зануление).

Caution: С помощью параметра UNMAP_NOCLEAN функции munmap_flags() системное приложение с привилегиями суперпользователя может освободить память без очистки. Ни один штатный системный компонент этот механизм не использует, однако, для отдельных устройств периферии это может быть обосновано.

d
Активирует режим двойной очистки памяти процессов (двойное зануление, может использоваться совместно с опцией z).
A
Активирует режим расширенного аудита (в обычном режиме аудит ведется лишь для защищаемых субъектов и объектов).
r
Активирует режим дополненного аудита, т.е. регистрацию событий доступа к объектам, чьим владельцам является пользователь root и действия субъекта root (по умолчанию такие события не регистрируются). Имеет действие, только если не активирован режим расширенного аудита.
c
ce
Активирует проверку хэш-сумм для только для файлов, указанных в списке control_list.bin, сформированном с помощью checkksz. Если сразу за опцией c дополнительно указана опция e, вводится запрет исполнения файла, не прошедшего проверку хэш-сумм.

Caution: Самостоятельно опция e не может быть указана, например: -K e.

C
Ce
Активирует проверку хэш-сумм для всех запускаемых файлов. Если сразу за опцией C дополнительно указана опция e, вводится запрет исполнения файла, не прошедшего проверку хэш-сумм.

Caution: Самостоятельно опция e не может быть указана, например: -K e.

s<размер>
Задать количество элементов в буфере аудита МПВ (по-умолчанию 128, минимум 16, максимум 1048576)

Caution: Пробел между опцией s и её аргументом недопустим.

E
Отключить аудит МПВ, повторное указание опции отключает весь аудит из procnto.

Note: Для опции можно определять перечисление любых доступных параметров, например, передавать опцию микроядру procnto в виде: -K z,A.

-m строка_символов
Управление поведением менеджера памяти. Строка строка_символов представляет собой последовательность символов, включающих (или отключающих, если перед символом указана ~) отдельные аспекты менеджера памяти.

Caution: Если указано более одной опции -m, то procnto игнорирует все, кроме последней.

Используются следующие параметры:
a
~a (значение по умолчанию)
Автоматически устанавливать/отключать для страниц памяти метку "неперемещаемая" после применения к ним команды mem_offset() при дефрагментации физической памяти. Опция действует только в том случае, если разрешена дефрагментация (см. описание опции -md ниже). Для получения дополнительной информации см. Автоматическая маркировка памяти, как неперемещаемой.
b (значение по умолчанию)
~b
Включить/выключить обратную совместимость.
d (значение по умолчанию)
~d
Разрешить/запретить дефрагментацию физической памяти.
i (значение по умолчанию)
~i
Задать для munmap() такое поведение, как если бы было указано значение UNMAP_INIT_REQUIRED (т.е. при следующем выделении физической памяти обязательно выполняется инициализация страницы с заполнением нулями в соответствии с POSIX). Вариант ~i устанавливает логику работы, соответствующую UNMAP_INIT_OPTIONAL (при следующем выделении физической памяти инициализация нулями не обязательна). Для получения дополнительной информации см. Инициализация выделенной памяти.
l
~l (значение по умолчанию)
("эль") Блокировать/не блокировать всю память, как если бы в начале каждой программы был указан вызов mlockall( MCL_CURRENT | MCL_FUTURE ).
L
~L (значение по умолчанию)
Выполнить/не выполнять суперблокирование всей памяти, как если бы в начале каждой программы был указан вызов ThreadCtl( _NTO_CTL_IO, 0 ). Эта опция относится только к блокированию памяти; фактически, программы не получают прав ввода-вывода.

Note: Если указаны обе опции (l и L), то опция L обладает более высоким приоритетом.

n
~n (по умолчанию)
Запретить/разрешить использование "ленивых" методов (англ. LAZY) выделения памяти. Для получения дополнительной информации см. MAP_LAZY.
Опция -mn поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
P
~P (значение по умолчанию)
Активировать полное распределение верхней области памяти для всех процессов. Целесообразно использовать только в целях тестирования. Вариант ~P позволяет гарантировать, что при всех распределениях физической памяти не превышен порог в 4 ГБ.
r
~r (значение по умолчанию)
Использовать/не использовать рандомизацию выделения адресного пространства процессов (англ: Address Space Layout Randomization, ASLR). При использовании опции микроядро размещает некоторые объекты адресного пространства каждого нового процесса процесса (стеки потоков, системную библиотеку) по новому адресу. Это позволяет повысить безопасность программ.
v (значение по умолчанию)
~v
Разрешить/запретить переменный размер страницы. При этом возникает возможность автоматического отображения с различными размерами страницы, что позволяет повысить производительность.
x
~x (значение по умолчанию)
Установить/снять флаг PROT_EXEC для стеков всех порождаемых потоков. Эта опция позволяет gcc генерировать код в стеке, что и имеет место при получении адреса вложенной функции (расширение GCC).

Caution:
Снятие флага PROT_EXEC для стека потока повышает общий уровень безопасности системы, но не позволяет получать адреса вложенных функций. При необходимости, однако, с помощью вызова mprotect(), поток может сам установить флаг PROT_EXEC.

-P приоритет
Установить в качестве нижнего предела диапазона привилегированных приоритетов указанный приоритет; верхний предел диапазона соответствует 255. Эти приоритеты могут использоваться только процессами с эффективным идентификатором пользователя 0 (т.е. root). Непривилегированным процессам (идентификатор пользователя отличен от нуля - не root) доступны приоритеты с 1 по приоритет - 1. Значение по умолчанию равно 64, оно не может быть меньше 10 или больше 255.
-p
Запретить вытеснение ядра. Эта опция не позволяет потокам с более высоким приоритетом вытеснять потоки, выполняющиеся в пространстве ядра. Это удобно при отладке системы с источником частых приоритетных прерываний.
-T таймаут
Задать период в секундах, в течение которого требуется ожидать успешного выполнения вызова close() при завершении процесса. Ранее использовалось жестко запрограммированное значение таймаута, равное 30 секундам. Текущее значение по умолчанию также равно 30 секундам; однако опция -T позволяет задать значение таймаута.

При завершении процесса все открытые соединения закрываются. Это означает, что синтезируется сообщение _IO_CLOSE, которое отправляется менеджеру ресурсов, ответственному за данное соединение.

Поскольку получение ответа от сервера за разумное время не гарантировано (например, может быть отключен узел qnet), вызов TimerTimeout() перед отправкой позволяет обеспечить дальнейшее выполнение процедуры завершения процесса.
-u umask
Использовать маску umask при создании записей в каталоге /proc/идентификатор_процесса/as. Если эта опция не указана, procnto использует маску 022. Можно применить более строгое ограничение доступа, однако при этом может быть нарушена работа программного обеспечения, которое "полагается" на возможность открытия записей в каталоге /proc. Для получения дополнительной информации об этих файлах см. раздел "Файловая система /proc" ниже.
-v[v]...
Вывести расширенную информацию. Чем больше символов v указано, тем более подробная информация выводится. Если указана эта опция, то при завершении процесса сигналом выводятся более информативные сведения.
-E
Указать ядру устанавливать режим исполнения с расширенным уровнем привилегий при запросе IO привилегий через системный вызов ThreadCtl() с командой _NTO_TCTL_IO. Если указана опция -E, то запрос IO привилегий через команду _NTO_TCTL_IO будет фактически исполнен как _NTO_TCTL_IO_PRIV. Данная опция добавлена для случая, если эмуляция доступа к привилегированным регистрам невозможна из-за особенностей реализации и не позволяет загрузить систему. В настоящее время данная опция актуальна только для архитектуры aarch64.
Опция -E поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Поддержка архитектуры aarch64 осуществляется, начиная с ЗОСРВ «Нейтрино» редакции 2021

Описание:

Системный процесс procnto является микроядром ЗОСРВ «Нейтрино», отвечает за управление процессами, памятью и путевыми именами. Он является необходимой частью всех загружаемых образов, созданных с помощью утилиты mkifs. Для получения дополнительной информации см. документ «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01.


Note: Для определения версии ядра системы используется команда uname -a.

Существует несколько версий procnto для различных процессоров и задач:

procnto-400*
Для процессоров PowerPC серии 400.
procnto-800*
Для процессоров PowerPC серии 800.
procnto-booke*
Для процессоров Power Book E.
procnto-600*
Для других процессоров на базе PowerPC, например, серии 600 и 700.
procnto-32*
Для 32-разрядных процессоров MIPS.
procnto-v6*
Для процессоров ARMv6.
procnto-smp-*
Для других многоядерных процессоров.
procnto*-ksz
Защищенные версии микроядра.

Caution: Начиная с редакции 2020 все версии ядра являются защищенными. Версии без префикса являются ссылками на однотипные защищенные ядра.

procnto*-instr*
Инструментальные версии микроядра.


Note: При работе с версией SMP для procnto можно использовать соответствующую опцию -P команды startup-* для установки максимального числа активных CPU.

Управление именованными семафорами осуществляется менеджером procnto (mqueue осуществляет управление именованными семафорами только в том случае, если обнаруживает, что procnto не выполняет эту функцию). Именованные семафоры размещаются в пространстве путевых имен в каталоге /dev/sem. Обработка именованных семафоров обеспечивается клиентскими функциями sem_*().

Файловая система /proc:

Компонент менеджера процессов procnto реализует файловую систему /proc, которая включает в себя следующие элементы:

/proc/идентификатор_процесса
Виртуальные каталоги, позволяющие получать доступ к каждому процессу и потоку, выполняемому в системе, и осуществлять управление ими.
/proc/boot/
Файловая система образа, содержащая загруженный образ.
/proc/dumper
Специальная запись, в которую поступает уведомление при некорректном завершении процесса. Эта запись контролируется утилитой dumper.
/proc/mount/
Точки монтирования пространства путевых имен. Примечание. При просмотре содержимого каталога /proc каталог /proc/mount не выводится, однако содержимое /proc/mount можно просмотреть непосредственно.
/proc/qnetstats
Если используется прозрачная распределенная обработка (Transparent Distributed Processing, TDP), то модуль lsm-qnet.so размещает в каталоге /proc запись qnetstats. При открытии и чтении этого файла код менеджера ресурсов Qnet отвечает путем передачи текущей статистики для Qnet.
/proc/self/
Собственное адресное пространство (для процесса, выполняющего запрос).

Переменные окружения:

PATH
Устанавливает значение конфигурационной строки _CS_PATH, значение по умолчанию /proc/boot.
LD_LIBRARY_PATH
Устанавливает значение конфигурационной строки _CS_LIBPATH, значение по умолчанию /proc/boot.
SHELL
Задаёт оболочку для запуска скриптов без шебанга, значение по умолчанию /bin/sh.
MM_CLEANUP_PRIO
Задаёт приоритет пульса на разрешение коллизий с количеством ссылок на память, открытую через файловый дескриптор, значение по умолчанию 1.

Note: В зависимости от конфигурации приоритетов прикладных потоков и особенностей архитектуры системы, данный приоритет может оказаться недостаточным, что может приводить к накоплению не освобожденной памяти.

Примеры:

Запрет вытеснения кода ядра:

procnto-ksz -p

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино»

Тематические ссылки:

fpemu.so, mkifs, startup-*, uname

mlockall(), mmap(), munmap(), munmap_flags(), sem_close(), sem_getvalue(), sem_open(), sem_post(), sem_trywait(), sem_unlink(), sem_wait(), ThreadCtl()




Предыдущий раздел: Сервисы