Le répertoire /proc

Parmi les différents répertoires qui constitues l'arborescence d'un système Linux typique, l'un d'entre eux permet d'obtenir des informations sur le système. Ce répertoire /proc est un pseudo système de fichiers qui contient des informations sous une forme beaucoup plus lisible que /dev/kmem. /proc contient des fichiers comportant des informations classées par type. Un sous-répertoire nommé d'après le numéro ID du process est créé chaque fois qu'un programme est lancé. Ce répertoire contient toutes les informations utiles sur le processus en question.

Les fichiers dans /proc

La syntaxe des fichiers est dépendante de l'architecture sur laquelle tourne le noyau. Les exemples donnés ici se rapportent à une distribution Debian fonctionnant sur un Athlon 900.

cpuinfo : Ce fichier contient une collection d'informations sur le ou les processeurs de la machine.

Exemple :

processor         : 0
vendor_id         : AuthenticAMD
cpu family        : 6
model             : 4
model name        : AMD Athlon(tm) Processor
stepping          : 2
cpu MHz           : 908.114
cache size        : 256 KB
fdiv_bug          : no
hlt_bug           : no
f00f_bug          : no
coma_bug          : no
fpu               : yes
fpu_exception     : yes
cpuid level       : 1
wp                : yes
flags             : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr syscall mmxext 3dnowext 3dnow
bogomips          : 1808.79

Les valeurs communes à toutes les plates-formes sont cpu qui fournit le type de processeur et bogomips qui est une valeur générique calculée au moment du lancement du noyau.

devices : Liste des différents périphériques présents classés par groupe (caractère et bloc).
dma : Liste des canaux dma (Direct Memory Access) en cours d'utilisation.
filesystems : Liste des systèmes de fichiers supportés par le noyau actuel.
interrupts : Liste des interruptions (IRQ) utilisées par les périphériques. Pour l'architecture i386, le fichier est l'un des plus clair.

           CPU0       
  0:   14921090          XT-PIC  timer
  1:     251478          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  5:    1868812          XT-PIC  eth0
  6:         16          XT-PIC  floppy
  7:          1          XT-PIC  parport0
  8:          1          XT-PIC  rtc
 10:      24416          XT-PIC  es1371
 11:    1289916          XT-PIC  eth1
 12:    5086013          XT-PIC  PS/2 Mouse
 14:     179068          XT-PIC  ide0
 15:      28198          XT-PIC  ide1
NMI:          0 
ERR:          0

On retrouve ici les informations sur les périphériques et le nombre d'appels à leur IRQ (ex: 16 appels au lecteur de disquettes, IRQ 6).

ioports : Liste des adresses d'entrée / sortie utilisées par les périphériques.

0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial(set)
0376-0376 : ide1
0378-037a : parport0
03c0-03df : vga+
03f0-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial(set)
0778-077a : parport0
0cf8-0cff : PCI conf1
8000-803f : Promise Technology, Inc. 20265
  8000-8007 : ide2
  8008-800f : ide3
  8010-803f : PDC20265
8400-8403 : Promise Technology, Inc. 20265
8800-8807 : Promise Technology, Inc. 20265
9000-9003 : Promise Technology, Inc. 20265
9400-9407 : Promise Technology, Inc. 20265
9800-987f : 3Com Corporation 3c905B 100BaseTX [Cyclone]
  9800-987f : eth1
a000-a03f : Ensoniq ES1371 [AudioPCI-97]
  a000-a03f : es1371
a400-a47f : 3Com Corporation 3c905C-TX [Fast Etherlink]
  a400-a47f : eth0
d800-d80f : VIA Technologies, Inc. Bus Master IDE
  d800-d807 : ide0
  d808-d80f : ide1
e400-e4ff : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI]
e800-e80f : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI]

On constate la présence des deux ports séries (serial), deux cartes réseau (eth0 et 1), une carte son (es1371), et notre lecteur de disquettes, configuré en adresse 3f0 IRQ 6.

kcore : Ce fichier représente la mémoire physique du système. Grâce à ce fichier et à une image du noyau non compressé, l'utilitaire gdb peut être utilisé pour débugger le noyau. La taille de ce fichier est égale à la mémoire physique plus 4 ko. Nous vous déconseillons donc de tenter d'afficher ce fichier ou de l'imprimer.
kmsg : Ce fichier contient les logs des différents appels au noyau. Il faut avoir les privilèges root pour en lire le contenu. De plus, si le système utilise syslog, le fichier n'est pas lisible, car un seul programme à la fois est autorisé à le lire. Ne vous inquiétez donc pas si un cat /proc/kmsg ne vous retourne rien.
ksyms : Liste des définitions de symboles utilisés pour le chargement dynamique des modules.
malloc : Ce fichier n'existe sans doute pas sur votre système. Il n'est présent que si CONFIGDEBUGMALLOC est défini durant la compilation du noyau.
meminfo : Informations sur la mémoire utilisée par exemple par le programme free. Il contient des informations sur la mémoire totale, utilisée, libre, etc. Ces informations sont données pour la mémoire réelle et le swap. L'unité utilisée est l'octet.
modules : Liste des modules chargés par le système.
pci : Liste des périphériques PCI détectés lors du démarrage du noyau.

PCI devices found:
  Bus  1, device   0, function  0:
    VGA compatible controller: Matrox Graphics, Inc. MGA G400 AGP (rev 4).
      IRQ 11.
      Master Capable.  Latency=64.  Min Gnt=16.Max Lat=32.
      Prefetchable 32 bit memory at 0xe2000000 [0xe3ffffff].
      Non-prefetchable 32 bit memory at 0xe1000000 [0xe1003fff].
      Non-prefetchable 32 bit memory at 0xe0800000 [0xe0ffffff].

Notre carte graphique est donc une Matrox G400 qui utilise l'IRQ 11.

stat : Statistiques du noyau et du système. Ce fichier contient plusieurs données :

  • cpu 512273 14564554 131382 39892 : nombre de 100 ième de seconde que le système a utilisé respectivement en mode utilisateur, en mode utilisateur avec faible priorité, en mode système, et à ne rien faire.
  • page 279686 572128 : nombre de pages mémoire en entrée et en sortie.
  • swap 1 169 : nombre de pages swap en entrée et en sortie.
  • intr 24137483 15248101 263897 ... : nombre d'interruptions reçues par le système au démarrage.
  • btime 981792279 : temps de fonctionnement en secondes depuis le 1er janvier 1970.

    uptime : Ce fichier contient deux chiffres, le temps écoulé depuis le démarrage et le temps passé à ne rien faire.
    version : Ce fichier contient les informations sur la version du noyau en cours d'utilisation.

    Linux version 2.4.1 (root@darthmaul) (gcc version 2.95.3 20010125 (prerelease)) #1 sam fév 3 03:47:30 CET 2001

    Les répertoires dans /proc

    Lorsque vous jetez un oeil au nom des sous-répertoires de /proc et que vous les comparez à ce que vous affiche la commande ps x, vous constatez qu'ils correspondent parfaitement. L'explication est simple, le système créé automatiquement un répertoire dans /proc pour chaque processus en cours. Dans chacun de ces répertoires, vous trouverez les fichiers suivants :

    cmdline : ligne de commande par laquelle le processus a été lancé.
    cwm : le répertoire courant du processus.
    environ : environnement du processus. Pour afficher ce fichier de manière lisible, tapez (cat /proc/627/environ; echo) | tr "\000" "\n". Ceci permet d'afficher environ pour le processus 627 en remplaçant les caractères nul par un retour à la ligne.
    exe : pointeur vers le binaire exécuté. Il s'agit d'un lien symbolique au format [périphérique]:inoeud
    fd : il s'agit d'un répertoire contenant une entrée par fichier ouvert par le processus. De la même manière que exe, il s'agit de liens symboliques vers les fichiers ouverts.
    maps : plages mémoires utilisées par le processus selon le format : adresses, permissions, offset, périphérique et inoeud. Les permissions peuvent être : lecture (r), écriture (w), exécution (x), partagés (s) et/ou privé (p). Le périphérique est donné au format majeur : mineur.

    Plus d'informations

    Nous venons de voir la partie la plus intéressante de /proc. Grâce à ces informations, il est possible de connaître les principales informations que fournit le noyau. Mais nous avons passé bon nombre de fichiers. Consultez la man page de proc (5) pour en apprendre d'avantage et pourquoi pas vous écrire un logiciel présentant ces informations de manière plus conviviale en temps réel.

    Linux Magazine France n° 3 - Février 99