Руководство характеризует программные интерфейсы ядра Операционной системы
Данный раздел предназначен для разработчиков, использующих ЗОСРВ «Нейтрино». Руководство содержит инструкции по программированию и справочник разработчика.
Менеджер процессов предоставляет виртуальную файловую систему /proc
, позволяющую контролировать процессы и потоки в системе.
![]() | Также менеджер процессов также обслуживает файловую систему /proc/mount, перечисляющую все зарегистрированные точки монтирования в системе. |
![]() | Через каталог /proc/boot доступно содержимое загрузочного образа системы. |
/proc
представляет каждый запущенный в системе процесс в виде каталога, имя которого есть целочисленный идентификатор процесса pid (Process ID). Внутри этого каталога создается логический файл as (от address space), которые представляет всё адресное пространство процесса – /proc/PID/as
. С помощью вызова devctl() можно передавать команды менеджеру процессов для управления потоками, полный перечень поддерживаемых команд представлен ниже. Программный интерфейс работы с данной файловой системой имеет вид:
Функция | Назначение |
---|---|
open() | Установка соединения с /proc/PID/as |
read() | Чтение данных из адресного пространства процесса |
write() | Запись данных в адресное пространство процесса |
stat() | Получение статистической информации |
lseek() | Изменение позиции в адресном пространстве процесса для последующих операций |
devctl() | Управление процессом или его потоками |
close() | Освобождение файлового дескриптора адресного пространства |
Вспомогательные функции вроде readdir() и opendir() также поддерживаются файловой системой /proc
, что позволяет функционировать POSIX утилитам (например, ls).
Рассмотрим ключевые операции подробнее.
Для этого должна использоваться функция open(). Полученный файловый дескриптор позволяет осуществить доступ непосредственно к процессу.
![]() | Открывать следует файл /proc/PID/as , а не каталог /proc/PID . |
При взаимодействии с процессами необходимо обладать следующими привилегиями в системе:
root
. Только один процесс может иметь открытым для записи некоторый файл /proc/PID/as
.
![]() | По умолчанию такое распределение прав может являться проблемой безопасности. Для более строгого разграничения прав следует использовать опцию -u процесса procnto-*. Она позволяет определить umask при создании записей в /proc/PID . Обратной стороной такого решения будет невозможность использования некоторых штатных возможностей отдельных утилит, например, pidin arg и плагина сетевого монитора shelf. |
В зависимости от выполняемых действий, при закрытии файлового дескриптора с помощью close() будут производиться различные действия.
Функции read() и write() позволяют получать и передавать данные из/в адресное пространство другого процесса. С помощью lseek() может определять позицию в памяти процесса.
Виртуальный адрес в памяти целевого процесса интерпретируется как смещение в файловом дескрипторе. Так, например, для чтения из адресного пространства процесса с идентификатором 32113
одной страницы памяти (по умолчанию, 4096 байт) с виртуальным адресом 0x00021000
может использоваться следующий код:
int fd;char buf[4096];fd = open( "/proc/2259/as", O_RDONLY );lseek( fd, 0x00021000, SEEK_SET );read( fd, buf, 4096 );
Безусловно, в реальном коде обязательно следует контролировать возвращаемые функциями значения. Поскольку адресное пространство любого процесса не является непрерывным, операции доступа к нему могут как проходить успешно, так и завершаться с ошибкой. А также может быть возвращено меньшее число информации, чем было запрошено (если запрос пересек границу выделенной в процессе памяти).
Все рассматриваемые далее операции выполняются посредством функции devctl().
Полный перечень команд менеджера процессов (см. функцию devctl()), обслуживаемых виртуальной файловой системой /proc/PID/as
, и соответствующие им типы данных собраны в следующей таблице:
Статья | Описание |
---|---|
Добавление идентификатора партиции памяти процесса | |
Установка или удаление точек остановки, которыми владеет отлаживаемый процесс | |
Определение каналов, которыми владеет отлаживаемый процесс | |
Изменение идентификатора партиции памяти процесса | |
Удаление debug-флагов процесса | |
Установка активного потока отлаживаемого процесса | |
Удаление идентификатора партиции памяти процесса | |
Определение события, которое будет доставлено при достижении процессом некоторой точки интереса | |
Заморозить поток отлаживаемого процесса | |
Получение информации об альтернативных регистрах текущего потока отлаживаемого процесса | |
Определение активных точек остановки, которыми владеет отлаживаемый процесс | |
Получение информации о регистрах FPU (Floating Point) текущего потока отлаживаемого процесса | |
Получение информации о регистрах CPU текущего потока отлаживаемого процесса | |
Получение списка партиций памяти процесса | |
Чтение заданного набора регистров | |
Получение информации об отлаживаемом процессе | |
Определение обработчиков прерываний, которыми владеет процесс | |
Получение информации об ELF-файле отлаживаемого процесса | |
Получение информации о пути, связанном с отлаживаемым процессом | |
Получение сегмент-специфичной информации о смапированной памяти процесса | |
Получение информации о смапированных страницах памяти процесса | |
Получение информации из таблицы страниц памяти MMU для указанного сегмента памяти процесса | |
Возобновление исполнения отлаживаемого процесса, если он был остановлен | |
Изменение состояния альтернативных регистров текущего потока отлаживаемого процесса | |
Установка debug-флага процессу | |
Изменение состояния регистров FPU (Floating Point) текущего потока отлаживаемого процесса | |
Изменение состояния регистров CPU текущего потока отлаживаемого процесса | |
Установка заданного набора регистров | |
Отправка сигнала отлаживаемому процессу | |
Получение состояния текущего потока отлаживаемого процесса | |
Остановить отлаживаемый процесс | |
Считывание системной страницы | |
Разморозить поток отлаживаемого процесса | |
Выполнение ThreadCtl() для произвольного процесса и потока | |
Получение состояния потока отлаживаемого процесса | |
Определение таймеров, которыми владеет отлаживаемый процесс | |
Заблокировать вызывающий процесс до достижения точки интереса отлаживаемым процессом | |
Структура данных характеризует точку остановки отлаживаемого процесса | |
Структура данных характеризует канал отлаживаемого процесса | |
Структура данных характеризует обработчик прерывания отлаживаемого процесса | |
Структура данных характеризует сведения об отлаживаемом процессе | |
Структура данных характеризует параметры возобновления исполнения отлаживаемого процесса | |
Структура данных характеризует состояние потока отлаживаемого процесса | |
Структура данных характеризует таймеры, которыми владеет отлаживаемый процесс | |
Структура данных характеризует информацию о сегментах ELF-файла отлаживаемого процесса | |
Структура данных характеризует информацию из таблицы страниц памяти MMU для указанного сегмента памяти процесса | |
Структура данных характеризует набора регистров | |
Структура данных характеризует отправляемый сигнал отлаживаемому процессу | |
Структура данных характеризует параметры вызова ThreadCtl() |
Для получения технической поддержки посетите раздел Поддержка сайта ( www.kpda.ru ). Вы обнаружите перечень предлагаемых способов оказания технической поддержки, включая публичный форум, форму обратной связи и контактные данные.
© 2005-2024, ООО "СВД ВС".
Предыдущий раздел: Руководство разработчика