Вы на НеОфициальном сайте факультета ЭиП

На нашем портале ежедневно выкладываются материалы способные помочь студентам. Курсовые, шпаргалки, ответы и еще куча всего что может понадобиться в учебе!
Главная Контакты Карта сайта
 
Где мы?
» » » Операционные системы Файловая система /proc

Реклама


Операционные системы Файловая система /proc

Просмотров: 2246 Автор: admin
Операционные системы Файловая система /proc
Лабораторная 4.2
Файловая система /proc
Цель работы: Дать обучающимся понятия о файловой системе /proc
Методический материал.
Дескрипторы файлов процесса.
Элемент fd файловой системы /proc — это подкаталог, в котором содержатьсязаписи обо всех файлах, открытых процессом. Каждая запись представляет собойсимволическую ссылку на файл или устройство (устройство в Linux это тоже файл).Через эти ссылки можно осуществлять чтение и запись данных. Имена ссылоксоответствуют номерам дескрипторов.
Рассмотрим небольшой трюк. Откройте новое терминальное окно и найдите спомощью команды ps идентификатор процесса, соответствующий интерпретаторукоманд:
$ ps PID TTY TIME CMD 8490 pts/0 00:00:00 bash 8549 pts/0 00:00:00 psВ данном случае процесс идентификатора команд (bash) имеет идентификатор8490. Теперь откройте второе окно и посмотрите содержимое подкаталога fd этогопроцесса:
$ls -l /proc/8490/fdитого 0lrwx------ 1 user user 64 2007-10-23 21:03 0 -> /dev/pts/0lrwx------ 1 user user 64 2007-10-23 21:03 1 -> /dev/pts/0lrwx------ 1 user user 64 2007-10-23 21:00 2 -> /dev/pts/0(В выводе могут присутствовать дополнительные строки, соответствующие другимоткрытым файлам.)
Дескрипторы 0,1 и 2 закрепляются за стандартными потоками ввода, вывода иошибок соответственно.
Таким образом, при записи в файл /proc/8490/fd/1 данные будут направляться вустройство, связанное с потоком stdout интерпретатора команд, т.е на псевдотерминалпервого окна. Попробуем ввести следующую команду во втором окне: $echo "Hello" > /proc/8490/fd/1Сообщение Hello появиться в первом окне. В подкаталоге fd могут присутствоватьссылки и на другие файлы.
В следующем листинге представлена программа, которая открывает указанный встроке файл и уходит в бесконечный цикл.
Листинг №1:
#include<fcntl.h>#include<stdio.h>#include<sys/stat.h>#include<sys/types.h>#include<unistd.h>int main (int argc, char* argv[]){ const char* const filename = argv[1]; int fd = open (filename, O_RDONLY); printf (" in proccess %d, file descriptor %d is open to %s\n",(int) getpid (), (int) fd, filename); while (1); return 0;}Скомпилируйте и запустите данную программу в терминальном окне: $ ./open-and-spin /etc/fstab in proccess 6887, file descriptor 3 is open to /etc/fstabТеперь откройте другое окно и проверьте подкаталог fd процесса с указанным номером:
$ls -l /proc/6887/fdитого 0lrwx------ 1 user user 64 2007-10-23 22:06 0 -> /dev/pts/0lrwx------ 1 user user 64 2007-10-23 22:06 1 -> /dev/pts/0lrwx------ 1 user user 64 2007-10-23 22:06 2 -> /dev/pts/0lr-x------ 1 user user 64 2007-10-23 22:06 3 -> /etc/fstabКак видите, появилась ссылка 3, которая соответствует дескриптору файла /etc/fstab,открытого программой.
Программа может открывать дескрипторы не только файлов, но также сокетов иканалов. В таких случаях адресатом символической ссылки будет строка «socket» или«pipe», а не имя файла либо устройства.
Статистика использования процессом памяти.
Файл stam содержит список из семи чисел, разделенных пробелами. Каждое число —это счетчик числа станиц памяти, используемых процессом и попадающих вопределенную категорию. Соответствующие категории перечислены ниже (в порядкеследования счетчиков):
– общий размер процесса;
– размер резидентной части процесса;
– память, совместно используемая с другими процессами (например, загруженныебиблиотеки или нетронутые страницы, созданные в режиме «копирования призаписи»);
– текстовый размер процесса, т.е. размер сегмента кода исполняемого файла;
– размер совместно используемых библиотек, загруженных процессом;
– память, выделенная под стек процесса;
– число недействительных страниц, т.е. страниц памяти, которые былимодифицированы программой.
Статистика процесса.
Файл status содержит всевозможную информацию о процессе отформатированную впонятном для пользователя виде. Сюда входит идентификатор процесса, идентификаторродительского процесса, реальный и эффективный идентификаторы пользователя игруппы, статистика использования памяти, а также битовые маски, определяющие,,какие сигналы перехватываются, игнорируются или блокируются.
Аппаратная информация.
В файловой системе /proc есть ряд других элементов, позволяющих получить доступ кинформации о системных аппаратных средствах. Обычно это интересно лишь системнымадминистраторам, но иногда такая информация используется и в приложениях. Нижеописано несколько наиболее полезных файлов.
Центральный процессор.
Как уже говорилось, файл /proc/cpuinfo содержит информацию о центральномпроцессоре (или процессорах). В поле ''processor'' перечислены номера процессоров.
В случае однопроцессорной системы, там будет стоять 0. Благодаря полям ''vendor id'',''cpu_family'', ''model'' и ''stepping'' можно точно узнать модель и модификациюпроцессора. В поле ''flags'' показано, какие флаги процессора установлены, даннаяинформация определяет какие функции процессора доступны.
Большая часть информации, содержащейся в файле /proc/cpuifno, извлекается спомощью ассемблерной инструкции cpuid процессоров семейства x86. С помощью этойнизкоуровневой инструкции программы могут получать сведения о центральномпроцессоре. Поле ''bogomips'', характерен для Linux. Это показатель скорости работыпроцессора в поглощающем цикле (когда программы обращаются к процессору, но не выполняют никаких вычислений). Он не отражает производительность процессора.
Аппаратные устройства.
В файле /proc/devices содержится список старших номеров символьных и блочныхустройств, имеющихся в системе. Данный список можно посмотреть командой:
cat /proc/devices
Шина PCI.
В файле /proc/bus/pci/devices перечислены устройства подключенные к шине (илишинам) PCI. Также такую информацию можно получить командой lspci.
Шина USB.
В каталоге /proc/bus/usb содержится информация о подключенных usb-устройствах.
Также информацию можно получить командой lsusb.
Последовательные порты.
Файл /proc/tty/driver/serial содержит конфигурацию и статистическую информацию опоследовательных портах. Эти порты нумеруются с нуля. Работать с настройками портапомогает также команда setserial, но файл /proc/tty/driver/serial , помимо прочего,включает дополнительные данные о счетчиках прерываний для каждого порта.
Функции ACPI.
В каталоге /proc/acpi содержится информация о задействованных функциях ACPI иподдержкой отдельными устройствами таких функций и статистическая информация.Например, если установлены датчики, то можно получить температуру процессора,командой:
cat /proc/acpi/thermal_zone/THRM/temperature.
Информация о ядре.
В файле /proc/version находится строка, описывающая номер версии и модификацииядра. В нее также включены сведения о создании ядра: имя пользователя,скомпилировавшего ядро, адрес компьютера, на котором это было сделано, датакомпиляции и версия компилятора. Проверить содержимое можно командой:
cat /proc/version.
Имя компьютера и домена.
В файлах /proc/sys/kernel/hostname и /proc/sys/kernel/domainname содержитсяинформация об имени компьютера и имени домена соответственно. Эту же информациювозвращает функция uname().
Использование памяти.
Файл /proc/meminfo хранит сведения об использовании системной памяти. Указываютсяданные как о физической памяти, так и об области подкачки.
Дисководы, точки монтирования и файловые системы.
В файловой системе /proc находится также информация о присутствующих в системеустройствах и смонтированных на них файловых системах.Файл /proc/filesystems хранит информацию об известных ядру типах файловых систем,которые либо могут быть статически подключены к ядру, либо присутствуют внастоящий момент.
В каталоге /proc/ide и /proc/scsi— храниться информация об подключенных дисках и IDE-
контроллеров и SCSI-контроллерах системы.
При необходимости можно посмотреть информацию, например об типе и модели жесткого диска:
cat /proc/ide/ide0/hda/media и cat /proc/ide/ide0/hda/model
, а также другую информацию.
В файле /proc/partitions содержаться сведения о разделах распознанных дисковыхустройств. Для каждого раздела указываются старший и младший номера, числооднобайтовых блоков, а также имя устройства, соответствующего этому разделу.
Файл /proc/sys/dev/cdrom/info — хранит различные данные о возможностях дисководовCD-ROM/DVD-ROM.
В файле /proc/mounts находится перечень смонтируемых файловых систем. Каждаястрочка соответствует одному дескриптору монтирования и содержит имя устройства,имя точки монтирования и прочие сведения. Также информация храниться в обычномфайле /etc/mtab, который автоматически обновляется командой mount.
В файле /proc/locks перечислены все блокировки файлов, установленные в настоящиймомент в системе. Каждая строка соответствует одной блокировке.
Системная статистика.
Два элемента файловой системы /proc содержат полезную статистическую информацию.В файле /proc/loadavg находятся данные о загруженности системы. Первые трипоказателя — это число активных задач (выполняющихся процессов) за последние 1, 5 и15 минут. Следующая строка отображает число выполняемых задач (процессов,запланированных к выполнению, а не заблокированных в каком-нибудь системномвызове) в данный момент времени и общее число процессов в системе. Последняя строкасодержит идентификатор самого недавнего процесса.
В файле /proc/uptime отражено, сколько времени прошло с момента загрузки системы исколько времени с тех пор система пребывал в неактивном состоянии. Оба показателявыражены в секундах и представлены числами с плавающей запятой. Программа вследующем листинге показывает общее время и время простоя в понятном формате.
Листинг № 2
/* print-uptime.c Отображение времени работы и времени простоя системы */ /
#include <stdio.h> #
/* Запись результата в стандартный выходной поток. Параметр TIME -- это
количество времени, а параметр LABEL -- короткая описательная строка. */ к
void print_time (char* label, long time)
{
/* Константы преобразования. */ /
const long minute = 60;
const long hour = minute * 60; ;
const long day = hour * 24; ;
/* Вывод результата */ /
printf ("%s: %ld days, %ld:%02ld:%02ld\n", label, time / day,
(time % day) / hour, (time % hour) / minute, time % minute);
} }
int main ()
{
FILE* fp;
double uptime, idle_time; /* Чтение показателей времени из файла /proc/uptime. */ /
fp = fopen ("/proc/uptime", "r");
fscanf (fp, "%lf %lf\n", &uptime, &idle_time);
fclose (fp); f
/* Форматирование и вывод. *//
print_time ("uptime ", (long) uptime);
print_time ("idle time", (long) idle_time);
return 0;
}
Общее время работы системы отображает также команда uptime и функция sysinfo() .
Сеть и сетевая статистика.
Информация по сетевой статистики представлена в каталогах /proc/net и /proc/sys/net/
Например файл /proc/net/arp содержит информацию об ip-адресах и mac-адресах сетевыхинтерфейсах, файл /proc/net/sockstat — информацию об открытых сокетах,файлы /proc/net/tcp и /proc/net/udp — информацию об открытых tcp и udp соединениях.
В файле /proc/net/dev — информация о количестве пакетов прошедших черезинтерфейсы. Основная информация о настройках сетевых параметров можно найти вкаталоге /proc/sys/net/ipv4, к примеру разрешены-ли транзитные пакеты можно узнать изфайла /proc/sys/net/ipv4/ip_forward, если его содержимое это 0 — то запрещены, если 1 —разрешены.
Выводы
Файловая система /proc содержит достаточно информации для получения любойнеобходимой системной информации и статистики. Все возможности рассмотреннымипримерами не ограничиваются.Помимо чтения информации мы можем ее и изменять если система это позволяет, такнаиболее частым примером такого изменения служит разрешение транзитных сетевыхпакетов, делается это командой:
echo ''1'' > /proc/sys/net/ipv4/ip_forward .
Таким образом системные администраторы иногда настраивают сетевые шлюзы.
(Надо сказать что данная информация будет сохранена до первой перезагрузки,
поэтому правильней в записывать такое разрешение в конфигурационныйфайл /etc/sysctl.conf)
Порядок выполнения работы.
1. Прочитать методический материал.
2. Протестировать команды и посмотреть содержимое описанных файлов.
3. Скомпилировать и протестировать программы представленные в листингах.

Информация

Комментировать статьи на нашем сайте возможно только в течении 60 дней со дня публикации.

Популярные новости

Статистика сайта



Rambler's Top100



 
Copyright © НеОфициальный сайт факультета ЭиП