Linux ProcFS - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Linux ProcFS

Description:

Based on ideas (and some code) by Darren Senn, but mostly written by yours truly. ... 3:56pm up 4 days, 2:14, 3 users, load average: 0.02, 0.05, 0.02 ... – PowerPoint PPT presentation

Number of Views:33
Avg rating:3.0/5.0
Slides: 27
Provided by: Ker54
Category:
Tags: procfs | darren | grep | linux

less

Transcript and Presenter's Notes

Title: Linux ProcFS


1
Linux ProcFS
  • Daniel Stutz

2
Gliederung
  • Wie alles begann
  • Einführung
  • Motivation
  • Merkmale des ProcFS
  • Struktur des ProcFS
  • Operationen
  • ProcFS API
  • Anwendungsbeispiel

3
Wie alles begann
Newsgroups comp.os.linux From
torvalds_at_klaava.Helsinki.FI (Linus Torvalds)
Subject ANNOUNCE linux-0.98 patchlevel 6 Date
Wed, 2 Dec 1992 212446 GMT pl6 contains these
fixes - /proc filesystem extensions. Based
on ideas (and some code) by Darren Senn, but
mostly written by yours truly. More about that
later.
4
Einführung
dstutz_at_newworldordergt uptime 356pm up 4 days,
214, 3 users, load average 0.02, 0.05, 0.02
jiffies ist eine Variable im Kernel-Space, die
alle 10 Millisekunden um 1 erhoeht wird. gt
Zeitmessung seit Systemstart
Wie kommen jiffies vom Kernel- in den Userspace?
Woher bekommt uptime die Informationen?
jiffies
5
Einführung
dstutz_at_newworldordergt cat /proc/uptime 80886.45
80612.17
Jiffies aus einer Datei gelesen! Aktualität?!
6
Einführung
root_at_newworldordergt echo 1
gt/proc/sys/net/ipv4/conf/all/proxy_arp
Wie erfaehrt der Kernel davon?
Aktivieren des ARP Proxies
7
Motivation
  • Bereitstellen von Prozess-Informationen
  • Schnittstelle zu Kernel-Informationen
  • Lesen von Kernelparametern zur Laufzeit
  • Setzen von Kernelparametern zur Laufzeit

8
Merkmale des ProcFS
  • Schnittstelle zum Kernel über das VFS
  • Zugriff auf Kernelinformationen
  • einfach zu erweitern
  • gerätelos, existiert nur im RAM
  • Datei-Inhalte werden erst beim Auslesen erzeugt
  • Darstellung der Informationen als Textdatei
  • von Menschen lesbar (Human Readable Interface)
  • praktische Weiterverarbeitung mit Tools wie grep,
    sed, awk, ...

9
Struktur des ProcFS
/proc
/1/ /2/ /345/ /8777/
  • Zwei Sektionen
  • Prozessinformationen
  • Kernelinformationen

/cmdline /filesystems /sys/ /uptime
10
Struktur des ProcFS
  • Zugriff auf den virtuellen Adreßraum
  • Anzahl der dirty, code
  • and stack pages
  • Virtuellen Adreßbereich (
  • Adresse, Zugriffsrechte,
  • Offset in der gemappten Datei,
  • Gerätenummer, Inode, Name)

/proc/(\d)/
  • Prozessinformationen
  • Kommandozeile
  • Arbeitsverzeichnis
  • Umgebungsvariablen
  • Link auf das Executable
  • Dateideskriptoren
  • Dateisystem-Root des Prozesses
  • Prozesseigenschaften

/cmdline /cwd/ /environ /exe /fd/ /maps /mem /root
/stat /statm /status
11
Struktur des ProcFS
/proc/
  • Kernelinformationen
  • Max. Anzahl gleichzeitig geöffneter Dateien
  • Größe des Directory Caches
  • Maximale Anzahl Inodes und Superblöcke
  • Größe des Buffer Device Caches, Anzahl
    gleichzeitig zu schreibender Blöcke, Kontrolle
    des Alters von Blöcken

/cmdline /cpuinfo /filesystems /kcore /self/ /sys
/mem /net /fs /uptime
  • Aktivieren des Page Table Caches
  • Kontrolle des Swapprozesses
  • (Alter, Limits für freien Speicher, ...)
  • Parameter von ICMP, IP, TCP, ARP,
  • Routing, etc.

12
Operationen
Prozess
USER
read()
write()
KERNEL
VFS
/proc
proc_file_read()
proc_file_write()
proc_read()
proc_write()
13
ProcFS API
proc_fs.h struct proc_dir_entry const
char name mode_t mode struct module
owner struct proc_dir_entry next, parent,
subdir read_proc_t read_proc write_proc_t
write_proc
14
ProcFS API
proc_fs.h struct proc_dir_entry
create_proc_entry( const char name, mode_t
mode, struct proc_dir_entry parent ) void
remove_proc_entry( const char name, struct
proc_dir_entry parent )
15
Anwendungsbeispiel
dstutz_at_newworldordergt cat /proc/uptime 80886.45
80612.17
uptime
idletime
16
Anwendungsbeispiel
  • Ziel
  • myuptime ProcFS-Eintrag der Uptime in
    Sekunden ausgiebt.
  • Umsetzung
  • Ein Kernel-Modul das folgendes leistet
  • Neuen ProcFS-Eintrag erzeugen
  • Aktuellen Wert von jiffies ausgeben, wenn
    dieser Eintrag gelesen wird.

17
Anwendungsbeispiel
myuptime.c const char filename
myuptime static int proc_read( char page,
... ) int len unsigned long uptm jiffies
MOD_INC_USE_COUNT len
sprintf(page,"lu.02lu\n",uptm/100,uptm100)
eof 1 MOD_DEC_USE_COUNT return len
18
Anwendungsbeispiel
myuptime.c int init_module() struct
proc_dir_entry infop create_proc_entry(
filename, 0444, (struct
proc_dir_entry ) 0 ) infop-gtowner
THIS_MODULE infop-gtread_proc proc_read
return 0
19
Anwendungsbeispiel
myuptime.c void cleanup_module()
remove_proc_entry(filename, (struct
proc_dir_entry ) 0)
20
Anwendungsbeispiel
root_at_newworldordergt insmod myuptime.o root_at_newwo
rldordergt cat /proc/myuptime 81472.42
uptime
21
Hinter den Kulissen
Prozess
USER
read()
KERNEL
VFS
/proc
proc_file_read()
jiffies
allokiert

Page
proc_read()
81472.42
sprintf(page,)
22
Literatur
  • http//groups.google.com/
  • /usr/src/linux/Documentation/filesystems/proc.txt
  • /usr/src/linux/fs/proc/.c
  • /usr/src/linux/include/linux/proc_fs.h
  • Linux Kernelprogrammierung, M. Beck

23
Sourcen
/ myuptime.c Print out the uptime in
/proc/myuptime / include ltlinux/kernel.hgt incl
ude ltlinux/module.hgt include ltlinux/proc_fs.hgt i
nclude ltasm/atomic.hgt / helper function
/ static int proc_calc_metrics(char page, char
start, off_t off, int count, int eof, int
len) if (len lt offcount) eof 1
start page off len - off
if (lengtcount) len count if
(lenlt0) len 0 return len /
Name of the proc dir entry / static const char
filename "myuptime"
24
Sourcen
/ myuptime.c / static struct proc_dir_entry
infop static int proc_read( char page, char
start, off_t off, int count, int eof, void
data ) int len unsigned long uptime
uptime jiffies / Increment the use
count so that the module can't be removed while
we are in the middle of this call. /
MOD_INC_USE_COUNT / Get the current
time and format it. / len sprintf(page,
"lu.02lu\n",uptime/100,uptime100)
MOD_DEC_USE_COUNT return proc_calc_metrics(pag
e, start, off, count, eof, len)
25
Sourcen
/ myuptime.c Initialize the module and add
the /proc file entry / int init_module()
infop create_proc_entry(filename, 0444, (struct
proc_dir_entry ) 0) if( 0 infop )
return -EINVAL infop-gtowner THIS_MODULE
infop-gtread_proc proc_read infop-gtget_info
NULL return 0 / Unregister the file
when the module is closed / void
cleanup_module() remove_proc_entry(filename,
(struct proc_dir_entry ) 0)
26
Makefile
UNAME2.4.13-ac8 CCgcc -Wall -nostdlib
-I/lib/modules/(UNAME)/build/include
-D__KERNEL__ -DMODULE all myuptime.o myuptime.o
myuptime.c (CC) -c myuptime.c
Write a Comment
User Comments (0)
About PowerShow.com