Руководство характеризует программные интерфейсы ядра Операционной системы
Данный раздел предназначен для разработчиков, использующих ЗОСРВ «Нейтрино». Руководство содержит инструкции по программированию и справочник разработчика.
Менеджер процессов предоставляет виртуальную файловую систему /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, ООО "СВД ВС".
Предыдущий раздел: Руководство разработчика