Смекни!
smekni.com

Мониторинг системных вызовов создания обращения и удаления сегментов разделяемой памяти в ОС Linux (стр. 4 из 4)

В данном случае, когда модуль состоит из одного файла, 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.

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

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

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

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

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

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

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

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

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

Actions with Shared Memory Segmentw <text> - write text data into Segmentr - read data from Segmentd - delete Segmentu - getUID

Рис.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: 0Jun 2 02:34:16 terma kernel: key = 1392733089Jun 2 02:34:16 terma kernel: shmID = 2588675 Jun 2 02:34:16 terma kernel: size = 88 byteJun 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: 0Jun 2 02:34:16 terma kernel: shmID = 2588675 Jun 2 02:34:16 terma kernel: shmaddr = 40018000Jun 2 02:34:16 terma kernel: Jun 2 02:34:23 terma kernel: SHMGET is called by UID: 0Jun 2 02:34:23 terma kernel: key = 1392733089Jun 2 02:34:23 terma kernel: shmID = 2588675 Jun 2 02:34:23 terma kernel: size = 88 byteJun 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: 0Jun 2 02:34:23 terma kernel: shmID = 2588675 Jun 2 02:34:23 terma kernel: shmaddr = 40018000Jun 2 02:34:23 terma kernel: Jun 2 02:34:23 terma kernel: SHMCTL is called by UID: 0Jun 2 02:34:23 terma kernel: shmID = 2588675Jun 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 byteJun 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: 0Jun 2 02:34:26 terma kernel: key = 1392733089Jun 2 02:34:26 terma kernel: shmID = 2588675 Jun 2 02:34:26 terma kernel: size = 88 byteJun 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: 0Jun 2 02:34:26 terma kernel: shmID = 2588675 Jun 2 02:34:26 terma kernel: shmaddr = 40018000Jun 2 02:34:26 terma kernel: Jun 2 02:34:26 terma kernel: SHMCTL is called by UID: 0Jun 2 02:34:26 terma kernel: shmID = 2588675Jun 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: 0Jun 2 02:34:26 terma kernel: shmaddr: 40018000Jun 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) на основе сегментов разделяемой памяти. Реализован мониторинг системных вызовов, обращающихся к объектам SharedMemory, а именно создания, удаления сегментов разделяемой памяти и обращения к ним в ОС 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) «Современные операционные системы» , Э. Таненбаум

5) «Механизмы межпроцессных взаимодействий в операционной системе Unix» Сергей Кузнецов

6) «Unix. Взаимодействие процессов» Уильям Стивенс