proc文件系统的实现
procfs简介
正式的Linux内核实现了procfs
,它是一个虚拟文件系统,通常被 mount(挂载) 到/proc
目录上,通过虚拟文件和虚拟目录的方式提供访问系统参数的机会,所以有人称它为 “了解系统信息的一个窗口”。
这些虚拟的文件和目录并没有真实地存在在磁盘上,而是内核中各种数据的一种直观表示。虽然是虚拟的,但它们都可以通过标准的系统调用(open()、read()等)
访问。
例如/proc/meminfo
中包含内存使用的信息,可以用 cat 命令显示其内容:
实验内容:在 Linux 0.11 上实现 procfs(proc 文件系统)内的 psinfo 结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。例如,用 cat 命令显示 /proc/psinfo 的内容,可得到
$ cat /proc/psinfo
pid state father counter start_time
0 1 -1 0 0
1 1 0 28 1
4 1 1 1 73
3 1 1 27 63
6 0 4 12 817
$ cat /proc/hdinfo
total_blocks: 62000;
free_blocks: 39037;
used_blocks: 22963;
...
相关功能的实现在fs/proc.c
文件内。
实现思路:建立一种新的文件类型
第一步,新建一个文件类型
在include/sys/stat.h文件中
#define S_IFPROC 0070000
#define S_ISPROC(m) (((m) & S_IFMT) == S_IFPROC)
第二步,修改namei.c文件
在fs/namei.c文件中
//在sys_mkmod()函数中
if(S_ISBLK(mode) || S_ISCHR(mode) || S_ISPROC(mode))
inode->i_zone[0] = dev;
<