Курсовая работа: Мониторинг виртуальной памяти в ОС Linux
Ядро Linux написано на языке С с небольшим количеством кода на ассемблере, и его система сборки, вообще говоря, поддерживает только данные языки для использования в модулях. Выбор из них был сделан в пользу С по причине значительно большей структурированности написанного на нем кода. Однако, небольшой объем кода драйвера пришлось написать на ассемблере, в силу чего он не является платформенно-независмым и привязан к архитектуре x86.
Для сборки драйвера используется сборочная система ядра make/Kbuild и компилятор С из gcc (GNU Compiler Collection). Особенностью ядра Linux является отсутствие совместимости на бинарном уровне, совместимость присутствует лишь на уровне исходных текстов, вследствие чего все модули и само ядро должны быть собраны одной и той же версией одного и того же компилятора. Само ядро изначально написано для компиляции посредством gcc – основного компилятора С в GNU‑системах, поэтому он же должен использоваться и при компиляции модулей для него.
3.2 Компиляция драйвера
Сначала необходимо применить исправление к ядру и перекомпилировать его. Это делается командами:
# cd /usr/src/linux
# patch– p0 < memmon.patch
# make
# make install INSTALL_PATH=/boot modules_install
# lilo
# reboot
После этого возможна сама сборка драйвера. Для этого из папки с его исходниками надо выполнить команду $ make.
3.3 Работа с драйвером
Для загрузки драйвера необходимо выполнить команду
# insmodprocmon.ko
Можно указать размер буфера событий:
# insmodprocmon.kobuflen=65536
Добавить процесс с PID = 3000 к отслеживаемым:
$ echo 3000 > /proc/memmon/watch-pids
Удалить его:
$ echo -3000 > /proc/memmon/watch-pids
Добавить процесс с именем test:
$ echo `pgrep test` > /proc/memmon/watch-pids
Удалить все процессы:
$ echo 0 > /proc/memmon/watch-pids
Просмотреть буфер событий:
$ cat /proc/memmon/events
Выгрузка драйвера делается командой
# rmmodprocmon.ko
(возможно, только если файлы драйвера никем не открыты)
4. Экспериментальный раздел
С целью изучения особенностей выделения памяти в Linux был проведен ряд экспериментов с выделением памяти, ее чтением / записью и освобождением.
1) Запрашиваем небольшое количество (3–4) страниц памяти, обращаемся ко всей памяти в этом диапазоне, затем освобождаем ее.