Микроядро и менеджер процессов
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
- Не допускать автоматический запуск диспетчером адаптивной декомпозиции потоков, получающих события от обработчиков прерываний в разделе критических приложений.
 | Опция -c действует только в случае выполнения следующих условий: - используется адаптивная декомпозиция;
- поток, получающий событие от обработчика прерываний, выполняется в разделе, для которого сконфигурирован критический бюджет.
|
- -e n|o
- Значение, используемое для
EALREADY:
- -eo – использовать прежнее значение, совпадающее со значением
EBUSY
. - -en – использовать соответствующее POSIX значение.
 | По умолчанию используется значение -eo; в будущих версиях значение по умолчанию будет изменено на -en. |
- -F число
- Максимальное количество одновременно открытых дескрипторов файлов. Минимально допустимое значение – 100. По умолчанию используется значение 1000, однако оно может быть ограничено системным ресурсом
RLIMIT_NOFILE
.
 | Дескрипторы файлов используются сокетами, именованными семафорами, очередями сообщений, идентификаторами каналов (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) Задает режим функционирования защищенного микроядра:
- -Kz – активирует режим очистки памяти процессов.
- -Kd – активирует режим двойной очистки памяти процессов (используется совместно с опцией -Kz).
- -KA – активирует режим расширенного аудита (в обычном режиме аудит ведется лишь для защищаемых субъектов и объектов).
- -Kr – активирует режим дополненного аудита, т.е. регистрацию событий доступа к объектам, чьим владельцам является пользователь
root
и действия субъекта root
(по умолчанию такие события не регистрируются). Имеет действие, только если не активирован режим расширенного аудита. - -Kc – активирует проверку хэш-сумм для только для файлов, указанных в списке control_list.bin, сформированном с помощью checkksz.
- -KC – активирует проверку хэш-сумм для всех запускаемых файлов.
- -Kce, -KCe – запрет исполнения файла, не прошедшего проверку хэш-сумм.
- -Ks <размер> - задать количество элементов в буфере аудита МПВ (по-умолчанию - 128, минимум - 16, максимум 1048576)
- -KE - отключить аудит МПВ, повторное указание опции отключает весь аудит из procnto.
Для опции можно определять перечисление любых доступных параметров, например, передавать опцию микроядру procnto в виде: -K z,A.
- -m конфигурация_менеджера_памяти
- Управление поведением менеджера памяти. Строка конфигурация_менеджера_памяти представляет собой последовательность символов, включающих (или, если перед ними указан символ
~
, отключающих) отдельные аспекты менеджера памяти.
 | Если указано более одной опции -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
- Не выполнять суперблокирование всей памяти (значение по умолчанию).
 | Если указаны обе опции (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 указано, тем более подробная информация выводится. Если указана эта опция, то при завершении процесса сигналом выводятся более информативные сведения.
ЗОСРВ «Нейтрино»
arm, armv7, aarch64, e2k, mips, ppc, x86
Системный процесс procnto является микроядром ЗОСРВ «Нейтрино», отвечает за управление процессами, памятью и путевыми именами. Он является необходимой частью всех загружаемых образов, созданных с помощью утилиты mkifs. Для получения дополнительной информации см. документ «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01.
 | Для определения версии ядра системы используется команда 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
- Все другие поддерживаемые процессоры.
 | При работе с версией SMP для procnto можно использовать соответствующую опцию -P команды startup-* для установки максимального числа активных ЦП. |
Управление именованными семафорами осуществляется менеджером procnto (mqueue осуществляет управление именованными семафорами только в том случае, если обнаруживает, что procnto не выполняет эту функцию). Именованные семафоры размещаются в пространстве путевых имен в каталоге /dev/sem
. Обработка именованных семафоров обеспечивается клиентскими функциями sem_*().
Компонент менеджера процессов 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.
 | В зависимости от конфигурации приоритетов прикладных потоков и особеннотстей архитектуры системы, данный приоритет может оказаться недостаточным, что может приводить к накоплению не освобожденной памяти. |
Запрет вытеснения кода ядра:
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()
Предыдущий раздел: Сервисы