Курсовая работа: Мониторинг виртуальной памяти в ОС Linux
Таким образом, можно сделать следующие выводы:
1. При выделении памяти ядро не выделяет сразу все физические страницы (если в mmap() не был передан флаг MAP POPULATE или страницы процесса не были заблокированы в физической памяти вызовами mlock[all]() – в этих случаях страницы всего региона подгружаются сразу)
2. Для выделения небольших объемов памяти библиотека libc расширяет сегмент данных программы вызовом brk() , для запросов, бОльших 128К – использует mmap() .
5. Overcommit является довольно мощным средством, позволяющим выделять гораздо больше виртуальной памяти, чем доступно на самом деле, при условии использования лишь доступного ее объема (данная возможность может быть полезна для различных научно-инженерных приоложений). Однако, в случае, если реально затребованная память превысит суммарноый объем доступной и файла подкачки, возникнет критическая ситуация нехватки памяти. Заключение
В рамках данной работы были исследованы вопросы, связанные с разработкой драйверов под OS Linux, работой ядра Linux с виртуальной памятью и перехватом системных вызовов.
Драйвер может быть загружен и выгружен без перезагрузки системы. Он не влияет на работу других устройств и всей системы в целом, и не приводит к ощутимым задержкам в работе.
Было произведено исследование механизма выделения памяти в ядре Linux и библиотеке libс , исследована технология overcommit.
Возможность отследить операции процессов в памятью зачастую может быть весьма полезной при отладке программ, мониторинге или настройке системы (например, для подбора оптимальных параметров сервера, расходующего большой объем памяти).
Список использованной литературы
1. Jonathan Corbet. Linux Device Drivers, 3rd Edition.
2. Роберт Лав. Разработка ядра Linux, 2-е издание.
3. Peter Salzman. The Linux Kernel Module Programming Guide, 3rd Edition.
4. Клаудия Родригес. Азбука ядра Linux.
5. Исходники ядра и документация к ним.
Приложения
Код драйвера
mmon.c
/*
* Main module and entry point of memmon.
*/
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include «common.h»
#include «watch-pids.h»
#include «mm-fault.h»
#include «events.h»
#include «syscalls.h»
/*** Internal data ***/
/*
* procfs directory entry
*/