Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #81, СЕНТЯБРЬ 2005 г.

Путешествие к центру ядра

j1m (j1m@list.ru)

Хакер, номер #081, стр. 081-104-2


# command > /proc/self/fd/0

Используя procfs также можно узнать, какое адресное пространство занимает процесс. Такая информация доступна в файле maps, представленном в виде строк. Каждая строка имеет следующий формат: адресное пространство, права, смещение в исполняемом файле, устройство, на котором расположен файл, номер файлового дескриптора, путь до исполняемого файла или библиотеки. Этот файл очень полезен, если нужно узнать, какие библиотеки, откуда и по каким адресам загружает процесс. Популярная программа lsof активно использует эти сведения.

Статистические данные о процессе представлены в файлах stat, statm и status. Первые два имеют "сырой" формат, довольно неплохо воспринимаемый программистами (но никак не обычными пользователями). Зато status предоставляет ту же инфу, но в читабельном виде. Из названий полей легко понять их назначение, поэтому не буду вдаваться в подробности.

[аппаратный уровень]

Посредством /proc о железе можно узнать многое: информацию об имеющихся процессорах, оперативной памяти, PCI-шине и т.д. Все данные предоставляются в реальном времени. Это значит, что подцепив к компу какое-нибудь plug'n'play устройство, ты тут же сможешь с помощью procfs получить о нем полное представление.

Для начала заглянем в файл /proc/cpuinfo, который содержит, как можно догадаться, информацию о центральном процессоре. Из полей, заслуживающих внимания, я бы отметил следующие: vendor_id - строка, идентифицирующая поставщика процессора, model name - модель процессора (например, AMD Sempron(tm) 2600+), cpu MHz - частота работы процессора (точность до тысячной доли), cache size - объем кэш-памяти, flags - поддерживаемые наборы инструкций (такие как MMX и SSE). Так же взгляни на поле bogomips - это псевдотест производительности процессора.

Далее по приоритету идет, конечно же, информация об оперативке, которая легко извлекается из файла /proc/meminfo. Полей тут достаточно много, и их количество зависит от опций, с которыми было собрано ядро (например, highmem). Общее количество оперативной памяти указывается в поле MemTotal. Не удивляйся, если не будет хватать 2-5 байт, они ушли на размещение ядра в памяти и не доступны пользовательским программам. Что такое MemFree я объяснять не буду, а вот поля Buffers и Cached довольно интересны. Первое указывает объем памяти, отведенный под кэш жесткого диска, а второе отражает количество кэшированных с диска файлов. Информация о swap-областях находится в полях SwapTotal и SwapFree. Стандартная команда free получает информацию из этого файла.

Назад на стр. 081-104-1  Содержание  Вперед на стр. 081-104-3