procnto, procnto-*

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

Синтаксис:

procnto-*-ksz [-a d|e|s] [-c] [-e n|o] [-F число] [-fe] [-h] [-H размер] [-K z|d|r|A|c|C|e] [-m конфигурация_менеджера_памяти] [-P приоритет] [-p] [-T таймаут] [-u umask] [-v][-E]

Опции:

-ad
Отключить эмуляцию ошибки выравнивания. Менеджер procnto не пытается добиться работы доступа к памяти с ошибочным выравниванием; попытка доступа приводит к получению вызывающим потоком сигнала SIGBUS.
-ae
Включить эмуляцию ошибки выравнивания. Менеджер procnto пытается обеспечить доступ к памяти с ошибкой выравнивания; доступ, однако, осуществляется с низкой скоростью. Успех этого режима не гарантируется: вызывающий поток может все же получить сигнал SIGBUS.
-as
Использовать обработку ошибок выравнивания в зависимости от платформы:
ARM
-ad
MIPS
-ad
PowerPC
-ae
x86
-ae
-c
Не допускать автоматический запуск диспетчером адаптивной декомпозиции потоков, получающих события от обработчиков прерываний в разделе критических приложений.

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

-e n|o
Значение, используемое для EALREADY:

Note: По умолчанию используется значение -eo; в будущих версиях значение по умолчанию будет изменено на -en.

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

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

Для определения текущего значения ограничения можно воспользоваться встроенной командой ksh ulimit или вызовом getrlimit()
-fe
Принудительная эмуляция плавающей запятой. По умолчанию для выполнения операций с плавающей запятой используется соответствующее аппаратное обеспечение ЦП, если таковое имеется в наличии. Если в ЦП отсутствует модуль для выполнения операций с плавающей запятой, он эмулируется с помощью программного обеспечения (см. fpemu.so). Эта опция используется для моделирования системы без аппаратного модуля для выполнения операций с плавающей запятой.
-h
Запретить останов ЦП в неактивном потоке (idle). Некоторые ЦП и наборы микросхем, в которых реализована соответствующая поддержка, могут блокироваться в случае останова ЦП при неактивности. Необходимость в опции -h обнаружить несложно: в указанном случае компьютер блокируется после загрузки.
-H размер
Задать начальный размер динамически распределяемой памяти для procnto. Если для работы procnto требуется больше памяти, она добавляется динамически, однако установка должным образом рассчитанного значения с помощью этой опции может сократить период загрузки и снизить степень фрагментации физической памяти.

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

1m == 1024k == 0x100000

Если число меньше 1024 и суффикс-множитель не предоставлен, считается, что значение указано в килобайтах. Значение по умолчанию равно 64 КБ, если не указана опция -H.
-K z|d|A|r|c[e]|C[e]|s<размер>|E
(Только для procnto-*-ksz) Задает режим функционирования защищенного микроядра: Для опции можно определять перечисление любых доступных параметров, например, передавать опцию микроядру procnto в виде: -K z,A.
-m конфигурация_менеджера_памяти
Управление поведением менеджера памяти. Строка конфигурация_менеджера_памяти представляет собой последовательность символов, включающих (или, если перед ними указан символ ~, отключающих) отдельные аспекты менеджера памяти.

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

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

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

P
Активировать полное распределение верхней области памяти для всех процессов. Целесообразно использовать только в целях тестирования.
~P
Проверить, что для всех случаев распределения не превышен порог 4 ГБ (значение по умолчанию).
v
Разрешить переменный размер страницы (значение по умолчанию). При этом возникает возможность автоматического отображения с различными размерами страницы, что позволяет повысить производительность.
~v
Запретить переменный размер страницы.
x
Установить флаг PROT_EXEC для распределенных в системе потоков (значение по умолчанию). Эта опция позволяет gcc генерировать код в стеке, что и имеет место при получении адреса вложенной функции (расширение GCC).
~x
Снять флаг PROT_EXEC для распределенных в системе стеков, что повышает уровень безопасности, но не позволяет получать адрес вложенных функций. В отдельных случаях этого можно добиться с помощью вызова mprotect(), который устанавливает флаг PROT_EXEC для требуемых стеков.
-P приоритет
Установить в качестве нижнего предела диапазона привилегированных приоритетов указанный приоритет; верхний предел диапазона соответствует 255. Эти приоритеты могут использоваться только процессами с эффективным идентификатором пользователя 0 (т.е. root). Как процессам с идентификатором пользователя, отличным от нуля (не root), так и с нулевым идентификатором (root) доступны приоритеты с 1 по приоритет − 1. Значение по умолчанию для аргумента приоритет равно 64.
-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.

Платформы:

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

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

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

Описание:

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


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

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

procnto-400-ksz
Процессоры PowerPC серии 400.
procnto-800-ksz
Процессоры PowerPC серии 800.
procnto-booke-ksz
Процессоры Power Book E.
procnto-600-smp-ksz
Другие поддерживаемые SMP-процессоры на базе PowerPC, например, серии 600 и 700.
procnto-600-ksz
Другие поддерживаемые процессоры на базе PowerPC, например серии 600 и 700.
procnto-32-ksz
32-разрядные процессоры MIPS.
procnto-v6-ksz
Процессоры ARMv6.
procnto-smp-ksz
Все другие поддерживаемые многоядерные процессоры.
procnto-ksz
Все другие поддерживаемые процессоры.


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

Управление именованными семафорами осуществляется менеджером 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()




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