Мегаобучалка Главная | О нас | Обратная связь


Реализация мониторинга создания, управления и удаления сегментов разделяемой памяти



2019-12-29 143 Обсуждений (0)
Реализация мониторинга создания, управления и удаления сегментов разделяемой памяти 0.00 из 5.00 0 оценок




 

Как уже было отмечено, отследить обращения к сегментам разделяемой памяти можно, перехватив системный вызов sys_ipc, который помимо прочих аргумантов принимает параметр call, определяющий какую из системных функций sys_get, sys_shmat, sys_ctl, sys_dt следует вызвать.

Для перехвата выхова sys_ipc, надо сделать следующее:

· В функции init_module() сохранить указатель на оригинальный (исходный) вызов – orig_sys_ipc – и в таблице системных вызовов sys_call_table настроить соответствующий указатель на новый системный вызов.

· Создать функцию, реализующую новый системный вызов – new_sys_ipc.

· В функции cleanup_module() восстанавить оригинальный системный вызов, используя ранее сохраненный указатель.

В созданном обработчике системного вызова, в зависимости от аргумента call, вызывать функции обработки вызовов sys_get, sys_shmat, sys_ctl, sys_dt, которые сохраняют полученные данные в соответствующие структуры данных, затем отображаются в ядро и выводятся в системном файле /var/log/messages.

Компиляция созданного модуля ядра осуществляется с помощью команды

# make

Несмотря на все свои достоинства, утилита make ничего не знает о проекте, поэтому необходимо создать простой текстовый файл, который будет содержать все необходимые инструкции по сборке. Файл с инструкциями по сборке проекта называется Makefile.

В данном случае, когда модуль состоит из одного файла, Makefile имеет вид, представленный на рис.3

 

   obj-m += monitor.o    all:  make -C /lib/modules/$(shell uname -r)/build M=$(PWD)modules    clean:  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean  

Рис.3. Makefile

 

Загрузка модуля в ядро осуществляется командой

insmod ./<имя модуля>.ko

Выгрузка – командой

rmmod <имя модуля>

 

Проверить, загружен ли модуль в ядро, можно командой

# lsmod,

которая выдаёт список всех загруженных модулей. lsmod в свою очередь обращается за необходимыми сведениями к файлу /proc/modules.

 

Пользовательский интерфейс

 

Пользовательский интерфейс является полностью консольным. Во-первых, потому что при минимуме входных данных нецелесообразно создавать графическое приложение. Во-вторых, концепция ОС Linux предполагает широкое использование возможностей командной строки Shell.

Для того чтобы запустить программу, необходимо выполнить следующую последовательность действий:

· Запустить приложение start.o

· Загрузить модуль ядра

· Запустить тестовую программу (или любое приложение ОС)

· Выгрузить модуль ядра

· Запустить приложение save.o

Тестирующее приложение предоставляет пользователю меню, позволяющее производить выбор действий над сегментом разделяемой памяти (рис.4).

 

  Actions with Shared Memory Segment   w <text> - write text data into Segment r            - read data from Segment d            - delete Segment u            - get UID  

Рис.4. Меню тестирующей программы

 

Результат отображается на экране и сохраняется в файле. Структура файла отображена на рис.5

 

Jun 2 02:33:53 terma kernel: Jun 2 02:33:53 terma kernel: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Jun 2 02:33:53 terma kernel: Monitoring of Shared Memory Segments. Jun 2 02:33:53 terma kernel: Jun 2 02:34:16 terma kernel:  SHMGET is called by UID: 0 Jun 2 02:34:16 terma kernel:  key = 1392733089 Jun 2 02:34:16 terma kernel:  shmID = 2588675 Jun 2 02:34:16 terma kernel:  size = 88 byte Jun 2 02:34:16 terma kernel:  flag = 1968 Jun 2 02:34:16 terma kernel:  [creating of new segment] Jun 2 02:34:16 terma kernel: Jun 2 02:34:16 terma kernel:       SHMAT is called by UID: 0 Jun 2 02:34:16 terma kernel:       shmID = 2588675 Jun 2 02:34:16 terma kernel:       shmaddr = 40018000 Jun 2 02:34:16 terma kernel: Jun 2 02:34:23 terma kernel:  SHMGET is called by UID: 0 Jun 2 02:34:23 terma kernel:  key = 1392733089 Jun 2 02:34:23 terma kernel:  shmID = 2588675 Jun 2 02:34:23 terma kernel:  size = 88 byte Jun 2 02:34:23 terma kernel:  flag = 0 Jun 2 02:34:23 terma kernel:  [using segment as client] Jun 2 02:34:23 terma kernel: Jun 2 02:34:23 terma kernel:       SHMAT is called by UID: 0 Jun 2 02:34:23 terma kernel:       shmID = 2588675 Jun 2 02:34:23 terma kernel:       shmaddr = 40018000 Jun 2 02:34:23 terma kernel: Jun 2 02:34:23 terma kernel:                 SHMCTL is called by UID: 0 Jun 2 02:34:23 terma kernel:                 shmID = 2588675 Jun 2 02:34:23 terma kernel:                 cmd = IPC_STAT (2) Jun 2 02:34:23 terma kernel:                 [getting current information about segment] Jun 2 02:34:23 terma kernel:                 size of segment = 88 byte Jun 2 02:34:23 terma kernel:                 key = 1392733089 Jun 2 02:34:23 terma kernel:                 uid = 0 Jun 2 02:34:23 terma kernel:                 gid = 0 Jun 2 02:34:23 terma kernel:                 cuid = 0 Jun 2 02:34:23 terma kernel:                 cgid = 0 Jun 2 02:34:23 terma kernel:                 mode = 0 Jun 2 02:34:23 terma kernel:                 [successfully] Jun 2 02:34:23 terma kernel: Jun 2 02:34:26 terma kernel:  SHMGET is called by UID: 0 Jun 2 02:34:26 terma kernel:  key = 1392733089 Jun 2 02:34:26 terma kernel:  shmID = 2588675 Jun 2 02:34:26 terma kernel:  size = 88 byte Jun 2 02:34:26 terma kernel:  flag = 0 Jun 2 02:34:26 terma kernel:  [using segment as client] Jun 2 02:34:26 terma kernel: Jun 2 02:34:26 terma kernel:       SHMAT is called by UID: 0 Jun 2 02:34:26 terma kernel:       shmID = 2588675 Jun 2 02:34:26 terma kernel:       shmaddr = 40018000 Jun 2 02:34:26 terma kernel: Jun 2 02:34:26 terma kernel:                 SHMCTL is called by UID: 0 Jun 2 02:34:26 terma kernel:                 shmID = 2588675 Jun 2 02:34:26 terma kernel:                 cmd = IPC_RMID (0) Jun 2 02:34:26 terma kernel:                 [segment marked for deletion] Jun 2 02:34:26 terma kernel:                 [successfully] Jun 2 02:34:26 terma kernel: Jun 2 02:34:26 terma kernel:                          SHMDT is called by UID: 0 Jun 2 02:34:26 terma kernel:                          shmaddr: 40018000 Jun 2 02:34:26 terma kernel:                          [segment was deleted successfully] Jun 2 02:34:26 terma kernel: Jun 2 02:34:55 terma kernel: Jun 2 02:34:55 terma kernel: The end. Jun 2 02:34:55 terma kernel: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Рис.5 Файл Result


Заключение

 

В результате выполнения данной курсовой работы был изучен механизм межпроцессного взаимодействия (IPC) на основе сегментов разделяемой памяти. Реализован мониторинг системных вызовов, обращающихся к объектам Shared Memory, а именно создания, удаления сегментов разделяемой памяти и обращения к ним в ОС Linux. В результате чего были получены данные о сегментах разделяемой памяти, такие как идентификаторы пользователя и группы владельца, запрашиваемый и реальный размеры сегмента, адрес привязки сегмента в адресном пространстве пользователя и другие.


Список используемой литературы

 

1) «Linux Programmer’s Guide», Sven Goldt, Sven van der Meer, Skott Burkett, Matt Welsh

2) «The Linux Kernel Module Programming Guide», А Peter Jay Salzman, Michael Burian, Ori Pomerantz

3) «Перехват системных вызовов», статья из журнала «Системный администратор», В. Мешков

4) «Современные операционные системы» , Э. Таненбаум



2019-12-29 143 Обсуждений (0)
Реализация мониторинга создания, управления и удаления сегментов разделяемой памяти 0.00 из 5.00 0 оценок









Обсуждение в статье: Реализация мониторинга создания, управления и удаления сегментов разделяемой памяти

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (143)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)