掌握虚拟文件系统的实现原理;
实践文件、目录、文件系统等概念。
###二、实验环境
###三、实验内容
在 Linux 0.11 上实现 procfs(proc 文件系统)内的 psinfo 结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。例如,用 cat 命令显示 /proc/psinfo 的内容,可得到procfs 及其结点要在内核启动时自动创建。相关功能实现在 fs/proc.c 文件内。
###四、实验过程及数据记录
(1)定义一个类型宏 S_IFPROC,其值应在 0010000 到 0100000 之间,但后四位八进制数必须是 0(这是 S_IFMT 的限制,分析测试宏可知原因),而且不能和已有的任意一个 S_IFXXX 相同;
(2)定义一个测试宏 S_ISPROC(m),形式仿照其它的 S_ISXXX(m)
修改 fs/namei.c 文件中的 sys_mknod() 函数中的一行代码
if (S_ISBLK(mode) || S_ISCHR(mode) || S_ISPROC(mode))
inode->i_zone[0] = dev;
// 文件系统初始化
挂载根文件系统:
void init(void)
{
// ……
setup((void *) &drive_info);
// ……
}
1)建立 /proc 目录;建立 /proc 目录下的各个结点。本实验只建立 /proc/psinfo。
(2)建立目录和结点分别需要调用 mkdir() 和 mknod() 系统调用。因为初始化时已经在用户态,所以不能直接调用 sys_mkdir() 和 sys_mknod()。必须在初始化代码所在文件中实现这两个系统调用的用户态接口,即 API
###五、实验结果分析
.最理想的话,就是在进程状态发生改变时立即更新psinfo的内容.可以实现一个相应的中断和中断处理程序,每次进程状态改变且在read着psinfo的内容时,引发中断.中断处理程序专门负责更新相应进程在内核buffer中的状态信息
###六、实验心得
有点难
学习时间 71分钟
操作时间 12分钟
按键次数 21次
实验次数 2次
报告字数 1145字
是否完成 完成