procnto*

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

Синтаксис:

procnto* [-a d|e|s] [-c] [-e n|o] [-F число] [-fe]

[-h] [-H размер] [-mконфигурация_менеджера_памяти]

[-P приоритет] [-p] [-T таймаут] [-u umask] [-v]

Поддерживаемые платформы:

Neutrino

Опции:

-ad

Отключить эмуляцию ошибки выравнивания. Менеджер procnto не пытается добиться работы доступа к памяти с ошибочным выравниванием; попытка доступа приводит к получению вызывающим потоком сигнала SIGBUS.

-ae

Включить эмуляцию ошибки выравнивания. Менеджер procnto пытается обеспечить доступ к памяти с ошибкой выравнивания; доступ, однако, осуществляется с низкой скоростью. Успех этого режима не гарантируется: вызывающий поток может все же получить сигнал SIGBUS.

-as

Использовать обработку ошибок выравнивания в зависимости от платформы:

ARM

-ad

MIPS

-ad

PowerPC

-ae

SH4

-ad

x86

-ae

-c

(QNX Neutrino Core OS 6.3.2 или выше) Не допускать автоматический запуск диспетчером адаптивной декомпозиции потоков, получающих события от обработчиков прерываний, в разделе критических приложений.

Примечание. Опция -c действует только в случае выполнения следующих условий:
Для получения дополнительной информации см. «Руководства системного программиста (администратора)» КПДА.10964-01 32, раздел по адаптивной декомпозиции.

-e n|o

(QNX Neutrino 6.4.0 или выше) Значение, используемое для EALREADY:
Примечание. По умолчанию используется значение -eo; в будущих версиях значение по умолчанию будет изменено на -en.

Для получения дополнительной информации см. раздел "Changes to EALREADY" ("Изменения к EALREADY") в описании errno в руководстве по библиотекам Neutrino Library Reference.

-F число

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

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

Для определения текущего значения ограничения можно воспользоваться встроенной командой ksh ulimit или вызовом getrlimit() (см. руководство по библиотекам Library Reference).

-fe

Принудительная эмуляция плавающей запятой. По умолчанию в для выполнения операций с плавающей запятой используется соответствующее аппаратное обеспечение ЦП, если таковое имеется в наличии. Если в ЦП отсутствует модуль для выполнения операций с плавающей запятой, он эмулируется с помощью программного обеспечения (см. fpemu.so). Эта опция используется для моделирования системы без аппаратного модуля для выполнения операций с плавающей запятой.

-h

Запретить останов ЦП в неактивном потоке (idle). Некоторые ЦП и наборы микросхем, в которых реализована соответствующая поддержка, могут блокироваться в случае останова ЦП при неактивности. Необходимость в опции -h обнаружить несложно: в указанном случае компьютер блокируется после загрузки.

-H размер

Задать начальный размер динамически распределяемой памяти для procnto. Если для работы procnto требуется больше памяти, она добавляется динамически, однако установка должным образом рассчитанного значения с помощью этой опции может сократить период загрузки и снизить степень фрагментации физической памяти.

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

1m == 1024k == 0x100000

Если число меньше 1024 и суффикс-множитель не предоставлен, считается, что значение указано в килобайтах. Значение по умолчанию равно 64 КБ, если не указана опция -H.

-m конфигурация_менеджера_памяти

(QNX Neutrino Core OS 6.3.2 или выше) Управление поведением менеджера памяти. Строка конфигурация_менеджера_памяти представляет собой последовательность символов, включающих (или, если перед ними указан символ ~, отключающих) отдельные аспекты менеджера памяти.

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

Используются следующие кофигурационные опции:

a

(QNX Neutrino 6.4.1 или выше) Автоматически устанавливать для страниц памяти метку "неперемещаемая" после применения к ним команды mem_offset() при дефрагментации физической памяти. Опция действует только в том случае, если разрешена дефрагментация (см. описание опции -md ниже). Для получения дополнительной информации см. раздел "Automatically marking memory as unmovable" ("Автоматическая установка для страниц памяти метки "неперемещаемая"") в главе "Process Manager" ("Менеджер процессов") руководства по системной архитектуре.

~a

(QNX Neutrino 6.4.1 или выше) Отключить автоматическую установку для страниц памяти метки "неперемещаемая" (значение по умолчанию).

b

Включить обратную совместимость (значение по умолчанию).

Примечание. Обратитесь к описанию версии (relese notes) для получения информации о текущем поведении.

~b

Выключить обратную совместимость.

d

(QNX 6.4.1 Neutrino или выше) Разрешить дефрагментацию физической памяти (значение по умолчанию). Для получения дополнительной информации см. раздел "Defragmenting physical memory" ("Дефрагментация физической памяти") в главе "Process Manager" ("Менеджер процессов") руководства по системной архитектуре.

~d

(QNX Neutrino 6.4.1 или выше) Запретить дефрагментацию физической памяти.

i

Задать для munmap() такое поведение, как если бы было указано значение UNMAP_INIT_REQUIRED (т.е. при следующем выделении физической памяти обязательно выполняется инициализация страницы с заполнением нулями в соответствии с POSIX). Используется по умолчанию.

~i

Задать для munmap() такое поведение, как если бы было указано значение UNMAP_INIT_OPTIONAL (т.е. при следующем выделении физической памяти инициализация страницы с заполнением нулями не обязательна). См. раздел "Initializing allocated memory" ("Инициализация выделяемой памяти") в главе "Interprocess Communication (IPC)" ("Взаимодействие процессов") руководства по системной архитектуре.

l ("эль")

Блокировать всю память, как если бы в начале каждой программы был указан вызов mlockall(MCL_CURRENT|MCL_FUTURE). Для получения дополнительной информации см. описание mlockall() в руководстве по библиотекам Neutrino Library Reference.

~l

Не блокировать всю память (значение по умолчанию).

L

Выполнить суперблокирование всей памяти, как если бы в начале каждой программы был указан вызов ThreadCtl(_NTO_CTL_IO,0). Эта опция относится только к блокированию памяти; фактически, программы не получают прав ввода-вывода.

~L


Не выполнять суперблокирование всей памяти (значение по умолчанию).

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

P

Активировать полное распределение верхней области памяти для всех процессов. Целесообразно использовать только в целях тестирования.

~P

Проверить, что для всех случаев распределения не превышен порог 4 ГБ (значение по умолчанию).

v

Разрешить переменный размер страницы (значение по умолчанию). При этом возникает возможность автоматического отображения с различными размерами страницы, что позволяет повысить производительность.

~v

Запретить переменный размер страницы.

x

(QNX Neutrino 6.4.0 или выше) Установить флаг PROT_EXEC для распределенных в системе потоков (значение по умолчанию). Эта опция позволяет gcc генерировать код в стеке, что и имеет место при получении адреса вложенной функции (расширение GCC).

~x

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

-P приоритет

Установить в качестве нижнего предела диапазона привилегированных приоритетов указанный приоритет; верхний предел диапазона соответствует 255. Эти приоритеты могут использоваться только процессами с эффективным идентификатором пользователя 0 (т.е. root). Как процессам с идентификатором пользователя, отличным от нуля (не root), так и с нулевым идентификатором (root) доступны приоритеты с 1 по приоритет − 1. Значение по умолчанию для аргумента приоритет равно 64.

-p

Запретить вытеснение ядра. Эта опция не позволяет потокам с более высоким приоритетом вытеснять потоки, выполняющиеся в пространстве ядра. Это удобно при отладке системы с источником частых приоритетных прерываний.

-T таймаут

(QNX Neutrino 6.4.0 или выше) Задать период в секундах, в течение которого требуется ожидать успешного выполнения вызова close() при завершении процесса. Ранее использовалось жестко запрограммированное значение таймаута, равное 30 секундам. Текущее значение по умолчанию также равно 30 секундам; однако опция -T таймаут позволяет задать это значение.

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

Поскольку получение ответа от сервера за разумное время не гарантировано (например, может быть отключен узел qnet), вызов TimerTimeout() перед отправкой позволяет обеспечить дальнейшее выполнение процесса завершения.

-u umask

(QNX Neutrino 6.4.0 или выше) Использовать маску umask при создании записей в каталоге /proc/идентификатор_процесса/as. Если эта опция не указана, procnto использует маску 022. Можно применить более строгое ограничение доступа, однако при этом может быть нарушена работа программного обеспечения, которое "полагается" на возможность открытия записей в каталоге /proc. Для получения дополнительной информации об этих файлах см. раздел "Файловая система /proc" ниже.

-v[v]...

Вывести расширенную информацию. Чем больше символов v указано, тем более подробная информация выводится. Если указана эта опция, то при завершении процесса сигналом выводятся более информативные сведения.

Описание:

Системный процесс procnto является микроядром QNX Neutrino, отвечает за управление процессами, памятью и путевыми именами. Он является необходимой частью всех загружаемых образов, созданных с помощью утилиты mkifs. Для получения дополнительной информации см. руководство по системной архитектуре.

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

Существуют различные версии procnto для различных процессоров (для получения более конкретной информации см. пакет поддержки плат (Board Support Package)):

procnto-400

Процессоры PowerPC серии 400.

procnto-800

Процессоры PowerPC серии 800.

procnto-booke

Процессоры Power Book E.

procnto-600-smp

Другие поддерживаемые SMP-процессоры на базе PowerPC, например, серии 600 и 700.

procnto-600

Другие поддерживаемые процессоры на базе PowerPC, например серии 600 и 700.

procnto-32

32-разрядные процессоры MIPS.

procnto-v6

Процессоры ARMv6.

procnto-smp

Все другие поддерживаемые многоядерные процессоры.

procnto

Все другие поддерживаемые процессоры.

Также существуют версии с возможностью трассировки для каждого из перечисленных выше вариантов (например, procnto-600-smp-instr), которые используются для анализа системы. В резидентных системах Neutrino по умолчанию используется микроядро procnto-instr.

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

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

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

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

/proc/идентификатор_процесса

Виртуальные каталоги, позволяющие получать доступ к каждому процессу и потоку, выполняемому в системе, и осуществлять управление ими. Для получения дополнительной информации см. раздел "Controlling processes via the /proc filesystem" ("Управление процессами с помощью файловой системы /proc") главы "Processes" ("Процессы") в руководстве разработчика QNX Neutrino Programmer's Guide.

/proc/boot/

Файловая система образа, содержащая загруженный образ. Для получения дополнительной информации см. раздел Making an OS Image ("Создание образа ОС") в руководстве по созданию встраиваемых систем (Building Embedded Systems).

/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/


Собственное адресное пространство (для процесса, выполняющего запрос).

Примеры:

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

procnto -p