实验日期:2021.7.7
班级:软嵌192
姓名:冯子正
学号:1930110817
一、实验目的
二、实验环境
hit-oslab 实验环境
三、实验内容 在 Linux 0.11 上实现 procfs(proc 文件系统)内的 psinfo 结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。 procfs 及其结点要在内核启动时自动创建。
相关功能实现在 fs/proc.c 文件内。
四、实验过程及数据记录
1.修改include/sys/stat.h文件
增加新文件类型,在此文件内新增proc文件的宏定义以及测试宏。
2.修改namei.c文件
文件/proc/psinfo以及/proc/hdinfo索引节点需要通过mknod()系统调用建立,这里需要让它支持新的文件类型。可直接修改fs/namei.c文件中的sys_mknod()函数的一行代码,在其中增加关于proc文件系统的判断:
3.修改init/main.c文件
main()函数在init后直接挂载了根文件系统,挂载之后就可以创建proc文件了,首先创建/proc文件目录,然后再建立该目录下的各个proc文件节点。在建立这些节点和目录时需要调用系统调用mkdir和mknod,因为初始化时在用户态了,所以不能直接调用,必须在初始化代码所在的文件中实现这两个系统调用的用户态接口。修改init/main.c,新增两个系统调用用户接口并接着修改init函数实现对其的调用:
4.修改fs/read_write.c文件
为了让proc文件可读,修改fs/read_write.c添加extern,表示proc_read函数是从外部调用的。
然后在sys_read函数中仿照其他if语句,加上 S_IFPROC() 的分支,添加proc文件的proc_read()调用:
需要传给处理函数的参数包括:
5.新增/fs/proc.c文件
proc文件的处理函数的功能是根据设备编号,把不同的内容写入到用户空间的buf。写入的数据要从 f_pos 指向的位置开始,每次最多写count个字节,并根据实际写入的字节数调整 f_pos 的值,最后返回实际写入的字节数。当设备编号表明要读的是psinfo的内容时,就要按照 psinfo 的形式组织数据。在fs目录下新增proc.c文件
6.修改fs/Makefile文件
7.运行验证
重新编译运行linux-0.11
查看psinfo(当前系统进程状态信息)和hdinfo(硬盘信息)的信息,发现符合预期。
五、实验结果分析
能按照题目要求完成所需任务
六、实验心得
proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信。在 proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段.
学习时间 138分钟
操作时间 21分钟
按键次数 296次
实验次数 4次
报告字数 2532字
是否完成 完成