Специальные файловые системы Linux

Развитие идеи файла, как единицы обеспечения доступа к информации, привело к тому, что абстракцию файловой системы перенесли и на другие сущности, доступ к которым стал организовываться в виде иерархии файлов.

Например, информацию о процессах, нитях и прочих сущностях ядра операционной системы и используемых ими ресурсах предоставляет программам в виде файлов псевдофайловая система proc.

Таким же образом, информацию об аппаратных устройствах, обнаруженных ядром операционной системы на шинах PCI, USB, SCSI и пр., предоставляет псевдофайловая система sysfs.

Различные утилиты, пользующиеся ядерной информацией, например показывающие нагрузку на операционную систему uptime или списки процессов и загруженных модулей (драйверов) ядра операционной системы — ps и lsmod, пользуются псевдофайловой системой proc, в чем позволяет убедиться трассировка системных вызовов open.

Псевдофайловая система proc

john@ubuntu:~$ strace -fe open uptime

. . .                          . . .                                 . . .

open( «/proc/version», O_RDONLY)                  = 3

. . .                          . . .                                 . . .
open(«/proc/uptime», 0_RDONLY)                     = 3

. . .                          . . .                                 . . .

open( «/proc/loadavg», 0_RDONLY)

. . .                          . . .                                 . . .
15:42:32   up 12   days, 6:27,   7 users,    load  average:   0.48, 0.33, 0.32
john@ubuntu:~$ cat /proc/uptime

1056774.23 1667210.55

john@ubuntu:~$ cat /proc/loadavg

0.48 0.33 0.32 1/623 14277

Аналогично, утилиты, показывающие список устройств на шинах PCI, USB и SCSI — lspci, lsusb и lsscsi, пользуются псевдофайловой системой sysfs.

Псевдофайловая система sysfs

john@ubuntu:~$ strace -fe open lspci -nn

. . .                               . . .                             . . .

open(«/sys/bus/pci/devices/0000:00:02.0/resource», 0_RDONLY) = 4 open(«/sys/bus/pci/devices/0000:00:02.0/irq, O_RDONLY) = 4 open(«/sys/bus/pcl/devices/0000:00:02.0/vendor», 0_RDONLY) = 4 open(«/sys/bus/pci/devices/0000:00:02.0/device», 0_RDONLY) = 4 open(«/sys/bus/pci/devices/0000:00:02.0/class», O_RDONLY) = 4

. . .                               . . .                             . . .

00:02.0 VGA compatible controller [0300 **]: Intel Corporation 2nd Generation Core Processor

Family Integrated Graphics Controller [8086 :0116 ] (rev 09)

john@ubuntu:~$ cat /sys/bus/pci/devices/0000:00:02.0/vendor

0x8086

john@ubuntu:~$ cat /sys/bus/pci/devices/0000:60:02.6/device

0x0116

john@ubuntu:~$ cat /sys/bus/pci/devices/0000:00:02.0/class

0X030000

 

 

Добавить комментарий