“操作系统实验”实验报告

proc文件系统的实现

实验名称:proc文件系统的实现

实验日期:2021.7.8

班级:物联网193

姓名:潘峰浩

学号:1930110720

一、实验目的

  • 掌握虚拟文件系统的实现原理;
  • 实践文件、目录、文件系统等概念。

二、实验环境

  • oslab虚拟环境
  • 实验楼

三、实验内容

在 Linux 0.11 上实现 procfs(proc 文件系统)内的 psinfo 结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。例如,用 cat 命令显示 /proc/psinfo 的内容,可得到:

cat/proc/psinfopidstatefathercounterstarttime01100110281411173311276360412817copy 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 copy cat /proc/hdinfo total_blocks: 62000; free_blocks: 39037; used_blocks: 22963; ... copy procfs 及其结点要在内核启动时自动创建。 相关功能实现在 fs/proc.c 文件内。

四、实验过程及数据记录

  • 先进行环境准备 图片描述

  • 修改include/sys/stat.h文件 图片描述

  • 对fs/namei.c文件中sys_mknod()函数进行修改,在其中增加关于proc文件系统的判断。 图片描述

  • 修改init/main.c文件 建立proc文件节点需要调用系统调用mkdir和mknod,因为在初始化时在用户态,不能直接调用,需要在初始化代码文件中实现这两个系统调用的接口。 图片描述 图片描述

  • 修改fs/read_write.c文件

    • 修改fs/read_write.c,添加extern,表示proc_read函数是从外部调用的,使proc文件可读 图片描述

    • 在sys_read函数中仿照其他if语句,加上S_IFPROC()的分支,添加对proc文件的proc_read()调用 图片描述

  • 新增fs/proc.c文件 图片描述

  • 修改fs/Makefile文件 图片描述

  • 进行make all编译并运行 图片描述 图片描述

五、实验问题分析

1、如果要求你在 psinfo 之外再实现另一个结点,具体内容自选,那么你会实现一个给出什么信息的结点?为什么?
答:内存使用信息情况。内存是整个系统中最重要的资源,系统运行靠内存支持,能及时了解内存的使用情况是非常重要并且有意义的。

2、一次 read() 未必能读出所有的数据,需要继续 read(),直到把数据读空为止。而数次 read() 之间,进程的状态可能会发生变化。你认为后几次 read() 传给用户的数据,应该是变化后的,还是变化前的? + 如果是变化后的,那么用户得到的数据衔接部分是否会有混乱?如何防止混乱? + 如果是变化前的,那么该在什么样的情况下更新 psinfo 的内容?
答:后几次read()传递给用户的数据应该是变化之前的,因为读完一部分数据之后,之前读取的进程状态信息可能已经改变了,那么读给proc_buf缓冲区的内容还是读之前的,所以可能导致读到的数据出现混乱。要防止混乱,可以将取到的进程信息保存在硬盘的一个文件中,从该文件中直接读取,不需要每次read都重新生成进程信息,读完一次后就将硬盘上文件删除。

六、实验心得

    这次实验是proc文件系统的实现,并不复杂,但是花了较长时间完成。实验过程中查阅了老师所发的参考文件以及各个技术网站。整个过程还算顺利。而通过这次实验我了解了虚拟文件系统的实现原理;掌握了实践文件、目录、文件系统等概念。收获很多,但是还需要加以理解,真正掌握。
copy
最新评论
暂无评论~